public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-12-19 12:54 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-12-19 12:54 UTC (permalink / raw
  To: gentoo-commits

commit:     2f65d05125f10b139f2538ff9c2e692479808f62
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 19 12:53:56 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 19 12:53:56 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=2f65d051

Update lustre build for 3.11 for workstations =D

Package-Manager: portage-2.2.7
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   12 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |   10 +-
 ...6-kernel-Kernel-update-for-3.7.2-201.fc18.patch |  169 -
 ...3-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch | 5997 ++++++++++++++++++++
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |  117 -
 ...74-llite-dentry-d_compare-changes-in-3.11.patch |  132 +
 ...79-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch |   82 -
 ...-LU-3974-llite-use-new-struct-dir_context.patch |  276 +
 ...-LU-3974-llite-invalidatepage-api-changed.patch |  134 +
 sys-cluster/lustre/lustre-9999.ebuild              |   20 +-
 10 files changed, 6560 insertions(+), 389 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index b769d9b..69315ef 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,18 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,
+  +files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch,
+  +files/0004-LU-3974-llite-use-new-struct-dir_context.patch,
+  +files/0005-LU-3974-llite-invalidatepage-api-changed.patch,
+  -files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  -files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  lustre-9999.ebuild:
+  Update lustre build for 3.11 for workstations =D
+
   11 Jul 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   +files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index a5af8be..2b3fa1a 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From e4b7000ba2dde158a990130bcaee91256255c280 Mon Sep 17 00:00:00 2001
+From a607b37a64f797b766825ccb6f41176685cd843f Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 1/4] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 1/5] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -14,10 +14,10 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  1 file changed, 58 insertions(+), 8 deletions(-)
 
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index 95d20e2..de9df76 100644
+index b1ec10e..4a835ea 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
-@@ -365,14 +365,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -394,14 +394,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],
@@ -91,5 +91,5 @@ index 95d20e2..de9df76 100644
  #
  # LB_LINUX_TRY_COMPILE
 -- 
-1.8.2.1
+1.8.5.1
 

diff --git a/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
deleted file mode 100644
index 8e02095..0000000
--- a/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ /dev/null
@@ -1,169 +0,0 @@
-From 1359b3ff29d39aae651457e39942b5ff61092d6c Mon Sep 17 00:00:00 2001
-From: yangsheng <yang.sheng@intel.com>
-Date: Wed, 10 Jul 2013 13:52:41 +0800
-Subject: [PATCH 2/4] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
-
-Add uapi header to include search path
-
-Signed-off-by: yang sheng <yang.sheng@intel.com>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Id90e091fef63ebf5bb8e7765969aa3148cc31aa2
----
- autoMakefile.am                 |  2 +-
- config/lustre-build-linux.m4    | 19 ++++++++++++-------
- ldiskfs/config/ldiskfs-build.m4 | 20 +++++++++++++-------
- lustre/scripts/version_tag.pl   |  4 +++-
- 4 files changed, 29 insertions(+), 16 deletions(-)
-
-diff --git a/autoMakefile.am b/autoMakefile.am
-index 9b6dcfd..71d8db4 100644
---- a/autoMakefile.am
-+++ b/autoMakefile.am
-@@ -84,7 +84,7 @@ all-am: modules
- modules: $(DEP) all-sources
- 	$(MAKE) CC="$(CC)" $(CROSS_VARS) -C $(LINUX_OBJ)	     \
- 	-f $(PWD)/build/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) \
--	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
-+	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
- 	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
- 	include/config/MARKER $@
- endif # LINUX
-diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index de9df76..8849f14 100644
---- a/config/lustre-build-linux.m4
-+++ b/config/lustre-build-linux.m4
-@@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
- if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/utsrelease.h ; then
- 	LINUXRELEASEHEADER=$AUTOCONF_HDIR/utsrelease.h
- else
--	LINUXRELEASEHEADER=linux/version.h
-+	LINUXRELEASEHEADER=$VERSION_HDIR/version.h
- fi
- LB_LINUX_TRY_MAKE([
- 	#include <$LINUXRELEASEHEADER>
-@@ -65,7 +65,7 @@ LB_LINUX_TRY_MAKE([
- rm -f build/conftest.i
- if test x$LINUXRELEASE = x ; then
- 	AC_MSG_RESULT([unknown])
--	AC_MSG_ERROR([Could not determine Linux release version from linux/version.h.])
-+	AC_MSG_ERROR([Could not determine Linux release version from $LINUXRELEASEHEADER.])
- fi
- AC_MSG_RESULT([$LINUXRELEASE])
- AC_SUBST(LINUXRELEASE)
-@@ -96,7 +96,7 @@ AC_SUBST(RELEASE)
- # check is redhat/suse kernels
- AC_MSG_CHECKING([that RedHat kernel])
- LB_LINUX_TRY_COMPILE([
--		#include <linux/version.h>
-+		#include <$VERSION_HDIR/version.h>
- 	],[
- 		#ifndef RHEL_RELEASE_CODE
- 		#error "not redhat kernel"
-@@ -222,8 +222,12 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
-         [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
- 	[AC_MSG_ERROR([Run make config in $LINUX.])])])
-         AC_SUBST(AUTOCONF_HDIR)
--LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
--	[AC_MSG_ERROR([Run make config in $LINUX.])])
-+LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
-+	[LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
-+		[VERSION_HDIR=generated/uapi/linux],
-+		[AC_MSG_ERROR([Run make config in $LINUX.])])
-+	])
-+	AC_SUBST(VERSION_HDIR)
- 
- # ----------- kconfig.h exists ---------------
- # kernel 3.1, $LINUX/include/linux/kconfig.h is added
-@@ -240,7 +244,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
- # tarred up the tree and ran make dep etc. in it, then
- # version.h gets overwritten with a standard linux one.
- 
--if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
-+if grep rhconfig $LINUX_OBJ/include/$VERSION_HDIR/version.h >/dev/null ; then
- 	# This is a clean kernel-source tree, we need to
- 	# enable extensive workarounds to get this to build
- 	# modules
-@@ -352,7 +356,8 @@ $2
- AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
- [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
- rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
--AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
-+SUBARCH=$(echo $target_cpu | sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/')
-+AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
- 	[$4],
- 	[_AC_MSG_LOG_CONFTEST
- m4_ifvaln([$5],[$5])dnl])
-diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
-index 38fce59..8a00872 100644
---- a/ldiskfs/config/ldiskfs-build.m4
-+++ b/ldiskfs/config/ldiskfs-build.m4
-@@ -1,9 +1,9 @@
- AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
- 	AC_MSG_CHECKING([kernel source version])
- 
--	utsrelease1=${LINUX_OBJ}/include/linux/version.h
-+	utsrelease1=${LINUX_OBJ}/include/generated/utsrelease.h
- 	utsrelease2=${LINUX_OBJ}/include/linux/utsrelease.h
--	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
-+	utsrelease3=${LINUX_OBJ}/include/linux/version.h
- 	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
- 		utsrelease=${utsrelease1}
- 	], [test -r ${utsrelease2} && fgrep -q UTS_RELEASE ${utsrelease2}], [
-@@ -60,10 +60,10 @@ AC_SUBST(RELEASE)
- 
- # check is redhat/suse kernels
- AC_MSG_CHECKING([for RedHat kernel version])
--	AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/linux/version.h], [
-+	AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/$VERSION_HDIR/version.h], [
- 		RHEL_KERNEL="yes"
- 		RHEL_RELEASE=$(expr 0$(awk -F \" '/ RHEL_RELEASE / { print [$]2 }' \
--		               ${LINUX_OBJ}/include/linux/version.h) + 1)
-+		               ${LINUX_OBJ}/include/$VERSION_HDIR/version.h) + 1)
- 		KERNEL_VERSION=$(sed -e 's/\(@<:@23@:>@\.@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/' <<< ${LINUXRELEASE})
- 		RHEL_KERNEL_VERSION=${KERNEL_VERSION}-${RHEL_RELEASE}
- 		AC_SUBST(RHEL_KERNEL_VERSION)
-@@ -184,8 +184,14 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
-         [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
- 	[AC_MSG_ERROR([Run make config in $LINUX.])])])
-         AC_SUBST(AUTOCONF_HDIR)
--LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
--	[AC_MSG_ERROR([Run make config in $LINUX.])])
-+LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
-+       [LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
-+	       [VERSION_HDIR=generated/uapi/linux],
-+	       [AC_MSG_ERROR([Run make config in $LINUX.])])
-+       ])
-+       AC_SUBST(VERSION_HDIR)
-+
-+
- 
- # ----------- kconfig.h exists ---------------
- # kernel 3.1, $LINUX/include/linux/kconfig.h is added
-@@ -202,7 +208,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
- # tarred up the tree and ran make dep etc. in it, then
- # version.h gets overwritten with a standard linux one.
- 
--if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
-+if grep rhconfig $LINUX_OBJ/include/$VERSION_HDIR/version.h >/dev/null ; then
- 	# This is a clean kernel-source tree, we need to
- 	# enable extensive workarounds to get this to build
- 	# modules
-diff --git a/lustre/scripts/version_tag.pl b/lustre/scripts/version_tag.pl
-index 61796c9..4d2bb4a 100644
---- a/lustre/scripts/version_tag.pl
-+++ b/lustre/scripts/version_tag.pl
-@@ -43,8 +43,10 @@ sub get_kernver($$)
-     my $objdir = shift;
- 
-     my $ver = new IO::File;
--    if (!$ver->open("$objdir/include/linux/utsrelease.h") &&
-+    if (!$ver->open("$objdir/include/generated/utsrelease.h") &&
-+	!$ver->open("$objdir/include/linux/utsrelease.h") &&
-         !$ver->open("$objdir/include/linux/version.h") &&
-+	!$ver->open("$dir/include/generated/utsrelease.h") &&
-         !$ver->open("$dir/include/linux/utsrelease.h") &&
-         !$ver->open("$dir/include/linux/version.h")) {
-             die "Run make dep on '$dir'\n";
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
new file mode 100644
index 0000000..473d378
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
@@ -0,0 +1,5997 @@
+From e53207df22261a635315a62f1405eb8c7b700963 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 5 Dec 2013 09:05:22 -0500
+Subject: [PATCH 2/5] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
+
+ldiskfs patches
+
+Signed-off-by: yang sheng <yang.sheng@intel.com>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I59a8e7086c4567f1fe493ac7f0086365b5a6535c
+---
+ config/lustre-build-ldiskfs.m4                     |   15 +-
+ config/lustre-build-linux.m4                       |   12 +-
+ .../fc19/ext4-change-entry-avoid-conflict.patch    |   71 +
+ .../patches/fc19/ext4-disable-mb-cache.patch       |  150 ++
+ .../kernel_patches/patches/fc19/ext4-fiemap.patch  |  111 +
+ .../patches/fc19/ext4-force_over_128tb.patch       |   57 +
+ .../patches/fc19/ext4-inode-version.patch          |   59 +
+ .../patches/fc19/ext4-kill-dx_root.patch           |  235 ++
+ .../patches/fc19/ext4-large-eas.patch              |  785 +++++++
+ .../patches/fc19/ext4-lookup-dotdot.patch          |   37 +
+ .../patches/fc19/ext4-max-dir-size.patch           |   44 +
+ .../patches/fc19/ext4-mballoc-extra-checks.patch   |  315 +++
+ .../fc19/ext4-mballoc-pa_free-mismatch.patch       |  109 +
+ .../kernel_patches/patches/fc19/ext4-misc.patch    |  193 ++
+ .../patches/fc19/ext4-nocmtime.patch               |   28 +
+ .../patches/fc19/ext4-osd-iam-exports.patch        |   56 +
+ .../patches/fc19/ext4-osd-iop-common.patch         |  135 ++
+ .../patches/fc19/ext4-pdir-fix.patch               |   61 +
+ .../patches/fc19/ext4-prealloc.patch               |  387 ++++
+ .../patches/fc19/ext4_data_in_dirent.patch         |  649 ++++++
+ .../kernel_patches/patches/fc19/ext4_pdirop.patch  | 2252 ++++++++++++++++++++
+ .../kernel_patches/series/ldiskfs-3.x-fc19.series  |   22 +
+ 22 files changed, 5781 insertions(+), 2 deletions(-)
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch
+ create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch
+ create mode 100644 ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series
+
+diff --git a/config/lustre-build-ldiskfs.m4 b/config/lustre-build-ldiskfs.m4
+index 4b15de3..c979bab 100644
+--- a/config/lustre-build-ldiskfs.m4
++++ b/config/lustre-build-ldiskfs.m4
+@@ -9,7 +9,7 @@ AS_IF([test x$RHEL_KERNEL = xyes], [
+ 	AS_VERSION_COMPARE([$RHEL_KERNEL_VERSION],[2.6.32],[],
+ 	[SER="2.6-rhel6.series"],[SER="2.6-rhel6.series"])],
+ 	[SER="2.6-rhel6.4.series"],[SER="2.6-rhel6.4.series"])
+-], [test x$SUSE_KERNEL = xyes], [
++], [ AS_IF([test x$SUSE_KERNEL = xyes], [
+ 	AS_VERSION_COMPARE([$LINUXRELEASE],[3.0.0],[
+ 	AS_VERSION_COMPARE([$LINUXRELEASE],[2.6.32],[],
+ 	[SER="2.6-sles11.series"],[SER="2.6-sles11.series"])],
+@@ -22,6 +22,19 @@ AS_IF([test x$RHEL_KERNEL = xyes], [
+ 			;;
+ 		esac
+ 	])
++], [ AS_IF([test x$FEDORA_KERNEL = xyes], [
++	AS_VERSION_COMPARE([$LINUXRELEASE],[3.11],[],
++	[SER="3.x-fc19.series"],[SER="3.x-fc19.series"])
++])
++])
++])
++
++#
++# Handle the case were someone uses their own kernel
++#
++AS_IF([test -z "$SER"], [
++	AS_VERSION_COMPARE([$LINUXRELEASE],[3.11],[],
++	[SER="3.x-fc19.series"],[SER="3.x-fc19.series"])
+ ])
+ LDISKFS_SERIES=$SER
+ 
+diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
+index 4a835ea..9afda9c 100644
+--- a/config/lustre-build-linux.m4
++++ b/config/lustre-build-linux.m4
+@@ -109,7 +109,16 @@ AC_MSG_CHECKING([for RedHat kernel version])
+ 		AC_MSG_RESULT([${RHEL_KERNEL_VERSION}])
+ 	], [
+ 		AC_MSG_RESULT([not found])
+-		LB_LINUX_CONFIG([SUSE_KERNEL],[SUSE_KERNEL="yes"],[])
++		LB_LINUX_CONFIG([SUSE_KERNEL],[SUSE_KERNEL="yes"],[
++			AC_MSG_CHECKING([for Fedora 19 kernel])
++			AS_IF([test "$(echo $LINUXRELEASE | grep fc19)" == "$LINUXRELEASE" ],[
++				AC_MSG_RESULT([yes])
++				FEDORA_KERNEL="yes"
++			], [
++				FEDORA_KERNEL="no"
++				AC_MSG_RESULT([no])
++			])
++		])
+ 	])
+ 
+ AC_MSG_CHECKING([for kernel module package directory])
+@@ -118,6 +127,7 @@ AC_ARG_WITH([kmp-moddir],
+ 		       [set the kmod updates or extra directory]),
+ 	[KMP_MODDIR=$withval],[
+ 	AS_IF([test x$RHEL_KERNEL = xyes], [KMP_MODDIR="extra"],
++	      [test x$FEDORA_KERNEL = xyes], [KMP_MODDIR="extra"],
+ 	      [test x$SUSE_KERNEL = xyes], [KMP_MODDIR="updates"])])
+ 
+ AC_MSG_RESULT($KMP_MODDIR)
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch
+new file mode 100644
+index 0000000..b1e4b9f
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch
+@@ -0,0 +1,71 @@
++Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.c
++===================================================================
++--- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/xattr.c
+++++ linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.c
++@@ -945,7 +945,7 @@ ext4_xattr_set_entry(struct ext4_xattr_i
++ 		if (!i->value) {
++ 			/* Remove the old name. */
++ 			size_t size = EXT4_XATTR_LEN(name_len);
++-			last = ENTRY((void *)last - size);
+++			last = XA_ENTRY((void *)last - size);
++ 			memmove(s->here, (void *)s->here + size,
++ 				(void *)last - (void *)s->here + sizeof(__u32));
++ 			memset(last, 0, size);
++@@ -1086,9 +1086,9 @@ ext4_xattr_block_set(handle_t *handle, s
++ 			if (s->base == NULL)
++ 				goto cleanup;
++ 			memcpy(s->base, BHDR(bs->bh), bs->bh->b_size);
++-			s->first = ENTRY(header(s->base)+1);
+++			s->first = XA_ENTRY(header(s->base)+1);
++ 			header(s->base)->h_refcount = cpu_to_le32(1);
++-			s->here = ENTRY(s->base + offset);
+++			s->here = XA_ENTRY(s->base + offset);
++ 			s->end = s->base + bs->bh->b_size;
++ 		}
++ 	} else {
++@@ -1101,8 +1101,8 @@ ext4_xattr_block_set(handle_t *handle, s
++ 		header(s->base)->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
++ 		header(s->base)->h_blocks = cpu_to_le32(1);
++ 		header(s->base)->h_refcount = cpu_to_le32(1);
++-		s->first = ENTRY(header(s->base)+1);
++-		s->here = ENTRY(header(s->base)+1);
+++		s->first = XA_ENTRY(header(s->base)+1);
+++		s->here = XA_ENTRY(header(s->base)+1);
++ 		s->end = s->base + sb->s_blocksize;
++ 	}
++ 
++@@ -1884,8 +1884,8 @@ ext4_xattr_cmp(struct ext4_xattr_header
++ {
++ 	struct ext4_xattr_entry *entry1, *entry2;
++ 
++-	entry1 = ENTRY(header1+1);
++-	entry2 = ENTRY(header2+1);
+++	entry1 = XA_ENTRY(header1+1);
+++	entry2 = XA_ENTRY(header2+1);
++ 	while (!IS_LAST_ENTRY(entry1)) {
++ 		if (IS_LAST_ENTRY(entry2))
++ 			return 1;
++@@ -2011,7 +2011,7 @@ static void ext4_xattr_rehash(struct ext
++ 	__u32 hash = 0;
++ 
++ 	ext4_xattr_hash_entry(header, entry);
++-	here = ENTRY(header+1);
+++	here = XA_ENTRY(header+1);
++ 	while (!IS_LAST_ENTRY(here)) {
++ 		if (!here->e_hash) {
++ 			/* Block is not shared if an entry's hash value == 0 */
++Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.h
++===================================================================
++--- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/xattr.h
+++++ linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.h
++@@ -77,8 +77,8 @@ struct ext4_xattr_entry {
++ 	((b) - EXT4_XATTR_LEN(3) - sizeof(struct ext4_xattr_header) - 4)
++ 
++ #define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
++-#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
++-#define BFIRST(bh) ENTRY(BHDR(bh)+1)
+++#define XA_ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
+++#define BFIRST(bh) XA_ENTRY(BHDR(bh)+1)
++ #define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
++ 
++ #define EXT4_ZERO_XATTR_VALUE ((void *)-1)
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch
+new file mode 100644
+index 0000000..93a9022
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch
+@@ -0,0 +1,150 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -941,6 +941,7 @@ struct ext4_inode_info {
++ /*
++  * Mount flags set via mount options or defaults
++  */
+++#define EXT4_MOUNT_NO_MBCACHE		0x00001 /* Disable mbcache */
++ #define EXT4_MOUNT_GRPID		0x00004	/* Create files with directory's group */
++ #define EXT4_MOUNT_DEBUG		0x00008	/* Some debugging messages */
++ #define EXT4_MOUNT_ERRORS_CONT		0x00010	/* Continue on errors */
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -1152,6 +1152,7 @@ enum {
++ 	Opt_inode_readahead_blks, Opt_journal_ioprio,
++ 	Opt_mballoc, Opt_force_over_128tb,
++ 	Opt_dioread_nolock, Opt_dioread_lock,
+++	Opt_no_mbcache,
++ 	Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
++ 	Opt_max_dir_size_kb,
++ };
++@@ -1230,6 +1231,7 @@ static const match_table_t tokens = {
++ 	{Opt_discard, "discard"},
++ 	{Opt_nodiscard, "nodiscard"},
++ 	{Opt_init_itable, "init_itable=%u"},
+++	{Opt_no_mbcache, "no_mbcache"},
++ 	{Opt_init_itable, "init_itable"},
++ 	{Opt_noinit_itable, "noinit_itable"},
++ 	{Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
++@@ -1389,6 +1391,7 @@ static const struct mount_opts {
++ 	{Opt_noauto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_SET},
++ 	{Opt_auto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_CLEAR},
++ 	{Opt_noinit_itable, EXT4_MOUNT_INIT_INODE_TABLE, MOPT_CLEAR},
+++	{Opt_no_mbcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
++ 	{Opt_commit, 0, MOPT_GTE0},
++ 	{Opt_max_batch_time, 0, MOPT_GTE0},
++ 	{Opt_min_batch_time, 0, MOPT_GTE0},
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
++@@ -81,7 +81,8 @@
++ # define ea_bdebug(bh, fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
++ #endif
++ 
++-static void ext4_xattr_cache_insert(struct buffer_head *);
+++static void ext4_xattr_cache_insert(struct super_block *,
+++				    struct buffer_head *);
++ static struct buffer_head *ext4_xattr_cache_find(struct inode *,
++ 						 struct ext4_xattr_header *,
++ 						 struct mb_cache_entry **);
++@@ -385,7 +386,7 @@ bad_block:
++ 		error = -EIO;
++ 		goto cleanup;
++ 	}
++-	ext4_xattr_cache_insert(bh);
+++	ext4_xattr_cache_insert(inode->i_sb, bh);
++ 	entry = BFIRST(bh);
++ 	error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1,
++ 				      inode);
++@@ -546,7 +547,7 @@ ext4_xattr_block_list(struct dentry *den
++ 		error = -EIO;
++ 		goto cleanup;
++ 	}
++-	ext4_xattr_cache_insert(bh);
+++	ext4_xattr_cache_insert(inode->i_sb, bh);
++ 	error = ext4_xattr_list_entries(dentry, BFIRST(bh), buffer, buffer_size);
++ 
++ cleanup:
++@@ -643,7 +644,9 @@ ext4_xattr_release_block(handle_t *handl
++ 	struct mb_cache_entry *ce = NULL;
++ 	int error = 0;
++ 
++-	ce = mb_cache_entry_get(ext4_xattr_cache, bh->b_bdev, bh->b_blocknr);
+++	if (!test_opt(inode->i_sb, NO_MBCACHE))
+++		ce = mb_cache_entry_get(ext4_xattr_cache, bh->b_bdev,
+++					bh->b_blocknr);
++ 	error = ext4_journal_get_write_access(handle, bh);
++ 	if (error)
++ 		goto out;
++@@ -1037,8 +1040,10 @@ ext4_xattr_block_set(handle_t *handle, s
++ #define header(x) ((struct ext4_xattr_header *)(x))
++ 
++ 	if (s->base) {
++-		ce = mb_cache_entry_get(ext4_xattr_cache, bs->bh->b_bdev,
++-					bs->bh->b_blocknr);
+++		if (!test_opt(inode->i_sb, NO_MBCACHE))
+++			ce = mb_cache_entry_get(ext4_xattr_cache,
+++						bs->bh->b_bdev,
+++						bs->bh->b_blocknr);
++ 		error = ext4_journal_get_write_access(handle, bs->bh);
++ 		if (error)
++ 			goto cleanup;
++@@ -1055,7 +1060,7 @@ ext4_xattr_block_set(handle_t *handle, s
++ 				if (!IS_LAST_ENTRY(s->first))
++ 					ext4_xattr_rehash(header(s->base),
++ 							  s->here);
++-				ext4_xattr_cache_insert(bs->bh);
+++				ext4_xattr_cache_insert(sb, bs->bh);
++ 			}
++ 			unlock_buffer(bs->bh);
++ 			if (error == -EIO)
++@@ -1138,7 +1143,8 @@ inserted:
++ 				if (error)
++ 					goto cleanup_dquot;
++ 			}
++-			mb_cache_entry_release(ce);
+++			if (ce)
+++				mb_cache_entry_release(ce);
++ 			ce = NULL;
++ 		} else if (bs->bh && s->base == bs->bh->b_data) {
++ 			/* We were modifying this block in-place. */
++@@ -1191,7 +1197,7 @@ getblk_failed:
++ 			memcpy(new_bh->b_data, s->base, new_bh->b_size);
++ 			set_buffer_uptodate(new_bh);
++ 			unlock_buffer(new_bh);
++-			ext4_xattr_cache_insert(new_bh);
+++			ext4_xattr_cache_insert(sb, new_bh);
++ 			error = ext4_handle_dirty_xattr_block(handle,
++ 							      inode, new_bh);
++ 			if (error)
++@@ -1837,12 +1843,15 @@ ext4_xattr_put_super(struct super_block
++  * Returns 0, or a negative error number on failure.
++  */
++ static void
++-ext4_xattr_cache_insert(struct buffer_head *bh)
+++ext4_xattr_cache_insert(struct super_block *sb, struct buffer_head *bh)
++ {
++ 	__u32 hash = le32_to_cpu(BHDR(bh)->h_hash);
++ 	struct mb_cache_entry *ce;
++ 	int error;
++ 
+++	if (test_opt(sb, NO_MBCACHE))
+++		return;
+++
++ 	ce = mb_cache_entry_alloc(ext4_xattr_cache, GFP_NOFS);
++ 	if (!ce) {
++ 		ea_bdebug(bh, "out of memory");
++@@ -1915,6 +1924,8 @@ ext4_xattr_cache_find(struct inode *inod
++ 	__u32 hash = le32_to_cpu(header->h_hash);
++ 	struct mb_cache_entry *ce;
++ 
+++	if (test_opt(inode->i_sb, NO_MBCACHE))
+++		return NULL;
++ 	if (!header->h_hash)
++ 		return NULL;  /* never share */
++ 	ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch
+new file mode 100644
+index 0000000..11d6d93
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch
+@@ -0,0 +1,111 @@
++This patch adds direct EXT4_IOC_FIEMAP support to ldiskfs, for Lustre to call
++without having to go through do_vfs_ioctl() (which isn't exported, and has a
++number of other ioctls which are not suitable for Lustre). The actual FIEMAP
++support is already in the kernel/ext4 for normal usage.
++
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -585,7 +585,7 @@ enum {
++ #define EXT4_IOC_GROUP_ADD		_IOW('f', 8, struct ext4_new_group_input)
++ #define EXT4_IOC_MIGRATE		_IO('f', 9)
++  /* note ioctl 10 reserved for an early version of the FIEMAP ioctl */
++- /* note ioctl 11 reserved for filesystem-independent FIEMAP ioctl */
+++#define EXT4_IOC_FIEMAP			_IOWR('f', 11, struct fiemap)
++ #define EXT4_IOC_ALLOC_DA_BLKS		_IO('f', 12)
++ #define EXT4_IOC_MOVE_EXT		_IOWR('f', 15, struct move_extent)
++ #define EXT4_IOC_RESIZE_FS		_IOW('f', 16, __u64)
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ioctl.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ioctl.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ioctl.c
++@@ -214,6 +214,71 @@ swap_boot_out:
++ 	return err;
++ }
++ 
+++/* So that the fiemap access checks can't overflow on 32 bit machines. */
+++#define FIEMAP_MAX_EXTENTS     (UINT_MAX / sizeof(struct fiemap_extent))
+++
+++static int fiemap_check_ranges(struct super_block *sb,
+++			       u64 start, u64 len, u64 *new_len)
+++{
+++	*new_len = len;
+++
+++	if (len == 0)
+++		return -EINVAL;
+++
+++	if (start > sb->s_maxbytes)
+++		return -EFBIG;
+++
+++	/*
+++	 * Shrink request scope to what the fs can actually handle.
+++	 */
+++	if ((len > sb->s_maxbytes) ||
+++	    (sb->s_maxbytes - len) < start)
+++		*new_len = sb->s_maxbytes - start;
+++
+++	return 0;
+++}
+++
+++int ioctl_fiemap(struct inode *inode, struct file *filp, unsigned long arg)
+++{
+++	struct fiemap fiemap;
+++	u64 len;
+++	struct fiemap_extent_info fieinfo = {0, };
+++	struct super_block *sb = inode->i_sb;
+++	int error = 0;
+++
+++	if (copy_from_user(&fiemap, (struct fiemap __user *) arg,
+++			   sizeof(struct fiemap)))
+++		 return -EFAULT;
+++
+++	if (fiemap.fm_extent_count > FIEMAP_MAX_EXTENTS)
+++		return -EINVAL;
+++
+++	error = fiemap_check_ranges(sb, fiemap.fm_start, fiemap.fm_length,
+++				    &len);
+++	if (error)
+++		return error;
+++
+++	fieinfo.fi_flags = fiemap.fm_flags;
+++	fieinfo.fi_extents_max = fiemap.fm_extent_count;
+++	fieinfo.fi_extents_start = (struct fiemap_extent *)(arg + sizeof(fiemap));
+++
+++	if (fiemap.fm_extent_count != 0 &&
+++	    !access_ok(VERIFY_WRITE, (void *)arg,
+++		       offsetof(typeof(fiemap), fm_extents[fiemap.fm_extent_count])))
+++		return -EFAULT;
+++
+++	if (fieinfo.fi_flags & FIEMAP_FLAG_SYNC)
+++		filemap_write_and_wait(inode->i_mapping);
+++
+++	error = ext4_fiemap(inode, &fieinfo, fiemap.fm_start, len);
+++	fiemap.fm_flags = fieinfo.fi_flags;
+++	fiemap.fm_mapped_extents = fieinfo.fi_extents_mapped;
+++	if (copy_to_user((char *)arg, &fiemap, sizeof(fiemap)))
+++		error = -EFAULT;
+++
+++	return error;
+++}
+++
++ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
++ {
++ 	struct inode *inode = file_inode(filp);
++@@ -532,6 +597,9 @@ group_add_out:
++ 		mnt_drop_write_file(filp);
++ 		return err;
++ 	}
+++	case EXT4_IOC_FIEMAP: {
+++		return ioctl_fiemap(inode, filp, arg);
+++	}
++ 
++ 	case EXT4_IOC_ALLOC_DA_BLKS:
++ 	{
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/fiemap.h
++===================================================================
++--- /dev/null
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/fiemap.h
++@@ -0,0 +1,2 @@
+++
+++#include_next <fiemap.h>
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch
+new file mode 100644
+index 0000000..84e75e5
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch
+@@ -0,0 +1,57 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -60,6 +60,8 @@ static struct ext4_lazy_init *ext4_li_in
++ static struct mutex ext4_li_mtx;
++ static struct ext4_features *ext4_feat;
++ 
+++static int force_over_128tb;
+++
++ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
++ 			     unsigned long journal_devnum);
++ static int ext4_show_options(struct seq_file *seq, struct dentry *root);
++@@ -1146,7 +1148,7 @@ enum {
++ 	Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_mblk_io_submit,
++ 	Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
++ 	Opt_inode_readahead_blks, Opt_journal_ioprio,
++-	Opt_mballoc,
+++	Opt_mballoc, Opt_force_over_128tb,
++ 	Opt_dioread_nolock, Opt_dioread_lock,
++ 	Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
++ 	Opt_max_dir_size_kb,
++@@ -1222,6 +1224,7 @@ static const match_table_t tokens = {
++ 	{Opt_noauto_da_alloc, "noauto_da_alloc"},
++ 	{Opt_dioread_nolock, "dioread_nolock"},
++ 	{Opt_dioread_lock, "dioread_lock"},
+++	{Opt_force_over_128tb, "force_over_128tb"},
++ 	{Opt_discard, "discard"},
++ 	{Opt_nodiscard, "nodiscard"},
++ 	{Opt_init_itable, "init_itable=%u"},
++@@ -1468,6 +1471,9 @@ static int handle_mount_opt(struct super
++ 	case Opt_iopen_nopriv:
++ 	case Opt_mballoc:
++ 		return 1;
+++	case Opt_force_over_128tb:
+++		force_over_128tb = 1;
+++		break;
++ 	}
++ 
++ 	for (m = ext4_mount_opts; m->token != Opt_err; m++)
++@@ -3718,6 +3724,16 @@ static int ext4_fill_super(struct super_
++ 		goto failed_mount;
++ 	}
++ 
+++	if (ext4_blocks_count(es) > (8ULL << 32)) {
+++		if (force_over_128tb == 0) {
+++			printk(KERN_ERR "EXT4-fs does not support filesystems "
+++			       "greater than 128TB and can cause data corruption."
+++			       "Use \"force_over_128tb\" mount option to override."
+++			       "\n");
+++			goto failed_mount;
+++		}
+++	}
+++
++ 	if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
++ 		goto cantfind_ext4;
++ 
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch
+new file mode 100644
+index 0000000..2cae2f0
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch
+@@ -0,0 +1,59 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++@@ -4145,11 +4145,11 @@ struct inode *ext4_iget(struct super_blo
++ 	EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode);
++ 	EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
++ 
++-	inode->i_version = le32_to_cpu(raw_inode->i_disk_version);
+++	ei->i_fs_version = le32_to_cpu(raw_inode->i_disk_version);
++ 	if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
++ 		if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
++-			inode->i_version |=
++-			(__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
+++			ei->i_fs_version |= (__u64)(le32_to_cpu(raw_inode->i_version_hi))
+++									 << 32;
++ 	}
++ 
++ 	ret = 0;
++@@ -4365,11 +4365,11 @@ static int ext4_do_update_inode(handle_t
++ 			raw_inode->i_block[block] = ei->i_data[block];
++ 	}
++ 
++-	raw_inode->i_disk_version = cpu_to_le32(inode->i_version);
+++	raw_inode->i_disk_version = cpu_to_le32(ei->i_fs_version);
++ 	if (ei->i_extra_isize) {
++ 		if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
++-			raw_inode->i_version_hi =
++-			cpu_to_le32(inode->i_version >> 32);
+++			raw_inode->i_version_hi = cpu_to_le32(ei->i_fs_version
+++							      >> 32);
++ 		raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize);
++ 	}
++ 
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ialloc.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
++@@ -899,6 +899,7 @@ got:
++ 	ei->i_dtime = 0;
++ 	ei->i_block_group = group;
++ 	ei->i_last_alloc_group = ~0;
+++	ei->i_fs_version = 0;
++ 
++ 	ext4_set_inode_flags(inode);
++ 	if (IS_DIRSYNC(inode))
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -915,6 +915,8 @@ struct ext4_inode_info {
++ 	tid_t i_sync_tid;
++ 	tid_t i_datasync_tid;
++ 
+++	__u64 i_fs_version;
+++
++ 	/* Precomputed uuid+inum+igen checksum for seeding inode checksums */
++ 	__u32 i_csum_seed;
++ };
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch
+new file mode 100644
+index 0000000..f9c65d0
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch
+@@ -0,0 +1,235 @@
++removes static definition of dx_root struct. so that "." and ".." dirent can
++have extra data. This patch does not change any functionality but is required for
++ext4_data_in_dirent patch.
++ 
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -201,22 +201,13 @@ struct dx_entry
++  * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
++  */
++ 
++-struct dx_root
+++struct dx_root_info
++ {
++-	struct fake_dirent dot;
++-	char dot_name[4];
++-	struct fake_dirent dotdot;
++-	char dotdot_name[4];
++-	struct dx_root_info
++-	{
++-		__le32 reserved_zero;
++-		u8 hash_version;
++-		u8 info_length; /* 8 */
++-		u8 indirect_levels;
++-		u8 unused_flags;
++-	}
++-	info;
++-	struct dx_entry	entries[0];
+++	__le32 reserved_zero;
+++	u8 hash_version;
+++	u8 info_length; /* 8 */
+++	u8 indirect_levels;
+++	u8 unused_flags;
++ };
++ 
++ struct dx_node
++@@ -519,6 +510,16 @@ ext4_next_entry(struct ext4_dir_entry_2
++  * Future: use high four bits of block for coalesce-on-delete flags
++  * Mask them off for now.
++  */
+++struct dx_root_info * dx_get_dx_info(struct ext4_dir_entry_2 *de)
+++{
+++       /* get dotdot first */
+++       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(1));
+++
+++       /* dx root info is after dotdot entry */
+++       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(2));
+++
+++       return (struct dx_root_info *) de;
+++}
++ 
++ static inline ext4_lblk_t dx_get_block(struct dx_entry *entry)
++ {
++@@ -681,7 +682,7 @@ dx_probe(const struct qstr *d_name, stru
++ {
++ 	unsigned count, indirect;
++ 	struct dx_entry *at, *entries, *p, *q, *m;
++-	struct dx_root *root;
+++	struct dx_root_info * info;
++ 	struct buffer_head *bh;
++ 	struct dx_frame *frame = frame_in;
++ 	u32 hash;
++@@ -692,17 +693,18 @@ dx_probe(const struct qstr *d_name, stru
++ 		*err = PTR_ERR(bh);
++ 		goto fail;
++ 	}
++-	root = (struct dx_root *) bh->b_data;
++-	if (root->info.hash_version != DX_HASH_TEA &&
++-	    root->info.hash_version != DX_HASH_HALF_MD4 &&
++-	    root->info.hash_version != DX_HASH_LEGACY) {
+++
+++	info = dx_get_dx_info((struct ext4_dir_entry_2*)bh->b_data);
+++	if (info->hash_version != DX_HASH_TEA &&
+++	    info->hash_version != DX_HASH_HALF_MD4 &&
+++	    info->hash_version != DX_HASH_LEGACY) {
++ 		ext4_warning(dir->i_sb, "Unrecognised inode hash code %d for directory "
++-                             "#%lu", root->info.hash_version, dir->i_ino);
+++                             "#%lu", info->hash_version, dir->i_ino);
++ 		brelse(bh);
++ 		*err = ERR_BAD_DX_DIR;
++ 		goto fail;
++ 	}
++-	hinfo->hash_version = root->info.hash_version;
+++	hinfo->hash_version = info->hash_version;
++ 	if (hinfo->hash_version <= DX_HASH_TEA)
++ 		hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
++ 	hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed;
++@@ -710,27 +712,26 @@ dx_probe(const struct qstr *d_name, stru
++ 		ext4fs_dirhash(d_name->name, d_name->len, hinfo);
++ 	hash = hinfo->hash;
++ 
++-	if (root->info.unused_flags & 1) {
+++	if (info->unused_flags & 1) {
++ 		ext4_warning(dir->i_sb, "Unimplemented inode hash flags: %#06x",
++-			     root->info.unused_flags);
+++			     info->unused_flags);
++ 		brelse(bh);
++ 		*err = ERR_BAD_DX_DIR;
++ 		goto fail;
++ 	}
++ 
++-	if ((indirect = root->info.indirect_levels) > 1) {
+++	if ((indirect = info->indirect_levels) > 1) {
++ 		ext4_warning(dir->i_sb, "Unimplemented inode hash depth: %#06x",
++-			     root->info.indirect_levels);
+++			     info->indirect_levels);
++ 		brelse(bh);
++ 		*err = ERR_BAD_DX_DIR;
++ 		goto fail;
++ 	}
++ 
++-	entries = (struct dx_entry *) (((char *)&root->info) +
++-				       root->info.info_length);
+++	entries = (struct dx_entry *) (((char *)info) + info->info_length);
++ 
++ 	if (dx_get_limit(entries) != dx_root_limit(dir,
++-						   root->info.info_length)) {
+++						   info->info_length)) {
++ 		ext4_warning(dir->i_sb, "dx entry: limit != root limit");
++ 		brelse(bh);
++ 		*err = ERR_BAD_DX_DIR;
++@@ -815,10 +816,12 @@ fail:
++ 
++ static void dx_release (struct dx_frame *frames)
++ {
+++	struct dx_root_info *info;
++ 	if (frames[0].bh == NULL)
++ 		return;
++ 
++-	if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
+++	info = dx_get_dx_info((struct ext4_dir_entry_2*)frames[0].bh->b_data);
+++	if (info->indirect_levels)
++ 		brelse(frames[1].bh);
++ 	brelse(frames[0].bh);
++ }
++@@ -1795,10 +1798,9 @@ static int make_indexed_dir(handle_t *ha
++ 	const char	*name = dentry->d_name.name;
++ 	int		namelen = dentry->d_name.len;
++ 	struct buffer_head *bh2;
++-	struct dx_root	*root;
++ 	struct dx_frame	frames[2], *frame;
++ 	struct dx_entry *entries;
++-	struct ext4_dir_entry_2	*de, *de2;
+++	struct ext4_dir_entry_2 *de, *de2, *dot_de, *dotdot_de;
++ 	struct ext4_dir_entry_tail *t;
++ 	char		*data1, *top;
++ 	unsigned	len;
++@@ -1806,7 +1808,7 @@ static int make_indexed_dir(handle_t *ha
++ 	unsigned	blocksize;
++ 	struct dx_hash_info hinfo;
++ 	ext4_lblk_t  block;
++-	struct fake_dirent *fde;
+++	struct dx_root_info *dx_info;
++ 	int		csum_size = 0;
++ 
++ 	if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
++@@ -1821,18 +1823,19 @@ static int make_indexed_dir(handle_t *ha
++ 		brelse(bh);
++ 		return retval;
++ 	}
++-	root = (struct dx_root *) bh->b_data;
+++
+++	dot_de = (struct ext4_dir_entry_2 *) bh->b_data;
+++	dotdot_de = ext4_next_entry(dot_de, blocksize);
++ 
++ 	/* The 0th block becomes the root, move the dirents out */
++-	fde = &root->dotdot;
++-	de = (struct ext4_dir_entry_2 *)((char *)fde +
++-		ext4_rec_len_from_disk(fde->rec_len, blocksize));
++-	if ((char *) de >= (((char *) root) + blocksize)) {
+++	de = (struct ext4_dir_entry_2 *)((char *)dotdot_de +
+++		ext4_rec_len_from_disk(dotdot_de->rec_len, blocksize));
+++	if ((char *) de >= (((char *) dot_de) + blocksize)) {
++ 		EXT4_ERROR_INODE(dir, "invalid rec_len for '..'");
++ 		brelse(bh);
++ 		return -EIO;
++ 	}
++-	len = ((char *) root) + (blocksize - csum_size) - (char *) de;
+++	len = ((char *) dot_de) + (blocksize - csum_size) - (char *) de;
++ 
++ 	/* Allocate new block for the 0th block's dirents */
++ 	bh2 = ext4_append(handle, dir, &block);
++@@ -1858,19 +1861,23 @@ static int make_indexed_dir(handle_t *ha
++ 	}
++ 
++ 	/* Initialize the root; the dot dirents already exist */
++-	de = (struct ext4_dir_entry_2 *) (&root->dotdot);
++-	de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(2),
++-					   blocksize);
++-	memset (&root->info, 0, sizeof(root->info));
++-	root->info.info_length = sizeof(root->info);
++-	root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
++-	entries = root->entries;
+++	dotdot_de->rec_len = ext4_rec_len_to_disk(blocksize -
+++			le16_to_cpu(dot_de->rec_len), blocksize);
+++
+++	/* initialize hashing info */
+++	dx_info = dx_get_dx_info(dot_de);
+++	memset (dx_info, 0, sizeof(*dx_info));
+++	dx_info->info_length = sizeof(*dx_info);
+++	dx_info->hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
+++
+++	entries = (void *)dx_info + sizeof(*dx_info);
+++
++ 	dx_set_block(entries, 1);
++ 	dx_set_count(entries, 1);
++-	dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info)));
+++	dx_set_limit(entries, dx_root_limit(dir, sizeof(*dx_info)));
++ 
++ 	/* Initialize as for dx_probe */
++-	hinfo.hash_version = root->info.hash_version;
+++	hinfo.hash_version = dx_info->hash_version;
++ 	if (hinfo.hash_version <= DX_HASH_TEA)
++ 		hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
++ 	hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
++@@ -2160,6 +2167,7 @@ static int ext4_dx_add_entry(handle_t *h
++ 				goto journal_error;
++ 			brelse (bh2);
++ 		} else {
+++			struct dx_root_info * info;
++ 			dxtrace(printk(KERN_DEBUG
++ 				       "Creating second level index...\n"));
++ 			memcpy((char *) entries2, (char *) entries,
++@@ -2169,7 +2177,9 @@ static int ext4_dx_add_entry(handle_t *h
++ 			/* Set up root */
++ 			dx_set_count(entries, 1);
++ 			dx_set_block(entries + 0, newblock);
++-			((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
+++			info = dx_get_dx_info((struct ext4_dir_entry_2*)
+++					frames[0].bh->b_data);
+++			info->indirect_levels = 1;
++ 
++ 			/* Add new access path frame */
++ 			frame = frames + 1;
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch
+new file mode 100644
+index 0000000..4bbb6f5
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch
+@@ -0,0 +1,785 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -1533,6 +1533,7 @@ static inline void ext4_clear_state_flag
++ 					 EXT4_FEATURE_INCOMPAT_EXTENTS| \
++ 					 EXT4_FEATURE_INCOMPAT_64BIT| \
++ 					 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
+++					 EXT4_FEATURE_INCOMPAT_EA_INODE| \
++ 					 EXT4_FEATURE_INCOMPAT_MMP |	\
++ 					 EXT4_FEATURE_INCOMPAT_DIRDATA| \
++ 					 EXT4_FEATURE_INCOMPAT_INLINE_DATA)
++@@ -1940,6 +1941,12 @@ struct mmpd_data {
++ #endif
++ 
++ /*
+++ * Maximum size of xattr attributes for FEATURE_INCOMPAT_EA_INODE 1Mb
+++ * This limit is arbitrary, but is reasonable for the xattr API.
+++ */
+++#define EXT4_XATTR_MAX_LARGE_EA_SIZE    (1024 * 1024)
+++
+++/*
++  * Function prototypes
++  */
++ 
++@@ -2163,6 +2170,7 @@ extern void ext4_set_inode_flags(struct
++ extern void ext4_get_inode_flags(struct ext4_inode_info *);
++ extern int ext4_alloc_da_blocks(struct inode *inode);
++ extern void ext4_set_aops(struct inode *inode);
+++extern int ext4_meta_trans_blocks(struct inode *, int nrblocks, int chunk);
++ extern int ext4_writepage_trans_blocks(struct inode *);
++ extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks);
++ extern int ext4_block_truncate_page(handle_t *handle,
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++@@ -136,8 +136,6 @@ static void ext4_invalidatepage(struct p
++ 				unsigned int length);
++ static int __ext4_journalled_writepage(struct page *page, unsigned int len);
++ static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh);
++-static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
++-				  int pextents);
++ 
++ /*
++  * Test whether an inode is a fast symlink.
++@@ -4716,7 +4714,7 @@ static int ext4_index_trans_blocks(struc
++  *
++  * Also account for superblock, inode, quota and xattr blocks
++  */
++-static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
+++int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
++ 				  int pextents)
++ {
++ 	ext4_group_t groups, ngroups = ext4_get_groups_count(inode->i_sb);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
++@@ -220,19 +220,26 @@ ext4_xattr_check_block(struct inode *ino
++ }
++ 
++ static inline int
++-ext4_xattr_check_entry(struct ext4_xattr_entry *entry, size_t size)
+++ext4_xattr_check_entry(struct ext4_xattr_entry *entry, size_t size,
+++		       struct inode *inode)
++ {
++ 	size_t value_size = le32_to_cpu(entry->e_value_size);
++ 
++-	if (entry->e_value_block != 0 || value_size > size ||
++-	    le16_to_cpu(entry->e_value_offs) + value_size > size)
+++	if ((entry->e_value_inum == 0) &&
+++	   (le16_to_cpu(entry->e_value_offs) + value_size > size))
+++		return -EIO;
+++	if (entry->e_value_inum != 0 &&
+++	    (le32_to_cpu(entry->e_value_inum) < EXT4_FIRST_INO(inode->i_sb) ||
+++	     le32_to_cpu(entry->e_value_inum) >
+++	     le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_inodes_count)))
++ 		return -EIO;
++ 	return 0;
++ }
++ 
++ static int
++ ext4_xattr_find_entry(struct ext4_xattr_entry **pentry, int name_index,
++-		      const char *name, size_t size, int sorted)
+++		      const char *name, size_t size, int sorted,
+++		      struct inode *inode)
++ {
++ 	struct ext4_xattr_entry *entry;
++ 	size_t name_len;
++@@ -252,11 +259,103 @@ ext4_xattr_find_entry(struct ext4_xattr_
++ 			break;
++ 	}
++ 	*pentry = entry;
++-	if (!cmp && ext4_xattr_check_entry(entry, size))
+++	if (!cmp && ext4_xattr_check_entry(entry, size, inode))
++ 			return -EIO;
++ 	return cmp ? -ENODATA : 0;
++ }
++ 
+++/*
+++ * Read the EA value from an inode.
+++ */
+++static int
+++ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t *size)
+++{
+++	unsigned long block = 0;
+++	struct buffer_head *bh = NULL;
+++	int err, blocksize;
+++	size_t csize, ret_size = 0;
+++
+++	if (*size == 0)
+++		return 0;
+++
+++	blocksize = ea_inode->i_sb->s_blocksize;
+++
+++	while (ret_size < *size) {
+++		csize = (*size - ret_size) > blocksize ? blocksize :
+++							*size - ret_size;
+++		bh = ext4_bread(NULL, ea_inode, block, 0, &err);
+++		if (!bh) {
+++			*size = ret_size;
+++			return err;
+++		}
+++		memcpy(buf, bh->b_data, csize);
+++		brelse(bh);
+++
+++		buf += csize;
+++		block += 1;
+++		ret_size += csize;
+++	}
+++
+++	*size = ret_size;
+++
+++	return err;
+++}
+++
+++struct inode *ext4_xattr_inode_iget(struct inode *parent, int ea_ino, int *err)
+++{
+++	struct inode *ea_inode = NULL;
+++
+++	ea_inode = ext4_iget(parent->i_sb, ea_ino);
+++	if (IS_ERR(ea_inode) || is_bad_inode(ea_inode)) {
+++		ext4_error(parent->i_sb, "error while reading EA inode %d",
+++			   ea_ino);
+++		*err = -EIO;
+++		return NULL;
+++	}
+++
+++	if (ea_inode->i_xattr_inode_parent != parent->i_ino ||
+++	    ea_inode->i_generation != parent->i_generation) {
+++		ext4_error(parent->i_sb, "Backpointer from EA inode %d "
+++			   "to parent invalid.", ea_ino);
+++		*err = -EINVAL;
+++		goto error;
+++	}
+++
+++	if (!(EXT4_I(ea_inode)->i_flags & EXT4_EA_INODE_FL)) {
+++		ext4_error(parent->i_sb, "EA inode %d does not have "
+++			   "EXT4_EA_INODE_FL flag set.\n", ea_ino);
+++		*err = -EINVAL;
+++		goto error;
+++	}
+++
+++	*err = 0;
+++	return ea_inode;
+++
+++error:
+++	iput(ea_inode);
+++	return NULL;
+++}
+++
+++/*
+++ * Read the value from the EA inode.
+++ */
+++static int
+++ext4_xattr_inode_get(struct inode *inode, int ea_ino, void *buffer,
+++		     size_t *size)
+++{
+++	struct inode *ea_inode = NULL;
+++	int err;
+++
+++	ea_inode = ext4_xattr_inode_iget(inode, ea_ino, &err);
+++	if (err)
+++		return err;
+++
+++	err = ext4_xattr_inode_read(ea_inode, buffer, size);
+++	iput(ea_inode);
+++
+++	return err;
+++}
+++
++ static int
++ ext4_xattr_block_get(struct inode *inode, int name_index, const char *name,
++ 		     void *buffer, size_t buffer_size)
++@@ -288,7 +387,8 @@ bad_block:
++ 	}
++ 	ext4_xattr_cache_insert(bh);
++ 	entry = BFIRST(bh);
++-	error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1);
+++	error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1,
+++				      inode);
++ 	if (error == -EIO)
++ 		goto bad_block;
++ 	if (error)
++@@ -298,8 +398,16 @@ bad_block:
++ 		error = -ERANGE;
++ 		if (size > buffer_size)
++ 			goto cleanup;
++-		memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
++-		       size);
+++		if (entry->e_value_inum != 0) {
+++			error = ext4_xattr_inode_get(inode,
+++					     le32_to_cpu(entry->e_value_inum),
+++					     buffer, &size);
+++			if (error)
+++				goto cleanup;
+++		} else {
+++			memcpy(buffer, bh->b_data +
+++			       le16_to_cpu(entry->e_value_offs), size);
+++		}
++ 	}
++ 	error = size;
++ 
++@@ -333,7 +441,7 @@ ext4_xattr_ibody_get(struct inode *inode
++ 	if (error)
++ 		goto cleanup;
++ 	error = ext4_xattr_find_entry(&entry, name_index, name,
++-				      end - (void *)entry, 0);
+++				      end - (void *)entry, 0, inode);
++ 	if (error)
++ 		goto cleanup;
++ 	size = le32_to_cpu(entry->e_value_size);
++@@ -341,8 +449,16 @@ ext4_xattr_ibody_get(struct inode *inode
++ 		error = -ERANGE;
++ 		if (size > buffer_size)
++ 			goto cleanup;
++-		memcpy(buffer, (void *)IFIRST(header) +
++-		       le16_to_cpu(entry->e_value_offs), size);
+++		if (entry->e_value_inum != 0) {
+++			error = ext4_xattr_inode_get(inode,
+++					     le32_to_cpu(entry->e_value_inum),
+++					     buffer, &size);
+++			if (error)
+++				goto cleanup;
+++		} else {
+++			memcpy(buffer, (void *)IFIRST(header) +
+++			       le16_to_cpu(entry->e_value_offs), size);
+++		}
++ 	}
++ 	error = size;
++ 
++@@ -568,7 +684,7 @@ static size_t ext4_xattr_free_space(stru
++ {
++ 	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
++ 		*total += EXT4_XATTR_LEN(last->e_name_len);
++-		if (!last->e_value_block && last->e_value_size) {
+++		if (last->e_value_inum == 0 && last->e_value_size > 0) {
++ 			size_t offs = le16_to_cpu(last->e_value_offs);
++ 			if (offs < *min_offs)
++ 				*min_offs = offs;
++@@ -577,16 +693,171 @@ static size_t ext4_xattr_free_space(stru
++ 	return (*min_offs - ((void *)last - base) - sizeof(__u32));
++ }
++ 
+++/*
+++ * Write the value of the EA in an inode.
+++ */
+++static int
+++ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode,
+++		       const void *buf, int bufsize)
+++{
+++	struct buffer_head *bh = NULL;
+++	unsigned long block = 0;
+++	unsigned blocksize = ea_inode->i_sb->s_blocksize;
+++	unsigned max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits;
+++	int csize, wsize = 0;
+++	int ret = 0;
+++	int retries = 0;
+++
+++retry:
+++	while (ret >= 0 && ret < max_blocks) {
+++		struct ext4_map_blocks map;
+++		map.m_lblk = block += ret;
+++		map.m_len = max_blocks -= ret;
+++
+++		ret = ext4_map_blocks(handle, ea_inode, &map, EXT4_GET_BLOCKS_CREATE);
+++		if (ret <= 0) {
+++			ext4_mark_inode_dirty(handle, ea_inode);
+++			if (ret == -ENOSPC &&
+++			    ext4_should_retry_alloc(ea_inode->i_sb, &retries)) {
+++				ret = 0;
+++				goto retry;
+++			}
+++			break;
+++		}
+++	}
+++
+++	if (ret < 0)
+++		return ret;
+++
+++	block = 0;
+++	while (wsize < bufsize) {
+++		if (bh != NULL)
+++			brelse(bh);
+++		csize = (bufsize - wsize) > blocksize ? blocksize :
+++								bufsize - wsize;
+++		bh = ext4_getblk(handle, ea_inode, block, 0, &ret);
+++		if (!bh)
+++			goto out;
+++		ret = ext4_journal_get_write_access(handle, bh);
+++		if (ret)
+++			goto out;
+++
+++		memcpy(bh->b_data, buf, csize);
+++		set_buffer_uptodate(bh);
+++		ext4_journal_dirty_metadata(handle, bh);
+++
+++		buf += csize;
+++		wsize += csize;
+++		block += 1;
+++	}
+++
+++	i_size_write(ea_inode, wsize);
+++	ext4_update_i_disksize(ea_inode, wsize);
+++
+++	ext4_mark_inode_dirty(handle, ea_inode);
+++
+++out:
+++	brelse(bh);
+++
+++	return ret;
+++}
+++
+++/*
+++ * Create an inode to store the value of a large EA.
+++ */
+++static struct inode *
+++ext4_xattr_inode_create(handle_t *handle, struct inode *inode)
+++{
+++	struct inode *ea_inode = NULL;
+++
+++	/*
+++	 * Let the next inode be the goal, so we try and allocate the EA inode
+++	 * in the same group, or nearby one.
+++	 */
+++	ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode,
+++				  S_IFREG|0600, NULL, inode->i_ino + 1, NULL);
+++
+++	if (!IS_ERR(ea_inode)) {
+++		ea_inode->i_op = &ext4_file_inode_operations;
+++		ea_inode->i_fop = &ext4_file_operations;
+++		ext4_set_aops(ea_inode);
+++		ea_inode->i_generation = inode->i_generation;
+++		EXT4_I(ea_inode)->i_flags |= EXT4_EA_INODE_FL;
+++
+++		/*
+++		 * A back-pointer from EA inode to parent inode will be useful
+++		 * for e2fsck.
+++		 */
+++		ea_inode->i_xattr_inode_parent = inode->i_ino;
+++		unlock_new_inode(ea_inode);
+++	}
+++
+++	return ea_inode;
+++}
+++
+++/*
+++ * Unlink the inode storing the value of the EA.
+++ */
++ static int
++-ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
+++ext4_xattr_inode_unlink(struct inode *inode, int ea_ino)
+++{
+++	struct inode *ea_inode = NULL;
+++	int err;
+++
+++	ea_inode = ext4_xattr_inode_iget(inode, ea_ino, &err);
+++	if (err)
+++		return err;
+++
+++	clear_nlink(ea_inode);
+++	iput(ea_inode);
+++
+++	return 0;
+++}
+++
+++/*
+++ * Add value of the EA in an inode.
+++ */
+++static int
+++ext4_xattr_inode_set(handle_t *handle, struct inode *inode, int *ea_ino,
+++		     const void *value, size_t value_len)
+++{
+++	struct inode *ea_inode = NULL;
+++	int err;
+++
+++	/* Create an inode for the EA value */
+++	ea_inode = ext4_xattr_inode_create(handle, inode);
+++	if (IS_ERR(ea_inode))
+++		return -1;
+++
+++	err = ext4_xattr_inode_write(handle, ea_inode, value, value_len);
+++	if (err)
+++		clear_nlink(ea_inode);
+++	else
+++		*ea_ino = ea_inode->i_ino;
+++
+++	iput(ea_inode);
+++
+++	return err;
+++}
+++
+++static int
+++ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s,
+++		     handle_t *handle, struct inode *inode)
++ {
++ 	struct ext4_xattr_entry *last;
++ 	size_t free, min_offs = s->end - s->base, name_len = strlen(i->name);
+++	int in_inode = i->in_inode;
+++
+++	if (EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
+++		 EXT4_FEATURE_INCOMPAT_EA_INODE) &&
+++	    (EXT4_XATTR_SIZE(i->value_len) >
+++	     EXT4_XATTR_MIN_LARGE_EA_SIZE(inode->i_sb->s_blocksize)))
+++		in_inode = 1;
++ 
++ 	/* Compute min_offs and last. */
++ 	last = s->first;
++ 	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
++-		if (!last->e_value_block && last->e_value_size) {
+++		if (last->e_value_inum == 0 && last->e_value_size > 0) {
++ 			size_t offs = le16_to_cpu(last->e_value_offs);
++ 			if (offs < min_offs)
++ 				min_offs = offs;
++@@ -594,16 +865,21 @@ ext4_xattr_set_entry(struct ext4_xattr_i
++ 	}
++ 	free = min_offs - ((void *)last - s->base) - sizeof(__u32);
++ 	if (!s->not_found) {
++-		if (!s->here->e_value_block && s->here->e_value_size) {
+++		if (!in_inode && s->here->e_value_inum == 0 &&
+++		    s->here->e_value_size > 0) {
++ 			size_t size = le32_to_cpu(s->here->e_value_size);
++ 			free += EXT4_XATTR_SIZE(size);
++ 		}
++ 		free += EXT4_XATTR_LEN(name_len);
++ 	}
++ 	if (i->value) {
++-		if (free < EXT4_XATTR_SIZE(i->value_len) ||
++-		    free < EXT4_XATTR_LEN(name_len) +
++-			   EXT4_XATTR_SIZE(i->value_len))
+++		size_t value_len = EXT4_XATTR_SIZE(i->value_len);
+++
+++		if (in_inode)
+++			value_len = 0;
+++
+++		if (free < value_len ||
+++		    free < EXT4_XATTR_LEN(name_len) + value_len)
++ 			return -ENOSPC;
++ 	}
++ 
++@@ -617,7 +893,8 @@ ext4_xattr_set_entry(struct ext4_xattr_i
++ 		s->here->e_name_len = name_len;
++ 		memcpy(s->here->e_name, i->name, name_len);
++ 	} else {
++-		if (!s->here->e_value_block && s->here->e_value_size) {
+++		if (s->here->e_value_offs > 0 && s->here->e_value_inum == 0 &&
+++		    s->here->e_value_size > 0) {
++ 			void *first_val = s->base + min_offs;
++ 			size_t offs = le16_to_cpu(s->here->e_value_offs);
++ 			void *val = s->base + offs;
++@@ -651,13 +928,17 @@ ext4_xattr_set_entry(struct ext4_xattr_i
++ 			last = s->first;
++ 			while (!IS_LAST_ENTRY(last)) {
++ 				size_t o = le16_to_cpu(last->e_value_offs);
++-				if (!last->e_value_block &&
++-				    last->e_value_size && o < offs)
+++				if (last->e_value_size > 0 && o < offs)
++ 					last->e_value_offs =
++ 						cpu_to_le16(o + size);
++ 				last = EXT4_XATTR_NEXT(last);
++ 			}
++ 		}
+++		if (s->here->e_value_inum != 0) {
+++			ext4_xattr_inode_unlink(inode,
+++					le32_to_cpu(s->here->e_value_inum));
+++			s->here->e_value_inum = 0;
+++		}
++ 		if (!i->value) {
++ 			/* Remove the old name. */
++ 			size_t size = EXT4_XATTR_LEN(name_len);
++@@ -671,10 +952,17 @@ ext4_xattr_set_entry(struct ext4_xattr_i
++ 	if (i->value) {
++ 		/* Insert the new value. */
++ 		s->here->e_value_size = cpu_to_le32(i->value_len);
++-		if (i->value_len) {
+++		if (in_inode) {
+++			int ea_ino = le32_to_cpu(s->here->e_value_inum);
+++			ext4_xattr_inode_set(handle, inode, &ea_ino, i->value,
+++					     i->value_len);
+++			s->here->e_value_inum = cpu_to_le32(ea_ino);
+++			s->here->e_value_offs = 0;
+++		} else if (i->value_len) {
++ 			size_t size = EXT4_XATTR_SIZE(i->value_len);
++ 			void *val = s->base + min_offs - size;
++ 			s->here->e_value_offs = cpu_to_le16(min_offs - size);
+++			s->here->e_value_inum = 0;
++ 			if (i->value == EXT4_ZERO_XATTR_VALUE) {
++ 				memset(val, 0, size);
++ 			} else {
++@@ -724,7 +1012,7 @@ ext4_xattr_block_find(struct inode *inod
++ 		bs->s.end = bs->bh->b_data + bs->bh->b_size;
++ 		bs->s.here = bs->s.first;
++ 		error = ext4_xattr_find_entry(&bs->s.here, i->name_index,
++-					      i->name, bs->bh->b_size, 1);
+++					     i->name, bs->bh->b_size, 1, inode);
++ 		if (error && error != -ENODATA)
++ 			goto cleanup;
++ 		bs->s.not_found = error;
++@@ -748,8 +1036,6 @@ ext4_xattr_block_set(handle_t *handle, s
++ 
++ #define header(x) ((struct ext4_xattr_header *)(x))
++ 
++-	if (i->value && i->value_len > sb->s_blocksize)
++-		return -ENOSPC;
++ 	if (s->base) {
++ 		ce = mb_cache_entry_get(ext4_xattr_cache, bs->bh->b_bdev,
++ 					bs->bh->b_blocknr);
++@@ -764,7 +1050,7 @@ ext4_xattr_block_set(handle_t *handle, s
++ 				ce = NULL;
++ 			}
++ 			ea_bdebug(bs->bh, "modifying in-place");
++-			error = ext4_xattr_set_entry(i, s);
+++			error = ext4_xattr_set_entry(i, s, handle, inode);
++ 			if (!error) {
++ 				if (!IS_LAST_ENTRY(s->first))
++ 					ext4_xattr_rehash(header(s->base),
++@@ -815,7 +1101,7 @@ ext4_xattr_block_set(handle_t *handle, s
++ 		s->end = s->base + sb->s_blocksize;
++ 	}
++ 
++-	error = ext4_xattr_set_entry(i, s);
+++	error = ext4_xattr_set_entry(i, s, handle, inode);
++ 	if (error == -EIO)
++ 		goto bad_block;
++ 	if (error)
++@@ -963,7 +1249,7 @@ int ext4_xattr_ibody_find(struct inode *
++ 		/* Find the named attribute. */
++ 		error = ext4_xattr_find_entry(&is->s.here, i->name_index,
++ 					      i->name, is->s.end -
++-					      (void *)is->s.base, 0);
+++					      (void *)is->s.base, 0, inode);
++ 		if (error && error != -ENODATA)
++ 			return error;
++ 		is->s.not_found = error;
++@@ -981,7 +1267,7 @@ int ext4_xattr_ibody_inline_set(handle_t
++ 
++ 	if (EXT4_I(inode)->i_extra_isize == 0)
++ 		return -ENOSPC;
++-	error = ext4_xattr_set_entry(i, s);
+++	error = ext4_xattr_set_entry(i, s, handle, inode);
++ 	if (error) {
++ 		if (error == -ENOSPC &&
++ 		    ext4_has_inline_data(inode)) {
++@@ -993,7 +1279,7 @@ int ext4_xattr_ibody_inline_set(handle_t
++ 			error = ext4_xattr_ibody_find(inode, i, is);
++ 			if (error)
++ 				return error;
++-			error = ext4_xattr_set_entry(i, s);
+++			error = ext4_xattr_set_entry(i, s, handle, inode);
++ 		}
++ 		if (error)
++ 			return error;
++@@ -1019,7 +1305,7 @@ static int ext4_xattr_ibody_set(handle_t
++ 
++ 	if (EXT4_I(inode)->i_extra_isize == 0)
++ 		return -ENOSPC;
++-	error = ext4_xattr_set_entry(i, s);
+++	error = ext4_xattr_set_entry(i, s, handle, inode);
++ 	if (error)
++ 		return error;
++ 	header = IHDR(inode, ext4_raw_inode(&is->iloc));
++@@ -1055,7 +1341,7 @@ ext4_xattr_set_handle(handle_t *handle,
++ 		.name = name,
++ 		.value = value,
++ 		.value_len = value_len,
++-
+++		.in_inode = 0,
++ 	};
++ 	struct ext4_xattr_ibody_find is = {
++ 		.s = { .not_found = -ENODATA, },
++@@ -1120,6 +1406,15 @@ ext4_xattr_set_handle(handle_t *handle,
++ 					goto cleanup;
++ 			}
++ 			error = ext4_xattr_block_set(handle, inode, &i, &bs);
+++			if (EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
+++					EXT4_FEATURE_INCOMPAT_EA_INODE) &&
+++			    error == -ENOSPC) {
+++				/* xattr not fit to block, store at external
+++				 * inode */
+++				i.in_inode = 1;
+++				error = ext4_xattr_ibody_set(handle, inode,
+++							     &i, &is);
+++			}
++ 			if (error)
++ 				goto cleanup;
++ 			if (!is.s.not_found) {
++@@ -1167,9 +1462,22 @@ ext4_xattr_set(struct inode *inode, int
++ 	       const void *value, size_t value_len, int flags)
++ {
++ 	handle_t *handle;
+++	struct super_block *sb = inode->i_sb;
++ 	int error, retries = 0;
++ 	int credits = ext4_jbd2_credits_xattr(inode);
++ 
+++	if ((value_len >= EXT4_XATTR_MIN_LARGE_EA_SIZE(sb->s_blocksize)) &&
+++	    EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EA_INODE)) {
+++		int nrblocks = (value_len + sb->s_blocksize - 1) >>
+++					sb->s_blocksize_bits;
+++
+++		/* For new inode */
+++		credits += EXT4_SINGLEDATA_TRANS_BLOCKS(sb) + 3;
+++
+++		/* For data blocks of EA inode */
+++		credits += ext4_meta_trans_blocks(inode, nrblocks, 0);
+++	}
+++
++ retry:
++ 	handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
++ 	if (IS_ERR(handle)) {
++@@ -1181,7 +1489,7 @@ retry:
++ 					      value, value_len, flags);
++ 		error2 = ext4_journal_stop(handle);
++ 		if (error == -ENOSPC &&
++-		    ext4_should_retry_alloc(inode->i_sb, &retries))
+++		    ext4_should_retry_alloc(sb, &retries))
++ 			goto retry;
++ 		if (error == 0)
++ 			error = error2;
++@@ -1203,7 +1511,7 @@ static void ext4_xattr_shift_entries(str
++ 
++ 	/* Adjust the value offsets of the entries */
++ 	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
++-		if (!last->e_value_block && last->e_value_size) {
+++		if (last->e_value_inum == 0 && last->e_value_size > 0) {
++ 			new_offs = le16_to_cpu(last->e_value_offs) +
++ 							value_offs_shift;
++ 			BUG_ON(new_offs + le32_to_cpu(last->e_value_size)
++@@ -1443,15 +1751,41 @@ cleanup:
++ /*
++  * ext4_xattr_delete_inode()
++  *
++- * Free extended attribute resources associated with this inode. This
+++ * Free extended attribute resources associated with this inode. Traverse
+++ * all entries and unlink any xattr inodes associated with this inode. This
++  * is called immediately before an inode is freed. We have exclusive
++- * access to the inode.
+++ * access to the inode. If an orphan inode is deleted it will also delete any
+++ * xattr block and all xattr inodes. They are checked by ext4_xattr_inode_iget()
+++ * to ensure they belong to the parent inode and were not deleted already.
++  */
++ void
++ ext4_xattr_delete_inode(handle_t *handle, struct inode *inode)
++ {
++ 	struct buffer_head *bh = NULL;
+++	struct ext4_xattr_ibody_header *header;
+++	struct ext4_inode *raw_inode;
+++	struct ext4_iloc iloc;
+++	struct ext4_xattr_entry *entry;
+++	int error;
+++
+++	if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR))
+++		goto delete_external_ea;
+++
+++	error = ext4_get_inode_loc(inode, &iloc);
+++	if (error)
+++		goto cleanup;
+++	raw_inode = ext4_raw_inode(&iloc);
+++	header = IHDR(inode, raw_inode);
+++	entry = IFIRST(header);
+++	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
+++		if (entry->e_value_inum != 0) {
+++			ext4_xattr_inode_unlink(inode,
+++					le32_to_cpu(entry->e_value_inum));
+++			entry->e_value_inum = 0;
+++		}
+++	}
++ 
+++delete_external_ea:
++ 	if (!EXT4_I(inode)->i_file_acl)
++ 		goto cleanup;
++ 	bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl);
++@@ -1466,6 +1800,16 @@ ext4_xattr_delete_inode(handle_t *handle
++ 				 EXT4_I(inode)->i_file_acl);
++ 		goto cleanup;
++ 	}
+++
+++	entry = BFIRST(bh);
+++	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
+++		if (entry->e_value_inum != 0) {
+++			ext4_xattr_inode_unlink(inode,
+++					le32_to_cpu(entry->e_value_inum));
+++			entry->e_value_inum = 0;
+++		}
+++	}
+++
++ 	ext4_xattr_release_block(handle, inode, bh);
++ 	EXT4_I(inode)->i_file_acl = 0;
++ 
++@@ -1540,10 +1884,9 @@ ext4_xattr_cmp(struct ext4_xattr_header
++ 		    entry1->e_name_index != entry2->e_name_index ||
++ 		    entry1->e_name_len != entry2->e_name_len ||
++ 		    entry1->e_value_size != entry2->e_value_size ||
+++		    entry1->e_value_inum != entry2->e_value_inum ||
++ 		    memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
++ 			return 1;
++-		if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
++-			return -EIO;
++ 		if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
++ 			   (char *)header2 + le16_to_cpu(entry2->e_value_offs),
++ 			   le32_to_cpu(entry1->e_value_size)))
++@@ -1627,7 +1970,7 @@ static inline void ext4_xattr_hash_entry
++ 		       *name++;
++ 	}
++ 
++-	if (entry->e_value_block == 0 && entry->e_value_size != 0) {
+++	if (entry->e_value_inum == 0 && entry->e_value_size != 0) {
++ 		__le32 *value = (__le32 *)((char *)header +
++ 			le16_to_cpu(entry->e_value_offs));
++ 		for (n = (le32_to_cpu(entry->e_value_size) +
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.h
++@@ -42,7 +42,7 @@ struct ext4_xattr_entry {
++ 	__u8	e_name_len;	/* length of name */
++ 	__u8	e_name_index;	/* attribute name index */
++ 	__le16	e_value_offs;	/* offset in disk block of value */
++-	__le32	e_value_block;	/* disk block attribute is stored on (n/i) */
+++	__le32	e_value_inum;	/* inode in which the value is stored */
++ 	__le32	e_value_size;	/* size of attribute value */
++ 	__le32	e_hash;		/* hash value of name and value */
++ 	char	e_name[0];	/* attribute name */
++@@ -67,6 +67,15 @@ struct ext4_xattr_entry {
++ 		EXT4_I(inode)->i_extra_isize))
++ #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
++ 
+++#define i_xattr_inode_parent i_mtime.tv_sec
+++
+++/*
+++ * The minimum size of EA value when you start storing it in an external inode
+++ * size of block - size of header - size of 1 entry - 4 null bytes
+++*/
+++#define EXT4_XATTR_MIN_LARGE_EA_SIZE(b)					\
+++	((b) - EXT4_XATTR_LEN(3) - sizeof(struct ext4_xattr_header) - 4)
+++
++ #define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
++ #define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
++ #define BFIRST(bh) ENTRY(BHDR(bh)+1)
++@@ -75,10 +84,11 @@ struct ext4_xattr_entry {
++ #define EXT4_ZERO_XATTR_VALUE ((void *)-1)
++ 
++ struct ext4_xattr_info {
++-	int name_index;
++ 	const char *name;
++ 	const void *value;
++ 	size_t value_len;
+++	int name_index;
+++	int in_inode;
++ };
++ 
++ struct ext4_xattr_search {
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inline.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
++@@ -59,7 +59,7 @@ static int get_max_inline_xattr_value_si
++ 
++ 	/* Compute min_offs. */
++ 	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
++-		if (!entry->e_value_block && entry->e_value_size) {
+++		if (!entry->e_value_inum && entry->e_value_size) {
++ 			size_t offs = le16_to_cpu(entry->e_value_offs);
++ 			if (offs < min_offs)
++ 				min_offs = offs;
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch
+new file mode 100644
+index 0000000..f4318c5
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch
+@@ -0,0 +1,37 @@
++Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.10.9-200.fc17.x86_64/fs/ext4/namei.c
++@@ -1438,6 +1438,32 @@ static struct dentry *ext4_lookup(struct
++ 			return ERR_PTR(-EIO);
++ 		}
++ 	}
+++	/* ".." shouldn't go into dcache to preserve dcache hierarchy
+++	 * otherwise we'll get parent being a child of actual child.
+++	 * see bug 10458 for details -bzzz */
+++	if (inode && (dentry->d_name.name[0] == '.' && (dentry->d_name.len == 1 ||
+++		(dentry->d_name.len == 2 && dentry->d_name.name[1] == '.')))) {
+++		struct dentry *goal = NULL;
+++
+++		/* first, look for an existing dentry - any one is good */
+++		goal = d_find_any_alias(inode);
+++		if (goal == NULL) {
+++			spin_lock(&dentry->d_lock);
+++			/* there is no alias, we need to make current dentry:
+++			 *  a) inaccessible for __d_lookup()
+++			 *  b) inaccessible for iopen */
+++			J_ASSERT(hlist_unhashed(&dentry->d_alias));
+++			dentry->d_flags |= DCACHE_NFSFS_RENAMED;
+++			/* this is d_instantiate() ... */
+++			hlist_add_head(&dentry->d_alias, &inode->i_dentry);
+++			dentry->d_inode = inode;
+++			spin_unlock(&dentry->d_lock);
+++		}
+++		if (goal)
+++			iput(inode);
+++		return goal;
+++	}
+++
++ 	return d_splice_alias(inode, dentry);
++ }
++ 
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch
+new file mode 100644
+index 0000000..a1e12a8
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch
+@@ -0,0 +1,44 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -2485,8 +2485,11 @@ static ssize_t sbi_ui_show(struct ext4_a
++ 			   struct ext4_sb_info *sbi, char *buf)
++ {
++ 	unsigned int *ui = (unsigned int *) (((char *) sbi) + a->u.offset);
+++	unsigned int v = *ui;
++ 
++-	return snprintf(buf, PAGE_SIZE, "%u\n", *ui);
+++	if (strcmp("max_dir_size", a->attr.name) == 0)
+++		v <<= 10;
+++	return snprintf(buf, PAGE_SIZE, "%u\n", v);
++ }
++ 
++ static ssize_t sbi_ui_store(struct ext4_attr *a,
++@@ -2500,6 +2503,8 @@ static ssize_t sbi_ui_store(struct ext4_
++ 	ret = kstrtoul(skip_spaces(buf), 0, &t);
++ 	if (ret)
++ 		return ret;
+++	if (strcmp("max_dir_size", a->attr.name) == 0)
+++		t >>= 10;
++ 	*ui = t;
++ 	return count;
++ }
++@@ -2582,6 +2587,8 @@ EXT4_RW_ATTR(reserved_clusters);
++ EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
++ 		 inode_readahead_blks_store, s_inode_readahead_blks);
++ EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
+++EXT4_RW_ATTR_SBI_UI(max_dir_size, s_max_dir_size_kb);
+++EXT4_RW_ATTR_SBI_UI(max_dir_size_kb, s_max_dir_size_kb);
++ EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats);
++ EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
++ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
++@@ -2600,6 +2607,8 @@ static struct attribute *ext4_attrs[] =
++ 	ATTR_LIST(reserved_clusters),
++ 	ATTR_LIST(inode_readahead_blks),
++ 	ATTR_LIST(inode_goal),
+++	ATTR_LIST(max_dir_size),
+++	ATTR_LIST(max_dir_size_kb),
++ 	ATTR_LIST(mb_stats),
++ 	ATTR_LIST(mb_max_to_scan),
++ 	ATTR_LIST(mb_min_to_scan),
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch
+new file mode 100644
+index 0000000..a0eb883
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch
+@@ -0,0 +1,315 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -2449,6 +2449,7 @@ struct ext4_group_info {
++ 	ext4_grpblk_t	bb_fragments;	/* nr of freespace fragments */
++ 	ext4_grpblk_t	bb_largest_free_order;/* order of largest frag in BG */
++ 	struct          list_head bb_prealloc_list;
+++	unsigned long   bb_prealloc_nr;
++ #ifdef DOUBLE_CHECK
++ 	void            *bb_bitmap;
++ #endif
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
++@@ -362,7 +362,7 @@ static const char *ext4_groupinfo_slab_n
++ 	"ext4_groupinfo_64k", "ext4_groupinfo_128k"
++ };
++ 
++-static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
+++static int ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
++ 					ext4_group_t group);
++ static void ext4_mb_generate_from_freelist(struct super_block *sb, void *bitmap,
++ 						ext4_group_t group);
++@@ -718,7 +718,7 @@ mb_set_largest_free_order(struct super_b
++ }
++ 
++ static noinline_for_stack
++-void ext4_mb_generate_buddy(struct super_block *sb,
+++int ext4_mb_generate_buddy(struct super_block *sb,
++ 				void *buddy, void *bitmap, ext4_group_t group)
++ {
++ 	struct ext4_group_info *grp = ext4_get_group_info(sb, group);
++@@ -750,14 +750,13 @@ void ext4_mb_generate_buddy(struct super
++ 	grp->bb_fragments = fragments;
++ 
++ 	if (free != grp->bb_free) {
++-		ext4_grp_locked_error(sb, group, 0, 0,
++-				      "%u clusters in bitmap, %u in gd",
++-				      free, grp->bb_free);
++-		/*
++-		 * If we intent to continue, we consider group descritor
++-		 * corrupt and update bb_free using bitmap value
++-		 */
++-		grp->bb_free = free;
+++		struct ext4_group_desc *gdp;
+++		gdp = ext4_get_group_desc (sb, group, NULL);
+++		ext4_error(sb, "group %lu: %u blocks in bitmap, %u in bb, "
+++			"%u in gd, %lu pa's\n", (long unsigned int)group,
+++			free, grp->bb_free, ext4_free_group_clusters(sb, gdp),
+++			grp->bb_prealloc_nr);
+++		return -EIO;
++ 	}
++ 	mb_set_largest_free_order(sb, grp);
++ 
++@@ -768,6 +767,8 @@ void ext4_mb_generate_buddy(struct super
++ 	EXT4_SB(sb)->s_mb_buddies_generated++;
++ 	EXT4_SB(sb)->s_mb_generation_time += period;
++ 	spin_unlock(&EXT4_SB(sb)->s_bal_lock);
+++
+++	return 0;
++ }
++ 
++ static void mb_regenerate_buddy(struct ext4_buddy *e4b)
++@@ -883,7 +884,7 @@ static int ext4_mb_init_cache(struct pag
++ 	}
++ 
++ 	first_block = page->index * blocks_per_page;
++-	for (i = 0; i < blocks_per_page; i++) {
+++	for (i = 0; i < blocks_per_page && err == 0; i++) {
++ 		group = (first_block + i) >> 1;
++ 		if (group >= ngroups)
++ 			break;
++@@ -922,7 +923,7 @@ static int ext4_mb_init_cache(struct pag
++ 			ext4_lock_group(sb, group);
++ 			/* init the buddy */
++ 			memset(data, 0xff, blocksize);
++-			ext4_mb_generate_buddy(sb, data, incore, group);
+++			err = ext4_mb_generate_buddy(sb, data, incore, group);
++ 			ext4_unlock_group(sb, group);
++ 			incore = NULL;
++ 		} else {
++@@ -937,7 +938,7 @@ static int ext4_mb_init_cache(struct pag
++ 			memcpy(data, bitmap, blocksize);
++ 
++ 			/* mark all preallocated blks used in in-core bitmap */
++-			ext4_mb_generate_from_pa(sb, data, group);
+++			err = ext4_mb_generate_from_pa(sb, data, group);
++ 			ext4_mb_generate_from_freelist(sb, data, group);
++ 			ext4_unlock_group(sb, group);
++ 
++@@ -947,7 +948,8 @@ static int ext4_mb_init_cache(struct pag
++ 			incore = data;
++ 		}
++ 	}
++-	SetPageUptodate(page);
+++	if (likely(err == 0))
+++		SetPageUptodate(page);
++ 
++ out:
++ 	if (bh) {
++@@ -2224,9 +2226,11 @@ static void *ext4_mb_seq_groups_next(str
++ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
++ {
++ 	struct super_block *sb = seq->private;
+++	struct ext4_group_desc *gdp;
++ 	ext4_group_t group = (ext4_group_t) ((unsigned long) v);
++ 	int i;
++ 	int err, buddy_loaded = 0;
+++	int free = 0;
++ 	struct ext4_buddy e4b;
++ 	struct ext4_group_info *grinfo;
++ 	struct sg {
++@@ -2236,10 +2240,10 @@ static int ext4_mb_seq_groups_show(struc
++ 
++ 	group--;
++ 	if (group == 0)
++-		seq_printf(seq, "#%-5s: %-5s %-5s %-5s "
+++		seq_printf(seq, "#%-5s: %-5s %-5s %-5s %-5s %-5s"
++ 				"[ %-5s %-5s %-5s %-5s %-5s %-5s %-5s "
++ 				  "%-5s %-5s %-5s %-5s %-5s %-5s %-5s ]\n",
++-			   "group", "free", "frags", "first",
+++			   "group", "free", "frags", "first", "first", "pa",
++ 			   "2^0", "2^1", "2^2", "2^3", "2^4", "2^5", "2^6",
++ 			   "2^7", "2^8", "2^9", "2^10", "2^11", "2^12", "2^13");
++ 
++@@ -2256,13 +2260,19 @@ static int ext4_mb_seq_groups_show(struc
++ 		buddy_loaded = 1;
++ 	}
++ 
+++	gdp = ext4_get_group_desc(sb, group, NULL);
+++	if (gdp != NULL)
+++		free = ext4_free_group_clusters(sb, gdp);
+++
++ 	memcpy(&sg, ext4_get_group_info(sb, group), i);
++ 
++ 	if (buddy_loaded)
++ 		ext4_mb_unload_buddy(&e4b);
++ 
++-	seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free,
++-			sg.info.bb_fragments, sg.info.bb_first_free);
+++	seq_printf(seq, "#%-5lu: %-5u %-5u %-5u %-5u %-5lu [",
+++			(long unsigned int)group, sg.info.bb_free, free,
+++			sg.info.bb_fragments, sg.info.bb_first_free,
+++			sg.info.bb_prealloc_nr);
++ 	for (i = 0; i <= 13; i++)
++ 		seq_printf(seq, " %-5u", i <= sb->s_blocksize_bits + 1 ?
++ 				sg.info.bb_counters[i] : 0);
++@@ -3507,22 +3517,67 @@ static void ext4_mb_generate_from_freeli
++ }
++ 
++ /*
+++ * check free blocks in bitmap match free block in group descriptor
+++ * do this before taking preallocated blocks into account to be able
+++ * to detect on-disk corruptions. The group lock should be hold by the
+++ * caller.
+++ */
+++int ext4_mb_check_ondisk_bitmap(struct super_block *sb, void *bitmap,
+++				struct ext4_group_desc *gdp, int group)
+++{
+++	unsigned short max = EXT4_BLOCKS_PER_GROUP(sb);
+++	unsigned short i, first, free = 0;
+++
+++	i = mb_find_next_zero_bit(bitmap, max, 0);
+++
+++	while (i < max) {
+++		first = i;
+++		i = mb_find_next_bit(bitmap, max, i);
+++		if (i > max)
+++			i = max;
+++		free += i - first;
+++		if (i < max)
+++			i = mb_find_next_zero_bit(bitmap, max, i);
+++	}
+++
+++	if (free != ext4_free_group_clusters(sb, gdp)) {
+++		ext4_error(sb, "on-disk bitmap for group %d"
+++			"corrupted: %u blocks free in bitmap, %u - in gd\n",
+++			group, free, ext4_free_group_clusters(sb, gdp));
+++		return -EIO;
+++	}
+++	return 0;
+++}
+++
+++/*
++  * the function goes through all preallocation in this group and marks them
++  * used in in-core bitmap. buddy must be generated from this bitmap
++  * Need to be called with ext4 group lock held
++  */
++ static noinline_for_stack
++-void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
+++int ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
++ 					ext4_group_t group)
++ {
++ 	struct ext4_group_info *grp = ext4_get_group_info(sb, group);
++ 	struct ext4_prealloc_space *pa;
+++	struct ext4_group_desc *gdp;
++ 	struct list_head *cur;
++ 	ext4_group_t groupnr;
++ 	ext4_grpblk_t start;
++ 	int preallocated = 0;
+++	int skip = 0, count = 0;
+++	int err;
++ 	int len;
++ 
+++	gdp = ext4_get_group_desc (sb, group, NULL);
+++	if (gdp == NULL)
+++		return -EIO;
+++
+++	/* before applying preallocations, check bitmap consistency */
+++	err = ext4_mb_check_ondisk_bitmap(sb, bitmap, gdp, group);
+++	if (err)
+++		return err;
+++
++ 	/* all form of preallocation discards first load group,
++ 	 * so the only competing code is preallocation use.
++ 	 * we don't need any locking here
++@@ -3538,13 +3593,23 @@ void ext4_mb_generate_from_pa(struct sup
++ 					     &groupnr, &start);
++ 		len = pa->pa_len;
++ 		spin_unlock(&pa->pa_lock);
++-		if (unlikely(len == 0))
+++		if (unlikely(len == 0)) {
+++			skip++;
++ 			continue;
+++		}
++ 		BUG_ON(groupnr != group);
++ 		ext4_set_bits(bitmap, start, len);
++ 		preallocated += len;
+++		count ++;
+++	}
+++	if (count + skip != grp->bb_prealloc_nr) {
+++		ext4_error(sb, "lost preallocations: "
+++			   "count %d, bb_prealloc_nr %lu, skip %d\n",
+++			   count, grp->bb_prealloc_nr, skip);
+++		return -EIO;
++ 	}
++ 	mb_debug(1, "prellocated %u for group %u\n", preallocated, group);
+++	return 0;
++ }
++ 
++ static void ext4_mb_pa_callback(struct rcu_head *head)
++@@ -3603,6 +3668,7 @@ static void ext4_mb_put_pa(struct ext4_a
++ 	 */
++ 	ext4_lock_group(sb, grp);
++ 	list_del(&pa->pa_group_list);
+++	ext4_get_group_info(sb, grp)->bb_prealloc_nr--;
++ 	ext4_unlock_group(sb, grp);
++ 
++ 	spin_lock(pa->pa_obj_lock);
++@@ -3697,6 +3763,7 @@ ext4_mb_new_inode_pa(struct ext4_allocat
++ 
++ 	ext4_lock_group(sb, ac->ac_b_ex.fe_group);
++ 	list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
+++	grp->bb_prealloc_nr++;
++ 	ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
++ 
++ 	spin_lock(pa->pa_obj_lock);
++@@ -3758,6 +3825,7 @@ ext4_mb_new_group_pa(struct ext4_allocat
++ 
++ 	ext4_lock_group(sb, ac->ac_b_ex.fe_group);
++ 	list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
+++	grp->bb_prealloc_nr++;
++ 	ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
++ 
++ 	/*
++@@ -3927,6 +3995,8 @@ repeat:
++ 
++ 		spin_unlock(&pa->pa_lock);
++ 
+++		BUG_ON(grp->bb_prealloc_nr == 0);
+++		grp->bb_prealloc_nr--;
++ 		list_del(&pa->pa_group_list);
++ 		list_add(&pa->u.pa_tmp_list, &list);
++ 	}
++@@ -4056,7 +4126,7 @@ repeat:
++ 		if (err) {
++ 			ext4_error(sb, "Error loading buddy information for %u",
++ 					group);
++-			continue;
+++			return;
++ 		}
++ 
++ 		bitmap_bh = ext4_read_block_bitmap(sb, group);
++@@ -4068,6 +4138,8 @@ repeat:
++ 		}
++ 
++ 		ext4_lock_group(sb, group);
+++		BUG_ON(e4b.bd_info->bb_prealloc_nr == 0);
+++		e4b.bd_info->bb_prealloc_nr--;
++ 		list_del(&pa->pa_group_list);
++ 		ext4_mb_release_inode_pa(&e4b, bitmap_bh, pa);
++ 		ext4_unlock_group(sb, group);
++@@ -4328,6 +4400,7 @@ ext4_mb_discard_lg_preallocations(struct
++ 		}
++ 		ext4_lock_group(sb, group);
++ 		list_del(&pa->pa_group_list);
+++		ext4_get_group_info(sb, group)->bb_prealloc_nr--;
++ 		ext4_mb_release_group_pa(&e4b, pa);
++ 		ext4_unlock_group(sb, group);
++ 
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
++@@ -82,7 +82,7 @@ extern ushort ext4_mballoc_debug;
++ /*
++  * for which requests use 2^N search using buddies
++  */
++-#define MB_DEFAULT_ORDER2_REQS		2
+++#define MB_DEFAULT_ORDER2_REQS		8
++ 
++ /*
++  * default group prealloc size 512 blocks
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch
+new file mode 100644
+index 0000000..df69372
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch
+@@ -0,0 +1,109 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
++@@ -3747,6 +3747,7 @@ ext4_mb_new_inode_pa(struct ext4_allocat
++ 	INIT_LIST_HEAD(&pa->pa_group_list);
++ 	pa->pa_deleted = 0;
++ 	pa->pa_type = MB_INODE_PA;
+++	pa->pa_error = 0;
++ 
++ 	mb_debug(1, "new inode pa %p: %llu/%u for %u\n", pa,
++ 			pa->pa_pstart, pa->pa_len, pa->pa_lstart);
++@@ -3808,6 +3809,7 @@ ext4_mb_new_group_pa(struct ext4_allocat
++ 	INIT_LIST_HEAD(&pa->pa_group_list);
++ 	pa->pa_deleted = 0;
++ 	pa->pa_type = MB_GROUP_PA;
+++	pa->pa_error = 0;
++ 
++ 	mb_debug(1, "new group pa %p: %llu/%u for %u\n", pa,
++ 			pa->pa_pstart, pa->pa_len, pa->pa_lstart);
++@@ -3868,7 +3870,9 @@ ext4_mb_release_inode_pa(struct ext4_bud
++ 	int err = 0;
++ 	int free = 0;
++ 
+++	assert_spin_locked(ext4_group_lock_ptr(sb, e4b->bd_group));
++ 	BUG_ON(pa->pa_deleted == 0);
+++	BUG_ON(pa->pa_inode == NULL);
++ 	ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit);
++ 	grp_blk_start = pa->pa_pstart - EXT4_C2B(sbi, bit);
++ 	BUG_ON(group != e4b->bd_group && pa->pa_len != 0);
++@@ -3891,12 +3895,18 @@ ext4_mb_release_inode_pa(struct ext4_bud
++ 		mb_free_blocks(pa->pa_inode, e4b, bit, next - bit);
++ 		bit = next + 1;
++ 	}
++-	if (free != pa->pa_free) {
++-		ext4_msg(e4b->bd_sb, KERN_CRIT,
++-			 "pa %p: logic %lu, phys. %lu, len %lu",
++-			 pa, (unsigned long) pa->pa_lstart,
++-			 (unsigned long) pa->pa_pstart,
++-			 (unsigned long) pa->pa_len);
+++
+++	/* "free < pa->pa_free" means we maybe double alloc the same blocks,
+++	 * otherwise maybe leave some free blocks unavailable, no need to BUG.*/
+++	if ((free > pa->pa_free && !pa->pa_error) || (free < pa->pa_free)) {
+++		ext4_error(sb, "pa free mismatch: [pa %p] "
+++				"[phy %lu] [logic %lu] [len %u] [free %u] "
+++				"[error %u] [inode %lu] [freed %u]", pa,
+++				(unsigned long)pa->pa_pstart,
+++				(unsigned long)pa->pa_lstart,
+++				(unsigned)pa->pa_len, (unsigned)pa->pa_free,
+++				(unsigned)pa->pa_error, pa->pa_inode->i_ino,
+++				free);
++ 		ext4_grp_locked_error(sb, group, 0, 0, "free %u, pa_free %u",
++ 					free, pa->pa_free);
++ 		/*
++@@ -3904,6 +3914,7 @@ ext4_mb_release_inode_pa(struct ext4_bud
++ 		 * from the bitmap and continue.
++ 		 */
++ 	}
+++	BUG_ON(pa->pa_free != free);
++ 	atomic_add(free, &sbi->s_mb_discarded);
++ 
++ 	return err;
++@@ -4661,6 +4672,25 @@ errout:
++ 		ac->ac_b_ex.fe_len = 0;
++ 		ar->len = 0;
++ 		ext4_mb_show_ac(ac);
+++		if (ac->ac_pa) {
+++			struct ext4_prealloc_space *pa = ac->ac_pa;
+++
+++			/* We can not make sure whether the bitmap has
+++			 * been updated or not when fail case. So can
+++			 * not revert pa_free back, just mark pa_error*/
+++			pa->pa_error++;
+++			ext4_error(sb,
+++				"Updating bitmap error: [err %d] "
+++				"[pa %p] [phy %lu] [logic %lu] "
+++				"[len %u] [free %u] [error %u] "
+++				"[inode %lu]", *errp, pa,
+++				(unsigned long)pa->pa_pstart,
+++				(unsigned long)pa->pa_lstart,
+++				(unsigned)pa->pa_len,
+++				(unsigned)pa->pa_free,
+++				(unsigned)pa->pa_error,
+++				pa->pa_inode ? pa->pa_inode->i_ino : 0);
+++		}
++ 	}
++ 	ext4_mb_release_context(ac);
++ out:
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
++@@ -19,6 +19,7 @@
++ #include <linux/seq_file.h>
++ #include <linux/blkdev.h>
++ #include <linux/mutex.h>
+++#include <linux/genhd.h>
++ #include "ext4_jbd2.h"
++ #include "ext4.h"
++ 
++@@ -126,6 +127,7 @@ struct ext4_prealloc_space {
++ 	ext4_grpblk_t		pa_free;	/* how many blocks are free */
++ 	unsigned short		pa_type;	/* pa type. inode or group */
++ 	spinlock_t		*pa_obj_lock;
+++	unsigned short		pa_error;
++ 	struct inode		*pa_inode;	/* hack, for history only */
++ };
++ 
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch
+new file mode 100644
+index 0000000..1f0ab31
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch
+@@ -0,0 +1,193 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -1421,6 +1421,11 @@ static inline void ext4_clear_state_flag
++ 
++ #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
++ 
+++/* Has been moved to linux/magic.h but we need it for Lustre */
+++#define EXT4_SUPER_MAGIC	0xEF53
+++#define JOURNAL_START_HAS_3ARGS	1
+++#define HAVE_LDISKFS_MAP_BLOCKS	1
+++
++ /*
++  * Codes for operating systems
++  */
++@@ -2670,6 +2675,8 @@ struct ext4_extent;
++ 
++ extern int ext4_ext_tree_init(handle_t *handle, struct inode *);
++ extern int ext4_ext_writepage_trans_blocks(struct inode *, int);
+++extern struct buffer_head *ext4_read_inode_bitmap(struct super_block *sb,
+++						  ext4_group_t block_group);
++ extern int ext4_ext_index_trans_blocks(struct inode *inode, int extents);
++ extern int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
++ 			       struct ext4_map_blocks *map, int flags);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4_jbd2.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.c
++@@ -34,6 +34,8 @@ static void ext4_put_nojournal(handle_t
++ 
++ 	current->journal_info = handle;
++ }
+++EXPORT_SYMBOL(__ext4_journal_get_write_access);
+++EXPORT_SYMBOL(__ext4_journal_start_sb);
++ 
++ /*
++  * Wrappers for jbd2_journal_start/end.
++@@ -299,3 +301,4 @@ int __ext4_handle_dirty_super(const char
++ 		mark_buffer_dirty(bh);
++ 	return err;
++ }
+++EXPORT_SYMBOL(__ext4_handle_dirty_metadata);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4_jbd2.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.h
++@@ -37,6 +37,8 @@
++ 	(EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)   \
++ 	 ? 20U : 8U)
++ 
+++#define ext4_journal_dirty_metadata(handle, bh)  \
+++		ext4_handle_dirty_metadata(handle, NULL, bh)
++ /* Extended attribute operations touch at most two data buffers,
++  * two bitmap buffers, and two group summaries, in addition to the inode
++  * and the superblock, which are already accounted for. */
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++@@ -4222,6 +4222,9 @@ bad_inode:
++ 	iget_failed(inode);
++ 	return ERR_PTR(ret);
++ }
+++EXPORT_SYMBOL(ext4_iget);
+++EXPORT_SYMBOL(ext4_map_blocks);
+++EXPORT_SYMBOL(ext4_truncate);
++ 
++ static int ext4_inode_blocks_set(handle_t *handle,
++ 				struct ext4_inode *raw_inode,
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -1141,10 +1141,12 @@ enum {
++ 	Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
++ 	Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
++ 	Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
+++	Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
++ 	Opt_usrquota, Opt_grpquota, Opt_i_version,
++ 	Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_mblk_io_submit,
++ 	Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
++ 	Opt_inode_readahead_blks, Opt_journal_ioprio,
+++	Opt_mballoc,
++ 	Opt_dioread_nolock, Opt_dioread_lock,
++ 	Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
++ 	Opt_max_dir_size_kb,
++@@ -1198,6 +1200,10 @@ static const match_table_t tokens = {
++ 	{Opt_noquota, "noquota"},
++ 	{Opt_quota, "quota"},
++ 	{Opt_usrquota, "usrquota"},
+++	{Opt_iopen, "iopen"},
+++	{Opt_noiopen, "noiopen"},
+++	{Opt_iopen_nopriv, "iopen_nopriv"},
+++	{Opt_mballoc, "mballoc"},
++ 	{Opt_barrier, "barrier=%u"},
++ 	{Opt_barrier, "barrier"},
++ 	{Opt_nobarrier, "nobarrier"},
++@@ -1457,6 +1463,11 @@ static int handle_mount_opt(struct super
++ 	case Opt_i_version:
++ 		sb->s_flags |= MS_I_VERSION;
++ 		return 1;
+++	case Opt_iopen:
+++	case Opt_noiopen:
+++	case Opt_iopen_nopriv:
+++	case Opt_mballoc:
+++		return 1;
++ 	}
++ 
++ 	for (m = ext4_mount_opts; m->token != Opt_err; m++)
++@@ -4162,6 +4173,8 @@ out_free_orig:
++ 	return err ? err : ret;
++ }
++ 
+++EXPORT_SYMBOL(ext4_force_commit);
+++
++ /*
++  * Setup any per-fs journal parameters now.  We'll do this both on
++  * initial mount, once the journal has been initialised but before we've
++@@ -5501,6 +5514,9 @@ static void __exit ext4_exit_fs(void)
++ 	ext4_exit_es();
++ }
++ 
+++EXPORT_SYMBOL(ext4_bread);
+++EXPORT_SYMBOL(__ext4_journal_stop);
+++
++ MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
++ MODULE_DESCRIPTION("Fourth Extended Filesystem");
++ MODULE_LICENSE("GPL");
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -2210,7 +2210,7 @@ out:
++  * DIR_NLINK feature is set if 1) nlinks > EXT4_LINK_MAX or 2) nlinks == 2,
++  * since this indicates that nlinks count was previously 1.
++  */
++-static void ext4_inc_count(handle_t *handle, struct inode *inode)
+++void ext4_inc_count(handle_t *handle, struct inode *inode)
++ {
++ 	inc_nlink(inode);
++ 	if (is_dx(inode) && inode->i_nlink > 1) {
++@@ -2222,16 +2222,18 @@ static void ext4_inc_count(handle_t *han
++ 		}
++ 	}
++ }
+++EXPORT_SYMBOL(ext4_inc_count);
++ 
++ /*
++  * If a directory had nlink == 1, then we should let it be 1. This indicates
++  * directory has >EXT4_LINK_MAX subdirs.
++  */
++-static void ext4_dec_count(handle_t *handle, struct inode *inode)
+++void ext4_dec_count(handle_t *handle, struct inode *inode)
++ {
++ 	if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
++ 		drop_nlink(inode);
++ }
+++EXPORT_SYMBOL(ext4_dec_count);
++ 
++ 
++ static int ext4_add_nondir(handle_t *handle,
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ialloc.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
++@@ -111,7 +111,7 @@ void ext4_end_bitmap_read(struct buffer_
++  *
++  * Return buffer_head of bitmap on success or NULL.
++  */
++-static struct buffer_head *
+++struct buffer_head *
++ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
++ {
++ 	struct ext4_group_desc *desc;
++@@ -191,6 +191,7 @@ verify:
++ 	set_buffer_verified(bh);
++ 	return bh;
++ }
+++EXPORT_SYMBOL(ext4_read_inode_bitmap);
++ 
++ /*
++  * NOTE! When we get the inode, we're the only people
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/extents.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/extents.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/extents.c
++@@ -4774,3 +4774,5 @@ int ext4_fiemap(struct inode *inode, str
++ 
++ 	return error;
++ }
+++
+++EXPORT_SYMBOL(ext4_mark_inode_dirty);
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch
+new file mode 100644
+index 0000000..0717d15
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch
+@@ -0,0 +1,28 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
++@@ -1432,7 +1432,8 @@ ext4_xattr_set_handle(handle_t *handle,
++ 	}
++ 	if (!error) {
++ 		ext4_xattr_update_super_block(handle, inode->i_sb);
++-		inode->i_ctime = ext4_current_time(inode);
+++		if (!IS_NOCMTIME(inode))
+++ 			inode->i_ctime = ext4_current_time(inode);
++ 		if (!value)
++ 			ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND);
++ 		error = ext4_mark_iloc_dirty(handle, inode, &is.iloc);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -1797,7 +1797,8 @@ static int add_dirent_to_buf(handle_t *h
++ 	 * happen is that the times are slightly out of date
++ 	 * and/or different from the directory change time.
++ 	 */
++-	dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
+++	if (!IS_NOCMTIME(dir))
+++		dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
++ 	ext4_update_dx_flag(dir);
++ 	dir->i_version++;
++ 	ext4_mark_inode_dirty(handle, dir);
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch
+new file mode 100644
+index 0000000..1f2cf1a
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch
+@@ -0,0 +1,56 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -2167,6 +2167,9 @@ extern struct buffer_head * ext4_find_en
++ 					    struct ext4_dir_entry_2 ** res_dir,
++ 					    int *inlined);
++ #define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL)
+++extern struct buffer_head *ext4_append(handle_t *handle,
+++				       struct inode *inode,
+++				       ext4_lblk_t *block);
++ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
++ 			       struct inode *inode);
++ extern int search_dir(struct buffer_head *bh,
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/hash.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/hash.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/hash.c
++@@ -206,3 +206,4 @@ int ext4fs_dirhash(const char *name, int
++ 	hinfo->minor_hash = minor_hash;
++ 	return 0;
++ }
+++EXPORT_SYMBOL(ext4fs_dirhash);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -48,7 +48,7 @@
++ #define NAMEI_RA_BLOCKS  4
++ #define NAMEI_RA_SIZE	     (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
++ 
++-static struct buffer_head *ext4_append(handle_t *handle,
+++struct buffer_head *ext4_append(handle_t *handle,
++ 					struct inode *inode,
++ 					ext4_lblk_t *block)
++ {
++@@ -163,6 +163,7 @@ static struct buffer_head *__ext4_read_d
++ 	}
++ 	return bh;
++ }
+++EXPORT_SYMBOL(ext4_append);
++ 
++ #ifndef assert
++ #define assert(test) J_ASSERT(test)
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -552,6 +552,7 @@ void __ext4_std_error(struct super_block
++ 
++ 	ext4_handle_error(sb);
++ }
+++EXPORT_SYMBOL(__ext4_std_error);
++ 
++ /*
++  * ext4_abort is a much stronger failure handler than ext4_error.  The
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch
+new file mode 100644
+index 0000000..64e82d7
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch
+@@ -0,0 +1,135 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -2155,6 +2155,20 @@ extern int ext4_orphan_add(handle_t *, s
++ extern int ext4_orphan_del(handle_t *, struct inode *);
++ extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
++ 				__u32 start_minor_hash, __u32 *next_hash);
+++extern struct inode *ext4_create_inode(handle_t *handle,
+++				       struct inode * dir, int mode);
+++extern int ext4_add_entry(handle_t *handle, struct dentry *dentry,
+++			  struct inode *inode);
+++extern int ext4_delete_entry(handle_t *handle, struct inode * dir,
+++			     struct ext4_dir_entry_2 * de_del,
+++			     struct buffer_head * bh);
+++extern struct buffer_head * ext4_find_entry(struct inode *dir,
+++					    const struct qstr *d_name,
+++					    struct ext4_dir_entry_2 ** res_dir,
+++					    int *inlined);
+++#define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL)
+++extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
+++			       struct inode *inode);
++ extern int search_dir(struct buffer_head *bh,
++ 		      char *search_buf,
++ 		      int buf_size,
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -1218,7 +1218,7 @@ static int is_dx_internal_node(struct in
++  * The returned buffer_head has ->b_count elevated.  The caller is expected
++  * to brelse() it when appropriate.
++  */
++-static struct buffer_head * ext4_find_entry (struct inode *dir,
+++struct buffer_head * ext4_find_entry(struct inode *dir,
++ 					const struct qstr *d_name,
++ 					struct ext4_dir_entry_2 **res_dir,
++ 					int *inlined)
++@@ -1362,6 +1362,7 @@ cleanup_and_exit:
++ 		brelse(bh_use[ra_ptr]);
++ 	return ret;
++ }
+++EXPORT_SYMBOL(ext4_find_entry);
++ 
++ static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name,
++ 		       struct ext4_dir_entry_2 **res_dir, int *err)
++@@ -1910,8 +1911,8 @@ static int make_indexed_dir(handle_t *ha
++  * may not sleep between calling this and putting something into
++  * the entry, as someone else might have used it while you slept.
++  */
++-static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
++-			  struct inode *inode)
+++int ext4_add_entry(handle_t *handle, struct dentry *dentry,
+++		   struct inode *inode)
++ {
++ 	struct inode *dir = dentry->d_parent->d_inode;
++ 	struct buffer_head *bh;
++@@ -1986,6 +1987,7 @@ static int ext4_add_entry(handle_t *hand
++ 		ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
++ 	return retval;
++ }
+++EXPORT_SYMBOL(ext4_add_entry);
++ 
++ /*
++  * Returns 0 for success, or a negative error value
++@@ -2172,7 +2174,7 @@ int ext4_generic_delete_entry(handle_t *
++ 	return -ENOENT;
++ }
++ 
++-static int ext4_delete_entry(handle_t *handle,
+++int ext4_delete_entry(handle_t *handle,
++ 			     struct inode *dir,
++ 			     struct ext4_dir_entry_2 *de_del,
++ 			     struct buffer_head *bh)
++@@ -2213,7 +2215,7 @@ out:
++ 		ext4_std_error(dir->i_sb, err);
++ 	return err;
++ }
++-
+++EXPORT_SYMBOL(ext4_delete_entry);
++ /*
++  * DIR_NLINK feature is set if 1) nlinks > EXT4_LINK_MAX or 2) nlinks == 2,
++  * since this indicates that nlinks count was previously 1.
++@@ -2260,6 +2262,27 @@ static int ext4_add_nondir(handle_t *han
++ 	return err;
++ }
++ 
+++struct inode * ext4_create_inode(handle_t *handle, struct inode * dir, int mode)
+++{
+++	struct inode *inode;
+++
+++	inode = ext4_new_inode(handle, dir, mode, NULL, 0, NULL);
+++	if (!IS_ERR(inode)) {
+++		if (S_ISCHR(mode) || S_ISBLK(mode) || S_ISFIFO(mode)) {
+++#ifdef CONFIG_LDISKFS_FS_XATTR
+++			inode->i_op = &ext4_special_inode_operations;
+++#endif
+++		} else {
+++			inode->i_op = &ext4_file_inode_operations;
+++			inode->i_fop = &ext4_file_operations;
+++			ext4_set_aops(inode);
+++		}
+++		unlock_new_inode(inode);
+++	}
+++	return inode;
+++}
+++EXPORT_SYMBOL(ext4_create_inode);
+++
++ /*
++  * By the time this is called, we already have created
++  * the directory cache entry for the new file, but it
++@@ -2448,6 +2471,23 @@ out:
++ 	return err;
++ }
++ 
+++/* Initialize @inode as a subdirectory of @dir, and add the
+++ * "." and ".." entries into the first directory block. */
+++int ext4_add_dot_dotdot(handle_t *handle, struct inode * dir,
+++			struct inode *inode)
+++{
+++	if (IS_ERR(handle))
+++		return PTR_ERR(handle);
+++
+++	if (IS_DIRSYNC(dir))
+++		ext4_handle_sync(handle);
+++
+++	inode->i_op = &ext4_dir_inode_operations;
+++	inode->i_fop = &ext4_dir_operations;
+++	return ext4_init_new_dir(handle, dir, inode);
+++}
+++EXPORT_SYMBOL(ext4_add_dot_dotdot);
+++
++ static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
++ {
++ 	handle_t *handle;
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch
+new file mode 100644
+index 0000000..db24d01
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch
+@@ -0,0 +1,61 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -793,6 +793,9 @@ struct ext4_inode_info {
++ 	__u32	i_dtime;
++ 	ext4_fsblk_t	i_file_acl;
++ 
+++	/* following fields for parallel directory operations -bzzz */
+++	struct semaphore i_append_sem;
+++
++ 	/*
++ 	 * i_block_group is the number of the block group which contains
++ 	 * this file's inode.  Constant across the lifetime of the inode,
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -53,6 +53,7 @@ static struct buffer_head *ext4_append(h
++ 					ext4_lblk_t *block)
++ {
++ 	struct buffer_head *bh;
+++	struct ext4_inode_info *ei = EXT4_I(inode);
++ 	int err = 0;
++ 
++ 	if (unlikely(EXT4_SB(inode->i_sb)->s_max_dir_size_kb &&
++@@ -60,14 +61,21 @@ static struct buffer_head *ext4_append(h
++ 		      EXT4_SB(inode->i_sb)->s_max_dir_size_kb)))
++ 		return ERR_PTR(-ENOSPC);
++ 
+++	/* with parallel dir operations all appends
+++	* have to be serialized -bzzz */
+++	down(&ei->i_append_sem);
+++
++ 	*block = inode->i_size >> inode->i_sb->s_blocksize_bits;
++ 
++ 	bh = ext4_bread(handle, inode, *block, 1, &err);
++-	if (!bh)
+++	if (!bh) {
+++		up(&ei->i_append_sem);
++		return ERR_PTR(err);
+++	}
++ 	inode->i_size += inode->i_sb->s_blocksize;
++ 	EXT4_I(inode)->i_disksize = inode->i_size;
++ 	err = ext4_journal_get_write_access(handle, bh);
+++	up(&ei->i_append_sem);
++ 	if (err) {
++ 		brelse(bh);
++ 		ext4_std_error(inode->i_sb, err);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -859,6 +859,7 @@ static struct inode *ext4_alloc_inode(st
++ 		return NULL;
++ 
++ 	ei->vfs_inode.i_version = 1;
+++	sema_init(&ei->i_append_sem, 1);
++ 	INIT_LIST_HEAD(&ei->i_prealloc_list);
++ 	spin_lock_init(&ei->i_prealloc_lock);
++ 	ext4_es_init_tree(&ei->i_es_tree);
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch
+new file mode 100644
+index 0000000..cb54844
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch
+@@ -0,0 +1,387 @@
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -1237,11 +1237,14 @@ struct ext4_sb_info {
++ 
++ 	/* tunables */
++ 	unsigned long s_stripe;
++-	unsigned int s_mb_stream_request;
+++	unsigned long s_mb_small_req;
+++	unsigned long s_mb_large_req;
++ 	unsigned int s_mb_max_to_scan;
++ 	unsigned int s_mb_min_to_scan;
++ 	unsigned int s_mb_stats;
++ 	unsigned int s_mb_order2_reqs;
+++	unsigned long *s_mb_prealloc_table;
+++	unsigned long s_mb_prealloc_table_size;
++ 	unsigned int s_mb_group_prealloc;
++ 	unsigned int s_max_dir_size_kb;
++ 	/* where last allocation was done - for stream allocation */
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
++@@ -1828,6 +1828,25 @@ int ext4_mb_find_by_goal(struct ext4_all
++ 	return 0;
++ }
++ 
+++static void ext4_mb_prealloc_table_add(struct ext4_sb_info *sbi, int value)
+++{
+++	int i;
+++
+++	if (value > (sbi->s_blocks_per_group - 1 - 1 - sbi->s_itb_per_group))
+++		return;
+++
+++	for (i = 0; i < sbi->s_mb_prealloc_table_size; i++) {
+++		if (sbi->s_mb_prealloc_table[i] == 0) {
+++			sbi->s_mb_prealloc_table[i] = value;
+++			return;
+++		}
+++
+++		/* they should add values in order */
+++		if (value <= sbi->s_mb_prealloc_table[i])
+++			return;
+++	}
+++}
+++
++ /*
++  * The routine scans buddy structures (not bitmap!) from given order
++  * to max order and tries to find big enough chunk to satisfy the req
++@@ -2263,6 +2282,86 @@ static const struct seq_operations ext4_
++ 	.show   = ext4_mb_seq_groups_show,
++ };
++ 
+++#define EXT4_MB_PREALLOC_TABLE          "prealloc_table"
+++
+++static ssize_t ext4_mb_prealloc_table_proc_write(struct file *file,
+++					     const char __user *buf,
+++					     size_t cnt, loff_t *pos)
+++{
+++	struct ext4_sb_info *sbi = EXT4_SB(PDE_DATA(file_inode(file)));
+++	unsigned long value;
+++	unsigned long prev = 0;
+++	char str[128];
+++	char *cur;
+++	char *end;
+++	unsigned long *new_table;
+++	int num = 0;
+++	int i = 0;
+++
+++	if (cnt >= sizeof(str))
+++		return -EINVAL;
+++	if (copy_from_user(str, buf, cnt))
+++		return -EFAULT;
+++
+++	num = 0;
+++	cur = str;
+++	end = str + cnt;
+++	while (cur < end) {
+++		while ((cur < end) && (*cur == ' ')) cur++;
+++		value = simple_strtol(cur, &cur, 0);
+++		if (value == 0)
+++			break;
+++		if (value <= prev)
+++			return -EINVAL;
+++		prev = value;
+++		num++;
+++	}
+++
+++	new_table = kmalloc(num * sizeof(*new_table), GFP_KERNEL);
+++	if (new_table == NULL)
+++		return -ENOMEM;
+++	kfree(sbi->s_mb_prealloc_table);
+++	memset(new_table, 0, num * sizeof(*new_table));
+++	sbi->s_mb_prealloc_table = new_table;
+++	sbi->s_mb_prealloc_table_size = num;
+++	cur = str;
+++	end = str + cnt;
+++	while (cur < end && i < num) {
+++	while ((cur < end) && (*cur == ' ')) cur++;
+++		value = simple_strtol(cur, &cur, 0);
+++		ext4_mb_prealloc_table_add(sbi, value);
+++		i++;
+++	}
+++
+++	return cnt;
+++}
+++
+++static int mb_prealloc_table_seq_show(struct seq_file *m, void *v)
+++{
+++ 	struct ext4_sb_info *sbi = EXT4_SB(m->private);
+++	int i;
+++
+++	for (i = 0; i < sbi->s_mb_prealloc_table_size; i++)
+++		seq_printf(m, "%ld ", sbi->s_mb_prealloc_table[i]);
+++	seq_printf(m, "\n");
+++
+++	return 0;
+++}
+++
+++static int mb_prealloc_table_seq_open(struct inode *inode, struct file *file)
+++{
+++	return single_open(file, mb_prealloc_table_seq_show, PDE_DATA(inode));
+++}
+++
+++struct file_operations ext4_mb_prealloc_seq_fops = {
+++	.owner   = THIS_MODULE,
+++	.open    = mb_prealloc_table_seq_open,
+++	.read    = seq_read,
+++	.llseek  = seq_lseek,
+++	.release = single_release,
+++	.write   = ext4_mb_prealloc_table_proc_write,
+++};
+++
++ static int ext4_mb_seq_groups_open(struct inode *inode, struct file *file)
++ {
++ 	struct super_block *sb = PDE_DATA(inode);
++@@ -2557,7 +2656,6 @@ int ext4_mb_init(struct super_block *sb)
++ 	sbi->s_mb_max_to_scan = MB_DEFAULT_MAX_TO_SCAN;
++ 	sbi->s_mb_min_to_scan = MB_DEFAULT_MIN_TO_SCAN;
++ 	sbi->s_mb_stats = MB_DEFAULT_STATS;
++-	sbi->s_mb_stream_request = MB_DEFAULT_STREAM_THRESHOLD;
++ 	sbi->s_mb_order2_reqs = MB_DEFAULT_ORDER2_REQS;
++ 	/*
++ 	 * The default group preallocation is 512, which for 4k block
++@@ -2581,9 +2679,48 @@ int ext4_mb_init(struct super_block *sb)
++ 	 * RAID stripe size so that preallocations don't fragment
++ 	 * the stripes.
++ 	 */
++-	if (sbi->s_stripe > 1) {
++-		sbi->s_mb_group_prealloc = roundup(
++-			sbi->s_mb_group_prealloc, sbi->s_stripe);
+++
+++	if (sbi->s_stripe == 0) {
+++		sbi->s_mb_prealloc_table_size = 10;
+++		i = sbi->s_mb_prealloc_table_size * sizeof(unsigned long);
+++		sbi->s_mb_prealloc_table = kmalloc(i, GFP_NOFS);
+++		if (sbi->s_mb_prealloc_table == NULL) {
+++			ret = -ENOMEM;
+++			goto out;
+++		}
+++		memset(sbi->s_mb_prealloc_table, 0, i);
+++
+++		ext4_mb_prealloc_table_add(sbi, 4);
+++		ext4_mb_prealloc_table_add(sbi, 8);
+++		ext4_mb_prealloc_table_add(sbi, 16);
+++		ext4_mb_prealloc_table_add(sbi, 32);
+++		ext4_mb_prealloc_table_add(sbi, 64);
+++		ext4_mb_prealloc_table_add(sbi, 128);
+++		ext4_mb_prealloc_table_add(sbi, 256);
+++		ext4_mb_prealloc_table_add(sbi, 512);
+++		ext4_mb_prealloc_table_add(sbi, 1024);
+++		ext4_mb_prealloc_table_add(sbi, 2048);
+++
+++		sbi->s_mb_small_req = 256;
+++		sbi->s_mb_large_req = 1024;
+++		sbi->s_mb_group_prealloc = 512;
+++	} else {
+++		sbi->s_mb_prealloc_table_size = 3;
+++		i = sbi->s_mb_prealloc_table_size * sizeof(unsigned long);
+++		sbi->s_mb_prealloc_table = kmalloc(i, GFP_NOFS);
+++		if (sbi->s_mb_prealloc_table == NULL) {
+++			ret = -ENOMEM;
+++			goto out;
+++		}
+++		memset(sbi->s_mb_prealloc_table, 0, i);
+++
+++		ext4_mb_prealloc_table_add(sbi, sbi->s_stripe);
+++		ext4_mb_prealloc_table_add(sbi, sbi->s_stripe * 2);
+++		ext4_mb_prealloc_table_add(sbi, sbi->s_stripe * 4);
+++
+++		sbi->s_mb_small_req = sbi->s_stripe;
+++		sbi->s_mb_large_req = sbi->s_stripe * 8;
+++		sbi->s_mb_group_prealloc = sbi->s_stripe * 4;
++ 	}
++ 
++ 	sbi->s_locality_groups = alloc_percpu(struct ext4_locality_group);
++@@ -2605,9 +2742,13 @@ int ext4_mb_init(struct super_block *sb)
++ 	if (ret != 0)
++ 		goto out_free_locality_groups;
++ 
++-	if (sbi->s_proc)
+++	if (sbi->s_proc) {
++ 		proc_create_data("mb_groups", S_IRUGO, sbi->s_proc,
++ 				 &ext4_mb_seq_groups_fops, sb);
+++		proc_create_data(EXT4_MB_PREALLOC_TABLE, S_IFREG | S_IRUGO |
+++				 S_IWUSR, sbi->s_proc,
+++				 &ext4_mb_prealloc_seq_fops, sb);
+++	}
++ 
++ 	return 0;
++ 
++@@ -2615,6 +2756,7 @@ out_free_locality_groups:
++ 	free_percpu(sbi->s_locality_groups);
++ 	sbi->s_locality_groups = NULL;
++ out_free_groupinfo_slab:
+++	kfree(sbi->s_mb_prealloc_table);
++ 	ext4_groupinfo_destroy_slabs();
++ out:
++ 	kfree(sbi->s_mb_offsets);
++@@ -2651,8 +2793,10 @@ int ext4_mb_release(struct super_block *
++ 	struct ext4_sb_info *sbi = EXT4_SB(sb);
++ 	struct kmem_cache *cachep = get_groupinfo_cache(sb->s_blocksize_bits);
++ 
++-	if (sbi->s_proc)
+++	if (sbi->s_proc) {
++ 		remove_proc_entry("mb_groups", sbi->s_proc);
+++		remove_proc_entry(EXT4_MB_PREALLOC_TABLE, sbi->s_proc);
+++	}
++ 
++ 	if (sbi->s_group_info) {
++ 		for (i = 0; i < ngroups; i++) {
++@@ -2963,9 +3107,9 @@ ext4_mb_normalize_request(struct ext4_al
++ 				struct ext4_allocation_request *ar)
++ {
++ 	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
++-	int bsbits, max;
+++	int bsbits, i, wind;
++ 	ext4_lblk_t end;
++-	loff_t size, start_off;
+++	loff_t size;
++ 	loff_t orig_size __maybe_unused;
++ 	ext4_lblk_t start;
++ 	struct ext4_inode_info *ei = EXT4_I(ac->ac_inode);
++@@ -2998,50 +3142,34 @@ ext4_mb_normalize_request(struct ext4_al
++ 	size = size << bsbits;
++ 	if (size < i_size_read(ac->ac_inode))
++ 		size = i_size_read(ac->ac_inode);
++-	orig_size = size;
+++	size = (size + ac->ac_sb->s_blocksize - 1) >> bsbits;
++ 
++-	/* max size of free chunks */
++-	max = 2 << bsbits;
+++	start = wind = 0;
++ 
++-#define NRL_CHECK_SIZE(req, size, max, chunk_size)	\
++-		(req <= (size) || max <= (chunk_size))
+++	/* let's choose preallocation window depending on file size */
+++	for (i = 0; i < sbi->s_mb_prealloc_table_size; i++) {
+++		if (size <= sbi->s_mb_prealloc_table[i]) {
+++			wind = sbi->s_mb_prealloc_table[i];
+++			break;
+++		}
+++	}
+++	size = wind;
++ 
++-	/* first, try to predict filesize */
++-	/* XXX: should this table be tunable? */
++-	start_off = 0;
++-	if (size <= 16 * 1024) {
++-		size = 16 * 1024;
++-	} else if (size <= 32 * 1024) {
++-		size = 32 * 1024;
++-	} else if (size <= 64 * 1024) {
++-		size = 64 * 1024;
++-	} else if (size <= 128 * 1024) {
++-		size = 128 * 1024;
++-	} else if (size <= 256 * 1024) {
++-		size = 256 * 1024;
++-	} else if (size <= 512 * 1024) {
++-		size = 512 * 1024;
++-	} else if (size <= 1024 * 1024) {
++-		size = 1024 * 1024;
++-	} else if (NRL_CHECK_SIZE(size, 4 * 1024 * 1024, max, 2 * 1024)) {
++-		start_off = ((loff_t)ac->ac_o_ex.fe_logical >>
++-						(21 - bsbits)) << 21;
++-		size = 2 * 1024 * 1024;
++-	} else if (NRL_CHECK_SIZE(size, 8 * 1024 * 1024, max, 4 * 1024)) {
++-		start_off = ((loff_t)ac->ac_o_ex.fe_logical >>
++-							(22 - bsbits)) << 22;
++-		size = 4 * 1024 * 1024;
++-	} else if (NRL_CHECK_SIZE(ac->ac_o_ex.fe_len,
++-					(8<<20)>>bsbits, max, 8 * 1024)) {
++-		start_off = ((loff_t)ac->ac_o_ex.fe_logical >>
++-							(23 - bsbits)) << 23;
++-		size = 8 * 1024 * 1024;
++-	} else {
++-		start_off = (loff_t)ac->ac_o_ex.fe_logical << bsbits;
++-		size	  = ac->ac_o_ex.fe_len << bsbits;
+++	if (wind == 0) {
+++		__u64 tstart, tend;
+++		/* file is quite large, we now preallocate with
+++		 * the biggest configured window with regart to
+++		 * logical offset */
+++		wind = sbi->s_mb_prealloc_table[i - 1];
+++		tstart = ac->ac_o_ex.fe_logical;
+++		do_div(tstart, wind);
+++		start = tstart * wind;
+++		tend = ac->ac_o_ex.fe_logical + ac->ac_o_ex.fe_len - 1;
+++		do_div(tend, wind);
+++		tend = tend * wind + wind;
+++		size = tend - start;
++ 	}
++-	size = size >> bsbits;
++-	start = start_off >> bsbits;
+++	orig_size = size;
++ 
++ 	/* don't cover already allocated blocks in selected range */
++ 	if (ar->pleft && start <= ar->lleft) {
++@@ -3117,7 +3245,6 @@ ext4_mb_normalize_request(struct ext4_al
++ 	}
++ 	BUG_ON(start + size <= ac->ac_o_ex.fe_logical &&
++ 			start > ac->ac_o_ex.fe_logical);
++-	BUG_ON(size <= 0 || size > EXT4_CLUSTERS_PER_GROUP(ac->ac_sb));
++ 
++ 	/* now prepare goal request */
++ 
++@@ -4056,11 +4183,19 @@ static void ext4_mb_group_or_file(struct
++ 
++ 	/* don't use group allocation for large files */
++ 	size = max(size, isize);
++-	if (size > sbi->s_mb_stream_request) {
+++	if ((ac->ac_o_ex.fe_len >= sbi->s_mb_small_req) ||
+++	    (size >= sbi->s_mb_large_req)) {
++ 		ac->ac_flags |= EXT4_MB_STREAM_ALLOC;
++ 		return;
++ 	}
++ 
+++	/*
+++	 * request is so large that we don't care about
+++	 * streaming - it overweights any possible seek
+++	 */
+++	if (ac->ac_o_ex.fe_len >= sbi->s_mb_large_req)
+++		return;
+++
++ 	BUG_ON(ac->ac_lg != NULL);
++ 	/*
++ 	 * locality group prealloc space are per cpu. The reason for having
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
++@@ -2564,7 +2564,8 @@ EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats
++ EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
++ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
++ EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs);
++-EXT4_RW_ATTR_SBI_UI(mb_stream_req, s_mb_stream_request);
+++EXT4_RW_ATTR_SBI_UI(mb_small_req, s_mb_small_req);
+++EXT4_RW_ATTR_SBI_UI(mb_large_req, s_mb_large_req);
++ EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
++ EXT4_DEPRECATED_ATTR(max_writeback_mb_bump, 128);
++ EXT4_RW_ATTR_SBI_UI(extent_max_zeroout_kb, s_extent_max_zeroout_kb);
++@@ -2581,7 +2582,8 @@ static struct attribute *ext4_attrs[] =
++ 	ATTR_LIST(mb_max_to_scan),
++ 	ATTR_LIST(mb_min_to_scan),
++ 	ATTR_LIST(mb_order2_req),
++-	ATTR_LIST(mb_stream_req),
+++	ATTR_LIST(mb_small_req),
+++	ATTR_LIST(mb_large_req),
++ 	ATTR_LIST(mb_group_prealloc),
++ 	ATTR_LIST(max_writeback_mb_bump),
++ 	ATTR_LIST(extent_max_zeroout_kb),
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++@@ -2434,6 +2434,10 @@ static int ext4_writepages(struct addres
++ 		ext4_journal_stop(handle);
++ 	}
++ 
+++	if (wbc->nr_to_write < sbi->s_mb_small_req) {
+++		wbc->nr_to_write = sbi->s_mb_small_req;
+++	}
+++
++ 	if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
++ 		range_whole = 1;
++ 
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch b/ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch
+new file mode 100644
+index 0000000..7e8e94d
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch
+@@ -0,0 +1,649 @@
++this patch implements feature which allows ext4 fs users (e.g. Lustre)
++to store data in ext4 dirent.
++data is stored in ext4 dirent after file-name, this space is accounted
++in de->rec_len. flag EXT4_DIRENT_LUFID added to d_type if extra data
++is present.
++
++make use of dentry->d_fsdata to pass fid to ext4. so no
++changes in ext4_add_entry() interface required.
++
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/dir.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/dir.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/dir.c
++@@ -70,11 +70,11 @@ int __ext4_check_dir_entry(const char *f
++ 	const int rlen = ext4_rec_len_from_disk(de->rec_len,
++ 						dir->i_sb->s_blocksize);
++ 
++-	if (unlikely(rlen < EXT4_DIR_REC_LEN(1)))
+++	if (unlikely(rlen < __EXT4_DIR_REC_LEN(1)))
++ 		error_msg = "rec_len is smaller than minimal";
++ 	else if (unlikely(rlen % 4 != 0))
++ 		error_msg = "rec_len % 4 != 0";
++-	else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len)))
+++	else if (unlikely(rlen < EXT4_DIR_REC_LEN(de)))
++ 		error_msg = "rec_len is too small for name_len";
++ 	else if (unlikely(((char *) de - buf) + rlen > size))
++ 		error_msg = "directory entry across range";
++@@ -202,7 +202,7 @@ static int ext4_readdir(struct file *fil
++ 				 * failure will be detected in the
++ 				 * dirent test below. */
++ 				if (ext4_rec_len_from_disk(de->rec_len,
++-					sb->s_blocksize) < EXT4_DIR_REC_LEN(1))
+++					sb->s_blocksize) < __EXT4_DIR_REC_LEN(1))
++ 					break;
++ 				i += ext4_rec_len_from_disk(de->rec_len,
++ 							    sb->s_blocksize);
++@@ -421,12 +421,17 @@ int ext4_htree_store_dirent(struct file
++ 	struct fname *fname, *new_fn;
++ 	struct dir_private_info *info;
++ 	int len;
+++	int extra_data = 1;
++ 
++ 	info = dir_file->private_data;
++ 	p = &info->root.rb_node;
++ 
++ 	/* Create and allocate the fname structure */
++-	len = sizeof(struct fname) + dirent->name_len + 1;
+++	if (dirent->file_type & EXT4_DIRENT_LUFID)
+++		extra_data = ext4_get_dirent_data_len(dirent);
+++
+++	len = sizeof(struct fname) + dirent->name_len + extra_data;
+++
++ 	new_fn = kzalloc(len, GFP_KERNEL);
++ 	if (!new_fn)
++ 		return -ENOMEM;
++@@ -435,7 +440,7 @@ int ext4_htree_store_dirent(struct file
++ 	new_fn->inode = le32_to_cpu(dirent->inode);
++ 	new_fn->name_len = dirent->name_len;
++ 	new_fn->file_type = dirent->file_type;
++-	memcpy(new_fn->name, dirent->name, dirent->name_len);
+++	memcpy(new_fn->name, dirent->name, dirent->name_len + extra_data);
++ 	new_fn->name[dirent->name_len] = 0;
++ 
++ 	while (*p) {
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -1534,6 +1534,7 @@ static inline void ext4_clear_state_flag
++ 					 EXT4_FEATURE_INCOMPAT_64BIT| \
++ 					 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
++ 					 EXT4_FEATURE_INCOMPAT_MMP |	\
+++					 EXT4_FEATURE_INCOMPAT_DIRDATA| \
++ 					 EXT4_FEATURE_INCOMPAT_INLINE_DATA)
++ #define EXT4_FEATURE_RO_COMPAT_SUPP	(EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
++ 					 EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
++@@ -1640,6 +1641,43 @@ struct ext4_dir_entry_tail {
++ #define EXT4_FT_SYMLINK		7
++ 
++ #define EXT4_FT_MAX		8
+++#define EXT4_FT_MASK		0xf
+++
+++#if EXT4_FT_MAX > EXT4_FT_MASK
+++#error "conflicting EXT4_FT_MAX and EXT4_FT_MASK"
+++#endif
+++
+++/*
+++ * d_type has 4 unused bits, so it can hold four types data. these different
+++ * type of data (e.g. lustre data, high 32 bits of 64-bit inode number) can be
+++ * stored, in flag order, after file-name in ext4 dirent.
+++*/
+++/*
+++ * this flag is added to d_type if ext4 dirent has extra data after
+++ * filename. this data length is variable and length is stored in first byte
+++ * of data. data start after filename NUL byte.
+++ * This is used by Lustre FS.
+++  */
+++#define EXT4_DIRENT_LUFID		0x10
+++
+++#define EXT4_LUFID_MAGIC    0xAD200907UL
+++struct ext4_dentry_param {
+++	__u32  edp_magic;	/* EXT4_LUFID_MAGIC */
+++	char   edp_len;		/* size of edp_data in bytes */
+++	char   edp_data[0];	/* packed array of data */
+++} __attribute__((packed));
+++
+++static inline unsigned char *ext4_dentry_get_data(struct super_block *sb,
+++		struct ext4_dentry_param* p)
+++
+++{
+++	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_DIRDATA))
+++		return NULL;
+++	if (p && p->edp_magic == EXT4_LUFID_MAGIC)
+++		return &p->edp_len;
+++	else
+++		return NULL;
+++}
++ 
++ #define EXT4_FT_DIR_CSUM	0xDE
++ 
++@@ -1650,8 +1688,11 @@ struct ext4_dir_entry_tail {
++  */
++ #define EXT4_DIR_PAD			4
++ #define EXT4_DIR_ROUND			(EXT4_DIR_PAD - 1)
++-#define EXT4_DIR_REC_LEN(name_len)	(((name_len) + 8 + EXT4_DIR_ROUND) & \
+++#define __EXT4_DIR_REC_LEN(name_len)	(((name_len) + 8 + EXT4_DIR_ROUND) & \
++ 					 ~EXT4_DIR_ROUND)
+++#define EXT4_DIR_REC_LEN(de)		(__EXT4_DIR_REC_LEN((de)->name_len +\
+++					ext4_get_dirent_data_len(de)))
+++
++ #define EXT4_MAX_REC_LEN		((1<<16)-1)
++ 
++ /*
++@@ -1998,7 +2039,7 @@ extern int ext4_find_dest_de(struct inod
++ void ext4_insert_dentry(struct inode *inode,
++ 			struct ext4_dir_entry_2 *de,
++ 			int buf_size,
++-			const char *name, int namelen);
+++			const char *name, int namelen, void *data);
++ static inline void ext4_update_dx_flag(struct inode *inode)
++ {
++ 	if (!EXT4_HAS_COMPAT_FEATURE(inode->i_sb,
++@@ -2011,11 +2052,18 @@ static unsigned char ext4_filetype_table
++ 
++ static inline  unsigned char get_dtype(struct super_block *sb, int filetype)
++ {
+++	int fl_index = filetype & EXT4_FT_MASK;
+++
++ 	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FILETYPE) ||
++-	    (filetype >= EXT4_FT_MAX))
+++	    (fl_index >= EXT4_FT_MAX))
++ 		return DT_UNKNOWN;
++ 
++-	return ext4_filetype_table[filetype];
+++	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_DIRDATA))
+++		return (ext4_filetype_table[fl_index]);
+++
+++	return (ext4_filetype_table[fl_index]) |
+++		(filetype & EXT4_DIRENT_LUFID);
+++
++ }
++ 
++ /* fsync.c */
++@@ -2171,7 +2219,7 @@ extern struct buffer_head *ext4_append(h
++ 				       struct inode *inode,
++ 				       ext4_lblk_t *block);
++ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
++-			       struct inode *inode);
+++			       struct inode *inode, const void *, const void *);
++ extern int search_dir(struct buffer_head *bh,
++ 		      char *search_buf,
++ 		      int buf_size,
++@@ -2827,6 +2875,28 @@ extern struct mutex ext4__aio_mutex[EXT4
++ extern int ext4_resize_begin(struct super_block *sb);
++ extern void ext4_resize_end(struct super_block *sb);
++ 
+++/*
+++ * Compute the total directory entry data length.
+++ * This includes the filename and an implicit NUL terminator (always present),
+++ * and optional extensions.  Each extension has a bit set in the high 4 bits of
+++ * de->file_type, and the extension length is the first byte in each entry.
+++ */
+++static inline int ext4_get_dirent_data_len(struct ext4_dir_entry_2 *de)
+++{
+++	char *len = de->name + de->name_len + 1 /* NUL terminator */;
+++	int dlen = 0;
+++	__u8 extra_data_flags = (de->file_type & ~EXT4_FT_MASK) >> 4;
+++
+++	while (extra_data_flags) {
+++		if (extra_data_flags & 1) {
+++			dlen += *len + (dlen == 0);
+++			len += *len;
+++		}
+++		extra_data_flags >>= 1;
+++	}
+++	return dlen;
+++}
+++
++ #endif	/* __KERNEL__ */
++ 
++ #endif	/* _EXT4_H */
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -247,7 +247,8 @@ static unsigned dx_get_count(struct dx_e
++ static unsigned dx_get_limit(struct dx_entry *entries);
++ static void dx_set_count(struct dx_entry *entries, unsigned value);
++ static void dx_set_limit(struct dx_entry *entries, unsigned value);
++-static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
+++static inline unsigned dx_root_limit(struct inode *dir,
+++		struct ext4_dir_entry_2 *dot_de, unsigned infosize);
++ static unsigned dx_node_limit(struct inode *dir);
++ static struct dx_frame *dx_probe(const struct qstr *d_name,
++ 				 struct inode *dir,
++@@ -512,11 +513,12 @@ ext4_next_entry(struct ext4_dir_entry_2
++  */
++ struct dx_root_info * dx_get_dx_info(struct ext4_dir_entry_2 *de)
++ {
++-       /* get dotdot first */
++-       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(1));
+++	BUG_ON(de->name_len != 1);
+++	/* get dotdot first */
+++	de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(de));
++ 
++-       /* dx root info is after dotdot entry */
++-       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(2));
+++	/* dx root info is after dotdot entry */
+++	de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(de));
++ 
++        return (struct dx_root_info *) de;
++ }
++@@ -561,10 +563,16 @@ static inline void dx_set_limit(struct d
++ 	((struct dx_countlimit *) entries)->limit = cpu_to_le16(value);
++ }
++ 
++-static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
+++static inline unsigned dx_root_limit(struct inode *dir,
+++		struct ext4_dir_entry_2 *dot_de, unsigned infosize)
++ {
++-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
++-		EXT4_DIR_REC_LEN(2) - infosize;
+++	struct ext4_dir_entry_2 *dotdot_de;
+++	unsigned entry_space;
+++
+++	BUG_ON(dot_de->name_len != 1);
+++	dotdot_de = ext4_next_entry(dot_de, dir->i_sb->s_blocksize);
+++	entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(dot_de) -
+++			 EXT4_DIR_REC_LEN(dotdot_de) - infosize;
++ 
++ 	if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
++ 				       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
++@@ -574,7 +582,7 @@ static inline unsigned dx_root_limit(str
++ 
++ static inline unsigned dx_node_limit(struct inode *dir)
++ {
++-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
+++	unsigned entry_space = dir->i_sb->s_blocksize - __EXT4_DIR_REC_LEN(0);
++ 
++ 	if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
++ 				       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
++@@ -625,7 +633,7 @@ static struct stats dx_show_leaf(struct
++ 				printk(":%x.%u ", h.hash,
++ 				       (unsigned) ((char *) de - base));
++ 			}
++-			space += EXT4_DIR_REC_LEN(de->name_len);
+++			space += EXT4_DIR_REC_LEN(de);
++ 			names++;
++ 		}
++ 		de = ext4_next_entry(de, size);
++@@ -731,6 +739,7 @@ dx_probe(const struct qstr *d_name, stru
++ 	entries = (struct dx_entry *) (((char *)info) + info->info_length);
++ 
++ 	if (dx_get_limit(entries) != dx_root_limit(dir,
+++						   (struct ext4_dir_entry_2*)bh->b_data,
++ 						   info->info_length)) {
++ 		ext4_warning(dir->i_sb, "dx entry: limit != root limit");
++ 		brelse(bh);
++@@ -924,7 +933,7 @@ static int htree_dirblock_to_tree(struct
++ 	de = (struct ext4_dir_entry_2 *) bh->b_data;
++ 	top = (struct ext4_dir_entry_2 *) ((char *) de +
++ 					   dir->i_sb->s_blocksize -
++-					   EXT4_DIR_REC_LEN(0));
+++					   __EXT4_DIR_REC_LEN(0));
++ 	for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) {
++ 		if (ext4_check_dir_entry(dir, NULL, de, bh,
++ 				bh->b_data, bh->b_size,
++@@ -1516,7 +1525,7 @@ dx_move_dirents(char *from, char *to, st
++ 	while (count--) {
++ 		struct ext4_dir_entry_2 *de = (struct ext4_dir_entry_2 *)
++ 						(from + (map->offs<<2));
++-		rec_len = EXT4_DIR_REC_LEN(de->name_len);
+++		rec_len = EXT4_DIR_REC_LEN(de);
++ 		memcpy (to, de, rec_len);
++ 		((struct ext4_dir_entry_2 *) to)->rec_len =
++ 				ext4_rec_len_to_disk(rec_len, blocksize);
++@@ -1540,7 +1549,7 @@ static struct ext4_dir_entry_2* dx_pack_
++ 	while ((char*)de < base + blocksize) {
++ 		next = ext4_next_entry(de, blocksize);
++ 		if (de->inode && de->name_len) {
++-			rec_len = EXT4_DIR_REC_LEN(de->name_len);
+++			rec_len = EXT4_DIR_REC_LEN(de);
++ 			if (de > to)
++ 				memmove(to, de, rec_len);
++ 			to->rec_len = ext4_rec_len_to_disk(rec_len, blocksize);
++@@ -1675,11 +1684,12 @@ int ext4_find_dest_de(struct inode *dir,
++ 		      struct ext4_dir_entry_2 **dest_de)
++ {
++ 	struct ext4_dir_entry_2 *de;
++-	unsigned short reclen = EXT4_DIR_REC_LEN(namelen);
+++	unsigned short reclen = __EXT4_DIR_REC_LEN((namelen & 0xffff) + (namelen >> 16));
++ 	int nlen, rlen;
++ 	unsigned int offset = 0;
++ 	char *top;
++ 
+++	namelen &= 0xffff;
++ 	de = (struct ext4_dir_entry_2 *)buf;
++ 	top = buf + buf_size - reclen;
++ 	while ((char *) de <= top) {
++@@ -1688,7 +1698,7 @@ int ext4_find_dest_de(struct inode *dir,
++ 			return -EIO;
++ 		if (ext4_match(namelen, name, de))
++ 			return -EEXIST;
++-		nlen = EXT4_DIR_REC_LEN(de->name_len);
+++		nlen = EXT4_DIR_REC_LEN(de);
++ 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
++ 		if ((de->inode ? rlen - nlen : rlen) >= reclen)
++ 			break;
++@@ -1705,12 +1715,12 @@ int ext4_find_dest_de(struct inode *dir,
++ void ext4_insert_dentry(struct inode *inode,
++ 			struct ext4_dir_entry_2 *de,
++ 			int buf_size,
++-			const char *name, int namelen)
+++			const char *name, int namelen, void *data)
++ {
++ 
++ 	int nlen, rlen;
++ 
++-	nlen = EXT4_DIR_REC_LEN(de->name_len);
+++	nlen = EXT4_DIR_REC_LEN(de);
++ 	rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
++ 	if (de->inode) {
++ 		struct ext4_dir_entry_2 *de1 =
++@@ -1724,6 +1734,11 @@ void ext4_insert_dentry(struct inode *in
++ 	ext4_set_de_type(inode->i_sb, de, inode->i_mode);
++ 	de->name_len = namelen;
++ 	memcpy(de->name, name, namelen);
+++	if (data) {
+++		de->name[namelen] = 0;
+++		memcpy(&de->name[namelen + 1], data, *(char *)data);
+++		de->file_type |= EXT4_DIRENT_LUFID;
+++	}
++ }
++ /*
++  * Add a new entry into a directory (leaf) block.  If de is non-NULL,
++@@ -1743,15 +1758,21 @@ static int add_dirent_to_buf(handle_t *h
++ 	unsigned int	blocksize = dir->i_sb->s_blocksize;
++ 	int		csum_size = 0;
++ 	int		err;
+++	unsigned char	*data;
++ 
+++	data = ext4_dentry_get_data(inode->i_sb, (struct ext4_dentry_param *)
+++						dentry->d_fsdata);
++ 	if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
++ 				       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
++ 		csum_size = sizeof(struct ext4_dir_entry_tail);
++ 
++ 	if (!de) {
+++		int dlen = 0;
+++		if (data)
+++			dlen = (*data) + 1;
++ 		err = ext4_find_dest_de(dir, inode,
++ 					bh, bh->b_data, blocksize - csum_size,
++-					name, namelen, &de);
+++					name, namelen + (dlen << 16), &de);
++ 		if (err)
++ 			return err;
++ 	}
++@@ -1763,7 +1784,7 @@ static int add_dirent_to_buf(handle_t *h
++ 	}
++ 
++ 	/* By now the buffer is marked for journaling */
++-	ext4_insert_dentry(inode, de, blocksize, name, namelen);
+++	ext4_insert_dentry(inode, de, blocksize, name, namelen, data);
++ 
++ 	/*
++ 	 * XXX shouldn't update any times until successful
++@@ -1874,7 +1895,8 @@ static int make_indexed_dir(handle_t *ha
++ 
++ 	dx_set_block(entries, 1);
++ 	dx_set_count(entries, 1);
++-	dx_set_limit(entries, dx_root_limit(dir, sizeof(*dx_info)));
+++	dx_set_limit(entries, dx_root_limit(dir,
+++					 dot_de, sizeof(*dx_info)));
++ 
++ 	/* Initialize as for dx_probe */
++ 	hinfo.hash_version = dx_info->hash_version;
++@@ -1917,6 +1939,8 @@ static int ext4_update_dotdot(handle_t *
++ 	struct buffer_head * dir_block;
++ 	struct ext4_dir_entry_2 * de;
++ 	int len, journal = 0, err = 0;
+++	int dlen = 0;
+++	char *data;
++ 
++ 	if (IS_ERR(handle))
++ 		return PTR_ERR(handle);
++@@ -1932,19 +1956,24 @@ static int ext4_update_dotdot(handle_t *
++ 	/* the first item must be "." */
++ 	assert(de->name_len == 1 && de->name[0] == '.');
++ 	len = le16_to_cpu(de->rec_len);
++-	assert(len >= EXT4_DIR_REC_LEN(1));
++-	if (len > EXT4_DIR_REC_LEN(1)) {
+++	assert(len >= __EXT4_DIR_REC_LEN(1));
+++	if (len > __EXT4_DIR_REC_LEN(1)) {
++ 		BUFFER_TRACE(dir_block, "get_write_access");
++ 		err = ext4_journal_get_write_access(handle, dir_block);
++ 		if (err)
++ 			goto out_journal;
++ 
++ 		journal = 1;
++-		de->rec_len = cpu_to_le16(EXT4_DIR_REC_LEN(1));
+++		de->rec_len = cpu_to_le16(EXT4_DIR_REC_LEN(de));
++ 	}
++ 
++-	len -= EXT4_DIR_REC_LEN(1);
++-	assert(len == 0 || len >= EXT4_DIR_REC_LEN(2));
+++	len -= EXT4_DIR_REC_LEN(de);
+++	data = ext4_dentry_get_data(dir->i_sb,
+++			(struct ext4_dentry_param *) dentry->d_fsdata);
+++	if (data)
+++		dlen = *data + 1;
+++	assert(len == 0 || len >= __EXT4_DIR_REC_LEN(2 + dlen));
+++
++ 	de = (struct ext4_dir_entry_2 *)
++ 			((char *) de + le16_to_cpu(de->rec_len));
++ 	if (!journal) {
++@@ -1958,10 +1987,15 @@ static int ext4_update_dotdot(handle_t *
++ 	if (len > 0)
++ 		de->rec_len = cpu_to_le16(len);
++ 	else
++-		assert(le16_to_cpu(de->rec_len) >= EXT4_DIR_REC_LEN(2));
+++		assert(le16_to_cpu(de->rec_len) >= __EXT4_DIR_REC_LEN(2));
++ 	de->name_len = 2;
++ 	strcpy (de->name, "..");
++-	ext4_set_de_type(dir->i_sb, de, S_IFDIR);
+++	if (data != NULL && ext4_get_dirent_data_len(de) >= dlen) {
+++		de->name[2] = 0;
+++		memcpy(&de->name[2 + 1], data, *data);
+++		ext4_set_de_type(dir->i_sb, de, S_IFDIR);
+++		de->file_type |= EXT4_DIRENT_LUFID;
+++	}
++ 
++ out_journal:
++ 	if (journal) {
++@@ -2474,37 +2508,70 @@ err_drop_inode:
++ 	return err;
++ }
++ 
+++struct tp_block {
+++	struct inode *inode;
+++	void *data1;
+++	void *data2;
+++};
+++
++ struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
++ 			  struct ext4_dir_entry_2 *de,
++ 			  int blocksize, int csum_size,
++ 			  unsigned int parent_ino, int dotdot_real_len)
++ {
+++	void *data1 = NULL, *data2 = NULL;
+++	int dot_reclen = 0;
+++
+++	if (dotdot_real_len == 10) {
+++		struct tp_block *tpb = (struct tp_block*)inode;
+++		data1 = tpb->data1;
+++		data2 = tpb->data2;
+++		inode = tpb->inode;
+++		dotdot_real_len = 0;
+++	}
++ 	de->inode = cpu_to_le32(inode->i_ino);
++ 	de->name_len = 1;
++-	de->rec_len = ext4_rec_len_to_disk(EXT4_DIR_REC_LEN(de->name_len),
++-					   blocksize);
++ 	strcpy(de->name, ".");
++ 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
++ 
+++	/* get packed fid data*/
+++	data1 = ext4_dentry_get_data(inode->i_sb,
+++				(struct ext4_dentry_param *) data1);
+++	if (data1) {
+++		de->name[1] = 0;
+++		memcpy(&de->name[2], data1, *(char *) data1);
+++		de->file_type |= EXT4_DIRENT_LUFID;
+++	}
+++	de->rec_len = cpu_to_le16(EXT4_DIR_REC_LEN(de));
+++	dot_reclen = cpu_to_le16(de->rec_len);
++ 	de = ext4_next_entry(de, blocksize);
++ 	de->inode = cpu_to_le32(parent_ino);
++ 	de->name_len = 2;
++ 	if (!dotdot_real_len)
++ 		de->rec_len = ext4_rec_len_to_disk(blocksize -
++-					(csum_size + EXT4_DIR_REC_LEN(1)),
+++					(csum_size + dot_reclen),
++ 					blocksize);
++ 	else
++ 		de->rec_len = ext4_rec_len_to_disk(
++-				EXT4_DIR_REC_LEN(de->name_len), blocksize);
+++				EXT4_DIR_REC_LEN(de), blocksize);
++ 	strcpy(de->name, "..");
++ 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
+++	data2 = ext4_dentry_get_data(inode->i_sb,
+++			(struct ext4_dentry_param *) data2);
+++	if (data2) {
+++		de->name[2] = 0;
+++		memcpy(&de->name[3], data2, *(char *) data2);
+++		de->file_type |= EXT4_DIRENT_LUFID;
+++	}
++ 
++ 	return ext4_next_entry(de, blocksize);
++ }
++ 
++ static int ext4_init_new_dir(handle_t *handle, struct inode *dir,
++-			     struct inode *inode)
+++			     struct inode *inode,
+++			     const void *data1, const void *data2)
++ {
+++	struct tp_block param;
++ 	struct buffer_head *dir_block = NULL;
++ 	struct ext4_dir_entry_2 *de;
++ 	struct ext4_dir_entry_tail *t;
++@@ -2534,7 +2601,11 @@ static int ext4_init_new_dir(handle_t *h
++ 	if (err)
++ 		goto out;
++ 	de = (struct ext4_dir_entry_2 *)dir_block->b_data;
++-	ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0);
+++	param.inode = inode;
+++	param.data1 = (void *)data1;
+++	param.data2 = (void *)data2;
+++	ext4_init_dot_dotdot((struct inode *)(&param), de, blocksize,
+++			     csum_size, dir->i_ino, 10);
++ 	set_nlink(inode, 2);
++ 	if (csum_size) {
++ 		t = EXT4_DIRENT_TAIL(dir_block->b_data, blocksize);
++@@ -2554,7 +2625,8 @@ out:
++ /* Initialize @inode as a subdirectory of @dir, and add the
++  * "." and ".." entries into the first directory block. */
++ int ext4_add_dot_dotdot(handle_t *handle, struct inode * dir,
++-			struct inode *inode)
+++			struct inode *inode,
+++                       const void *data1, const void *data2)
++ {
++ 	if (IS_ERR(handle))
++ 		return PTR_ERR(handle);
++@@ -2564,7 +2636,7 @@ int ext4_add_dot_dotdot(handle_t *handle
++ 
++ 	inode->i_op = &ext4_dir_inode_operations;
++ 	inode->i_fop = &ext4_dir_operations;
++-	return ext4_init_new_dir(handle, dir, inode);
+++	return ext4_init_new_dir(handle, dir, inode, data1, data2);
++ }
++ EXPORT_SYMBOL(ext4_add_dot_dotdot);
++ 
++@@ -2592,7 +2664,7 @@ retry:
++ 
++ 	inode->i_op = &ext4_dir_inode_operations;
++ 	inode->i_fop = &ext4_dir_operations;
++-	err = ext4_init_new_dir(handle, dir, inode);
+++	err = ext4_init_new_dir(handle, dir, inode, NULL, NULL);
++ 	if (err)
++ 		goto out_clear_inode;
++ 	err = ext4_mark_inode_dirty(handle, inode);
++@@ -2644,7 +2716,7 @@ static int empty_dir(struct inode *inode
++ 	}
++ 
++ 	sb = inode->i_sb;
++-	if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) {
+++	if (inode->i_size < __EXT4_DIR_REC_LEN(1) + __EXT4_DIR_REC_LEN(2)) {
++ 		EXT4_ERROR_INODE(inode, "invalid size");
++ 		return 1;
++ 	}
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inline.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
++@@ -998,7 +998,7 @@ static int ext4_add_dirent_to_inline(han
++ 	int		err;
++ 	struct ext4_dir_entry_2 *de;
++ 
++-	reclen = EXT4_DIR_REC_LEN(namelen);
+++	reclen = __EXT4_DIR_REC_LEN(namelen);
++ 	err = ext4_find_dest_de(dir, inode, iloc->bh,
++ 				inline_start, inline_size,
++ 				name, namelen, &de);
++@@ -1008,7 +1008,7 @@ static int ext4_add_dirent_to_inline(han
++ 	err = ext4_journal_get_write_access(handle, iloc->bh);
++ 	if (err)
++ 		return err;
++-	ext4_insert_dentry(inode, de, inline_size, name, namelen);
+++	ext4_insert_dentry(inode, de, inline_size, name, namelen, NULL);
++ 
++ 	ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size);
++ 
++@@ -1078,7 +1078,7 @@ static int ext4_update_inline_dir(handle
++ 	int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE;
++ 	int new_size = get_max_inline_xattr_value_size(dir, iloc);
++ 
++-	if (new_size - old_size <= EXT4_DIR_REC_LEN(1))
+++	if (new_size - old_size <= __EXT4_DIR_REC_LEN(1))
++ 		return -ENOSPC;
++ 
++ 	ret = ext4_update_inline_data(handle, dir,
++@@ -1348,7 +1348,7 @@ int htree_inlinedir_to_tree(struct file
++ 			fake.name_len = 1;
++ 			strcpy(fake.name, ".");
++ 			fake.rec_len = ext4_rec_len_to_disk(
++-						EXT4_DIR_REC_LEN(fake.name_len),
+++						EXT4_DIR_REC_LEN(&fake),
++ 						inline_size);
++ 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
++ 			de = &fake;
++@@ -1358,7 +1358,7 @@ int htree_inlinedir_to_tree(struct file
++ 			fake.name_len = 2;
++ 			strcpy(fake.name, "..");
++ 			fake.rec_len = ext4_rec_len_to_disk(
++-						EXT4_DIR_REC_LEN(fake.name_len),
+++						EXT4_DIR_REC_LEN(&fake),
++ 						inline_size);
++ 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
++ 			de = &fake;
++@@ -1453,8 +1453,8 @@ int ext4_read_inline_dir(struct file *fi
++ 	 * So we will use extra_offset and extra_size to indicate them
++ 	 * during the inline dir iteration.
++ 	 */
++-	dotdot_offset = EXT4_DIR_REC_LEN(1);
++-	dotdot_size = dotdot_offset + EXT4_DIR_REC_LEN(2);
+++	dotdot_offset = __EXT4_DIR_REC_LEN(1);
+++	dotdot_size = dotdot_offset + __EXT4_DIR_REC_LEN(2);
++ 	extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE;
++ 	extra_size = extra_offset + inline_size;
++ 
++@@ -1489,7 +1489,7 @@ int ext4_read_inline_dir(struct file *fi
++ 			 * failure will be detected in the
++ 			 * dirent test below. */
++ 			if (ext4_rec_len_from_disk(de->rec_len, extra_size)
++-				< EXT4_DIR_REC_LEN(1))
+++				< __EXT4_DIR_REC_LEN(1))
++ 				break;
++ 			i += ext4_rec_len_from_disk(de->rec_len,
++ 						    extra_size);
+diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch b/ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch
+new file mode 100644
+index 0000000..3af9392
+--- /dev/null
++++ b/ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch
+@@ -0,0 +1,2252 @@
++Index: linux-3.11.1-200.fc19.x86_64/include/linux/htree_lock.h
++===================================================================
++--- /dev/null
+++++ linux-3.11.1-200.fc19.x86_64/include/linux/htree_lock.h
++@@ -0,0 +1,187 @@
+++/*
+++ * include/linux/htree_lock.h
+++ *
+++ * Copyright (c) 2011, 2012, Intel Corporation.
+++ *
+++ * Author: Liang Zhen <liang@whamcloud.com>
+++ */
+++
+++/*
+++ * htree lock
+++ *
+++ * htree_lock is an advanced lock, it can support five lock modes (concept is
+++ * taken from DLM) and it's a sleeping lock.
+++ *
+++ * most common use case is:
+++ * - create a htree_lock_head for data
+++ * - each thread (contender) creates it's own htree_lock
+++ * - contender needs to call htree_lock(lock_node, mode) to protect data and
+++ *   call htree_unlock to release lock
+++ *
+++ * Also, there is advanced use-case which is more complex, user can have
+++ * PW/PR lock on particular key, it's mostly used while user holding shared
+++ * lock on the htree (CW, CR)
+++ *
+++ * htree_lock(lock_node, HTREE_LOCK_CR); lock the htree with CR
+++ * htree_node_lock(lock_node, HTREE_LOCK_PR, key...); lock @key with PR
+++ * ...
+++ * htree_node_unlock(lock_node);; unlock the key
+++ *
+++ * Another tip is, we can have N-levels of this kind of keys, all we need to
+++ * do is specifying N-levels while creating htree_lock_head, then we can
+++ * lock/unlock a specific level by:
+++ * htree_node_lock(lock_node, mode1, key1, level1...);
+++ * do something;
+++ * htree_node_lock(lock_node, mode1, key2, level2...);
+++ * do something;
+++ * htree_node_unlock(lock_node, level2);
+++ * htree_node_unlock(lock_node, level1);
+++ *
+++ * NB: for multi-level, should be careful about locking order to avoid deadlock
+++ */
+++
+++#ifndef _LINUX_HTREE_LOCK_H
+++#define _LINUX_HTREE_LOCK_H
+++
+++#include <linux/list.h>
+++#include <linux/spinlock.h>
+++#include <linux/sched.h>
+++
+++/*
+++ * Lock Modes
+++ * more details can be found here:
+++ * http://en.wikipedia.org/wiki/Distributed_lock_manager
+++ */
+++typedef enum {
+++	HTREE_LOCK_EX	= 0, /* exclusive lock: incompatible with all others */
+++	HTREE_LOCK_PW,	     /* protected write: allows only CR users */
+++	HTREE_LOCK_PR,	     /* protected read: allow PR, CR users */
+++	HTREE_LOCK_CW,	     /* concurrent write: allow CR, CW users */
+++	HTREE_LOCK_CR,	     /* concurrent read: allow all but EX users */
+++	HTREE_LOCK_MAX,	     /* number of lock modes */
+++} htree_lock_mode_t;
+++
+++#define HTREE_LOCK_NL		HTREE_LOCK_MAX
+++#define HTREE_LOCK_INVAL	0xdead10c
+++
+++enum {
+++	HTREE_HBITS_MIN		= 2,
+++	HTREE_HBITS_DEF		= 14,
+++	HTREE_HBITS_MAX		= 32,
+++};
+++
+++enum {
+++	HTREE_EVENT_DISABLE	= (0),
+++	HTREE_EVENT_RD		= (1 << HTREE_LOCK_PR),
+++	HTREE_EVENT_WR		= (1 << HTREE_LOCK_PW),
+++	HTREE_EVENT_RDWR	= (HTREE_EVENT_RD | HTREE_EVENT_WR),
+++};
+++
+++struct htree_lock;
+++
+++typedef void (*htree_event_cb_t)(void *target, void *event);
+++
+++struct htree_lock_child {
+++	struct list_head	lc_list;	/* granted list */
+++	htree_event_cb_t	lc_callback;	/* event callback */
+++	unsigned		lc_events;	/* event types */
+++};
+++
+++struct htree_lock_head {
+++	unsigned long		lh_lock;	/* bits lock */
+++	/* blocked lock list (htree_lock) */
+++	struct list_head	lh_blocked_list;
+++	/* # key levels */
+++	u16			lh_depth;
+++	/* hash bits for key and limit number of locks */
+++	u16			lh_hbits;
+++	/* counters for blocked locks */
+++	u16			lh_nblocked[HTREE_LOCK_MAX];
+++	/* counters for granted locks */
+++	u16			lh_ngranted[HTREE_LOCK_MAX];
+++	/* private data */
+++	void			*lh_private;
+++	/* array of children locks */
+++	struct htree_lock_child	lh_children[0];
+++};
+++
+++/* htree_lock_node_t is child-lock for a specific key (ln_value) */
+++struct htree_lock_node {
+++	htree_lock_mode_t	ln_mode;
+++	/* major hash key */
+++	u16			ln_major_key;
+++	/* minor hash key */
+++	u16			ln_minor_key;
+++	struct list_head	ln_major_list;
+++	struct list_head	ln_minor_list;
+++	/* alive list, all locks (granted, blocked, listening) are on it */
+++	struct list_head	ln_alive_list;
+++	/* blocked list */
+++	struct list_head	ln_blocked_list;
+++	/* granted list */
+++	struct list_head	ln_granted_list;
+++	void			*ln_ev_target;
+++};
+++
+++struct htree_lock {
+++	struct task_struct	*lk_task;
+++	struct htree_lock_head	*lk_head;
+++	void			*lk_private;
+++	unsigned		lk_depth;
+++	htree_lock_mode_t	lk_mode;
+++	struct list_head	lk_blocked_list;
+++	struct htree_lock_node	lk_nodes[0];
+++};
+++
+++/* create a lock head, which stands for a resource */
+++struct htree_lock_head *htree_lock_head_alloc(unsigned depth,
+++					      unsigned hbits, unsigned priv);
+++/* free a lock head */
+++void htree_lock_head_free(struct htree_lock_head *lhead);
+++/* register event callback for child lock at level @depth */
+++void htree_lock_event_attach(struct htree_lock_head *lhead, unsigned depth,
+++			     unsigned events, htree_event_cb_t callback);
+++/* create a lock handle, which stands for a thread */
+++struct htree_lock *htree_lock_alloc(unsigned depth, unsigned pbytes);
+++/* free a lock handle */
+++void htree_lock_free(struct htree_lock *lck);
+++/* lock htree, when @wait is true, 0 is returned if the lock can't
+++ * be granted immediately */
+++int htree_lock_try(struct htree_lock *lck, struct htree_lock_head *lhead,
+++		   htree_lock_mode_t mode, int wait);
+++/* unlock htree */
+++void htree_unlock(struct htree_lock *lck);
+++/* unlock and relock htree with @new_mode */
+++int htree_change_lock_try(struct htree_lock *lck,
+++			  htree_lock_mode_t new_mode, int wait);
+++void htree_change_mode(struct htree_lock *lck, htree_lock_mode_t mode);
+++/* require child lock (key) of htree at level @dep, @event will be sent to all
+++ * listeners on this @key while lock being granted */
+++int htree_node_lock_try(struct htree_lock *lck, htree_lock_mode_t mode,
+++			u32 key, unsigned dep, int wait, void *event);
+++/* release child lock at level @dep, this lock will listen on it's key
+++ * if @event isn't NULL, event_cb will be called against @lck while granting
+++ * any other lock at level @dep with the same key */
+++void htree_node_unlock(struct htree_lock *lck, unsigned dep, void *event);
+++/* stop listening on child lock at level @dep */
+++void htree_node_stop_listen(struct htree_lock *lck, unsigned dep);
+++/* for debug */
+++void htree_lock_stat_print(int depth);
+++void htree_lock_stat_reset(void);
+++
+++#define htree_lock(lck, lh, mode)	htree_lock_try(lck, lh, mode, 1)
+++#define htree_change_lock(lck, mode)	htree_change_lock_try(lck, mode, 1)
+++
+++#define htree_lock_mode(lck)		((lck)->lk_mode)
+++
+++#define htree_node_lock(lck, mode, key, dep)	\
+++	htree_node_lock_try(lck, mode, key, dep, 1, NULL)
+++/* this is only safe in thread context of lock owner */
+++#define htree_node_is_granted(lck, dep)		\
+++	((lck)->lk_nodes[dep].ln_mode != HTREE_LOCK_INVAL && \
+++	 (lck)->lk_nodes[dep].ln_mode != HTREE_LOCK_NL)
+++/* this is only safe in thread context of lock owner */
+++#define htree_node_is_listening(lck, dep)	\
+++	((lck)->lk_nodes[dep].ln_mode == HTREE_LOCK_NL)
+++
+++#endif
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/htree_lock.c
++===================================================================
++--- /dev/null
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/htree_lock.c
++@@ -0,0 +1,880 @@
+++/*
+++ * fs/ext4/htree_lock.c
+++ *
+++ * Copyright (c) 2011, 2012, Intel Corporation.
+++ *
+++ * Author: Liang Zhen <liang@whamcloud.com>
+++ */
+++#include <linux/jbd2.h>
+++#include <linux/hash.h>
+++#include <linux/module.h>
+++#include <linux/htree_lock.h>
+++
+++enum {
+++	HTREE_LOCK_BIT_EX	= (1 << HTREE_LOCK_EX),
+++	HTREE_LOCK_BIT_PW	= (1 << HTREE_LOCK_PW),
+++	HTREE_LOCK_BIT_PR	= (1 << HTREE_LOCK_PR),
+++	HTREE_LOCK_BIT_CW	= (1 << HTREE_LOCK_CW),
+++	HTREE_LOCK_BIT_CR	= (1 << HTREE_LOCK_CR),
+++};
+++
+++enum {
+++	HTREE_LOCK_COMPAT_EX	= 0,
+++	HTREE_LOCK_COMPAT_PW	= HTREE_LOCK_COMPAT_EX | HTREE_LOCK_BIT_CR,
+++	HTREE_LOCK_COMPAT_PR	= HTREE_LOCK_COMPAT_PW | HTREE_LOCK_BIT_PR,
+++	HTREE_LOCK_COMPAT_CW	= HTREE_LOCK_COMPAT_PW | HTREE_LOCK_BIT_CW,
+++	HTREE_LOCK_COMPAT_CR	= HTREE_LOCK_COMPAT_CW | HTREE_LOCK_BIT_PR |
+++				  HTREE_LOCK_BIT_PW,
+++};
+++
+++static int htree_lock_compat[] = {
+++	[HTREE_LOCK_EX]		HTREE_LOCK_COMPAT_EX,
+++	[HTREE_LOCK_PW]		HTREE_LOCK_COMPAT_PW,
+++	[HTREE_LOCK_PR]		HTREE_LOCK_COMPAT_PR,
+++	[HTREE_LOCK_CW]		HTREE_LOCK_COMPAT_CW,
+++	[HTREE_LOCK_CR]		HTREE_LOCK_COMPAT_CR,
+++};
+++
+++/* max allowed htree-lock depth.
+++ * We only need depth=3 for ext4 although user can have higher value. */
+++#define HTREE_LOCK_DEP_MAX	16
+++
+++#ifdef HTREE_LOCK_DEBUG
+++
+++static char *hl_name[] = {
+++	[HTREE_LOCK_EX]		"EX",
+++	[HTREE_LOCK_PW]		"PW",
+++	[HTREE_LOCK_PR]		"PR",
+++	[HTREE_LOCK_CW]		"CW",
+++	[HTREE_LOCK_CR]		"CR",
+++};
+++
+++/* lock stats */
+++struct htree_lock_node_stats {
+++	unsigned long long	blocked[HTREE_LOCK_MAX];
+++	unsigned long long	granted[HTREE_LOCK_MAX];
+++	unsigned long long	retried[HTREE_LOCK_MAX];
+++	unsigned long long	events;
+++};
+++
+++struct htree_lock_stats {
+++	struct htree_lock_node_stats	nodes[HTREE_LOCK_DEP_MAX];
+++	unsigned long long	granted[HTREE_LOCK_MAX];
+++	unsigned long long	blocked[HTREE_LOCK_MAX];
+++};
+++
+++static struct htree_lock_stats hl_stats;
+++
+++void htree_lock_stat_reset(void)
+++{
+++	memset(&hl_stats, 0, sizeof(hl_stats));
+++}
+++
+++void htree_lock_stat_print(int depth)
+++{
+++	int     i;
+++	int	j;
+++
+++	printk(KERN_DEBUG "HTREE LOCK STATS:\n");
+++	for (i = 0; i < HTREE_LOCK_MAX; i++) {
+++		printk(KERN_DEBUG "[%s]: G [%10llu], B [%10llu]\n",
+++		       hl_name[i], hl_stats.granted[i], hl_stats.blocked[i]);
+++	}
+++	for (i = 0; i < depth; i++) {
+++		printk(KERN_DEBUG "HTREE CHILD [%d] STATS:\n", i);
+++		for (j = 0; j < HTREE_LOCK_MAX; j++) {
+++			printk(KERN_DEBUG
+++				"[%s]: G [%10llu], B [%10llu], R [%10llu]\n",
+++				hl_name[j], hl_stats.nodes[i].granted[j],
+++				hl_stats.nodes[i].blocked[j],
+++				hl_stats.nodes[i].retried[j]);
+++		}
+++	}
+++}
+++
+++#define lk_grant_inc(m)       do { hl_stats.granted[m]++; } while (0)
+++#define lk_block_inc(m)       do { hl_stats.blocked[m]++; } while (0)
+++#define ln_grant_inc(d, m)    do { hl_stats.nodes[d].granted[m]++; } while (0)
+++#define ln_block_inc(d, m)    do { hl_stats.nodes[d].blocked[m]++; } while (0)
+++#define ln_retry_inc(d, m)    do { hl_stats.nodes[d].retried[m]++; } while (0)
+++#define ln_event_inc(d)       do { hl_stats.nodes[d].events++; } while (0)
+++
+++#else /* !DEBUG */
+++
+++void htree_lock_stat_reset(void) {}
+++void htree_lock_stat_print(int depth) {}
+++
+++#define lk_grant_inc(m)	      do {} while (0)
+++#define lk_block_inc(m)	      do {} while (0)
+++#define ln_grant_inc(d, m)    do {} while (0)
+++#define ln_block_inc(d, m)    do {} while (0)
+++#define ln_retry_inc(d, m)    do {} while (0)
+++#define ln_event_inc(d)	      do {} while (0)
+++
+++#endif /* DEBUG */
+++
+++EXPORT_SYMBOL(htree_lock_stat_reset);
+++EXPORT_SYMBOL(htree_lock_stat_print);
+++
+++#define HTREE_DEP_ROOT		  (-1)
+++
+++#define htree_spin_lock(lhead, dep)				\
+++	bit_spin_lock((dep) + 1, &(lhead)->lh_lock)
+++#define htree_spin_unlock(lhead, dep)				\
+++	bit_spin_unlock((dep) + 1, &(lhead)->lh_lock)
+++
+++#define htree_key_event_ignore(child, ln)			\
+++	(!((child)->lc_events & (1 << (ln)->ln_mode)))
+++
+++static int
+++htree_key_list_empty(struct htree_lock_node *ln)
+++{
+++	return list_empty(&ln->ln_major_list) && list_empty(&ln->ln_minor_list);
+++}
+++
+++static void
+++htree_key_list_del_init(struct htree_lock_node *ln)
+++{
+++	struct htree_lock_node *tmp = NULL;
+++
+++	if (!list_empty(&ln->ln_minor_list)) {
+++		tmp = list_entry(ln->ln_minor_list.next,
+++				 struct htree_lock_node, ln_minor_list);
+++		list_del_init(&ln->ln_minor_list);
+++	}
+++
+++	if (list_empty(&ln->ln_major_list))
+++		return;
+++
+++	if (tmp == NULL) { /* not on minor key list */
+++		list_del_init(&ln->ln_major_list);
+++	} else {
+++		BUG_ON(!list_empty(&tmp->ln_major_list));
+++		list_replace_init(&ln->ln_major_list, &tmp->ln_major_list);
+++	}
+++}
+++
+++static void
+++htree_key_list_replace_init(struct htree_lock_node *old,
+++			    struct htree_lock_node *new)
+++{
+++	if (!list_empty(&old->ln_major_list))
+++		list_replace_init(&old->ln_major_list, &new->ln_major_list);
+++
+++	if (!list_empty(&old->ln_minor_list))
+++		list_replace_init(&old->ln_minor_list, &new->ln_minor_list);
+++}
+++
+++static void
+++htree_key_event_enqueue(struct htree_lock_child *child,
+++			struct htree_lock_node *ln, int dep, void *event)
+++{
+++	struct htree_lock_node *tmp;
+++
+++	/* NB: ALWAYS called holding lhead::lh_lock(dep) */
+++	BUG_ON(ln->ln_mode == HTREE_LOCK_NL);
+++	if (event == NULL || htree_key_event_ignore(child, ln))
+++		return;
+++
+++	/* shouldn't be a very long list */
+++	list_for_each_entry(tmp, &ln->ln_alive_list, ln_alive_list) {
+++		if (tmp->ln_mode == HTREE_LOCK_NL) {
+++			ln_event_inc(dep);
+++			if (child->lc_callback != NULL)
+++				child->lc_callback(tmp->ln_ev_target, event);
+++		}
+++	}
+++}
+++
+++static int
+++htree_node_lock_enqueue(struct htree_lock *newlk, struct htree_lock *curlk,
+++			unsigned dep, int wait, void *event)
+++{
+++	struct htree_lock_child *child = &newlk->lk_head->lh_children[dep];
+++	struct htree_lock_node *newln = &newlk->lk_nodes[dep];
+++	struct htree_lock_node *curln = &curlk->lk_nodes[dep];
+++
+++	/* NB: ALWAYS called holding lhead::lh_lock(dep) */
+++	/* NB: we only expect PR/PW lock mode at here, only these two modes are
+++	 * allowed for htree_node_lock(asserted in htree_node_lock_internal),
+++	 * NL is only used for listener, user can't directly require NL mode */
+++	if ((curln->ln_mode == HTREE_LOCK_NL) ||
+++	    (curln->ln_mode != HTREE_LOCK_PW &&
+++	     newln->ln_mode != HTREE_LOCK_PW)) {
+++		/* no conflict, attach it on granted list of @curlk */
+++		if (curln->ln_mode != HTREE_LOCK_NL) {
+++			list_add(&newln->ln_granted_list,
+++				 &curln->ln_granted_list);
+++		} else {
+++			/* replace key owner */
+++			htree_key_list_replace_init(curln, newln);
+++		}
+++
+++		list_add(&newln->ln_alive_list, &curln->ln_alive_list);
+++		htree_key_event_enqueue(child, newln, dep, event);
+++		ln_grant_inc(dep, newln->ln_mode);
+++		return 1; /* still hold lh_lock */
+++	}
+++
+++	if (!wait) { /* can't grant and don't want to wait */
+++		ln_retry_inc(dep, newln->ln_mode);
+++		newln->ln_mode = HTREE_LOCK_INVAL;
+++		return -1; /* don't wait and just return -1 */
+++	}
+++
+++	newlk->lk_task = current;
+++	set_current_state(TASK_UNINTERRUPTIBLE);
+++	/* conflict, attach it on blocked list of curlk */
+++	list_add_tail(&newln->ln_blocked_list, &curln->ln_blocked_list);
+++	list_add(&newln->ln_alive_list, &curln->ln_alive_list);
+++	ln_block_inc(dep, newln->ln_mode);
+++
+++	htree_spin_unlock(newlk->lk_head, dep);
+++	/* wait to be given the lock */
+++	if (newlk->lk_task != NULL)
+++		schedule();
+++	/* granted, no doubt, wake up will set me RUNNING */
+++	if (event == NULL || htree_key_event_ignore(child, newln))
+++		return 0; /* granted without lh_lock */
+++
+++	htree_spin_lock(newlk->lk_head, dep);
+++	htree_key_event_enqueue(child, newln, dep, event);
+++	return 1; /* still hold lh_lock */
+++}
+++
+++/*
+++ * get PR/PW access to particular tree-node according to @dep and @key,
+++ * it will return -1 if @wait is false and can't immediately grant this lock.
+++ * All listeners(HTREE_LOCK_NL) on @dep and with the same @key will get
+++ * @event if it's not NULL.
+++ * NB: ALWAYS called holding lhead::lh_lock
+++ */
+++static int
+++htree_node_lock_internal(struct htree_lock_head *lhead, struct htree_lock *lck,
+++			 htree_lock_mode_t mode, u32 key, unsigned dep,
+++			 int wait, void *event)
+++{
+++	LIST_HEAD		(list);
+++	struct htree_lock	*tmp;
+++	struct htree_lock	*tmp2;
+++	u16			major;
+++	u16			minor;
+++	u8			reverse;
+++	u8			ma_bits;
+++	u8			mi_bits;
+++
+++	BUG_ON(mode != HTREE_LOCK_PW && mode != HTREE_LOCK_PR);
+++	BUG_ON(htree_node_is_granted(lck, dep));
+++
+++	key = hash_long(key, lhead->lh_hbits);
+++
+++	mi_bits = lhead->lh_hbits >> 1;
+++	ma_bits = lhead->lh_hbits - mi_bits;
+++
+++	lck->lk_nodes[dep].ln_major_key = major = key & ((1U << ma_bits) - 1);
+++	lck->lk_nodes[dep].ln_minor_key = minor = key >> ma_bits;
+++	lck->lk_nodes[dep].ln_mode = mode;
+++
+++	/*
+++	 * The major key list is an ordered list, so searches are started
+++	 * at the end of the list that is numerically closer to major_key,
+++	 * so at most half of the list will be walked (for well-distributed
+++	 * keys). The list traversal aborts early if the expected key
+++	 * location is passed.
+++	 */
+++	reverse = (major >= (1 << (ma_bits - 1)));
+++
+++	if (reverse) {
+++		list_for_each_entry_reverse(tmp,
+++					&lhead->lh_children[dep].lc_list,
+++					lk_nodes[dep].ln_major_list) {
+++			if (tmp->lk_nodes[dep].ln_major_key == major) {
+++				goto search_minor;
+++
+++			} else if (tmp->lk_nodes[dep].ln_major_key < major) {
+++				/* attach _after_ @tmp */
+++				list_add(&lck->lk_nodes[dep].ln_major_list,
+++					 &tmp->lk_nodes[dep].ln_major_list);
+++				goto out_grant_major;
+++			}
+++		}
+++
+++		list_add(&lck->lk_nodes[dep].ln_major_list,
+++			 &lhead->lh_children[dep].lc_list);
+++		goto out_grant_major;
+++
+++	} else {
+++		list_for_each_entry(tmp, &lhead->lh_children[dep].lc_list,
+++				    lk_nodes[dep].ln_major_list) {
+++			if (tmp->lk_nodes[dep].ln_major_key == major) {
+++				goto search_minor;
+++
+++			} else if (tmp->lk_nodes[dep].ln_major_key > major) {
+++				/* insert _before_ @tmp */
+++				list_add_tail(&lck->lk_nodes[dep].ln_major_list,
+++					&tmp->lk_nodes[dep].ln_major_list);
+++				goto out_grant_major;
+++			}
+++		}
+++
+++		list_add_tail(&lck->lk_nodes[dep].ln_major_list,
+++			      &lhead->lh_children[dep].lc_list);
+++		goto out_grant_major;
+++	}
+++
+++ search_minor:
+++	/*
+++	 * NB: minor_key list doesn't have a "head", @list is just a
+++	 * temporary stub for helping list searching, make sure it's removed
+++	 * after searching.
+++	 * minor_key list is an ordered list too.
+++	 */
+++	list_add_tail(&list, &tmp->lk_nodes[dep].ln_minor_list);
+++
+++	reverse = (minor >= (1 << (mi_bits - 1)));
+++
+++	if (reverse) {
+++		list_for_each_entry_reverse(tmp2, &list,
+++					    lk_nodes[dep].ln_minor_list) {
+++			if (tmp2->lk_nodes[dep].ln_minor_key == minor) {
+++				goto out_enqueue;
+++
+++			} else if (tmp2->lk_nodes[dep].ln_minor_key < minor) {
+++				/* attach _after_ @tmp2 */
+++				list_add(&lck->lk_nodes[dep].ln_minor_list,
+++					 &tmp2->lk_nodes[dep].ln_minor_list);
+++				goto out_grant_minor;
+++			}
+++		}
+++
+++		list_add(&lck->lk_nodes[dep].ln_minor_list, &list);
+++
+++	} else {
+++		list_for_each_entry(tmp2, &list,
+++				    lk_nodes[dep].ln_minor_list) {
+++			if (tmp2->lk_nodes[dep].ln_minor_key == minor) {
+++				goto out_enqueue;
+++
+++			} else if (tmp2->lk_nodes[dep].ln_minor_key > minor) {
+++				/* insert _before_ @tmp2 */
+++				list_add_tail(&lck->lk_nodes[dep].ln_minor_list,
+++					&tmp2->lk_nodes[dep].ln_minor_list);
+++				goto out_grant_minor;
+++			}
+++		}
+++
+++		list_add_tail(&lck->lk_nodes[dep].ln_minor_list, &list);
+++	}
+++
+++ out_grant_minor:
+++	if (list.next == &lck->lk_nodes[dep].ln_minor_list) {
+++		/* new lock @lck is the first one on minor_key list, which
+++		 * means it has the smallest minor_key and it should
+++		 * replace @tmp as minor_key owner */
+++		list_replace_init(&tmp->lk_nodes[dep].ln_major_list,
+++				  &lck->lk_nodes[dep].ln_major_list);
+++	}
+++	/* remove the temporary head */
+++	list_del(&list);
+++
+++ out_grant_major:
+++	ln_grant_inc(dep, lck->lk_nodes[dep].ln_mode);
+++	return 1; /* granted with holding lh_lock */
+++
+++ out_enqueue:
+++	list_del(&list); /* remove temprary head */
+++	return htree_node_lock_enqueue(lck, tmp2, dep, wait, event);
+++}
+++
+++/*
+++ * release the key of @lck at level @dep, and grant any blocked locks.
+++ * caller will still listen on @key if @event is not NULL, which means
+++ * caller can see a event (by event_cb) while granting any lock with
+++ * the same key at level @dep.
+++ * NB: ALWAYS called holding lhead::lh_lock
+++ * NB: listener will not block anyone because listening mode is HTREE_LOCK_NL
+++ */
+++static void
+++htree_node_unlock_internal(struct htree_lock_head *lhead,
+++			   struct htree_lock *curlk, unsigned dep, void *event)
+++{
+++	struct htree_lock_node	*curln = &curlk->lk_nodes[dep];
+++	struct htree_lock	*grtlk = NULL;
+++	struct htree_lock_node	*grtln;
+++	struct htree_lock	*poslk;
+++	struct htree_lock	*tmplk;
+++
+++	if (!htree_node_is_granted(curlk, dep))
+++		return;
+++
+++	if (!list_empty(&curln->ln_granted_list)) {
+++		/* there is another granted lock */
+++		grtlk = list_entry(curln->ln_granted_list.next,
+++				   struct htree_lock,
+++				   lk_nodes[dep].ln_granted_list);
+++		list_del_init(&curln->ln_granted_list);
+++	}
+++
+++	if (grtlk == NULL && !list_empty(&curln->ln_blocked_list)) {
+++		/*
+++		 * @curlk is the only granted lock, so we confirmed:
+++		 * a) curln is key owner (attached on major/minor_list),
+++		 *    so if there is any blocked lock, it should be attached
+++		 *    on curln->ln_blocked_list
+++		 * b) we always can grant the first blocked lock
+++		 */
+++		grtlk = list_entry(curln->ln_blocked_list.next,
+++				   struct htree_lock,
+++				   lk_nodes[dep].ln_blocked_list);
+++		BUG_ON(grtlk->lk_task == NULL);
+++		wake_up_process(grtlk->lk_task);
+++	}
+++
+++	if (event != NULL &&
+++	    lhead->lh_children[dep].lc_events != HTREE_EVENT_DISABLE) {
+++		curln->ln_ev_target = event;
+++		curln->ln_mode = HTREE_LOCK_NL; /* listen! */
+++	} else {
+++		curln->ln_mode = HTREE_LOCK_INVAL;
+++	}
+++
+++	if (grtlk == NULL) { /* I must be the only one locking this key */
+++		struct htree_lock_node *tmpln;
+++
+++		BUG_ON(htree_key_list_empty(curln));
+++
+++		if (curln->ln_mode == HTREE_LOCK_NL) /* listening */
+++			return;
+++
+++		/* not listening */
+++		if (list_empty(&curln->ln_alive_list)) { /* no more listener */
+++			htree_key_list_del_init(curln);
+++			return;
+++		}
+++
+++		tmpln = list_entry(curln->ln_alive_list.next,
+++				   struct htree_lock_node, ln_alive_list);
+++
+++		BUG_ON(tmpln->ln_mode != HTREE_LOCK_NL);
+++
+++		htree_key_list_replace_init(curln, tmpln);
+++		list_del_init(&curln->ln_alive_list);
+++
+++		return;
+++	}
+++
+++	/* have a granted lock */
+++	grtln = &grtlk->lk_nodes[dep];
+++	if (!list_empty(&curln->ln_blocked_list)) {
+++		/* only key owner can be on both lists */
+++		BUG_ON(htree_key_list_empty(curln));
+++
+++		if (list_empty(&grtln->ln_blocked_list)) {
+++			list_add(&grtln->ln_blocked_list,
+++				 &curln->ln_blocked_list);
+++		}
+++		list_del_init(&curln->ln_blocked_list);
+++	}
+++	/*
+++	 * NB: this is the tricky part:
+++	 * We have only two modes for child-lock (PR and PW), also,
+++	 * only owner of the key (attached on major/minor_list) can be on
+++	 * both blocked_list and granted_list, so @grtlk must be one
+++	 * of these two cases:
+++	 *
+++	 * a) @grtlk is taken from granted_list, which means we've granted
+++	 *    more than one lock so @grtlk has to be PR, the first blocked
+++	 *    lock must be PW and we can't grant it at all.
+++	 *    So even @grtlk is not owner of the key (empty blocked_list),
+++	 *    we don't care because we can't grant any lock.
+++	 * b) we just grant a new lock which is taken from head of blocked
+++	 *    list, and it should be the first granted lock, and it should
+++	 *    be the first one linked on blocked_list.
+++	 *
+++	 * Either way, we can get correct result by iterating blocked_list
+++	 * of @grtlk, and don't have to bother on how to find out
+++	 * owner of current key.
+++	 */
+++	list_for_each_entry_safe(poslk, tmplk, &grtln->ln_blocked_list,
+++				 lk_nodes[dep].ln_blocked_list) {
+++		if (grtlk->lk_nodes[dep].ln_mode == HTREE_LOCK_PW ||
+++		    poslk->lk_nodes[dep].ln_mode == HTREE_LOCK_PW)
+++			break;
+++		/* grant all readers */
+++		list_del_init(&poslk->lk_nodes[dep].ln_blocked_list);
+++		list_add(&poslk->lk_nodes[dep].ln_granted_list,
+++			 &grtln->ln_granted_list);
+++
+++		BUG_ON(poslk->lk_task == NULL);
+++		wake_up_process(poslk->lk_task);
+++	}
+++
+++	/* if @curln is the owner of this key, replace it with @grtln */
+++	if (!htree_key_list_empty(curln))
+++		htree_key_list_replace_init(curln, grtln);
+++
+++	if (curln->ln_mode == HTREE_LOCK_INVAL)
+++		list_del_init(&curln->ln_alive_list);
+++}
+++
+++/*
+++ * it's just wrapper of htree_node_lock_internal, it returns 1 on granted
+++ * and 0 only if @wait is false and can't grant it immediately
+++ */
+++int
+++htree_node_lock_try(struct htree_lock *lck, htree_lock_mode_t mode,
+++		    u32 key, unsigned dep, int wait, void *event)
+++{
+++	struct htree_lock_head *lhead = lck->lk_head;
+++	int rc;
+++
+++	BUG_ON(dep >= lck->lk_depth);
+++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
+++
+++	htree_spin_lock(lhead, dep);
+++	rc = htree_node_lock_internal(lhead, lck, mode, key, dep, wait, event);
+++	if (rc != 0)
+++		htree_spin_unlock(lhead, dep);
+++	return rc >= 0;
+++}
+++EXPORT_SYMBOL(htree_node_lock_try);
+++
+++/* it's wrapper of htree_node_unlock_internal */
+++void
+++htree_node_unlock(struct htree_lock *lck, unsigned dep, void *event)
+++{
+++	struct htree_lock_head *lhead = lck->lk_head;
+++
+++	BUG_ON(dep >= lck->lk_depth);
+++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
+++
+++	htree_spin_lock(lhead, dep);
+++	htree_node_unlock_internal(lhead, lck, dep, event);
+++	htree_spin_unlock(lhead, dep);
+++}
+++EXPORT_SYMBOL(htree_node_unlock);
+++
+++/* stop listening on child-lock level @dep */
+++void
+++htree_node_stop_listen(struct htree_lock *lck, unsigned dep)
+++{
+++	struct htree_lock_node *ln = &lck->lk_nodes[dep];
+++	struct htree_lock_node *tmp;
+++
+++	BUG_ON(htree_node_is_granted(lck, dep));
+++	BUG_ON(!list_empty(&ln->ln_blocked_list));
+++	BUG_ON(!list_empty(&ln->ln_granted_list));
+++
+++	if (!htree_node_is_listening(lck, dep))
+++		return;
+++
+++	htree_spin_lock(lck->lk_head, dep);
+++	ln->ln_mode = HTREE_LOCK_INVAL;
+++	ln->ln_ev_target = NULL;
+++
+++	if (htree_key_list_empty(ln)) { /* not owner */
+++		list_del_init(&ln->ln_alive_list);
+++		goto out;
+++	}
+++
+++	/* I'm the owner... */
+++	if (list_empty(&ln->ln_alive_list)) { /* no more listener */
+++		htree_key_list_del_init(ln);
+++		goto out;
+++	}
+++
+++	tmp = list_entry(ln->ln_alive_list.next,
+++			 struct htree_lock_node, ln_alive_list);
+++
+++	BUG_ON(tmp->ln_mode != HTREE_LOCK_NL);
+++	htree_key_list_replace_init(ln, tmp);
+++	list_del_init(&ln->ln_alive_list);
+++ out:
+++	htree_spin_unlock(lck->lk_head, dep);
+++}
+++EXPORT_SYMBOL(htree_node_stop_listen);
+++
+++/* release all child-locks if we have any */
+++static void
+++htree_node_release_all(struct htree_lock *lck)
+++{
+++	int	i;
+++
+++	for (i = 0; i < lck->lk_depth; i++) {
+++		if (htree_node_is_granted(lck, i))
+++			htree_node_unlock(lck, i, NULL);
+++		else if (htree_node_is_listening(lck, i))
+++			htree_node_stop_listen(lck, i);
+++	}
+++}
+++
+++/*
+++ * obtain htree lock, it could be blocked inside if there's conflict
+++ * with any granted or blocked lock and @wait is true.
+++ * NB: ALWAYS called holding lhead::lh_lock
+++ */
+++static int
+++htree_lock_internal(struct htree_lock *lck, int wait)
+++{
+++	struct htree_lock_head *lhead = lck->lk_head;
+++	int	granted = 0;
+++	int	blocked = 0;
+++	int	i;
+++
+++	for (i = 0; i < HTREE_LOCK_MAX; i++) {
+++		if (lhead->lh_ngranted[i] != 0)
+++			granted |= 1 << i;
+++		if (lhead->lh_nblocked[i] != 0)
+++			blocked |= 1 << i;
+++	}
+++	if ((htree_lock_compat[lck->lk_mode] & granted) != granted ||
+++	    (htree_lock_compat[lck->lk_mode] & blocked) != blocked) {
+++		/* will block current lock even it just conflicts with any
+++		 * other blocked lock, so lock like EX wouldn't starve */
+++		if (!wait)
+++			return -1;
+++		lhead->lh_nblocked[lck->lk_mode]++;
+++		lk_block_inc(lck->lk_mode);
+++
+++		lck->lk_task = current;
+++		list_add_tail(&lck->lk_blocked_list, &lhead->lh_blocked_list);
+++
+++		set_current_state(TASK_UNINTERRUPTIBLE);
+++		htree_spin_unlock(lhead, HTREE_DEP_ROOT);
+++		/* wait to be given the lock */
+++		if (lck->lk_task != NULL)
+++			schedule();
+++		/* granted, no doubt. wake up will set me RUNNING */
+++		return 0; /* without lh_lock */
+++	}
+++	lhead->lh_ngranted[lck->lk_mode]++;
+++	lk_grant_inc(lck->lk_mode);
+++	return 1;
+++}
+++
+++/* release htree lock. NB: ALWAYS called holding lhead::lh_lock */
+++static void
+++htree_unlock_internal(struct htree_lock *lck)
+++{
+++	struct htree_lock_head *lhead = lck->lk_head;
+++	struct htree_lock *tmp;
+++	struct htree_lock *tmp2;
+++	int granted = 0;
+++	int i;
+++
+++	BUG_ON(lhead->lh_ngranted[lck->lk_mode] == 0);
+++
+++	lhead->lh_ngranted[lck->lk_mode]--;
+++	lck->lk_mode = HTREE_LOCK_INVAL;
+++
+++	for (i = 0; i < HTREE_LOCK_MAX; i++) {
+++		if (lhead->lh_ngranted[i] != 0)
+++			granted |= 1 << i;
+++	}
+++	list_for_each_entry_safe(tmp, tmp2,
+++				 &lhead->lh_blocked_list, lk_blocked_list) {
+++		/* conflict with any granted lock? */
+++		if ((htree_lock_compat[tmp->lk_mode] & granted) != granted)
+++			break;
+++
+++		list_del_init(&tmp->lk_blocked_list);
+++
+++		BUG_ON(lhead->lh_nblocked[tmp->lk_mode] == 0);
+++
+++		lhead->lh_nblocked[tmp->lk_mode]--;
+++		lhead->lh_ngranted[tmp->lk_mode]++;
+++		granted |= 1 << tmp->lk_mode;
+++
+++		BUG_ON(tmp->lk_task == NULL);
+++		wake_up_process(tmp->lk_task);
+++	}
+++}
+++
+++/* it's wrapper of htree_lock_internal and exported interface.
+++ * It always return 1 with granted lock if @wait is true, it can return 0
+++ * if @wait is false and locking request can't be granted immediately */
+++int
+++htree_lock_try(struct htree_lock *lck, struct htree_lock_head *lhead,
+++	       htree_lock_mode_t mode, int wait)
+++{
+++	int	rc;
+++
+++	BUG_ON(lck->lk_depth > lhead->lh_depth);
+++	BUG_ON(lck->lk_head != NULL);
+++	BUG_ON(lck->lk_task != NULL);
+++
+++	lck->lk_head = lhead;
+++	lck->lk_mode = mode;
+++
+++	htree_spin_lock(lhead, HTREE_DEP_ROOT);
+++	rc = htree_lock_internal(lck, wait);
+++	if (rc != 0)
+++		htree_spin_unlock(lhead, HTREE_DEP_ROOT);
+++	return rc >= 0;
+++}
+++EXPORT_SYMBOL(htree_lock_try);
+++
+++/* it's wrapper of htree_unlock_internal and exported interface.
+++ * It will release all htree_node_locks and htree_lock */
+++void
+++htree_unlock(struct htree_lock *lck)
+++{
+++	BUG_ON(lck->lk_head == NULL);
+++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
+++
+++	htree_node_release_all(lck);
+++
+++	htree_spin_lock(lck->lk_head, HTREE_DEP_ROOT);
+++	htree_unlock_internal(lck);
+++	htree_spin_unlock(lck->lk_head, HTREE_DEP_ROOT);
+++	lck->lk_head = NULL;
+++	lck->lk_task = NULL;
+++}
+++EXPORT_SYMBOL(htree_unlock);
+++
+++/* change lock mode */
+++void
+++htree_change_mode(struct htree_lock *lck, htree_lock_mode_t mode)
+++{
+++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
+++	lck->lk_mode = mode;
+++}
+++EXPORT_SYMBOL(htree_change_mode);
+++
+++/* release htree lock, and lock it again with new mode.
+++ * This function will first release all htree_node_locks and htree_lock,
+++ * then try to gain htree_lock with new @mode.
+++ * It always return 1 with granted lock if @wait is true, it can return 0
+++ * if @wait is false and locking request can't be granted immediately */
+++int
+++htree_change_lock_try(struct htree_lock *lck, htree_lock_mode_t mode, int wait)
+++{
+++	struct htree_lock_head *lhead = lck->lk_head;
+++	int rc;
+++
+++	BUG_ON(lhead == NULL);
+++	BUG_ON(lck->lk_mode == mode);
+++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL || mode == HTREE_LOCK_INVAL);
+++
+++	htree_node_release_all(lck);
+++
+++	htree_spin_lock(lhead, HTREE_DEP_ROOT);
+++	htree_unlock_internal(lck);
+++	lck->lk_mode = mode;
+++	rc = htree_lock_internal(lck, wait);
+++	if (rc != 0)
+++		htree_spin_unlock(lhead, HTREE_DEP_ROOT);
+++	return rc >= 0;
+++}
+++EXPORT_SYMBOL(htree_change_lock_try);
+++
+++/* create a htree_lock head with @depth levels (number of child-locks),
+++ * it is a per resoruce structure */
+++struct htree_lock_head *
+++htree_lock_head_alloc(unsigned depth, unsigned hbits, unsigned priv)
+++{
+++	struct htree_lock_head *lhead;
+++	int  i;
+++
+++	if (depth > HTREE_LOCK_DEP_MAX) {
+++		printk(KERN_ERR "%d is larger than max htree_lock depth %d\n",
+++			depth, HTREE_LOCK_DEP_MAX);
+++		return NULL;
+++	}
+++
+++	lhead = kzalloc(offsetof(struct htree_lock_head,
+++				 lh_children[depth]) + priv, GFP_NOFS);
+++	if (lhead == NULL)
+++		return NULL;
+++
+++	if (hbits < HTREE_HBITS_MIN)
+++		lhead->lh_hbits = HTREE_HBITS_MIN;
+++	else if (hbits > HTREE_HBITS_MAX)
+++		lhead->lh_hbits = HTREE_HBITS_MAX;
+++
+++	lhead->lh_lock = 0;
+++	lhead->lh_depth = depth;
+++	INIT_LIST_HEAD(&lhead->lh_blocked_list);
+++	if (priv > 0) {
+++		lhead->lh_private = (void *)lhead +
+++			offsetof(struct htree_lock_head, lh_children[depth]);
+++	}
+++
+++	for (i = 0; i < depth; i++) {
+++		INIT_LIST_HEAD(&lhead->lh_children[i].lc_list);
+++		lhead->lh_children[i].lc_events = HTREE_EVENT_DISABLE;
+++	}
+++	return lhead;
+++}
+++EXPORT_SYMBOL(htree_lock_head_alloc);
+++
+++/* free the htree_lock head */
+++void
+++htree_lock_head_free(struct htree_lock_head *lhead)
+++{
+++	int     i;
+++
+++	BUG_ON(!list_empty(&lhead->lh_blocked_list));
+++	for (i = 0; i < lhead->lh_depth; i++)
+++		BUG_ON(!list_empty(&lhead->lh_children[i].lc_list));
+++	kfree(lhead);
+++}
+++EXPORT_SYMBOL(htree_lock_head_free);
+++
+++/* register event callback for @events of child-lock at level @dep */
+++void
+++htree_lock_event_attach(struct htree_lock_head *lhead, unsigned dep,
+++			unsigned events, htree_event_cb_t callback)
+++{
+++	BUG_ON(lhead->lh_depth <= dep);
+++	lhead->lh_children[dep].lc_events = events;
+++	lhead->lh_children[dep].lc_callback = callback;
+++}
+++EXPORT_SYMBOL(htree_lock_event_attach);
+++
+++/* allocate a htree_lock, which is per-thread structure, @pbytes is some
+++ * extra-bytes as private data for caller */
+++struct htree_lock *
+++htree_lock_alloc(unsigned depth, unsigned pbytes)
+++{
+++	struct htree_lock *lck;
+++	int i = offsetof(struct htree_lock, lk_nodes[depth]);
+++
+++	if (depth > HTREE_LOCK_DEP_MAX) {
+++		printk(KERN_ERR "%d is larger than max htree_lock depth %d\n",
+++			depth, HTREE_LOCK_DEP_MAX);
+++		return NULL;
+++	}
+++	lck = kzalloc(i + pbytes, GFP_NOFS);
+++	if (lck == NULL)
+++		return NULL;
+++
+++	if (pbytes != 0)
+++		lck->lk_private = (void *)lck + i;
+++	lck->lk_mode = HTREE_LOCK_INVAL;
+++	lck->lk_depth = depth;
+++	INIT_LIST_HEAD(&lck->lk_blocked_list);
+++
+++	for (i = 0; i < depth; i++) {
+++		struct htree_lock_node *node = &lck->lk_nodes[i];
+++
+++		node->ln_mode = HTREE_LOCK_INVAL;
+++		INIT_LIST_HEAD(&node->ln_major_list);
+++		INIT_LIST_HEAD(&node->ln_minor_list);
+++		INIT_LIST_HEAD(&node->ln_alive_list);
+++		INIT_LIST_HEAD(&node->ln_blocked_list);
+++		INIT_LIST_HEAD(&node->ln_granted_list);
+++	}
+++
+++	return lck;
+++}
+++EXPORT_SYMBOL(htree_lock_alloc);
+++
+++/* free htree_lock node */
+++void
+++htree_lock_free(struct htree_lock *lck)
+++{
+++	BUG_ON(lck->lk_mode != HTREE_LOCK_INVAL);
+++	kfree(lck);
+++}
+++EXPORT_SYMBOL(htree_lock_free);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
++@@ -27,6 +27,7 @@
++ #include <linux/mutex.h>
++ #include <linux/timer.h>
++ #include <linux/wait.h>
+++#include <linux/htree_lock.h>
++ #include <linux/blockgroup_lock.h>
++ #include <linux/percpu_counter.h>
++ #include <crypto/hash.h>
++@@ -1533,6 +1534,7 @@ static inline void ext4_clear_state_flag
++ 					 EXT4_FEATURE_INCOMPAT_META_BG| \
++ 					 EXT4_FEATURE_INCOMPAT_EXTENTS| \
++ 					 EXT4_FEATURE_INCOMPAT_64BIT| \
+++					 EXT4_FEATURE_INCOMPAT_LARGEDIR|\
++ 					 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
++ 					 EXT4_FEATURE_INCOMPAT_EA_INODE| \
++ 					 EXT4_FEATURE_INCOMPAT_MMP |	\
++@@ -1958,6 +1960,76 @@ struct mmpd_data {
++ # define NORET_TYPE	/**/
++ # define ATTRIB_NORET	__attribute__((noreturn))
++ # define NORET_AND	noreturn,
+++/* htree levels for ext4 */
+++#define EXT4_HTREE_LEVEL_COMPAT 2
+++#define EXT4_HTREE_LEVEL	3
+++
+++static inline int
+++ext4_dir_htree_level(struct super_block *sb)
+++{
+++	return EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_LARGEDIR) ?
+++		EXT4_HTREE_LEVEL : EXT4_HTREE_LEVEL_COMPAT;
+++}
+++
+++/* assume name-hash is protected by upper layer */
+++#define EXT4_HTREE_LOCK_HASH	0
+++
+++enum ext4_pdo_lk_types {
+++#if EXT4_HTREE_LOCK_HASH
+++	EXT4_LK_HASH,
+++#endif
+++	EXT4_LK_DX,		/* index block */
+++	EXT4_LK_DE,		/* directory entry block */
+++	EXT4_LK_SPIN,		/* spinlock */
+++	EXT4_LK_MAX,
+++};
+++
+++/* read-only bit */
+++#define EXT4_LB_RO(b)		(1 << (b))
+++/* read + write, high bits for writer */
+++#define EXT4_LB_RW(b)		((1 << (b)) | (1 << (EXT4_LK_MAX + (b))))
+++
+++enum ext4_pdo_lock_bits {
+++	/* DX lock bits */
+++	EXT4_LB_DX_RO		= EXT4_LB_RO(EXT4_LK_DX),
+++	EXT4_LB_DX		= EXT4_LB_RW(EXT4_LK_DX),
+++	/* DE lock bits */
+++	EXT4_LB_DE_RO		= EXT4_LB_RO(EXT4_LK_DE),
+++	EXT4_LB_DE		= EXT4_LB_RW(EXT4_LK_DE),
+++	/* DX spinlock bits */
+++	EXT4_LB_SPIN_RO		= EXT4_LB_RO(EXT4_LK_SPIN),
+++	EXT4_LB_SPIN		= EXT4_LB_RW(EXT4_LK_SPIN),
+++	/* accurate searching */
+++	EXT4_LB_EXACT		= EXT4_LB_RO(EXT4_LK_MAX << 1),
+++};
+++
+++enum ext4_pdo_lock_opc {
+++	/* external */
+++	EXT4_HLOCK_READDIR	= (EXT4_LB_DE_RO | EXT4_LB_DX_RO),
+++	EXT4_HLOCK_LOOKUP	= (EXT4_LB_DE_RO | EXT4_LB_SPIN_RO |
+++				   EXT4_LB_EXACT),
+++	EXT4_HLOCK_DEL		= (EXT4_LB_DE | EXT4_LB_SPIN_RO |
+++				   EXT4_LB_EXACT),
+++	EXT4_HLOCK_ADD		= (EXT4_LB_DE | EXT4_LB_SPIN_RO),
+++
+++	/* internal */
+++	EXT4_HLOCK_LOOKUP_SAFE	= (EXT4_LB_DE_RO | EXT4_LB_DX_RO |
+++				   EXT4_LB_EXACT),
+++	EXT4_HLOCK_DEL_SAFE	= (EXT4_LB_DE | EXT4_LB_DX_RO | EXT4_LB_EXACT),
+++	EXT4_HLOCK_SPLIT	= (EXT4_LB_DE | EXT4_LB_DX | EXT4_LB_SPIN),
+++};
+++
+++extern struct htree_lock_head *ext4_htree_lock_head_alloc(unsigned hbits);
+++#define ext4_htree_lock_head_free(lhead)	htree_lock_head_free(lhead)
+++
+++extern struct htree_lock *ext4_htree_lock_alloc(void);
+++#define ext4_htree_lock_free(lck)		htree_lock_free(lck)
+++
+++extern void ext4_htree_lock(struct htree_lock *lck,
+++			    struct htree_lock_head *lhead,
+++			    struct inode *dir, unsigned flags);
+++#define ext4_htree_unlock(lck)                  htree_unlock(lck)
+++
++ 
++ /* bitmap.c */
++ extern unsigned int ext4_count_free(char *bitmap, unsigned numchars);
++@@ -2050,9 +2122,17 @@ void ext4_insert_dentry(struct inode *in
++ 			const char *name, int namelen, void *data);
++ static inline void ext4_update_dx_flag(struct inode *inode)
++ {
+++	/* Disable it for ldiskfs, because going from a DX directory to
+++	 * a non-DX directory while it is in use will completely break
+++	 * the htree-locking.
+++	 * If we really want to support this operation in the future,
+++	 * we need to exclusively lock the directory at here which will
+++	 * increase complexity of code */
+++#if 0
++ 	if (!EXT4_HAS_COMPAT_FEATURE(inode->i_sb,
++ 				     EXT4_FEATURE_COMPAT_DIR_INDEX))
++ 		ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
+++#endif
++ }
++ static unsigned char ext4_filetype_table[] = {
++ 	DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
++@@ -2215,15 +2295,16 @@ extern int ext4_htree_fill_tree(struct f
++ extern struct inode *ext4_create_inode(handle_t *handle,
++ 				       struct inode * dir, int mode);
++ extern int ext4_add_entry(handle_t *handle, struct dentry *dentry,
++-			  struct inode *inode);
+++			  struct inode *inode, struct htree_lock *lck);
++ extern int ext4_delete_entry(handle_t *handle, struct inode * dir,
++ 			     struct ext4_dir_entry_2 * de_del,
++ 			     struct buffer_head * bh);
++ extern struct buffer_head * ext4_find_entry(struct inode *dir,
++ 					    const struct qstr *d_name,
++ 					    struct ext4_dir_entry_2 ** res_dir,
++-					    int *inlined);
++-#define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL)
+++					    int *inlined, struct htree_lock *lck);
+++#define ll_ext4_find_entry(inode, dentry, res_dir, lck) \
+++	ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL, lck)
++ extern struct buffer_head *ext4_append(handle_t *handle,
++ 				       struct inode *inode,
++ 				       ext4_lblk_t *block);
++@@ -2443,13 +2524,15 @@ static inline void ext4_r_blocks_count_s
++ 	es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32);
++ }
++ 
++-static inline loff_t ext4_isize(struct ext4_inode *raw_inode)
+++static inline loff_t ext4_isize(struct super_block *sb,
+++				struct ext4_inode *raw_inode)
++ {
++-	if (S_ISREG(le16_to_cpu(raw_inode->i_mode)))
+++	if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_LARGEDIR) ||
+++	    S_ISREG(le16_to_cpu(raw_inode->i_mode)))
++ 		return ((loff_t)le32_to_cpu(raw_inode->i_size_high) << 32) |
++ 			le32_to_cpu(raw_inode->i_size_lo);
++-	else
++-		return (loff_t) le32_to_cpu(raw_inode->i_size_lo);
+++
+++	return (loff_t) le32_to_cpu(raw_inode->i_size_lo);
++ }
++ 
++ static inline void ext4_isize_set(struct ext4_inode *raw_inode, loff_t i_size)
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
++@@ -254,7 +254,7 @@ static struct dx_frame *dx_probe(const s
++ 				 struct inode *dir,
++ 				 struct dx_hash_info *hinfo,
++ 				 struct dx_frame *frame,
++-				 int *err);
+++				 struct htree_lock *lck, int *err);
++ static void dx_release(struct dx_frame *frames);
++ static int dx_make_map(struct ext4_dir_entry_2 *de, unsigned blocksize,
++ 		       struct dx_hash_info *hinfo, struct dx_map_entry map[]);
++@@ -267,13 +267,13 @@ static void dx_insert_block(struct dx_fr
++ static int ext4_htree_next_block(struct inode *dir, __u32 hash,
++ 				 struct dx_frame *frame,
++ 				 struct dx_frame *frames,
++-				 __u32 *start_hash);
+++				 __u32 *start_hash, struct htree_lock *lck);
++ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
++ 		const struct qstr *d_name,
++ 		struct ext4_dir_entry_2 **res_dir,
++-		int *err);
+++		struct htree_lock *lck, int *err);
++ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
++-			     struct inode *inode);
+++			     struct inode *inode, struct htree_lock *lck);
++ 
++ /* checksumming functions */
++ void initialize_dirent_tail(struct ext4_dir_entry_tail *t,
++@@ -525,7 +525,7 @@ struct dx_root_info * dx_get_dx_info(str
++ 
++ static inline ext4_lblk_t dx_get_block(struct dx_entry *entry)
++ {
++-	return le32_to_cpu(entry->block) & 0x00ffffff;
+++	return le32_to_cpu(entry->block) & 0x0fffffff;
++ }
++ 
++ static inline void dx_set_block(struct dx_entry *entry, ext4_lblk_t value)
++@@ -675,6 +675,223 @@ struct stats dx_show_entries(struct dx_h
++ }
++ #endif /* DX_DEBUG */
++ 
+++/* private data for htree_lock */
+++struct ext4_dir_lock_data {
+++	unsigned		ld_flags;  /* bits-map for lock types */
+++	unsigned		ld_count;  /* # entries of the last DX block */
+++	struct dx_entry		ld_at_entry; /* copy of leaf dx_entry */
+++	struct dx_entry		*ld_at;	   /* position of leaf dx_entry */
+++};
+++
+++#define ext4_htree_lock_data(l)	((struct ext4_dir_lock_data *)(l)->lk_private)
+++
+++/* NB: ext4_lblk_t is 32 bits so we use high bits to identify invalid blk */
+++#define EXT4_HTREE_NODE_CHANGED	(0xcafeULL << 32)
+++
+++static void ext4_htree_event_cb(void *target, void *event)
+++{
+++	u64 *block = (u64 *)target;
+++
+++	if (*block == dx_get_block((struct dx_entry *)event))
+++		*block = EXT4_HTREE_NODE_CHANGED;
+++}
+++
+++struct htree_lock_head *ext4_htree_lock_head_alloc(unsigned hbits)
+++{
+++	struct htree_lock_head *lhead;
+++
+++	lhead = htree_lock_head_alloc(EXT4_LK_MAX, hbits, 0);
+++	if (lhead != NULL) {
+++		htree_lock_event_attach(lhead, EXT4_LK_SPIN, HTREE_EVENT_WR,
+++					ext4_htree_event_cb);
+++	}
+++	return lhead;
+++}
+++EXPORT_SYMBOL(ext4_htree_lock_head_alloc);
+++
+++struct htree_lock *ext4_htree_lock_alloc(void)
+++{
+++	return htree_lock_alloc(EXT4_LK_MAX,
+++				sizeof(struct ext4_dir_lock_data));
+++}
+++EXPORT_SYMBOL(ext4_htree_lock_alloc);
+++
+++static htree_lock_mode_t ext4_htree_mode(unsigned flags)
+++{
+++	switch (flags) {
+++	default: /* 0 or unknown flags require EX lock */
+++		return HTREE_LOCK_EX;
+++	case EXT4_HLOCK_READDIR:
+++		return HTREE_LOCK_PR;
+++	case EXT4_HLOCK_LOOKUP:
+++		return HTREE_LOCK_CR;
+++	case EXT4_HLOCK_DEL:
+++	case EXT4_HLOCK_ADD:
+++		return HTREE_LOCK_CW;
+++	}
+++}
+++
+++/* return PR for read-only operations, otherwise return EX */
+++static inline htree_lock_mode_t ext4_htree_safe_mode(unsigned flags)
+++{
+++	int writer = (flags & EXT4_LB_DE) == EXT4_LB_DE;
+++
+++	/* 0 requires EX lock */
+++	return (flags == 0 || writer) ? HTREE_LOCK_EX : HTREE_LOCK_PR;
+++}
+++
+++static int ext4_htree_safe_locked(struct htree_lock *lck)
+++{
+++	int writer;
+++
+++	if (lck == NULL || lck->lk_mode == HTREE_LOCK_EX)
+++		return 1;
+++
+++	writer = (ext4_htree_lock_data(lck)->ld_flags & EXT4_LB_DE) ==
+++		 EXT4_LB_DE;
+++	if (writer) /* all readers & writers are excluded? */
+++		return lck->lk_mode == HTREE_LOCK_EX;
+++
+++	/* all writers are excluded? */
+++	return lck->lk_mode == HTREE_LOCK_PR ||
+++	       lck->lk_mode == HTREE_LOCK_PW ||
+++	       lck->lk_mode == HTREE_LOCK_EX;
+++}
+++
+++/* relock htree_lock with EX mode if it's change operation, otherwise
+++ * relock it with PR mode. It's noop if PDO is disabled. */
+++static void ext4_htree_safe_relock(struct htree_lock *lck)
+++{
+++	if (!ext4_htree_safe_locked(lck)) {
+++		unsigned flags = ext4_htree_lock_data(lck)->ld_flags;
+++
+++		htree_change_lock(lck, ext4_htree_safe_mode(flags));
+++	}
+++}
+++
+++void ext4_htree_lock(struct htree_lock *lck, struct htree_lock_head *lhead,
+++		     struct inode *dir, unsigned flags)
+++{
+++	htree_lock_mode_t mode = is_dx(dir) ? ext4_htree_mode(flags) :
+++					      ext4_htree_safe_mode(flags);
+++
+++	ext4_htree_lock_data(lck)->ld_flags = flags;
+++	htree_lock(lck, lhead, mode);
+++	if (!is_dx(dir))
+++		ext4_htree_safe_relock(lck); /* make sure it's safe locked */
+++}
+++EXPORT_SYMBOL(ext4_htree_lock);
+++
+++static int ext4_htree_node_lock(struct htree_lock *lck, struct dx_entry *at,
+++				unsigned lmask, int wait, void *ev)
+++{
+++	u32	key = (at == NULL) ? 0 : dx_get_block(at);
+++	u32	mode;
+++
+++	/* NOOP if htree is well protected or caller doesn't require the lock */
+++	if (ext4_htree_safe_locked(lck) ||
+++	   !(ext4_htree_lock_data(lck)->ld_flags & lmask))
+++		return 1;
+++
+++	mode = (ext4_htree_lock_data(lck)->ld_flags & lmask) == lmask ?
+++		HTREE_LOCK_PW : HTREE_LOCK_PR;
+++	while (1) {
+++		if (htree_node_lock_try(lck, mode, key, ffz(~lmask), wait, ev))
+++			return 1;
+++		if (!(lmask & EXT4_LB_SPIN)) /* not a spinlock */
+++			return 0;
+++		cpu_relax(); /* spin until granted */
+++	}
+++}
+++
+++static int ext4_htree_node_locked(struct htree_lock *lck, unsigned lmask)
+++{
+++	return ext4_htree_safe_locked(lck) ||
+++	       htree_node_is_granted(lck, ffz(~lmask));
+++}
+++
+++static void ext4_htree_node_unlock(struct htree_lock *lck,
+++				   unsigned lmask, void *buf)
+++{
+++	/* NB: it's safe to call mutiple times or even it's not locked */
+++	if (!ext4_htree_safe_locked(lck) &&
+++	     htree_node_is_granted(lck, ffz(~lmask)))
+++		htree_node_unlock(lck, ffz(~lmask), buf);
+++}
+++
+++#define ext4_htree_dx_lock(lck, key)		\
+++	ext4_htree_node_lock(lck, key, EXT4_LB_DX, 1, NULL)
+++#define ext4_htree_dx_lock_try(lck, key)	\
+++	ext4_htree_node_lock(lck, key, EXT4_LB_DX, 0, NULL)
+++#define ext4_htree_dx_unlock(lck)		\
+++	ext4_htree_node_unlock(lck, EXT4_LB_DX, NULL)
+++#define ext4_htree_dx_locked(lck)		\
+++	ext4_htree_node_locked(lck, EXT4_LB_DX)
+++
+++static void ext4_htree_dx_need_lock(struct htree_lock *lck)
+++{
+++	struct ext4_dir_lock_data *ld;
+++
+++	if (ext4_htree_safe_locked(lck))
+++		return;
+++
+++	ld = ext4_htree_lock_data(lck);
+++	switch (ld->ld_flags) {
+++	default:
+++		return;
+++	case EXT4_HLOCK_LOOKUP:
+++		ld->ld_flags = EXT4_HLOCK_LOOKUP_SAFE;
+++		return;
+++	case EXT4_HLOCK_DEL:
+++		ld->ld_flags = EXT4_HLOCK_DEL_SAFE;
+++		return;
+++	case EXT4_HLOCK_ADD:
+++		ld->ld_flags = EXT4_HLOCK_SPLIT;
+++		return;
+++	}
+++}
+++
+++#define ext4_htree_de_lock(lck, key)		\
+++	ext4_htree_node_lock(lck, key, EXT4_LB_DE, 1, NULL)
+++#define ext4_htree_de_unlock(lck)		\
+++	ext4_htree_node_unlock(lck, EXT4_LB_DE, NULL)
+++
+++#define ext4_htree_spin_lock(lck, key, event)	\
+++	ext4_htree_node_lock(lck, key, EXT4_LB_SPIN, 0, event)
+++#define ext4_htree_spin_unlock(lck)		\
+++	ext4_htree_node_unlock(lck, EXT4_LB_SPIN, NULL)
+++#define ext4_htree_spin_unlock_listen(lck, p)	\
+++	ext4_htree_node_unlock(lck, EXT4_LB_SPIN, p)
+++
+++static void ext4_htree_spin_stop_listen(struct htree_lock *lck)
+++{
+++	if (!ext4_htree_safe_locked(lck) &&
+++	    htree_node_is_listening(lck, ffz(~EXT4_LB_SPIN)))
+++		htree_node_stop_listen(lck, ffz(~EXT4_LB_SPIN));
+++}
+++
+++enum {
+++	DX_HASH_COL_IGNORE,	/* ignore collision while probing frames */
+++	DX_HASH_COL_YES,	/* there is collision and it does matter */
+++	DX_HASH_COL_NO,		/* there is no collision */
+++};
+++
+++static int dx_probe_hash_collision(struct htree_lock *lck,
+++				   struct dx_entry *entries,
+++				   struct dx_entry *at, u32 hash)
+++{
+++	if (!(ext4_htree_lock_data(lck)->ld_flags & EXT4_LB_EXACT)) {
+++		return DX_HASH_COL_IGNORE; /* don't care about collision */
+++
+++	} else if (at == entries + dx_get_count(entries) - 1) {
+++		return DX_HASH_COL_IGNORE; /* not in any leaf of this DX */
+++
+++	} else { /* hash collision? */
+++		return ((dx_get_hash(at + 1) & ~1) == hash) ?
+++			DX_HASH_COL_YES : DX_HASH_COL_NO;
+++	}
+++}
+++
++ /*
++  * Probe for a directory leaf block to search.
++  *
++@@ -686,16 +903,17 @@ struct stats dx_show_entries(struct dx_h
++  */
++ static struct dx_frame *
++ dx_probe(const struct qstr *d_name, struct inode *dir,
++-	 struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
+++	 struct dx_hash_info *hinfo, struct dx_frame *frame_in,
+++	 struct htree_lock *lck, int *err)
++ {
++ 	unsigned count, indirect;
++-	struct dx_entry *at, *entries, *p, *q, *m;
+++	struct dx_entry *at, *entries, *p, *q, *m, *dx = NULL;
++ 	struct dx_root_info * info;
++ 	struct buffer_head *bh;
++ 	struct dx_frame *frame = frame_in;
++ 	u32 hash;
++ 
++-	frame->bh = NULL;
+++	memset(frame_in, 0, EXT4_HTREE_LEVEL * sizeof(frame_in[0]));
++ 	bh = ext4_read_dirblock(dir, 0, INDEX);
++ 	if (IS_ERR(bh)) {
++ 		*err = PTR_ERR(bh);
++@@ -728,9 +946,16 @@ dx_probe(const struct qstr *d_name, stru
++ 		goto fail;
++ 	}
++ 
++-	if ((indirect = info->indirect_levels) > 1) {
++-		ext4_warning(dir->i_sb, "Unimplemented inode hash depth: %#06x",
++-			     info->indirect_levels);
+++	indirect = info->indirect_levels;
+++	if (indirect >= ext4_dir_htree_level(dir->i_sb)) {
+++		ext4_warning(dir->i_sb,
+++			     "Directory (ino: %lu) htree depth %#06x exceed "
+++			     "supported value", dir->i_ino,
+++			     ext4_dir_htree_level(dir->i_sb));
+++		if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) {
+++			ext4_warning(dir->i_sb, "Enable large directory "
+++						"feature to access it");
+++		}
++ 		brelse(bh);
++ 		*err = ERR_BAD_DX_DIR;
++ 		goto fail;
++@@ -750,8 +975,15 @@ dx_probe(const struct qstr *d_name, stru
++ 	dxtrace(printk("Look up %x", hash));
++ 	while (1)
++ 	{
+++		if (indirect == 0) { /* the last index level */
+++			/* NB: ext4_htree_dx_lock() could be noop if
+++			 * DX-lock flag is not set for current operation */
+++			ext4_htree_dx_lock(lck, dx);
+++			ext4_htree_spin_lock(lck, dx, NULL);
+++		}
++ 		count = dx_get_count(entries);
++-		if (!count || count > dx_get_limit(entries)) {
+++		if (count == 0 || count > dx_get_limit(entries)) {
+++			ext4_htree_spin_unlock(lck); /* release spin */
++ 			ext4_warning(dir->i_sb,
++ 				     "dx entry: no count or count > limit");
++ 			brelse(bh);
++@@ -792,7 +1024,70 @@ dx_probe(const struct qstr *d_name, stru
++ 		frame->bh = bh;
++ 		frame->entries = entries;
++ 		frame->at = at;
++-		if (!indirect--) return frame;
+++
+++		if (indirect == 0) { /* the last index level */
+++			struct ext4_dir_lock_data *ld;
+++			u64 myblock;
+++
+++			/* By default we only lock DE-block, however, we will
+++			 * also lock the last level DX-block if:
+++			 * a) there is hash collision
+++			 *    we will set DX-lock flag (a few lines below)
+++			 *    and redo to lock DX-block
+++			 *    see detail in dx_probe_hash_collision()
+++			 * b) it's a retry from splitting
+++			 *    we need to lock the last level DX-block so nobody
+++			 *    else can split any leaf blocks under the same
+++			 *    DX-block, see detail in ext4_dx_add_entry()
+++			 */
+++			if (ext4_htree_dx_locked(lck)) {
+++				/* DX-block is locked, just lock DE-block
+++				 * and return */
+++				ext4_htree_spin_unlock(lck);
+++				if (!ext4_htree_safe_locked(lck))
+++					ext4_htree_de_lock(lck, frame->at);
+++				return frame;
+++			}
+++			/* it's pdirop and no DX lock */
+++			if (dx_probe_hash_collision(lck, entries, at, hash) ==
+++			    DX_HASH_COL_YES) {
+++				/* found hash collision, set DX-lock flag
+++				 * and retry to abtain DX-lock */
+++				ext4_htree_spin_unlock(lck);
+++				ext4_htree_dx_need_lock(lck);
+++				continue;
+++			}
+++			ld = ext4_htree_lock_data(lck);
+++			/* because I don't lock DX, so @at can't be trusted
+++			 * after I release spinlock so I have to save it */
+++			ld->ld_at = at;
+++			ld->ld_at_entry = *at;
+++			ld->ld_count = dx_get_count(entries);
+++
+++			frame->at = &ld->ld_at_entry;
+++			myblock = dx_get_block(at);
+++
+++			/* NB: ordering locking */
+++			ext4_htree_spin_unlock_listen(lck, &myblock);
+++			/* other thread can split this DE-block because:
+++			 * a) I don't have lock for the DE-block yet
+++			 * b) I released spinlock on DX-block
+++			 * if it happened I can detect it by listening
+++			 * splitting event on this DE-block */
+++			ext4_htree_de_lock(lck, frame->at);
+++			ext4_htree_spin_stop_listen(lck);
+++
+++			if (myblock == EXT4_HTREE_NODE_CHANGED) {
+++				/* someone split this DE-block before
+++				 * I locked it, I need to retry and lock
+++				 * valid DE-block */
+++				ext4_htree_de_unlock(lck);
+++				continue;
+++			}
+++			return frame;
+++		}
+++		dx = at;
+++		indirect--;
++ 		bh = ext4_read_dirblock(dir, dx_get_block(at), INDEX);
++ 		if (IS_ERR(bh)) {
++ 			*err = PTR_ERR(bh);
++@@ -826,13 +1121,18 @@ fail:
++ static void dx_release (struct dx_frame *frames)
++ {
++ 	struct dx_root_info *info;
+++	int i;
+++
++ 	if (frames[0].bh == NULL)
++ 		return;
++ 
++ 	info = dx_get_dx_info((struct ext4_dir_entry_2*)frames[0].bh->b_data);
++-	if (info->indirect_levels)
++-		brelse(frames[1].bh);
++-	brelse(frames[0].bh);
+++	for (i = 0; i <= info->indirect_levels; i++) {
+++		if (frames[i].bh == NULL)
+++			break;
+++		brelse(frames[i].bh);
+++		frames[i].bh = NULL;
+++	}
++ }
++ 
++ /*
++@@ -855,7 +1155,7 @@ static void dx_release (struct dx_frame
++ static int ext4_htree_next_block(struct inode *dir, __u32 hash,
++ 				 struct dx_frame *frame,
++ 				 struct dx_frame *frames,
++-				 __u32 *start_hash)
+++				 __u32 *start_hash, struct htree_lock *lck)
++ {
++ 	struct dx_frame *p;
++ 	struct buffer_head *bh;
++@@ -870,12 +1170,22 @@ static int ext4_htree_next_block(struct
++ 	 * this loop, num_frames indicates the number of interior
++ 	 * nodes need to be read.
++ 	 */
+++	ext4_htree_de_unlock(lck);
++ 	while (1) {
++-		if (++(p->at) < p->entries + dx_get_count(p->entries))
++-			break;
+++		if (num_frames > 0 || ext4_htree_dx_locked(lck)) {
+++			/* num_frames > 0 :
+++			 *   DX block
+++			 * ext4_htree_dx_locked:
+++			 *   frame->at is reliable pointer returned by dx_probe,
+++			 *   otherwise dx_probe already knew no collision */
+++			if (++(p->at) < p->entries + dx_get_count(p->entries))
+++				break;
+++		}
++ 		if (p == frames)
++ 			return 0;
++ 		num_frames++;
+++		if (num_frames == 1)
+++			ext4_htree_dx_unlock(lck);
++ 		p--;
++ 	}
++ 
++@@ -898,6 +1208,13 @@ static int ext4_htree_next_block(struct
++ 	 * block so no check is necessary
++ 	 */
++ 	while (num_frames--) {
+++		if (num_frames == 0) {
+++			/* it's not always necessary, we just don't want to
+++			 * detect hash collision again */
+++			ext4_htree_dx_need_lock(lck);
+++			ext4_htree_dx_lock(lck, p->at);
+++		}
+++
++ 		bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX);
++ 		if (IS_ERR(bh))
++ 			return PTR_ERR(bh);
++@@ -906,6 +1223,7 @@ static int ext4_htree_next_block(struct
++ 		p->bh = bh;
++ 		p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
++ 	}
+++	ext4_htree_de_lock(lck, p->at);
++ 	return 1;
++ }
++ 
++@@ -974,7 +1292,7 @@ int ext4_htree_fill_tree(struct file *di
++ {
++ 	struct dx_hash_info hinfo;
++ 	struct ext4_dir_entry_2 *de;
++-	struct dx_frame frames[2], *frame;
+++	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
++ 	struct inode *dir;
++ 	ext4_lblk_t block;
++ 	int count = 0;
++@@ -1008,10 +1326,10 @@ int ext4_htree_fill_tree(struct file *di
++ 	}
++ 	hinfo.hash = start_hash;
++ 	hinfo.minor_hash = 0;
++-	frame = dx_probe(NULL, dir, &hinfo, frames, &err);
+++	/* assume it's PR locked */
+++	frame = dx_probe(NULL, dir, &hinfo, frames, NULL, &err);
++ 	if (!frame)
++ 		return err;
++-
++ 	/* Add '.' and '..' from the htree header */
++ 	if (!start_hash && !start_minor_hash) {
++ 		de = (struct ext4_dir_entry_2 *) frames[0].bh->b_data;
++@@ -1038,7 +1356,7 @@ int ext4_htree_fill_tree(struct file *di
++ 		count += ret;
++ 		hashval = ~0;
++ 		ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS,
++-					    frame, frames, &hashval);
+++					    frame, frames, &hashval, NULL);
++ 		*next_hash = hashval;
++ 		if (ret < 0) {
++ 			err = ret;
++@@ -1234,7 +1552,7 @@ static int is_dx_internal_node(struct in
++ struct buffer_head * ext4_find_entry(struct inode *dir,
++ 					const struct qstr *d_name,
++ 					struct ext4_dir_entry_2 **res_dir,
++-					int *inlined)
+++					int *inlined, struct htree_lock *lck)
++ {
++ 	struct super_block *sb;
++ 	struct buffer_head *bh_use[NAMEI_RA_SIZE];
++@@ -1278,7 +1596,7 @@ struct buffer_head * ext4_find_entry(str
++ 		goto restart;
++ 	}
++ 	if (is_dx(dir)) {
++-		bh = ext4_dx_find_entry(dir, d_name, res_dir, &err);
+++		bh = ext4_dx_find_entry(dir, d_name, res_dir, lck, &err);
++ 		/*
++ 		 * On success, or if the error was file not found,
++ 		 * return.  Otherwise, fall back to doing a search the
++@@ -1288,6 +1606,7 @@ struct buffer_head * ext4_find_entry(str
++ 			return bh;
++ 		dxtrace(printk(KERN_DEBUG "ext4_find_entry: dx failed, "
++ 			       "falling back\n"));
+++		ext4_htree_safe_relock(lck);
++ 	}
++ 	nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
++ 	start = EXT4_I(dir)->i_dir_start_lookup;
++@@ -1377,17 +1696,19 @@ cleanup_and_exit:
++ }
++ EXPORT_SYMBOL(ext4_find_entry);
++ 
++-static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name,
++-		       struct ext4_dir_entry_2 **res_dir, int *err)
+++static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
+++				const struct qstr *d_name,
+++				struct ext4_dir_entry_2 **res_dir,
+++				struct htree_lock *lck, int *err)
++ {
++ 	struct super_block * sb = dir->i_sb;
++ 	struct dx_hash_info	hinfo;
++-	struct dx_frame frames[2], *frame;
+++	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
++ 	struct buffer_head *bh;
++ 	ext4_lblk_t block;
++ 	int retval;
++ 
++-	if (!(frame = dx_probe(d_name, dir, &hinfo, frames, err)))
+++	if (!(frame = dx_probe(d_name, dir, &hinfo, frames, lck, err)))
++ 		return NULL;
++ 	do {
++ 		block = dx_get_block(frame->at);
++@@ -1411,7 +1732,7 @@ static struct buffer_head * ext4_dx_find
++ 
++ 		/* Check to see if we should continue to search */
++ 		retval = ext4_htree_next_block(dir, hinfo.hash, frame,
++-					       frames, NULL);
+++					       frames, NULL, lck);
++ 		if (retval < 0) {
++ 			ext4_warning(sb,
++ 			     "error reading index page in directory #%lu",
++@@ -1437,7 +1758,7 @@ static struct dentry *ext4_lookup(struct
++ 	if (dentry->d_name.len > EXT4_NAME_LEN)
++ 		return ERR_PTR(-ENAMETOOLONG);
++ 
++-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+++	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
++ 	inode = NULL;
++ 	if (bh) {
++ 		__u32 ino = le32_to_cpu(de->inode);
++@@ -1497,7 +1818,7 @@ struct dentry *ext4_get_parent(struct de
++ 	struct ext4_dir_entry_2 * de;
++ 	struct buffer_head *bh;
++ 
++-	bh = ext4_find_entry(child->d_inode, &dotdot, &de, NULL);
+++	bh = ext4_find_entry(child->d_inode, &dotdot, &de, NULL, NULL);
++ 	if (!bh)
++ 		return ERR_PTR(-ENOENT);
++ 	ino = le32_to_cpu(de->inode);
++@@ -1567,8 +1888,9 @@ static struct ext4_dir_entry_2* dx_pack_
++  * Returns pointer to de in block into which the new entry will be inserted.
++  */
++ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
++-			struct buffer_head **bh,struct dx_frame *frame,
++-			struct dx_hash_info *hinfo, int *error)
+++			struct buffer_head **bh, struct dx_frame *frames,
+++			struct dx_frame *frame, struct dx_hash_info *hinfo,
+++			struct htree_lock *lck, int *error)
++ {
++ 	unsigned blocksize = dir->i_sb->s_blocksize;
++ 	unsigned count, continued;
++@@ -1632,7 +1954,14 @@ static struct ext4_dir_entry_2 *do_split
++ 					hash2, split, count-split));
++ 
++ 	/* Fancy dance to stay within two buffers */
++-	de2 = dx_move_dirents(data1, data2, map + split, count - split, blocksize);
+++	if (hinfo->hash < hash2) {
+++		de2 = dx_move_dirents(data1, data2, map + split,
+++				      count - split, blocksize);
+++	} else {
+++		/* make sure we will add entry to the same block which
+++		 * we have already locked */
+++		de2 = dx_move_dirents(data1, data2, map, split, blocksize);
+++	}
++ 	de = dx_pack_dirents(data1, blocksize);
++ 	de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) -
++ 					   (char *) de,
++@@ -1651,13 +1980,21 @@ static struct ext4_dir_entry_2 *do_split
++ 	dxtrace(dx_show_leaf (hinfo, (struct ext4_dir_entry_2 *) data1, blocksize, 1));
++ 	dxtrace(dx_show_leaf (hinfo, (struct ext4_dir_entry_2 *) data2, blocksize, 1));
++ 
++-	/* Which block gets the new entry? */
++-	if (hinfo->hash >= hash2)
++-	{
++-		swap(*bh, bh2);
++-		de = de2;
+++	ext4_htree_spin_lock(lck, frame > frames ? (frame - 1)->at : NULL,
+++			     frame->at); /* notify block is being split */
+++	if (hinfo->hash < hash2) {
+++		dx_insert_block(frame, hash2 + continued, newblock);
+++
+++	} else {
+++		/* switch block number */
+++		dx_insert_block(frame, hash2 + continued,
+++				dx_get_block(frame->at));
+++		dx_set_block(frame->at, newblock);
+++		(frame->at)++;
++ 	}
++-	dx_insert_block(frame, hash2 + continued, newblock);
+++	ext4_htree_spin_unlock(lck);
+++	ext4_htree_dx_unlock(lck);
+++
++ 	err = ext4_handle_dirty_dirent_node(handle, dir, bh2);
++ 	if (err)
++ 		goto journal_error;
++@@ -1800,7 +2137,7 @@ static int add_dirent_to_buf(handle_t *h
++ 	if (!IS_NOCMTIME(dir))
++ 		dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
++ 	ext4_update_dx_flag(dir);
++-	dir->i_version++;
+++	inode_inc_iversion(dir);
++ 	ext4_mark_inode_dirty(handle, dir);
++ 	BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
++ 	err = ext4_handle_dirty_dirent_node(handle, dir, bh);
++@@ -1820,7 +2157,7 @@ static int make_indexed_dir(handle_t *ha
++ 	const char	*name = dentry->d_name.name;
++ 	int		namelen = dentry->d_name.len;
++ 	struct buffer_head *bh2;
++-	struct dx_frame	frames[2], *frame;
+++	struct dx_frame	frames[EXT4_HTREE_LEVEL], *frame;
++ 	struct dx_entry *entries;
++ 	struct ext4_dir_entry_2 *de, *de2, *dot_de, *dotdot_de;
++ 	struct ext4_dir_entry_tail *t;
++@@ -1914,7 +2251,7 @@ static int make_indexed_dir(handle_t *ha
++ 	ext4_handle_dirty_dx_node(handle, dir, frame->bh);
++ 	ext4_handle_dirty_dirent_node(handle, dir, bh);
++ 
++-	de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
+++	de = do_split(handle,dir, &bh, frames, frame, &hinfo, NULL, &retval);
++ 	if (!de) {
++ 		/*
++ 		 * Even if the block split failed, we have to properly write
++@@ -2021,7 +2358,7 @@ out:
++  * the entry, as someone else might have used it while you slept.
++  */
++ int ext4_add_entry(handle_t *handle, struct dentry *dentry,
++-		   struct inode *inode)
+++		   struct inode *inode, struct htree_lock *lck)
++ {
++ 	struct inode *dir = dentry->d_parent->d_inode;
++ 	struct buffer_head *bh;
++@@ -2057,9 +2394,10 @@ int ext4_add_entry(handle_t *handle, str
++ 		if (dentry->d_name.len == 2 &&
++ 		    memcmp(dentry->d_name.name, "..", 2) == 0)
++ 			return ext4_update_dotdot(handle, dentry, inode);
++-		retval = ext4_dx_add_entry(handle, dentry, inode);
+++		retval = ext4_dx_add_entry(handle, dentry, inode, lck);
++ 		if (!retval || (retval != ERR_BAD_DX_DIR))
++ 			return retval;
+++		ext4_htree_safe_relock(lck);
++ 		ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
++ 		dx_fallback++;
++ 		ext4_mark_inode_dirty(handle, dir);
++@@ -2105,18 +2443,21 @@ EXPORT_SYMBOL(ext4_add_entry);
++  * Returns 0 for success, or a negative error value
++  */
++ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
++-			     struct inode *inode)
+++			     struct inode *inode, struct htree_lock *lck)
++ {
++-	struct dx_frame frames[2], *frame;
+++	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
++ 	struct dx_entry *entries, *at;
++ 	struct dx_hash_info hinfo;
++ 	struct buffer_head *bh;
++ 	struct inode *dir = dentry->d_parent->d_inode;
++ 	struct super_block *sb = dir->i_sb;
++ 	struct ext4_dir_entry_2 *de;
+++	int restart;
++ 	int err;
++ 
++-	frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err);
+++again:
+++	restart = 0;
+++	frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, lck, &err);
++ 	if (!frame)
++ 		return err;
++ 	entries = frame->entries;
++@@ -2128,33 +2469,53 @@ static int ext4_dx_add_entry(handle_t *h
++ 		goto cleanup;
++ 	}
++ 
++-	BUFFER_TRACE(bh, "get_write_access");
++-	err = ext4_journal_get_write_access(handle, bh);
++-	if (err)
++-		goto journal_error;
++-
++ 	err = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
++ 	if (err != -ENOSPC)
++ 		goto cleanup;
++ 
+++	err = 0;
++ 	/* Block full, should compress but for now just split */
++ 	dxtrace(printk(KERN_DEBUG "using %u of %u node entries\n",
++ 		       dx_get_count(entries), dx_get_limit(entries)));
++ 	/* Need to split index? */
++ 	if (dx_get_count(entries) == dx_get_limit(entries)) {
++ 		ext4_lblk_t newblock;
++-		unsigned icount = dx_get_count(entries);
++-		int levels = frame - frames;
+++		int levels = frame - frames + 1;
+++		unsigned icount;
+++		int add_level = 1;
++ 		struct dx_entry *entries2;
++ 		struct dx_node *node2;
++ 		struct buffer_head *bh2;
++ 
++-		if (levels && (dx_get_count(frames->entries) ==
++-			       dx_get_limit(frames->entries))) {
++-			ext4_warning(sb, "Directory index full!");
+++		if (!ext4_htree_safe_locked(lck)) { /* retry with EX lock */
+++			ext4_htree_safe_relock(lck);
+++			restart = 1;
+++			goto cleanup;
+++		}
+++		while (frame > frames) {
+++			if (dx_get_count((frame - 1)->entries) <
+++			    dx_get_limit((frame - 1)->entries)) {
+++				add_level = 0;
+++				break;
+++			}
+++			frame--; /* split higher index block */
+++			at = frame->at;
+++			entries = frame->entries;
+++			restart = 1;
+++		}
+++		if (add_level && levels == ext4_dir_htree_level(sb)) {
+++			ext4_warning(sb, "Directory (ino: %lu) index full, "
+++					 "reach max htree level :%d",
+++					 dir->i_ino, levels);
+++			if (ext4_dir_htree_level(sb) < EXT4_HTREE_LEVEL) {
+++				ext4_warning(sb, "Large directory feature is"
+++						 "not enabled on this "
+++						 "filesystem");
+++			}
++ 			err = -ENOSPC;
++ 			goto cleanup;
++ 		}
+++		icount = dx_get_count(entries);
++ 		bh2 = ext4_append(handle, dir, &newblock);
++ 		if (IS_ERR(bh2)) {
++ 			err = PTR_ERR(bh2);
++@@ -2169,7 +2530,7 @@ static int ext4_dx_add_entry(handle_t *h
++ 		err = ext4_journal_get_write_access(handle, frame->bh);
++ 		if (err)
++ 			goto journal_error;
++-		if (levels) {
+++		if (!add_level) {
++ 			unsigned icount1 = icount/2, icount2 = icount - icount1;
++ 			unsigned hash2 = dx_get_hash(entries + icount1);
++ 			dxtrace(printk(KERN_DEBUG "Split index %i/%i\n",
++@@ -2177,7 +2538,7 @@ static int ext4_dx_add_entry(handle_t *h
++ 
++ 			BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
++ 			err = ext4_journal_get_write_access(handle,
++-							     frames[0].bh);
+++							    (frame - 1)->bh);
++ 			if (err)
++ 				goto journal_error;
++ 
++@@ -2193,18 +2554,24 @@ static int ext4_dx_add_entry(handle_t *h
++ 				frame->entries = entries = entries2;
++ 				swap(frame->bh, bh2);
++ 			}
++-			dx_insert_block(frames + 0, hash2, newblock);
++-			dxtrace(dx_show_index("node", frames[1].entries));
+++			dx_insert_block((frame - 1), hash2, newblock);
+++			dxtrace(dx_show_index("node", frame->entries));
++ 			dxtrace(dx_show_index("node",
++ 			       ((struct dx_node *) bh2->b_data)->entries));
++ 			err = ext4_handle_dirty_dx_node(handle, dir, bh2);
++ 			if (err)
++ 				goto journal_error;
++ 			brelse (bh2);
+++			ext4_handle_dirty_metadata(handle, inode,
+++						   (frame - 1)->bh);
+++			if (restart) {
+++				ext4_handle_dirty_metadata(handle, inode,
+++							   frame->bh);
+++				goto cleanup;
+++			}
++ 		} else {
++ 			struct dx_root_info * info;
++-			dxtrace(printk(KERN_DEBUG
++-				       "Creating second level index...\n"));
+++
++ 			memcpy((char *) entries2, (char *) entries,
++ 			       icount * sizeof(struct dx_entry));
++ 			dx_set_limit(entries2, dx_node_limit(dir));
++@@ -2214,35 +2581,63 @@ static int ext4_dx_add_entry(handle_t *h
++ 			dx_set_block(entries + 0, newblock);
++ 			info = dx_get_dx_info((struct ext4_dir_entry_2*)
++ 					frames[0].bh->b_data);
++-			info->indirect_levels = 1;
+++			info->indirect_levels += 1;
+++			dxtrace(printk(KERN_DEBUG
+++				       "Creating %d level index...\n",
+++				       info->indirect_levels));
+++			ext4_handle_dirty_metadata(handle, inode, frame->bh);
+++			ext4_handle_dirty_metadata(handle, inode, bh2);
+++			brelse(bh2);
+++			restart = 1;
+++			goto cleanup;
+++		}
+++	} else if (!ext4_htree_dx_locked(lck)) {
+++		struct ext4_dir_lock_data *ld = ext4_htree_lock_data(lck);
++ 
++-			/* Add new access path frame */
++-			frame = frames + 1;
++-			frame->at = at = at - entries + entries2;
++-			frame->entries = entries = entries2;
++-			frame->bh = bh2;
++-			err = ext4_journal_get_write_access(handle,
++-							     frame->bh);
++-			if (err)
++-				goto journal_error;
+++		/* not well protected, require DX lock */
+++		ext4_htree_dx_need_lock(lck);
+++		at = frame > frames ? (frame - 1)->at : NULL;
+++
+++		/* NB: no risk of deadlock because it's just a try.
+++		 *
+++		 * NB: we check ld_count for twice, the first time before
+++		 * having DX lock, the second time after holding DX lock.
+++		 *
+++		 * NB: We never free blocks for directory so far, which
+++		 * means value returned by dx_get_count() should equal to
+++		 * ld->ld_count if nobody split any DE-block under @at,
+++		 * and ld->ld_at still points to valid dx_entry. */
+++		if ((ld->ld_count != dx_get_count(entries)) ||
+++		    !ext4_htree_dx_lock_try(lck, at) ||
+++		    (ld->ld_count != dx_get_count(entries))) {
+++			restart = 1;
+++			goto cleanup;
++ 		}
++-		err = ext4_handle_dirty_dx_node(handle, dir, frames[0].bh);
+++		/* OK, I've got DX lock and nothing changed */
+++		frame->at = ld->ld_at;
++ 		if (err) {
++ 			ext4_std_error(inode->i_sb, err);
++ 			goto cleanup;
++ 		}
++ 	}
++-	de = do_split(handle, dir, &bh, frame, &hinfo, &err);
+++	de = do_split(handle, dir, &bh, frames, frame, &hinfo, lck, &err);
++ 	if (!de)
++ 		goto cleanup;
+++
++ 	err = add_dirent_to_buf(handle, dentry, inode, de, bh);
++ 	goto cleanup;
++ 
++ journal_error:
++ 	ext4_std_error(dir->i_sb, err);
++ cleanup:
+++	ext4_htree_dx_unlock(lck);
+++	ext4_htree_de_unlock(lck);
++ 	brelse(bh);
++ 	dx_release(frames);
+++	/* @restart is true means htree-path has been changed, we need to
+++	 * repeat dx_probe() to find out valid htree-path */
+++	if (restart && err == 0)
+++		goto again;
++ 	return err;
++ }
++ 
++@@ -2279,7 +2674,7 @@ int ext4_generic_delete_entry(handle_t *
++ 					blocksize);
++ 			else
++ 				de->inode = 0;
++-			dir->i_version++;
+++			inode_inc_iversion(dir);
++ 			return 0;
++ 		}
++ 		i += ext4_rec_len_from_disk(de->rec_len, blocksize);
++@@ -2364,7 +2759,7 @@ EXPORT_SYMBOL(ext4_dec_count);
++ static int ext4_add_nondir(handle_t *handle,
++ 		struct dentry *dentry, struct inode *inode)
++ {
++-	int err = ext4_add_entry(handle, dentry, inode);
+++	int err = ext4_add_entry(handle, dentry, inode, NULL);
++ 	if (!err) {
++ 		ext4_mark_inode_dirty(handle, inode);
++ 		unlock_new_inode(inode);
++@@ -2670,7 +3065,7 @@ retry:
++ 		goto out_clear_inode;
++ 	err = ext4_mark_inode_dirty(handle, inode);
++ 	if (!err)
++-		err = ext4_add_entry(handle, dentry, inode);
+++		err = ext4_add_entry(handle, dentry, inode, NULL);
++ 	if (err) {
++ out_clear_inode:
++ 		clear_nlink(inode);
++@@ -2936,7 +3331,7 @@ static int ext4_rmdir(struct inode *dir,
++ 	dquot_initialize(dentry->d_inode);
++ 
++ 	retval = -ENOENT;
++-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+++	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
++ 	if (!bh)
++ 		goto end_rmdir;
++ 
++@@ -3003,7 +3398,7 @@ static int ext4_unlink(struct inode *dir
++ 	dquot_initialize(dentry->d_inode);
++ 
++ 	retval = -ENOENT;
++-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
+++	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
++ 	if (!bh)
++ 		goto end_unlink;
++ 
++@@ -3182,7 +3577,7 @@ retry:
++ 	ext4_inc_count(handle, inode);
++ 	ihold(inode);
++ 
++-	err = ext4_add_entry(handle, dentry, inode);
+++	err = ext4_add_entry(handle, dentry, inode, NULL);
++ 	if (!err) {
++ 		ext4_mark_inode_dirty(handle, inode);
++ 		/* this can happen only for tmpfile being
++@@ -3264,7 +3659,7 @@ static int ext4_rename(struct inode *old
++ 	if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
++ 		ext4_handle_sync(handle);
++ 
++-	old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de, NULL);
+++	old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de, NULL, NULL);
++ 	/*
++ 	 *  Check for inode number is _not_ due to possible IO errors.
++ 	 *  We might rmdir the source, keep it as pwd of some process
++@@ -3278,7 +3673,7 @@ static int ext4_rename(struct inode *old
++ 
++ 	new_inode = new_dentry->d_inode;
++ 	new_bh = ext4_find_entry(new_dir, &new_dentry->d_name,
++-				 &new_de, &new_inlined);
+++				 &new_de, &new_inlined, NULL);
++ 	if (new_bh) {
++ 		if (!new_inode) {
++ 			brelse(new_bh);
++@@ -3309,7 +3704,7 @@ static int ext4_rename(struct inode *old
++ 			goto end_rename;
++ 	}
++ 	if (!new_bh) {
++-		retval = ext4_add_entry(handle, new_dentry, old_inode);
+++		retval = ext4_add_entry(handle, new_dentry, old_inode, NULL);
++ 		if (retval)
++ 			goto end_rename;
++ 	} else {
++@@ -3361,7 +3756,7 @@ static int ext4_rename(struct inode *old
++ 		struct ext4_dir_entry_2 *old_de2;
++ 
++ 		old_bh2 = ext4_find_entry(old_dir, &old_dentry->d_name,
++-					  &old_de2, NULL);
+++					  &old_de2, NULL, NULL);
++ 		if (old_bh2) {
++ 			retval = ext4_delete_entry(handle, old_dir,
++ 						   old_de2, old_bh2);
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
++@@ -4091,7 +4091,7 @@ struct inode *ext4_iget(struct super_blo
++ 	if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT))
++ 		ei->i_file_acl |=
++ 			((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32;
++-	inode->i_size = ext4_isize(raw_inode);
+++	inode->i_size = ext4_isize(sb, raw_inode);
++ 	ei->i_disksize = inode->i_size;
++ #ifdef CONFIG_QUOTA
++ 	ei->i_reserved_quota = 0;
++@@ -4329,7 +4329,7 @@ static int ext4_do_update_inode(handle_t
++ 		raw_inode->i_file_acl_high =
++ 			cpu_to_le16(ei->i_file_acl >> 32);
++ 	raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl);
++-	if (ei->i_disksize != ext4_isize(raw_inode)) {
+++	if (ei->i_disksize != ext4_isize(inode->i_sb, raw_inode)) {
++ 		ext4_isize_set(raw_inode, ei->i_disksize);
++ 		need_datasync = 1;
++ 	}
++Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/Makefile
++===================================================================
++--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/Makefile
+++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/Makefile
++@@ -8,7 +8,7 @@ ext4-y	:= balloc.o bitmap.o dir.o file.o
++ 		ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
++ 		ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o \
++ 		mmp.o indirect.o extents_status.o xattr.o xattr_user.o \
++-		xattr_trusted.o inline.o
+++		xattr_trusted.o inline.o htree_lock.o
++ 
++ ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
++ ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o
+diff --git a/ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series b/ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series
+new file mode 100644
+index 0000000..5d0d7b0
+--- /dev/null
++++ b/ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series
+@@ -0,0 +1,22 @@
++fc19/ext4-inode-version.patch
++fc19/ext4-lookup-dotdot.patch
++rhel6.3/ext4-print-inum-in-htree-warning.patch
++fc19/ext4-prealloc.patch
++fc19/ext4-mballoc-extra-checks.patch
++fc19/ext4-misc.patch
++fc19/ext4-force_over_128tb.patch
++fc19/ext4-pdir-fix.patch
++fc19/ext4-osd-iop-common.patch
++fc19/ext4-osd-iam-exports.patch
++rhel6.3/ext4-hash-indexed-dir-dotdot-update.patch
++fc19/ext4-kill-dx_root.patch
++fc19/ext4-fiemap.patch
++fc19/ext4-mballoc-pa_free-mismatch.patch
++fc19/ext4_data_in_dirent.patch
++fc19/ext4-large-eas.patch
++fc19/ext4-disable-mb-cache.patch
++fc19/ext4-nocmtime.patch
++fc19/ext4_pdirop.patch
++rhel6.3/ext4-not-discard-preallocation-umount.patch
++fc19/ext4-change-entry-avoid-conflict.patch
++fc19/ext4-max-dir-size.patch
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
deleted file mode 100644
index 0ed0061..0000000
--- a/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ /dev/null
@@ -1,117 +0,0 @@
-From 8eb9c28b3ac9bcc05f00259301c9bd92e8451a55 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Wed, 15 May 2013 09:18:19 -0400
-Subject: [PATCH 3/4] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
-
-In 3.9 hlist_for_each_entry use 3 args since commit
-
-commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
-Author: Sasha Levin <sasha.levin@oracle.com>
-Date:   Wed Feb 27 17:06:00 2013 -0800
-
-    hlist: drop the node parameter from iterators
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I8f38d562607de21771b03575e37cc0498867a570
----
- libcfs/include/libcfs/list.h           | 10 ++++++++++
- lustre/autoconf/lustre-core.m4         | 27 +++++++++++++++++++++++++++
- lustre/include/linux/lustre_compat25.h |  5 +++++
- 3 files changed, 42 insertions(+)
-
-diff --git a/libcfs/include/libcfs/list.h b/libcfs/include/libcfs/list.h
-index be06e74..b747804 100644
---- a/libcfs/include/libcfs/list.h
-+++ b/libcfs/include/libcfs/list.h
-@@ -91,14 +91,24 @@ typedef struct hlist_node cfs_hlist_node_t;
- #define cfs_hlist_for_each(pos, head)      hlist_for_each(pos, head)
- #define cfs_hlist_for_each_safe(pos, n, head) \
-         hlist_for_each_safe(pos, n, head)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define cfs_hlist_for_each_entry(tpos, pos, head, member) \
-+	pos = NULL; hlist_for_each_entry(tpos, head, member)
-+#else
- #define cfs_hlist_for_each_entry(tpos, pos, head, member) \
-         hlist_for_each_entry(tpos, pos, head, member)
-+#endif
- #define cfs_hlist_for_each_entry_continue(tpos, pos, member) \
-         hlist_for_each_entry_continue(tpos, pos, member)
- #define cfs_hlist_for_each_entry_from(tpos, pos, member) \
-         hlist_for_each_entry_from(tpos, pos, member)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
-+	pos = NULL; hlist_for_each_entry_safe(tpos, n, head, member)
-+#else
- #define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
-         hlist_for_each_entry_safe(tpos, pos, n, head, member)
-+#endif
- 
- #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
- #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 9ac1194..2cb4edd 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1604,6 +1604,29 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.9 uses hlist_for_each_entry with 3 args
-+# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
-+#
-+AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
-+[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/list.h>
-+	#include <linux/fs.h>
-+],[
-+	struct inode *inode;
-+	struct dentry *dentry;
-+	hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
-+		continue;
-+	}
-+],[
-+	AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -1740,6 +1763,10 @@ AC_DEFUN([LC_PROG_LINUX],
- 
- 	 # 3.7
-  	 LC_HAVE_POSIXACL_USER_NS
-+
-+	 # 3.9
-+	 LC_HAVE_HLIST_FOR_EACH_3ARG
-+
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index 4e29e69..efb3fd1 100644
---- a/lustre/include/linux/lustre_compat25.h
-+++ b/lustre/include/linux/lustre_compat25.h
-@@ -421,8 +421,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
- #define ll_d_hlist_empty(list) hlist_empty(list)
- #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
- #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-+	p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
-+#else
- #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-         hlist_for_each_entry(dentry, p, i_dentry, alias)
-+#endif
- #else
- #define ll_d_hlist_node list_head
- #define ll_d_hlist_empty(list) list_empty(list)
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
new file mode 100644
index 0000000..72698fc
--- /dev/null
+++ b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
@@ -0,0 +1,132 @@
+From 18cfd561fae3b2eac663b51f8e5147b59c711af7 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Wed, 11 Dec 2013 10:29:41 -0500
+Subject: [PATCH 3/5] LU-3974 llite: dentry d_compare changes in 3.11
+
+In the linux 3.11 kernel the d_compare function has
+removed passing in any struct inode arguments. This
+patch provides support to handle this case.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I363057e4d0a119ad43a9907ec26e7e0079f7c305
+---
+ lustre/autoconf/lustre-core.m4 | 19 +++++++++++++++++++
+ lustre/llite/dcache.c          | 27 +++++++++++----------------
+ lustre/llite/llite_internal.h  |  7 -------
+ 3 files changed, 30 insertions(+), 23 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index f47bc5f..7f9bb45 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1287,6 +1287,24 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.11 dentry_operations.d_compare() taken 5 arguments.
++#
++AC_DEFUN([LC_D_COMPARE_5ARGS],
++[AC_MSG_CHECKING([if d_compare taken 5 arguments])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/dcache.h>
++],[
++	((struct dentry_operations*)0)->d_compare(NULL,NULL,0,NULL,NULL);
++],[
++	AC_DEFINE(HAVE_D_COMPARE_5ARGS, 1,
++		[d_compare need 5 arguments])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # 3.11 need to access d_count to get dentry reference count
+ #
+ AC_DEFUN([LC_HAVE_DCOUNT],
+@@ -1405,6 +1423,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_BLKDEV_RELEASE_RETURN_INT
+ 
+ 	 # 3.11
++	 LC_D_COMPARE_5ARGS
+ 	 LC_HAVE_DCOUNT
+ 
+ 	 #
+diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c
+index 6fca4cb..8a8c100 100644
+--- a/lustre/llite/dcache.c
++++ b/lustre/llite/dcache.c
+@@ -89,11 +89,19 @@ static void ll_release(struct dentry *de)
+ int ll_dcompare(const struct dentry *parent, const struct inode *pinode,
+ 		const struct dentry *dentry, const struct inode *inode,
+ 		unsigned int len, const char *str, const struct qstr *name)
++#elif defined(HAVE_D_COMPARE_5ARGS)
++int ll_dcompare(const struct dentry *parent, const struct dentry *dentry,
++		unsigned int len, const char *str, const struct qstr *name)
+ #else
+ int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name)
+ #endif
+ {
+-#ifdef HAVE_D_COMPARE_7ARGS
++#if !defined(HAVE_D_COMPARE_7ARGS) && !defined(HAVE_D_COMPARE_5ARGS)
++	/* XXX: (ugh !) d_name must be in-dentry structure */
++	struct dentry *dentry = container_of(d_name, struct dentry, d_name);
++	unsigned int len = d_name->len;
++	const char *str = d_name->name;
++#endif
+ 	ENTRY;
+ 
+ 	if (len != name->len)
+@@ -101,19 +109,6 @@ int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name)
+ 
+ 	if (memcmp(str, name->name, len))
+ 		RETURN(1);
+-#else
+-	struct dentry *dentry;
+-	ENTRY;
+-
+-	if (d_name->len != name->len)
+-		RETURN(1);
+-
+-	if (memcmp(d_name->name, name->name, name->len))
+-		RETURN(1);
+-
+-	/* XXX: d_name must be in-dentry structure */
+-	dentry = container_of(d_name, struct dentry, d_name); /* ugh */
+-#endif
+ 
+ 	CDEBUG(D_DENTRY, "found name %.*s(%p) flags %#x refc %d\n",
+ 	       name->len, name->name, dentry, dentry->d_flags,
+@@ -124,9 +119,9 @@ int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name)
+ 		RETURN(0);
+ 
+ 	if (d_lustre_invalid(dentry))
+-                RETURN(1);
++		RETURN(1);
+ 
+-        RETURN(0);
++	RETURN(0);
+ }
+ 
+ static inline int return_if_equal(struct ldlm_lock *lock, void *data)
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index daeac51..9da81ca 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -857,13 +857,6 @@ void ll_intent_release(struct lookup_intent *);
+ void ll_invalidate_aliases(struct inode *);
+ void ll_frob_intent(struct lookup_intent **itp, struct lookup_intent *deft);
+ void ll_lookup_finish_locks(struct lookup_intent *it, struct dentry *dentry);
+-#ifdef HAVE_D_COMPARE_7ARGS
+-int ll_dcompare(const struct dentry *parent, const struct inode *pinode,
+-		const struct dentry *dentry, const struct inode *inode,
+-		unsigned int len, const char *str, const struct qstr *d_name);
+-#else
+-int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name);
+-#endif
+ int ll_revalidate_it_finish(struct ptlrpc_request *request,
+                             struct lookup_intent *it, struct dentry *de);
+ 
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
deleted file mode 100644
index 2dd2223..0000000
--- a/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 58a8bf674096caabc6edc0c598f16a0b04c05ebf Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 4/4] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
-
-In linux 3.9 f_vfsmnt was killed and replaced
-
-commit 182be684784334598eee1d90274e7f7aa0063616
-Author: Al Viro <viro@zeniv.linux.org.uk>
-Date:   Thu Jan 24 02:21:54 2013 -0500
-
-    kill f_vfsmnt
-
-    very few users left...
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
----
- lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
- lustre/llite/dir.c             |  4 ++++
- 2 files changed, 27 insertions(+)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 2cb4edd..ba69c41 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1627,6 +1627,28 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.9 killed f_vfsmnt by
-+# 182be684784334598eee1d90274e7f7aa0063616
-+# replacement is f_path.mnt
-+#
-+AC_DEFUN([LC_HAVE_F_PATH_MNT],
-+[AC_MSG_CHECKING([if struct file has f_path.mnt])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct file *fp = NULL;
-+	struct path  path;
-+
-+	path.mnt = fp->f_path.mnt;
-+],[
-+	AC_DEFINE(HAVE_F_PATH_MNT,1,[yes])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -1766,6 +1788,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 
- 	 # 3.9
- 	 LC_HAVE_HLIST_FOR_EACH_3ARG
-+	 LC_HAVE_F_PATH_MNT
- 
- 	 #
- 	 if test x$enable_server = xyes ; then
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index dd7f7df..e625200 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -629,7 +629,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
-         }
- 	filp->f_version = inode->i_version;
- #ifdef HAVE_TOUCH_ATIME_1ARG
-+#ifdef HAVE_F_PATH_MNT
-+	path.mnt = filp->f_path.mnt;
-+#else
- 	path.mnt = filp->f_vfsmnt;
-+#endif
- 	path.dentry = filp->f_dentry;
- 	touch_atime(&path);
- #else
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
new file mode 100644
index 0000000..b9714df
--- /dev/null
+++ b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
@@ -0,0 +1,276 @@
+From 82f692de87cb6c7db8f050b3201d23f4852a404c Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Mon, 2 Dec 2013 12:05:14 -0500
+Subject: [PATCH 4/5] LU-3974 llite: use new struct dir_context
+
+The readdir and nfs code over time has added more
+parameters to be passed to be processed. For the 3.11
+kernel a new struct dir_context was introduced to
+minimize the impact of future expansion. This patch
+addresses this change.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Ib42bf8cb06635a2a64e63b294d79e66ac82a1a5b
+---
+ lustre/autoconf/lustre-core.m4 | 20 ++++++++++
+ lustre/llite/dir.c             | 86 +++++++++++++++++++++++++++++-------------
+ lustre/llite/llite_internal.h  |  7 ++++
+ lustre/llite/llite_nfs.c       | 33 ++++++++++------
+ 4 files changed, 107 insertions(+), 39 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 7f9bb45..3ac55d6 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1287,6 +1287,25 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.11 readdir now takes the new struct dir_context
++#
++AC_DEFUN([LC_HAVE_DIR_CONTEXT],
++[AC_MSG_CHECKING([if dir_context exist])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct dir_context ctx;
++
++	ctx.pos = 0;
++],[
++	AC_DEFINE(HAVE_DIR_CONTEXT, 1, [dir_context exist])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # 3.11 dentry_operations.d_compare() taken 5 arguments.
+ #
+ AC_DEFUN([LC_D_COMPARE_5ARGS],
+@@ -1423,6 +1442,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_BLKDEV_RELEASE_RETURN_INT
+ 
+ 	 # 3.11
++	 LC_HAVE_DIR_CONTEXT
+ 	 LC_D_COMPARE_5ARGS
+ 	 LC_HAVE_DCOUNT
+ 
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index 2021897..e2546cc 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -477,19 +477,25 @@ fail:
+         goto out_unlock;
+ }
+ 
++#ifdef HAVE_DIR_CONTEXT
++int ll_dir_read(struct inode *inode, struct dir_context *ctx)
++{
++	__u64			pos	= ctx->pos;
++#else
+ int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
+ 		filldir_t filldir)
+ {
+-        struct ll_inode_info *info       = ll_i2info(inode);
+-        struct ll_sb_info    *sbi        = ll_i2sbi(inode);
+-	__u64                 pos        = *_pos;
+-        int                   api32      = ll_need_32bit_api(sbi);
+-        int                   hash64     = sbi->ll_flags & LL_SBI_64BIT_HASH;
+-        struct page          *page;
+-        struct ll_dir_chain   chain;
+-	int                   done = 0;
+-	int                   rc = 0;
+-        ENTRY;
++	__u64			pos	= *_pos;
++#endif
++	struct ll_inode_info	*info	= ll_i2info(inode);
++	struct ll_sb_info	*sbi	= ll_i2sbi(inode);
++	int			api32	= ll_need_32bit_api(sbi);
++	int			hash64	= sbi->ll_flags & LL_SBI_64BIT_HASH;
++	struct page		*page;
++	struct ll_dir_chain	chain;
++	int			done = 0;
++	int			rc = 0;
++	ENTRY;
+ 
+         ll_dir_chain_init(&chain);
+ 
+@@ -542,12 +548,18 @@ int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
+                                 fid_le_to_cpu(&fid, &ent->lde_fid);
+                                 ino = cl_fid_build_ino(&fid, api32);
+                                 type = ll_dirent_type_get(ent);
+-                                /* For 'll_nfs_get_name_filldir()', it will try
+-                                 * to access the 'ent' through its 'lde_name',
+-                                 * so the parameter 'name' for 'filldir()' must
+-                                 * be part of the 'ent'. */
+-                                done = filldir(cookie, ent->lde_name, namelen,
+-                                               lhash, ino, type);
++#ifdef HAVE_DIR_CONTEXT
++				ctx->pos = lhash;
++				/* For 'll_nfs_get_name_filldir()', it will try
++				 * to access the 'ent' through its 'lde_name',
++				 * so the parameter 'name' for 'filldir()' must
++				 * be part of the 'ent'. */
++				done = !dir_emit(ctx, ent->lde_name,
++							namelen, ino, type);
++#else
++				done = filldir(cookie, ent->lde_name, namelen,
++						lhash, ino, type);
++#endif
+                         }
+                         next = le64_to_cpu(dp->ldp_hash_end);
+                         if (!done) {
+@@ -588,12 +600,20 @@ int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
+                 }
+         }
+ 
++#ifdef HAVE_DIR_CONTEXT
++	ctx->pos = pos;
++#else
+ 	*_pos = pos;
++#endif
+ 	ll_dir_chain_fini(&chain);
+ 	RETURN(rc);
+ }
+ 
++#ifdef HAVE_DIR_CONTEXT
++static int ll_iterate(struct file *filp, struct dir_context *ctx)
++#else
+ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
++#endif
+ {
+ 	struct inode		*inode	= filp->f_dentry->d_inode;
+ 	struct ll_file_data	*lfd	= LUSTRE_FPRIVATE(filp);
+@@ -622,20 +642,28 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+ 		 */
+ 		GOTO(out, rc = 0);
+ 
++#ifdef HAVE_DIR_CONTEXT
++	ctx->pos = pos;
++	rc = ll_dir_read(inode, ctx);
++	pos = ctx->pos;
++#else
+ 	rc = ll_dir_read(inode, &pos, cookie, filldir);
++#endif
+ 	if (lfd != NULL)
+ 		lfd->lfd_pos = pos;
+-        if (pos == MDS_DIR_END_OFF) {
+-                if (api32)
+-                        filp->f_pos = LL_DIR_END_OFF_32BIT;
+-                else
+-                        filp->f_pos = LL_DIR_END_OFF;
+-        } else {
+-                if (api32 && hash64)
+-                        filp->f_pos = pos >> 32;
+-                else
+-                        filp->f_pos = pos;
++	if (pos == MDS_DIR_END_OFF) {
++		if (api32)
++			pos = LL_DIR_END_OFF_32BIT;
++		else
++			pos = LL_DIR_END_OFF;
++	} else if (api32 && hash64) {
++		pos >>= 32;
+         }
++#ifdef HAVE_DIR_CONTEXT
++	ctx->pos = pos;
++#else
++	filp->f_pos = pos;
++#endif
+ 	filp->f_version = inode->i_version;
+ #ifdef HAVE_TOUCH_ATIME_1ARG
+ #ifdef HAVE_F_PATH_MNT
+@@ -2020,7 +2048,11 @@ struct file_operations ll_dir_operations = {
+         .open     = ll_dir_open,
+         .release  = ll_dir_release,
+         .read     = generic_read_dir,
+-        .readdir  = ll_readdir,
++#ifdef HAVE_DIR_CONTEXT
++	.iterate	= ll_iterate,
++#else
++	.readdir	= ll_readdir,
++#endif
+         .unlocked_ioctl   = ll_dir_ioctl,
+         .fsync    = ll_fsync,
+ };
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index 9da81ca..283e106 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -91,6 +91,9 @@ extern struct file_operations ll_pgcache_seq_fops;
+ #define REMOTE_PERM_HASHSIZE 16
+ 
+ struct ll_getname_data {
++#ifdef HAVE_DIR_CONTEXT
++	struct dir_context	ctx;
++#endif
+         char            *lgd_name;      /* points to a buffer with NAME_MAX+1 size */
+         struct lu_fid    lgd_fid;       /* target fid we are looking for */
+         int              lgd_found;     /* inode matched? */
+@@ -722,8 +725,12 @@ extern struct file_operations ll_dir_operations;
+ extern struct inode_operations ll_dir_inode_operations;
+ struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
+                              struct ll_dir_chain *chain);
++#ifdef HAVE_DIR_CONTEXT
++int ll_dir_read(struct inode *inode, struct dir_context *ctx);
++#else
+ int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
+ 		filldir_t filldir);
++#endif
+ 
+ int ll_get_mdt_idx(struct inode *inode);
+ /* llite/namei.c */
+diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
+index 2926caf..25b16e8 100644
+--- a/lustre/llite/llite_nfs.c
++++ b/lustre/llite/llite_nfs.c
+@@ -235,24 +235,33 @@ static int ll_nfs_get_name_filldir(void *cookie, const char *name, int namelen,
+ static int ll_get_name(struct dentry *dentry, char *name,
+                        struct dentry *child)
+ {
+-        struct inode *dir = dentry->d_inode;
+-        struct ll_getname_data lgd;
++	struct inode *dir = dentry->d_inode;
++	struct ll_getname_data lgd = {
++		.lgd_name = name,
++		.lgd_fid = ll_i2info(child->d_inode)->lli_fid,
++#ifdef HAVE_DIR_CONTEXT
++		.ctx.actor = ll_nfs_get_name_filldir,
++	};
++#else
++		.lgd_found = 0,
++	};
+ 	__u64 offset = 0;
+-        int rc;
+-        ENTRY;
+-
+-        if (!dir || !S_ISDIR(dir->i_mode))
+-                GOTO(out, rc = -ENOTDIR);
++#endif
++	int rc;
++	ENTRY;
+ 
+-        if (!dir->i_fop)
+-                GOTO(out, rc = -EINVAL);
++	if (!dir || !S_ISDIR(dir->i_mode))
++		GOTO(out, rc = -ENOTDIR);
+ 
+-        lgd.lgd_name = name;
+-        lgd.lgd_fid = ll_i2info(child->d_inode)->lli_fid;
+-        lgd.lgd_found = 0;
++	if (!dir->i_fop)
++		GOTO(out, rc = -EINVAL);
+ 
+ 	mutex_lock(&dir->i_mutex);
++#ifdef HAVE_DIR_CONTEXT
++	rc = ll_dir_read(dir, &lgd.ctx);
++#else
+ 	rc = ll_dir_read(dir, &offset, &lgd, ll_nfs_get_name_filldir);
++#endif
+ 	mutex_unlock(&dir->i_mutex);
+         if (!rc && !lgd.lgd_found)
+                 rc = -ENOENT;
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
new file mode 100644
index 0000000..4e13bfe
--- /dev/null
+++ b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
@@ -0,0 +1,134 @@
+From 2725bc0f3bc5fa7706b9a475ccb0c191f21ca884 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 24 Sep 2013 12:29:47 -0400
+Subject: [PATCH 5/5] LU-3974 llite: invalidatepage api changed
+
+Until recently invalidating pages from the buffer cache
+was dependent only on the page passed in and the start
+in the page to invalidate. Starting with the 3.11 kernel
+you can also specify the length of the data in the page
+to invalidate. This patch enables us to handle the new
+case.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Iedf458b20b2604bc3099d5ae38bf0ad07df83bd3
+---
+ lustre/autoconf/lustre-core.m4                 | 20 ++++++++++++++++++++
+ lustre/include/linux/lustre_patchless_compat.h | 19 +++++++++++--------
+ lustre/llite/rw26.c                            | 24 +++++++++++++++++-------
+ 3 files changed, 48 insertions(+), 15 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 3ac55d6..ab94acd 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1287,6 +1287,25 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.11 invalidatepage requires the length of the range to invalidate
++#
++AC_DEFUN([LC_INVALIDATE_RANGE],
++[AC_MSG_CHECKING([if address_space_operations.invalidatepage requires 3 arguments])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct address_space_operations a_ops;
++
++	a_ops.invalidatepage(NULL,0,0);
++],[
++	AC_DEFINE(HAVE_INVALIDATE_RANGE, 1, [address_space_operations.invalidatepage needs 3 arguments])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # 3.11 readdir now takes the new struct dir_context
+ #
+ AC_DEFUN([LC_HAVE_DIR_CONTEXT],
+@@ -1442,6 +1461,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_BLKDEV_RELEASE_RETURN_INT
+ 
+ 	 # 3.11
++	 LC_INVALIDATE_RANGE
+ 	 LC_HAVE_DIR_CONTEXT
+ 	 LC_D_COMPARE_5ARGS
+ 	 LC_HAVE_DCOUNT
+diff --git a/lustre/include/linux/lustre_patchless_compat.h b/lustre/include/linux/lustre_patchless_compat.h
+index 747bd4d..5b7bab6 100644
+--- a/lustre/include/linux/lustre_patchless_compat.h
++++ b/lustre/include/linux/lustre_patchless_compat.h
+@@ -78,15 +78,18 @@ static inline void ll_delete_from_page_cache(struct page *page)
+ static inline void
+ truncate_complete_page(struct address_space *mapping, struct page *page)
+ {
+-        if (page->mapping != mapping)
+-                return;
++	if (page->mapping != mapping)
++		return;
+ 
+-        if (PagePrivate(page))
+-                page->mapping->a_ops->invalidatepage(page, 0);
+-
+-        cancel_dirty_page(page, PAGE_SIZE);
+-        ClearPageMappedToDisk(page);
+-        ll_delete_from_page_cache(page);
++	if (PagePrivate(page))
++#ifdef HAVE_INVALIDATE_RANGE
++		page->mapping->a_ops->invalidatepage(page, 0, PAGE_CACHE_SIZE);
++#else
++		page->mapping->a_ops->invalidatepage(page, 0);
++#endif
++	cancel_dirty_page(page, PAGE_SIZE);
++	ClearPageMappedToDisk(page);
++	ll_delete_from_page_cache(page);
+ }
+ #endif /* !HAVE_TRUNCATE_COMPLETE_PAGE */
+ 
+diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c
+index 9365c74..bee7996 100644
+--- a/lustre/llite/rw26.c
++++ b/lustre/llite/rw26.c
+@@ -76,7 +76,13 @@
+  * aligned truncate). Lustre leaves partially truncated page in the cache,
+  * relying on struct inode::i_size to limit further accesses.
+  */
+-static void ll_invalidatepage(struct page *vmpage, unsigned long offset)
++static void ll_invalidatepage(struct page *vmpage,
++#ifdef HAVE_INVALIDATE_RANGE
++				unsigned int offset, unsigned int length
++#else
++				unsigned long offset
++#endif
++			     )
+ {
+         struct inode     *inode;
+         struct lu_env    *env;
+@@ -88,12 +94,16 @@ static void ll_invalidatepage(struct page *vmpage, unsigned long offset)
+         LASSERT(PageLocked(vmpage));
+         LASSERT(!PageWriteback(vmpage));
+ 
+-        /*
+-         * It is safe to not check anything in invalidatepage/releasepage
+-         * below because they are run with page locked and all our io is
+-         * happening with locked page too
+-         */
+-        if (offset == 0) {
++	/*
++	 * It is safe to not check anything in invalidatepage/releasepage
++	 * below because they are run with page locked and all our io is
++	 * happening with locked page too
++	 */
++#ifdef HAVE_INVALIDATE_RANGE
++	if (offset == 0 && length == PAGE_CACHE_SIZE) {
++#else
++	if (offset == 0) {
++#endif
+                 env = cl_env_get(&refcheck);
+                 if (!IS_ERR(env)) {
+                         inode = vmpage->mapping->host;
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index cb217db..09173cd 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -34,9 +34,10 @@ DEPEND="${RDEPEND}
 
 PATCHES=(
 	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
-	"${FILESDIR}/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch"
+	"${FILESDIR}/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch"
+	"${FILESDIR}/0004-LU-3974-llite-use-new-struct-dir_context.patch"
+	"${FILESDIR}/0005-LU-3974-llite-invalidatepage-api-changed.patch"
 )
 
 pkg_setup() {
@@ -64,19 +65,6 @@ src_prepare() {
 	eautomake
 	eautoconf
 	cd ..
-	einfo "Reconfiguring source in lustre-iokit"
-	cd lustre-iokit
-	eaclocal
-	eautomake
-	eautoconf
-	cd ..
-	einfo "Reconfiguring source in ldiskfs"
-	cd ldiskfs
-	eaclocal -I config
-	eautoheader
-	eautomake -W no-portability
-	eautoconf
-	cd ..
 }
 
 src_configure() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2016-06-29 10:28 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2016-06-29 10:28 UTC (permalink / raw
  To: gentoo-commits

commit:     4aaa26bb549388f3d1ef568a1f0b7bcfadf93536
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 29 10:28:22 2016 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Jun 29 10:28:22 2016 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=4aaa26bb

sys-cluster/lustre: Add lustre 2.8.0

Client works with 4.1.x kernels (tested).
Also two init scripts added to load and start lnet
and load lustre modules

Package-Manager: portage-2.3.0_rc1

 ...8056-libcfs-Support-for-linux-4.2-kernels.patch |  80 -----
 ...56-o2iblnd-ib_query_device-removed-in-4.5.patch | 138 --------
 ...klnd-NETIF_F_ALL_CSUM-renamed-to-NETIF_F_.patch |  49 ---
 ...56-llite-use-inode_lock-to-access-i_mutex.patch | 354 ---------------------
 ...te-inode_operations-interface-changed-in-.patch | 165 ----------
 ...te-POSIX_ACL_XATTR_-ACCESS-DEFAULT-remove.patch |  53 ---
 ...op-fix-bio_for_each_segment_all-for-newer.patch |  64 ----
 .../files/0008-Fix-build-error-with-gcc-6.1.patch  |  31 --
 sys-cluster/lustre/files/lnet.initd                |  46 +++
 sys-cluster/lustre/files/lustre-client.initd       |  48 +++
 .../{lustre-2.8.54.ebuild => lustre-2.8.0.ebuild}  |  28 +-
 sys-cluster/lustre/lustre-9999.ebuild              |  21 +-
 12 files changed, 124 insertions(+), 953 deletions(-)

diff --git a/sys-cluster/lustre/files/0001-LU-8056-libcfs-Support-for-linux-4.2-kernels.patch b/sys-cluster/lustre/files/0001-LU-8056-libcfs-Support-for-linux-4.2-kernels.patch
deleted file mode 100644
index 4e07906..0000000
--- a/sys-cluster/lustre/files/0001-LU-8056-libcfs-Support-for-linux-4.2-kernels.patch
+++ /dev/null
@@ -1,80 +0,0 @@
-From 9b478d607922c9683663f8e317d93b840e528884 Mon Sep 17 00:00:00 2001
-From: Dmitry Eremin <dmitry.eremin@intel.com>
-Date: Thu, 5 May 2016 22:08:05 +0300
-Subject: [PATCH 1/8] LU-8056 libcfs: Support for linux 4.2 kernels
-
-In kernel version 4.2 commit df6b35f409af0a8ff1ef62f552b8402f3fef8665
-header file i387.h was renamed to fpu/api.h
-
-Change-Id: Id4f5f6e73f3c2aeac67b5c87b9c1d310a0a50a50
-Signed-off-by: Dmitry Eremin <dmitry.eremin@intel.com>
----
- libcfs/autoconf/lustre-libcfs.m4                 | 11 +++++++++++
- libcfs/libcfs/linux/linux-crypto-crc32c-pclmul.c |  4 ++++
- libcfs/libcfs/linux/linux-crypto-crc32pclmul.c   |  4 ++++
- 3 files changed, 19 insertions(+)
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 636d0ed..cc0e184 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -312,6 +312,16 @@ topology_sibling_cpumask, [
- ]) # LIBCFS_HAVE_TOPOLOGY_SIBLING_CPUMASK
- 
- #
-+# Kernel version 4.2 commit df6b35f409af0a8ff1ef62f552b8402f3fef8665
-+# header file i387.h was renamed to fpu/api.h
-+#
-+AC_DEFUN([LIBCFS_FPU_API], [
-+LB_CHECK_LINUX_HEADER([asm/fpu/api.h], [
-+	AC_DEFINE(HAVE_FPU_API_HEADER, 1,
-+		[fpu/api.h is present])])
-+]) # LIBCFS_FPU_API
-+
-+#
- # LIBCFS_PROG_LINUX
- #
- # LibCFS linux kernel checks
-@@ -350,6 +360,7 @@ LIBCFS_SHRINKER_COUNT
- LIBCFS_HLIST_ADD_AFTER
- # 4.2
- LIBCFS_HAVE_TOPOLOGY_SIBLING_CPUMASK
-+LIBCFS_FPU_API
- ]) # LIBCFS_PROG_LINUX
- 
- #
-diff --git a/libcfs/libcfs/linux/linux-crypto-crc32c-pclmul.c b/libcfs/libcfs/linux/linux-crypto-crc32c-pclmul.c
-index 9858db4..fc55ad7 100644
---- a/libcfs/libcfs/linux/linux-crypto-crc32c-pclmul.c
-+++ b/libcfs/libcfs/linux/linux-crypto-crc32c-pclmul.c
-@@ -30,7 +30,11 @@
- #include <crypto/internal/hash.h>
- #include <linux/crc32.h>
- #include <asm/cpufeature.h>
-+#ifdef HAVE_FPU_API_HEADER
-+#include <asm/fpu/api.h>
-+#else
- #include <asm/i387.h>
-+#endif
- #include <libcfs/libcfs.h>
- 
- #define CHKSUM_BLOCK_SIZE	1
-diff --git a/libcfs/libcfs/linux/linux-crypto-crc32pclmul.c b/libcfs/libcfs/linux/linux-crypto-crc32pclmul.c
-index 1a609bf..0b3abaf 100644
---- a/libcfs/libcfs/linux/linux-crypto-crc32pclmul.c
-+++ b/libcfs/libcfs/linux/linux-crypto-crc32pclmul.c
-@@ -32,7 +32,11 @@
- #include <crypto/internal/hash.h>
- #include <linux/crc32.h>
- #include <asm/cpufeature.h>
-+#ifdef HAVE_FPU_API_HEADER
-+#include <asm/fpu/api.h>
-+#else
- #include <asm/i387.h>
-+#endif
- #include <libcfs/libcfs.h>
- 
- #define CHKSUM_BLOCK_SIZE	1
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0002-LU-8056-o2iblnd-ib_query_device-removed-in-4.5.patch b/sys-cluster/lustre/files/0002-LU-8056-o2iblnd-ib_query_device-removed-in-4.5.patch
deleted file mode 100644
index 5c0fcf9..0000000
--- a/sys-cluster/lustre/files/0002-LU-8056-o2iblnd-ib_query_device-removed-in-4.5.patch
+++ /dev/null
@@ -1,138 +0,0 @@
-From 0242d060692573dcb6f09750a62db1fa0f6d36df Mon Sep 17 00:00:00 2001
-From: Li Dongyang <dongyang.li@anu.edu.au>
-Date: Mon, 16 May 2016 17:18:39 +1000
-Subject: [PATCH 2/8] LU-8056 o2iblnd: ib_query_device removed in 4.5
-
-We should use the cached attributes in ib_device instead of
-calling ib_query_device since kernel 4.5
-
-Linux-commit:182a2da0c768a9ec64abb0d6009667057f1c06af
-Linux-commit:cebfe5ca038e2a0f677b41e9682501708ffa2ff3
-
-Signed-off-by: Li Dongyang <dongyang.li@anu.edu.au>
-Change-Id: Ie2ab681a3b508f0a1f89d3ff86bf2713b7257e62
----
- lnet/autoconf/lustre-lnet.m4 | 22 ++++++++++++++++++++++
- lnet/klnds/o2iblnd/o2iblnd.c | 20 ++++++++++++++++++--
- 2 files changed, 40 insertions(+), 2 deletions(-)
-
-diff --git a/lnet/autoconf/lustre-lnet.m4 b/lnet/autoconf/lustre-lnet.m4
-index 05b47db..30ad208 100644
---- a/lnet/autoconf/lustre-lnet.m4
-+++ b/lnet/autoconf/lustre-lnet.m4
-@@ -460,6 +460,28 @@ AS_IF([test $ENABLEO2IB != "no"], [
- 		AC_DEFINE(HAVE_IB_MAP_MR_SG, 1,
- 			[ib_map_mr_sg exists])
- 	])
-+
-+	# ib_query_device() removed in 4.5
-+	LB_CHECK_COMPILE([if 'struct ib_device' has member 'attrs'],
-+	ib_device.attrs, [
-+		#ifdef HAVE_COMPAT_RDMA
-+		#undef PACKAGE_NAME
-+		#undef PACKAGE_TARNAME
-+		#undef PACKAGE_VERSION
-+		#undef PACKAGE_STRING
-+		#undef PACKAGE_BUGREPORT
-+		#undef PACKAGE_URL
-+		#include <linux/compat-2.6.h>
-+		#endif
-+		#include <rdma/ib_verbs.h>
-+	],[
-+		struct ib_device dev;
-+		struct ib_device_attr dev_attr = {};
-+		dev.attrs = dev_attr;
-+	],[
-+		AC_DEFINE(HAVE_IB_DEVICE_ATTRS, 1,
-+			[struct ib_device.attrs is defined])
-+	])
- ]) # ENABLEO2IB != "no"
- ]) # LN_CONFIG_O2IB
- 
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c
-index 92254b8..b174799 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd.c
-@@ -1579,9 +1579,11 @@ kiblnd_create_fmr_pool(kib_fmr_poolset_t *fps, kib_fmr_pool_t **pp_fpo)
- 	kib_fmr_pool_t *fpo;
- 	int rc;
- 
-+#ifndef HAVE_IB_DEVICE_ATTRS
- 	dev_attr = kmalloc(sizeof(*dev_attr), GFP_KERNEL);
- 	if (!dev_attr)
- 		return -ENOMEM;
-+#endif
- 
- 	LIBCFS_CPT_ALLOC(fpo, lnet_cpt_table(), fps->fps_cpt, sizeof(*fpo));
- 	if (!fpo) {
-@@ -1591,12 +1593,16 @@ kiblnd_create_fmr_pool(kib_fmr_poolset_t *fps, kib_fmr_pool_t **pp_fpo)
- 
- 	fpo->fpo_hdev = kiblnd_current_hdev(dev);
- 
-+#ifdef HAVE_IB_DEVICE_ATTRS
-+	dev_attr = &fpo->fpo_hdev->ibh_ibdev->attrs;
-+#else
- 	rc = ib_query_device(fpo->fpo_hdev->ibh_ibdev, dev_attr);
- 	if (rc) {
- 		CERROR("Query device failed for %s: %d\n",
- 			fpo->fpo_hdev->ibh_ibdev->name, rc);
- 		goto out_dev_attr;
- 	}
-+#endif
- 
- 	/* Check for FMR or FastReg support */
- 	fpo->fpo_is_fmr = 0;
-@@ -1621,7 +1627,9 @@ kiblnd_create_fmr_pool(kib_fmr_poolset_t *fps, kib_fmr_pool_t **pp_fpo)
- 	if (rc)
- 		goto out_fpo;
- 
-+#ifndef HAVE_IB_DEVICE_ATTRS
- 	kfree(dev_attr);
-+#endif
- 	fpo->fpo_deadline = cfs_time_shift(IBLND_POOL_DEADLINE);
- 	fpo->fpo_owner    = fps;
- 	*pp_fpo = fpo;
-@@ -1633,7 +1641,9 @@ out_fpo:
- 	LIBCFS_FREE(fpo, sizeof(*fpo));
- 
- out_dev_attr:
-+#ifndef HAVE_IB_DEVICE_ATTRS
- 	kfree(dev_attr);
-+#endif
- 
- 	return rc;
- }
-@@ -2462,8 +2472,10 @@ kiblnd_net_init_pools(kib_net_t *net, lnet_ni_t *ni, __u32 *cpts, int ncpts)
- static int
- kiblnd_hdev_get_attr(kib_hca_dev_t *hdev)
- {
--        struct ib_device_attr *attr;
--        int                    rc;
-+#ifndef HAVE_IB_DEVICE_ATTRS
-+	struct ib_device_attr *attr;
-+	int                    rc;
-+#endif
- 
-         /* It's safe to assume a HCA can handle a page size
-          * matching that of the native system */
-@@ -2471,6 +2483,9 @@ kiblnd_hdev_get_attr(kib_hca_dev_t *hdev)
-         hdev->ibh_page_size  = 1 << PAGE_SHIFT;
-         hdev->ibh_page_mask  = ~((__u64)hdev->ibh_page_size - 1);
- 
-+#ifdef HAVE_IB_DEVICE_ATTRS
-+	hdev->ibh_mr_size = hdev->ibh_ibdev->attrs.max_mr_size;
-+#else
-         LIBCFS_ALLOC(attr, sizeof(*attr));
-         if (attr == NULL) {
-                 CERROR("Out of memory\n");
-@@ -2487,6 +2502,7 @@ kiblnd_hdev_get_attr(kib_hca_dev_t *hdev)
-                 CERROR("Failed to query IB device: %d\n", rc);
-                 return rc;
-         }
-+#endif
- 
-         if (hdev->ibh_mr_size == ~0ULL) {
-                 hdev->ibh_mr_shift = 64;
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0003-LU-8056-socklnd-NETIF_F_ALL_CSUM-renamed-to-NETIF_F_.patch b/sys-cluster/lustre/files/0003-LU-8056-socklnd-NETIF_F_ALL_CSUM-renamed-to-NETIF_F_.patch
deleted file mode 100644
index 6101219..0000000
--- a/sys-cluster/lustre/files/0003-LU-8056-socklnd-NETIF_F_ALL_CSUM-renamed-to-NETIF_F_.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From 6c3f19ba5b6db287980241e4d20be9ac5d0c1293 Mon Sep 17 00:00:00 2001
-From: Li Dongyang <dongyang.li@anu.edu.au>
-Date: Mon, 16 May 2016 17:27:23 +1000
-Subject: [PATCH 3/8] LU-8056 socklnd: NETIF_F_ALL_CSUM renamed to
- NETIF_F_CSUM_MASK
-
-In kernel 4.5 NETIF_F_CSUM_MASK got renamed to NETIF_F_CSUM_MASK.
-This patch handles the name change.
-
-Linux-commit:a188222b6ed29404ac2d4232d35d1fe0e77af370
-
-Signed-off-by: Li Dongyang <dongyang.li@anu.edu.au>
-Change-Id: Id57505eeca613303c584d3cf74284920a837bb43
----
- lnet/klnds/socklnd/socklnd.h     | 4 ++++
- lnet/klnds/socklnd/socklnd_lib.c | 2 +-
- 2 files changed, 5 insertions(+), 1 deletion(-)
-
-diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
-index f02003a..54794c0 100644
---- a/lnet/klnds/socklnd/socklnd.h
-+++ b/lnet/klnds/socklnd/socklnd.h
-@@ -66,6 +66,10 @@
- 	tcp_sendpage(sk, page, offset, size, flags)
- #endif /* HAVE_TCP_SENDPAGE_USE_SOCKET */
- 
-+#ifndef NETIF_F_CSUM_MASK
-+# define NETIF_F_CSUM_MASK NETIF_F_ALL_CSUM
-+#endif
-+
- /* assume one thread for each connection type */
- #define SOCKNAL_NSCHEDS		3
- #define SOCKNAL_NSCHEDS_HIGH	(SOCKNAL_NSCHEDS << 1)
-diff --git a/lnet/klnds/socklnd/socklnd_lib.c b/lnet/klnds/socklnd/socklnd_lib.c
-index 9dca0e4..e26db71 100644
---- a/lnet/klnds/socklnd/socklnd_lib.c
-+++ b/lnet/klnds/socklnd/socklnd_lib.c
-@@ -71,7 +71,7 @@ ksocknal_lib_zc_capable(ksock_conn_t *conn)
- 
- 	/* ZC if the socket supports scatter/gather and doesn't need software
- 	 * checksums */
--	return ((caps & NETIF_F_SG) != 0 && (caps & NETIF_F_ALL_CSUM) != 0);
-+	return ((caps & NETIF_F_SG) != 0 && (caps & NETIF_F_CSUM_MASK) != 0);
- }
- 
- int
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0004-LU-8056-llite-use-inode_lock-to-access-i_mutex.patch b/sys-cluster/lustre/files/0004-LU-8056-llite-use-inode_lock-to-access-i_mutex.patch
deleted file mode 100644
index 361061f..0000000
--- a/sys-cluster/lustre/files/0004-LU-8056-llite-use-inode_lock-to-access-i_mutex.patch
+++ /dev/null
@@ -1,354 +0,0 @@
-From ab0006e3a3bf5b0ff63f0914a9e7246dfa1729f8 Mon Sep 17 00:00:00 2001
-From: Li Dongyang <dongyang.li@anu.edu.au>
-Date: Mon, 16 May 2016 17:40:55 +1000
-Subject: [PATCH 4/8] LU-8056 llite: use inode_lock to access i_mutex
-
-Linux kernel 4.5 introduced wrappers for i_mutex as the type
-of i_mutex will be changed in the future.
-This patch prepares us for the upcoming type change. It also
-includes a patch from linux kernel removing unused declaration
-to make the room for the wrappers mentioned above.
-
-Note that this patch only touches the llite part. osd-ldiskfs still
-calls mutex_{lock,unlock} on i_mutex.
-
-Linux-commit:57b8f112cfe6622ddddb8c2641206bb5fa8a112d
-Linux-commit:5955102c9984fa081b2d570cfac75c97eecf8f3b
-
-Signed-off-by: Li Dongyang <dongyang.li@anu.edu.au>
-Change-Id: Ia4c30443cddfaa5232e1dc1519c33c97dba2a271
----
- lustre/autoconf/lustre-core.m4 | 20 ++++++++++++++++++++
- lustre/include/lustre_compat.h |  6 ++++++
- lustre/include/lvfs.h          |  4 ++--
- lustre/llite/dir.c             |  4 ++--
- lustre/llite/file.c            | 20 ++++++++++----------
- lustre/llite/llite_internal.h  |  2 --
- lustre/llite/llite_lib.c       |  8 ++++----
- lustre/llite/llite_nfs.c       |  4 ++--
- lustre/llite/lloop.c           |  4 ++--
- lustre/llite/rw26.c            |  4 ++--
- lustre/llite/vvp_io.c          |  4 ++--
- lustre/llite/vvp_page.c        |  4 ++--
- 12 files changed, 54 insertions(+), 30 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 0d5c599..5554490 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2087,6 +2087,23 @@ key_payload_data_array, [
- ]) #LC_HAVE_KEY_PAYLOAD_DATA_ARRAY
- 
- #
-+# LC_HAVE_INODE_LOCK
-+#
-+# 4.5 introduced inode_lock
-+#
-+AC_DEFUN([LC_HAVE_INODE_LOCK], [
-+LB_CHECK_COMPILE([if 'inode_lock' is defined],
-+inode_lock, [
-+	#include <linux/fs.h>
-+],[
-+	inode_lock(NULL);
-+], [
-+	AC_DEFINE(HAVE_INODE_LOCK, 1,
-+		  [inode_lock is defined])
-+])
-+]) # LC_HAVE_INODE_LOCK
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2259,6 +2276,9 @@ AC_DEFUN([LC_PROG_LINUX], [
- 	LC_HAVE_QC_MAKE_REQUEST_FN
- 	LC_HAVE_KEY_PAYLOAD_DATA_ARRAY
- 
-+	# 4.5
-+	LC_HAVE_INODE_LOCK
-+
- 	#
- 	AS_IF([test "x$enable_server" != xno], [
- 		LC_FUNC_DEV_SET_RDONLY
-diff --git a/lustre/include/lustre_compat.h b/lustre/include/lustre_compat.h
-index d777993..0d303f2 100644
---- a/lustre/include/lustre_compat.h
-+++ b/lustre/include/lustre_compat.h
-@@ -371,6 +371,12 @@ static inline struct dentry *d_make_root(struct inode *root)
- #define ll_vfs_unlink(a, b) vfs_unlink(a, b)
- #endif
- 
-+#ifndef HAVE_INODE_LOCK
-+# define inode_lock(inode) mutex_lock(&(inode)->i_mutex)
-+# define inode_unlock(inode) mutex_unlock(&(inode)->i_mutex)
-+# define inode_trylock(inode) mutex_trylock(&(inode)->i_mutex)
-+#endif
-+
- #ifndef HAVE_RADIX_EXCEPTION_ENTRY
- static inline int radix_tree_exceptional_entry(void *arg)
- {
-diff --git a/lustre/include/lvfs.h b/lustre/include/lvfs.h
-index be4187f..2bdee77 100644
---- a/lustre/include/lvfs.h
-+++ b/lustre/include/lvfs.h
-@@ -86,9 +86,9 @@ ll_lookup_one_len(const char *fid_name, struct dentry *dparent,
- {
- 	struct dentry *dchild;
- 
--	mutex_lock(&dparent->d_inode->i_mutex);
-+	inode_lock(dparent->d_inode);
- 	dchild = lookup_one_len(fid_name, dparent, fid_namelen);
--	mutex_unlock(&dparent->d_inode->i_mutex);
-+	inode_unlock(dparent->d_inode);
- 
- 	if (IS_ERR(dchild) || dchild->d_inode == NULL)
- 		return dchild;
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index ec71a19..1f6e02c 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -1733,7 +1733,7 @@ static loff_t ll_dir_seek(struct file *file, loff_t offset, int origin)
-         loff_t ret = -EINVAL;
-         ENTRY;
- 
--	mutex_lock(&inode->i_mutex);
-+	inode_lock(inode);
-         switch (origin) {
-                 case SEEK_SET:
-                         break;
-@@ -1771,7 +1771,7 @@ static loff_t ll_dir_seek(struct file *file, loff_t offset, int origin)
-         GOTO(out, ret);
- 
- out:
--	mutex_unlock(&inode->i_mutex);
-+	inode_unlock(inode);
-         return ret;
- }
- 
-diff --git a/lustre/llite/file.c b/lustre/llite/file.c
-index cfc01f4..f381d26 100644
---- a/lustre/llite/file.c
-+++ b/lustre/llite/file.c
-@@ -2162,13 +2162,13 @@ static int ll_hsm_import(struct inode *inode, struct file *file,
- 			 ATTR_MTIME | ATTR_MTIME_SET |
- 			 ATTR_ATIME | ATTR_ATIME_SET;
- 
--	mutex_lock(&inode->i_mutex);
-+	inode_lock(inode);
- 
- 	rc = ll_setattr_raw(file->f_path.dentry, attr, true);
- 	if (rc == -ENODATA)
- 		rc = 0;
- 
--	mutex_unlock(&inode->i_mutex);
-+	inode_unlock(inode);
- 
- out:
- 	if (hss != NULL)
-@@ -2215,9 +2215,9 @@ static int ll_file_futimes_3(struct file *file, const struct ll_futimes_3 *lfu)
- 	if (!S_ISREG(inode->i_mode))
- 		RETURN(-EINVAL);
- 
--	mutex_lock(&inode->i_mutex);
-+	inode_lock(inode);
- 	rc = ll_setattr_raw(file->f_path.dentry, &ia, false);
--	mutex_unlock(&inode->i_mutex);
-+	inode_unlock(inode);
- 
- 	RETURN(rc);
- }
-@@ -2715,9 +2715,9 @@ generic_file_llseek_size(struct file *file, loff_t offset, int origin,
- 		 * SEEK_CURs. Note that parallel writes and reads behave
- 		 * like SEEK_SET.
- 		 */
--		mutex_lock(&inode->i_mutex);
-+		inode_lock(inode);
- 		offset = llseek_execute(file, file->f_pos + offset, maxsize);
--		mutex_unlock(&inode->i_mutex);
-+		inode_unlock(inode);
- 		return offset;
- 	case SEEK_DATA:
- 		/*
-@@ -2875,7 +2875,7 @@ int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
- 
- #ifdef HAVE_FILE_FSYNC_4ARGS
- 	rc = filemap_write_and_wait_range(inode->i_mapping, start, end);
--	mutex_lock(&inode->i_mutex);
-+	inode_lock(inode);
- #else
- 	/* fsync's caller has already called _fdata{sync,write}, we want
- 	 * that IO to finish before calling the osc and mdc sync methods */
-@@ -2913,7 +2913,7 @@ int ll_fsync(struct file *file, struct dentry *dentry, int datasync)
- 	}
- 
- #ifdef HAVE_FILE_FSYNC_4ARGS
--	mutex_unlock(&inode->i_mutex);
-+	inode_unlock(inode);
- #endif
- 	RETURN(rc);
- }
-@@ -3146,7 +3146,7 @@ int ll_migrate(struct inode *parent, struct file *file, int mdtidx,
- 	if (child_inode == parent->i_sb->s_root->d_inode)
- 		GOTO(out_iput, rc = -EINVAL);
- 
--	mutex_lock(&child_inode->i_mutex);
-+	inode_lock(child_inode);
- 	op_data->op_fid3 = *ll_inode2fid(child_inode);
- 	if (!fid_is_sane(&op_data->op_fid3)) {
- 		CERROR("%s: migrate %s, but FID "DFID" is insane\n",
-@@ -3224,7 +3224,7 @@ out_close:
- 	if (rc == 0)
- 		clear_nlink(child_inode);
- out_unlock:
--	mutex_unlock(&child_inode->i_mutex);
-+	inode_unlock(child_inode);
- out_iput:
- 	iput(child_inode);
- out_free:
-diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 20956f4..9c9979e 100644
---- a/lustre/llite/llite_internal.h
-+++ b/lustre/llite/llite_internal.h
-@@ -693,8 +693,6 @@ struct ll_file_data {
- 	struct list_head fd_lccs; /* list of ll_cl_context */
- };
- 
--extern spinlock_t inode_lock;
--
- extern struct proc_dir_entry *proc_lustre_fs_root;
- 
- static inline struct inode *ll_info2i(struct ll_inode_info *lli)
-diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
-index c488fc2..9a8c69b 100644
---- a/lustre/llite/llite_lib.c
-+++ b/lustre/llite/llite_lib.c
-@@ -1545,10 +1545,10 @@ static int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data)
- 	 * cache is not cleared yet. */
- 	op_data->op_attr.ia_valid &= ~(TIMES_SET_FLAGS | ATTR_SIZE);
- 	if (S_ISREG(inode->i_mode))
--		mutex_lock(&inode->i_mutex);
-+		inode_lock(inode);
- 	rc = simple_setattr(dentry, &op_data->op_attr);
- 	if (S_ISREG(inode->i_mode))
--		mutex_unlock(&inode->i_mutex);
-+		inode_unlock(inode);
- 	op_data->op_attr.ia_valid = ia_valid;
- 
- 	rc = ll_update_inode(inode, &md);
-@@ -1637,7 +1637,7 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr, bool hsm_import)
- 	if (S_ISREG(inode->i_mode)) {
- 		if (attr->ia_valid & ATTR_SIZE)
- 			inode_dio_write_done(inode);
--		mutex_unlock(&inode->i_mutex);
-+		inode_unlock(inode);
- 	}
- 
- 	/* We always do an MDS RPC, even if we're only changing the size;
-@@ -1714,7 +1714,7 @@ out:
- 		ll_finish_md_op_data(op_data);
- 
- 	if (S_ISREG(inode->i_mode)) {
--		mutex_lock(&inode->i_mutex);
-+		inode_lock(inode);
- 		if ((attr->ia_valid & ATTR_SIZE) && !hsm_import)
- 			inode_dio_wait(inode);
- 	}
-diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
-index 9e19e78..bc238f5 100644
---- a/lustre/llite/llite_nfs.c
-+++ b/lustre/llite/llite_nfs.c
-@@ -247,13 +247,13 @@ static int ll_get_name(struct dentry *dentry, char *name,
- 		GOTO(out, rc = PTR_ERR(op_data));
- 
- 	op_data->op_max_pages = ll_i2sbi(dir)->ll_md_brw_pages;
--	mutex_lock(&dir->i_mutex);
-+	inode_lock(dir);
- #ifdef HAVE_DIR_CONTEXT
- 	rc = ll_dir_read(dir, &pos, op_data, &lgd.ctx);
- #else
- 	rc = ll_dir_read(dir, &pos, op_data, &lgd, ll_nfs_get_name_filldir);
- #endif
--	mutex_unlock(&dir->i_mutex);
-+	inode_unlock(dir);
- 	ll_finish_md_op_data(op_data);
- 	if (!rc && !lgd.lgd_found)
- 		rc = -ENOENT;
-diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
-index b8ae0b5..64318ca 100644
---- a/lustre/llite/lloop.c
-+++ b/lustre/llite/lloop.c
-@@ -277,9 +277,9 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
- 	 *    be asked to write less pages once, this purely depends on
- 	 *    implementation. Anyway, we should be careful to avoid deadlocking.
- 	 */
--	mutex_lock(&inode->i_mutex);
-+	inode_lock(inode);
- 	bytes = ll_direct_rw_pages(env, io, rw, inode, pvec);
--	mutex_unlock(&inode->i_mutex);
-+	inode_unlock(inode);
- 	cl_io_fini(env, io);
- 	return (bytes == pvec->ldp_size) ? 0 : (int)bytes;
- }
-diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c
-index d9482b2..3f02754 100644
---- a/lustre/llite/rw26.c
-+++ b/lustre/llite/rw26.c
-@@ -389,7 +389,7 @@ ll_direct_IO(
- 	 * 1. Need inode mutex to operate transient pages.
- 	 */
- 	if (iov_iter_rw(iter) == READ)
--		mutex_lock(&inode->i_mutex);
-+		inode_lock(inode);
- 
- 	while (iov_iter_count(iter)) {
- 		struct page **pages;
-@@ -440,7 +440,7 @@ ll_direct_IO(
- 	}
- out:
- 	if (iov_iter_rw(iter) == READ)
--		mutex_unlock(&inode->i_mutex);
-+		inode_unlock(inode);
- 
- 	if (tot_bytes > 0) {
- 		struct vvp_io *vio = vvp_env_io(env);
-diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index 8a81b83..a48a0b0 100644
---- a/lustre/llite/vvp_io.c
-+++ b/lustre/llite/vvp_io.c
-@@ -661,7 +661,7 @@ static int vvp_io_setattr_start(const struct lu_env *env,
- 	struct inode		*inode = vvp_object_inode(io->ci_obj);
- 	struct ll_inode_info	*lli   = ll_i2info(inode);
- 
--	mutex_lock(&inode->i_mutex);
-+	inode_lock(inode);
- 	if (cl_io_is_trunc(io)) {
- 		down_write(&lli->lli_trunc_sem);
- 		inode_dio_wait(inode);
-@@ -687,7 +687,7 @@ static void vvp_io_setattr_end(const struct lu_env *env,
- 		inode_dio_write_done(inode);
- 		up_write(&lli->lli_trunc_sem);
- 	}
--	mutex_unlock(&inode->i_mutex);
-+	inode_unlock(inode);
- }
- 
- static void vvp_io_setattr_fini(const struct lu_env *env,
-diff --git a/lustre/llite/vvp_page.c b/lustre/llite/vvp_page.c
-index 39f093b..e2afea4 100644
---- a/lustre/llite/vvp_page.c
-+++ b/lustre/llite/vvp_page.c
-@@ -468,9 +468,9 @@ static int vvp_transient_page_is_vmlocked(const struct lu_env *env,
- 	struct inode    *inode = vvp_object_inode(slice->cpl_obj);
- 	int	locked;
- 
--	locked = !mutex_trylock(&inode->i_mutex);
-+	locked = !inode_trylock(inode);
- 	if (!locked)
--		mutex_unlock(&inode->i_mutex);
-+		inode_unlock(inode);
- 	return locked ? -EBUSY : -ENODATA;
- }
- 
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0005-LU-8056-llite-inode_operations-interface-changed-in-.patch b/sys-cluster/lustre/files/0005-LU-8056-llite-inode_operations-interface-changed-in-.patch
deleted file mode 100644
index 72af637..0000000
--- a/sys-cluster/lustre/files/0005-LU-8056-llite-inode_operations-interface-changed-in-.patch
+++ /dev/null
@@ -1,165 +0,0 @@
-From 0ec0c36d7a0ec5636e19eece4d5df7615f656c23 Mon Sep 17 00:00:00 2001
-From: Li Dongyang <dongyang.li@anu.edu.au>
-Date: Mon, 16 May 2016 21:57:31 +1000
-Subject: [PATCH 5/8] LU-8056 llite: inode_operations interface changed in 4.5
-
-Linux kernel 4.5 replaced follow_link() with get_link()
-while put_link() is removed.
-This patch handles the API change.
-
-Linux-commit:6b2553918d8b4e6de9853fd6315bec7271a2e592
-Linux-commit:fceef393a538134f03b778c5d2519e670269342f
-
-Signed-off-by: Li Dongyang <dongyang.li@anu.edu.au>
-Change-Id: Ia9b8c9b855ed5ab7a428a370074b8801e34d3f99
----
- lustre/autoconf/lustre-core.m4 | 20 +++++++++++++++
- lustre/llite/dcache.c          |  4 +++
- lustre/llite/symlink.c         | 56 +++++++++++++++++++++++++++++++++++-------
- 3 files changed, 71 insertions(+), 9 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 5554490..ec18055 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2104,6 +2104,25 @@ inode_lock, [
- ]) # LC_HAVE_INODE_LOCK
- 
- #
-+# LC_HAVE_IOP_GET_LINK
-+#
-+# 4.5 vfs replaced iop->follow_link with
-+# iop->get_link
-+#
-+AC_DEFUN([LC_HAVE_IOP_GET_LINK], [
-+LB_CHECK_COMPILE([if 'iop' has 'get_link'],
-+inode_ops_get_link, [
-+	#include <linux/fs.h>
-+],[
-+	struct inode_operations iop;
-+	iop.get_link = NULL;
-+],[
-+	AC_DEFINE(HAVE_IOP_GET_LINK, 1,
-+		[have iop get_link])
-+])
-+]) # LC_HAVE_IOP_GET_LINK
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2278,6 +2297,7 @@ AC_DEFUN([LC_PROG_LINUX], [
- 
- 	# 4.5
- 	LC_HAVE_INODE_LOCK
-+	LC_HAVE_IOP_GET_LINK
- 
- 	#
- 	AS_IF([test "x$enable_server" != xno], [
-diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c
-index 8c3db0a..3168ca8 100644
---- a/lustre/llite/dcache.c
-+++ b/lustre/llite/dcache.c
-@@ -331,7 +331,11 @@ static int ll_revalidate_dentry(struct dentry *dentry,
- 		return 1;
- 
- 	/* Symlink - always valid as long as the dentry was found */
-+#ifdef HAVE_IOP_GET_LINK
-+	if (dentry->d_inode && dentry->d_inode->i_op->get_link)
-+#else
- 	if (dentry->d_inode && dentry->d_inode->i_op->follow_link)
-+#endif
- 		return 1;
- 
- 	/* Last path component lookup for open or create - we always
-diff --git a/lustre/llite/symlink.c b/lustre/llite/symlink.c
-index e635037..70577ce 100644
---- a/lustre/llite/symlink.c
-+++ b/lustre/llite/symlink.c
-@@ -122,6 +122,20 @@ failed:
- }
- 
- #ifdef HAVE_SYMLINK_OPS_USE_NAMEIDATA
-+static void ll_put_link(struct dentry *dentry,
-+			struct nameidata *nd, void *cookie)
-+#else
-+# ifdef HAVE_IOP_GET_LINK
-+static void ll_put_link(void *cookie)
-+# else
-+static void ll_put_link(struct inode *unused, void *cookie)
-+# endif
-+#endif
-+{
-+	ptlrpc_req_finished(cookie);
-+}
-+
-+#ifdef HAVE_SYMLINK_OPS_USE_NAMEIDATA
- static void *ll_follow_link(struct dentry *dentry, struct nameidata *nd)
- {
- 	struct inode *inode = dentry->d_inode;
-@@ -156,6 +170,34 @@ static void *ll_follow_link(struct dentry *dentry, struct nameidata *nd)
- 	RETURN(request);
- }
- #else
-+# ifdef HAVE_IOP_GET_LINK
-+static const char *ll_get_link(struct dentry *dentry,
-+			       struct inode *inode,
-+			       struct delayed_call *done)
-+{
-+	struct ptlrpc_request *request;
-+	char *symname = NULL;
-+	int rc;
-+
-+	ENTRY;
-+	CDEBUG(D_VFSTRACE, "VFS Op\n");
-+	if (!dentry)
-+		RETURN(ERR_PTR(-ECHILD));
-+	ll_inode_size_lock(inode);
-+	rc = ll_readlink_internal(inode, &request, &symname);
-+	ll_inode_size_unlock(inode);
-+	if (rc < 0) {
-+		ptlrpc_req_finished(request);
-+		return ERR_PTR(rc);
-+	}
-+
-+	/* symname may contain a pointer to the request message buffer,
-+	 * we delay request releasing then.
-+	 */
-+	set_delayed_call(done, ll_put_link, request);
-+	RETURN(symname);
-+}
-+# else
- static const char *ll_follow_link(struct dentry *dentry, void **cookie)
- {
- 	struct inode *inode = d_inode(dentry);
-@@ -179,22 +221,18 @@ static const char *ll_follow_link(struct dentry *dentry, void **cookie)
- 	*cookie = request;
- 	RETURN(symname);
- }
-+# endif /* HAVE_IOP_GET_LINK */
- #endif /* HAVE_SYMLINK_OPS_USE_NAMEIDATA */
- 
--#ifdef HAVE_SYMLINK_OPS_USE_NAMEIDATA
--static void ll_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
--#else
--static void ll_put_link(struct inode *unused, void *cookie)
--#endif
--{
--	ptlrpc_req_finished(cookie);
--}
--
- struct inode_operations ll_fast_symlink_inode_operations = {
- 	.readlink	= generic_readlink,
- 	.setattr	= ll_setattr,
-+#ifdef HAVE_IOP_GET_LINK
-+	.get_link	= ll_get_link,
-+#else
- 	.follow_link	= ll_follow_link,
- 	.put_link	= ll_put_link,
-+#endif
- 	.getattr	= ll_getattr,
- 	.permission	= ll_inode_permission,
- 	.setxattr	= ll_setxattr,
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0006-LU-8056-llite-POSIX_ACL_XATTR_-ACCESS-DEFAULT-remove.patch b/sys-cluster/lustre/files/0006-LU-8056-llite-POSIX_ACL_XATTR_-ACCESS-DEFAULT-remove.patch
deleted file mode 100644
index 6879248..0000000
--- a/sys-cluster/lustre/files/0006-LU-8056-llite-POSIX_ACL_XATTR_-ACCESS-DEFAULT-remove.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-From 103a363fa53f691d2bdbb38280e44d1c830c7322 Mon Sep 17 00:00:00 2001
-From: Li Dongyang <dongyang.li@anu.edu.au>
-Date: Mon, 16 May 2016 22:07:54 +1000
-Subject: [PATCH 6/8] LU-8056 llite: POSIX_ACL_XATTR_{ACCESS,DEFAULT} removed
- in 4.5
-
-POSIX_ACL_XATTR_{ACCESS,DEFAULT} are duplicate
-xattr name definitions and they are replaced by
-XATTR_NAME_POSIX_ACL_{ACCESS,DEFAULT} since Linux kernel 4.5
-
-Linux-commit:97d79299223baab330b194437e676d301f12d5f6
-
-Signed-off-by: Li Dongyang <dongyang.li@anu.edu.au>
-Change-Id: I9e031d3ac77a4bf1832d932c1cab7032e4572445
----
- lustre/llite/xattr.c | 12 ++++++++++--
- 1 file changed, 10 insertions(+), 2 deletions(-)
-
-diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index 6e282af..d30cede 100644
---- a/lustre/llite/xattr.c
-+++ b/lustre/llite/xattr.c
-@@ -57,6 +57,14 @@
- #define XATTR_NAME_EVM		"security.evm"
- #endif
- 
-+#ifndef XATTR_NAME_POSIX_ACL_ACCESS
-+# define XATTR_NAME_POSIX_ACL_ACCESS POSIX_ACL_XATTR_ACCESS
-+#endif
-+
-+#ifndef XATTR_NAME_POSIX_ACL_DEFAULT
-+# define XATTR_NAME_POSIX_ACL_DEFAULT POSIX_ACL_XATTR_DEFAULT
-+#endif
-+
- #define XATTR_USER_T            (1)
- #define XATTR_TRUSTED_T         (2)
- #define XATTR_SECURITY_T        (3)
-@@ -68,10 +76,10 @@
- static
- int get_xattr_type(const char *name)
- {
--        if (!strcmp(name, POSIX_ACL_XATTR_ACCESS))
-+	if (!strcmp(name, XATTR_NAME_POSIX_ACL_ACCESS))
-                 return XATTR_ACL_ACCESS_T;
- 
--        if (!strcmp(name, POSIX_ACL_XATTR_DEFAULT))
-+	if (!strcmp(name, XATTR_NAME_POSIX_ACL_DEFAULT))
-                 return XATTR_ACL_DEFAULT_T;
- 
-         if (!strncmp(name, XATTR_USER_PREFIX,
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0007-LU-8056-lloop-fix-bio_for_each_segment_all-for-newer.patch b/sys-cluster/lustre/files/0007-LU-8056-lloop-fix-bio_for_each_segment_all-for-newer.patch
deleted file mode 100644
index be495b9..0000000
--- a/sys-cluster/lustre/files/0007-LU-8056-lloop-fix-bio_for_each_segment_all-for-newer.patch
+++ /dev/null
@@ -1,64 +0,0 @@
-From 028c4416216af21dcae53f7daa4f549d0c2bad4f Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@yahoo.com>
-Date: Fri, 3 Jun 2016 14:09:54 -0400
-Subject: [PATCH 7/8] LU-8056 lloop: fix bio_for_each_segment_all for newer
- kernels
-
-Lustre patch http://review.whamcloud.com/20478 back ported
-bio_for_each_segment_all from newer kernels but support
-for newer kernels was done incorrectly. Update the code to
-work with newer kernels.
-
-Change-Id: I6a926320f80113169a13d2319190721c83d58b1d
-Signed-off-by: James Simmons <uja.ornl@yahoo.com>
----
- lustre/llite/lloop.c | 15 +--------------
- 1 file changed, 1 insertion(+), 14 deletions(-)
-
-diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
-index 64318ca..64da8c2 100644
---- a/lustre/llite/lloop.c
-+++ b/lustre/llite/lloop.c
-@@ -193,13 +193,8 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
-         struct cl_object     *obj = ll_i2info(inode)->lli_clob;
-         pgoff_t               offset;
-         int                   ret;
--#ifdef HAVE_BVEC_ITER
--	struct bvec_iter      iter;
--	struct bio_vec        bvec;
--#else
- 	int		      iter;
- 	struct bio_vec	     *bvec;
--#endif
-         int                   rw;
- 	size_t		      page_count = 0;
-         struct bio           *bio;
-@@ -226,16 +221,9 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
- 
- #ifdef HAVE_BVEC_ITER
- 		offset = (pgoff_t)(bio->bi_iter.bi_sector << 9) + lo->lo_offset;
--		bio_for_each_segment_all(bvec, bio, iter) {
--			BUG_ON(bvec.bv_offset != 0);
--			BUG_ON(bvec.bv_len != PAGE_CACHE_SIZE);
--
--			pages[page_count] = bvec.bv_page;
--			offsets[page_count] = offset;
--			page_count++;
--			offset += bvec.bv_len;
- #else
- 		offset = (pgoff_t)(bio->bi_sector << 9) + lo->lo_offset;
-+#endif
- 		bio_for_each_segment_all(bvec, bio, iter) {
- 			BUG_ON(bvec->bv_offset != 0);
- 			BUG_ON(bvec->bv_len != PAGE_CACHE_SIZE);
-@@ -244,7 +232,6 @@ static int do_bio_lustrebacked(struct lloop_device *lo, struct bio *head)
- 			offsets[page_count] = offset;
- 			page_count++;
- 			offset += bvec->bv_len;
--#endif
- 		}
- 		LASSERT(page_count <= LLOOP_MAX_SEGMENTS);
- 	}
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/0008-Fix-build-error-with-gcc-6.1.patch b/sys-cluster/lustre/files/0008-Fix-build-error-with-gcc-6.1.patch
deleted file mode 100644
index a6e167f..0000000
--- a/sys-cluster/lustre/files/0008-Fix-build-error-with-gcc-6.1.patch
+++ /dev/null
@@ -1,31 +0,0 @@
-From 476bd7023e01ab844bcdb81ca2f43e3a07f91b3d Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Mon, 13 Jun 2016 14:22:04 +0300
-Subject: [PATCH 8/8] Fix build error with gcc-6.1
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
----
- lustre/utils/liblustreapi_hsm.c | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/lustre/utils/liblustreapi_hsm.c b/lustre/utils/liblustreapi_hsm.c
-index 0b12f37..2f5b95d 100644
---- a/lustre/utils/liblustreapi_hsm.c
-+++ b/lustre/utils/liblustreapi_hsm.c
-@@ -429,11 +429,12 @@ static int llapi_hsm_log_ct_progress(struct hsm_copyaction_private **phcp,
- 			goto err;
- 	}
- 
--	if (progress_type == CT_RUNNING)
-+	if (progress_type == CT_RUNNING) {
- 		rc = llapi_json_add_item(&json_items, "current_bytes",
- 					 LLAPI_JSON_BIGNUM, &current);
- 		if (rc < 0)
- 			goto err;
-+	}
- 
- cancel:
- 	rc = llapi_json_add_item(&json_items, "event_type", LLAPI_JSON_STRING,
--- 
-2.8.2
-

diff --git a/sys-cluster/lustre/files/lnet.initd b/sys-cluster/lustre/files/lnet.initd
new file mode 100755
index 0000000..75bc4b1
--- /dev/null
+++ b/sys-cluster/lustre/files/lnet.initd
@@ -0,0 +1,46 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+description="Loads lnet module and configures network."
+
+depend() {
+        need net
+        after bootmisc
+}
+
+start() {
+        if [ "${RC_CMD}" = "restart" ];
+        then
+                einfo "Restarting..."
+        fi
+
+        ebegin "Loading LNet modules:"
+        modprobe lnet
+        eend $*
+
+        ebegin "Bringing up LNet"
+        lnetctl lnet configure --all
+        eend $*
+}
+
+stop() {
+        local LNETMODULES=( "ko2iblnd" "lnet" "libcfs" )
+        ebegin "Bringing down LNet"
+        lnetctl lnet unconfigure --all
+        eend $*
+
+        einfo "Unloading LNet modules:"
+        for mod in ${LNETMODULES[@]}; do
+                ebegin "... ${mod}"
+                modprobe -r ${mod}
+                eend $*
+        done
+}
+
+status()
+{
+        einfo "LNet status:"
+        lnetctl net show
+}

diff --git a/sys-cluster/lustre/files/lustre-client.initd b/sys-cluster/lustre/files/lustre-client.initd
new file mode 100755
index 0000000..1736597
--- /dev/null
+++ b/sys-cluster/lustre/files/lustre-client.initd
@@ -0,0 +1,48 @@
+#!/sbin/openrc-run
+# Copyright 1999-2016 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Id$
+
+description="Load lustre modules"
+
+extra_commands="checkmodule"
+
+depend() {
+        need lnet
+        before netmount
+}
+
+checkmodule() {
+        local LOADED="$(lctl modules | awk -F"/" /lustre/'{print $2F}')"
+        for mod in ${LOADED[@]}; do
+                ewarn "Module is still loaded: ${mod}"
+                eend $*
+        done
+}
+
+start() {
+        if [ "${RC_CMD}" = "restart" ];
+        then
+                einfo "Restarting Lustre..."
+                checkmodule
+        fi
+
+        ebegin "Loading Lustre modules..."
+        modprobe lustre
+        eend $*
+}
+
+stop() {
+        local LMODULES=( "lustre" "osc" "mgc" "lmv" "fld" "mdc" "fid" "lov" "ptlrpc" )
+        ebegin "Trying to unmount all Lustre fs"
+        umount -a -t lustre
+        eend $*
+        einfo "Unloading lustre modules:"
+        for mod in ${LMODULES[@]}; do
+                ebegin "... ${mod}"
+                modprobe -r ${mod}
+                eend $*
+        done
+
+        checkmodule
+}

diff --git a/sys-cluster/lustre/lustre-2.8.54.ebuild b/sys-cluster/lustre/lustre-2.8.0.ebuild
similarity index 73%
rename from sys-cluster/lustre/lustre-2.8.54.ebuild
rename to sys-cluster/lustre/lustre-2.8.0.ebuild
index 24b1bc2..47f4c15 100644
--- a/sys-cluster/lustre/lustre-2.8.54.ebuild
+++ b/sys-cluster/lustre/lustre-2.8.0.ebuild
@@ -13,10 +13,13 @@ if [[ $PV = *9999* ]]; then
 	EGIT_BRANCH="master"
 else
 	KEYWORDS="~amd64"
-	EGIT_TAG="${PV}"
+	EGIT_COMMIT="${PV}"
 fi
 
-inherit git-r3 autotools linux-mod toolchain-funcs udev flag-o-matic
+SUPPORTED_KV_MAJOR=4
+SUPPORTED_KV_MINOR=1
+
+inherit git-r3 autotools linux-info linux-mod toolchain-funcs udev flag-o-matic
 
 DESCRIPTION="Lustre is a parallel distributed file system"
 HOMEPAGE="http://wiki.whamcloud.com/"
@@ -44,16 +47,13 @@ REQUIRED_USE="
 	client? ( modules )
 	server? ( modules )"
 
-PATCHES=(
-	"${FILESDIR}/0001-LU-8056-libcfs-Support-for-linux-4.2-kernels.patch"
-	"${FILESDIR}/0002-LU-8056-o2iblnd-ib_query_device-removed-in-4.5.patch"
-	"${FILESDIR}/0003-LU-8056-socklnd-NETIF_F_ALL_CSUM-renamed-to-NETIF_F_.patch"
-	"${FILESDIR}/0004-LU-8056-llite-use-inode_lock-to-access-i_mutex.patch"
-	"${FILESDIR}/0005-LU-8056-llite-inode_operations-interface-changed-in-.patch"
-	"${FILESDIR}/0006-LU-8056-llite-POSIX_ACL_XATTR_-ACCESS-DEFAULT-remove.patch"
-	"${FILESDIR}/0007-LU-8056-lloop-fix-bio_for_each_segment_all-for-newer.patch"
-	"${FILESDIR}/0008-Fix-build-error-with-gcc-6.1.patch"
-	)
+pkg_pretend() {
+	KVSUPP=${SUPPORTED_KV_MAJOR}.${SUPPORTED_KV_MINOR}.x
+	if kernel_is gt ${SUPPORTED_KV_MAJOR} ${SUPPORTED_KV_MINOR}; then
+		eerror "Unsupported kernel version! Latest supported one is ${KVSUPP}"
+		die
+	fi
+}
 
 pkg_setup() {
 	filter-mfpmath sse
@@ -65,7 +65,7 @@ pkg_setup() {
 }
 
 src_prepare() {
-	if [ ! -z ${#PATCHES[0]} ]; then
+	if [ ${#PATCHES[0]} -ne 0 ]; then
 		epatch ${PATCHES[@]}
 	fi
 	eapply_user
@@ -111,4 +111,6 @@ src_compile() {
 
 src_install() {
 	default
+	newinitd "${FILESDIR}/lnet.initd" lnet
+	newinitd "${FILESDIR}/lustre-client.initd" lustre-client
 }

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index d928ee3..47f4c15 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -13,10 +13,13 @@ if [[ $PV = *9999* ]]; then
 	EGIT_BRANCH="master"
 else
 	KEYWORDS="~amd64"
-	EGIT_TAG="${PV}"
+	EGIT_COMMIT="${PV}"
 fi
 
-inherit git-r3 autotools linux-mod toolchain-funcs udev flag-o-matic
+SUPPORTED_KV_MAJOR=4
+SUPPORTED_KV_MINOR=1
+
+inherit git-r3 autotools linux-info linux-mod toolchain-funcs udev flag-o-matic
 
 DESCRIPTION="Lustre is a parallel distributed file system"
 HOMEPAGE="http://wiki.whamcloud.com/"
@@ -44,9 +47,13 @@ REQUIRED_USE="
 	client? ( modules )
 	server? ( modules )"
 
-PATCHES=(
-	"${FILESDIR}/0008-Fix-build-error-with-gcc-6.1.patch"
-	)
+pkg_pretend() {
+	KVSUPP=${SUPPORTED_KV_MAJOR}.${SUPPORTED_KV_MINOR}.x
+	if kernel_is gt ${SUPPORTED_KV_MAJOR} ${SUPPORTED_KV_MINOR}; then
+		eerror "Unsupported kernel version! Latest supported one is ${KVSUPP}"
+		die
+	fi
+}
 
 pkg_setup() {
 	filter-mfpmath sse
@@ -58,7 +65,7 @@ pkg_setup() {
 }
 
 src_prepare() {
-	if [ ! -z ${#PATCHES[0]} ]; then
+	if [ ${#PATCHES[0]} -ne 0 ]; then
 		epatch ${PATCHES[@]}
 	fi
 	eapply_user
@@ -104,4 +111,6 @@ src_compile() {
 
 src_install() {
 	default
+	newinitd "${FILESDIR}/lnet.initd" lnet
+	newinitd "${FILESDIR}/lustre-client.initd" lustre-client
 }


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2016-06-12 20:32 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2016-06-12 20:32 UTC (permalink / raw
  To: gentoo-commits

commit:     5a757d4da3404035dc159c8942fe336e281c1885
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 12 20:32:05 2016 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Sun Jun 12 20:32:05 2016 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=5a757d4d

sys-cluster/lustre: Fix install without modules

Package-Manager: portage-2.3.0_rc1

 sys-cluster/lustre/files/lustre-do-not-include-udef.h.patch | 12 ++++++++++++
 sys-cluster/lustre/lustre-2.8.0.ebuild                      |  4 ++--
 sys-cluster/lustre/lustre-9999.ebuild                       |  4 ++--
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/sys-cluster/lustre/files/lustre-do-not-include-udef.h.patch b/sys-cluster/lustre/files/lustre-do-not-include-udef.h.patch
new file mode 100644
index 0000000..4bb353c
--- /dev/null
+++ b/sys-cluster/lustre/files/lustre-do-not-include-udef.h.patch
@@ -0,0 +1,12 @@
+diff -urN lustre-2.8.0.orig/config/lustre-build.m4 lustre-2.8.0/config/lustre-build.m4
+--- lustre-2.8.0.orig/config/lustre-build.m4	2016-06-12 23:18:39.992712332 +0300
++++ lustre-2.8.0/config/lustre-build.m4	2016-06-12 23:21:39.928433319 +0300
+@@ -266,7 +266,7 @@
+ #
+ AC_DEFUN([LB_CONFIG_HEADERS], [
+ AC_CONFIG_HEADERS([config.h])
+-CPPFLAGS="-include $PWD/undef.h -include $PWD/config.h $CPPFLAGS"
++CPPFLAGS="-include $PWD/config.h $CPPFLAGS"
+ EXTRA_KCFLAGS="-include $PWD/undef.h -include $PWD/config.h $EXTRA_KCFLAGS"
+ AC_SUBST(EXTRA_KCFLAGS)
+ ]) # LB_CONFIG_HEADERS

diff --git a/sys-cluster/lustre/lustre-2.8.0.ebuild b/sys-cluster/lustre/lustre-2.8.0.ebuild
index 4a59000..4fab54d 100644
--- a/sys-cluster/lustre/lustre-2.8.0.ebuild
+++ b/sys-cluster/lustre/lustre-2.8.0.ebuild
@@ -43,6 +43,8 @@ REQUIRED_USE="
 	modules? ( client )
 	modules? ( server )"
 
+PATCHES=( "${FILESDIR}/lustre-do-not-include-udef.h.patch" )
+
 pkg_setup() {
 	filter-mfpmath sse
 	filter-mfpmath i386
@@ -83,9 +85,7 @@ src_configure() {
 	econf \
 		${myconf} \
 		--without-ldiskfs \
-		--disable-ldiskfs-build \
 		--with-linux="${KERNEL_DIR}" \
-		--with-linux-release="${KV_FULL}" \
 		$(use_enable client) \
 		$(use_enable utils) \
 		$(use_enable modules) \

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 4a59000..4fab54d 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -43,6 +43,8 @@ REQUIRED_USE="
 	modules? ( client )
 	modules? ( server )"
 
+PATCHES=( "${FILESDIR}/lustre-do-not-include-udef.h.patch" )
+
 pkg_setup() {
 	filter-mfpmath sse
 	filter-mfpmath i386
@@ -83,9 +85,7 @@ src_configure() {
 	econf \
 		${myconf} \
 		--without-ldiskfs \
-		--disable-ldiskfs-build \
 		--with-linux="${KERNEL_DIR}" \
-		--with-linux-release="${KV_FULL}" \
 		$(use_enable client) \
 		$(use_enable utils) \
 		$(use_enable modules) \


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2016-06-12 19:19 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2016-06-12 19:19 UTC (permalink / raw
  To: gentoo-commits

commit:     129cc05301a4d485af937c113b3d9a41cb6110f4
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Sun Jun 12 19:18:50 2016 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Sun Jun 12 19:18:50 2016 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=129cc053

sys-cluster/lustre: Add ebuild for 2.8.0 tag

Package-Manager: portage-2.3.0_rc1

 sys-cluster/lustre/files/lustre-readline6.3_fix.patch       | 13 -------------
 .../lustre/{lustre-9999.ebuild => lustre-2.8.0.ebuild}      | 10 +++-------
 sys-cluster/lustre/lustre-9999.ebuild                       | 10 +++-------
 3 files changed, 6 insertions(+), 27 deletions(-)

diff --git a/sys-cluster/lustre/files/lustre-readline6.3_fix.patch b/sys-cluster/lustre/files/lustre-readline6.3_fix.patch
deleted file mode 100644
index 50384d6..0000000
--- a/sys-cluster/lustre/files/lustre-readline6.3_fix.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/libcfs/libcfs/util/parser.c b/libcfs/libcfs/util/parser.c
-index f395fa3..3fc0373 100644
---- a/libcfs/libcfs/util/parser.c
-+++ b/libcfs/libcfs/util/parser.c
-@@ -308,7 +308,7 @@ int init_input()
-                 rl_deprep_term_function = (rl_voidfunc_t *)noop_fn;
-         }
- 
--        rl_attempted_completion_function = (CPPFunction *)command_completion;
-+        rl_attempted_completion_function = (rl_completion_func_t *)command_completion;
-         rl_completion_entry_function = (void *)command_generator;
- #endif
-         return interactive;

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-2.8.0.ebuild
similarity index 90%
copy from sys-cluster/lustre/lustre-9999.ebuild
copy to sys-cluster/lustre/lustre-2.8.0.ebuild
index 3c8af2d..59c8e55 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-2.8.0.ebuild
@@ -2,10 +2,10 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
-EAPI=5
+EAPI=6
 
 WANT_AUTOCONF="2.5"
-WANT_AUTOMAKE="1.10"
+WANT_AUTOMAKE="1.15"
 WANT_LIBTOOL="latest"
 
 if [[ $PV = *9999* ]]; then
@@ -20,7 +20,7 @@ inherit git-r3 autotools linux-mod toolchain-funcs udev flag-o-matic
 
 DESCRIPTION="Lustre is a parallel distributed file system"
 HOMEPAGE="http://wiki.whamcloud.com/"
-SRC_URI="https://raw.githubusercontent.com/gentoo-science/sci/master/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+SRC_URI=""
 EGIT_REPO_URI="git://git.whamcloud.com/fs/lustre-release.git"
 
 LICENSE="GPL-2"
@@ -40,10 +40,6 @@ RDEPEND="
 DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
-PATCHES=(
-	"${FILESDIR}/lustre-readline6.3_fix.patch"
-)
-
 pkg_setup() {
 	filter-mfpmath sse
 	filter-mfpmath i386

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 3c8af2d..59c8e55 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -2,10 +2,10 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
-EAPI=5
+EAPI=6
 
 WANT_AUTOCONF="2.5"
-WANT_AUTOMAKE="1.10"
+WANT_AUTOMAKE="1.15"
 WANT_LIBTOOL="latest"
 
 if [[ $PV = *9999* ]]; then
@@ -20,7 +20,7 @@ inherit git-r3 autotools linux-mod toolchain-funcs udev flag-o-matic
 
 DESCRIPTION="Lustre is a parallel distributed file system"
 HOMEPAGE="http://wiki.whamcloud.com/"
-SRC_URI="https://raw.githubusercontent.com/gentoo-science/sci/master/patches/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+SRC_URI=""
 EGIT_REPO_URI="git://git.whamcloud.com/fs/lustre-release.git"
 
 LICENSE="GPL-2"
@@ -40,10 +40,6 @@ RDEPEND="
 DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
-PATCHES=(
-	"${FILESDIR}/lustre-readline6.3_fix.patch"
-)
-
 pkg_setup() {
 	filter-mfpmath sse
 	filter-mfpmath i386


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2016-06-10 19:06 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2016-06-10 19:06 UTC (permalink / raw
  To: gentoo-commits

commit:     1a90a17ec827f5827bbb38024ff5f1e0ac9189f5
Author:     Alexey Shvetsov <alexxy <AT> omrb <DOT> pnpi <DOT> spb <DOT> ru>
AuthorDate: Fri Jun 10 19:06:04 2016 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Fri Jun 10 19:06:04 2016 +0000
URL:        https://gitweb.gentoo.org/proj/sci.git/commit/?id=1a90a17e

sys-cluster/lustre: Update patches

Package-Manager: portage-2.3.0_rc1

 ...cfs-update-zfs-proc-handling-to-seq_files.patch | 204 ------
 ...m-Backport-shrinker-changes-from-upstream.patch | 753 ---------------------
 sys-cluster/lustre/lustre-9999.ebuild              |   5 +-
 3 files changed, 1 insertion(+), 961 deletions(-)

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
deleted file mode 100644
index 2860b4b..0000000
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ /dev/null
@@ -1,204 +0,0 @@
-From 4e55f198a630e3beb9daad9bf72133da44ca7242 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Wed, 23 Apr 2014 09:31:09 -0400
-Subject: [PATCH 1/3] LU-3319 procfs: update zfs proc handling to seq_files
-
-Migrate all zfs proc handling to using strictly seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
----
- lustre/osd-zfs/osd_handler.c  | 13 +++---
- lustre/osd-zfs/osd_internal.h |  3 +-
- lustre/osd-zfs/osd_lproc.c    | 92 +++++++++++++++++++++++++------------------
- 3 files changed, 61 insertions(+), 47 deletions(-)
-
-diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 42e6e20..83b243d 100644
---- a/lustre/osd-zfs/osd_handler.c
-+++ b/lustre/osd-zfs/osd_handler.c
-@@ -761,12 +761,13 @@ static int osd_process_config(const struct lu_env *env,
- 		break;
- 	case LCFG_PARAM: {
- 		LASSERT(&o->od_dt_dev);
--		rc = class_process_proc_param(PARAM_OSD, lprocfs_osd_obd_vars,
--					      cfg, &o->od_dt_dev);
-+		rc = class_process_proc_seq_param(PARAM_OSD,
-+						  lprocfs_osd_obd_vars, cfg,
-+						  &o->od_dt_dev);
- 		if (rc > 0 || rc == -ENOSYS)
--			rc = class_process_proc_param(PARAM_OST,
--						      lprocfs_osd_obd_vars,
--						      cfg, &o->od_dt_dev);
-+			rc = class_process_proc_seq_param(PARAM_OST,
-+							  lprocfs_osd_obd_vars,
-+							  cfg, &o->od_dt_dev);
- 		break;
- 	}
- 	default:
-@@ -923,7 +924,7 @@ int __init osd_init(void)
- 
- 	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				 lprocfs_osd_module_vars,
-+				 NULL,
- #endif
- 				 LUSTRE_OSD_ZFS_NAME, &osd_device_type);
- 	if (rc)
-diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h
-index c53ad8b..1773313 100644
---- a/lustre/osd-zfs/osd_internal.h
-+++ b/lustre/osd-zfs/osd_internal.h
-@@ -405,8 +405,7 @@ enum {
- };
- 
- /* osd_lproc.c */
--extern struct lprocfs_vars lprocfs_osd_obd_vars[];
--extern struct lprocfs_vars lprocfs_osd_module_vars[];
-+extern struct lprocfs_seq_vars lprocfs_osd_obd_vars[];
- 
- int osd_procfs_init(struct osd_device *osd, const char *name);
- int osd_procfs_fini(struct osd_device *osd);
-diff --git a/lustre/osd-zfs/osd_lproc.c b/lustre/osd-zfs/osd_lproc.c
-index bc8a807..f19ed11 100644
---- a/lustre/osd-zfs/osd_lproc.c
-+++ b/lustre/osd-zfs/osd_lproc.c
-@@ -107,27 +107,27 @@ out:
- 	RETURN(result);
- }
- 
--static int lprocfs_osd_rd_fstype(char *page, char **start, off_t off,
--				int count, int *eof, void *data)
-+static int zfs_osd_fstype_seq_show(struct seq_file *m, void *data)
- {
--	return snprintf(page, count, "zfs\n");
-+	return seq_printf(m, "zfs\n");
- }
-+LPROC_SEQ_FOPS_RO(zfs_osd_fstype);
- 
--static int lprocfs_osd_rd_mntdev(char *page, char **start, off_t off, int count,
--				int *eof, void *data)
-+static int zfs_osd_mntdev_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(osd != NULL);
--	*eof = 1;
--
--	return snprintf(page, count, "%s\n", osd->od_mntdev);
-+	return seq_printf(m, "%s\n", osd->od_mntdev);
- }
-+LPROC_SEQ_FOPS_RO(zfs_osd_mntdev);
- 
--static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
--					unsigned long count, void *data)
-+static ssize_t
-+lprocfs_osd_force_sync_seq_write(struct file *file, const char __user *buffer,
-+				size_t count, loff_t *off)
- {
--	struct dt_device  *dt = data;
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
- 	struct lu_env      env;
- 	int rc;
- 
-@@ -139,21 +139,23 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
- 
- 	return rc == 0 ? count : rc;
- }
-+LPROC_SEQ_FOPS_WO_TYPE(zfs, osd_force_sync);
- 
--static int lprocfs_osd_rd_iused_est(char *page, char **start, off_t off,
--				    int count, int *eof, void *data)
-+static int zfs_osd_iused_est_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 	LASSERT(osd != NULL);
- 
--	return snprintf(page, count, "%d\n", osd->od_quota_iused_est);
-+	return seq_printf(m, "%d\n", osd->od_quota_iused_est);
- }
- 
--static int lprocfs_osd_wr_iused_est(struct file *file,
--				    const char __user *buffer,
--				    unsigned long count, void *data)
-+static ssize_t
-+zfs_osd_iused_est_seq_write(struct file *file, const char __user *buffer,
-+			     size_t count, loff_t *off)
- {
--	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *osd = osd_dt_dev(dt);
- 	int                rc, val;
- 
- 	LASSERT(osd != NULL);
-@@ -166,24 +168,36 @@ static int lprocfs_osd_wr_iused_est(struct file *file,
- 
- 	return count;
- }
--
--struct lprocfs_vars lprocfs_osd_obd_vars[] = {
--	{ "blocksize",		lprocfs_dt_rd_blksize,	0, 0 },
--	{ "kbytestotal",	lprocfs_dt_rd_kbytestotal,	0, 0 },
--	{ "kbytesfree",		lprocfs_dt_rd_kbytesfree,	0, 0 },
--	{ "kbytesavail",	lprocfs_dt_rd_kbytesavail,	0, 0 },
--	{ "filestotal",		lprocfs_dt_rd_filestotal,	0, 0 },
--	{ "filesfree",		lprocfs_dt_rd_filesfree,	0, 0 },
--	{ "fstype",          lprocfs_osd_rd_fstype,      0, 0 },
--	{ "mntdev",          lprocfs_osd_rd_mntdev,      0, 0 },
--	{ "force_sync",      0, lprocfs_osd_wr_force_sync     },
--	{ "quota_iused_estimate",  lprocfs_osd_rd_iused_est,
--		lprocfs_osd_wr_iused_est,   0, 0 },
--	{ 0 }
--};
--
--struct lprocfs_vars lprocfs_osd_module_vars[] = {
--	{ "num_refs",        lprocfs_rd_numrefs,         0, 0 },
-+LPROC_SEQ_FOPS(zfs_osd_iused_est);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_blksize);
-+LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_kbytestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_kbytesfree);
-+LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_kbytesavail);
-+LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_filestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_filesfree);
-+
-+struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
-+	{ .name	=	"blocksize",
-+	  .fops	=	&zfs_dt_blksize_fops		},
-+	{ .name	=	"kbytestotal",
-+	  .fops	=	&zfs_dt_kbytestotal_fops	},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&zfs_dt_kbytesfree_fops		},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&zfs_dt_kbytesavail_fops	},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&zfs_dt_filestotal_fops		},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&zfs_dt_filesfree_fops		},
-+	{ .name	=	"fstype",
-+	  .fops	=	&zfs_osd_fstype_fops		},
-+	{ .name	=	"mntdev",
-+	  .fops	=	&zfs_osd_mntdev_fops		},
-+	{ .name	=	"force_sync",
-+	  .fops	=	&zfs_osd_force_sync_fops	},
-+	{ .name	=	"quota_iused_estimate",
-+	  .fops	=	&zfs_osd_iused_est_fops		},
- 	{ 0 }
- };
- 
-@@ -203,7 +217,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
- 	LASSERT(name != NULL);
- 	LASSERT(type != NULL);
- 
--	osd->od_proc_entry = lprocfs_register(name, type->typ_procroot,
-+	osd->od_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
- 			lprocfs_osd_obd_vars, &osd->od_dt_dev);
- 	if (IS_ERR(osd->od_proc_entry)) {
- 		rc = PTR_ERR(osd->od_proc_entry);
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
deleted file mode 100644
index ea23076..0000000
--- a/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ /dev/null
@@ -1,753 +0,0 @@
-From 871751ab815067744064132b76aaf4857c720fc9 Mon Sep 17 00:00:00 2001
-From: Yang Sheng <yang.sheng@intel.com>
-Date: Thu, 24 Apr 2014 11:43:09 +0800
-Subject: [PATCH 3/3] LU-4416 mm: Backport shrinker changes from upstream
-
-Convert shrinker to new count/scan API.
---ptlrpc shrinker
---lu_object shrinker
---ldlm pool shrinker
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
-Signed-off-by: Yang Sheng <yang.sheng@intel.com>
-Change-Id: Idbd7cd3b7488202e5e8f6fdf757ae6d20e28d642
----
- libcfs/autoconf/lustre-libcfs.m4        |  18 +++
- libcfs/include/libcfs/linux/linux-mem.h |  34 ++++-
- libcfs/include/libcfs/posix/libcfs.h    |  13 +-
- lustre/ldlm/ldlm_pool.c                 | 222 ++++++++++++++++++++------------
- lustre/obdclass/lu_object.c             | 134 +++++++++++--------
- lustre/ptlrpc/sec_bulk.c                |  80 +++++++++---
- 6 files changed, 338 insertions(+), 163 deletions(-)
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index ac5c413..81c6d7f 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -290,6 +290,22 @@ No crc32c pclmulqdq crypto api found, enable internal pclmulqdq based crc32c
- ]) # LIBCFS_ENABLE_CRC32C_ACCEL
- 
- #
-+# FC19 3.12 kernel struct shrinker change
-+#
-+AC_DEFUN([LIBCFS_SHRINKER_COUNT],[
-+LB_CHECK_COMPILE([shrinker has 'count_objects'],
-+shrinker_count_objects, [
-+	#include <linux/mmzone.h>
-+	#include <linux/shrinker.h>
-+],[
-+	((struct shrinker*)0)->count_objects(NULL, NULL);
-+],[
-+	AC_DEFINE(HAVE_SHRINKER_COUNT, 1,
-+		[shrinker has count_objects memeber])
-+])
-+])
-+
-+#
- # LIBCFS_PROG_LINUX
- #
- # LibCFS linux kernel checks
-@@ -324,6 +340,8 @@ LIBCFS_HAVE_CRC32
- LIBCFS_ENABLE_CRC32_ACCEL
- # 3.10
- LIBCFS_ENABLE_CRC32C_ACCEL
-+# 3.12
-+LIBCFS_SHRINKER_COUNT
- ]) # LIBCFS_PROG_LINUX
- 
- #
-diff --git a/libcfs/include/libcfs/linux/linux-mem.h b/libcfs/include/libcfs/linux/linux-mem.h
-index 6109645..ce20cb8 100644
---- a/libcfs/include/libcfs/linux/linux-mem.h
-+++ b/libcfs/include/libcfs/linux/linux-mem.h
-@@ -108,13 +108,16 @@ extern void *cfs_mem_cache_cpt_alloc(struct kmem_cache *cachep,
- /*
-  * Shrinker
-  */
--
- #ifdef HAVE_SHRINK_CONTROL
- # define SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)  \
-                        struct shrinker *shrinker, \
-                        struct shrink_control *sc
- # define shrink_param(sc, var) ((sc)->var)
- #else
-+struct shrink_control {
-+	gfp_t gfp_mask;
-+	unsigned long nr_to_scan;
-+};
- # ifdef HAVE_SHRINKER_WANT_SHRINK_PTR
- #  define SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)  \
-                         struct shrinker *shrinker, \
-@@ -123,13 +126,31 @@ extern void *cfs_mem_cache_cpt_alloc(struct kmem_cache *cachep,
- #  define SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)  \
-                         int nr_to_scan, gfp_t gfp_mask
- # endif
-+	/* avoid conflict with spl mm_compat.h */
-+# define HAVE_SHRINK_CONTROL_STRUCT 1
- # define shrink_param(sc, var) (var)
- #endif
- 
--typedef int (*shrinker_t)(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask));
-+#ifdef HAVE_SHRINKER_COUNT
-+struct shrinker_var {
-+	unsigned long (*count)(struct shrinker *,
-+			       struct shrink_control *sc);
-+	unsigned long (*scan)(struct shrinker *,
-+			      struct shrink_control *sc);
-+};
-+# define DEF_SHRINKER_VAR(name, shrink, count_obj, scan_obj) \
-+	    struct shrinker_var name = { .count = count_obj, .scan = scan_obj }
-+#else
-+struct shrinker_var {
-+	int (*shrink)(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask));
-+};
-+# define DEF_SHRINKER_VAR(name, shrinker, count, scan) \
-+	    struct shrinker_var name = { .shrink = shrinker }
-+# define SHRINK_STOP (~0UL)
-+#endif
- 
- static inline
--struct shrinker *set_shrinker(int seek, shrinker_t func)
-+struct shrinker *set_shrinker(int seek, struct shrinker_var *var)
- {
-         struct shrinker *s;
- 
-@@ -137,7 +158,12 @@ struct shrinker *set_shrinker(int seek, shrinker_t func)
-         if (s == NULL)
-                 return (NULL);
- 
--        s->shrink = func;
-+#ifdef HAVE_SHRINKER_COUNT
-+	s->count_objects = var->count;
-+	s->scan_objects = var->scan;
-+#else
-+	s->shrink = var->shrink;
-+#endif
-         s->seeks = seek;
- 
-         register_shrinker(s);
-diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 6a16be3..c839486 100644
---- a/libcfs/include/libcfs/posix/libcfs.h
-+++ b/libcfs/include/libcfs/posix/libcfs.h
-@@ -269,12 +269,19 @@ struct shrinker {
- #endif
- };
- 
--#define DEFAULT_SEEKS (0)
-+struct shrinker_var {
-+#ifndef __INTEL_COMPILER
-+	;
-+#endif
-+};
-+
-+#define DEF_SHRINKER_VAR(name, shrink, count, scan) \
-+		struct shrinker_var name = {};
- 
--typedef int (*shrinker_t)(int, unsigned int);
-+#define DEFAULT_SEEKS (0)
- 
- static inline
--struct shrinker *set_shrinker(int seeks, shrinker_t shrink)
-+struct shrinker *set_shrinker(int seeks, struct shrinker_var *var)
- {
- 	return (struct shrinker *)0xdeadbea1; /* Cannot return NULL here */
- }
-diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
-index 6cf50f2..b3eaf1c 100644
---- a/lustre/ldlm/ldlm_pool.c
-+++ b/lustre/ldlm/ldlm_pool.c
-@@ -531,7 +531,7 @@ static int ldlm_cli_pool_shrink(struct ldlm_pool *pl,
-                                 int nr, unsigned int gfp_mask)
- {
-         struct ldlm_namespace *ns;
--        int canceled = 0, unused;
-+	int unused;
- 
-         ns = ldlm_pl2ns(pl);
- 
-@@ -550,17 +550,14 @@ static int ldlm_cli_pool_shrink(struct ldlm_pool *pl,
- 	unused = ns->ns_nr_unused;
- 	spin_unlock(&ns->ns_lock);
- 
--        if (nr) {
--		canceled = ldlm_cancel_lru(ns, nr, LCF_ASYNC,
--					   LDLM_CANCEL_SHRINK);
--        }
- #ifdef __KERNEL__
--        /*
--         * Return the number of potentially reclaimable locks.
--         */
--        return ((unused - canceled) / 100) * sysctl_vfs_cache_pressure;
-+	if (nr == 0)
-+		return (unused / 100) * sysctl_vfs_cache_pressure;
-+	else
-+		return ldlm_cancel_lru(ns, nr, LCF_ASYNC, LDLM_CANCEL_SHRINK);
- #else
--        return unused - canceled;
-+	return unused - (nr ? ldlm_cancel_lru(ns, nr, LCF_ASYNC,
-+					      LDLM_CANCEL_SHRINK) : 0);
- #endif
- }
- 
-@@ -1045,41 +1042,36 @@ static struct shrinker *ldlm_pools_cli_shrinker;
- static struct completion ldlm_pools_comp;
- 
- /*
-- * Cancel \a nr locks from all namespaces (if possible). Returns number of
-- * cached locks after shrink is finished. All namespaces are asked to
-- * cancel approximately equal amount of locks to keep balancing.
-- */
--static int ldlm_pools_shrink(ldlm_side_t client, int nr,
--                             unsigned int gfp_mask)
-+* count locks from all namespaces (if possible). Returns number of
-+* cached locks.
-+*/
-+static unsigned long ldlm_pools_count(ldlm_side_t client, unsigned int gfp_mask)
- {
--	unsigned int total = 0, cached = 0;
--	int nr_ns;
--        struct ldlm_namespace *ns;
-+	int total = 0, nr_ns;
-+	struct ldlm_namespace *ns;
- 	struct ldlm_namespace *ns_old = NULL; /* loop detection */
--        void *cookie;
-+	void *cookie;
- 
--        if (client == LDLM_NAMESPACE_CLIENT && nr != 0 &&
--            !(gfp_mask & __GFP_FS))
--                return -1;
-+	if (client == LDLM_NAMESPACE_CLIENT && !(gfp_mask & __GFP_FS))
-+		return 0;
- 
--        CDEBUG(D_DLMTRACE, "Request to shrink %d %s locks from all pools\n",
--               nr, client == LDLM_NAMESPACE_CLIENT ? "client" : "server");
-+	CDEBUG(D_DLMTRACE, "Request to count %s locks from all pools\n",
-+	       client == LDLM_NAMESPACE_CLIENT ? "client" : "server");
- 
--        cookie = cl_env_reenter();
-+	cookie = cl_env_reenter();
- 
--        /*
--         * Find out how many resources we may release.
--         */
-+	/*
-+	 * Find out how many resources we may release.
-+	 */
- 	for (nr_ns = ldlm_namespace_nr_read(client);
--	     nr_ns > 0; nr_ns--)
--        {
-+	     nr_ns > 0; nr_ns--) {
- 		mutex_lock(ldlm_namespace_lock(client));
--                if (cfs_list_empty(ldlm_namespace_list(client))) {
-+		if (list_empty(ldlm_namespace_list(client))) {
- 			mutex_unlock(ldlm_namespace_lock(client));
--                        cl_env_reexit(cookie);
--                        return 0;
--                }
--                ns = ldlm_namespace_first_locked(client);
-+			cl_env_reexit(cookie);
-+			return 0;
-+		}
-+		ns = ldlm_namespace_first_locked(client);
- 
- 		if (ns == ns_old) {
- 			mutex_unlock(ldlm_namespace_lock(client));
-@@ -1095,57 +1087,117 @@ static int ldlm_pools_shrink(ldlm_side_t client, int nr,
- 		if (ns_old == NULL)
- 			ns_old = ns;
- 
--                ldlm_namespace_get(ns);
--                ldlm_namespace_move_to_active_locked(ns, client);
-+		ldlm_namespace_get(ns);
-+		ldlm_namespace_move_to_active_locked(ns, client);
- 		mutex_unlock(ldlm_namespace_lock(client));
--                total += ldlm_pool_shrink(&ns->ns_pool, 0, gfp_mask);
--                ldlm_namespace_put(ns);
--        }
-+		total += ldlm_pool_shrink(&ns->ns_pool, 0, gfp_mask);
-+		ldlm_namespace_put(ns);
-+	}
- 
--        if (nr == 0 || total == 0) {
--                cl_env_reexit(cookie);
--                return total;
--        }
-+	cl_env_reexit(cookie);
-+	return total;
-+}
- 
--        /*
--         * Shrink at least ldlm_namespace_nr(client) namespaces.
--         */
--	for (nr_ns = ldlm_namespace_nr_read(client) - nr_ns;
--	     nr_ns > 0; nr_ns--)
--        {
--		__u64 cancel;
--		unsigned int nr_locks;
-+static unsigned long ldlm_pools_scan(ldlm_side_t client, int nr,
-+				     unsigned int gfp_mask)
-+{
-+	unsigned long freed = 0;
-+	int tmp, nr_ns;
-+	struct ldlm_namespace *ns;
-+	void *cookie;
- 
--                /*
--                 * Do not call shrink under ldlm_namespace_lock(client)
--                 */
-+	if (client == LDLM_NAMESPACE_CLIENT && !(gfp_mask & __GFP_FS))
-+		return -1;
-+
-+	cookie = cl_env_reenter();
-+
-+	/*
-+	 * Shrink at least ldlm_namespace_nr_read(client) namespaces.
-+	 */
-+	for (tmp = nr_ns = ldlm_namespace_nr_read(client);
-+	     tmp > 0; tmp--) {
-+		int cancel, nr_locks;
-+
-+		/*
-+		 * Do not call shrink under ldlm_namespace_lock(client)
-+		*/
- 		mutex_lock(ldlm_namespace_lock(client));
--                if (cfs_list_empty(ldlm_namespace_list(client))) {
-+		if (list_empty(ldlm_namespace_list(client))) {
- 			mutex_unlock(ldlm_namespace_lock(client));
--                        /*
--                         * If list is empty, we can't return any @cached > 0,
--                         * that probably would cause needless shrinker
--                         * call.
--                         */
--                        cached = 0;
--                        break;
--                }
--                ns = ldlm_namespace_first_locked(client);
--                ldlm_namespace_get(ns);
--                ldlm_namespace_move_to_active_locked(ns, client);
-+			break;
-+		}
-+		ns = ldlm_namespace_first_locked(client);
-+		ldlm_namespace_get(ns);
-+		ldlm_namespace_move_to_active_locked(ns, client);
- 		mutex_unlock(ldlm_namespace_lock(client));
- 
--                nr_locks = ldlm_pool_granted(&ns->ns_pool);
--		cancel = (__u64)nr_locks * nr;
--		do_div(cancel, total);
--		ldlm_pool_shrink(&ns->ns_pool, 1 + cancel, gfp_mask);
--                cached += ldlm_pool_granted(&ns->ns_pool);
--                ldlm_namespace_put(ns);
--        }
--        cl_env_reexit(cookie);
--        /* we only decrease the SLV in server pools shrinker, return -1 to
--         * kernel to avoid needless loop. LU-1128 */
--        return (client == LDLM_NAMESPACE_SERVER) ? -1 : cached;
-+		nr_locks = ldlm_pool_granted(&ns->ns_pool);
-+		/*
-+		 * We use to shrink propotionally but with new shrinker API,
-+		 * we lost the total number of freeable locks.
-+		 */
-+		cancel = 1 + min_t(int, nr_locks, nr / nr_ns);
-+		freed += ldlm_pool_shrink(&ns->ns_pool, cancel, gfp_mask);
-+		ldlm_namespace_put(ns);
-+	}
-+	cl_env_reexit(cookie);
-+	/*
-+	 * we only decrease the SLV in server pools shrinker, return
-+	 * SHRINK_STOP to kernel to avoid needless loop. LU-1128
-+	 */
-+	return (client == LDLM_NAMESPACE_SERVER) ? SHRINK_STOP : freed;
-+}
-+
-+#ifdef HAVE_SHRINKER_COUNT
-+static unsigned long ldlm_pools_srv_count(struct shrinker *s,
-+					  struct shrink_control *sc)
-+{
-+	return ldlm_pools_count(LDLM_NAMESPACE_SERVER, sc->gfp_mask);
-+}
-+
-+static unsigned long ldlm_pools_srv_scan(struct shrinker *s,
-+					 struct shrink_control *sc)
-+{
-+	return ldlm_pools_scan(LDLM_NAMESPACE_SERVER, sc->nr_to_scan,
-+			       sc->gfp_mask);
-+}
-+
-+static unsigned long ldlm_pools_cli_count(struct shrinker *s, struct shrink_control *sc)
-+{
-+	return ldlm_pools_count(LDLM_NAMESPACE_CLIENT, sc->gfp_mask);
-+}
-+
-+static unsigned long ldlm_pools_cli_scan(struct shrinker *s,
-+					 struct shrink_control *sc)
-+{
-+	return ldlm_pools_scan(LDLM_NAMESPACE_CLIENT, sc->nr_to_scan,
-+			       sc->gfp_mask);
-+}
-+
-+#else
-+/*
-+ * Cancel \a nr locks from all namespaces (if possible). Returns number of
-+ * cached locks after shrink is finished. All namespaces are asked to
-+ * cancel approximately equal amount of locks to keep balancing.
-+ */
-+static int ldlm_pools_shrink(ldlm_side_t client, int nr,
-+			     unsigned int gfp_mask)
-+{
-+	unsigned int total = 0;
-+
-+	if (client == LDLM_NAMESPACE_CLIENT && nr != 0 &&
-+	    !(gfp_mask & __GFP_FS))
-+		return -1;
-+
-+	CDEBUG(D_DLMTRACE, "Request to shrink %d %s locks from all pools\n",
-+	       nr, client == LDLM_NAMESPACE_CLIENT ? "client" : "server");
-+
-+	total = ldlm_pools_count(client, gfp_mask);
-+
-+	if (nr == 0 || total == 0)
-+		return total;
-+
-+	return ldlm_pools_scan(client, nr, gfp_mask);
- }
- 
- static int ldlm_pools_srv_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
-@@ -1162,6 +1214,8 @@ static int ldlm_pools_cli_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
-                                  shrink_param(sc, gfp_mask));
- }
- 
-+#endif /* HAVE_SHRINKER_COUNT */
-+
- int ldlm_pools_recalc(ldlm_side_t client)
- {
-         __u32 nr_l = 0, nr_p = 0, l;
-@@ -1418,16 +1472,18 @@ static void ldlm_pools_thread_stop(void)
- int ldlm_pools_init(void)
- {
- 	int rc;
-+	DEF_SHRINKER_VAR(shsvar, ldlm_pools_srv_shrink,
-+			 ldlm_pools_srv_count, ldlm_pools_srv_scan);
-+	DEF_SHRINKER_VAR(shcvar, ldlm_pools_cli_shrink,
-+			 ldlm_pools_cli_count, ldlm_pools_cli_scan);
- 	ENTRY;
- 
- 	rc = ldlm_pools_thread_start();
- 	if (rc == 0) {
- 		ldlm_pools_srv_shrinker =
--			set_shrinker(DEFAULT_SEEKS,
--					 ldlm_pools_srv_shrink);
-+			set_shrinker(DEFAULT_SEEKS, &shsvar);
- 		ldlm_pools_cli_shrinker =
--			set_shrinker(DEFAULT_SEEKS,
--					 ldlm_pools_cli_shrink);
-+			set_shrinker(DEFAULT_SEEKS, &shcvar);
- 	}
- 	RETURN(rc);
- }
-diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c
-index 1304e95..77aa930 100644
---- a/lustre/obdclass/lu_object.c
-+++ b/lustre/obdclass/lu_object.c
-@@ -1884,6 +1884,69 @@ static void lu_site_stats_get(cfs_hash_t *hs,
- 
- #ifdef __KERNEL__
- 
-+static unsigned long lu_cache_shrink_count(struct shrinker *sk,
-+					   struct shrink_control *sc)
-+{
-+	lu_site_stats_t stats;
-+	struct lu_site *s;
-+	struct lu_site *tmp;
-+	unsigned long cached = 0;
-+
-+	if (!(sc->gfp_mask & __GFP_FS))
-+		return 0;
-+
-+	mutex_lock(&lu_sites_guard);
-+	list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
-+		memset(&stats, 0, sizeof(stats));
-+		lu_site_stats_get(s->ls_obj_hash, &stats, 0);
-+		cached += stats.lss_total - stats.lss_busy;
-+	}
-+	mutex_unlock(&lu_sites_guard);
-+
-+	cached = (cached / 100) * sysctl_vfs_cache_pressure;
-+	CDEBUG(D_INODE, "%ld objects cached\n", cached);
-+	return cached;
-+}
-+
-+static unsigned long lu_cache_shrink_scan(struct shrinker *sk,
-+					  struct shrink_control *sc)
-+{
-+	struct lu_site *s;
-+	struct lu_site *tmp;
-+	unsigned long remain = sc->nr_to_scan, freed = remain;
-+	LIST_HEAD(splice);
-+
-+	if (!(sc->gfp_mask & __GFP_FS))
-+		/* We must not take the lu_sites_guard lock when
-+		 * __GFP_FS is *not* set because of the deadlock
-+		 * possibility detailed above. Additionally,
-+		 * since we cannot determine the number of
-+		 * objects in the cache without taking this
-+		 * lock, we're in a particularly tough spot. As
-+		 * a result, we'll just lie and say our cache is
-+		 * empty. This _should_ be ok, as we can't
-+		 * reclaim objects when __GFP_FS is *not* set
-+		 * anyways.
-+		 */
-+		return SHRINK_STOP;
-+
-+	mutex_lock(&lu_sites_guard);
-+	list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
-+		freed = lu_site_purge(&lu_shrink_env, s, freed);
-+		remain -= freed;
-+		/*
-+		 * Move just shrunk site to the tail of site list to
-+		 * assure shrinking fairness.
-+		 */
-+		list_move_tail(&s->ls_linkage, &splice);
-+	}
-+	list_splice(&splice, lu_sites.prev);
-+	mutex_unlock(&lu_sites_guard);
-+
-+	return sc->nr_to_scan - remain;
-+}
-+
-+#ifndef HAVE_SHRINKER_COUNT
- /*
-  * There exists a potential lock inversion deadlock scenario when using
-  * Lustre on top of ZFS. This occurs between one of ZFS's
-@@ -1904,59 +1967,29 @@ static void lu_site_stats_get(cfs_hash_t *hs,
-  */
- static int lu_cache_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
- {
--        lu_site_stats_t stats;
--        struct lu_site *s;
--        struct lu_site *tmp;
-         int cached = 0;
--        int remain = shrink_param(sc, nr_to_scan);
--        CFS_LIST_HEAD(splice);
--
--	if (!(shrink_param(sc, gfp_mask) & __GFP_FS)) {
--		if (remain != 0)
--                        return -1;
--		else
--			/* We must not take the lu_sites_guard lock when
--			 * __GFP_FS is *not* set because of the deadlock
--			 * possibility detailed above. Additionally,
--			 * since we cannot determine the number of
--			 * objects in the cache without taking this
--			 * lock, we're in a particularly tough spot. As
--			 * a result, we'll just lie and say our cache is
--			 * empty. This _should_ be ok, as we can't
--			 * reclaim objects when __GFP_FS is *not* set
--			 * anyways.
--			 */
--			return 0;
--        }
-+	struct shrink_control scv = {
-+		 .nr_to_scan = shrink_param(sc, nr_to_scan),
-+		 .gfp_mask   = shrink_param(sc, gfp_mask)
-+	};
-+#if !defined(HAVE_SHRINKER_WANT_SHRINK_PTR) && !defined(HAVE_SHRINK_CONTROL)
-+	struct shrinker* shrinker = NULL;
-+#endif
- 
--	CDEBUG(D_INODE, "Shrink %d objects\n", remain);
- 
--	mutex_lock(&lu_sites_guard);
--        cfs_list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
--                if (shrink_param(sc, nr_to_scan) != 0) {
--                        remain = lu_site_purge(&lu_shrink_env, s, remain);
--                        /*
--                         * Move just shrunk site to the tail of site list to
--                         * assure shrinking fairness.
--                         */
--                        cfs_list_move_tail(&s->ls_linkage, &splice);
--                }
-+	CDEBUG(D_INODE, "Shrink %lu objects\n", scv.nr_to_scan);
- 
--                memset(&stats, 0, sizeof(stats));
--                lu_site_stats_get(s->ls_obj_hash, &stats, 0);
--                cached += stats.lss_total - stats.lss_busy;
--                if (shrink_param(sc, nr_to_scan) && remain <= 0)
--                        break;
--        }
--        cfs_list_splice(&splice, lu_sites.prev);
--	mutex_unlock(&lu_sites_guard);
-+	lu_cache_shrink_scan(shrinker, &scv);
- 
--        cached = (cached / 100) * sysctl_vfs_cache_pressure;
--        if (shrink_param(sc, nr_to_scan) == 0)
--                CDEBUG(D_INODE, "%d objects cached\n", cached);
--        return cached;
-+	cached = lu_cache_shrink_count(shrinker, &scv);
-+	if (scv.nr_to_scan == 0)
-+		CDEBUG(D_INODE, "%d objects cached\n", cached);
-+	return cached;
- }
- 
-+#endif /* HAVE_SHRINKER_COUNT */
-+
-+
- /*
-  * Debugging stuff.
-  */
-@@ -2005,11 +2038,6 @@ void lu_context_keys_dump(void)
-         }
- }
- EXPORT_SYMBOL(lu_context_keys_dump);
--#else  /* !__KERNEL__ */
--static int lu_cache_shrink(int nr, unsigned int gfp_mask)
--{
--        return 0;
--}
- #endif /* __KERNEL__ */
- 
- /**
-@@ -2018,6 +2046,8 @@ static int lu_cache_shrink(int nr, unsigned int gfp_mask)
- int lu_global_init(void)
- {
-         int result;
-+	DEF_SHRINKER_VAR(shvar, lu_cache_shrink,
-+			 lu_cache_shrink_count, lu_cache_shrink_scan);
- 
-         CDEBUG(D_INFO, "Lustre LU module (%p).\n", &lu_keys);
- 
-@@ -2046,7 +2076,7 @@ int lu_global_init(void)
-          * inode, one for ea. Unfortunately setting this high value results in
-          * lu_object/inode cache consuming all the memory.
-          */
--	lu_site_shrinker = set_shrinker(DEFAULT_SEEKS, lu_cache_shrink);
-+	lu_site_shrinker = set_shrinker(DEFAULT_SEEKS, &shvar);
-         if (lu_site_shrinker == NULL)
-                 return -ENOMEM;
- 
-diff --git a/lustre/ptlrpc/sec_bulk.c b/lustre/ptlrpc/sec_bulk.c
-index bb1e782..9da60ad 100644
---- a/lustre/ptlrpc/sec_bulk.c
-+++ b/lustre/ptlrpc/sec_bulk.c
-@@ -232,30 +232,46 @@ static void enc_pools_release_free_pages(long npages)
- }
- 
- /*
-- * could be called frequently for query (@nr_to_scan == 0).
-  * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
-  */
--static int enc_pools_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
-+static unsigned long enc_pools_shrink_count(struct shrinker *s,
-+					    struct shrink_control *sc)
- {
--	if (unlikely(shrink_param(sc, nr_to_scan) != 0)) {
-+	/*
-+	 * if no pool access for a long time, we consider it's fully idle.
-+	 * a little race here is fine.
-+	 */
-+	if (unlikely(cfs_time_current_sec() - page_pools.epp_last_access >
-+		     CACHE_QUIESCENT_PERIOD)) {
- 		spin_lock(&page_pools.epp_lock);
--                shrink_param(sc, nr_to_scan) = min_t(unsigned long,
--                                                   shrink_param(sc, nr_to_scan),
--                                                   page_pools.epp_free_pages -
--                                                   PTLRPC_MAX_BRW_PAGES);
--                if (shrink_param(sc, nr_to_scan) > 0) {
--                        enc_pools_release_free_pages(shrink_param(sc,
--                                                                  nr_to_scan));
--                        CDEBUG(D_SEC, "released %ld pages, %ld left\n",
--                               (long)shrink_param(sc, nr_to_scan),
--                               page_pools.epp_free_pages);
--
--                        page_pools.epp_st_shrinks++;
--                        page_pools.epp_last_shrink = cfs_time_current_sec();
--                }
-+		page_pools.epp_idle_idx = IDLE_IDX_MAX;
- 		spin_unlock(&page_pools.epp_lock);
- 	}
- 
-+	LASSERT(page_pools.epp_idle_idx <= IDLE_IDX_MAX);
-+	return max((int)page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES, 0) *
-+		(IDLE_IDX_MAX - page_pools.epp_idle_idx) / IDLE_IDX_MAX;
-+}
-+
-+/*
-+ * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
-+ */
-+static unsigned long enc_pools_shrink_scan(struct shrinker *s,
-+					   struct shrink_control *sc)
-+{
-+	spin_lock(&page_pools.epp_lock);
-+	sc->nr_to_scan = min_t(unsigned long, sc->nr_to_scan,
-+			      page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES);
-+	if (sc->nr_to_scan > 0) {
-+		enc_pools_release_free_pages(sc->nr_to_scan);
-+		CDEBUG(D_SEC, "released %ld pages, %ld left\n",
-+		       (long)sc->nr_to_scan, page_pools.epp_free_pages);
-+
-+		page_pools.epp_st_shrinks++;
-+		page_pools.epp_last_shrink = cfs_time_current_sec();
-+	}
-+	spin_unlock(&page_pools.epp_lock);
-+
- 	/*
- 	 * if no pool access for a long time, we consider it's fully idle.
- 	 * a little race here is fine.
-@@ -268,10 +284,31 @@ static int enc_pools_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
- 	}
- 
- 	LASSERT(page_pools.epp_idle_idx <= IDLE_IDX_MAX);
--	return max((int)page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES, 0) *
--		(IDLE_IDX_MAX - page_pools.epp_idle_idx) / IDLE_IDX_MAX;
-+	return sc->nr_to_scan;
-+}
-+
-+#ifndef HAVE_SHRINKER_COUNT
-+/*
-+ * could be called frequently for query (@nr_to_scan == 0).
-+ * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
-+ */
-+static int enc_pools_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
-+{
-+	struct shrink_control scv = {
-+		.nr_to_scan = shrink_param(sc, nr_to_scan),
-+		.gfp_mask   = shrink_param(sc, gfp_mask)
-+	};
-+#if !defined(HAVE_SHRINKER_WANT_SHRINK_PTR) && !defined(HAVE_SHRINK_CONTROL)
-+	struct shrinker* shrinker = NULL;
-+#endif
-+
-+	enc_pools_shrink_scan(shrinker, &scv);
-+
-+	return enc_pools_shrink_count(shrinker, &scv);
- }
- 
-+#endif /* HAVE_SHRINKER_COUNT */
-+
- static inline
- int npages_to_npools(unsigned long npages)
- {
-@@ -706,6 +743,8 @@ static inline void enc_pools_free(void)
- 
- int sptlrpc_enc_pool_init(void)
- {
-+	DEF_SHRINKER_VAR(shvar, enc_pools_shrink,
-+			 enc_pools_shrink_count, enc_pools_shrink_scan);
- 	/*
- 	 * maximum capacity is 1/8 of total physical memory.
- 	 * is the 1/8 a good number?
-@@ -741,8 +780,7 @@ int sptlrpc_enc_pool_init(void)
-         if (page_pools.epp_pools == NULL)
-                 return -ENOMEM;
- 
--	pools_shrinker = set_shrinker(pools_shrinker_seeks,
--                                          enc_pools_shrink);
-+	pools_shrinker = set_shrinker(pools_shrinker_seeks, &shvar);
-         if (pools_shrinker == NULL) {
-                 enc_pools_free();
-                 return -ENOMEM;
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 695b2f0..3c8af2d 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -1,4 +1,4 @@
-# Copyright 1999-2015 Gentoo Foundation
+# Copyright 1999-2016 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
@@ -41,9 +41,6 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
-	"${DISTDIR}/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
 	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-05-29 12:44 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-05-29 12:44 UTC (permalink / raw
  To: gentoo-commits

commit:     340ea934e2a39a73d3778bd2f2ed9837cf0d11ae
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu May 29 12:43:42 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu May 29 12:43:42 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=340ea934

Update to latest source

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                                       | 7 +++++++
 ...0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch | 2 +-
 ...0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch | 2 +-
 .../0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch  | 2 +-
 sys-cluster/lustre/lustre-9999.ebuild                              | 2 ++
 5 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 8014a14..850f52b 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,13 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  29 May 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  lustre-9999.ebuild:
+  Update to latest source
+
   24 May 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
   +files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index 88ac650..2860b4b 100644
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From f7db8753694155124caf9d05137bbad14434c4f0 Mon Sep 17 00:00:00 2001
+From 4e55f198a630e3beb9daad9bf72133da44ca7242 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 23 Apr 2014 09:31:09 -0400
 Subject: [PATCH 1/3] LU-3319 procfs: update zfs proc handling to seq_files

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index b66850f..813446c 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,4 +1,4 @@
-From c988772aa72b546f5b40187e964aac101e764f2e Mon Sep 17 00:00:00 2001
+From 9071634fd9db37a6121fdfbd817162f782661202 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 5 May 2014 10:02:21 -0400
 Subject: [PATCH 2/3] LU-3319 procfs: move mdd/ofd proc handling to seq_files

diff --git a/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index 3714c1e..ea23076 100644
--- a/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,4 +1,4 @@
-From f11e6773afec21cd6976bad86b12b5de791ccda7 Mon Sep 17 00:00:00 2001
+From 871751ab815067744064132b76aaf4857c720fc9 Mon Sep 17 00:00:00 2001
 From: Yang Sheng <yang.sheng@intel.com>
 Date: Thu, 24 Apr 2014 11:43:09 +0800
 Subject: [PATCH 3/3] LU-4416 mm: Backport shrinker changes from upstream

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 479836e..7d8eaef 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -6,6 +6,7 @@ EAPI=5
 
 WANT_AUTOCONF="2.5"
 WANT_AUTOMAKE="1.10"
+WANT_LIBTOOL="latest"
 
 if [[ $PV = *9999* ]]; then
 	KEYWORDS=""
@@ -63,6 +64,7 @@ src_prepare() {
 	for dir in $DIRS ; do
 		ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I $dir/autoconf"
 	done
+	_elibtoolize -q
 	eaclocal -I config $ACLOCAL_FLAGS
 	eautoheader
 	eautomake


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-05-24 22:55 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-05-24 22:55 UTC (permalink / raw
  To: gentoo-commits

commit:     8a419db4e78dfe0801ecf5f43f5bb29fdcdb59f7
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Sat May 24 22:54:14 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Sat May 24 22:54:14 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=8a419db4

Update lustre patches

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |  12 +
 ...cfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch | 123 ---
 ...fs-update-zfs-proc-handling-to-seq_files.patch} |   4 +-
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} |   4 +-
 ...rocfs-move-osp-proc-handling-to-seq_files.patch | 842 ---------------------
 ...-Backport-shrinker-changes-from-upstream.patch} |   4 +-
 sys-cluster/lustre/lustre-9999.ebuild              |   8 +-
 7 files changed, 21 insertions(+), 976 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 257e94a..8014a14 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,18 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  24 May 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  +files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  -files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
+  -files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  -files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  -files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   20 May 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch,
   +files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
deleted file mode 100644
index 326e02b..0000000
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
+++ /dev/null
@@ -1,123 +0,0 @@
-From d6775461847a80d82de476b78fc2322702c516af Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 25 Feb 2014 12:54:05 -0500
-Subject: [PATCH 1/5] LU-3319 procfs: Move NRS TBF proc handling to seq_files
-
-With newer kernels moving their proc file system handling
-to seq_files this patch migrates the proc handling for NRS
-TBF to this new approach.
-
-Change-Id: I121755b611296bf7b9527de65d0e6cf8c4980151
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
----
- lustre/ptlrpc/nrs_tbf.c | 35 ++++++++++++++---------------------
- 1 file changed, 14 insertions(+), 21 deletions(-)
-
-diff --git a/lustre/ptlrpc/nrs_tbf.c b/lustre/ptlrpc/nrs_tbf.c
-index f0ab74d..046e509 100644
---- a/lustre/ptlrpc/nrs_tbf.c
-+++ b/lustre/ptlrpc/nrs_tbf.c
-@@ -1572,30 +1572,26 @@ static void nrs_tbf_req_stop(struct ptlrpc_nrs_policy *policy,
-  */
- #define LPROCFS_NRS_RATE_MAX		65535
- 
--static int ptlrpc_lprocfs_rd_nrs_tbf_rule(char *page, char **start,
--					   off_t off, int count, int *eof,
--					   void *data)
-+static int
-+ptlrpc_lprocfs_nrs_tbf_rule_seq_show(struct seq_file *m, void *data)
- {
--	struct ptlrpc_service	    *svc = data;
-+	struct ptlrpc_service	    *svc = m->private;
- 	int			     rc;
- 	int			     rc2;
- 	struct nrs_tbf_dump	     dump;
- 
--	rc2 = snprintf(page, count, "regular_requests:\n");
-+	rc2 = seq_printf(m, "regular_requests:\n");
- 	/**
- 	 * Perform two separate calls to this as only one of the NRS heads'
- 	 * policies may be in the ptlrpc_nrs_pol_state::NRS_POL_STATE_STARTED or
- 	 * ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPING state.
- 	 */
- 	dump.td_length = 0;
--	dump.td_buff = page + rc2;
--	dump.td_size = count - rc2;
- 	rc = ptlrpc_nrs_policy_control(svc, PTLRPC_NRS_QUEUE_REG,
- 				       NRS_POL_NAME_TBF,
- 				       NRS_CTL_TBF_RD_RULE,
- 				       false, &dump);
- 	if (rc == 0) {
--		*eof = 1;
- 		rc2 += dump.td_length;
- 		/**
- 		 * Ignore -ENODEV as the regular NRS head's policy may be in the
-@@ -1608,16 +1604,13 @@ static int ptlrpc_lprocfs_rd_nrs_tbf_rule(char *page, char **start,
- 	if (!nrs_svc_has_hp(svc))
- 		goto no_hp;
- 
--	rc2 += snprintf(page + rc2, count - rc2, "high_priority_requests:\n");
-+	rc2 += seq_printf(m, "high_priority_requests:\n");
- 	dump.td_length = 0;
--	dump.td_buff = page + rc2;
--	dump.td_size = count - rc2;
- 	rc = ptlrpc_nrs_policy_control(svc, PTLRPC_NRS_QUEUE_HP,
- 				       NRS_POL_NAME_TBF,
- 				       NRS_CTL_TBF_RD_RULE,
- 				       false, &dump);
- 	if (rc == 0) {
--		*eof = 1;
- 		rc2 += dump.td_length;
- 		/**
- 		 * Ignore -ENODEV as the high priority NRS head's policy may be
-@@ -1762,11 +1755,12 @@ out:
- 
- extern struct nrs_core nrs_core;
- #define LPROCFS_WR_NRS_TBF_MAX_CMD (4096)
--static int ptlrpc_lprocfs_wr_nrs_tbf_rule(struct file *file,
--					  const char *buffer,
--					  unsigned long count, void *data)
-+static ssize_t
-+ptlrpc_lprocfs_nrs_tbf_rule_seq_write(struct file *file, const char *buffer,
-+				      size_t count, loff_t *off)
- {
--	struct ptlrpc_service	  *svc = data;
-+	struct seq_file		  *m = file->private_data;
-+	struct ptlrpc_service	  *svc = m->private;
- 	char			  *kernbuf;
- 	char			  *val;
- 	int			   rc;
-@@ -1830,7 +1824,7 @@ out_free_kernbuff:
- out:
- 	return rc ? rc : count;
- }
--
-+LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_tbf_rule);
- 
- /**
-  * Initializes a TBF policy's lprocfs interface for service \a svc
-@@ -1843,10 +1837,9 @@ out:
- int nrs_tbf_lprocfs_init(struct ptlrpc_service *svc)
- {
- 	int	rc;
--	struct lprocfs_vars nrs_tbf_lprocfs_vars[] = {
-+	struct lprocfs_seq_vars nrs_tbf_lprocfs_vars[] = {
- 		{ .name		= "nrs_tbf_rule",
--		  .read_fptr	= ptlrpc_lprocfs_rd_nrs_tbf_rule,
--		  .write_fptr	= ptlrpc_lprocfs_wr_nrs_tbf_rule,
-+		  .fops		= &ptlrpc_lprocfs_nrs_tbf_rule_fops,
- 		  .data = svc },
- 		{ NULL }
- 	};
-@@ -1854,7 +1847,7 @@ int nrs_tbf_lprocfs_init(struct ptlrpc_service *svc)
- 	if (svc->srv_procroot == NULL)
- 		return 0;
- 
--	rc = lprocfs_add_vars(svc->srv_procroot, nrs_tbf_lprocfs_vars, NULL);
-+	rc = lprocfs_seq_add_vars(svc->srv_procroot, nrs_tbf_lprocfs_vars, NULL);
- 
- 	return rc;
- }
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
similarity index 98%
rename from sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index bcaa434..88ac650 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From c16260bdb1cd63a50d37f2161279fc71b9e03efb Mon Sep 17 00:00:00 2001
+From f7db8753694155124caf9d05137bbad14434c4f0 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 23 Apr 2014 09:31:09 -0400
-Subject: [PATCH 2/5] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 1/3] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 99%
rename from sys-cluster/lustre/files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 95b5c90..b66850f 100644
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 46c87e9a30b44d31a2551217da6818ffbb5eed02 Mon Sep 17 00:00:00 2001
+From c988772aa72b546f5b40187e964aac101e764f2e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 5 May 2014 10:02:21 -0400
-Subject: [PATCH 4/5] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 2/3] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
deleted file mode 100644
index 969c229..0000000
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ /dev/null
@@ -1,842 +0,0 @@
-From 63f3f2e29c2745b3491712a4a3f7a868ec6ece8d Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 24 Apr 2014 12:04:57 -0400
-Subject: [PATCH 3/5] LU-3319 procfs: move osp proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the osp
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
----
- lustre/osp/lproc_osp.c    | 431 ++++++++++++++++++++++++----------------------
- lustre/osp/lwp_dev.c      |  19 +-
- lustre/osp/osp_dev.c      |  32 ++--
- lustre/osp/osp_internal.h |   2 -
- 4 files changed, 242 insertions(+), 242 deletions(-)
-
-diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c
-index 118c4df..c23ce18 100644
---- a/lustre/osp/lproc_osp.c
-+++ b/lustre/osp/lproc_osp.c
-@@ -45,24 +45,24 @@
- #include "osp_internal.h"
- 
- #ifdef LPROCFS
--static int osp_rd_active(char *page, char **start, off_t off,
--			 int count, int *eof, void *data)
-+static int osp_active_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	int			 rc;
- 
- 	LPROCFS_CLIMP_CHECK(dev);
--	rc = snprintf(page, count, "%d\n",
--		      !dev->u.cli.cl_import->imp_deactive);
-+	rc = seq_printf(m, "%d\n", !dev->u.cli.cl_import->imp_deactive);
- 	LPROCFS_CLIMP_EXIT(dev);
- 	return rc;
- }
- 
--static int osp_wr_active(struct file *file, const char *buffer,
--			 unsigned long count, void *data)
-+static ssize_t
-+osp_active_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
- {
--	struct obd_device	*dev = data;
--	int			 val, rc;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
-+	int		   val, rc;
- 
- 	rc = lprocfs_write_helper(buffer, count, &val);
- 	if (rc)
-@@ -81,67 +81,61 @@ static int osp_wr_active(struct file *file, const char *buffer,
- 	LPROCFS_CLIMP_EXIT(dev);
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_active);
- 
--static int osp_rd_syn_in_flight(char *page, char **start, off_t off,
--				int count, int *eof, void *data)
-+static int osp_syn_in_flight_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%u\n", osp->opd_syn_rpc_in_flight);
--	return rc;
-+	return seq_printf(m, "%u\n", osp->opd_syn_rpc_in_flight);
- }
-+LPROC_SEQ_FOPS_RO(osp_syn_in_flight);
- 
--static int osp_rd_syn_in_prog(char *page, char **start, off_t off, int count,
--			      int *eof, void *data)
-+static int osp_syn_in_prog_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%u\n", osp->opd_syn_rpc_in_progress);
--	return rc;
-+	return seq_printf(m, "%u\n", osp->opd_syn_rpc_in_progress);
- }
-+LPROC_SEQ_FOPS_RO(osp_syn_in_prog);
- 
--static int osp_rd_syn_changes(char *page, char **start, off_t off,
--			      int count, int *eof, void *data)
-+static int osp_syn_changes_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%lu\n", osp->opd_syn_changes);
--	return rc;
-+	return seq_printf(m, "%lu\n", osp->opd_syn_changes);
- }
-+LPROC_SEQ_FOPS_RO(osp_syn_changes);
- 
--static int osp_rd_max_rpcs_in_flight(char *page, char **start, off_t off,
--				     int count, int *eof, void *data)
-+static int osp_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%u\n", osp->opd_syn_max_rpc_in_flight);
--	return rc;
-+	return seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_flight);
- }
- 
--static int osp_wr_max_rpcs_in_flight(struct file *file, const char *buffer,
--				     unsigned long count, void *data)
-+static ssize_t
-+osp_max_rpcs_in_flight_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device	*dev = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
- 	int			 val, rc;
- 
-@@ -158,25 +152,25 @@ static int osp_wr_max_rpcs_in_flight(struct file *file, const char *buffer,
- 	osp->opd_syn_max_rpc_in_flight = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_max_rpcs_in_flight);
- 
--static int osp_rd_max_rpcs_in_prog(char *page, char **start, off_t off,
--				   int count, int *eof, void *data)
-+static int osp_max_rpcs_in_prog_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%u\n", osp->opd_syn_max_rpc_in_progress);
--	return rc;
-+	return seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_progress);
- }
- 
--static int osp_wr_max_rpcs_in_prog(struct file *file, const char *buffer,
--				   unsigned long count, void *data)
-+static ssize_t
-+osp_max_rpcs_in_prog_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device	*dev = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
- 	int			 val, rc;
- 
-@@ -194,23 +188,25 @@ static int osp_wr_max_rpcs_in_prog(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_max_rpcs_in_prog);
- 
--static int osp_rd_create_count(char *page, char **start, off_t off, int count,
--			       int *eof, void *data)
-+static int osp_create_count_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, "%d\n", osp->opd_pre_grow_count);
-+	return seq_printf(m, "%d\n", osp->opd_pre_grow_count);
- }
- 
--static int osp_wr_create_count(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+static ssize_t
-+osp_create_count_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
- 	struct osp_device	*osp = lu2osp_dev(obd->obd_lu_dev);
- 	int			 val, rc, i;
- 
-@@ -242,23 +238,25 @@ static int osp_wr_create_count(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_create_count);
- 
--static int osp_rd_max_create_count(char *page, char **start, off_t off,
--				   int count, int *eof, void *data)
-+static int osp_max_create_count_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, "%d\n", osp->opd_pre_max_grow_count);
-+	return seq_printf(m, "%d\n", osp->opd_pre_max_grow_count);
- }
- 
--static int osp_wr_max_create_count(struct file *file, const char *buffer,
--				   unsigned long count, void *data)
-+static ssize_t
-+osp_max_create_count_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
- 	struct osp_device	*osp = lu2osp_dev(obd->obd_lu_dev);
- 	int			 val, rc;
- 
-@@ -281,89 +279,86 @@ static int osp_wr_max_create_count(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_max_create_count);
- 
--static int osp_rd_prealloc_next_id(char *page, char **start, off_t off,
--				   int count, int *eof, void *data)
-+static int osp_prealloc_next_id_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, "%u\n",
--			fid_oid(&osp->opd_pre_used_fid) + 1);
-+	return seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_used_fid) + 1);
- }
-+LPROC_SEQ_FOPS_RO(osp_prealloc_next_id);
- 
--static int osp_rd_prealloc_last_id(char *page, char **start, off_t off,
--				   int count, int *eof, void *data)
-+static int osp_prealloc_last_id_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, "%u\n",
--			fid_oid(&osp->opd_pre_last_created_fid));
-+	return seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_last_created_fid));
- }
-+LPROC_SEQ_FOPS_RO(osp_prealloc_last_id);
- 
--static int osp_rd_prealloc_next_seq(char *page, char **start, off_t off,
--				    int count, int *eof, void *data)
-+static int osp_prealloc_next_seq_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, LPX64"\n",
--			fid_seq(&osp->opd_pre_used_fid));
-+	return seq_printf(m, LPX64"\n", fid_seq(&osp->opd_pre_used_fid));
- }
-+LPROC_SEQ_FOPS_RO(osp_prealloc_next_seq);
- 
--static int osp_rd_prealloc_last_seq(char *page, char **start, off_t off,
--				    int count, int *eof, void *data)
-+static int osp_prealloc_last_seq_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, LPX64"\n",
-+	return seq_printf(m, LPX64"\n",
- 			fid_seq(&osp->opd_pre_last_created_fid));
- }
-+LPROC_SEQ_FOPS_RO(osp_prealloc_last_seq);
- 
--static int osp_rd_prealloc_reserved(char *page, char **start, off_t off,
--				    int count, int *eof, void *data)
-+static int osp_prealloc_reserved_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return 0;
- 
--	return snprintf(page, count, LPU64"\n", osp->opd_pre_reserved);
-+	return seq_printf(m, LPU64"\n", osp->opd_pre_reserved);
- }
-+LPROC_SEQ_FOPS_RO(osp_prealloc_reserved);
- 
--static int osp_rd_maxage(char *page, char **start, off_t off,
--			 int count, int *eof, void *data)
-+static int osp_maxage_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%u\n", osp->opd_statfs_maxage);
--	return rc;
-+	return seq_printf(m, "%u\n", osp->opd_statfs_maxage);
- }
- 
--static int osp_wr_maxage(struct file *file, const char *buffer,
--			 unsigned long count, void *data)
-+static ssize_t
-+osp_maxage_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
- {
--	struct obd_device	*dev = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
- 	int			 val, rc;
- 
-@@ -381,25 +376,23 @@ static int osp_wr_maxage(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_maxage);
- 
--static int osp_rd_pre_status(char *page, char **start, off_t off,
--			     int count, int *eof, void *data)
-+static int osp_pre_status_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL || osp->opd_pre == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%d\n", osp->opd_pre_status);
--	return rc;
-+	return seq_printf(m, "%d\n", osp->opd_pre_status);
- }
-+LPROC_SEQ_FOPS_RO(osp_pre_status);
- 
--static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
--				     int count, int *eof, void *data)
-+static int osp_destroys_in_flight_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *dev = data;
-+	struct obd_device *dev = m->private;
- 	struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev);
- 
- 	if (osp == NULL)
-@@ -411,43 +404,40 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
- 	 * - sync changes are zero - no llog records
- 	 * - sync in progress are zero - no RPCs in flight
- 	 */
--	return snprintf(page, count, "%lu\n",
--			osp->opd_syn_rpc_in_progress + osp->opd_syn_changes);
-+	return seq_printf(m, "%lu\n",
-+			  osp->opd_syn_rpc_in_progress + osp->opd_syn_changes);
- }
-+LPROC_SEQ_FOPS_RO(osp_destroys_in_flight);
- 
--static int osp_rd_old_sync_processed(char *page, char **start, off_t off,
--				     int count, int *eof, void *data)
-+static int osp_old_sync_processed_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*dev = data;
-+	struct obd_device	*dev = m->private;
- 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
--	int			 rc;
- 
- 	if (osp == NULL)
- 		return -EINVAL;
- 
--	rc = snprintf(page, count, "%d\n", osp->opd_syn_prev_done);
--	return rc;
-+	return seq_printf(m, "%d\n", osp->opd_syn_prev_done);
- }
-+LPROC_SEQ_FOPS_RO(osp_old_sync_processed);
- 
--static int osp_rd_lfsck_max_rpcs_in_flight(char *page, char **start, off_t off,
--					   int count, int *eof, void *data)
-+static int
-+osp_lfsck_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *dev = data;
-+	struct obd_device *dev = m->private;
- 	__u32 max;
--	int rc;
- 
--	*eof = 1;
- 	max = obd_get_max_rpcs_in_flight(&dev->u.cli);
--	rc = snprintf(page, count, "%u\n", max);
--
--	return rc;
-+	return seq_printf(m, "%u\n", max);
- }
- 
--static int osp_wr_lfsck_max_rpcs_in_flight(struct file *file,
--					   const char *buffer,
--					   unsigned long count, void *data)
-+static ssize_t
-+osp_lfsck_max_rpcs_in_flight_seq_write(struct file *file,
-+				       const char __user *buffer,
-+				       size_t count, loff_t *off)
- {
--	struct obd_device *dev = data;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	int val;
- 	int rc;
- 
-@@ -460,111 +450,148 @@ static int osp_wr_lfsck_max_rpcs_in_flight(struct file *file,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(osp_lfsck_max_rpcs_in_flight);
- 
--static struct lprocfs_vars lprocfs_osp_obd_vars[] = {
--	{ "uuid",		lprocfs_rd_uuid, 0, 0 },
--	{ "ping",		0, lprocfs_wr_ping, 0, 0, 0222 },
--	{ "connect_flags",	lprocfs_rd_connect_flags, 0, 0 },
--	{ "ost_server_uuid",	lprocfs_rd_server_uuid, 0, 0 },
--	{ "ost_conn_uuid",	lprocfs_rd_conn_uuid, 0, 0 },
--	{ "active",		osp_rd_active, osp_wr_active, 0 },
--	{ "max_rpcs_in_flight",	osp_rd_max_rpcs_in_flight,
--				osp_wr_max_rpcs_in_flight, 0 },
--	{ "max_rpcs_in_progress", osp_rd_max_rpcs_in_prog,
--				  osp_wr_max_rpcs_in_prog, 0 },
--	{ "create_count",	osp_rd_create_count,
--				osp_wr_create_count, 0 },
--	{ "max_create_count",	osp_rd_max_create_count,
--				osp_wr_max_create_count, 0 },
--	{ "prealloc_next_id",	osp_rd_prealloc_next_id, 0, 0 },
--	{ "prealloc_next_seq",  osp_rd_prealloc_next_seq, 0, 0 },
--	{ "prealloc_last_id",   osp_rd_prealloc_last_id,  0, 0 },
--	{ "prealloc_last_seq",  osp_rd_prealloc_last_seq, 0, 0 },
--	{ "prealloc_reserved",	osp_rd_prealloc_reserved, 0, 0 },
--	{ "timeouts",		lprocfs_rd_timeouts, 0, 0 },
--	{ "import",		lprocfs_rd_import, lprocfs_wr_import, 0 },
--	{ "state",		lprocfs_rd_state, 0, 0 },
--	{ "maxage",		osp_rd_maxage, osp_wr_maxage, 0 },
--	{ "prealloc_status",	osp_rd_pre_status, 0, 0 },
--	{ "sync_changes",	osp_rd_syn_changes, 0, 0 },
--	{ "sync_in_flight",	osp_rd_syn_in_flight, 0, 0 },
--	{ "sync_in_progress",	osp_rd_syn_in_prog, 0, 0 },
--	{ "old_sync_processed",	osp_rd_old_sync_processed, 0, 0 },
-+LPROC_SEQ_FOPS_WO_TYPE(osp, ping);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, uuid);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, connect_flags);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, server_uuid);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, conn_uuid);
- 
--	/* for compatibility reasons */
--	{ "destroys_in_flight",	osp_rd_destroys_in_flight, 0, 0 },
--	{ "lfsck_max_rpcs_in_flight", osp_rd_lfsck_max_rpcs_in_flight,
--				      osp_wr_lfsck_max_rpcs_in_flight, 0 },
--	{ 0 }
--};
-+static int osp_max_pages_per_rpc_seq_show(struct seq_file *m, void *v)
-+{
-+	return lprocfs_obd_max_pages_per_rpc_seq_show(m, m->private);
-+}
-+LPROC_SEQ_FOPS_RO(osp_max_pages_per_rpc);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, timeouts);
-+
-+LPROC_SEQ_FOPS_RW_TYPE(osp, import);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, state);
-+
-+static struct lprocfs_seq_vars lprocfs_osp_obd_vars[] = {
-+	{ .name =	"uuid",
-+	  .fops =	&osp_uuid_fops			},
-+	{ .name =	"ping",
-+	  .fops =	&osp_ping_fops,
-+	  .proc_mode =	0222				},
-+	{ .name =	"connect_flags",
-+	  .fops =	&osp_connect_flags_fops		},
-+	{ .name =	"ost_server_uuid",
-+	  .fops =	&osp_server_uuid_fops		},
-+	{ .name =	"ost_conn_uuid",
-+	  .fops =	&osp_conn_uuid_fops		},
-+	{ .name =	"active",
-+	  .fops =	&osp_active_fops		},
-+	{ .name =	"max_rpcs_in_flight",
-+	  .fops =	&osp_max_rpcs_in_flight_fops	},
-+	{ .name =	"max_rpcs_in_progress",
-+	  .fops =	&osp_max_rpcs_in_prog_fops	},
-+	{ .name =	"create_count",
-+	  .fops =	&osp_create_count_fops		},
-+	{ .name =	"max_create_count",
-+	  .fops =	&osp_max_create_count_fops	},
-+	{ .name =	"prealloc_next_id",
-+	  .fops =	&osp_prealloc_next_id_fops	},
-+	{ .name =	"prealloc_next_seq",
-+	  .fops =	&osp_prealloc_next_seq_fops	},
-+	{ .name =	"prealloc_last_id",
-+	  .fops =	&osp_prealloc_last_id_fops	},
-+	{ .name =	"prealloc_last_seq",
-+	  .fops =	&osp_prealloc_last_seq_fops	},
-+	{ .name =	"prealloc_reserved",
-+	  .fops =	&osp_prealloc_reserved_fops	},
-+	{ .name =	"timeouts",
-+	  .fops =	&osp_timeouts_fops		},
-+	{ .name =	"import",
-+	  .fops =	&osp_import_fops		},
-+	{ .name =	"state",
-+	  .fops =	&osp_state_fops			},
-+	{ .name =	"maxage",
-+	  .fops =	&osp_maxage_fops		},
-+	{ .name =	"prealloc_status",
-+	  .fops =	&osp_pre_status_fops		},
-+	{ .name =	"sync_changes",
-+	  .fops =	&osp_syn_changes_fops		},
-+	{ .name =	"sync_in_flight",
-+	  .fops =	&osp_syn_in_flight_fops		},
-+	{ .name =	"sync_in_progress",
-+	  .fops =	&osp_syn_in_prog_fops		},
-+	{ .name =	"old_sync_processed",
-+	  .fops =	&osp_old_sync_processed_fops	},
- 
--static struct lprocfs_vars lprocfs_osp_osd_vars[] = {
--	{ "blocksize",		lprocfs_dt_rd_blksize, 0, 0 },
--	{ "kbytestotal",	lprocfs_dt_rd_kbytestotal, 0, 0 },
--	{ "kbytesfree",		lprocfs_dt_rd_kbytesfree, 0, 0 },
--	{ "kbytesavail",	lprocfs_dt_rd_kbytesavail, 0, 0 },
--	{ "filestotal",		lprocfs_dt_rd_filestotal, 0, 0 },
--	{ "filesfree",		lprocfs_dt_rd_filesfree, 0, 0 },
-+	/* for compatibility reasons */
-+	{ .name =	"destroys_in_flight",
-+	  .fops =	&osp_destroys_in_flight_fops		},
-+	{ .name	=	"lfsck_max_rpcs_in_flight",
-+	  .fops	=	&osp_lfsck_max_rpcs_in_flight_fops	},
- 	{ 0 }
- };
- 
--static struct lprocfs_vars lprocfs_osp_module_vars[] = {
--	{ "num_refs",		lprocfs_rd_numrefs, 0, 0 },
-+LPROC_SEQ_FOPS_RO_TYPE(osp, dt_blksize);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, dt_kbytestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, dt_kbytesfree);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, dt_kbytesavail);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, dt_filestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(osp, dt_filesfree);
-+
-+static struct lprocfs_seq_vars lprocfs_osp_osd_vars[] = {
-+	{ .name =	"blocksize",
-+	  .fops =	&osp_dt_blksize_fops		},
-+	{ .name =	"kbytestotal",
-+	  .fops =	&osp_dt_kbytestotal_fops	},
-+	{ .name =	"kbytesfree",
-+	  .fops =	&osp_dt_kbytesfree_fops		},
-+	{ .name =	"kbytesavail",
-+	  .fops =	&osp_dt_kbytesavail_fops	},
-+	{ .name =	"filestotal",
-+	  .fops =	&osp_dt_filestotal_fops		},
-+	{ .name =	"filesfree",
-+	  .fops =	&osp_dt_filesfree_fops		},
- 	{ 0 }
- };
- 
--void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars)
--{
--	lvars->module_vars = lprocfs_osp_module_vars;
--	lvars->obd_vars = lprocfs_osp_obd_vars;
--}
--
- void osp_lprocfs_init(struct osp_device *osp)
- {
- 	struct obd_device	*obd = osp->opd_obd;
--	struct proc_dir_entry	*osc_proc_dir;
-+	struct proc_dir_entry	*osc_proc_dir = NULL;
-+	struct obd_type		*type;
- 	int			 rc;
- 
--	obd->obd_proc_entry = lprocfs_register(obd->obd_name,
--					       obd->obd_type->typ_procroot,
--					       lprocfs_osp_osd_vars,
--					       &osp->opd_dt_dev);
--	if (IS_ERR(obd->obd_proc_entry)) {
--		CERROR("%s: can't register in lprocfs: %ld\n",
--		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
--		obd->obd_proc_entry = NULL;
-+	obd->obd_vars = lprocfs_osp_obd_vars;
-+	if (lprocfs_seq_obd_setup(obd) != 0)
- 		return;
--	}
- 
--	rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd);
-+	rc = lprocfs_seq_add_vars(obd->obd_proc_entry, lprocfs_osp_osd_vars,
-+				  &osp->opd_dt_dev);
- 	if (rc) {
--		CERROR("%s: can't register in lprocfs: %ld\n",
--		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
-+		CERROR("%s: can't register in lprocfs, rc %d\n",
-+		       obd->obd_name, rc);
- 		return;
- 	}
- 
- 	ptlrpc_lprocfs_register_obd(obd);
- 
-+	if (osp->opd_connect_mdt || !strstr(obd->obd_name, "osc"))
-+		return;
-+
-+	/* If the real OSC is present which is the case for setups
-+	 * with both server and clients on the same node then use
-+	 * the OSC's proc root */
-+	type = class_search_type(LUSTRE_OSC_NAME);
-+	if (type != NULL && type->typ_procroot != NULL)
-+		osc_proc_dir = type->typ_procroot;
-+	else
-+		osc_proc_dir = obd->obd_type->typ_procsym;
-+
-+	if (osc_proc_dir == NULL)
-+		return;
-+
- 	/* for compatibility we link old procfs's OSC entries to osp ones */
--	if (!osp->opd_connect_mdt) {
--		osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
--		if (osc_proc_dir) {
--			cfs_proc_dir_entry_t	*symlink = NULL;
--			char			*name;
--
--			OBD_ALLOC(name, strlen(obd->obd_name) + 1);
--			if (name == NULL)
--				return;
--
--			strcpy(name, obd->obd_name);
--			if (strstr(name, "osc"))
--				symlink = lprocfs_add_symlink(name,
--						osc_proc_dir, "../osp/%s",
--						obd->obd_name);
--			OBD_FREE(name, strlen(obd->obd_name) + 1);
--			osp->opd_symlink = symlink;
--		}
--	}
-+	osp->opd_symlink = lprocfs_add_symlink(obd->obd_name, osc_proc_dir,
-+					       "../osp/%s", obd->obd_name);
-+	if (osp->opd_symlink == NULL)
-+		CERROR("could not register OSC symlink for "
-+		       "/proc/fs/lustre/osp/%s.", obd->obd_name);
- }
- 
- #endif /* LPROCFS */
-diff --git a/lustre/osp/lwp_dev.c b/lustre/osp/lwp_dev.c
-index a73973a..c115ee6 100644
---- a/lustre/osp/lwp_dev.c
-+++ b/lustre/osp/lwp_dev.c
-@@ -184,25 +184,9 @@ const struct lu_device_operations lwp_lu_ops = {
- 	.ldo_process_config	= lwp_process_config,
- };
- 
--static struct lprocfs_vars lprocfs_lwp_module_vars[] = {
--	{ "num_refs",		lprocfs_rd_numrefs, 0, 0 },
--	{ 0 }
--};
--
--static struct lprocfs_vars lprocfs_lwp_obd_vars[] = {
--	{ 0 }
--};
--
--void lprocfs_lwp_init_vars(struct lprocfs_static_vars *lvars)
--{
--	lvars->module_vars = lprocfs_lwp_module_vars;
--	lvars->obd_vars = lprocfs_lwp_obd_vars;
--}
--
- int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
- 	      struct lu_device_type *ldt, struct lustre_cfg *cfg)
- {
--	struct lprocfs_static_vars lvars = { 0 };
- 	int			   rc;
- 	ENTRY;
- 
-@@ -231,8 +215,7 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
- 		RETURN(rc);
- 	}
- 
--	lprocfs_lwp_init_vars(&lvars);
--	if (lprocfs_obd_setup(lwp->lpd_obd, lvars.obd_vars) == 0)
-+	if (lprocfs_seq_obd_setup(lwp->lpd_obd) == 0)
- 		ptlrpc_lprocfs_register_obd(lwp->lpd_obd);
- 
- 	RETURN(0);
-diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
-index 0a1cafa..27e3011 100644
---- a/lustre/osp/osp_dev.c
-+++ b/lustre/osp/osp_dev.c
-@@ -367,7 +367,7 @@ static int osp_process_config(const struct lu_env *env,
- 			      struct lu_device *dev, struct lustre_cfg *lcfg)
- {
- 	struct osp_device		*d = lu2osp_dev(dev);
--	struct lprocfs_static_vars	 lvars = { 0 };
-+	struct obd_device		*obd = d->opd_obd;
- 	int				 rc;
- 
- 	ENTRY;
-@@ -381,11 +381,9 @@ static int osp_process_config(const struct lu_env *env,
- 		rc = osp_shutdown(env, d);
- 		break;
- 	case LCFG_PARAM:
--		lprocfs_osp_init_vars(&lvars);
--
--		LASSERT(d->opd_obd);
--		rc = class_process_proc_param(PARAM_OSC, lvars.obd_vars,
--					      lcfg, d->opd_obd);
-+		LASSERT(obd);
-+		rc = class_process_proc_seq_param(PARAM_OSC, obd->obd_vars,
-+						  lcfg, obd);
- 		if (rc > 0)
- 			rc = 0;
- 		if (rc == -ENOSYS) {
-@@ -1241,33 +1239,27 @@ struct llog_operations osp_mds_ost_orig_logops;
- 
- static int __init osp_mod_init(void)
- {
--	struct lprocfs_static_vars	 lvars;
- 	struct obd_type *type;
--	int				 rc;
-+	int rc;
- 
- 	rc = lu_kmem_init(osp_caches);
- 	if (rc)
- 		return rc;
- 
--	lprocfs_osp_init_vars(&lvars);
- 
- 	rc = class_register_type(&osp_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				 lvars.module_vars,
-+				 NULL,
- #endif
- 				 LUSTRE_OSP_NAME, &osp_device_type);
--
--	/* create "osc" entry in procfs for compatibility purposes */
- 	if (rc != 0) {
- 		lu_kmem_fini(osp_caches);
- 		return rc;
- 	}
- 
--	lprocfs_lwp_init_vars(&lvars);
--
- 	rc = class_register_type(&lwp_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				 lvars.module_vars,
-+				 NULL,
- #endif
- 				 LUSTRE_LWP_NAME, &lwp_device_type);
- 	if (rc != 0) {
-@@ -1287,18 +1279,18 @@ static int __init osp_mod_init(void)
- 		return rc;
- 
- 	type = class_search_type(LUSTRE_OSP_NAME);
--	type->typ_procsym = lprocfs_register("osc", proc_lustre_root,
--					     NULL, NULL);
--	if (IS_ERR(type->typ_procsym))
-+	type->typ_procsym = lprocfs_seq_register("osc", proc_lustre_root,
-+						 NULL, NULL);
-+	if (IS_ERR(type->typ_procsym)) {
- 		CERROR("osp: can't create compat entry \"osc\": %d\n",
- 		       (int) PTR_ERR(type->typ_procsym));
-+		type->typ_procsym = NULL;
-+	}
- 	return rc;
- }
- 
- static void __exit osp_mod_exit(void)
- {
--	lprocfs_try_remove_proc_entry("osc", proc_lustre_root);
--
- 	class_unregister_type(LUSTRE_LWP_NAME);
- 	class_unregister_type(LUSTRE_OSP_NAME);
- 	lu_kmem_fini(osp_caches);
-diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
-index 3a5d0a6..f183955 100644
---- a/lustre/osp/osp_internal.h
-+++ b/lustre/osp/osp_internal.h
-@@ -586,7 +586,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
- int osp_init_pre_fid(struct osp_device *osp);
- 
- /* lproc_osp.c */
--void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars);
- void osp_lprocfs_init(struct osp_device *osp);
- 
- /* osp_sync.c */
-@@ -600,7 +599,6 @@ int osp_sync_fini(struct osp_device *d);
- void __osp_sync_check_for_work(struct osp_device *d);
- 
- /* lwp_dev.c */
--void lprocfs_lwp_init_vars(struct lprocfs_static_vars *lvars);
- extern struct obd_ops lwp_obd_device_ops;
- extern struct lu_device_type lwp_device_type;
- 
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
similarity index 99%
rename from sys-cluster/lustre/files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
rename to sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index 53e36b3..3714c1e 100644
--- a/sys-cluster/lustre/files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,7 +1,7 @@
-From 1d943d37d99ba9503561c341fc9cff5fcaa37441 Mon Sep 17 00:00:00 2001
+From f11e6773afec21cd6976bad86b12b5de791ccda7 Mon Sep 17 00:00:00 2001
 From: Yang Sheng <yang.sheng@intel.com>
 Date: Thu, 24 Apr 2014 11:43:09 +0800
-Subject: [PATCH 5/5] LU-4416 mm: Backport shrinker changes from upstream
+Subject: [PATCH 3/3] LU-4416 mm: Backport shrinker changes from upstream
 
 Convert shrinker to new count/scan API.
 --ptlrpc shrinker

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index d1fa334..479836e 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -40,11 +40,9 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
+	"${FILESDIR}/0001-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0002-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0003-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
 	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-05-20 13:44 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-05-20 13:44 UTC (permalink / raw
  To: gentoo-commits

commit:     74d0e393903bacf89db7bf392cddcd629bec24d1
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue May 20 13:43:57 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue May 20 13:43:57 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=74d0e393

Some more fixes

Signed-off-by: Alexey Shvetsov <alexxy <AT> gentoo.org>

---
 ...cfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch |   2 +-
 ...cfs-update-zfs-proc-handling-to-seq_files.patch |   2 +-
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |   2 +-
 ...procfs-symlinks-for-forward-compatibility.patch | 199 ---------------------
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} |  21 ++-
 ...-Backport-shrinker-changes-from-upstream.patch} |   4 +-
 sys-cluster/lustre/lustre-9999.ebuild              |   5 +-
 7 files changed, 17 insertions(+), 218 deletions(-)

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
index 1b625a8..326e02b 100644
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
 From d6775461847a80d82de476b78fc2322702c516af Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Feb 2014 12:54:05 -0500
-Subject: [PATCH 1/6] LU-3319 procfs: Move NRS TBF proc handling to seq_files
+Subject: [PATCH 1/5] LU-3319 procfs: Move NRS TBF proc handling to seq_files
 
 With newer kernels moving their proc file system handling
 to seq_files this patch migrates the proc handling for NRS

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index a44d310..bcaa434 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From c16260bdb1cd63a50d37f2161279fc71b9e03efb Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 23 Apr 2014 09:31:09 -0400
-Subject: [PATCH 2/6] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 2/5] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 5361aca..969c229 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From 63f3f2e29c2745b3491712a4a3f7a868ec6ece8d Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 24 Apr 2014 12:04:57 -0400
-Subject: [PATCH 3/6] LU-3319 procfs: move osp proc handling to seq_files
+Subject: [PATCH 3/5] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp

diff --git a/sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch b/sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
deleted file mode 100644
index b835516..0000000
--- a/sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
+++ /dev/null
@@ -1,199 +0,0 @@
-From ae21b1ad797973ad686dfc1c0cad8d313ddaf4d7 Mon Sep 17 00:00:00 2001
-From: Andreas Dilger <andreas.dilger@intel.com>
-Date: Tue, 6 May 2014 09:51:45 -0400
-Subject: [PATCH 4/6] LU-2096 lprocfs: symlinks for forward compatibility
-
-Currently, the "ofd" device is still named "obdfilter" in the Lustre
-configuration and in /proc/fs/lustre.  It would be better to name it
-"ost" which is has been the long term goal but retain the "ofd"
-module name.
-
-The per-OST device statistics should really be under "ost/{target}",
-like the per-MDT statistics are under "mdt/{target}" already in 2.x.
-
-Similarly, the "OSS" statistics have always been under "ost/OSS", but
-would be better in their own "oss" subdirectory much like what is done
-for "MDS" statistics.
-
-Add symlinks in lprocfs for "ost/OSS -> oss", "obdfilter -> ofd -> ost",
-and "obdfilter/{target} -> ost/{target}" for forward compatibility so
-that when we finally are able to make these changes to the module names
-userspace tools and scripts can have a smoother transition between
-Lustre versions.
-
-Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
-Signed-off-by: John L. Hammond <john.hammond@intel.com>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Ia0835e39aba7c8a540a6247bd3d56bc14e500c1e
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
----
- lustre/include/obd.h      |  4 ++--
- lustre/mgs/mgs_llog.c     |  4 ++--
- lustre/obdclass/genops.c  |  2 +-
- lustre/ofd/ofd_dev.c      | 32 +++++++++++++++++++++++++++++++-
- lustre/ofd/ofd_internal.h |  2 ++
- lustre/ost/ost_handler.c  | 12 +++++++++++-
- 6 files changed, 49 insertions(+), 7 deletions(-)
-
-diff --git a/lustre/include/obd.h b/lustre/include/obd.h
-index 3abcc4d..a79c901 100644
---- a/lustre/include/obd.h
-+++ b/lustre/include/obd.h
-@@ -516,8 +516,8 @@ struct niobuf_local {
- #define LUSTRE_MDS_NAME         "mds"
- #define LUSTRE_MDT_NAME         "mdt"
- #define LUSTRE_MDC_NAME         "mdc"
--#define LUSTRE_OSS_NAME         "ost"       /* FIXME change name to oss */
--#define LUSTRE_OST_NAME         "obdfilter" /* FIXME change name to ost */
-+#define LUSTRE_OSS_NAME         "oss"
-+#define LUSTRE_OST_NAME         "ost"
- #define LUSTRE_OSC_NAME         "osc"
- #define LUSTRE_LOV_NAME         "lov"
- #define LUSTRE_MGS_NAME         "mgs"
-diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c
-index aca72e3..cd1174d 100644
---- a/lustre/mgs/mgs_llog.c
-+++ b/lustre/mgs/mgs_llog.c
-@@ -2450,7 +2450,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
-         }
- 
-         /*
--        attach obdfilter ost1 ost1_UUID
-+	attach ost ost1 ost1_UUID
-         setup /dev/loop2 ldiskfs f|n errors=remount-ro,user_xattr
-         */
-         if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
-@@ -2466,7 +2466,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
-                 snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
-                          "%s_UUID", mti->mti_svname);
- 	rc = record_attach(env, llh, mti->mti_svname,
--                           "obdfilter"/*LUSTRE_OST_NAME*/, mti->mti_uuid);
-+			   "ost"/*LUSTRE_OST_NAME*/, mti->mti_uuid);
- 	if (rc)
- 		GOTO(out_end, rc);
- 	rc = record_setup(env, llh, mti->mti_svname,
-diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index d7c541a..1479f5a 100644
---- a/lustre/obdclass/genops.c
-+++ b/lustre/obdclass/genops.c
-@@ -121,7 +121,7 @@ struct obd_type *class_get_type(const char *name)
-         if (!type) {
-                 const char *modname = name;
- 
--		if (strcmp(modname, "obdfilter") == 0)
-+		if (strcmp(modname, "ost") == 0)
- 			modname = "ofd";
- 
- 		if (strcmp(modname, LUSTRE_LWP_NAME) == 0)
-diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 0f0d51a..b597b03 100644
---- a/lustre/ofd/ofd_dev.c
-+++ b/lustre/ofd/ofd_dev.c
-@@ -2375,10 +2375,23 @@ static struct lu_device_type ofd_device_type = {
- 	.ldt_ctx_tags	= LCT_DT_THREAD
- };
- 
-+/*
-+ * In the normal case all we have one symlink, type->typ_procsym to
-+ * address the renaming of proc directories due to the OSD api
-+ * introducton. OFD is special in that this subsystem the name has
-+ * changed from obdfilter to ofd to lastly ost. So we need two
-+ * symlinks to point to "ost". Hopefully in 2.9 we can removal all
-+ * this symlink madness.
-+ *
-+ * Symlink called "obdfilter" that points to  "ost" directory.
-+ */
-+static struct proc_dir_entry *ofd_symlink;
-+
- int __init ofd_init(void)
- {
- 	struct lprocfs_static_vars	lvars;
--	int				rc;
-+	struct obd_type *type;
-+	int rc;
- 
- 	rc = lu_kmem_init(ofd_caches);
- 	if (rc)
-@@ -2397,13 +2410,30 @@ int __init ofd_init(void)
- 				 lvars.module_vars,
- #endif
- 				 LUSTRE_OST_NAME, &ofd_device_type);
-+
-+	/* For forward compatibility symlink "obdfilter" and "ofd" to "ost"
-+	 * in procfs. Remove the symlinks entirely when access via
-+	 * "obdfilter/ofd" can be deprecated, maybe 2.9? */
-+	type = class_search_type(LUSTRE_OST_NAME);
-+	LASSERT(type != NULL);
-+	type->typ_procsym = lprocfs_add_symlink("ofd", proc_lustre_root,
-+						"ost");
-+
-+	ofd_symlink = lprocfs_add_symlink("obdfilter", proc_lustre_root,
-+					  "ost");
- 	return rc;
- }
- 
- void __exit ofd_exit(void)
- {
-+	struct obd_type *type = class_search_type(LUSTRE_OST_NAME);
-+
- 	ofd_fmd_exit();
- 	lu_kmem_fini(ofd_caches);
-+	if (ofd_symlink)
-+		lprocfs_remove(&ofd_symlink);
-+	if (type->typ_procsym)
-+		lprocfs_remove(&type->typ_procsym);
- 	class_unregister_type(LUSTRE_OST_NAME);
- }
- 
-diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index 4f12506..98a5cba 100644
---- a/lustre/ofd/ofd_internal.h
-+++ b/lustre/ofd/ofd_internal.h
-@@ -193,6 +193,8 @@ struct ofd_device {
- 	struct ptlrpc_thread	 ofd_inconsistency_thread;
- 	struct list_head	 ofd_inconsistency_list;
- 	spinlock_t		 ofd_inconsistency_lock;
-+	/* create a symlink "obdfilter" from the "ost" directory */
-+	struct proc_dir_entry	*ofd_symlink;
- };
- 
- static inline struct ofd_device *ofd_dev(struct lu_device *d)
-diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
-index bae0a40..02ddb87 100644
---- a/lustre/ost/ost_handler.c
-+++ b/lustre/ost/ost_handler.c
-@@ -95,13 +95,20 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
-                 RETURN(rc);
- 
- #ifdef LPROCFS
-+	obd->obd_type->typ_procsym = lprocfs_add_symlink("ost/OSS", proc_lustre_root,
-+							 "../oss/OSS");
-+	if (IS_ERR(obd->obd_type->typ_procsym)) {
-+		CERROR("ost: can't create compat entry \"ost/OSS\": %d\n",
-+		       (int)PTR_ERR(obd->obd_type->typ_procsym));
-+		obd->obd_type->typ_procsym = NULL;
-+	}
- 	obd->obd_vars = lprocfs_ost_obd_vars;
- 	lprocfs_seq_obd_setup(obd);
- #endif
- 	mutex_init(&ost->ost_health_mutex);
- 
- 	svc_conf = (typeof(svc_conf)) {
--		.psc_name		= LUSTRE_OSS_NAME,
-+		.psc_name		= "ost",
- 		.psc_watchdog_factor	= OSS_SERVICE_WATCHDOG_FACTOR,
- 		.psc_buf		= {
- 			.bc_nbufs		= OST_NBUFS,
-@@ -379,6 +386,9 @@ static int ost_cleanup(struct obd_device *obd)
- 
- 	mutex_unlock(&ost->ost_health_mutex);
- 
-+	if (obd->obd_type->typ_procsym)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
-+
- 	lprocfs_obd_cleanup(obd);
- 
- 	if (ost_io_cptable != NULL) {
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 99%
rename from sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index f2c13f7..95b5c90 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From c96c9b415fa5863d1c0a64530d6df87cd67e8b9a Mon Sep 17 00:00:00 2001
+From 46c87e9a30b44d31a2551217da6818ffbb5eed02 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 5 May 2014 10:02:21 -0400
-Subject: [PATCH 5/6] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 4/5] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd
@@ -9,7 +9,6 @@ layer proc entries over to using seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
  lustre/include/lustre_lfsck.h  |   6 +-
  lustre/lfsck/lfsck_internal.h  |   9 +-
@@ -1879,7 +1878,7 @@ index 359b373..fcde82a 100644
  {
  	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
 diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index b597b03..e186c41 100644
+index 0f0d51a..6172913 100644
 --- a/lustre/ofd/ofd_dev.c
 +++ b/lustre/ofd/ofd_dev.c
 @@ -239,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
@@ -2038,15 +2037,15 @@ index b597b03..e186c41 100644
  	lprocfs_free_per_client_stats(obd);
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -2389,7 +2388,6 @@ static struct proc_dir_entry *ofd_symlink;
+@@ -2377,7 +2376,6 @@ static struct lu_device_type ofd_device_type = {
  
  int __init ofd_init(void)
  {
 -	struct lprocfs_static_vars	lvars;
- 	struct obd_type *type;
- 	int rc;
+ 	int				rc;
  
-@@ -2403,11 +2401,9 @@ int __init ofd_init(void)
+ 	rc = lu_kmem_init(ofd_caches);
+@@ -2390,11 +2388,9 @@ int __init ofd_init(void)
  		return(rc);
  	}
  
@@ -2058,12 +2057,12 @@ index b597b03..e186c41 100644
 +				 NULL,
  #endif
  				 LUSTRE_OST_NAME, &ofd_device_type);
- 
+ 	return rc;
 diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index 98a5cba..a630a9c 100644
+index 4f12506..2e75de5 100644
 --- a/lustre/ofd/ofd_internal.h
 +++ b/lustre/ofd/ofd_internal.h
-@@ -405,13 +405,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
+@@ -403,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
  
  /* lproc_ofd.c */
  #ifdef LPROCFS

diff --git a/sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
similarity index 99%
rename from sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
rename to sys-cluster/lustre/files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index c27b478..53e36b3 100644
--- a/sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,7 +1,7 @@
-From 54b05aa8e43dd1c0ce1d7c78c8fea11e64bef099 Mon Sep 17 00:00:00 2001
+From 1d943d37d99ba9503561c341fc9cff5fcaa37441 Mon Sep 17 00:00:00 2001
 From: Yang Sheng <yang.sheng@intel.com>
 Date: Thu, 24 Apr 2014 11:43:09 +0800
-Subject: [PATCH 6/6] LU-4416 mm: Backport shrinker changes from upstream
+Subject: [PATCH 5/5] LU-4416 mm: Backport shrinker changes from upstream
 
 Convert shrinker to new count/scan API.
 --ptlrpc shrinker

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index d26599a..d1fa334 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -43,9 +43,8 @@ PATCHES=(
 	"${FILESDIR}/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch"
 	"${FILESDIR}/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch"
-	"${FILESDIR}/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
+	"${FILESDIR}/0004-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0005-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
 	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-05-20 12:43 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-05-20 12:43 UTC (permalink / raw
  To: gentoo-commits

commit:     ade0a4c9299533957a2316c17b082ffa06376e5d
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue May 20 12:42:38 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue May 20 12:42:38 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=ade0a4c9

Update patches

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   15 +
 ...cfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch |    4 +-
 ...cfs-update-zfs-proc-handling-to-seq_files.patch |    4 +-
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |    6 +-
 ...rocfs-symlinks-for-forward-compatibility.patch} |   12 +-
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |  591 -------
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} |    4 +-
 ...cfs-move-mdt-mds-proc-handling-to-seq_fil.patch | 1633 --------------------
 ...-Backport-shrinker-changes-from-upstream.patch} |    6 +-
 sys-cluster/lustre/lustre-9999.ebuild              |    8 +-
 10 files changed, 36 insertions(+), 2247 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 8ad52ac..257e94a 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,21 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  20 May 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch,
+  +files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  +files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  -files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  -files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  -files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch,
+  -files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
+  files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  lustre-9999.ebuild:
+  Update patches
+
   22 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
   files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
   files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch:

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
index 537f248..1b625a8 100644
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 0267429e006d1f7ccfe63cbb90849ba430f649a0 Mon Sep 17 00:00:00 2001
+From d6775461847a80d82de476b78fc2322702c516af Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Feb 2014 12:54:05 -0500
-Subject: [PATCH 1/8] LU-3319 procfs: Move NRS TBF proc handling to seq_files
+Subject: [PATCH 1/6] LU-3319 procfs: Move NRS TBF proc handling to seq_files
 
 With newer kernels moving their proc file system handling
 to seq_files this patch migrates the proc handling for NRS

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index 975647d..a44d310 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 1d3e2fbd8661a770d2d64a2402076577ec920e9c Mon Sep 17 00:00:00 2001
+From c16260bdb1cd63a50d37f2161279fc71b9e03efb Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 23 Apr 2014 09:31:09 -0400
-Subject: [PATCH 2/8] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 2/6] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index d9bfa0b..5361aca 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 8128e9daa5f394f97bcfcc3f1da0b8285754c5c4 Mon Sep 17 00:00:00 2001
+From 63f3f2e29c2745b3491712a4a3f7a868ec6ece8d Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 24 Apr 2014 12:04:57 -0400
-Subject: [PATCH 3/8] LU-3319 procfs: move osp proc handling to seq_files
+Subject: [PATCH 3/6] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp
@@ -818,7 +818,7 @@ index 0a1cafa..27e3011 100644
  	class_unregister_type(LUSTRE_OSP_NAME);
  	lu_kmem_fini(osp_caches);
 diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
-index e220914..d8d4a2b 100644
+index 3a5d0a6..f183955 100644
 --- a/lustre/osp/osp_internal.h
 +++ b/lustre/osp/osp_internal.h
 @@ -586,7 +586,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,

diff --git a/sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch b/sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
similarity index 95%
rename from sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
rename to sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
index ae7ef77..b835516 100644
--- a/sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
+++ b/sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
@@ -1,7 +1,7 @@
-From c12b96a679cfc5132b68e61c38e7756b9d02a59c Mon Sep 17 00:00:00 2001
+From ae21b1ad797973ad686dfc1c0cad8d313ddaf4d7 Mon Sep 17 00:00:00 2001
 From: Andreas Dilger <andreas.dilger@intel.com>
 Date: Tue, 6 May 2014 09:51:45 -0400
-Subject: [PATCH 6/8] LU-2096 lprocfs: symlinks for forward compatibility
+Subject: [PATCH 4/6] LU-2096 lprocfs: symlinks for forward compatibility
 
 Currently, the "ofd" device is still named "obdfilter" in the Lustre
 configuration and in /proc/fs/lustre.  It would be better to name it
@@ -36,7 +36,7 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  6 files changed, 49 insertions(+), 7 deletions(-)
 
 diff --git a/lustre/include/obd.h b/lustre/include/obd.h
-index b161c115..78b5563 100644
+index 3abcc4d..a79c901 100644
 --- a/lustre/include/obd.h
 +++ b/lustre/include/obd.h
 @@ -516,8 +516,8 @@ struct niobuf_local {
@@ -51,10 +51,10 @@ index b161c115..78b5563 100644
  #define LUSTRE_LOV_NAME         "lov"
  #define LUSTRE_MGS_NAME         "mgs"
 diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c
-index 55ffe90..c19ba7b4 100644
+index aca72e3..cd1174d 100644
 --- a/lustre/mgs/mgs_llog.c
 +++ b/lustre/mgs/mgs_llog.c
-@@ -2469,7 +2469,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
+@@ -2450,7 +2450,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
          }
  
          /*
@@ -63,7 +63,7 @@ index 55ffe90..c19ba7b4 100644
          setup /dev/loop2 ldiskfs f|n errors=remount-ro,user_xattr
          */
          if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
-@@ -2485,7 +2485,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
+@@ -2466,7 +2466,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
                  snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
                           "%s_UUID", mti->mti_svname);
  	rc = record_attach(env, llh, mti->mti_svname,

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
deleted file mode 100644
index 7ccbf0e..0000000
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ /dev/null
@@ -1,591 +0,0 @@
-From e4533607955d7358071e906746eed32e5c25a90f Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Wed, 26 Mar 2014 19:57:44 -0400
-Subject: [PATCH 4/8] LU-3319 procfs: move lod proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the lod
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
----
- lustre/lod/lod_dev.c      |  23 ++--
- lustre/lod/lod_internal.h |   1 -
- lustre/lod/lod_pool.c     |   7 +-
- lustre/lod/lproc_lod.c    | 267 +++++++++++++++++++++++++---------------------
- 4 files changed, 157 insertions(+), 141 deletions(-)
-
-diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
-index 8a6743d..e63c6ed 100644
---- a/lustre/lod/lod_dev.c
-+++ b/lustre/lod/lod_dev.c
-@@ -289,12 +289,10 @@ static int lod_process_config(const struct lu_env *env,
- 	}
- 
- 	case LCFG_PARAM: {
--		struct lprocfs_static_vars  v = { 0 };
--		struct obd_device	  *obd = lod2obd(lod);
-+		struct obd_device *obd = lod2obd(lod);
- 
--		lprocfs_lod_init_vars(&v);
--
--		rc = class_process_proc_param(PARAM_LOV, v.obd_vars, lcfg, obd);
-+		rc = class_process_proc_seq_param(PARAM_LOV, obd->obd_vars,
-+						  lcfg, obd);
- 		if (rc > 0)
- 			rc = 0;
- 		GOTO(out, rc);
-@@ -891,7 +889,6 @@ static struct obd_ops lod_obd_device_ops = {
- 
- static int __init lod_mod_init(void)
- {
--	struct lprocfs_static_vars  lvars = { 0 };
- 	struct obd_type	*type;
- 	int rc;
- 
-@@ -899,11 +896,9 @@ static int __init lod_mod_init(void)
- 	if (rc)
- 		return rc;
- 
--	lprocfs_lod_init_vars(&lvars);
--
- 	rc = class_register_type(&lod_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				 lvars.module_vars,
-+				 NULL,
- #endif
- 				 LUSTRE_LOD_NAME, &lod_device_type);
- 	if (rc) {
-@@ -917,18 +912,18 @@ static int __init lod_mod_init(void)
- 		return rc;
- 
- 	type = class_search_type(LUSTRE_LOD_NAME);
--	type->typ_procsym = lprocfs_register("lov", proc_lustre_root,
--					     NULL, NULL);
--	if (IS_ERR(type->typ_procsym))
-+	type->typ_procsym = lprocfs_seq_register("lov", proc_lustre_root,
-+						 NULL, NULL);
-+	if (IS_ERR(type->typ_procsym)) {
- 		CERROR("lod: can't create compat entry \"lov\": %d\n",
- 		       (int)PTR_ERR(type->typ_procsym));
-+		type->typ_procsym = NULL;
-+	}
- 	return rc;
- }
- 
- static void __exit lod_mod_exit(void)
- {
--	lprocfs_try_remove_proc_entry("lov", proc_lustre_root);
--
- 	class_unregister_type(LUSTRE_LOD_NAME);
- 	lu_kmem_fini(lod_caches);
- }
-diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h
-index 4eab8cd..d4928c7 100644
---- a/lustre/lod/lod_internal.h
-+++ b/lustre/lod/lod_internal.h
-@@ -441,7 +441,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
- int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *);
- 
- /* lproc_lod.c */
--void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars);
- int lod_procfs_init(struct lod_device *lod);
- void lod_procfs_fini(struct lod_device *lod);
- 
-diff --git a/lustre/lod/lod_pool.c b/lustre/lod/lod_pool.c
-index 149507f..810e1aa 100644
---- a/lustre/lod/lod_pool.c
-+++ b/lustre/lod/lod_pool.c
-@@ -283,7 +283,7 @@ static int pool_proc_open(struct inode *inode, struct file *file)
- 	rc = seq_open(file, &pool_proc_ops);
- 	if (!rc) {
- 		struct seq_file *s = file->private_data;
--		s->private = PROC_I(inode)->pde->data;
-+		s->private = PDE_DATA(inode);
- 	}
- 	return rc;
- }
-@@ -462,7 +462,10 @@ int lod_pool_new(struct obd_device *obd, char *poolname)
- #ifdef LPROCFS
- 	lod_pool_getref(new_pool);
- 	new_pool->pool_proc_entry = lprocfs_add_simple(lod->lod_pool_proc_entry,
--						       poolname, NULL, NULL,
-+						       poolname,
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+						       NULL, NULL,
-+#endif
- 						       new_pool,
- 						       &pool_proc_operations);
- 	if (IS_ERR(new_pool->pool_proc_entry)) {
-diff --git a/lustre/lod/lproc_lod.c b/lustre/lod/lproc_lod.c
-index e976063..1598658 100644
---- a/lustre/lod/lproc_lod.c
-+++ b/lustre/lod/lproc_lod.c
-@@ -42,23 +42,23 @@
- #include <lustre_param.h>
- 
- #ifdef LPROCFS
--static int lod_rd_stripesize(char *page, char **start, off_t off, int count,
--			     int *eof, void *data)
-+static int lod_stripesize_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev  = (struct obd_device *)data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, LPU64"\n",
-+	return seq_printf(m, LPU64"\n",
- 			lod->lod_desc.ld_default_stripe_size);
- }
- 
--static int lod_wr_stripesize(struct file *file, const char *buffer,
--			     unsigned long count, void *data)
-+static ssize_t
-+lod_stripesize_seq_write(struct file *file, const char *buffer,
-+			 size_t count, loff_t *off)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 	__u64 val;
- 	int rc;
-@@ -73,24 +73,25 @@ static int lod_wr_stripesize(struct file *file, const char *buffer,
- 	lod->lod_desc.ld_default_stripe_size = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_stripesize);
- 
--static int lod_rd_stripeoffset(char *page, char **start, off_t off, int count,
--			       int *eof, void *data)
-+static int lod_stripeoffset_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, LPU64"\n",
-+	return seq_printf(m, LPU64"\n",
- 			lod->lod_desc.ld_default_stripe_offset);
- }
- 
--static int lod_wr_stripeoffset(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+static ssize_t
-+lod_stripeoffset_seq_write(struct file *file, const char *buffer,
-+			   size_t count, loff_t *off)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 	__u64 val;
- 	int rc;
-@@ -104,23 +105,24 @@ static int lod_wr_stripeoffset(struct file *file, const char *buffer,
- 	lod->lod_desc.ld_default_stripe_offset = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_stripeoffset);
- 
--static int lod_rd_stripetype(char *page, char **start, off_t off, int count,
--			     int *eof, void *data)
-+static int lod_stripetype_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%u\n", lod->lod_desc.ld_pattern);
-+	return seq_printf(m, "%u\n", lod->lod_desc.ld_pattern);
- }
- 
--static int lod_wr_stripetype(struct file *file, const char *buffer,
--			     unsigned long count, void *data)
-+static ssize_t
-+lod_stripetype_seq_write(struct file *file, const char *buffer,
-+			 size_t count, loff_t *off)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 	int val, rc;
- 
-@@ -134,24 +136,25 @@ static int lod_wr_stripetype(struct file *file, const char *buffer,
- 	lod->lod_desc.ld_pattern = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_stripetype);
- 
--static int lod_rd_stripecount(char *page, char **start, off_t off, int count,
--			      int *eof, void *data)
-+static int lod_stripecount_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%d\n",
-+	return seq_printf(m, "%d\n",
- 			(__s16)(lod->lod_desc.ld_default_stripe_count + 1) - 1);
- }
- 
--static int lod_wr_stripecount(struct file *file, const char *buffer,
--			      unsigned long count, void *data)
-+static ssize_t
-+lod_stripecount_seq_write(struct file *file, const char *buffer,
-+			  size_t count, loff_t *off)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 	int val, rc;
- 
-@@ -165,62 +168,58 @@ static int lod_wr_stripecount(struct file *file, const char *buffer,
- 	lod->lod_desc.ld_default_stripe_count = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_stripecount);
- 
--static int lod_rd_numobd(char *page, char **start, off_t off, int count,
--			 int *eof, void *data)
-+static int lod_numobd_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device*)data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%u\n", lod->lod_desc.ld_tgt_count);
--
-+	return seq_printf(m, "%u\n", lod->lod_desc.ld_tgt_count);
- }
-+LPROC_SEQ_FOPS_RO(lod_numobd);
- 
--static int lod_rd_activeobd(char *page, char **start, off_t off, int count,
--			    int *eof, void *data)
-+static int lod_activeobd_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device* dev = (struct obd_device*)data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%u\n",
--			lod->lod_desc.ld_active_tgt_count);
-+	return seq_printf(m, "%u\n", lod->lod_desc.ld_active_tgt_count);
- }
-+LPROC_SEQ_FOPS_RO(lod_activeobd);
- 
--static int lod_rd_desc_uuid(char *page, char **start, off_t off, int count,
--			    int *eof, void *data)
-+static int lod_desc_uuid_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device*) data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod  = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%s\n", lod->lod_desc.ld_uuid.uuid);
-+	return seq_printf(m, "%s\n", lod->lod_desc.ld_uuid.uuid);
- }
-+LPROC_SEQ_FOPS_RO(lod_desc_uuid);
- 
- /* free priority (0-255): how badly user wants to choose empty osts */
--static int lod_rd_qos_priofree(char *page, char **start, off_t off, int count,
--			       int *eof, void *data)
-+static int lod_qos_priofree_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device*) data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod = lu2lod_dev(dev->obd_lu_dev);
- 
- 	LASSERT(lod != NULL);
--	*eof = 1;
--	return snprintf(page, count, "%d%%\n",
-+	return seq_printf(m, "%d%%\n",
- 			(lod->lod_qos.lq_prio_free * 100 + 255) >> 8);
- }
- 
--static int lod_wr_qos_priofree(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+static ssize_t
-+lod_qos_priofree_seq_write(struct file *file, const char *buffer,
-+			   size_t count, loff_t *off)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 	int val, rc;
- 
-@@ -238,24 +237,25 @@ static int lod_wr_qos_priofree(struct file *file, const char *buffer,
- 	lod->lod_qos.lq_reset = 1;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_qos_priofree);
- 
--static int lod_rd_qos_thresholdrr(char *page, char **start, off_t off,
--				  int count, int *eof, void *data)
-+static int lod_qos_thresholdrr_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device*) data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%d%%\n",
-+	return seq_printf(m, "%d%%\n",
- 			(lod->lod_qos.lq_threshold_rr * 100 + 255) >> 8);
- }
- 
--static int lod_wr_qos_thresholdrr(struct file *file, const char *buffer,
--				  unsigned long count, void *data)
-+static ssize_t
-+lod_qos_thresholdrr_seq_write(struct file *file, const char *buffer,
-+			      size_t count, loff_t *off)
- {
--	struct obd_device *dev = (struct obd_device *)data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 	int val, rc;
- 
-@@ -273,23 +273,24 @@ static int lod_wr_qos_thresholdrr(struct file *file, const char *buffer,
- 	lod->lod_qos.lq_dirty = 1;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_qos_thresholdrr);
- 
--static int lod_rd_qos_maxage(char *page, char **start, off_t off, int count,
--			     int *eof, void *data)
-+static int lod_qos_maxage_seq_show(struct seq_file *m, void *v)
- {
--	struct obd_device *dev = (struct obd_device*) data;
-+	struct obd_device *dev = m->private;
- 	struct lod_device *lod;
- 
- 	LASSERT(dev != NULL);
- 	lod = lu2lod_dev(dev->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%u Sec\n", lod->lod_desc.ld_qos_maxage);
-+	return seq_printf(m, "%u Sec\n", lod->lod_desc.ld_qos_maxage);
- }
- 
--static int lod_wr_qos_maxage(struct file *file, const char *buffer,
--			     unsigned long count, void *data)
-+static ssize_t
-+lod_qos_maxage_seq_write(struct file *file, const char *buffer,
-+			 size_t count, loff_t *off)
- {
--	struct obd_device	*dev = (struct obd_device *)data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*dev = m->private;
- 	struct lustre_cfg_bufs	 bufs;
- 	struct lod_device	*lod;
- 	struct lu_device	*next;
-@@ -327,6 +328,7 @@ static int lod_wr_qos_maxage(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(lod_qos_maxage);
- 
- static void *lod_osts_seq_start(struct seq_file *p, loff_t *pos)
- {
-@@ -414,56 +416,63 @@ static const struct seq_operations lod_osts_sops = {
- 
- static int lod_osts_seq_open(struct inode *inode, struct file *file)
- {
--	struct proc_dir_entry *dp = PDE(inode);
- 	struct seq_file *seq;
- 	int rc;
- 
--	LPROCFS_ENTRY_CHECK(dp);
- 	rc = seq_open(file, &lod_osts_sops);
- 	if (rc)
- 		return rc;
- 
- 	seq = file->private_data;
--	seq->private = dp->data;
-+	seq->private = PDE_DATA(inode);
- 	return 0;
- }
- 
--static struct lprocfs_vars lprocfs_lod_obd_vars[] = {
--	{ "uuid",         lprocfs_rd_uuid,        0, 0 },
--	{ "stripesize",   lod_rd_stripesize,      lod_wr_stripesize, 0 },
--	{ "stripeoffset", lod_rd_stripeoffset,    lod_wr_stripeoffset, 0 },
--	{ "stripecount",  lod_rd_stripecount,     lod_wr_stripecount, 0 },
--	{ "stripetype",   lod_rd_stripetype,      lod_wr_stripetype, 0 },
--	{ "numobd",       lod_rd_numobd,          0, 0 },
--	{ "activeobd",    lod_rd_activeobd,       0, 0 },
--	{ "desc_uuid",    lod_rd_desc_uuid,       0, 0 },
--	{ "qos_prio_free",lod_rd_qos_priofree,    lod_wr_qos_priofree, 0 },
--	{ "qos_threshold_rr",  lod_rd_qos_thresholdrr, lod_wr_qos_thresholdrr, 0 },
--	{ "qos_maxage",   lod_rd_qos_maxage,      lod_wr_qos_maxage, 0 },
--	{ 0 }
--};
--
--static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
--	{ "blocksize",    lprocfs_dt_rd_blksize, 0, 0 },
--	{ "kbytestotal",  lprocfs_dt_rd_kbytestotal, 0, 0 },
--	{ "kbytesfree",   lprocfs_dt_rd_kbytesfree, 0, 0 },
--	{ "kbytesavail",  lprocfs_dt_rd_kbytesavail, 0, 0 },
--	{ "filestotal",   lprocfs_dt_rd_filestotal, 0, 0 },
--	{ "filesfree",    lprocfs_dt_rd_filesfree, 0, 0 },
-+LPROC_SEQ_FOPS_RO_TYPE(lod, uuid);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(lod, dt_blksize);
-+LPROC_SEQ_FOPS_RO_TYPE(lod, dt_kbytestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(lod, dt_kbytesfree);
-+LPROC_SEQ_FOPS_RO_TYPE(lod, dt_kbytesavail);
-+LPROC_SEQ_FOPS_RO_TYPE(lod, dt_filestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(lod, dt_filesfree);
-+
-+static struct lprocfs_seq_vars lprocfs_lod_obd_vars[] = {
-+	{ .name	=	"uuid",
-+	  .fops	=	&lod_uuid_fops		},
-+	{ .name	=	"stripesize",
-+	  .fops	=	&lod_stripesize_fops	},
-+	{ .name	=	"stripeoffset",
-+	  .fops	=	&lod_stripeoffset_fops	},
-+	{ .name	=	"stripecount",
-+	  .fops	=	&lod_stripecount_fops	},
-+	{ .name	=	"stripetype",
-+	  .fops	=	&lod_stripetype_fops	},
-+	{ .name	=	"numobd",
-+	  .fops	=	&lod_numobd_fops	},
-+	{ .name	=	"activeobd",
-+	  .fops	=	&lod_activeobd_fops	},
-+	{ .name	=	"desc_uuid",
-+	  .fops	=	&lod_desc_uuid_fops	},
-+	{ .name	=	"qos_prio_free",
-+	  .fops	=	&lod_qos_priofree_fops	},
-+	{ .name	=	"qos_threshold_rr",
-+	  .fops	=	&lod_qos_thresholdrr_fops },
-+	{ .name	=	"qos_maxage",
-+	  .fops	=	&lod_qos_maxage_fops	},
- 	{ 0 }
- };
- 
--static struct lprocfs_vars lprocfs_lod_module_vars[] = {
--	{ "num_refs",     lprocfs_rd_numrefs,     0, 0 },
-+static struct lprocfs_seq_vars lprocfs_lod_osd_vars[] = {
-+	{ "blocksize",		&lod_dt_blksize_fops		},
-+	{ "kbytestotal",	&lod_dt_kbytestotal_fops	},
-+	{ "kbytesfree",		&lod_dt_kbytesfree_fops		},
-+	{ "kbytesavail",	&lod_dt_kbytesavail_fops	},
-+	{ "filestotal",		&lod_dt_filestotal_fops		},
-+	{ "filesfree",		&lod_dt_filesfree_fops		},
- 	{ 0 }
- };
- 
--void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars)
--{
--	lvars->module_vars	= lprocfs_lod_module_vars;
--	lvars->obd_vars		= lprocfs_lod_obd_vars;
--}
--
- static const struct file_operations lod_proc_target_fops = {
- 	.owner   = THIS_MODULE,
- 	.open    = lod_osts_seq_open,
-@@ -474,21 +483,21 @@ static const struct file_operations lod_proc_target_fops = {
- 
- int lod_procfs_init(struct lod_device *lod)
- {
--	struct obd_device *obd = lod2obd(lod);
--	struct lprocfs_static_vars lvars;
--	cfs_proc_dir_entry_t *lov_proc_dir;
--	int rc;
-+	struct obd_device	*obd = lod2obd(lod);
-+	struct proc_dir_entry	*lov_proc_dir = NULL;
-+	struct obd_type		*type;
-+	int			 rc;
- 
--	lprocfs_lod_init_vars(&lvars);
--	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
-+	obd->obd_vars = lprocfs_lod_obd_vars;
-+	rc = lprocfs_seq_obd_setup(obd);
- 	if (rc) {
- 		CERROR("%s: cannot setup procfs entry: %d\n",
- 		       obd->obd_name, rc);
- 		RETURN(rc);
- 	}
- 
--	rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_lod_osd_vars,
--			      &lod->lod_dt_dev);
-+	rc = lprocfs_seq_add_vars(obd->obd_proc_entry, lprocfs_lod_osd_vars,
-+				  &lod->lod_dt_dev);
- 	if (rc) {
- 		CERROR("%s: cannot setup procfs entry: %d\n",
- 		       obd->obd_name, rc);
-@@ -503,9 +512,9 @@ int lod_procfs_init(struct lod_device *lod)
- 		GOTO(out, rc);
- 	}
- 
--	lod->lod_pool_proc_entry = lprocfs_register("pools",
--						    obd->obd_proc_entry,
--						    NULL, NULL);
-+	lod->lod_pool_proc_entry = lprocfs_seq_register("pools",
-+							obd->obd_proc_entry,
-+							NULL, NULL);
- 	if (IS_ERR(lod->lod_pool_proc_entry)) {
- 		rc = PTR_ERR(lod->lod_pool_proc_entry);
- 		lod->lod_pool_proc_entry = NULL;
-@@ -514,14 +523,24 @@ int lod_procfs_init(struct lod_device *lod)
- 		GOTO(out, rc);
- 	}
- 
--	/* for compatibility we link old procfs's OSC entries to osp ones */
--	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
--	if (lov_proc_dir != NULL && strstr(obd->obd_name, "lov") != NULL)
--		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
--						       lov_proc_dir,
--						       "../lod/%s",
--						       obd->obd_name);
-+	/* If the real LOV is present which is the case for setups
-+	 * with both server and clients on the same node then use
-+	 * the LOV's proc root */
-+	type = class_search_type(LUSTRE_LOV_NAME);
-+	if (type != NULL && type->typ_procroot != NULL)
-+		lov_proc_dir = type->typ_procroot;
-+	else
-+		lov_proc_dir = obd->obd_type->typ_procsym;
-+
-+	if (lov_proc_dir == NULL)
-+		RETURN(0);
- 
-+	/* for compatibility we link old procfs's LOV entries to lod ones */
-+	lod->lod_symlink = lprocfs_add_symlink(obd->obd_name, lov_proc_dir,
-+					       "../lod/%s", obd->obd_name);
-+	if (lod->lod_symlink == NULL)
-+		CERROR("could not register LOV symlink for "
-+			"/proc/fs/lustre/lod/%s.", obd->obd_name);
- 	RETURN(0);
- 
- out:
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 99%
rename from sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 1f04e55..f2c13f7 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 7f697da90a35ad00a35df6483261deaba70783dd Mon Sep 17 00:00:00 2001
+From c96c9b415fa5863d1c0a64530d6df87cd67e8b9a Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 5 May 2014 10:02:21 -0400
-Subject: [PATCH 7/8] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 5/6] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
deleted file mode 100644
index 97fa886..0000000
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ /dev/null
@@ -1,1633 +0,0 @@
-From 333393612d269600a68c672af1f1848e865f9e20 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 9 May 2014 16:30:46 -0400
-Subject: [PATCH 5/8] LU-3319 procfs: move mdt/mds proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the mdt/mds
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Icbafdcd2c2fe3959a51dda3f9c715b0ff8d95742
----
- lustre/mdt/mdt_coordinator.c      | 269 +++++++-------
- lustre/mdt/mdt_handler.c          |  16 +-
- lustre/mdt/mdt_hsm_cdt_actions.c  |   5 +-
- lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
- lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
- lustre/mdt/mdt_internal.h         |  14 +-
- lustre/mdt/mdt_lproc.c            | 713 +++++++++++++++++++-------------------
- lustre/mdt/mdt_mds.c              |  12 +-
- 8 files changed, 495 insertions(+), 544 deletions(-)
-
-diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
-index 651ed7a..1617eeb 100644
---- a/lustre/mdt/mdt_coordinator.c
-+++ b/lustre/mdt/mdt_coordinator.c
-@@ -45,7 +45,7 @@
- #include <lustre_log.h>
- #include "mdt_internal.h"
- 
--static struct lprocfs_vars lprocfs_mdt_hsm_vars[];
-+static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[];
- 
- /**
-  * get obj and HSM attributes on a fid
-@@ -392,7 +392,7 @@ int hsm_cdt_procfs_init(struct mdt_device *mdt)
- 	ENTRY;
- 
- 	/* init /proc entries, failure is not critical */
--	cdt->cdt_proc_dir = lprocfs_register("hsm",
-+	cdt->cdt_proc_dir = lprocfs_seq_register("hsm",
- 					     mdt2obd_dev(mdt)->obd_proc_entry,
- 					     lprocfs_mdt_hsm_vars, mdt);
- 	if (IS_ERR(cdt->cdt_proc_dir)) {
-@@ -424,7 +424,7 @@ void  hsm_cdt_procfs_fini(struct mdt_device *mdt)
-  * \param none
-  * \retval var vector
-  */
--struct lprocfs_vars *hsm_cdt_get_proc_vars(void)
-+struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void)
- {
- 	return lprocfs_mdt_hsm_vars;
- }
-@@ -1785,22 +1785,17 @@ static __u64 hsm_policy_str2bit(const char *name)
-  * \param hexa [IN] print mask before bit names
-  * \param buffer [OUT] string
-  * \param count [IN] size of buffer
-- * \retval size filled in buffer
-  */
--static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
--			      int count)
-+static void hsm_policy_bit2str(struct seq_file *m, const __u64 mask,
-+				const bool hexa)
- {
--	int	 i, j, sz;
--	char	*ptr;
-+	int	 i, j;
- 	__u64	 bit;
- 	ENTRY;
- 
--	ptr = buffer;
--	if (hexa) {
--		sz = snprintf(buffer, count, "("LPX64") ", mask);
--		ptr += sz;
--		count -= sz;
--	}
-+	if (hexa)
-+		seq_printf(m, "("LPX64") ", mask);
-+
- 	for (i = 0; i < CDT_POLICY_SHIFT_COUNT; i++) {
- 		bit = (1ULL << i);
- 
-@@ -1809,48 +1804,37 @@ static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
- 				break;
- 		}
- 		if (bit & mask)
--			sz = snprintf(ptr, count, "[%s] ",
--				      hsm_policy_names[j].name);
-+			seq_printf(m, "[%s] ", hsm_policy_names[j].name);
- 		else
--			sz = snprintf(ptr, count, "%s ",
--				      hsm_policy_names[j].name);
--
--		ptr += sz;
--		count -= sz;
-+			seq_printf(m, "%s ", hsm_policy_names[j].name);
- 	}
- 	/* remove last ' ' */
--	*ptr = '\0';
--	ptr--;
--	RETURN(ptr - buffer);
-+	m->count--;
-+	seq_putc(m, '\0');
- }
- 
- /* methods to read/write HSM policy flags */
--static int lprocfs_rd_hsm_policy(char *page, char **start, off_t off,
--				 int count, int *eof, void *data)
-+static int mdt_hsm_policy_seq_show(struct seq_file *m, void *data)
- {
--	struct mdt_device	*mdt = data;
-+	struct mdt_device	*mdt = m->private;
- 	struct coordinator	*cdt = &mdt->mdt_coordinator;
--	int			 sz;
- 	ENTRY;
- 
--	sz = hsm_policy_bit2str(cdt->cdt_policy, false, page, count);
--	page[sz] = '\n';
--	sz++;
--	page[sz] = '\0';
--	*eof = 1;
--	RETURN(sz);
-+	hsm_policy_bit2str(m, cdt->cdt_policy, false);
-+	RETURN(0);
- }
- 
--static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
--				 unsigned long count, void *data)
-+static ssize_t
-+mdt_hsm_policy_seq_write(struct file *file, const char __user *buffer,
-+			 size_t count, loff_t *off)
- {
--	struct mdt_device	*mdt = data;
-+	struct seq_file		*m = file->private_data;
-+	struct mdt_device	*mdt = m->private;
- 	struct coordinator	*cdt = &mdt->mdt_coordinator;
- 	char			*start, *token, sign;
- 	char			*buf;
- 	__u64			 policy;
- 	__u64			 add_mask, remove_mask, set_mask;
--	int			 sz;
- 	int			 rc;
- 	ENTRY;
- 
-@@ -1883,18 +1867,10 @@ static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
- 
- 		policy = hsm_policy_str2bit(token);
- 		if (policy == 0) {
--			char *msg;
--
--			sz = PAGE_SIZE;
--			OBD_ALLOC(msg, sz);
--			if (!msg)
--				GOTO(out, rc = -ENOMEM);
--
--			hsm_policy_bit2str(0, false, msg, sz);
- 			CWARN("%s: '%s' is unknown, "
--			      "supported policies are: %s\n", mdt_obd_name(mdt),
--			      token, msg);
--			OBD_FREE(msg, sz);
-+			      "supported policies are:\n", mdt_obd_name(mdt),
-+			      token);
-+			hsm_policy_bit2str(m, 0, false);
- 			GOTO(out, rc = -EINVAL);
- 		}
- 		switch (sign) {
-@@ -1933,25 +1909,25 @@ out:
- 	OBD_FREE(buf, count + 1);
- 	RETURN(rc);
- }
-+LPROC_SEQ_FOPS(mdt_hsm_policy);
- 
- #define GENERATE_PROC_METHOD(VAR)					\
--static int lprocfs_rd_hsm_##VAR(char *page, char **start, off_t off,	\
--				int count, int *eof, void *data)	\
-+static int mdt_hsm_##VAR##_seq_show(struct seq_file *m, void *data)	\
- {									\
--	struct mdt_device	*mdt = data;				\
-+	struct mdt_device	*mdt = m->private;			\
- 	struct coordinator	*cdt = &mdt->mdt_coordinator;		\
--	int			 sz;					\
- 	ENTRY;								\
- 									\
--	sz = snprintf(page, count, LPU64"\n", (__u64)cdt->VAR);		\
--	*eof = 1;							\
--	RETURN(sz);							\
-+	seq_printf(m, LPU64"\n", (__u64)cdt->VAR);			\
-+	RETURN(0);							\
- }									\
--static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
--				unsigned long count, void *data)	\
-+static ssize_t								\
-+mdt_hsm_##VAR##_seq_write(struct file *file, const char __user *buffer,	\
-+			  size_t count, loff_t *off)			\
- 									\
- {									\
--	struct mdt_device	*mdt = data;				\
-+	struct seq_file		*m = file->private_data;		\
-+	struct mdt_device	*mdt = m->private;			\
- 	struct coordinator	*cdt = &mdt->mdt_coordinator;		\
- 	int			 val;					\
- 	int			 rc;					\
-@@ -1965,7 +1941,7 @@ static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
- 		RETURN(count);						\
- 	}								\
- 	RETURN(-EINVAL);						\
--}
-+}									\
- 
- GENERATE_PROC_METHOD(cdt_loop_period)
- GENERATE_PROC_METHOD(cdt_grace_delay)
-@@ -1984,10 +1960,12 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
- #define CDT_HELP_CMD     "help"
- #define CDT_MAX_CMD_LEN  10
- 
--int lprocfs_wr_hsm_cdt_control(struct file *file, const char __user *buffer,
--			       unsigned long count, void *data)
-+ssize_t
-+mdt_hsm_cdt_control_seq_write(struct file *file, const char __user *buffer,
-+			      size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
- 	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
- 	struct coordinator	*cdt = &(mdt->mdt_coordinator);
- 	int			 rc, usage = 0;
-@@ -2051,83 +2029,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char __user *buffer,
- 	RETURN(count);
- }
- 
--int lprocfs_rd_hsm_cdt_control(char *page, char **start, off_t off,
--			       int count, int *eof, void *data)
-+int mdt_hsm_cdt_control_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct coordinator	*cdt;
--	int			 sz;
- 	ENTRY;
- 
- 	cdt = &(mdt_dev(obd->obd_lu_dev)->mdt_coordinator);
--	*eof = 1;
- 
- 	if (cdt->cdt_state == CDT_INIT)
--		sz = snprintf(page, count, "init\n");
-+		seq_printf(m, "init\n");
- 	else if (cdt->cdt_state == CDT_RUNNING)
--		sz = snprintf(page, count, "enabled\n");
-+		seq_printf(m, "enabled\n");
- 	else if (cdt->cdt_state == CDT_STOPPING)
--		sz = snprintf(page, count, "stopping\n");
-+		seq_printf(m, "stopping\n");
- 	else if (cdt->cdt_state == CDT_STOPPED)
--		sz = snprintf(page, count, "stopped\n");
-+		seq_printf(m, "stopped\n");
- 	else if (cdt->cdt_state == CDT_DISABLE)
--		sz = snprintf(page, count, "disabled\n");
-+		seq_printf(m, "disabled\n");
- 	else
--		sz = snprintf(page, count, "unknown\n");
-+		seq_printf(m, "unknown\n");
- 
--	RETURN(sz);
-+	RETURN(0);
- }
- 
- static int
--lprocfs_rd_hsm_request_mask(char *page, char **start, off_t off,
--			    int count, int *eof, __u64 mask)
-+mdt_hsm_request_mask_show(struct seq_file *m, __u64 mask)
- {
- 	int i, rc = 0;
- 	ENTRY;
- 
- 	for (i = 0; i < 8 * sizeof(mask); i++) {
- 		if (mask & (1UL << i))
--			rc += snprintf(page + rc, count - rc, "%s%s",
--				       rc == 0 ? "" : " ",
--				       hsm_copytool_action2name(i));
-+			rc += seq_printf(m, "%s%s", rc == 0 ? "" : " ",
-+					hsm_copytool_action2name(i));
- 	}
--
--	rc += snprintf(page + rc, count - rc, "\n");
-+	rc += seq_printf(m, "\n");
- 
- 	RETURN(rc);
- }
- 
- static int
--lprocfs_rd_hsm_user_request_mask(char *page, char **start, off_t off,
--				 int count, int *eof, void *data)
-+mdt_hsm_user_request_mask_seq_show(struct seq_file *m, void *data)
- {
--	struct mdt_device *mdt = data;
-+	struct mdt_device *mdt = m->private;
- 	struct coordinator *cdt = &mdt->mdt_coordinator;
- 
--	return lprocfs_rd_hsm_request_mask(page, start, off, count, eof,
--					   cdt->cdt_user_request_mask);
-+	return mdt_hsm_request_mask_show(m, cdt->cdt_user_request_mask);
- }
- 
- static int
--lprocfs_rd_hsm_group_request_mask(char *page, char **start, off_t off,
--				  int count, int *eof, void *data)
-+mdt_hsm_group_request_mask_seq_show(struct seq_file *m, void *data)
- {
--	struct mdt_device *mdt = data;
-+	struct mdt_device *mdt = m->private;
- 	struct coordinator *cdt = &mdt->mdt_coordinator;
- 
--	return lprocfs_rd_hsm_request_mask(page, start, off, count, eof,
--					   cdt->cdt_group_request_mask);
-+	return mdt_hsm_request_mask_show(m, cdt->cdt_group_request_mask);
- }
- 
- static int
--lprocfs_rd_hsm_other_request_mask(char *page, char **start, off_t off,
--				  int count, int *eof, void *data)
-+mdt_hsm_other_request_mask_seq_show(struct seq_file *m, void *data)
- {
--	struct mdt_device *mdt = data;
-+	struct mdt_device *mdt = m->private;
- 	struct coordinator *cdt = &mdt->mdt_coordinator;
- 
--	return lprocfs_rd_hsm_request_mask(page, start, off, count, eof,
--					   cdt->cdt_other_request_mask);
-+	return mdt_hsm_request_mask_show(m, cdt->cdt_other_request_mask);
- }
- 
- static inline enum hsm_copytool_action
-@@ -2147,9 +2113,9 @@ hsm_copytool_name2action(const char *name)
- 		return -1;
- }
- 
--static int
--lprocfs_wr_hsm_request_mask(struct file *file, const char __user *user_buf,
--			    unsigned long user_count, __u64 *mask)
-+static ssize_t
-+mdt_write_hsm_request_mask(struct file *file, const char __user *user_buf,
-+			    size_t user_count, __u64 *mask)
- {
- 	char *buf, *pos, *name;
- 	size_t buf_size;
-@@ -2193,69 +2159,76 @@ out:
- 	RETURN(rc);
- }
- 
--static int
--lprocfs_wr_hsm_user_request_mask(struct file *file, const char __user *buf,
--				 unsigned long count, void *data)
-+static ssize_t
-+mdt_hsm_user_request_mask_seq_write(struct file *file, const char __user *buf,
-+					size_t count, loff_t *off)
- {
--	struct mdt_device *mdt = data;
-+	struct seq_file		*m = file->private_data;
-+	struct mdt_device	*mdt = m->private;
- 	struct coordinator *cdt = &mdt->mdt_coordinator;
- 
--	return lprocfs_wr_hsm_request_mask(file, buf, count,
-+	return mdt_write_hsm_request_mask(file, buf, count,
- 					   &cdt->cdt_user_request_mask);
- }
- 
--static int
--lprocfs_wr_hsm_group_request_mask(struct file *file, const char __user *buf,
--				  unsigned long count, void *data)
-+static ssize_t
-+mdt_hsm_group_request_mask_seq_write(struct file *file, const char __user *buf,
-+					size_t count, loff_t *off)
- {
--	struct mdt_device *mdt = data;
--	struct coordinator *cdt = &mdt->mdt_coordinator;
-+	struct seq_file		*m = file->private_data;
-+	struct mdt_device	*mdt = m->private;
-+	struct coordinator	*cdt = &mdt->mdt_coordinator;
- 
--	return lprocfs_wr_hsm_request_mask(file, buf, count,
-+	return mdt_write_hsm_request_mask(file, buf, count,
- 					   &cdt->cdt_group_request_mask);
- }
- 
--static int
--lprocfs_wr_hsm_other_request_mask(struct file *file, const char __user *buf,
--				  unsigned long count, void *data)
-+static ssize_t
-+mdt_hsm_other_request_mask_seq_write(struct file *file, const char __user *buf,
-+					size_t count, loff_t *off)
- {
--	struct mdt_device *mdt = data;
--	struct coordinator *cdt = &mdt->mdt_coordinator;
-+	struct seq_file		*m = file->private_data;
-+	struct mdt_device	*mdt = m->private;
-+	struct coordinator	*cdt = &mdt->mdt_coordinator;
- 
--	return lprocfs_wr_hsm_request_mask(file, buf, count,
-+	return mdt_write_hsm_request_mask(file, buf, count,
- 					   &cdt->cdt_other_request_mask);
- }
- 
--static struct lprocfs_vars lprocfs_mdt_hsm_vars[] = {
--	{ "agents",			NULL, NULL, NULL, &mdt_hsm_agent_fops,
--					0 },
--	{ "actions",			NULL, NULL, NULL, &mdt_hsm_actions_fops,
--					0444 },
--	{ "default_archive_id",		lprocfs_rd_hsm_cdt_default_archive_id,
--					lprocfs_wr_hsm_cdt_default_archive_id,
--					NULL, NULL, 0 },
--	{ "grace_delay",		lprocfs_rd_hsm_cdt_grace_delay,
--					lprocfs_wr_hsm_cdt_grace_delay,
--					NULL, NULL, 0 },
--	{ "loop_period",		lprocfs_rd_hsm_cdt_loop_period,
--					lprocfs_wr_hsm_cdt_loop_period,
--					NULL, NULL, 0 },
--	{ "max_requests",		lprocfs_rd_hsm_cdt_max_requests,
--					lprocfs_wr_hsm_cdt_max_requests,
--					NULL, NULL, 0 },
--	{ "policy",			lprocfs_rd_hsm_policy,
--					lprocfs_wr_hsm_policy,
--					NULL, NULL, 0 },
--	{ "active_request_timeout",	lprocfs_rd_hsm_cdt_active_req_timeout,
--					lprocfs_wr_hsm_cdt_active_req_timeout,
--					NULL, NULL, 0 },
--	{ "active_requests",		NULL, NULL, NULL,
--					&mdt_hsm_active_requests_fops, 0 },
--	{ "user_request_mask",		lprocfs_rd_hsm_user_request_mask,
--					lprocfs_wr_hsm_user_request_mask, },
--	{ "group_request_mask", 	lprocfs_rd_hsm_group_request_mask,
--					lprocfs_wr_hsm_group_request_mask, },
--	{ "other_request_mask",		lprocfs_rd_hsm_other_request_mask,
--					lprocfs_wr_hsm_other_request_mask, },
-+LPROC_SEQ_FOPS(mdt_hsm_cdt_loop_period);
-+LPROC_SEQ_FOPS(mdt_hsm_cdt_grace_delay);
-+LPROC_SEQ_FOPS(mdt_hsm_cdt_active_req_timeout);
-+LPROC_SEQ_FOPS(mdt_hsm_cdt_max_requests);
-+LPROC_SEQ_FOPS(mdt_hsm_cdt_default_archive_id);
-+LPROC_SEQ_FOPS(mdt_hsm_user_request_mask);
-+LPROC_SEQ_FOPS(mdt_hsm_group_request_mask);
-+LPROC_SEQ_FOPS(mdt_hsm_other_request_mask);
-+
-+static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[] = {
-+	{ .name	=	"agents",
-+	  .fops	=	&mdt_hsm_agent_fops			},
-+	{ .name	=	"actions",
-+	  .fops	=	&mdt_hsm_actions_fops,
-+	  .proc_mode =	0444					},
-+	{ .name	=	"default_archive_id",
-+	  .fops	=	&mdt_hsm_cdt_default_archive_id_fops	},
-+	{ .name	=	"grace_delay",
-+	  .fops	=	&mdt_hsm_cdt_grace_delay_fops		},
-+	{ .name	=	"loop_period",
-+	  .fops	=	&mdt_hsm_cdt_loop_period_fops		},
-+	{ .name	=	"max_requests",
-+	  .fops	=	&mdt_hsm_cdt_max_requests_fops		},
-+	{ .name	=	"policy",
-+	  .fops	=	&mdt_hsm_policy_fops			},
-+	{ .name	=	"active_request_timeout",
-+	  .fops	=	&mdt_hsm_cdt_active_req_timeout_fops	},
-+	{ .name	=	"active_requests",
-+	  .fops	=	&mdt_hsm_active_requests_fops		},
-+	{ .name	=	"user_request_mask",
-+	  .fops	=	&mdt_hsm_user_request_mask_fops,	},
-+	{ .name	=	"group_request_mask",
-+	  .fops	=	&mdt_hsm_group_request_mask_fops,	},
-+	{ .name	=	"other_request_mask",
-+	  .fops	=	&mdt_hsm_other_request_mask_fops,	},
- 	{ 0 }
- };
-diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 6b0c683..013cea2 100644
---- a/lustre/mdt/mdt_handler.c
-+++ b/lustre/mdt/mdt_handler.c
-@@ -4666,7 +4666,6 @@ static int mdt_process_config(const struct lu_env *env,
- 
- 	switch (cfg->lcfg_command) {
- 	case LCFG_PARAM: {
--		struct lprocfs_static_vars  lvars;
- 		struct obd_device	   *obd = d->ld_obd;
- 
- 		/* For interoperability */
-@@ -4701,14 +4700,13 @@ static int mdt_process_config(const struct lu_env *env,
- 			}
- 		}
- 
--		lprocfs_mdt_init_vars(&lvars);
--		rc = class_process_proc_param(PARAM_MDT, lvars.obd_vars,
--					      cfg, obd);
-+		rc = class_process_proc_seq_param(PARAM_MDT, obd->obd_vars,
-+							cfg, obd);
- 		if (rc > 0 || rc == -ENOSYS) {
- 			/* is it an HSM var ? */
--			rc = class_process_proc_param(PARAM_HSM,
--						      hsm_cdt_get_proc_vars(),
--						      cfg, obd);
-+			rc = class_process_proc_seq_param(PARAM_HSM,
-+							hsm_cdt_get_proc_vars(),
-+							cfg, obd);
- 			if (rc > 0 || rc == -ENOSYS)
- 				/* we don't understand; pass it on */
- 				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5905,7 +5903,6 @@ static struct lu_device_type mdt_device_type = {
- 
- static int __init mdt_mod_init(void)
- {
--	struct lprocfs_static_vars lvars;
- 	int rc;
- 
- 	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5920,10 +5917,9 @@ static int __init mdt_mod_init(void)
- 	if (rc)
- 		GOTO(lu_fini, rc);
- 
--	lprocfs_mdt_init_vars(&lvars);
- 	rc = class_register_type(&mdt_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				 lvars.module_vars,
-+				 NULL,
- #endif
- 				 LUSTRE_MDT_NAME, &mdt_device_type);
- 	if (rc)
-diff --git a/lustre/mdt/mdt_hsm_cdt_actions.c b/lustre/mdt/mdt_hsm_cdt_actions.c
-index 0f5e0fe..6b1acf0 100644
---- a/lustre/mdt/mdt_hsm_cdt_actions.c
-+++ b/lustre/mdt/mdt_hsm_cdt_actions.c
-@@ -513,9 +513,6 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
- 	struct mdt_device		*mdt;
- 	ENTRY;
- 
--	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
--		RETURN(-ENOENT);
--
- 	rc = seq_open(file, &mdt_hsm_actions_proc_ops);
- 	if (rc)
- 		RETURN(rc);
-@@ -532,7 +529,7 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
- 	/* mdt is saved in proc_dir_entry->data by
- 	 * mdt_coordinator_procfs_init() calling lprocfs_register()
- 	 */
--	mdt = (struct mdt_device *)PDE(inode)->data;
-+	mdt = (struct mdt_device *)PDE_DATA(inode);
- 	aai->aai_mdt = mdt;
- 	s = file->private_data;
- 	s->private = aai;
-diff --git a/lustre/mdt/mdt_hsm_cdt_agent.c b/lustre/mdt/mdt_hsm_cdt_agent.c
-index 9a9ce6d..158cced 100644
---- a/lustre/mdt/mdt_hsm_cdt_agent.c
-+++ b/lustre/mdt/mdt_hsm_cdt_agent.c
-@@ -621,15 +621,12 @@ static int lprocfs_open_hsm_agent(struct inode *inode, struct file *file)
- 	int		 rc;
- 	ENTRY;
- 
--	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
--		RETURN(-ENOENT);
--
- 	rc = seq_open(file, &mdt_hsm_agent_proc_ops);
- 	if (rc)
- 		RETURN(rc);
- 
- 	s = file->private_data;
--	s->private = PDE(inode)->data;
-+	s->private = PDE_DATA(inode);
- 
- 	RETURN(rc);
- }
-diff --git a/lustre/mdt/mdt_hsm_cdt_requests.c b/lustre/mdt/mdt_hsm_cdt_requests.c
-index 1300861..3125dcc 100644
---- a/lustre/mdt/mdt_hsm_cdt_requests.c
-+++ b/lustre/mdt/mdt_hsm_cdt_requests.c
-@@ -569,15 +569,12 @@ static int lprocfs_open_hsm_active_requests(struct inode *inode,
- 	int		 rc;
- 	ENTRY;
- 
--	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
--		RETURN(-ENOENT);
--
- 	rc = seq_open(file, &mdt_hsm_active_requests_proc_ops);
- 	if (rc) {
- 		RETURN(rc);
- 	}
- 	s = file->private_data;
--	s->private = PDE(inode)->data;
-+	s->private = PDE_DATA(inode);
- 
- 	RETURN(rc);
- }
-diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
-index 116d98f..d1a3b66 100644
---- a/lustre/mdt/mdt_internal.h
-+++ b/lustre/mdt/mdt_internal.h
-@@ -756,9 +756,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
- void mdt_thread_info_fini(struct mdt_thread_info *mti);
- struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
- 
--extern struct lprocfs_vars lprocfs_mds_module_vars[];
--extern struct lprocfs_vars lprocfs_mds_obd_vars[];
--
- int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
- 		     const struct md_hsm *mh);
- 
-@@ -896,13 +893,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
- int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
- 
- /* coordinator control /proc interface */
--int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
--			       unsigned long count, void *data);
--int lprocfs_rd_hsm_cdt_control(char *page, char **start, off_t off,
--			       int count, int *eof, void *data);
-+ssize_t mdt_hsm_cdt_control_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off);
-+int mdt_hsm_cdt_control_seq_show(struct seq_file *m, void *data);
- int hsm_cdt_procfs_init(struct mdt_device *mdt);
- void hsm_cdt_procfs_fini(struct mdt_device *mdt);
--struct lprocfs_vars *hsm_cdt_get_proc_vars(void);
-+struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void);
- /* md_hsm helpers */
- struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
- 				      const struct lu_fid *fid,
-@@ -1042,8 +1038,6 @@ enum {
- };
- void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
- void mdt_stats_counter_init(struct lprocfs_stats *stats);
--void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars);
--void lprocfs_mds_init_vars(struct lprocfs_static_vars *lvars);
- int mdt_procfs_init(struct mdt_device *mdt, const char *name);
- void mdt_procfs_fini(struct mdt_device *mdt);
- 
-diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c
-index 70eba85..ff7a260 100644
---- a/lustre/mdt/mdt_lproc.c
-+++ b/lustre/mdt/mdt_lproc.c
-@@ -144,8 +144,9 @@ static int mdt_rename_stats_seq_show(struct seq_file *seq, void *v)
-         return 0;
- }
- 
--static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
--                                          size_t len, loff_t *off)
-+static ssize_t
-+mdt_rename_stats_seq_write(struct file *file, const char __user *buf,
-+			   size_t len, loff_t *off)
- {
-         struct seq_file *seq = file->private_data;
-         struct mdt_device *mdt = seq->private;
-@@ -156,7 +157,6 @@ static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
- 
-         return len;
- }
--
- LPROC_SEQ_FOPS(mdt_rename_stats);
- 
- static int lproc_mdt_attach_rename_seqstat(struct mdt_device *mdt)
-@@ -213,145 +213,77 @@ void mdt_rename_counter_tally(struct mdt_thread_info *info,
-                               (unsigned int)ma->ma_attr.la_size);
- }
- 
--int mdt_procfs_init(struct mdt_device *mdt, const char *name)
-+static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device		*obd = mdt2obd_dev(mdt);
--	struct lprocfs_static_vars	 lvars;
--	int				 rc;
--	ENTRY;
--
--	LASSERT(name != NULL);
--
--	lprocfs_mdt_init_vars(&lvars);
--	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
--	if (rc) {
--		CERROR("%s: cannot create proc entries: rc = %d\n",
--		       mdt_obd_name(mdt), rc);
--		return rc;
--	}
--
--	rc = hsm_cdt_procfs_init(mdt);
--	if (rc) {
--		CERROR("%s: cannot create hsm proc entries: rc = %d\n",
--		       mdt_obd_name(mdt), rc);
--		return rc;
--	}
--
--	obd->obd_proc_exports_entry = proc_mkdir("exports",
--						 obd->obd_proc_entry);
--	if (obd->obd_proc_exports_entry)
--		lprocfs_add_simple(obd->obd_proc_exports_entry,
--				   "clear", lprocfs_nid_stats_clear_read,
--				   lprocfs_nid_stats_clear_write, obd, NULL);
--	rc = lprocfs_alloc_md_stats(obd, LPROC_MDT_LAST);
--	if (rc)
--		return rc;
--	mdt_stats_counter_init(obd->obd_md_stats);
--
--	rc = lprocfs_job_stats_init(obd, LPROC_MDT_LAST,
--				    mdt_stats_counter_init);
--
--	rc = lproc_mdt_attach_rename_seqstat(mdt);
--	if (rc)
--		CERROR("%s: MDT can not create rename stats rc = %d\n",
--		       mdt_obd_name(mdt), rc);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--	RETURN(rc);
-+	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_entry_expire);
- }
- 
--void mdt_procfs_fini(struct mdt_device *mdt)
-+static ssize_t
-+mdt_identity_expire_seq_write(struct file *file, const char __user *buffer,
-+			      size_t count, loff_t *off)
- {
--	struct obd_device *obd = mdt2obd_dev(mdt);
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int rc, val;
- 
--	if (obd->obd_proc_exports_entry != NULL) {
--		lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
--		obd->obd_proc_exports_entry = NULL;
--	}
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
- 
--	lprocfs_free_per_client_stats(obd);
--	hsm_cdt_procfs_fini(mdt);
--	lprocfs_obd_cleanup(obd);
--	lprocfs_free_md_stats(obd);
--	lprocfs_free_obd_stats(obd);
--	lprocfs_job_stats_fini(obd);
-+	mdt->mdt_identity_cache->uc_entry_expire = val;
-+	return count;
- }
-+LPROC_SEQ_FOPS(mdt_identity_expire);
- 
--static int lprocfs_rd_identity_expire(char *page, char **start, off_t off,
--                                      int count, int *eof, void *data)
-+static int mdt_identity_acquire_expire_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        *eof = 1;
--        return snprintf(page, count, "%u\n",
--                        mdt->mdt_identity_cache->uc_entry_expire);
-+	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_acquire_expire);
- }
- 
--static int lprocfs_wr_identity_expire(struct file *file,
-+static ssize_t
-+mdt_identity_acquire_expire_seq_write(struct file *file,
- 				      const char __user *buffer,
--				      unsigned long count, void *data)
--{
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int rc, val;
--
--        rc = lprocfs_write_helper(buffer, count, &val);
--        if (rc)
--                return rc;
--
--        mdt->mdt_identity_cache->uc_entry_expire = val;
--        return count;
--}
--
--static int lprocfs_rd_identity_acquire_expire(char *page, char **start,
--                                              off_t off, int count, int *eof,
--                                              void *data)
-+				      size_t count, loff_t *off)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--
--        *eof = 1;
--        return snprintf(page, count, "%u\n",
--                        mdt->mdt_identity_cache->uc_acquire_expire);
--}
--
--static int lprocfs_wr_identity_acquire_expire(struct file *file,
--					      const char __user *buffer,
--					      unsigned long count,
--					      void *data)
--{
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int rc, val;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int rc, val;
- 
--        rc = lprocfs_write_helper(buffer, count, &val);
--        if (rc)
--                return rc;
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
- 
--        mdt->mdt_identity_cache->uc_acquire_expire = val;
--        return count;
-+	mdt->mdt_identity_cache->uc_acquire_expire = val;
-+	return count;
- }
-+LPROC_SEQ_FOPS(mdt_identity_acquire_expire);
- 
--static int lprocfs_rd_identity_upcall(char *page, char **start, off_t off,
--                                      int count, int *eof, void *data)
-+static int mdt_identity_upcall_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        struct upcall_cache *hash = mdt->mdt_identity_cache;
--        int len;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct upcall_cache *hash = mdt->mdt_identity_cache;
- 
--	*eof = 1;
- 	read_lock(&hash->uc_upcall_rwlock);
--	len = snprintf(page, count, "%s\n", hash->uc_upcall);
-+	seq_printf(m, "%s\n", hash->uc_upcall);
- 	read_unlock(&hash->uc_upcall_rwlock);
--	return len;
-+	return 0;
- }
- 
--static int lprocfs_wr_identity_upcall(struct file *file,
--				      const char __user *buffer,
--				      unsigned long count, void *data)
-+static ssize_t
-+mdt_identity_upcall_seq_write(struct file *file, const char __user *buffer,
-+			      size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
- 	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
- 	struct upcall_cache	*hash = mdt->mdt_identity_cache;
- 	int			 rc;
-@@ -390,28 +322,32 @@ static int lprocfs_wr_identity_upcall(struct file *file,
- 		OBD_FREE(kernbuf, count + 1);
- 	RETURN(rc);
- }
-+LPROC_SEQ_FOPS(mdt_identity_upcall);
- 
--static int lprocfs_wr_identity_flush(struct file *file,
--				     const char __user *buffer,
--				     unsigned long count, void *data)
-+static ssize_t
-+lprocfs_identity_flush_seq_write(struct file *file, const char __user *buffer,
-+				 size_t count, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int rc, uid;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int rc, uid;
- 
--        rc = lprocfs_write_helper(buffer, count, &uid);
--        if (rc)
--                return rc;
-+	rc = lprocfs_write_helper(buffer, count, &uid);
-+	if (rc)
-+		return rc;
- 
--        mdt_flush_identity(mdt->mdt_identity_cache, uid);
--        return count;
-+	mdt_flush_identity(mdt->mdt_identity_cache, uid);
-+	return count;
- }
-+LPROC_SEQ_FOPS_WO_TYPE(mdt, identity_flush);
- 
--static int lprocfs_wr_identity_info(struct file *file,
--				    const char __user *buffer,
--				    unsigned long count, void *data)
-+static ssize_t
-+lprocfs_identity_info_seq_write(struct file *file, const char __user *buffer,
-+				size_t count, void *data)
- {
--	struct obd_device *obd = data;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	struct identity_downcall_data *param;
- 	int size = sizeof(*param), rc, checked = 0;
-@@ -419,7 +355,7 @@ static int lprocfs_wr_identity_info(struct file *file,
- again:
- 	if (count < size) {
- 		CERROR("%s: invalid data count = %lu, size = %d\n",
--		       mdt_obd_name(mdt), count, size);
-+		       mdt_obd_name(mdt), (unsigned long) count, size);
- 		return -EINVAL;
- 	}
- 
-@@ -472,23 +408,25 @@ out:
- 
- 	return rc ? rc : count;
- }
-+LPROC_SEQ_FOPS_WO_TYPE(mdt, identity_info);
- 
- /* for debug only */
--static int lprocfs_rd_capa(char *page, char **start, off_t off,
--                           int count, int *eof, void *data)
-+static int mdt_capa_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--	return snprintf(page, count, "capability on: %s %s\n",
--			mdt->mdt_lut.lut_oss_capa ? "oss" : "",
--			mdt->mdt_lut.lut_mds_capa ? "mds" : "");
-+	return seq_printf(m, "capability on: %s %s\n",
-+			  mdt->mdt_lut.lut_oss_capa ? "oss" : "",
-+			  mdt->mdt_lut.lut_mds_capa ? "mds" : "");
- }
- 
--static int lprocfs_wr_capa(struct file *file, const char __user *buffer,
--			   unsigned long count, void *data)
-+static ssize_t
-+mdt_capa_seq_write(struct file *file, const char __user *buffer,
-+		   size_t count, loff_t *off)
- {
--	struct obd_device *obd = data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	int val, rc;
- 
-@@ -525,82 +463,87 @@ static int lprocfs_wr_capa(struct file *file, const char __user *buffer,
- 		      mdt->mdt_lut.lut_oss_capa ? "enabled" : "disabled");
- 	return count;
- }
-+LPROC_SEQ_FOPS(mdt_capa);
- 
--static int lprocfs_rd_capa_count(char *page, char **start, off_t off,
--                                 int count, int *eof, void *data)
-+static int mdt_capa_count_seq_show(struct seq_file *m, void *data)
- {
--        return snprintf(page, count, "%d %d\n",
--                        capa_count[CAPA_SITE_CLIENT],
--                        capa_count[CAPA_SITE_SERVER]);
-+	return seq_printf(m, "%d %d\n", capa_count[CAPA_SITE_CLIENT],
-+			  capa_count[CAPA_SITE_SERVER]);
- }
-+LPROC_SEQ_FOPS_RO(mdt_capa_count);
- 
--static int lprocfs_rd_site_stats(char *page, char **start, off_t off,
--                                 int count, int *eof, void *data)
-+static int mdt_site_stats_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        return lu_site_stats_print(mdt_lu_site(mdt), page, count);
-+	return lu_site_stats_seq_print(mdt_lu_site(mdt), m);
- }
-+LPROC_SEQ_FOPS_RO(mdt_site_stats);
- 
--static int lprocfs_rd_capa_timeout(char *page, char **start, off_t off,
--                                   int count, int *eof, void *data)
-+static int mdt_capa_timeout_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        return snprintf(page, count, "%lu\n", mdt->mdt_capa_timeout);
-+	return seq_printf(m, "%lu\n", mdt->mdt_capa_timeout);
- }
- 
--static int lprocfs_wr_capa_timeout(struct file *file, const char __user *buffer,
--				   unsigned long count, void *data)
-+static ssize_t
-+mdt_capa_timeout_seq_write(struct file *file, const char __user *buffer,
-+			   size_t count, loff_t *off)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int val, rc;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int val, rc;
- 
--        rc = lprocfs_write_helper(buffer, count, &val);
--        if (rc)
--                return rc;
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
- 
--        mdt->mdt_capa_timeout = (unsigned long)val;
--        mdt->mdt_capa_conf = 1;
--        return count;
-+	mdt->mdt_capa_timeout = (unsigned long)val;
-+	mdt->mdt_capa_conf = 1;
-+	return count;
- }
-+LPROC_SEQ_FOPS(mdt_capa_timeout);
- 
--static int lprocfs_rd_ck_timeout(char *page, char **start, off_t off, int count,
--                                 int *eof, void *data)
-+static int mdt_ck_timeout_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        return snprintf(page, count, "%lu\n", mdt->mdt_ck_timeout);
-+	return seq_printf(m, "%lu\n", mdt->mdt_ck_timeout);
- }
- 
--static int lprocfs_wr_ck_timeout(struct file *file, const char __user *buffer,
--				 unsigned long count, void *data)
-+static ssize_t
-+mdt_ck_timeout_seq_write(struct file *file, const char __user *buffer,
-+			 size_t count, loff_t *off)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int val, rc;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int val, rc;
- 
--        rc = lprocfs_write_helper(buffer, count, &val);
--        if (rc)
--                return rc;
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
- 
--        mdt->mdt_ck_timeout = (unsigned long)val;
--        mdt->mdt_capa_conf = 1;
--        return count;
-+	mdt->mdt_ck_timeout = (unsigned long)val;
-+	mdt->mdt_capa_conf = 1;
-+	return count;
- }
-+LPROC_SEQ_FOPS(mdt_ck_timeout);
- 
- #define BUFLEN (UUID_MAX + 4)
- 
--static int lprocfs_mdt_wr_evict_client(struct file *file,
--				       const char __user *buffer,
--				       unsigned long count, void *data)
-+static ssize_t
-+lprocfs_mds_evict_client_seq_write(struct file *file,
-+				   const char __user *buffer,
-+				   size_t count, loff_t *off)
- {
--        char *kbuf;
--        char *tmpbuf;
-+	char *kbuf;
-+	char *tmpbuf;
- 
-         OBD_ALLOC(kbuf, BUFLEN);
-         if (kbuf == NULL)
-@@ -619,7 +562,8 @@ static int lprocfs_mdt_wr_evict_client(struct file *file,
-         tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
- 
-         if (strncmp(tmpbuf, "nid:", 4) != 0) {
--                count = lprocfs_wr_evict_client(file, buffer, count, data);
-+		count = lprocfs_evict_client_seq_write(file, buffer, count,
-+						       off);
-                 goto out;
-         }
- 
-@@ -632,21 +576,22 @@ out:
- 
- #undef BUFLEN
- 
--static int lprocfs_rd_sec_level(char *page, char **start, off_t off,
--                                int count, int *eof, void *data)
-+static int mdt_sec_level_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--	return snprintf(page, count, "%d\n", mdt->mdt_lut.lut_sec_level);
-+	return seq_printf(m, "%d\n", mdt->mdt_lut.lut_sec_level);
- }
- 
--static int lprocfs_wr_sec_level(struct file *file, const char __user *buffer,
--				unsigned long count, void *data)
-+static ssize_t
-+mdt_sec_level_seq_write(struct file *file, const char __user *buffer,
-+			size_t count, loff_t *off)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int val, rc;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int val, rc;
- 
-         rc = lprocfs_write_helper(buffer, count, &val);
-         if (rc)
-@@ -664,102 +609,110 @@ static int lprocfs_wr_sec_level(struct file *file, const char __user *buffer,
- 	mdt->mdt_lut.lut_sec_level = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(mdt_sec_level);
- 
--static int lprocfs_rd_cos(char *page, char **start, off_t off,
--                              int count, int *eof, void *data)
-+static int mdt_cos_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        return snprintf(page, count, "%u\n", mdt_cos_is_enabled(mdt));
-+	return seq_printf(m, "%u\n", mdt_cos_is_enabled(mdt));
- }
- 
--static int lprocfs_wr_cos(struct file *file, const char __user *buffer,
--			  unsigned long count, void *data)
-+static ssize_t
-+mdt_cos_seq_write(struct file *file, const char __user *buffer,
-+		  size_t count, loff_t *off)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        int val, rc;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int val, rc;
- 
--        rc = lprocfs_write_helper(buffer, count, &val);
--        if (rc)
--                return rc;
--        mdt_enable_cos(mdt, val);
--        return count;
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
-+	mdt_enable_cos(mdt, val);
-+	return count;
- }
-+LPROC_SEQ_FOPS(mdt_cos);
- 
--static int lprocfs_rd_mdt_root_squash(char *page, char **start, off_t off,
--				      int count, int *eof, void *data)
-+static int mdt_root_squash_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	struct root_squash_info *squash = &mdt->mdt_squash;
- 
--	return snprintf(page, count, "%u:%u\n", squash->rsi_uid,
--			squash->rsi_gid);
-+	return seq_printf(m, "%u:%u\n", squash->rsi_uid,
-+			  squash->rsi_gid);
- }
- 
--static int lprocfs_wr_mdt_root_squash(struct file *file,
--				      const char __user *buffer,
--				      unsigned long count, void *data)
-+static ssize_t
-+mdt_root_squash_seq_write(struct file *file, const char __user *buffer,
-+			  size_t count, loff_t *off)
- {
--	struct obd_device *obd = data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	struct root_squash_info *squash = &mdt->mdt_squash;
- 
- 	return lprocfs_wr_root_squash(buffer, count, squash,
- 				      mdt_obd_name(mdt));
- }
-+LPROC_SEQ_FOPS(mdt_root_squash);
- 
--static int lprocfs_rd_mdt_nosquash_nids(char *page, char **start, off_t off,
--					int count, int *eof, void *data)
-+static int mdt_nosquash_nids_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	struct root_squash_info *squash = &mdt->mdt_squash;
--	int rc;
-+	int len = 0, rc;
- 
- 	down_read(&squash->rsi_sem);
- 	if (!list_empty(&squash->rsi_nosquash_nids)) {
--		rc = cfs_print_nidlist(page, count, &squash->rsi_nosquash_nids);
--		rc += snprintf(page + rc, count - rc, "\n");
-+		len = cfs_print_nidlist(m->buf + m->count, m->size - m->count,
-+					&squash->rsi_nosquash_nids);
-+		m->count += len;
-+		rc = seq_printf(m, "\n");
- 	} else
--		rc = snprintf(page, count, "NONE\n");
-+		rc = seq_printf(m, "NONE\n");
- 	up_read(&squash->rsi_sem);
- 
- 	return rc;
- }
- 
--static int lprocfs_wr_mdt_nosquash_nids(struct file *file,
--					const char __user *buffer,
--					unsigned long count, void *data)
-+static ssize_t
-+mdt_nosquash_nids_seq_write(struct file *file, const char __user *buffer,
-+			    size_t count, loff_t *off)
- {
--	struct obd_device *obd = data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	struct root_squash_info *squash = &mdt->mdt_squash;
- 
- 	return lprocfs_wr_nosquash_nids(buffer, count, squash,
- 					mdt_obd_name(mdt));
- }
-+LPROC_SEQ_FOPS(mdt_nosquash_nids);
- 
--static int lprocfs_rd_mdt_som(char *page, char **start, off_t off,
--                              int count, int *eof, void *data)
-+static int mdt_som_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        return snprintf(page, count, "%sabled\n",
--                        mdt->mdt_som_conf ? "en" : "dis");
-+	return seq_printf(m, "%sabled\n",
-+			  mdt->mdt_som_conf ? "en" : "dis");
- }
- 
--static int lprocfs_wr_mdt_som(struct file *file, const char __user *buffer,
--			      unsigned long count, void *data)
-+static ssize_t
-+mdt_som_seq_write(struct file *file, const char __user *buffer,
-+		  size_t count, loff_t *off)
- {
--        struct obd_export *exp;
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
--        char kernbuf[16];
--        unsigned long val = 0;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_export *exp;
-+	char kernbuf[16];
-+	unsigned long val = 0;
- 
-         if (count > (sizeof(kernbuf) - 1))
-                 return -EINVAL;
-@@ -801,21 +754,22 @@ static int lprocfs_wr_mdt_som(struct file *file, const char __user *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(mdt_som);
- 
--static int lprocfs_rd_enable_remote_dir(char *page, char **start, off_t off,
--					int count, int *eof, void *data)
-+static int mdt_enable_remote_dir_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--	return snprintf(page, count, "%u\n", mdt->mdt_enable_remote_dir);
-+	return seq_printf(m, "%u\n", mdt->mdt_enable_remote_dir);
- }
- 
--static int lprocfs_wr_enable_remote_dir(struct file *file,
--					const char __user *buffer,
--					unsigned long count, void *data)
-+static ssize_t
-+mdt_enable_remote_dir_seq_write(struct file *file, const char __user *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device *obd = data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	__u32 val;
- 	int rc;
-@@ -830,22 +784,24 @@ static int lprocfs_wr_enable_remote_dir(struct file *file,
- 	mdt->mdt_enable_remote_dir = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(mdt_enable_remote_dir);
- 
--static int lprocfs_rd_enable_remote_dir_gid(char *page, char **start, off_t off,
--					    int count, int *eof, void *data)
-+static int mdt_enable_remote_dir_gid_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--	return snprintf(page, count, "%d\n",
--			(int)mdt->mdt_enable_remote_dir_gid);
-+	return seq_printf(m, "%d\n",
-+			  (int)mdt->mdt_enable_remote_dir_gid);
- }
- 
--static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
--					    const char __user *buffer,
--					    unsigned long count, void *data)
-+static ssize_t
-+mdt_enable_remote_dir_gid_seq_write(struct file *file,
-+				    const char __user *buffer,
-+				    size_t count, loff_t *off)
- {
--	struct obd_device *obd = data;
-+	struct seq_file   *m = file->private_data;
-+	struct obd_device *obd = m->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 	__u32 val;
- 	int rc;
-@@ -857,97 +813,72 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
- 	mdt->mdt_enable_remote_dir_gid = val;
- 	return count;
- }
--
--static struct lprocfs_vars lprocfs_mdt_obd_vars[] = {
--	{ "uuid",			lprocfs_rd_uuid, NULL,
--					NULL, NULL, 0 },
--	{ "recovery_status",		lprocfs_obd_rd_recovery_status, NULL,
--					NULL, NULL, 0 },
--	{ "num_exports",		lprocfs_rd_num_exports,	NULL,
--					NULL, NULL, 0 },
--	{ "identity_expire",		lprocfs_rd_identity_expire,
--					lprocfs_wr_identity_expire,
--					NULL, NULL, 0 },
--	{ "identity_acquire_expire",    lprocfs_rd_identity_acquire_expire,
--					lprocfs_wr_identity_acquire_expire,
--					NULL, NULL, 0 },
--	{ "identity_upcall",		lprocfs_rd_identity_upcall,
--					lprocfs_wr_identity_upcall,
--					NULL, NULL, 0 },
--	{ "identity_flush",		NULL, lprocfs_wr_identity_flush,
--					NULL, NULL, 0 },
--	{ "identity_info",		NULL, lprocfs_wr_identity_info,
--					NULL, NULL, 0 },
--	{ "capa",			lprocfs_rd_capa,
--					lprocfs_wr_capa,
--					NULL, NULL, 0 },
--	{ "capa_timeout",		lprocfs_rd_capa_timeout,
--					lprocfs_wr_capa_timeout,
--					NULL, NULL, 0 },
--	{ "capa_key_timeout",		lprocfs_rd_ck_timeout,
--					lprocfs_wr_ck_timeout,
--					NULL, NULL, 0 },
--	{ "capa_count",			lprocfs_rd_capa_count, NULL,
--					NULL, NULL, 0 },
--	{ "site_stats",			lprocfs_rd_site_stats, NULL,
--					NULL, NULL, 0 },
--	{ "evict_client",		NULL, lprocfs_mdt_wr_evict_client,
--					NULL, NULL, 0 },
--	{ "hash_stats",			lprocfs_obd_rd_hash, NULL,
--					NULL, NULL, 0 },
--	{ "sec_level",			lprocfs_rd_sec_level,
--					lprocfs_wr_sec_level,
--					NULL, NULL, 0 },
--	{ "commit_on_sharing",		lprocfs_rd_cos, lprocfs_wr_cos,
--					NULL, NULL, 0 },
--	{ "root_squash",		lprocfs_rd_mdt_root_squash,
--					lprocfs_wr_mdt_root_squash,
--					NULL, NULL, 0 },
--	{ "nosquash_nids",		lprocfs_rd_mdt_nosquash_nids,
--					lprocfs_wr_mdt_nosquash_nids,
--					NULL, NULL, 0 },
--	{ "som",			lprocfs_rd_mdt_som,
--					lprocfs_wr_mdt_som,
--					NULL, NULL, 0 },
--	{ "instance",			lprocfs_target_rd_instance, NULL,
--					NULL, NULL, 0},
--	{ "ir_factor",			lprocfs_obd_rd_ir_factor,
--					lprocfs_obd_wr_ir_factor,
--					NULL, NULL, 0 },
--	{ "job_cleanup_interval",       lprocfs_rd_job_interval,
--					lprocfs_wr_job_interval,
--					NULL, NULL, 0 },
--	{ "enable_remote_dir",		lprocfs_rd_enable_remote_dir,
--					lprocfs_wr_enable_remote_dir,
--					NULL, NULL, 0},
--	{ "enable_remote_dir_gid",	lprocfs_rd_enable_remote_dir_gid,
--					lprocfs_wr_enable_remote_dir_gid,
--					NULL, NULL, 0},
--	{ "hsm_control",		lprocfs_rd_hsm_cdt_control,
--					lprocfs_wr_hsm_cdt_control,
--					NULL, NULL, 0 },
--	{ 0 }
--};
--
--static struct lprocfs_vars lprocfs_mdt_module_vars[] = {
--	{ "num_refs",			lprocfs_rd_numrefs, NULL,
--					NULL, NULL, 0 },
--        { 0 }
--};
--
--void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars)
--{
--	lvars->module_vars  = lprocfs_mdt_module_vars;
--	lvars->obd_vars     = lprocfs_mdt_obd_vars;
--}
--
--struct lprocfs_vars lprocfs_mds_obd_vars[] = {
--	{ "uuid",	lprocfs_rd_uuid, NULL, NULL, NULL, 0 },
--	{ 0 }
--};
--
--struct lprocfs_vars lprocfs_mds_module_vars[] = {
--	{ "num_refs",	lprocfs_rd_numrefs, NULL, NULL, NULL, 0 },
-+LPROC_SEQ_FOPS(mdt_enable_remote_dir_gid);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(mdt, uuid);
-+LPROC_SEQ_FOPS_RO_TYPE(mdt, recovery_status);
-+LPROC_SEQ_FOPS_RO_TYPE(mdt, num_exports);
-+LPROC_SEQ_FOPS_RO_TYPE(mdt, target_instance);
-+LPROC_SEQ_FOPS_RO_TYPE(mdt, hash);
-+LPROC_SEQ_FOPS_WO_TYPE(mdt, mds_evict_client);
-+LPROC_SEQ_FOPS_RW_TYPE(mdt, job_interval);
-+LPROC_SEQ_FOPS_RW_TYPE(mdt, ir_factor);
-+LPROC_SEQ_FOPS_RW_TYPE(mdt, nid_stats_clear);
-+LPROC_SEQ_FOPS(mdt_hsm_cdt_control);
-+
-+static struct lprocfs_seq_vars lprocfs_mdt_obd_vars[] = {
-+	{ .name =	"uuid",
-+	  .fops =	&mdt_uuid_fops				},
-+	{ .name =	"recovery_status",
-+	  .fops =	&mdt_recovery_status_fops		},
-+	{ .name =	"num_exports",
-+	  .fops =	&mdt_num_exports_fops			},
-+	{ .name =	"identity_expire",
-+	  .fops =	&mdt_identity_expire_fops		},
-+	{ .name =	"identity_acquire_expire",
-+	  .fops =	&mdt_identity_acquire_expire_fops	},
-+	{ .name =	"identity_upcall",
-+	  .fops =	&mdt_identity_upcall_fops		},
-+	{ .name =	"identity_flush",
-+	  .fops =	&mdt_identity_flush_fops		},
-+	{ .name =	"identity_info",
-+	  .fops =	&mdt_identity_info_fops			},
-+	{ .name =	"capa",
-+	  .fops =	&mdt_capa_fops				},
-+	{ .name =	"capa_timeout",
-+	  .fops =	&mdt_capa_timeout_fops			},
-+	{ .name =	"capa_key_timeout",
-+	  .fops =	&mdt_ck_timeout_fops			},
-+	{ .name =	"capa_count",
-+	  .fops =	&mdt_capa_count_fops			},
-+	{ .name =	"site_stats",
-+	  .fops =	&mdt_site_stats_fops			},
-+	{ .name =	"evict_client",
-+	  .fops =	&mdt_mds_evict_client_fops		},
-+	{ .name =	"hash_stats",
-+	  .fops =	&mdt_hash_fops				},
-+	{ .name =	"sec_level",
-+	  .fops =	&mdt_sec_level_fops			},
-+	{ .name =	"commit_on_sharing",
-+	  .fops =	&mdt_cos_fops				},
-+	{ .name =	"root_squash",
-+	  .fops =	&mdt_root_squash_fops			},
-+	{ .name =	"nosquash_nids",
-+	  .fops =	&mdt_nosquash_nids_fops			},
-+	{ .name =	"som",
-+	  .fops =	&mdt_som_fops				},
-+	{ .name =	"instance",
-+	  .fops =	&mdt_target_instance_fops		},
-+	{ .name =	"ir_factor",
-+	  .fops =	&mdt_ir_factor_fops			},
-+	{ .name =	"job_cleanup_interval",
-+	  .fops =	&mdt_job_interval_fops			},
-+	{ .name =	"enable_remote_dir",
-+	  .fops =	&mdt_enable_remote_dir_fops		},
-+	{ .name =	"enable_remote_dir_gid",
-+	  .fops =	&mdt_enable_remote_dir_gid_fops		},
-+	{ .name =	"hsm_control",
-+	  .fops =	&mdt_hsm_cdt_control_fops		},
- 	{ 0 }
- };
- 
-@@ -985,21 +916,15 @@ int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v)
- 
- int lprocfs_mdt_open_files_seq_open(struct inode *inode, struct file *file)
- {
--	struct proc_dir_entry	*dp = PDE(inode);
- 	struct seq_file		*seq;
--	struct nid_stat		*tmp;
- 	int			rc;
- 
--	if (LPROCFS_ENTRY_CHECK(dp))
--		return -ENOENT;
--
--	tmp = dp->data;
- 	rc = single_open(file, &lprocfs_mdt_open_files_seq_show, NULL);
- 	if (rc != 0)
- 		return rc;
- 
- 	seq = file->private_data;
--	seq->private = tmp;
-+	seq->private = PDE_DATA(inode);
- 
- 	return 0;
- }
-@@ -1040,3 +965,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
-         lprocfs_counter_init(stats, LPROC_MDT_CROSSDIR_RENAME, 0,
-                              "crossdir_rename", "reqs");
- }
-+
-+int mdt_procfs_init(struct mdt_device *mdt, const char *name)
-+{
-+	struct obd_device		*obd = mdt2obd_dev(mdt);
-+	int				 rc;
-+	ENTRY;
-+
-+	LASSERT(name != NULL);
-+
-+	obd->obd_vars = lprocfs_mdt_obd_vars;
-+	rc = lprocfs_seq_obd_setup(obd);
-+	if (rc) {
-+		CERROR("%s: cannot create proc entries: rc = %d\n",
-+		       mdt_obd_name(mdt), rc);
-+		return rc;
-+	}
-+
-+	rc = hsm_cdt_procfs_init(mdt);
-+	if (rc) {
-+		CERROR("%s: cannot create hsm proc entries: rc = %d\n",
-+		       mdt_obd_name(mdt), rc);
-+		return rc;
-+	}
-+
-+	obd->obd_proc_exports_entry = proc_mkdir("exports",
-+						 obd->obd_proc_entry);
-+	if (obd->obd_proc_exports_entry)
-+		lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+				   NULL, NULL,
-+#endif
-+				   obd, &mdt_nid_stats_clear_fops);
-+	rc = lprocfs_alloc_md_stats(obd, LPROC_MDT_LAST);
-+	if (rc)
-+		return rc;
-+	mdt_stats_counter_init(obd->obd_md_stats);
-+
-+	rc = lprocfs_job_stats_init(obd, LPROC_MDT_LAST,
-+				    mdt_stats_counter_init);
-+
-+	rc = lproc_mdt_attach_rename_seqstat(mdt);
-+	if (rc)
-+		CERROR("%s: MDT can not create rename stats rc = %d\n",
-+		       mdt_obd_name(mdt), rc);
-+
-+	RETURN(rc);
-+}
-+
-+void mdt_procfs_fini(struct mdt_device *mdt)
-+{
-+	struct obd_device *obd = mdt2obd_dev(mdt);
-+
-+	if (obd->obd_proc_exports_entry != NULL) {
-+		lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
-+		obd->obd_proc_exports_entry = NULL;
-+	}
-+
-+	lprocfs_free_per_client_stats(obd);
-+	hsm_cdt_procfs_fini(mdt);
-+	lprocfs_obd_cleanup(obd);
-+	lprocfs_free_md_stats(obd);
-+	lprocfs_free_obd_stats(obd);
-+	lprocfs_job_stats_fini(obd);
-+}
-diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c
-index 390164f..424ddf5 100644
---- a/lustre/mdt/mdt_mds.c
-+++ b/lustre/mdt/mdt_mds.c
-@@ -464,6 +464,13 @@ static struct lu_device *mds_device_free(const struct lu_env *env,
- 	RETURN(NULL);
- }
- 
-+LPROC_SEQ_FOPS_RO_TYPE(mds, uuid);
-+
-+static struct lprocfs_seq_vars lprocfs_mds_obd_vars[] = {
-+	{ "uuid",	&mds_uuid_fops  },
-+	{ 0 }
-+};
-+
- static struct lu_device *mds_device_alloc(const struct lu_env *env,
- 					  struct lu_device_type *t,
- 					  struct lustre_cfg *cfg)
-@@ -487,7 +494,8 @@ static struct lu_device *mds_device_alloc(const struct lu_env *env,
- 	/* set this lu_device to obd, because error handling need it */
- 	obd->obd_lu_dev = l;
- 
--	rc = lprocfs_obd_setup(obd, lprocfs_mds_obd_vars);
-+	obd->obd_vars = lprocfs_mds_obd_vars;
-+	rc = lprocfs_seq_obd_setup(obd);
- 	if (rc != 0) {
- 		mds_device_free(env, l);
- 		l = ERR_PTR(rc);
-@@ -541,7 +549,7 @@ int mds_mod_init(void)
- 
- 	return class_register_type(&mds_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				   lprocfs_mds_module_vars,
-+				   NULL,
- #endif
- 				   LUSTRE_MDS_NAME, &mds_device_type);
- }
--- 
-1.9.3
-

diff --git a/sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
similarity index 99%
rename from sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
rename to sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index e14c736..c27b478 100644
--- a/sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,7 +1,7 @@
-From cec7352d2cf74e8124a499aac74b246baa888c3c Mon Sep 17 00:00:00 2001
+From 54b05aa8e43dd1c0ce1d7c78c8fea11e64bef099 Mon Sep 17 00:00:00 2001
 From: Yang Sheng <yang.sheng@intel.com>
 Date: Thu, 24 Apr 2014 11:43:09 +0800
-Subject: [PATCH 8/8] LU-4416 mm: Backport shrinker changes from upstream
+Subject: [PATCH 6/6] LU-4416 mm: Backport shrinker changes from upstream
 
 Convert shrinker to new count/scan API.
 --ptlrpc shrinker
@@ -22,7 +22,7 @@ Change-Id: Idbd7cd3b7488202e5e8f6fdf757ae6d20e28d642
  6 files changed, 338 insertions(+), 163 deletions(-)
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index dba971d..840fcd5 100644
+index ac5c413..81c6d7f 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
 @@ -290,6 +290,22 @@ No crc32c pclmulqdq crypto api found, enable internal pclmulqdq based crc32c

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 26e07bd..d26599a 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -43,11 +43,9 @@ PATCHES=(
 	"${FILESDIR}/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch"
 	"${FILESDIR}/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch"
-	"${FILESDIR}/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
+	"${FILESDIR}/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch"
+	"${FILESDIR}/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
 	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-05-19  9:06 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-05-19  9:06 UTC (permalink / raw
  To: gentoo-commits

commit:     2729b8f19c87054cccf7854a70193e887f9cac14
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon May 19 09:06:02 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon May 19 09:06:02 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=2729b8f1

Update lustre patches

Signed-off-by: Alexey Shvetsov <alexxy <AT> gentoo.org>

---
 ...cfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch |   8 +-
 ...cfs-update-zfs-proc-handling-to-seq_files.patch |  48 +-
 ...rocfs-move-osp-proc-handling-to-seq_files.patch | 205 +++++---
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |  10 +-
 ...cfs-move-mdt-mds-proc-handling-to-seq_fil.patch | 577 +++++++++++----------
 ...procfs-symlinks-for-forward-compatibility.patch | 199 +++++++
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} | 427 ++++++++-------
 ...-Backport-shrinker-changes-from-upstream.patch} |  44 +-
 sys-cluster/lustre/lustre-9999.ebuild              |   5 +-
 9 files changed, 924 insertions(+), 599 deletions(-)

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
index a00e070..537f248 100644
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From b0d57f2b81f5ec6f1f2cad9914cdb01960377f01 Mon Sep 17 00:00:00 2001
+From 0267429e006d1f7ccfe63cbb90849ba430f649a0 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Feb 2014 12:54:05 -0500
-Subject: [PATCH 1/7] LU-3319 procfs: Move NRS TBF proc handling to seq_files
+Subject: [PATCH 1/8] LU-3319 procfs: Move NRS TBF proc handling to seq_files
 
 With newer kernels moving their proc file system handling
 to seq_files this patch migrates the proc handling for NRS
@@ -14,7 +14,7 @@ Signed-off-by: James Simmons <uja.ornl@gmail.com>
  1 file changed, 14 insertions(+), 21 deletions(-)
 
 diff --git a/lustre/ptlrpc/nrs_tbf.c b/lustre/ptlrpc/nrs_tbf.c
-index 80fa9ff..93b9103 100644
+index f0ab74d..046e509 100644
 --- a/lustre/ptlrpc/nrs_tbf.c
 +++ b/lustre/ptlrpc/nrs_tbf.c
 @@ -1572,30 +1572,26 @@ static void nrs_tbf_req_stop(struct ptlrpc_nrs_policy *policy,
@@ -119,5 +119,5 @@ index 80fa9ff..93b9103 100644
  	return rc;
  }
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index 7a8299b..975647d 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,23 +1,23 @@
-From 2c8c53a01d77519c8de108bbe69734e5931f41d8 Mon Sep 17 00:00:00 2001
+From 1d3e2fbd8661a770d2d64a2402076577ec920e9c Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 18 Feb 2014 18:44:22 -0500
-Subject: [PATCH 2/7] LU-3319 procfs: update zfs proc handling to seq_files
+Date: Wed, 23 Apr 2014 09:31:09 -0400
+Subject: [PATCH 2/8] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
 ---
- lustre/osd-zfs/osd_handler.c  | 13 ++++---
+ lustre/osd-zfs/osd_handler.c  | 13 +++---
  lustre/osd-zfs/osd_internal.h |  3 +-
- lustre/osd-zfs/osd_lproc.c    | 90 +++++++++++++++++++++++++------------------
- 3 files changed, 60 insertions(+), 46 deletions(-)
+ lustre/osd-zfs/osd_lproc.c    | 92 +++++++++++++++++++++++++------------------
+ 3 files changed, 61 insertions(+), 47 deletions(-)
 
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 0dc8c2e..29a3617 100644
+index 42e6e20..83b243d 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -767,12 +767,13 @@ static int osd_process_config(const struct lu_env *env,
+@@ -761,12 +761,13 @@ static int osd_process_config(const struct lu_env *env,
  		break;
  	case LCFG_PARAM: {
  		LASSERT(&o->od_dt_dev);
@@ -36,7 +36,7 @@ index 0dc8c2e..29a3617 100644
  		break;
  	}
  	default:
-@@ -920,7 +921,7 @@ int __init osd_init(void)
+@@ -923,7 +924,7 @@ int __init osd_init(void)
  
  	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
@@ -46,10 +46,10 @@ index 0dc8c2e..29a3617 100644
  				 LUSTRE_OSD_ZFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h
-index 63f680c..740dba7 100644
+index c53ad8b..1773313 100644
 --- a/lustre/osd-zfs/osd_internal.h
 +++ b/lustre/osd-zfs/osd_internal.h
-@@ -420,8 +420,7 @@ enum {
+@@ -405,8 +405,7 @@ enum {
  };
  
  /* osd_lproc.c */
@@ -60,7 +60,7 @@ index 63f680c..740dba7 100644
  int osd_procfs_init(struct osd_device *osd, const char *name);
  int osd_procfs_fini(struct osd_device *osd);
 diff --git a/lustre/osd-zfs/osd_lproc.c b/lustre/osd-zfs/osd_lproc.c
-index 0854ce6..bed08e9 100644
+index bc8a807..f19ed11 100644
 --- a/lustre/osd-zfs/osd_lproc.c
 +++ b/lustre/osd-zfs/osd_lproc.c
 @@ -107,27 +107,27 @@ out:
@@ -94,7 +94,7 @@ index 0854ce6..bed08e9 100644
 -static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
 -					unsigned long count, void *data)
 +static ssize_t
-+lprocfs_osd_force_sync_seq_write(struct file *file, const char *buffer,
++lprocfs_osd_force_sync_seq_write(struct file *file, const char __user *buffer,
 +				size_t count, loff_t *off)
  {
 -	struct dt_device  *dt = data;
@@ -103,14 +103,14 @@ index 0854ce6..bed08e9 100644
  	struct lu_env      env;
  	int rc;
  
-@@ -139,20 +139,22 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+@@ -139,21 +139,23 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
  
  	return rc == 0 ? count : rc;
  }
 +LPROC_SEQ_FOPS_WO_TYPE(zfs, osd_force_sync);
  
--static int lprocfs_osd_rd_iused_est(char *page, char **start, off_t off, int count,
--					int *eof, void *data)
+-static int lprocfs_osd_rd_iused_est(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
 +static int zfs_osd_iused_est_seq_show(struct seq_file *m, void *data)
  {
 -	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
@@ -121,10 +121,12 @@ index 0854ce6..bed08e9 100644
 +	return seq_printf(m, "%d\n", osd->od_quota_iused_est);
  }
  
--static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
--					unsigned long count, void *data)
-+static ssize_t zfs_osd_iused_est_seq_write(struct file *file, const char *buffer,
-+						size_t count, loff_t *off)
+-static int lprocfs_osd_wr_iused_est(struct file *file,
+-				    const char __user *buffer,
+-				    unsigned long count, void *data)
++static ssize_t
++zfs_osd_iused_est_seq_write(struct file *file, const char __user *buffer,
++			     size_t count, loff_t *off)
  {
 -	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
 +	struct seq_file	  *m = file->private_data;
@@ -133,7 +135,7 @@ index 0854ce6..bed08e9 100644
  	int                rc, val;
  
  	LASSERT(osd != NULL);
-@@ -165,24 +167,36 @@ static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
+@@ -166,24 +168,36 @@ static int lprocfs_osd_wr_iused_est(struct file *file,
  
  	return count;
  }
@@ -188,7 +190,7 @@ index 0854ce6..bed08e9 100644
  	{ 0 }
  };
  
-@@ -202,7 +216,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
+@@ -203,7 +217,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
  	LASSERT(name != NULL);
  	LASSERT(type != NULL);
  
@@ -198,5 +200,5 @@ index 0854ce6..bed08e9 100644
  	if (IS_ERR(osd->od_proc_entry)) {
  		rc = PTR_ERR(osd->od_proc_entry);
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 1dcde79..d9bfa0b 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 9028aafc0c8651d6a840d9066ca7d950106fbdc5 Mon Sep 17 00:00:00 2001
+From 8128e9daa5f394f97bcfcc3f1da0b8285754c5c4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Wed, 26 Mar 2014 19:59:18 -0400
-Subject: [PATCH 3/7] LU-3319 procfs: move osp proc handling to seq_files
+Date: Thu, 24 Apr 2014 12:04:57 -0400
+Subject: [PATCH 3/8] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp
@@ -10,14 +10,14 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
 ---
- lustre/osp/lproc_osp.c    | 402 +++++++++++++++++++++++++---------------------
- lustre/osp/lwp_dev.c      |  19 +--
+ lustre/osp/lproc_osp.c    | 431 ++++++++++++++++++++++++----------------------
+ lustre/osp/lwp_dev.c      |  19 +-
  lustre/osp/osp_dev.c      |  32 ++--
  lustre/osp/osp_internal.h |   2 -
- 4 files changed, 228 insertions(+), 227 deletions(-)
+ 4 files changed, 242 insertions(+), 242 deletions(-)
 
 diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c
-index 75ebeb1..1271b7c 100644
+index 118c4df..c23ce18 100644
 --- a/lustre/osp/lproc_osp.c
 +++ b/lustre/osp/lproc_osp.c
 @@ -45,24 +45,24 @@
@@ -396,13 +396,14 @@ index 75ebeb1..1271b7c 100644
  	struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev);
  
  	if (osp == NULL)
-@@ -411,126 +404,161 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
+@@ -411,43 +404,40 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
  	 * - sync changes are zero - no llog records
  	 * - sync in progress are zero - no RPCs in flight
  	 */
 -	return snprintf(page, count, "%lu\n",
+-			osp->opd_syn_rpc_in_progress + osp->opd_syn_changes);
 +	return seq_printf(m, "%lu\n",
- 			osp->opd_syn_rpc_in_progress + osp->opd_syn_changes);
++			  osp->opd_syn_rpc_in_progress + osp->opd_syn_changes);
  }
 +LPROC_SEQ_FOPS_RO(osp_destroys_in_flight);
  
@@ -424,6 +425,44 @@ index 75ebeb1..1271b7c 100644
  }
 +LPROC_SEQ_FOPS_RO(osp_old_sync_processed);
  
+-static int osp_rd_lfsck_max_rpcs_in_flight(char *page, char **start, off_t off,
+-					   int count, int *eof, void *data)
++static int
++osp_lfsck_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *dev = data;
++	struct obd_device *dev = m->private;
+ 	__u32 max;
+-	int rc;
+ 
+-	*eof = 1;
+ 	max = obd_get_max_rpcs_in_flight(&dev->u.cli);
+-	rc = snprintf(page, count, "%u\n", max);
+-
+-	return rc;
++	return seq_printf(m, "%u\n", max);
+ }
+ 
+-static int osp_wr_lfsck_max_rpcs_in_flight(struct file *file,
+-					   const char *buffer,
+-					   unsigned long count, void *data)
++static ssize_t
++osp_lfsck_max_rpcs_in_flight_seq_write(struct file *file,
++				       const char __user *buffer,
++				       size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = data;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *dev = m->private;
+ 	int val;
+ 	int rc;
+ 
+@@ -460,111 +450,148 @@ static int osp_wr_lfsck_max_rpcs_in_flight(struct file *file,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_lfsck_max_rpcs_in_flight);
+ 
 -static struct lprocfs_vars lprocfs_osp_obd_vars[] = {
 -	{ "uuid",		lprocfs_rd_uuid, 0, 0 },
 -	{ "ping",		0, lprocfs_wr_ping, 0, 0, 0222 },
@@ -461,6 +500,8 @@ index 75ebeb1..1271b7c 100644
  
 -	/* for compatibility reasons */
 -	{ "destroys_in_flight",	osp_rd_destroys_in_flight, 0, 0 },
+-	{ "lfsck_max_rpcs_in_flight", osp_rd_lfsck_max_rpcs_in_flight,
+-				      osp_wr_lfsck_max_rpcs_in_flight, 0 },
 -	{ 0 }
 -};
 +static int osp_max_pages_per_rpc_seq_show(struct seq_file *m, void *v)
@@ -474,55 +515,55 @@ index 75ebeb1..1271b7c 100644
 +LPROC_SEQ_FOPS_RO_TYPE(osp, state);
 +
 +static struct lprocfs_seq_vars lprocfs_osp_obd_vars[] = {
-+	{ .name	=	"uuid",
-+	  .fops	=	&osp_uuid_fops			},
-+	{ .name	=	"ping",
-+	  .fops	=	&osp_ping_fops,
++	{ .name =	"uuid",
++	  .fops =	&osp_uuid_fops			},
++	{ .name =	"ping",
++	  .fops =	&osp_ping_fops,
 +	  .proc_mode =	0222				},
-+	{ .name	=	"connect_flags",
-+	  .fops	=	&osp_connect_flags_fops		},
-+	{ .name	=	"ost_server_uuid",
-+	  .fops	=	&osp_server_uuid_fops		},
-+	{ .name	=	"ost_conn_uuid",
-+	  .fops	=	&osp_conn_uuid_fops		},
-+	{ .name	=	"active",
-+	  .fops	=	&osp_active_fops		},
-+	{ .name	=	"max_rpcs_in_flight",
-+	  .fops	=	&osp_max_rpcs_in_flight_fops	},
-+	{ .name	=	"max_rpcs_in_progress",
-+	  .fops	=	&osp_max_rpcs_in_prog_fops	},
-+	{ .name	=	"create_count",
-+	  .fops	=	&osp_create_count_fops		},
-+	{ .name	=	"max_create_count",
-+	  .fops	=	&osp_max_create_count_fops	},
-+	{ .name	=	"prealloc_next_id",
-+	  .fops	=	&osp_prealloc_next_id_fops	},
-+	{ .name	=	"prealloc_next_seq",
-+	  .fops	=	&osp_prealloc_next_seq_fops	},
-+	{ .name	=	"prealloc_last_id",
-+	  .fops	=	&osp_prealloc_last_id_fops	},
-+	{ .name	=	"prealloc_last_seq",
-+	  .fops	=	&osp_prealloc_last_seq_fops	},
-+	{ .name	=	"prealloc_reserved",
-+	  .fops	=	&osp_prealloc_reserved_fops	},
-+	{ .name	=	"timeouts",
-+	  .fops	=	&osp_timeouts_fops		},
-+	{ .name	=	"import",
-+	  .fops	=	&osp_import_fops		},
-+	{ .name	=	"state",
-+	  .fops	=	&osp_state_fops			},
-+	{ .name	=	"maxage",
-+	  .fops	=	&osp_maxage_fops		},
-+	{ .name	=	"prealloc_status",
-+	  .fops	=	&osp_pre_status_fops		},
-+	{ .name	=	"sync_changes",
-+	  .fops	=	&osp_syn_changes_fops		},
-+	{ .name	=	"sync_in_flight",
-+	  .fops	=	&osp_syn_in_flight_fops		},
-+	{ .name	=	"sync_in_progress",
-+	  .fops	=	&osp_syn_in_prog_fops		},
-+	{ .name	=	"old_sync_processed",
-+	  .fops	=	&osp_old_sync_processed_fops	},
++	{ .name =	"connect_flags",
++	  .fops =	&osp_connect_flags_fops		},
++	{ .name =	"ost_server_uuid",
++	  .fops =	&osp_server_uuid_fops		},
++	{ .name =	"ost_conn_uuid",
++	  .fops =	&osp_conn_uuid_fops		},
++	{ .name =	"active",
++	  .fops =	&osp_active_fops		},
++	{ .name =	"max_rpcs_in_flight",
++	  .fops =	&osp_max_rpcs_in_flight_fops	},
++	{ .name =	"max_rpcs_in_progress",
++	  .fops =	&osp_max_rpcs_in_prog_fops	},
++	{ .name =	"create_count",
++	  .fops =	&osp_create_count_fops		},
++	{ .name =	"max_create_count",
++	  .fops =	&osp_max_create_count_fops	},
++	{ .name =	"prealloc_next_id",
++	  .fops =	&osp_prealloc_next_id_fops	},
++	{ .name =	"prealloc_next_seq",
++	  .fops =	&osp_prealloc_next_seq_fops	},
++	{ .name =	"prealloc_last_id",
++	  .fops =	&osp_prealloc_last_id_fops	},
++	{ .name =	"prealloc_last_seq",
++	  .fops =	&osp_prealloc_last_seq_fops	},
++	{ .name =	"prealloc_reserved",
++	  .fops =	&osp_prealloc_reserved_fops	},
++	{ .name =	"timeouts",
++	  .fops =	&osp_timeouts_fops		},
++	{ .name =	"import",
++	  .fops =	&osp_import_fops		},
++	{ .name =	"state",
++	  .fops =	&osp_state_fops			},
++	{ .name =	"maxage",
++	  .fops =	&osp_maxage_fops		},
++	{ .name =	"prealloc_status",
++	  .fops =	&osp_pre_status_fops		},
++	{ .name =	"sync_changes",
++	  .fops =	&osp_syn_changes_fops		},
++	{ .name =	"sync_in_flight",
++	  .fops =	&osp_syn_in_flight_fops		},
++	{ .name =	"sync_in_progress",
++	  .fops =	&osp_syn_in_prog_fops		},
++	{ .name =	"old_sync_processed",
++	  .fops =	&osp_old_sync_processed_fops	},
  
 -static struct lprocfs_vars lprocfs_osp_osd_vars[] = {
 -	{ "blocksize",		lprocfs_dt_rd_blksize, 0, 0 },
@@ -532,8 +573,10 @@ index 75ebeb1..1271b7c 100644
 -	{ "filestotal",		lprocfs_dt_rd_filestotal, 0, 0 },
 -	{ "filesfree",		lprocfs_dt_rd_filesfree, 0, 0 },
 +	/* for compatibility reasons */
-+	{ .name	=	"destroys_in_flight",
-+	  .fops	=	&osp_destroys_in_flight_fops	},
++	{ .name =	"destroys_in_flight",
++	  .fops =	&osp_destroys_in_flight_fops		},
++	{ .name	=	"lfsck_max_rpcs_in_flight",
++	  .fops	=	&osp_lfsck_max_rpcs_in_flight_fops	},
  	{ 0 }
  };
  
@@ -547,18 +590,18 @@ index 75ebeb1..1271b7c 100644
 +LPROC_SEQ_FOPS_RO_TYPE(osp, dt_filesfree);
 +
 +static struct lprocfs_seq_vars lprocfs_osp_osd_vars[] = {
-+	{ .name	=	"blocksize",
-+	  .fops	=	&osp_dt_blksize_fops		},
-+	{ .name	=	"kbytestotal",
-+	  .fops	=	&osp_dt_kbytestotal_fops	},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&osp_dt_kbytesfree_fops		},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&osp_dt_kbytesavail_fops	},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&osp_dt_filestotal_fops		},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&osp_dt_filesfree_fops		},
++	{ .name =	"blocksize",
++	  .fops =	&osp_dt_blksize_fops		},
++	{ .name =	"kbytestotal",
++	  .fops =	&osp_dt_kbytestotal_fops	},
++	{ .name =	"kbytesfree",
++	  .fops =	&osp_dt_kbytesfree_fops		},
++	{ .name =	"kbytesavail",
++	  .fops =	&osp_dt_kbytesavail_fops	},
++	{ .name =	"filestotal",
++	  .fops =	&osp_dt_filestotal_fops		},
++	{ .name =	"filesfree",
++	  .fops =	&osp_dt_filesfree_fops		},
  	{ 0 }
  };
  
@@ -641,7 +684,7 @@ index 75ebeb1..1271b7c 100644
 +					       "../osp/%s", obd->obd_name);
 +	if (osp->opd_symlink == NULL)
 +		CERROR("could not register OSC symlink for "
-+			"/proc/fs/lustre/osp/%s.", obd->obd_name);
++		       "/proc/fs/lustre/osp/%s.", obd->obd_name);
  }
  
  #endif /* LPROCFS */
@@ -686,10 +729,10 @@ index a73973a..c115ee6 100644
  
  	RETURN(0);
 diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
-index 60bf8ef..b0c68ad 100644
+index 0a1cafa..27e3011 100644
 --- a/lustre/osp/osp_dev.c
 +++ b/lustre/osp/osp_dev.c
-@@ -366,7 +366,7 @@ static int osp_process_config(const struct lu_env *env,
+@@ -367,7 +367,7 @@ static int osp_process_config(const struct lu_env *env,
  			      struct lu_device *dev, struct lustre_cfg *lcfg)
  {
  	struct osp_device		*d = lu2osp_dev(dev);
@@ -698,7 +741,7 @@ index 60bf8ef..b0c68ad 100644
  	int				 rc;
  
  	ENTRY;
-@@ -380,11 +380,9 @@ static int osp_process_config(const struct lu_env *env,
+@@ -381,11 +381,9 @@ static int osp_process_config(const struct lu_env *env,
  		rc = osp_shutdown(env, d);
  		break;
  	case LCFG_PARAM:
@@ -713,7 +756,7 @@ index 60bf8ef..b0c68ad 100644
  		if (rc > 0)
  			rc = 0;
  		if (rc == -ENOSYS) {
-@@ -1238,33 +1236,27 @@ struct llog_operations osp_mds_ost_orig_logops;
+@@ -1241,33 +1239,27 @@ struct llog_operations osp_mds_ost_orig_logops;
  
  static int __init osp_mod_init(void)
  {
@@ -750,7 +793,7 @@ index 60bf8ef..b0c68ad 100644
  #endif
  				 LUSTRE_LWP_NAME, &lwp_device_type);
  	if (rc != 0) {
-@@ -1284,18 +1276,18 @@ static int __init osp_mod_init(void)
+@@ -1287,18 +1279,18 @@ static int __init osp_mod_init(void)
  		return rc;
  
  	type = class_search_type(LUSTRE_OSP_NAME);
@@ -775,10 +818,10 @@ index 60bf8ef..b0c68ad 100644
  	class_unregister_type(LUSTRE_OSP_NAME);
  	lu_kmem_fini(osp_caches);
 diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
-index 1291374..66ad203 100644
+index e220914..d8d4a2b 100644
 --- a/lustre/osp/osp_internal.h
 +++ b/lustre/osp/osp_internal.h
-@@ -530,7 +530,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
+@@ -586,7 +586,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
  int osp_init_pre_fid(struct osp_device *osp);
  
  /* lproc_osp.c */
@@ -786,7 +829,7 @@ index 1291374..66ad203 100644
  void osp_lprocfs_init(struct osp_device *osp);
  
  /* osp_sync.c */
-@@ -544,7 +543,6 @@ int osp_sync_fini(struct osp_device *d);
+@@ -600,7 +599,6 @@ int osp_sync_fini(struct osp_device *d);
  void __osp_sync_check_for_work(struct osp_device *d);
  
  /* lwp_dev.c */
@@ -795,5 +838,5 @@ index 1291374..66ad203 100644
  extern struct lu_device_type lwp_device_type;
  
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index 9b9e0ae..7ccbf0e 100644
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From d13a2c80d2a861b1c9fe98e5db3ae1af06a1103a Mon Sep 17 00:00:00 2001
+From e4533607955d7358071e906746eed32e5c25a90f Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 19:57:44 -0400
-Subject: [PATCH 4/7] LU-3319 procfs: move lod proc handling to seq_files
+Subject: [PATCH 4/8] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the lod
@@ -82,10 +82,10 @@ index 8a6743d..e63c6ed 100644
  	lu_kmem_fini(lod_caches);
  }
 diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h
-index c3b1bc3..fc18f3d 100644
+index 4eab8cd..d4928c7 100644
 --- a/lustre/lod/lod_internal.h
 +++ b/lustre/lod/lod_internal.h
-@@ -432,7 +432,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
+@@ -441,7 +441,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
  int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *);
  
  /* lproc_lod.c */
@@ -587,5 +587,5 @@ index e976063..1598658 100644
  
  out:
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index 6291914..97fa886 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From dfc3f832947083639506d38c032e8b237198fee2 Mon Sep 17 00:00:00 2001
+From 333393612d269600a68c672af1f1848e865f9e20 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 25 Mar 2014 11:10:33 -0400
-Subject: [PATCH 5/7] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Date: Fri, 9 May 2014 16:30:46 -0400
+Subject: [PATCH 5/8] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds
@@ -10,18 +10,18 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Icbafdcd2c2fe3959a51dda3f9c715b0ff8d95742
 ---
- lustre/mdt/mdt_coordinator.c      | 269 +++++++---------
+ lustre/mdt/mdt_coordinator.c      | 269 +++++++-------
  lustre/mdt/mdt_handler.c          |  16 +-
  lustre/mdt/mdt_hsm_cdt_actions.c  |   5 +-
  lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
  lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
  lustre/mdt/mdt_internal.h         |  14 +-
- lustre/mdt/mdt_lproc.c            | 659 +++++++++++++++++++-------------------
+ lustre/mdt/mdt_lproc.c            | 713 +++++++++++++++++++-------------------
  lustre/mdt/mdt_mds.c              |  12 +-
- 8 files changed, 469 insertions(+), 516 deletions(-)
+ 8 files changed, 495 insertions(+), 544 deletions(-)
 
 diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
-index a9ee560..062f6cc 100644
+index 651ed7a..1617eeb 100644
 --- a/lustre/mdt/mdt_coordinator.c
 +++ b/lustre/mdt/mdt_coordinator.c
 @@ -45,7 +45,7 @@
@@ -127,8 +127,8 @@ index a9ee560..062f6cc 100644
 -static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
 -				 unsigned long count, void *data)
 +static ssize_t
-+mdt_hsm_policy_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
++mdt_hsm_policy_seq_write(struct file *file, const char __user *buffer,
++			 size_t count, loff_t *off)
  {
 -	struct mdt_device	*mdt = data;
 +	struct seq_file		*m = file->private_data;
@@ -190,7 +190,7 @@ index a9ee560..062f6cc 100644
 -static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
 -				unsigned long count, void *data)	\
 +static ssize_t								\
-+mdt_hsm_##VAR##_seq_write(struct file *file, const char *buffer,	\
++mdt_hsm_##VAR##_seq_write(struct file *file, const char __user *buffer,	\
 +			  size_t count, loff_t *off)			\
  									\
  {									\
@@ -209,14 +209,14 @@ index a9ee560..062f6cc 100644
  
  GENERATE_PROC_METHOD(cdt_loop_period)
  GENERATE_PROC_METHOD(cdt_grace_delay)
-@@ -1983,10 +1959,12 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
- #define CDT_PURGE_CMD    "purge"
+@@ -1984,10 +1960,12 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
  #define CDT_HELP_CMD     "help"
+ #define CDT_MAX_CMD_LEN  10
  
--int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+-int lprocfs_wr_hsm_cdt_control(struct file *file, const char __user *buffer,
 -			       unsigned long count, void *data)
 +ssize_t
-+mdt_hsm_cdt_control_seq_write(struct file *file, const char *buffer,
++mdt_hsm_cdt_control_seq_write(struct file *file, const char __user *buffer,
 +			      size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -225,7 +225,7 @@ index a9ee560..062f6cc 100644
  	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	struct coordinator	*cdt = &(mdt->mdt_coordinator);
  	int			 rc, usage = 0;
-@@ -2040,83 +2018,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+@@ -2051,83 +2029,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char __user *buffer,
  	RETURN(count);
  }
  
@@ -331,7 +331,7 @@ index a9ee560..062f6cc 100644
  }
  
  static inline enum hsm_copytool_action
-@@ -2136,9 +2102,9 @@ hsm_copytool_name2action(const char *name)
+@@ -2147,9 +2113,9 @@ hsm_copytool_name2action(const char *name)
  		return -1;
  }
  
@@ -344,7 +344,7 @@ index a9ee560..062f6cc 100644
  {
  	char *buf, *pos, *name;
  	size_t buf_size;
-@@ -2182,69 +2148,76 @@ out:
+@@ -2193,69 +2159,76 @@ out:
  	RETURN(rc);
  }
  
@@ -470,10 +470,10 @@ index a9ee560..062f6cc 100644
  	{ 0 }
  };
 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 329c5fc..3f46d6e 100644
+index 6b0c683..013cea2 100644
 --- a/lustre/mdt/mdt_handler.c
 +++ b/lustre/mdt/mdt_handler.c
-@@ -4672,7 +4672,6 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4666,7 +4666,6 @@ static int mdt_process_config(const struct lu_env *env,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -481,7 +481,7 @@ index 329c5fc..3f46d6e 100644
  		struct obd_device	   *obd = d->ld_obd;
  
  		/* For interoperability */
-@@ -4707,14 +4706,13 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4701,14 +4700,13 @@ static int mdt_process_config(const struct lu_env *env,
  			}
  		}
  
@@ -501,7 +501,7 @@ index 329c5fc..3f46d6e 100644
  			if (rc > 0 || rc == -ENOSYS)
  				/* we don't understand; pass it on */
  				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5913,7 +5911,6 @@ static struct lu_device_type mdt_device_type = {
+@@ -5905,7 +5903,6 @@ static struct lu_device_type mdt_device_type = {
  
  static int __init mdt_mod_init(void)
  {
@@ -509,7 +509,7 @@ index 329c5fc..3f46d6e 100644
  	int rc;
  
  	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5928,10 +5925,9 @@ static int __init mdt_mod_init(void)
+@@ -5920,10 +5917,9 @@ static int __init mdt_mod_init(void)
  	if (rc)
  		GOTO(lu_fini, rc);
  
@@ -522,7 +522,7 @@ index 329c5fc..3f46d6e 100644
  				 LUSTRE_MDT_NAME, &mdt_device_type);
  	if (rc)
 diff --git a/lustre/mdt/mdt_hsm_cdt_actions.c b/lustre/mdt/mdt_hsm_cdt_actions.c
-index da7f5a9..49c6b8b 100644
+index 0f5e0fe..6b1acf0 100644
 --- a/lustre/mdt/mdt_hsm_cdt_actions.c
 +++ b/lustre/mdt/mdt_hsm_cdt_actions.c
 @@ -513,9 +513,6 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
@@ -587,10 +587,10 @@ index 1300861..3125dcc 100644
  	RETURN(rc);
  }
 diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
-index 5b8cea1..cb52ef4 100644
+index 116d98f..d1a3b66 100644
 --- a/lustre/mdt/mdt_internal.h
 +++ b/lustre/mdt/mdt_internal.h
-@@ -759,9 +759,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
+@@ -756,9 +756,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
  void mdt_thread_info_fini(struct mdt_thread_info *mti);
  struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
  
@@ -600,7 +600,7 @@ index 5b8cea1..cb52ef4 100644
  int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
  		     const struct md_hsm *mh);
  
-@@ -899,13 +896,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
+@@ -896,13 +893,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
  int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
  
  /* coordinator control /proc interface */
@@ -618,7 +618,7 @@ index 5b8cea1..cb52ef4 100644
  /* md_hsm helpers */
  struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
  				      const struct lu_fid *fid,
-@@ -1045,8 +1041,6 @@ enum {
+@@ -1042,8 +1038,6 @@ enum {
  };
  void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
  void mdt_stats_counter_init(struct lprocfs_stats *stats);
@@ -628,10 +628,22 @@ index 5b8cea1..cb52ef4 100644
  void mdt_procfs_fini(struct mdt_device *mdt);
  
 diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c
-index 0ee5148..a895d57 100644
+index 70eba85..ff7a260 100644
 --- a/lustre/mdt/mdt_lproc.c
 +++ b/lustre/mdt/mdt_lproc.c
-@@ -156,7 +156,6 @@ static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
+@@ -144,8 +144,9 @@ static int mdt_rename_stats_seq_show(struct seq_file *seq, void *v)
+         return 0;
+ }
+ 
+-static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
+-                                          size_t len, loff_t *off)
++static ssize_t
++mdt_rename_stats_seq_write(struct file *file, const char __user *buf,
++			   size_t len, loff_t *off)
+ {
+         struct seq_file *seq = file->private_data;
+         struct mdt_device *mdt = seq->private;
+@@ -156,7 +157,6 @@ static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
  
          return len;
  }
@@ -639,12 +651,13 @@ index 0ee5148..a895d57 100644
  LPROC_SEQ_FOPS(mdt_rename_stats);
  
  static int lproc_mdt_attach_rename_seqstat(struct mdt_device *mdt)
-@@ -213,143 +212,76 @@ void mdt_rename_counter_tally(struct mdt_thread_info *info,
+@@ -213,145 +213,77 @@ void mdt_rename_counter_tally(struct mdt_thread_info *info,
                                (unsigned int)ma->ma_attr.la_size);
  }
  
 -int mdt_procfs_init(struct mdt_device *mdt, const char *name)
--{
++static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
+ {
 -	struct obd_device		*obd = mdt2obd_dev(mdt);
 -	struct lprocfs_static_vars	 lvars;
 -	int				 rc;
@@ -685,31 +698,47 @@ index 0ee5148..a895d57 100644
 -	if (rc)
 -		CERROR("%s: MDT can not create rename stats rc = %d\n",
 -		       mdt_obd_name(mdt), rc);
--
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
 -	RETURN(rc);
--}
--
++	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_entry_expire);
+ }
+ 
 -void mdt_procfs_fini(struct mdt_device *mdt)
-+static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
++static ssize_t
++mdt_identity_expire_seq_write(struct file *file, const char __user *buffer,
++			      size_t count, loff_t *off)
  {
 -	struct obd_device *obd = mdt2obd_dev(mdt);
--
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int rc, val;
+ 
 -	if (obd->obd_proc_exports_entry != NULL) {
 -		lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
 -		obd->obd_proc_exports_entry = NULL;
 -	}
--
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
+ 
 -	lprocfs_free_per_client_stats(obd);
 -	hsm_cdt_procfs_fini(mdt);
 -	lprocfs_obd_cleanup(obd);
 -	lprocfs_free_md_stats(obd);
 -	lprocfs_free_obd_stats(obd);
 -	lprocfs_job_stats_fini(obd);
--}
--
++	mdt->mdt_identity_cache->uc_entry_expire = val;
++	return count;
+ }
++LPROC_SEQ_FOPS(mdt_identity_expire);
+ 
 -static int lprocfs_rd_identity_expire(char *page, char **start, off_t off,
 -                                      int count, int *eof, void *data)
--{
++static int mdt_identity_acquire_expire_seq_show(struct seq_file *m, void *data)
+ {
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	struct obd_device *obd = m->private;
@@ -718,61 +747,45 @@ index 0ee5148..a895d57 100644
 -        *eof = 1;
 -        return snprintf(page, count, "%u\n",
 -                        mdt->mdt_identity_cache->uc_entry_expire);
-+	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_entry_expire);
++	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_acquire_expire);
  }
  
--static int lprocfs_wr_identity_expire(struct file *file, const char *buffer,
--                                      unsigned long count, void *data)
+-static int lprocfs_wr_identity_expire(struct file *file,
 +static ssize_t
-+mdt_identity_expire_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
++mdt_identity_acquire_expire_seq_write(struct file *file,
+ 				      const char __user *buffer,
+-				      unsigned long count, void *data)
+-{
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int rc, val;
-+	struct seq_file	  *m = file->private_data;
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	int rc, val;
- 
+-
 -        rc = lprocfs_write_helper(buffer, count, &val);
 -        if (rc)
 -                return rc;
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
- 
+-
 -        mdt->mdt_identity_cache->uc_entry_expire = val;
 -        return count;
-+	mdt->mdt_identity_cache->uc_entry_expire = val;
-+	return count;
- }
-+LPROC_SEQ_FOPS(mdt_identity_expire);
- 
+-}
+-
 -static int lprocfs_rd_identity_acquire_expire(char *page, char **start,
 -                                              off_t off, int count, int *eof,
 -                                              void *data)
-+static int mdt_identity_acquire_expire_seq_show(struct seq_file *m, void *data)
++				      size_t count, loff_t *off)
  {
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
+-
 -        *eof = 1;
 -        return snprintf(page, count, "%u\n",
 -                        mdt->mdt_identity_cache->uc_acquire_expire);
-+	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_acquire_expire);
- }
- 
+-}
+-
 -static int lprocfs_wr_identity_acquire_expire(struct file *file,
--                                              const char *buffer,
--                                              unsigned long count,
--                                              void *data)
-+static ssize_t
-+mdt_identity_acquire_expire_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
+-					      const char __user *buffer,
+-					      unsigned long count,
+-					      void *data)
+-{
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int rc, val;
@@ -816,11 +829,12 @@ index 0ee5148..a895d57 100644
 +	return 0;
  }
  
--static int lprocfs_wr_identity_upcall(struct file *file, const char *buffer,
+-static int lprocfs_wr_identity_upcall(struct file *file,
+-				      const char __user *buffer,
 -				      unsigned long count, void *data)
 +static ssize_t
-+mdt_identity_upcall_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
++mdt_identity_upcall_seq_write(struct file *file, const char __user *buffer,
++			      size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
 +	struct seq_file		*m = file->private_data;
@@ -828,34 +842,46 @@ index 0ee5148..a895d57 100644
  	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	struct upcall_cache	*hash = mdt->mdt_identity_cache;
  	int			 rc;
-@@ -388,11 +320,14 @@ static int lprocfs_wr_identity_upcall(struct file *file, const char *buffer,
+@@ -390,28 +322,32 @@ static int lprocfs_wr_identity_upcall(struct file *file,
  		OBD_FREE(kernbuf, count + 1);
  	RETURN(rc);
  }
 +LPROC_SEQ_FOPS(mdt_identity_upcall);
  
--static int lprocfs_wr_identity_flush(struct file *file, const char *buffer,
--                                     unsigned long count, void *data)
+-static int lprocfs_wr_identity_flush(struct file *file,
+-				     const char __user *buffer,
+-				     unsigned long count, void *data)
 +static ssize_t
-+lprocfs_identity_flush_seq_write(struct file *file, const char *buffer,
++lprocfs_identity_flush_seq_write(struct file *file, const char __user *buffer,
 +				 size_t count, void *data)
  {
 -        struct obd_device *obd = data;
-+	struct seq_file	  *m = file->private_data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int rc, uid;
++	struct seq_file   *m = file->private_data;
 +	struct obd_device *obd = m->private;
-         struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-         int rc, uid;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int rc, uid;
  
-@@ -403,11 +338,14 @@ static int lprocfs_wr_identity_flush(struct file *file, const char *buffer,
-         mdt_flush_identity(mdt->mdt_identity_cache, uid);
-         return count;
+-        rc = lprocfs_write_helper(buffer, count, &uid);
+-        if (rc)
+-                return rc;
++	rc = lprocfs_write_helper(buffer, count, &uid);
++	if (rc)
++		return rc;
+ 
+-        mdt_flush_identity(mdt->mdt_identity_cache, uid);
+-        return count;
++	mdt_flush_identity(mdt->mdt_identity_cache, uid);
++	return count;
  }
 +LPROC_SEQ_FOPS_WO_TYPE(mdt, identity_flush);
  
--static int lprocfs_wr_identity_info(struct file *file, const char *buffer,
+-static int lprocfs_wr_identity_info(struct file *file,
+-				    const char __user *buffer,
 -				    unsigned long count, void *data)
 +static ssize_t
-+lprocfs_identity_info_seq_write(struct file *file, const char *buffer,
++lprocfs_identity_info_seq_write(struct file *file, const char __user *buffer,
 +				size_t count, void *data)
  {
 -	struct obd_device *obd = data;
@@ -864,7 +890,7 @@ index 0ee5148..a895d57 100644
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	struct identity_downcall_data *param;
  	int size = sizeof(*param), rc, checked = 0;
-@@ -415,7 +353,7 @@ static int lprocfs_wr_identity_info(struct file *file, const char *buffer,
+@@ -419,7 +355,7 @@ static int lprocfs_wr_identity_info(struct file *file,
  again:
  	if (count < size) {
  		CERROR("%s: invalid data count = %lu, size = %d\n",
@@ -873,7 +899,7 @@ index 0ee5148..a895d57 100644
  		return -EINVAL;
  	}
  
-@@ -468,23 +406,25 @@ out:
+@@ -472,23 +408,25 @@ out:
  
  	return rc ? rc : count;
  }
@@ -889,24 +915,26 @@ index 0ee5148..a895d57 100644
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  
 -	return snprintf(page, count, "capability on: %s %s\n",
+-			mdt->mdt_lut.lut_oss_capa ? "oss" : "",
+-			mdt->mdt_lut.lut_mds_capa ? "mds" : "");
 +	return seq_printf(m, "capability on: %s %s\n",
- 			mdt->mdt_lut.lut_oss_capa ? "oss" : "",
- 			mdt->mdt_lut.lut_mds_capa ? "mds" : "");
++			  mdt->mdt_lut.lut_oss_capa ? "oss" : "",
++			  mdt->mdt_lut.lut_mds_capa ? "mds" : "");
  }
  
--static int lprocfs_wr_capa(struct file *file, const char *buffer,
+-static int lprocfs_wr_capa(struct file *file, const char __user *buffer,
 -			   unsigned long count, void *data)
 +static ssize_t
-+mdt_capa_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
++mdt_capa_seq_write(struct file *file, const char __user *buffer,
++		   size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct seq_file	  *m = file->private_data;
++	struct seq_file   *m = file->private_data;
 +	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	int val, rc;
  
-@@ -521,64 +461,67 @@ static int lprocfs_wr_capa(struct file *file, const char *buffer,
+@@ -525,82 +463,87 @@ static int lprocfs_wr_capa(struct file *file, const char __user *buffer,
  		      mdt->mdt_lut.lut_oss_capa ? "enabled" : "disabled");
  	return count;
  }
@@ -951,16 +979,16 @@ index 0ee5148..a895d57 100644
 +	return seq_printf(m, "%lu\n", mdt->mdt_capa_timeout);
  }
  
--static int lprocfs_wr_capa_timeout(struct file *file, const char *buffer,
--                                   unsigned long count, void *data)
+-static int lprocfs_wr_capa_timeout(struct file *file, const char __user *buffer,
+-				   unsigned long count, void *data)
 +static ssize_t
-+mdt_capa_timeout_seq_write(struct file *file, const char *buffer,
++mdt_capa_timeout_seq_write(struct file *file, const char __user *buffer,
 +			   size_t count, loff_t *off)
  {
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct seq_file	  *m = file->private_data;
++	struct seq_file   *m = file->private_data;
 +	struct obd_device *obd = m->private;
 +	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
@@ -994,39 +1022,54 @@ index 0ee5148..a895d57 100644
 +	return seq_printf(m, "%lu\n", mdt->mdt_ck_timeout);
  }
  
--static int lprocfs_wr_ck_timeout(struct file *file, const char *buffer,
--                                 unsigned long count, void *data)
+-static int lprocfs_wr_ck_timeout(struct file *file, const char __user *buffer,
+-				 unsigned long count, void *data)
 +static ssize_t
-+mdt_ck_timeout_seq_write(struct file *file, const char *buffer,
++mdt_ck_timeout_seq_write(struct file *file, const char __user *buffer,
 +			 size_t count, loff_t *off)
  {
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
-+	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
-         rc = lprocfs_write_helper(buffer, count, &val);
-         if (rc)
-@@ -588,11 +531,13 @@ static int lprocfs_wr_ck_timeout(struct file *file, const char *buffer,
-         mdt->mdt_capa_conf = 1;
-         return count;
+-        rc = lprocfs_write_helper(buffer, count, &val);
+-        if (rc)
+-                return rc;
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
+ 
+-        mdt->mdt_ck_timeout = (unsigned long)val;
+-        mdt->mdt_capa_conf = 1;
+-        return count;
++	mdt->mdt_ck_timeout = (unsigned long)val;
++	mdt->mdt_capa_conf = 1;
++	return count;
  }
 +LPROC_SEQ_FOPS(mdt_ck_timeout);
  
  #define BUFLEN (UUID_MAX + 4)
  
--static int lprocfs_mdt_wr_evict_client(struct file *file, const char *buffer,
--                                       unsigned long count, void *data)
+-static int lprocfs_mdt_wr_evict_client(struct file *file,
+-				       const char __user *buffer,
+-				       unsigned long count, void *data)
 +static ssize_t
-+lprocfs_mds_evict_client_seq_write(struct file *file, const char *buffer,
++lprocfs_mds_evict_client_seq_write(struct file *file,
++				   const char __user *buffer,
 +				   size_t count, loff_t *off)
  {
-         char *kbuf;
-         char *tmpbuf;
-@@ -614,7 +559,8 @@ static int lprocfs_mdt_wr_evict_client(struct file *file, const char *buffer,
+-        char *kbuf;
+-        char *tmpbuf;
++	char *kbuf;
++	char *tmpbuf;
+ 
+         OBD_ALLOC(kbuf, BUFLEN);
+         if (kbuf == NULL)
+@@ -619,7 +562,8 @@ static int lprocfs_mdt_wr_evict_client(struct file *file,
          tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
  
          if (strncmp(tmpbuf, "nid:", 4) != 0) {
@@ -1036,7 +1079,7 @@ index 0ee5148..a895d57 100644
                  goto out;
          }
  
-@@ -627,21 +573,22 @@ out:
+@@ -632,21 +576,22 @@ out:
  
  #undef BUFLEN
  
@@ -1053,23 +1096,23 @@ index 0ee5148..a895d57 100644
 +	return seq_printf(m, "%d\n", mdt->mdt_lut.lut_sec_level);
  }
  
--static int lprocfs_wr_sec_level(struct file *file, const char *buffer,
--                                unsigned long count, void *data)
+-static int lprocfs_wr_sec_level(struct file *file, const char __user *buffer,
+-				unsigned long count, void *data)
 +static ssize_t
-+mdt_sec_level_seq_write(struct file *file, const char *buffer,
++mdt_sec_level_seq_write(struct file *file, const char __user *buffer,
 +			size_t count, loff_t *off)
  {
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
-+	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
          rc = lprocfs_write_helper(buffer, count, &val);
          if (rc)
-@@ -659,22 +606,24 @@ static int lprocfs_wr_sec_level(struct file *file, const char *buffer,
+@@ -664,102 +609,110 @@ static int lprocfs_wr_sec_level(struct file *file, const char __user *buffer,
  	mdt->mdt_lut.lut_sec_level = val;
  	return count;
  }
@@ -1088,102 +1131,108 @@ index 0ee5148..a895d57 100644
 +	return seq_printf(m, "%u\n", mdt_cos_is_enabled(mdt));
  }
  
--static int lprocfs_wr_cos(struct file *file, const char *buffer,
--                                  unsigned long count, void *data)
+-static int lprocfs_wr_cos(struct file *file, const char __user *buffer,
+-			  unsigned long count, void *data)
 +static ssize_t
-+mdt_cos_seq_write(struct file *file, const char *buffer,
++mdt_cos_seq_write(struct file *file, const char __user *buffer,
 +		  size_t count, loff_t *off)
  {
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
-+	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file   *m = file->private_data;
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
-         rc = lprocfs_write_helper(buffer, count, &val);
-         if (rc)
-@@ -682,15 +631,15 @@ static int lprocfs_wr_cos(struct file *file, const char *buffer,
-         mdt_enable_cos(mdt, val);
-         return count;
+-        rc = lprocfs_write_helper(buffer, count, &val);
+-        if (rc)
+-                return rc;
+-        mdt_enable_cos(mdt, val);
+-        return count;
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
++	mdt_enable_cos(mdt, val);
++	return count;
  }
 +LPROC_SEQ_FOPS(mdt_cos);
  
--static int lprocfs_rd_root_squash(char *page, char **start, off_t off,
--                                  int count, int *eof, void *data)
+-static int lprocfs_rd_mdt_root_squash(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
 +static int mdt_root_squash_seq_show(struct seq_file *m, void *data)
  {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-	struct obd_device *obd = data;
 +	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        return snprintf(page, count, "%u:%u\n", mdt->mdt_squash_uid,
--                        mdt->mdt_squash_gid);
-+	return seq_printf(m, "%u:%u\n", mdt->mdt_squash_uid,
-+			  mdt->mdt_squash_gid);
- }
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct root_squash_info *squash = &mdt->mdt_squash;
  
- static int safe_strtoul(const char *str, char **endp, unsigned long *res)
-@@ -708,11 +657,13 @@ static int safe_strtoul(const char *str, char **endp, unsigned long *res)
-         return 0;
+-	return snprintf(page, count, "%u:%u\n", squash->rsi_uid,
+-			squash->rsi_gid);
++	return seq_printf(m, "%u:%u\n", squash->rsi_uid,
++			  squash->rsi_gid);
  }
  
--static int lprocfs_wr_root_squash(struct file *file, const char *buffer,
--				  unsigned long count, void *data)
+-static int lprocfs_wr_mdt_root_squash(struct file *file,
+-				      const char __user *buffer,
+-				      unsigned long count, void *data)
 +static ssize_t
-+mdt_root_squash_seq_write(struct file *file, const char *buffer,
++mdt_root_squash_seq_write(struct file *file, const char __user *buffer,
 +			  size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
--	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
-+	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
- 	int rc;
- 	char kernbuf[50], *tmp, *end, *errmsg;
- 	unsigned long uid, gid;
-@@ -765,23 +716,25 @@ failed:
- 	      mdt_obd_name(mdt), buffer, errmsg, rc);
- 	RETURN(rc);
++	struct seq_file   *m = file->private_data;
++	struct obd_device *obd = m->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct root_squash_info *squash = &mdt->mdt_squash;
+ 
+ 	return lprocfs_wr_root_squash(buffer, count, squash,
+ 				      mdt_obd_name(mdt));
  }
 +LPROC_SEQ_FOPS(mdt_root_squash);
  
--static int lprocfs_rd_nosquash_nids(char *page, char **start, off_t off,
--                                    int count, int *eof, void *data)
+-static int lprocfs_rd_mdt_nosquash_nids(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
 +static int mdt_nosquash_nids_seq_show(struct seq_file *m, void *data)
  {
--        struct obd_device *obd = data;
--        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-	struct obd_device *obd = data;
 +	struct obd_device *obd = m->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
- 
--        if (mdt->mdt_nosquash_str)
--                return snprintf(page, count, "%s\n", mdt->mdt_nosquash_str);
--        return snprintf(page, count, "NONE\n");
-+	if (mdt->mdt_nosquash_str)
-+		return seq_printf(m, "%s\n", mdt->mdt_nosquash_str);
-+	return seq_printf(m, "NONE\n");
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct root_squash_info *squash = &mdt->mdt_squash;
+-	int rc;
++	int len = 0, rc;
+ 
+ 	down_read(&squash->rsi_sem);
+ 	if (!list_empty(&squash->rsi_nosquash_nids)) {
+-		rc = cfs_print_nidlist(page, count, &squash->rsi_nosquash_nids);
+-		rc += snprintf(page + rc, count - rc, "\n");
++		len = cfs_print_nidlist(m->buf + m->count, m->size - m->count,
++					&squash->rsi_nosquash_nids);
++		m->count += len;
++		rc = seq_printf(m, "\n");
+ 	} else
+-		rc = snprintf(page, count, "NONE\n");
++		rc = seq_printf(m, "NONE\n");
+ 	up_read(&squash->rsi_sem);
+ 
+ 	return rc;
  }
  
--static int lprocfs_wr_nosquash_nids(struct file *file, const char *buffer,
--				    unsigned long count, void *data)
+-static int lprocfs_wr_mdt_nosquash_nids(struct file *file,
+-					const char __user *buffer,
+-					unsigned long count, void *data)
 +static ssize_t
-+mdt_nosquash_nids_seq_write(struct file *file, const char *buffer,
++mdt_nosquash_nids_seq_write(struct file *file, const char __user *buffer,
 +			    size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
--	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
-+	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
- 	int rc;
- 	char *kernbuf, *errmsg;
- 	cfs_list_t tmp;
-@@ -842,25 +795,27 @@ failed:
- 		OBD_FREE(kernbuf, count + 1);
- 	RETURN(rc);
++	struct seq_file   *m = file->private_data;
++	struct obd_device *obd = m->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct root_squash_info *squash = &mdt->mdt_squash;
+ 
+ 	return lprocfs_wr_nosquash_nids(buffer, count, squash,
+ 					mdt_obd_name(mdt));
  }
 +LPROC_SEQ_FOPS(mdt_nosquash_nids);
  
@@ -1202,10 +1251,10 @@ index 0ee5148..a895d57 100644
 +			  mdt->mdt_som_conf ? "en" : "dis");
  }
  
--static int lprocfs_wr_mdt_som(struct file *file, const char *buffer,
--                              unsigned long count, void *data)
+-static int lprocfs_wr_mdt_som(struct file *file, const char __user *buffer,
+-			      unsigned long count, void *data)
 +static ssize_t
-+mdt_som_seq_write(struct file *file, const char *buffer,
++mdt_som_seq_write(struct file *file, const char __user *buffer,
 +		  size_t count, loff_t *off)
  {
 -        struct obd_export *exp;
@@ -1222,7 +1271,7 @@ index 0ee5148..a895d57 100644
  
          if (count > (sizeof(kernbuf) - 1))
                  return -EINVAL;
-@@ -902,20 +857,22 @@ static int lprocfs_wr_mdt_som(struct file *file, const char *buffer,
+@@ -801,21 +754,22 @@ static int lprocfs_wr_mdt_som(struct file *file, const char __user *buffer,
  
          return count;
  }
@@ -1240,19 +1289,20 @@ index 0ee5148..a895d57 100644
 +	return seq_printf(m, "%u\n", mdt->mdt_enable_remote_dir);
  }
  
--static int lprocfs_wr_enable_remote_dir(struct file *file, const char *buffer,
+-static int lprocfs_wr_enable_remote_dir(struct file *file,
+-					const char __user *buffer,
 -					unsigned long count, void *data)
 +static ssize_t
-+mdt_enable_remote_dir_seq_write(struct file *file, const char *buffer,
++mdt_enable_remote_dir_seq_write(struct file *file, const char __user *buffer,
 +				size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct seq_file	  *m = file->private_data;
++	struct seq_file   *m = file->private_data;
 +	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	__u32 val;
  	int rc;
-@@ -930,22 +887,23 @@ static int lprocfs_wr_enable_remote_dir(struct file *file, const char *buffer,
+@@ -830,22 +784,24 @@ static int lprocfs_wr_enable_remote_dir(struct file *file,
  	mdt->mdt_enable_remote_dir = val;
  	return count;
  }
@@ -1273,19 +1323,20 @@ index 0ee5148..a895d57 100644
  }
  
 -static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
--					    const char *buffer,
+-					    const char __user *buffer,
 -					    unsigned long count, void *data)
 +static ssize_t
-+mdt_enable_remote_dir_gid_seq_write(struct file *file, const char *buffer,
++mdt_enable_remote_dir_gid_seq_write(struct file *file,
++				    const char __user *buffer,
 +				    size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct seq_file	  *m = file->private_data;
++	struct seq_file   *m = file->private_data;
 +	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	__u32 val;
  	int rc;
-@@ -957,97 +915,72 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
+@@ -857,97 +813,72 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
  	mdt->mdt_enable_remote_dir_gid = val;
  	return count;
  }
@@ -1332,11 +1383,11 @@ index 0ee5148..a895d57 100644
 -					NULL, NULL, 0 },
 -	{ "commit_on_sharing",		lprocfs_rd_cos, lprocfs_wr_cos,
 -					NULL, NULL, 0 },
--	{ "root_squash",		lprocfs_rd_root_squash,
--					lprocfs_wr_root_squash,
+-	{ "root_squash",		lprocfs_rd_mdt_root_squash,
+-					lprocfs_wr_mdt_root_squash,
 -					NULL, NULL, 0 },
--	{ "nosquash_nids",		lprocfs_rd_nosquash_nids,
--					lprocfs_wr_nosquash_nids,
+-	{ "nosquash_nids",		lprocfs_rd_mdt_nosquash_nids,
+-					lprocfs_wr_mdt_nosquash_nids,
 -					NULL, NULL, 0 },
 -	{ "som",			lprocfs_rd_mdt_som,
 -					lprocfs_wr_mdt_som,
@@ -1394,62 +1445,62 @@ index 0ee5148..a895d57 100644
 +LPROC_SEQ_FOPS(mdt_hsm_cdt_control);
 +
 +static struct lprocfs_seq_vars lprocfs_mdt_obd_vars[] = {
-+	{ .name	=	"uuid",
-+	  .fops	=	&mdt_uuid_fops				},
-+	{ .name	=	"recovery_status",
-+	  .fops	=	&mdt_recovery_status_fops		},
-+	{ .name	=	"num_exports",
-+	  .fops	=	&mdt_num_exports_fops			},
-+	{ .name	=	"identity_expire",
-+	  .fops	=	&mdt_identity_expire_fops		},
-+	{ .name	=	"identity_acquire_expire",
-+	  .fops	=	&mdt_identity_acquire_expire_fops	},
-+	{ .name	=	"identity_upcall",
-+	  .fops	=	&mdt_identity_upcall_fops		},
-+	{ .name	=	"identity_flush",
-+	  .fops	=	&mdt_identity_flush_fops		},
-+	{ .name	=	"identity_info",
-+	  .fops	=	&mdt_identity_info_fops			},
-+	{ .name	=	"capa",
-+	  .fops	=	&mdt_capa_fops				},
-+	{ .name	=	"capa_timeout",
-+	  .fops	=	&mdt_capa_timeout_fops			},
-+	{ .name	=	"capa_key_timeout",
-+	  .fops	=	&mdt_ck_timeout_fops			},
-+	{ .name	=	"capa_count",
-+	  .fops	=	&mdt_capa_count_fops			},
-+	{ .name	=	"site_stats",
-+	  .fops	=	&mdt_site_stats_fops			},
-+	{ .name	=	"evict_client",
-+	  .fops	=	&mdt_mds_evict_client_fops		},
-+	{ .name	=	"hash_stats",
-+	  .fops	=	&mdt_hash_fops				},
-+	{ .name	=	"sec_level",
-+	  .fops	=	&mdt_sec_level_fops			},
-+	{ .name	=	"commit_on_sharing",
-+	  .fops	=	&mdt_cos_fops				},
-+	{ .name	=	"root_squash",
-+	  .fops	=	&mdt_root_squash_fops			},
-+	{ .name	=	"nosquash_nids",
-+	  .fops	=	&mdt_nosquash_nids_fops			},
-+	{ .name	=	"som",
-+	  .fops	=	&mdt_som_fops				},
-+	{ .name	=	"instance",
-+	  .fops	=	&mdt_target_instance_fops		},
-+	{ .name	=	"ir_factor",
-+	  .fops	=	&mdt_ir_factor_fops			},
-+	{ .name	=	"job_cleanup_interval",
-+	  .fops	=	&mdt_job_interval_fops			},
-+	{ .name	=	"enable_remote_dir",
-+	  .fops	=	&mdt_enable_remote_dir_fops		},
-+	{ .name	=	"enable_remote_dir_gid",
-+	  .fops	=	&mdt_enable_remote_dir_gid_fops		},
-+	{ .name	=	"hsm_control",
-+	  .fops	=	&mdt_hsm_cdt_control_fops		},
++	{ .name =	"uuid",
++	  .fops =	&mdt_uuid_fops				},
++	{ .name =	"recovery_status",
++	  .fops =	&mdt_recovery_status_fops		},
++	{ .name =	"num_exports",
++	  .fops =	&mdt_num_exports_fops			},
++	{ .name =	"identity_expire",
++	  .fops =	&mdt_identity_expire_fops		},
++	{ .name =	"identity_acquire_expire",
++	  .fops =	&mdt_identity_acquire_expire_fops	},
++	{ .name =	"identity_upcall",
++	  .fops =	&mdt_identity_upcall_fops		},
++	{ .name =	"identity_flush",
++	  .fops =	&mdt_identity_flush_fops		},
++	{ .name =	"identity_info",
++	  .fops =	&mdt_identity_info_fops			},
++	{ .name =	"capa",
++	  .fops =	&mdt_capa_fops				},
++	{ .name =	"capa_timeout",
++	  .fops =	&mdt_capa_timeout_fops			},
++	{ .name =	"capa_key_timeout",
++	  .fops =	&mdt_ck_timeout_fops			},
++	{ .name =	"capa_count",
++	  .fops =	&mdt_capa_count_fops			},
++	{ .name =	"site_stats",
++	  .fops =	&mdt_site_stats_fops			},
++	{ .name =	"evict_client",
++	  .fops =	&mdt_mds_evict_client_fops		},
++	{ .name =	"hash_stats",
++	  .fops =	&mdt_hash_fops				},
++	{ .name =	"sec_level",
++	  .fops =	&mdt_sec_level_fops			},
++	{ .name =	"commit_on_sharing",
++	  .fops =	&mdt_cos_fops				},
++	{ .name =	"root_squash",
++	  .fops =	&mdt_root_squash_fops			},
++	{ .name =	"nosquash_nids",
++	  .fops =	&mdt_nosquash_nids_fops			},
++	{ .name =	"som",
++	  .fops =	&mdt_som_fops				},
++	{ .name =	"instance",
++	  .fops =	&mdt_target_instance_fops		},
++	{ .name =	"ir_factor",
++	  .fops =	&mdt_ir_factor_fops			},
++	{ .name =	"job_cleanup_interval",
++	  .fops =	&mdt_job_interval_fops			},
++	{ .name =	"enable_remote_dir",
++	  .fops =	&mdt_enable_remote_dir_fops		},
++	{ .name =	"enable_remote_dir_gid",
++	  .fops =	&mdt_enable_remote_dir_gid_fops		},
++	{ .name =	"hsm_control",
++	  .fops =	&mdt_hsm_cdt_control_fops		},
  	{ 0 }
  };
  
-@@ -1085,21 +1018,15 @@ int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v)
+@@ -985,21 +916,15 @@ int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v)
  
  int lprocfs_mdt_open_files_seq_open(struct inode *inode, struct file *file)
  {
@@ -1472,7 +1523,7 @@ index 0ee5148..a895d57 100644
  
  	return 0;
  }
-@@ -1140,3 +1067,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
+@@ -1040,3 +965,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
          lprocfs_counter_init(stats, LPROC_MDT_CROSSDIR_RENAME, 0,
                               "crossdir_rename", "reqs");
  }
@@ -1489,14 +1540,14 @@ index 0ee5148..a895d57 100644
 +	rc = lprocfs_seq_obd_setup(obd);
 +	if (rc) {
 +		CERROR("%s: cannot create proc entries: rc = %d\n",
-+			mdt_obd_name(mdt), rc);
++		       mdt_obd_name(mdt), rc);
 +		return rc;
 +	}
 +
 +	rc = hsm_cdt_procfs_init(mdt);
 +	if (rc) {
 +		CERROR("%s: cannot create hsm proc entries: rc = %d\n",
-+			mdt_obd_name(mdt), rc);
++		       mdt_obd_name(mdt), rc);
 +		return rc;
 +	}
 +
@@ -1578,5 +1629,5 @@ index 390164f..424ddf5 100644
  				   LUSTRE_MDS_NAME, &mds_device_type);
  }
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch b/sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
new file mode 100644
index 0000000..ae7ef77
--- /dev/null
+++ b/sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch
@@ -0,0 +1,199 @@
+From c12b96a679cfc5132b68e61c38e7756b9d02a59c Mon Sep 17 00:00:00 2001
+From: Andreas Dilger <andreas.dilger@intel.com>
+Date: Tue, 6 May 2014 09:51:45 -0400
+Subject: [PATCH 6/8] LU-2096 lprocfs: symlinks for forward compatibility
+
+Currently, the "ofd" device is still named "obdfilter" in the Lustre
+configuration and in /proc/fs/lustre.  It would be better to name it
+"ost" which is has been the long term goal but retain the "ofd"
+module name.
+
+The per-OST device statistics should really be under "ost/{target}",
+like the per-MDT statistics are under "mdt/{target}" already in 2.x.
+
+Similarly, the "OSS" statistics have always been under "ost/OSS", but
+would be better in their own "oss" subdirectory much like what is done
+for "MDS" statistics.
+
+Add symlinks in lprocfs for "ost/OSS -> oss", "obdfilter -> ofd -> ost",
+and "obdfilter/{target} -> ost/{target}" for forward compatibility so
+that when we finally are able to make these changes to the module names
+userspace tools and scripts can have a smoother transition between
+Lustre versions.
+
+Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
+Signed-off-by: John L. Hammond <john.hammond@intel.com>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Ia0835e39aba7c8a540a6247bd3d56bc14e500c1e
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+---
+ lustre/include/obd.h      |  4 ++--
+ lustre/mgs/mgs_llog.c     |  4 ++--
+ lustre/obdclass/genops.c  |  2 +-
+ lustre/ofd/ofd_dev.c      | 32 +++++++++++++++++++++++++++++++-
+ lustre/ofd/ofd_internal.h |  2 ++
+ lustre/ost/ost_handler.c  | 12 +++++++++++-
+ 6 files changed, 49 insertions(+), 7 deletions(-)
+
+diff --git a/lustre/include/obd.h b/lustre/include/obd.h
+index b161c115..78b5563 100644
+--- a/lustre/include/obd.h
++++ b/lustre/include/obd.h
+@@ -516,8 +516,8 @@ struct niobuf_local {
+ #define LUSTRE_MDS_NAME         "mds"
+ #define LUSTRE_MDT_NAME         "mdt"
+ #define LUSTRE_MDC_NAME         "mdc"
+-#define LUSTRE_OSS_NAME         "ost"       /* FIXME change name to oss */
+-#define LUSTRE_OST_NAME         "obdfilter" /* FIXME change name to ost */
++#define LUSTRE_OSS_NAME         "oss"
++#define LUSTRE_OST_NAME         "ost"
+ #define LUSTRE_OSC_NAME         "osc"
+ #define LUSTRE_LOV_NAME         "lov"
+ #define LUSTRE_MGS_NAME         "mgs"
+diff --git a/lustre/mgs/mgs_llog.c b/lustre/mgs/mgs_llog.c
+index 55ffe90..c19ba7b4 100644
+--- a/lustre/mgs/mgs_llog.c
++++ b/lustre/mgs/mgs_llog.c
+@@ -2469,7 +2469,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
+         }
+ 
+         /*
+-        attach obdfilter ost1 ost1_UUID
++	attach ost ost1 ost1_UUID
+         setup /dev/loop2 ldiskfs f|n errors=remount-ro,user_xattr
+         */
+         if (class_find_param(ptr, PARAM_FAILMODE, &ptr) == 0)
+@@ -2485,7 +2485,7 @@ static int mgs_write_log_ost(const struct lu_env *env,
+                 snprintf(mti->mti_uuid, sizeof(mti->mti_uuid),
+                          "%s_UUID", mti->mti_svname);
+ 	rc = record_attach(env, llh, mti->mti_svname,
+-                           "obdfilter"/*LUSTRE_OST_NAME*/, mti->mti_uuid);
++			   "ost"/*LUSTRE_OST_NAME*/, mti->mti_uuid);
+ 	if (rc)
+ 		GOTO(out_end, rc);
+ 	rc = record_setup(env, llh, mti->mti_svname,
+diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
+index d7c541a..1479f5a 100644
+--- a/lustre/obdclass/genops.c
++++ b/lustre/obdclass/genops.c
+@@ -121,7 +121,7 @@ struct obd_type *class_get_type(const char *name)
+         if (!type) {
+                 const char *modname = name;
+ 
+-		if (strcmp(modname, "obdfilter") == 0)
++		if (strcmp(modname, "ost") == 0)
+ 			modname = "ofd";
+ 
+ 		if (strcmp(modname, LUSTRE_LWP_NAME) == 0)
+diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
+index 0f0d51a..b597b03 100644
+--- a/lustre/ofd/ofd_dev.c
++++ b/lustre/ofd/ofd_dev.c
+@@ -2375,10 +2375,23 @@ static struct lu_device_type ofd_device_type = {
+ 	.ldt_ctx_tags	= LCT_DT_THREAD
+ };
+ 
++/*
++ * In the normal case all we have one symlink, type->typ_procsym to
++ * address the renaming of proc directories due to the OSD api
++ * introducton. OFD is special in that this subsystem the name has
++ * changed from obdfilter to ofd to lastly ost. So we need two
++ * symlinks to point to "ost". Hopefully in 2.9 we can removal all
++ * this symlink madness.
++ *
++ * Symlink called "obdfilter" that points to  "ost" directory.
++ */
++static struct proc_dir_entry *ofd_symlink;
++
+ int __init ofd_init(void)
+ {
+ 	struct lprocfs_static_vars	lvars;
+-	int				rc;
++	struct obd_type *type;
++	int rc;
+ 
+ 	rc = lu_kmem_init(ofd_caches);
+ 	if (rc)
+@@ -2397,13 +2410,30 @@ int __init ofd_init(void)
+ 				 lvars.module_vars,
+ #endif
+ 				 LUSTRE_OST_NAME, &ofd_device_type);
++
++	/* For forward compatibility symlink "obdfilter" and "ofd" to "ost"
++	 * in procfs. Remove the symlinks entirely when access via
++	 * "obdfilter/ofd" can be deprecated, maybe 2.9? */
++	type = class_search_type(LUSTRE_OST_NAME);
++	LASSERT(type != NULL);
++	type->typ_procsym = lprocfs_add_symlink("ofd", proc_lustre_root,
++						"ost");
++
++	ofd_symlink = lprocfs_add_symlink("obdfilter", proc_lustre_root,
++					  "ost");
+ 	return rc;
+ }
+ 
+ void __exit ofd_exit(void)
+ {
++	struct obd_type *type = class_search_type(LUSTRE_OST_NAME);
++
+ 	ofd_fmd_exit();
+ 	lu_kmem_fini(ofd_caches);
++	if (ofd_symlink)
++		lprocfs_remove(&ofd_symlink);
++	if (type->typ_procsym)
++		lprocfs_remove(&type->typ_procsym);
+ 	class_unregister_type(LUSTRE_OST_NAME);
+ }
+ 
+diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
+index 4f12506..98a5cba 100644
+--- a/lustre/ofd/ofd_internal.h
++++ b/lustre/ofd/ofd_internal.h
+@@ -193,6 +193,8 @@ struct ofd_device {
+ 	struct ptlrpc_thread	 ofd_inconsistency_thread;
+ 	struct list_head	 ofd_inconsistency_list;
+ 	spinlock_t		 ofd_inconsistency_lock;
++	/* create a symlink "obdfilter" from the "ost" directory */
++	struct proc_dir_entry	*ofd_symlink;
+ };
+ 
+ static inline struct ofd_device *ofd_dev(struct lu_device *d)
+diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
+index bae0a40..02ddb87 100644
+--- a/lustre/ost/ost_handler.c
++++ b/lustre/ost/ost_handler.c
+@@ -95,13 +95,20 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
+                 RETURN(rc);
+ 
+ #ifdef LPROCFS
++	obd->obd_type->typ_procsym = lprocfs_add_symlink("ost/OSS", proc_lustre_root,
++							 "../oss/OSS");
++	if (IS_ERR(obd->obd_type->typ_procsym)) {
++		CERROR("ost: can't create compat entry \"ost/OSS\": %d\n",
++		       (int)PTR_ERR(obd->obd_type->typ_procsym));
++		obd->obd_type->typ_procsym = NULL;
++	}
+ 	obd->obd_vars = lprocfs_ost_obd_vars;
+ 	lprocfs_seq_obd_setup(obd);
+ #endif
+ 	mutex_init(&ost->ost_health_mutex);
+ 
+ 	svc_conf = (typeof(svc_conf)) {
+-		.psc_name		= LUSTRE_OSS_NAME,
++		.psc_name		= "ost",
+ 		.psc_watchdog_factor	= OSS_SERVICE_WATCHDOG_FACTOR,
+ 		.psc_buf		= {
+ 			.bc_nbufs		= OST_NBUFS,
+@@ -379,6 +386,9 @@ static int ost_cleanup(struct obd_device *obd)
+ 
+ 	mutex_unlock(&ost->ost_health_mutex);
+ 
++	if (obd->obd_type->typ_procsym)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
++
+ 	lprocfs_obd_cleanup(obd);
+ 
+ 	if (ost_io_cptable != NULL) {
+-- 
+1.9.3
+

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 84%
rename from sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index f41c787..1f04e55 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 61588b698d08017b497f7a93fcf8626ddef9ceb5 Mon Sep 17 00:00:00 2001
+From 7f697da90a35ad00a35df6483261deaba70783dd Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Wed, 26 Mar 2014 20:01:52 -0400
-Subject: [PATCH 6/7] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Date: Mon, 5 May 2014 10:02:21 -0400
+Subject: [PATCH 7/8] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd
@@ -11,21 +11,18 @@ Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- lustre/include/lustre_lfsck.h    |   6 +-
- lustre/lfsck/lfsck_internal.h    |   9 +-
- lustre/lfsck/lfsck_layout.c      |  71 ++----
- lustre/lfsck/lfsck_lib.c         |  88 +++-----
- lustre/lfsck/lfsck_namespace.c   |  75 ++-----
- lustre/mdd/mdd_device.c          |  25 +--
- lustre/mdd/mdd_internal.h        |   1 -
- lustre/mdd/mdd_lproc.c           | 302 +++++++++++--------------
- lustre/obdclass/lprocfs_status.c |   9 +-
- lustre/ofd/lproc_ofd.c           | 467 ++++++++++++++++++++-------------------
- lustre/ofd/ofd_dev.c             |  80 +++----
- lustre/ofd/ofd_internal.h        |   6 +-
- lustre/osd-ldiskfs/osd_handler.c |   1 +
- lustre/osd-zfs/osd_handler.c     |   1 +
- 14 files changed, 501 insertions(+), 640 deletions(-)
+ lustre/include/lustre_lfsck.h  |   6 +-
+ lustre/lfsck/lfsck_internal.h  |   9 +-
+ lustre/lfsck/lfsck_layout.c    | 132 ++++-------
+ lustre/lfsck/lfsck_lib.c       |  88 +++-----
+ lustre/lfsck/lfsck_namespace.c |  75 ++-----
+ lustre/mdd/mdd_device.c        |  25 +--
+ lustre/mdd/mdd_internal.h      |   1 -
+ lustre/mdd/mdd_lproc.c         | 302 ++++++++++++-------------
+ lustre/ofd/lproc_ofd.c         | 490 +++++++++++++++++++++--------------------
+ lustre/ofd/ofd_dev.c           |  90 ++++----
+ lustre/ofd/ofd_internal.h      |   6 +-
+ 11 files changed, 543 insertions(+), 681 deletions(-)
 
 diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
 index 0d6f666..5adbffe 100644
@@ -48,10 +45,10 @@ index 0d6f666..5adbffe 100644
  static inline void lfsck_pack_rfa(struct lfsck_request *lr,
  				  const struct lu_fid *fid)
 diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
-index 4f84c3b..c4e6430 100644
+index 24b84ae..203ad74 100644
 --- a/lustre/lfsck/lfsck_internal.h
 +++ b/lustre/lfsck/lfsck_internal.h
-@@ -299,8 +299,7 @@ struct lfsck_operations {
+@@ -303,8 +303,7 @@ struct lfsck_operations {
  
  	int (*lfsck_dump)(const struct lu_env *env,
  			  struct lfsck_component *com,
@@ -61,7 +58,7 @@ index 4f84c3b..c4e6430 100644
  
  	int (*lfsck_double_scan)(const struct lu_env *env,
  				 struct lfsck_component *com);
-@@ -586,10 +585,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
+@@ -590,10 +589,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
  			     struct lfsck_component *com);
  void lfsck_instance_cleanup(const struct lu_env *env,
  			    struct lfsck_instance *lfsck);
@@ -76,10 +73,10 @@ index 4f84c3b..c4e6430 100644
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
  		    struct lfsck_position *pos, bool init);
 diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index c808808..9f2d9d6 100644
+index ced2e4d..e2df62d 100644
 --- a/lustre/lfsck/lfsck_layout.c
 +++ b/lustre/lfsck/lfsck_layout.c
-@@ -471,7 +471,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
+@@ -492,7 +492,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
  		return ERR_PTR(-ENOMEM);
  	}
  
@@ -88,7 +85,7 @@ index c808808..9f2d9d6 100644
  	lrn->lrn_seq = fid_seq(fid);
  	lrn->lrn_first_oid = fid_oid(fid) & ~LFSCK_RBTREE_BITMAP_MASK;
  	atomic_set(&lrn->lrn_known_count, 0);
-@@ -4798,69 +4798,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
+@@ -4873,69 +4873,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
  }
  
  static int lfsck_layout_dump(const struct lu_env *env,
@@ -157,17 +154,17 @@ index c808808..9f2d9d6 100644
  		      lo->ll_pos_first_inconsistent);
 -	if (rc <= 0)
 -		goto out;
--
+ 
 -	buf += rc;
 -	len -= rc;
- 
+-
 -	rc = snprintf(buf, len,
 -		      "success_count: %u\n"
 +	seq_printf(m, "success_count: %u\n"
  		      "repaired_dangling: "LPU64"\n"
  		      "repaired_unmatched_pair: "LPU64"\n"
  		      "repaired_multiple_referenced: "LPU64"\n"
-@@ -4880,11 +4864,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4955,11 +4939,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		      lo->ll_objs_skipped,
  		      lo->ll_objs_failed_phase1,
  		      lo->ll_objs_failed_phase2);
@@ -179,7 +176,7 @@ index c808808..9f2d9d6 100644
  
  	if (lo->ll_status == LS_SCANNING_PHASE1) {
  		__u64 pos;
-@@ -4902,8 +4881,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4977,8 +4956,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -189,7 +186,7 @@ index c808808..9f2d9d6 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -4917,11 +4895,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4992,11 +4970,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed,
  			      new_checked);
@@ -201,7 +198,7 @@ index c808808..9f2d9d6 100644
  
  		LASSERT(lfsck->li_di_oit != NULL);
  
-@@ -4934,12 +4907,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -5009,12 +4982,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		pos = iops->store(env, lfsck->li_di_oit);
  		if (!lfsck->li_current_oit_processed)
  			pos--;
@@ -215,16 +212,45 @@ index c808808..9f2d9d6 100644
  	} else if (lo->ll_status == LS_SCANNING_PHASE2) {
  		cfs_duration_t duration = cfs_time_current() -
  					  lfsck->li_time_last_checkpoint;
-@@ -4957,7 +4926,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -5032,29 +5001,26 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(speed1, lo->ll_run_time_phase1);
  		if (rtime != 0)
  			do_div(speed2, rtime);
 -		rc = snprintf(buf, len,
-+		rc = seq_printf(m,
- 			      "checked_phase1: "LPU64"\n"
- 			      "checked_phase2: "LPU64"\n"
- 			      "run_time_phase1: %u seconds\n"
-@@ -4978,8 +4947,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+-			      "checked_phase1: "LPU64"\n"
+-			      "checked_phase2: "LPU64"\n"
+-			      "run_time_phase1: %u seconds\n"
+-			      "run_time_phase2: %u seconds\n"
+-			      "average_speed_phase1: "LPU64" items/sec\n"
+-			      "average_speed_phase2: "LPU64" items/sec\n"
+-			      "real-time_speed_phase1: N/A\n"
+-			      "real-time_speed_phase2: "LPU64" items/sec\n"
+-			      "current_position: "DFID"\n",
+-			      lo->ll_objs_checked_phase1,
+-			      checked,
+-			      lo->ll_run_time_phase1,
+-			      rtime,
+-			      speed1,
+-			      speed2,
+-			      new_checked,
+-			      PFID(&com->lc_fid_latest_scanned_phase2));
++		rc = seq_printf(m, "checked_phase1: "LPU64"\n"
++				"checked_phase2: "LPU64"\n"
++				"run_time_phase1: %u seconds\n"
++				"run_time_phase2: %u seconds\n"
++				"average_speed_phase1: "LPU64" items/sec\n"
++				"average_speed_phase2: "LPU64" items/sec\n"
++				"real-time_speed_phase1: N/A\n"
++				"real-time_speed_phase2: "LPU64" items/sec\n"
++				"current_position: "DFID"\n",
++				lo->ll_objs_checked_phase1,
++				checked,
++				lo->ll_run_time_phase1,
++				rtime,
++				speed1,
++				speed2,
++				new_checked,
++				PFID(&com->lc_fid_latest_scanned_phase2));
  		if (rc <= 0)
  			goto out;
  
@@ -233,25 +259,46 @@ index c808808..9f2d9d6 100644
  	} else {
  		__u64 speed1 = lo->ll_objs_checked_phase1;
  		__u64 speed2 = lo->ll_objs_checked_phase2;
-@@ -4988,8 +4955,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -5063,34 +5029,26 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(speed1, lo->ll_run_time_phase1);
  		if (lo->ll_run_time_phase2 != 0)
  			do_div(speed2, lo->ll_run_time_phase2);
 -		rc = snprintf(buf, len,
 -			      "checked_phase1: "LPU64"\n"
-+		seq_printf(m, "checked_phase1: "LPU64"\n"
- 			      "checked_phase2: "LPU64"\n"
- 			      "run_time_phase1: %u seconds\n"
- 			      "run_time_phase2: %u seconds\n"
-@@ -5004,18 +4970,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
- 			      lo->ll_run_time_phase2,
- 			      speed1,
- 			      speed2);
+-			      "checked_phase2: "LPU64"\n"
+-			      "run_time_phase1: %u seconds\n"
+-			      "run_time_phase2: %u seconds\n"
+-			      "average_speed_phase1: "LPU64" items/sec\n"
+-			      "average_speed_phase2: "LPU64" objs/sec\n"
+-			      "real-time_speed_phase1: N/A\n"
+-			      "real-time_speed_phase2: N/A\n"
+-			      "current_position: N/A\n",
+-			      lo->ll_objs_checked_phase1,
+-			      lo->ll_objs_checked_phase2,
+-			      lo->ll_run_time_phase1,
+-			      lo->ll_run_time_phase2,
+-			      speed1,
+-			      speed2);
 -		if (rc <= 0)
 -			goto out;
 -
 -		buf += rc;
 -		len -= rc;
++		seq_printf(m, "checked_phase1: "LPU64"\n"
++			   "checked_phase2: "LPU64"\n"
++			   "run_time_phase1: %u seconds\n"
++			   "run_time_phase2: %u seconds\n"
++			   "average_speed_phase1: "LPU64" items/sec\n"
++			   "average_speed_phase2: "LPU64" objs/sec\n"
++			   "real-time_speed_phase1: N/A\n"
++			   "real-time_speed_phase2: N/A\n"
++			   "current_position: N/A\n",
++			   lo->ll_objs_checked_phase1,
++			   lo->ll_objs_checked_phase2,
++			   lo->ll_run_time_phase1,
++			   lo->ll_run_time_phase2,
++			   speed1,
++			   speed2);
  	}
 -	ret = save - len;
 -
@@ -264,10 +311,10 @@ index c808808..9f2d9d6 100644
  
  static int lfsck_layout_master_double_scan(const struct lu_env *env,
 diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index c1304b5..43b09b7 100644
+index db73616..f6f1cce 100644
 --- a/lustre/lfsck/lfsck_lib.c
 +++ b/lustre/lfsck/lfsck_lib.c
-@@ -899,21 +899,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
+@@ -900,21 +900,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
  	return 0;
  }
  
@@ -291,7 +338,7 @@ index c1304b5..43b09b7 100644
  	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
  		if (flag & bits) {
  			bits &= ~flag;
-@@ -921,69 +915,43 @@ int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
+@@ -922,69 +916,43 @@ int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
  				if (bits == 0)
  					newline = true;
  
@@ -380,7 +427,7 @@ index c1304b5..43b09b7 100644
  }
  
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -1655,7 +1623,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+@@ -1670,7 +1638,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
  
  /* external interfaces */
  
@@ -389,7 +436,7 @@ index c1304b5..43b09b7 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1668,8 +1636,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+@@ -1683,8 +1651,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -399,7 +446,7 @@ index c1304b5..43b09b7 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENXIO;
-@@ -1709,7 +1676,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
+@@ -1724,7 +1691,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_speed);
  
@@ -408,7 +455,7 @@ index c1304b5..43b09b7 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1722,8 +1689,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
+@@ -1737,8 +1704,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -418,7 +465,7 @@ index c1304b5..43b09b7 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENXIO;
-@@ -1773,7 +1739,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
+@@ -1788,7 +1754,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_windows);
  
@@ -427,7 +474,7 @@ index c1304b5..43b09b7 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1789,7 +1755,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
+@@ -1804,7 +1770,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
  	if (likely(lfsck != NULL)) {
  		com = lfsck_component_find(lfsck, type);
  		if (likely(com != NULL)) {
@@ -437,10 +484,10 @@ index c1304b5..43b09b7 100644
  		} else {
  			rc = -ENOTSUPP;
 diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
-index c80fb48..bcbfb8e 100644
+index 4dccb70..fc9a0dc 100644
 --- a/lustre/lfsck/lfsck_namespace.c
 +++ b/lustre/lfsck/lfsck_namespace.c
-@@ -1088,65 +1088,56 @@ static int lfsck_namespace_post(const struct lu_env *env,
+@@ -1099,65 +1099,56 @@ static int lfsck_namespace_post(const struct lu_env *env,
  
  static int
  lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
@@ -523,7 +570,7 @@ index c80fb48..bcbfb8e 100644
  			    "first_failure_position");
  	if (rc < 0)
  		goto out;
-@@ -1166,8 +1157,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1177,8 +1168,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -533,7 +580,7 @@ index c80fb48..bcbfb8e 100644
  			      "checked_phase2: "LPU64"\n"
  			      "updated_phase1: "LPU64"\n"
  			      "updated_phase2: "LPU64"\n"
-@@ -1199,11 +1189,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1214,11 +1204,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			      ns->ln_run_time_phase2,
  			      speed,
  			      new_checked);
@@ -545,7 +592,7 @@ index c80fb48..bcbfb8e 100644
  
  		LASSERT(lfsck->li_di_oit != NULL);
  
-@@ -1232,9 +1217,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1247,9 +1232,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			pos.lp_dir_cookie = 0;
  		}
  		spin_unlock(&lfsck->li_lock);
@@ -556,7 +603,7 @@ index c80fb48..bcbfb8e 100644
  	} else if (ns->ln_status == LS_SCANNING_PHASE2) {
  		cfs_duration_t duration = cfs_time_current() -
  					  lfsck->li_time_last_checkpoint;
-@@ -1252,8 +1235,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1267,8 +1250,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			do_div(speed1, ns->ln_run_time_phase1);
  		if (rtime != 0)
  			do_div(speed2, rtime);
@@ -566,7 +613,7 @@ index c80fb48..bcbfb8e 100644
  			      "checked_phase2: "LPU64"\n"
  			      "updated_phase1: "LPU64"\n"
  			      "updated_phase2: "LPU64"\n"
-@@ -1288,11 +1270,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1307,11 +1289,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			      speed2,
  			      new_checked,
  			      PFID(&ns->ln_fid_latest_scanned_phase2));
@@ -578,7 +625,7 @@ index c80fb48..bcbfb8e 100644
  	} else {
  		__u64 speed1 = ns->ln_items_checked;
  		__u64 speed2 = ns->ln_objs_checked_phase2;
-@@ -1301,8 +1278,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1320,8 +1297,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			do_div(speed1, ns->ln_run_time_phase1);
  		if (ns->ln_run_time_phase2 != 0)
  			do_div(speed2, ns->ln_run_time_phase2);
@@ -588,7 +635,7 @@ index c80fb48..bcbfb8e 100644
  			      "checked_phase2: "LPU64"\n"
  			      "updated_phase1: "LPU64"\n"
  			      "updated_phase2: "LPU64"\n"
-@@ -1335,17 +1311,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+@@ -1358,17 +1334,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
  			      ns->ln_run_time_phase2,
  			      speed1,
  			      speed2);
@@ -608,10 +655,10 @@ index c80fb48..bcbfb8e 100644
  
  static int lfsck_namespace_double_scan_main(void *args)
 diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
-index 0fe590e..f1c76d6 100644
+index 4f0baa4..f6deaca 100644
 --- a/lustre/mdd/mdd_device.c
 +++ b/lustre/mdd/mdd_device.c
-@@ -884,16 +884,16 @@ static int mdd_process_config(const struct lu_env *env,
+@@ -889,16 +889,16 @@ static int mdd_process_config(const struct lu_env *env,
          ENTRY;
  
          switch (cfg->lcfg_command) {
@@ -638,7 +685,7 @@ index 0fe590e..f1c76d6 100644
          case LCFG_SETUP:
                  rc = next->ld_ops->ldo_process_config(env, next, cfg);
                  if (rc)
-@@ -1564,11 +1564,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
+@@ -1566,11 +1566,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
  
  static int __init mdd_mod_init(void)
  {
@@ -650,7 +697,7 @@ index 0fe590e..f1c76d6 100644
  	rc = lu_kmem_init(mdd_caches);
  	if (rc)
  		return rc;
-@@ -1584,7 +1581,7 @@ static int __init mdd_mod_init(void)
+@@ -1586,7 +1583,7 @@ static int __init mdd_mod_init(void)
  
  	rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
@@ -660,10 +707,10 @@ index 0fe590e..f1c76d6 100644
  				 LUSTRE_MDD_NAME, &mdd_device_type);
  	if (rc)
 diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
-index a95a42c..64183e3 100644
+index 4411892..37698f8 100644
 --- a/lustre/mdd/mdd_internal.h
 +++ b/lustre/mdd/mdd_internal.h
-@@ -347,7 +347,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
+@@ -248,7 +248,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
                                struct thandle *);
  
  /* mdd_lproc.c */
@@ -1093,31 +1140,11 @@ index de379b3..7ac4afa 100644
 +	}
 +	RETURN(0);
 +}
-diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 30d9f59..5e479c8 100644
---- a/lustre/obdclass/lprocfs_status.c
-+++ b/lustre/obdclass/lprocfs_status.c
-@@ -388,11 +388,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
- #undef BUFLEN
- 
- struct file_operations lprocfs_evict_client_fops = {
--        .owner = THIS_MODULE,
--        .read = lprocfs_fops_read,
--        .write = lprocfs_fops_write,
--        .open = lprocfs_evict_client_open,
--        .release = lprocfs_evict_client_release,
-+	.owner		= THIS_MODULE,
-+	.open		= lprocfs_evict_client_open,
-+	.release	= lprocfs_evict_client_release,
-+	.write		= lprocfs_evict_client_seq_write,
- };
- EXPORT_SYMBOL(lprocfs_evict_client_fops);
- #endif
 diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
-index 000d4ae..eb6bef0 100644
+index 359b373..fcde82a 100644
 --- a/lustre/ofd/lproc_ofd.c
 +++ b/lustre/ofd/lproc_ofd.c
-@@ -47,80 +47,75 @@
+@@ -47,81 +47,75 @@
  
  #ifdef LPROCFS
  
@@ -1193,8 +1220,9 @@ index 000d4ae..eb6bef0 100644
  	LASSERT(obd != NULL);
 -	*eof = 1;
 -	return snprintf(page, count, "%ld\n",
+-			obd->obd_self_export->exp_filter_data.fed_grant);
 +	return seq_printf(m, "%ld\n",
- 			obd->obd_self_export->exp_filter_data.fed_grant);
++			  obd->obd_self_export->exp_filter_data.fed_grant);
  }
 +LPROC_SEQ_FOPS_RO(ofd_grant_precreate);
  
@@ -1210,23 +1238,25 @@ index 000d4ae..eb6bef0 100644
  	ofd = ofd_dev(obd->obd_lu_dev);
 -	*eof = 1;
 -	return snprintf(page, count, "%d%%\n",
+-			(int) ofd_grant_reserved(ofd, 100));
 +	return seq_printf(m, "%d%%\n",
- 			(int) ofd_grant_reserved(ofd, 100));
++			  (int) ofd_grant_reserved(ofd, 100));
  }
  
--static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
+-static int lprocfs_ofd_wr_grant_ratio(struct file *file,
+-				      const char __user *buffer,
 -				      unsigned long count, void *data)
 +static ssize_t
-+ofd_grant_ratio_seq_write(struct file *file, const char *buffer,
++ofd_grant_ratio_seq_write(struct file *file, const char __user *buffer,
 +			  size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = (struct obd_device *)data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
++	struct seq_file         *m = file->private_data;
++	struct obd_device       *obd = m->private;
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	int			 val;
  	int			 rc;
-@@ -144,23 +139,24 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
+@@ -145,24 +139,24 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file,
  	spin_unlock(&ofd->ofd_grant_lock);
  	return count;
  }
@@ -1247,19 +1277,20 @@ index 000d4ae..eb6bef0 100644
 +	return seq_printf(m, "%d\n", ofd->ofd_precreate_batch);
  }
  
--static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
+-static int lprocfs_ofd_wr_precreate_batch(struct file *file,
+-					  const char __user *buffer,
 -					  unsigned long count, void *data)
 +static ssize_t
-+ofd_precreate_batch_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
++ofd_precreate_batch_seq_write(struct file *file, const char __user *buffer,
++			      size_t count, loff_t *off)
  {
 -	struct obd_device *obd = (struct obd_device *)data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
  	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
  	int val;
  	int rc;
-@@ -177,11 +173,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
+@@ -179,11 +173,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file,
  	spin_unlock(&ofd->ofd_batch_lock);
  	return count;
  }
@@ -1274,7 +1305,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd;
  	struct ofd_seq		*oseq = NULL;
  	int			retval = 0, rc;
-@@ -199,35 +195,32 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
+@@ -201,35 +195,32 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
  		      fid_idif_seq(ostid_id(&oseq->os_oi),
  				   ofd->ofd_lut.lut_lsd.lsd_osd_index) :
  		      ostid_seq(&oseq->os_oi);
@@ -1299,20 +1330,21 @@ index 000d4ae..eb6bef0 100644
 +static int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
 -	int			 rc;
++	struct obd_device *obd = m->private;
++	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
  
 -	rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num);
 -	return rc;
 +	return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num);
  }
  
--int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer,
 -			       unsigned long count, void *data)
 +static ssize_t
-+ofd_fmd_max_num_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
++ofd_fmd_max_num_seq_write(struct file *file, const char __user *buffer,
++			  size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
 +	struct seq_file		*m = file->private_data;
@@ -1320,7 +1352,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	int			 val;
  	int			 rc;
-@@ -242,22 +235,22 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
+@@ -244,22 +235,22 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char __user *buffer,
  	ofd->ofd_fmd_max_num = val;
  	return count;
  }
@@ -1331,19 +1363,20 @@ index 000d4ae..eb6bef0 100644
 +static int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
 -	int			 rc;
++	struct obd_device *obd = m->private;
++	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
  
 -	rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ);
 -	return rc;
 +	return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ);
  }
  
--int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer,
 -			       unsigned long count, void *data)
 +static ssize_t
-+ofd_fmd_max_age_seq_write(struct file *file, const char *buffer,
++ofd_fmd_max_age_seq_write(struct file *file, const char __user *buffer,
 +			  size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -1352,7 +1385,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	int			 val;
  	int			 rc;
-@@ -272,22 +265,22 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
+@@ -274,22 +265,22 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char __user *buffer,
  	ofd->ofd_fmd_max_age = val * HZ;
  	return count;
  }
@@ -1373,10 +1406,10 @@ index 000d4ae..eb6bef0 100644
 +			  obd->u.filter.fo_fl_oss_capa ? "oss" : "");
  }
  
--static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
+-static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer,
 -			       unsigned long count, void *data)
 +static ssize_t
-+ofd_capa_seq_write(struct file *file, const char *buffer, size_t count,
++ofd_capa_seq_write(struct file *file, const char *__user buffer, size_t count,
 +		   loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -1385,7 +1418,7 @@ index 000d4ae..eb6bef0 100644
  	int			 val, rc;
  
  	rc = lprocfs_write_helper(buffer, count, &val);
-@@ -306,28 +299,30 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
+@@ -308,28 +299,29 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char __user *buffer,
  		      val ? "enabled" : "disabled");
  	return count;
  }
@@ -1396,9 +1429,10 @@ index 000d4ae..eb6bef0 100644
 +static int ofd_capa_count_seq_show(struct seq_file *m, void *data)
  {
 -	return snprintf(page, count, "%d %d\n",
-+	return seq_printf(m, "%d %d\n",
- 			capa_count[CAPA_SITE_CLIENT],
- 			capa_count[CAPA_SITE_SERVER]);
+-			capa_count[CAPA_SITE_CLIENT],
+-			capa_count[CAPA_SITE_SERVER]);
++	return seq_printf(m, "%d %d\n", capa_count[CAPA_SITE_CLIENT],
++			  capa_count[CAPA_SITE_SERVER]);
  }
 +LPROC_SEQ_FOPS_RO(ofd_capa_count);
  
@@ -1414,10 +1448,10 @@ index 000d4ae..eb6bef0 100644
 +	return seq_printf(m, "%u\n", ofd->ofd_raid_degraded);
  }
  
--int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer,
 -			    unsigned long count, void *data)
 +static ssize_t
-+ofd_degraded_seq_write(struct file *file, const char *buffer,
++ofd_degraded_seq_write(struct file *file, const char __user *buffer,
 +		       size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -1426,7 +1460,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	int			 val, rc;
  
-@@ -338,38 +333,37 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
+@@ -340,38 +332,37 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char __user *buffer,
  	spin_lock(&ofd->ofd_flags_lock);
  	ofd->ofd_raid_degraded = !!val;
  	spin_unlock(&ofd->ofd_flags_lock);
@@ -1466,10 +1500,10 @@ index 000d4ae..eb6bef0 100644
 +	return seq_printf(m, "%u\n", ofd->ofd_syncjournal);
  }
  
--int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer,
 -			       unsigned long count, void *data)
 +static ssize_t
-+ofd_syncjournal_seq_write(struct file *file, const char *buffer,
++ofd_syncjournal_seq_write(struct file *file, const char __user *buffer,
 +			  size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -1478,13 +1512,15 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	int			 val;
  	int			 rc;
-@@ -388,27 +382,27 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
+@@ -390,6 +381,7 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char __user *buffer,
  
  	return count;
  }
 +LPROC_SEQ_FOPS(ofd_syncjournal);
  
- static char *sync_on_cancel_states[] = {"never",
+ /* This must be longer than the longest string below */
+ #define SYNC_STATES_MAXLEN 16
+@@ -397,23 +389,21 @@ static char *sync_on_cancel_states[] = {"never",
  					"blocking",
  					"always" };
  
@@ -1501,22 +1537,23 @@ index 000d4ae..eb6bef0 100644
 -		      sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
 -	return rc;
 +	return seq_printf(m, "%s\n",
-+			sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
++			  sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
  }
  
--int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_sync_lock_cancel(struct file *file,
+-				    const char __user *buffer,
 -				    unsigned long count, void *data)
 +static ssize_t
-+ofd_sync_lock_cancel_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
++ofd_sync_lock_cancel_seq_write(struct file *file, const char __user *buffer,
++			       size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
 +	struct seq_file		*m = file->private_data;
 +	struct obd_device	*obd = m->private;
  	struct lu_target	*tgt = obd->u.obt.obt_lut;
+ 	char			 kernbuf[SYNC_STATES_MAXLEN];
  	int			 val = -1;
- 	int			 i;
-@@ -436,22 +430,22 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
+@@ -455,23 +445,23 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file,
  	spin_unlock(&tgt->lut_flags_lock);
  	return count;
  }
@@ -1527,20 +1564,23 @@ index 000d4ae..eb6bef0 100644
 +static int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
 -	int			 rc;
++	struct obd_device *obd = m->private;
++	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
  
 -	rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable);
 -	return rc;
 +	return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable);
  }
  
--int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_grant_compat_disable(struct file *file,
+-					const char __user *buffer,
 -					unsigned long count, void *data)
 +static ssize_t
-+ofd_grant_compat_disable_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
++ofd_grant_compat_disable_seq_write(struct file *file,
++				   const char __user *buffer,
++				   size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
 +	struct seq_file		*m = file->private_data;
@@ -1548,7 +1588,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	int			 val;
  	int			 rc;
-@@ -469,41 +463,43 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
+@@ -489,42 +479,43 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file,
  
  	return count;
  }
@@ -1567,16 +1607,17 @@ index 000d4ae..eb6bef0 100644
 +	return lprocfs_uint_seq_show(m, &ofd->ofd_soft_sync_limit);
  }
  
--int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char *buffer,
+-int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char __user *buffer,
 -				   unsigned long count, void *data)
 +static ssize_t
-+ofd_soft_sync_limit_seq_write(struct file *file, const char *buffer,
++ofd_soft_sync_limit_seq_write(struct file *file, const char __user *buffer,
 +			      size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
-+	struct seq_file		*m = file->private_data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
++	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
  
 -	return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit);
 +	return lprocfs_uint_seq_write(file, buffer, count,
@@ -1589,7 +1630,7 @@ index 000d4ae..eb6bef0 100644
 +static int ofd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
++	struct obd_device       *obd = m->private;
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  
 -	*eof = 1;
@@ -1598,10 +1639,11 @@ index 000d4ae..eb6bef0 100644
 +	return lfsck_get_speed(m, ofd->ofd_osd);
  }
  
--static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+-static int lprocfs_wr_lfsck_speed_limit(struct file *file,
+-					const char __user *buffer,
 -					unsigned long count, void *data)
 +static ssize_t
-+ofd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
++ofd_lfsck_speed_limit_seq_write(struct file *file, const char __user *buffer,
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -1610,7 +1652,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	__u32			 val;
  	int			 rc;
-@@ -516,37 +512,34 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+@@ -537,38 +528,35 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file,
  
  	return rc != 0 ? rc : count;
  }
@@ -1648,16 +1690,18 @@ index 000d4ae..eb6bef0 100644
 -			ofd->ofd_lfsck_verify_pfid ? "on" : "off",
 -			ofd->ofd_inconsistency_self_detected,
 -			ofd->ofd_inconsistency_self_repaired);
-+	return seq_printf(m, "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
++	return seq_printf(m,
++			  "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
 +			  ofd->ofd_lfsck_verify_pfid ? "on" : "off",
 +			  ofd->ofd_inconsistency_self_detected,
 +			  ofd->ofd_inconsistency_self_repaired);
  }
  
--static int lprocfs_wr_lfsck_verify_pfid(struct file *file, const char *buffer,
+-static int lprocfs_wr_lfsck_verify_pfid(struct file *file,
+-					const char __user *buffer,
 -					unsigned long count, void *data)
 +static ssize_t
-+ofd_lfsck_verify_pfid_seq_write(struct file *file, const char *buffer,
++ofd_lfsck_verify_pfid_seq_write(struct file *file, const char __user *buffer,
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
@@ -1666,7 +1710,7 @@ index 000d4ae..eb6bef0 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	__u32			 val;
  	int			 rc;
-@@ -559,75 +552,101 @@ static int lprocfs_wr_lfsck_verify_pfid(struct file *file, const char *buffer,
+@@ -581,75 +569,101 @@ static int lprocfs_wr_lfsck_verify_pfid(struct file *file,
  
  	return count;
  }
@@ -1835,10 +1879,10 @@ index 000d4ae..eb6bef0 100644
  {
  	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
 diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 9b82e51..126f29e 100644
+index b597b03..e186c41 100644
 --- a/lustre/ofd/ofd_dev.c
 +++ b/lustre/ofd/ofd_dev.c
-@@ -240,8 +240,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
+@@ -239,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -1848,7 +1892,7 @@ index 9b82e51..126f29e 100644
  		/* For interoperability */
  		struct cfg_interop_param   *ptr = NULL;
  		struct lustre_cfg	   *old_cfg = NULL;
-@@ -279,8 +278,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
+@@ -278,8 +277,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
  			break;
  		}
  
@@ -1858,7 +1902,7 @@ index 9b82e51..126f29e 100644
  					      d->ld_obd);
  		if (rc > 0 || rc == -ENOSYS) {
  			CDEBUG(D_CONFIG, "pass param %s down the stack.\n",
-@@ -496,9 +494,10 @@ static struct lu_device_operations ofd_lu_ops = {
+@@ -485,9 +483,10 @@ static struct lu_device_operations ofd_lu_ops = {
  	.ldo_prepare		= ofd_prepare,
  };
  
@@ -1870,7 +1914,7 @@ index 9b82e51..126f29e 100644
  	struct obd_device		*obd = ofd_obd(ofd);
  	cfs_proc_dir_entry_t		*entry;
  	int				 rc = 0;
-@@ -507,8 +506,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -496,8 +495,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  
  	/* lprocfs must be setup before the ofd so state can be safely added
  	 * to /proc incrementally as the ofd is setup */
@@ -1881,7 +1925,7 @@ index 9b82e51..126f29e 100644
  	if (rc) {
  		CERROR("%s: lprocfs_obd_setup failed: %d.\n",
  		       obd->obd_name, rc);
-@@ -524,7 +523,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -513,7 +512,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  
  	obd->obd_uses_nid_stats = 1;
  
@@ -1891,7 +1935,7 @@ index 9b82e51..126f29e 100644
  	if (IS_ERR(entry)) {
  		rc = PTR_ERR(entry);
  		CERROR("%s: error %d setting up lprocfs for %s\n",
-@@ -534,8 +534,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -523,8 +523,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  	obd->obd_proc_exports_entry = entry;
  
  	entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
@@ -1904,7 +1948,7 @@ index 9b82e51..126f29e 100644
  	if (IS_ERR(entry)) {
  		rc = PTR_ERR(entry);
  		CERROR("%s: add proc entry 'clear' failed: %d.\n",
-@@ -551,7 +553,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -540,7 +542,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  		GOTO(remove_entry_clear, rc);
  	RETURN(0);
  remove_entry_clear:
@@ -1913,16 +1957,29 @@ index 9b82e51..126f29e 100644
  obd_cleanup:
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -563,47 +565,36 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+@@ -548,51 +550,48 @@ obd_cleanup:
+ 	return rc;
+ }
+ 
++/**
++ * ofd_procfs_add_brw_stats_symlink - expose osd stats to ofd layer
++ *
++ * The osd interfaces to the backend file system exposes useful data
++ * such as brw_stats and read or write cache states. This same data
++ * needs to be exposed into the obdfilter (ofd) layer to maintain
++ * backwards compatibility. This function creates the symlinks in the
++ * proc layer to enable this.
++ */
+ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
  {
  	struct obd_device	*obd = ofd_obd(ofd);
  	struct obd_device	*osd_obd = ofd->ofd_osd_exp->exp_obd;
 -	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
 -	cfs_proc_dir_entry_t	*osd_dir;
-+	struct proc_dir_entry	*osd_dir = osd_obd->obd_type->typ_procsym;
  
 -	osd_dir = lprocfs_srch(osd_root, obd->obd_name);
- 	if (osd_dir == NULL)
+-	if (osd_dir == NULL)
++	if (obd->obd_proc_entry == NULL)
  		return;
  
 -	if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
@@ -1981,15 +2038,15 @@ index 9b82e51..126f29e 100644
  	lprocfs_free_per_client_stats(obd);
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -2387,7 +2378,6 @@ static struct lu_device_type ofd_device_type = {
+@@ -2389,7 +2388,6 @@ static struct proc_dir_entry *ofd_symlink;
  
  int __init ofd_init(void)
  {
 -	struct lprocfs_static_vars	lvars;
- 	int				rc;
+ 	struct obd_type *type;
+ 	int rc;
  
- 	rc = lu_kmem_init(ofd_caches);
-@@ -2400,11 +2390,9 @@ int __init ofd_init(void)
+@@ -2403,11 +2401,9 @@ int __init ofd_init(void)
  		return(rc);
  	}
  
@@ -2001,12 +2058,12 @@ index 9b82e51..126f29e 100644
 +				 NULL,
  #endif
  				 LUSTRE_OST_NAME, &ofd_device_type);
- 	return rc;
+ 
 diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index 3aae6dd..1bdcb80 100644
+index 98a5cba..a630a9c 100644
 --- a/lustre/ofd/ofd_internal.h
 +++ b/lustre/ofd/ofd_internal.h
-@@ -403,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
+@@ -405,13 +405,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
  
  /* lproc_ofd.c */
  #ifdef LPROCFS
@@ -2021,30 +2078,6 @@ index 3aae6dd..1bdcb80 100644
  static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
  #endif
  
-diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index 4b5370a..3767f3f 100644
---- a/lustre/osd-ldiskfs/osd_handler.c
-+++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5931,6 +5931,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
- 	osd->od_connects++;
- 	spin_unlock(&osd->od_osfs_lock);
- 
-+	obd->obd_type->typ_procsym = osd->od_proc_entry;
- 	RETURN(0);
- }
- 
-diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 29a3617..ad8908a 100644
---- a/lustre/osd-zfs/osd_handler.c
-+++ b/lustre/osd-zfs/osd_handler.c
-@@ -822,6 +822,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
- 	osd->od_connects++;
- 	spin_unlock(&osd->od_objset.lock);
- 
-+	obd->obd_type->typ_procsym = osd->od_proc_entry;
- 	RETURN(0);
- }
- 
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
similarity index 96%
rename from sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
rename to sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index 4fccc48..e14c736 100644
--- a/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,7 +1,7 @@
-From 4112e3a2aefcae89181bbddaf704855f69c8de23 Mon Sep 17 00:00:00 2001
-From: yangsheng <yang.sheng@intel.com>
-Date: Fri, 28 Feb 2014 20:30:18 +0800
-Subject: [PATCH 7/7] LU-4416 mm: Backport shrinker changes from upstream
+From cec7352d2cf74e8124a499aac74b246baa888c3c Mon Sep 17 00:00:00 2001
+From: Yang Sheng <yang.sheng@intel.com>
+Date: Thu, 24 Apr 2014 11:43:09 +0800
+Subject: [PATCH 8/8] LU-4416 mm: Backport shrinker changes from upstream
 
 Convert shrinker to new count/scan API.
 --ptlrpc shrinker
@@ -10,55 +10,51 @@ Convert shrinker to new count/scan API.
 
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
-Signed-off-by: yang sheng <yang.sheng@intel.com>
+Signed-off-by: Yang Sheng <yang.sheng@intel.com>
 Change-Id: Idbd7cd3b7488202e5e8f6fdf757ae6d20e28d642
 ---
- libcfs/autoconf/lustre-libcfs.m4        |  22 ++++
+ libcfs/autoconf/lustre-libcfs.m4        |  18 +++
  libcfs/include/libcfs/linux/linux-mem.h |  34 ++++-
  libcfs/include/libcfs/posix/libcfs.h    |  13 +-
  lustre/ldlm/ldlm_pool.c                 | 222 ++++++++++++++++++++------------
  lustre/obdclass/lu_object.c             | 134 +++++++++++--------
  lustre/ptlrpc/sec_bulk.c                |  80 +++++++++---
- 6 files changed, 342 insertions(+), 163 deletions(-)
+ 6 files changed, 338 insertions(+), 163 deletions(-)
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 815f082..a6b728a 100644
+index dba971d..840fcd5 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -295,6 +295,26 @@ fi
- ])
+@@ -290,6 +290,22 @@ No crc32c pclmulqdq crypto api found, enable internal pclmulqdq based crc32c
+ ]) # LIBCFS_ENABLE_CRC32C_ACCEL
  
  #
 +# FC19 3.12 kernel struct shrinker change
 +#
-+AC_DEFUN([LIBCFS_SHRINKER_COUNT],
-+[AC_MSG_CHECKING([shrinker has count_objects])
-+LB_LINUX_TRY_COMPILE([
++AC_DEFUN([LIBCFS_SHRINKER_COUNT],[
++LB_CHECK_COMPILE([shrinker has 'count_objects'],
++shrinker_count_objects, [
 +	#include <linux/mmzone.h>
 +	#include <linux/shrinker.h>
 +],[
 +	((struct shrinker*)0)->count_objects(NULL, NULL);
 +],[
-+	AC_MSG_RESULT(yes)
 +	AC_DEFINE(HAVE_SHRINKER_COUNT, 1,
 +		[shrinker has count_objects memeber])
-+],[
-+	AC_MSG_RESULT(no)
-+],[
 +])
 +])
 +
 +#
  # LIBCFS_PROG_LINUX
  #
- # LNet linux kernel checks
-@@ -328,6 +348,8 @@ LIBCFS_HAVE_CRC32
+ # LibCFS linux kernel checks
+@@ -324,6 +340,8 @@ LIBCFS_HAVE_CRC32
  LIBCFS_ENABLE_CRC32_ACCEL
  # 3.10
  LIBCFS_ENABLE_CRC32C_ACCEL
 +# 3.12
 +LIBCFS_SHRINKER_COUNT
- ])
+ ]) # LIBCFS_PROG_LINUX
  
  #
 diff --git a/libcfs/include/libcfs/linux/linux-mem.h b/libcfs/include/libcfs/linux/linux-mem.h
@@ -452,7 +448,7 @@ index 6cf50f2..b3eaf1c 100644
  	RETURN(rc);
  }
 diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c
-index 1304e95..0850b2a 100644
+index 1304e95..77aa930 100644
 --- a/lustre/obdclass/lu_object.c
 +++ b/lustre/obdclass/lu_object.c
 @@ -1884,6 +1884,69 @@ static void lu_site_stats_get(cfs_hash_t *hs,
@@ -488,7 +484,7 @@ index 1304e95..0850b2a 100644
 +{
 +	struct lu_site *s;
 +	struct lu_site *tmp;
-+	unsigned long remain = sc->nr_to_scan, freed = 0;
++	unsigned long remain = sc->nr_to_scan, freed = remain;
 +	LIST_HEAD(splice);
 +
 +	if (!(sc->gfp_mask & __GFP_FS))
@@ -507,7 +503,7 @@ index 1304e95..0850b2a 100644
 +
 +	mutex_lock(&lu_sites_guard);
 +	list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
-+		freed = lu_site_purge(&lu_shrink_env, s, remain);
++		freed = lu_site_purge(&lu_shrink_env, s, freed);
 +		remain -= freed;
 +		/*
 +		 * Move just shrunk site to the tail of site list to
@@ -753,5 +749,5 @@ index bb1e782..9da60ad 100644
                  enc_pools_free();
                  return -ENOMEM;
 -- 
-1.9.1
+1.9.3
 

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index f777e39..26e07bd 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -45,8 +45,9 @@ PATCHES=(
 	"${FILESDIR}/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
+	"${FILESDIR}/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch"
+	"${FILESDIR}/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
 	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-04-22  8:41 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-04-22  8:41 UTC (permalink / raw
  To: gentoo-commits

commit:     7ca82a340fde1f2ca29e47135c51c9e855f6b3b3
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 22 08:41:27 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue Apr 22 08:41:27 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=7ca82a34

Update lustre patches

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                            |  5 +++++
 ...9-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch | 17 +++++++++++++----
 ...416-mm-Backport-shrinker-changes-from-upstream.patch |  2 +-
 3 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 4b22fd9..8ad52ac 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,11 @@
 # $Header: $
 
   22 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch:
+  Update lustre patches
+
+  22 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
   +files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
   +files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 296c476..f41c787 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,4 +1,4 @@
-From aaafceb14e7eaa2a8171dc99172d20311fd05db2 Mon Sep 17 00:00:00 2001
+From 61588b698d08017b497f7a93fcf8626ddef9ceb5 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 20:01:52 -0400
 Subject: [PATCH 6/7] LU-3319 procfs: move mdd/ofd proc handling to seq_files
@@ -13,7 +13,7 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
  lustre/include/lustre_lfsck.h    |   6 +-
  lustre/lfsck/lfsck_internal.h    |   9 +-
- lustre/lfsck/lfsck_layout.c      |  69 ++----
+ lustre/lfsck/lfsck_layout.c      |  71 ++----
  lustre/lfsck/lfsck_lib.c         |  88 +++-----
  lustre/lfsck/lfsck_namespace.c   |  75 ++-----
  lustre/mdd/mdd_device.c          |  25 +--
@@ -25,7 +25,7 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  lustre/ofd/ofd_internal.h        |   6 +-
  lustre/osd-ldiskfs/osd_handler.c |   1 +
  lustre/osd-zfs/osd_handler.c     |   1 +
- 14 files changed, 500 insertions(+), 639 deletions(-)
+ 14 files changed, 501 insertions(+), 640 deletions(-)
 
 diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
 index 0d6f666..5adbffe 100644
@@ -76,7 +76,7 @@ index 4f84c3b..c4e6430 100644
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
  		    struct lfsck_position *pos, bool init);
 diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index c808808..2430fc0 100644
+index c808808..9f2d9d6 100644
 --- a/lustre/lfsck/lfsck_layout.c
 +++ b/lustre/lfsck/lfsck_layout.c
 @@ -471,7 +471,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
@@ -215,6 +215,15 @@ index c808808..2430fc0 100644
  	} else if (lo->ll_status == LS_SCANNING_PHASE2) {
  		cfs_duration_t duration = cfs_time_current() -
  					  lfsck->li_time_last_checkpoint;
+@@ -4957,7 +4926,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 			do_div(speed1, lo->ll_run_time_phase1);
+ 		if (rtime != 0)
+ 			do_div(speed2, rtime);
+-		rc = snprintf(buf, len,
++		rc = seq_printf(m,
+ 			      "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "run_time_phase1: %u seconds\n"
 @@ -4978,8 +4947,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		if (rc <= 0)
  			goto out;

diff --git a/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index dc787bc..4fccc48 100644
--- a/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,4 +1,4 @@
-From 44803997002325709aa62807a55ccf8b6c1ba638 Mon Sep 17 00:00:00 2001
+From 4112e3a2aefcae89181bbddaf704855f69c8de23 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Fri, 28 Feb 2014 20:30:18 +0800
 Subject: [PATCH 7/7] LU-4416 mm: Backport shrinker changes from upstream


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-04-22  7:22 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-04-22  7:22 UTC (permalink / raw
  To: gentoo-commits

commit:     15086580d6a3dfef447706752a9747f08d55e27a
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 22 07:22:13 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue Apr 22 07:22:13 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=15086580

Update lustre patches

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   21 +
 ...fs-Move-NRS-TBF-proc-handling-to-seq_fil.patch} |    6 +-
 .../0001-LU-3319-procfs-fix-symlink-handling.patch | 1132 --------------------
 ...fs-update-zfs-proc-handling-to-seq_files.patch} |   14 +-
 ...ocfs-move-osp-proc-handling-to-seq_files.patch} |    4 +-
 ...ocfs-move-lod-proc-handling-to-seq_files.patch} |    8 +-
 ...rocfs-move-mgs-proc-handling-to-seq_files.patch |  356 ------
 ...fs-move-mdt-mds-proc-handling-to-seq_fil.patch} |   22 +-
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} |   98 +-
 ...-Backport-shrinker-changes-from-upstream.patch} |   16 +-
 ...cfs-update-ldiskfs-proc-handling-to-seq_f.patch |  826 --------------
 sys-cluster/lustre/lustre-9999.ebuild              |   26 +-
 12 files changed, 102 insertions(+), 2427 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 0ed9678..4b22fd9 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,27 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  22 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
+  +files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  +files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  +files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  +files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  +files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  -files/0001-LU-3319-procfs-fix-symlink-handling.patch,
+  -files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
+  -files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  -files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  -files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  -files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  -files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  -files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  -files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   02 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
   +files/lustre-readline6.3_fix.patch,

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
similarity index 95%
rename from sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
index 5c67013..a00e070 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 7dbddd98e60ab73580ea52c8b53274da2283d624 Mon Sep 17 00:00:00 2001
+From b0d57f2b81f5ec6f1f2cad9914cdb01960377f01 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Feb 2014 12:54:05 -0500
-Subject: [PATCH 02/10] LU-3319 procfs: Move NRS TBF proc handling to seq_files
+Subject: [PATCH 1/7] LU-3319 procfs: Move NRS TBF proc handling to seq_files
 
 With newer kernels moving their proc file system handling
 to seq_files this patch migrates the proc handling for NRS
@@ -14,7 +14,7 @@ Signed-off-by: James Simmons <uja.ornl@gmail.com>
  1 file changed, 14 insertions(+), 21 deletions(-)
 
 diff --git a/lustre/ptlrpc/nrs_tbf.c b/lustre/ptlrpc/nrs_tbf.c
-index 96eac30..09ab0e7 100644
+index 80fa9ff..93b9103 100644
 --- a/lustre/ptlrpc/nrs_tbf.c
 +++ b/lustre/ptlrpc/nrs_tbf.c
 @@ -1572,30 +1572,26 @@ static void nrs_tbf_req_stop(struct ptlrpc_nrs_policy *policy,

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
deleted file mode 100644
index 4583601..0000000
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
+++ /dev/null
@@ -1,1132 +0,0 @@
-From 4c418e7208a62c7bb7d61c1f97cf300675215bd4 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 28 Mar 2014 11:19:07 -0400
-Subject: [PATCH 01/10] LU-3319 procfs: fix symlink handling
-
-While working on symlink handling for seq files I noticed a
-long outstanding bug. Code was developed to link osc obds
-to target_obds of the lov layer. The target_obds directory
-was never created for the symlinks. This patch enables this
-long forgotten feature. Also addressed is the race condition
-experinced with server side code ported to seq_files that
-used symlinks. To avoid the race the handle obd_proc_private
-was moved from struct obd_device to struct obd_type which
-now allows earlier registeration that only happens once.
-The second problem addressed is the module loading race.
-Several modules share the same top proc directory entry which
-can become a issue if a client exist on a server node since
-the linux proc system allows multiple directories of the same
-name. Original Lustre had a lprocfs_srch but that doesn't
-work if you use the kernels internal cache for the proc
-system so you need to keep track of who grabs the proc root
-first and then use the first one registered for when the
-next module loads.
-
-Change-Id: Ib158ec4444ed7abc0f3c3e820ee4a333631a58d1
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
----
- lustre/include/lprocfs_status.h  |   4 +-
- lustre/include/obd.h             |  17 +++--
- lustre/include/obd_class.h       |   5 +-
- lustre/lmv/lmv_obd.c             |  65 +++++-----------
- lustre/lod/lod_dev.c             |  28 +++----
- lustre/lov/lov_obd.c             | 156 ++++++++++++++++++++++++---------------
- lustre/mdc/mdc_request.c         |   6 +-
- lustre/mdd/mdd_device.c          |   6 +-
- lustre/mdt/mdt_handler.c         |   6 +-
- lustre/mdt/mdt_mds.c             |   6 +-
- lustre/mgc/libmgc.c              |   6 +-
- lustre/mgc/mgc_request.c         |   6 +-
- lustre/mgs/mgs_handler.c         |   6 +-
- lustre/obdclass/genops.c         |  55 ++++++++------
- lustre/obdclass/llog_test.c      |   6 +-
- lustre/obdclass/lprocfs_status.c |   1 -
- lustre/obdecho/echo_client.c     |  10 +--
- lustre/ofd/ofd_dev.c             |   6 +-
- lustre/osc/osc_request.c         |  49 +++++++++---
- lustre/osd-ldiskfs/osd_handler.c |   6 +-
- lustre/osd-zfs/osd_handler.c     |   6 +-
- lustre/osp/osp_dev.c             |  33 +++++----
- lustre/ost/ost_handler.c         |   6 +-
- lustre/quota/qmt_dev.c           |   6 +-
- 24 files changed, 277 insertions(+), 224 deletions(-)
-
-diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h
-index 978b10c..0d6fd4c 100644
---- a/lustre/include/lprocfs_status.h
-+++ b/lustre/include/lprocfs_status.h
-@@ -1145,12 +1145,10 @@ static inline int lprocfs_seq_add_vars(cfs_proc_dir_entry_t *root,
- 				       struct lprocfs_seq_vars *var,
- 				       void *data)
- { return 0; }
--#ifndef HAVE_ONLY_PROCFS_SEQ
- static inline cfs_proc_dir_entry_t *
- lprocfs_seq_register(const char *name, cfs_proc_dir_entry_t *parent,
--		     struct lprocfs_vars *list, void *data)
-+		     struct lprocfs_seq_vars *list, void *data)
- { return NULL; }
--#endif
- static inline void lprocfs_remove(cfs_proc_dir_entry_t **root)
- { return; }
- static inline void lprocfs_remove_proc_entry(const char *name,
-diff --git a/lustre/include/obd.h b/lustre/include/obd.h
-index bb67e43..5353524 100644
---- a/lustre/include/obd.h
-+++ b/lustre/include/obd.h
-@@ -190,13 +190,15 @@ struct obd_info {
- };
- 
- struct obd_type {
--        cfs_list_t typ_chain;
--        struct obd_ops *typ_dt_ops;
--        struct md_ops *typ_md_ops;
--        cfs_proc_dir_entry_t *typ_procroot;
--        char *typ_name;
--        int  typ_refcnt;
--        struct lu_device_type *typ_lu;
-+	struct list_head typ_chain;
-+	struct obd_ops *typ_dt_ops;
-+	struct md_ops *typ_md_ops;
-+	struct proc_dir_entry *typ_procroot;
-+	struct proc_dir_entry *typ_procsym;
-+	__u32 typ_sym_filter;
-+	char *typ_name;
-+	int  typ_refcnt;
-+	struct lu_device_type *typ_lu;
- 	spinlock_t obd_type_lock;
- };
- 
-@@ -834,7 +836,6 @@ struct obd_device {
- 
- 	struct proc_dir_entry	*obd_proc_entry;
- 	struct proc_dir_entry	*obd_proc_exports_entry;
--	void			*obd_proc_private;	/* type private PDEs */
- 	struct proc_dir_entry	*obd_svc_procroot;
- 	struct lprocfs_stats	*obd_svc_stats;
- 	struct lprocfs_seq_vars	*obd_vars;
-diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h
-index aeb94ba..5de7cd7 100644
---- a/lustre/include/obd_class.h
-+++ b/lustre/include/obd_class.h
-@@ -86,13 +86,12 @@ struct lu_device_type;
- 
- /* genops.c */
- struct obd_export *class_conn2export(struct lustre_handle *);
--int class_register_type(struct obd_ops *, struct md_ops *,
-+int class_register_type(struct obd_ops *, struct md_ops *, bool enable_proc,
- 			struct lprocfs_seq_vars *module_vars,
- #ifndef HAVE_ONLY_PROCFS_SEQ
- 			struct lprocfs_vars *,
- #endif
--			const char *nm,
--			struct lu_device_type *ldt);
-+			const char *nm, struct lu_device_type *ldt);
- int class_unregister_type(const char *nm);
- 
- struct obd_device *class_newdev(const char *type_name, const char *name);
-diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
-index 8f26e6c..cd16eaf 100644
---- a/lustre/lmv/lmv_obd.c
-+++ b/lustre/lmv/lmv_obd.c
-@@ -270,9 +270,6 @@ static int lmv_connect(const struct lu_env *env,
-                        struct obd_uuid *cluuid, struct obd_connect_data *data,
-                        void *localdata)
- {
--#ifdef __KERNEL__
--        struct proc_dir_entry *lmv_proc_dir;
--#endif
-         struct lmv_obd        *lmv = &obd->u.lmv;
-         struct lustre_handle  conn = { 0 };
-         int                    rc = 0;
-@@ -304,21 +301,16 @@ static int lmv_connect(const struct lu_env *env,
-         if (data)
-                 lmv->conn_data = *data;
- 
--#ifdef __KERNEL__
--	if (obd->obd_proc_private != NULL) {
--		lmv_proc_dir = obd->obd_proc_private;
--	} else {
--		lmv_proc_dir = lprocfs_seq_register("target_obds",
--						    obd->obd_proc_entry,
--						    NULL, NULL);
--		if (IS_ERR(lmv_proc_dir)) {
-+	if (obd->obd_type->typ_procsym == NULL) {
-+		obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
-+							 obd->obd_proc_entry,
-+							 NULL, NULL);
-+		if (IS_ERR(obd->obd_type->typ_procsym)) {
- 			CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
- 			       obd->obd_type->typ_name, obd->obd_name);
--			lmv_proc_dir = NULL;
-+			obd->obd_type->typ_procsym = NULL;
- 		}
--		obd->obd_proc_private = lmv_proc_dir;
- 	}
--#endif
- 
-         /*
-          * All real clients should perform actual connection right away, because
-@@ -329,12 +321,8 @@ static int lmv_connect(const struct lu_env *env,
- 	if (data != NULL && (data->ocd_connect_flags & OBD_CONNECT_REAL))
-                 rc = lmv_check_connect(obd);
- 
--#ifdef __KERNEL__
--	if (rc && lmv_proc_dir) {
--		lprocfs_remove(&lmv_proc_dir);
--		obd->obd_proc_private = NULL;
--	}
--#endif
-+	if (rc && obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
-         RETURN(rc);
- }
- 
-@@ -416,9 +404,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
- 
- int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- {
--#ifdef __KERNEL__
--        struct proc_dir_entry   *lmv_proc_dir;
--#endif
-         struct lmv_obd          *lmv = &obd->u.lmv;
-         struct obd_uuid         *cluuid = &lmv->cluuid;
-         struct obd_uuid          lmv_mdc_uuid = { "LMV_MDC_UUID" };
-@@ -497,15 +482,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- 		mdc_obd->obd_name, mdc_obd->obd_uuid.uuid,
- 		atomic_read(&obd->obd_refcount));
- 
--#ifdef __KERNEL__
--	lmv_proc_dir = obd->obd_proc_private;
--	if (lmv_proc_dir) {
-+	if (obd->obd_type->typ_procsym != NULL) {
- 		struct proc_dir_entry *mdc_symlink;
- 
- 		LASSERT(mdc_obd->obd_type != NULL);
- 		LASSERT(mdc_obd->obd_type->typ_name != NULL);
- 		mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
--						  lmv_proc_dir,
-+						  obd->obd_type->typ_procsym,
- 						  "../../../%s/%s",
- 						  mdc_obd->obd_type->typ_name,
- 						  mdc_obd->obd_name);
-@@ -514,11 +497,9 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- 			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
- 			       obd->obd_type->typ_name, obd->obd_name,
- 			       mdc_obd->obd_name);
--			lprocfs_remove(&lmv_proc_dir);
--			obd->obd_proc_private = NULL;
-+			lprocfs_remove(&obd->obd_type->typ_procsym);
- 		}
- 	}
--#endif
- 	RETURN(0);
- }
- 
-@@ -706,9 +687,6 @@ int lmv_check_connect(struct obd_device *obd)
- 
- static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- {
--#ifdef __KERNEL__
--        struct proc_dir_entry  *lmv_proc_dir;
--#endif
-         struct lmv_obd         *lmv = &obd->u.lmv;
-         struct obd_device      *mdc_obd;
-         int                     rc;
-@@ -725,11 +703,10 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
-                 mdc_obd->obd_no_recov = obd->obd_no_recov;
-         }
- 
--#ifdef __KERNEL__
--	lmv_proc_dir = obd->obd_proc_private;
--	if (lmv_proc_dir)
--		lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
--#endif
-+	if (obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove_proc_entry(mdc_obd->obd_name,
-+					  obd->obd_type->typ_procsym);
-+
- 	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
- 	if (rc)
- 		CERROR("Can't finanize fids factory\n");
-@@ -777,13 +754,11 @@ static int lmv_disconnect(struct obd_export *exp)
- 		lmv_disconnect_mdc(obd, lmv->tgts[i]);
-         }
- 
--#ifdef __KERNEL__
--	if (obd->obd_proc_private)
--		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
-+	if (obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
- 	else
- 		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
- 		       obd->obd_type->typ_name, obd->obd_name);
--#endif
- 
- out_local:
-         /*
-@@ -3423,11 +3398,11 @@ struct md_ops lmv_md_ops = {
- 
- int __init lmv_init(void)
- {
--	return class_register_type(&lmv_obd_ops, &lmv_md_ops, NULL,
-+	return class_register_type(&lmv_obd_ops, &lmv_md_ops, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					NULL,
-+				   NULL,
- #endif
--					LUSTRE_LMV_NAME, NULL);
-+				   LUSTRE_LMV_NAME, NULL);
- }
- 
- #ifdef __KERNEL__
-diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
-index 1d4849f..a653d6a 100644
---- a/lustre/lod/lod_dev.c
-+++ b/lustre/lod/lod_dev.c
-@@ -892,8 +892,8 @@ static struct obd_ops lod_obd_device_ops = {
- static int __init lod_mod_init(void)
- {
- 	struct lprocfs_static_vars  lvars = { 0 };
--	cfs_proc_dir_entry_t       *lov_proc_dir;
--	int			    rc;
-+	struct obd_type	*type;
-+	int rc;
- 
- 	rc = lu_kmem_init(lod_caches);
- 	if (rc)
-@@ -901,32 +901,32 @@ static int __init lod_mod_init(void)
- 
- 	lprocfs_lod_init_vars(&lvars);
- 
--	rc = class_register_type(&lod_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&lod_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				 lvars.module_vars,
- #endif
--				LUSTRE_LOD_NAME, &lod_device_type);
-+				 LUSTRE_LOD_NAME, &lod_device_type);
- 	if (rc) {
- 		lu_kmem_fini(lod_caches);
- 		return rc;
- 	}
- 
- 	/* create "lov" entry in procfs for compatibility purposes */
--	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
--	if (lov_proc_dir == NULL) {
--		lov_proc_dir = lprocfs_register("lov", proc_lustre_root,
--						NULL, NULL);
--		if (IS_ERR(lov_proc_dir))
--			CERROR("lod: can't create compat entry \"lov\": %d\n",
--			       (int)PTR_ERR(lov_proc_dir));
--	}
-+	type = class_search_type(LUSTRE_LOV_NAME);
-+	if (type != NULL && type->typ_procroot != NULL)
-+		return rc;
- 
-+	type = class_search_type(LUSTRE_LOD_NAME);
-+	type->typ_procsym = lprocfs_register("lov", proc_lustre_root,
-+					     NULL, NULL);
-+	if (IS_ERR(type->typ_procsym))
-+		CERROR("lod: can't create compat entry \"lov\": %d\n",
-+		       (int)PTR_ERR(type->typ_procsym));
- 	return rc;
- }
- 
- static void __exit lod_mod_exit(void)
- {
--
- 	lprocfs_try_remove_proc_entry("lov", proc_lustre_root);
- 
- 	class_unregister_type(LUSTRE_LOD_NAME);
-diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c
-index 9d47ec5..78c11fb 100644
---- a/lustre/lov/lov_obd.c
-+++ b/lustre/lov/lov_obd.c
-@@ -124,19 +124,16 @@ static int lov_notify(struct obd_device *obd, struct obd_device *watched,
- int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
-                     struct obd_connect_data *data)
- {
--        struct lov_obd *lov = &obd->u.lov;
--        struct obd_uuid *tgt_uuid;
--        struct obd_device *tgt_obd;
--        static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
--        struct obd_import *imp;
--#ifdef __KERNEL__
--	struct proc_dir_entry *lov_proc_dir;
--#endif
--        int rc;
--        ENTRY;
-+	struct lov_obd *lov = &obd->u.lov;
-+	struct obd_uuid *tgt_uuid;
-+	struct obd_device *tgt_obd;
-+	static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
-+	struct obd_import *imp;
-+	int rc;
-+	ENTRY;
- 
--        if (!lov->lov_tgts[index])
--                RETURN(-EINVAL);
-+	if (lov->lov_tgts[index] == NULL)
-+		RETURN(-EINVAL);
- 
-         tgt_uuid = &lov->lov_tgts[index]->ltd_uuid;
-         tgt_obd = lov->lov_tgts[index]->ltd_obd;
-@@ -191,32 +188,29 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
-         CDEBUG(D_CONFIG, "Connected tgt idx %d %s (%s) %sactive\n", index,
-                obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in");
- 
--#ifdef __KERNEL__
--	lov_proc_dir = obd->obd_proc_private;
--        if (lov_proc_dir) {
--                struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
-+	if (obd->obd_type->typ_procsym != NULL) {
- 		struct proc_dir_entry *osc_symlink;
--
--                LASSERT(osc_obd != NULL);
--                LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
--                LASSERT(osc_obd->obd_type->typ_name != NULL);
--
--                osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
--                                                  lov_proc_dir,
--                                                  "../../../%s/%s",
--                                                  osc_obd->obd_type->typ_name,
--                                                  osc_obd->obd_name);
--                if (osc_symlink == NULL) {
--                        CERROR("could not register LOV target "
--                                "/proc/fs/lustre/%s/%s/target_obds/%s.",
--                                obd->obd_type->typ_name, obd->obd_name,
--                                osc_obd->obd_name);
--                        lprocfs_remove(&lov_proc_dir);
--			obd->obd_proc_private = NULL;
-+		struct obd_device *osc_obd;
-+
-+		osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
-+
-+		LASSERT(osc_obd != NULL);
-+		LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
-+		LASSERT(osc_obd->obd_type->typ_name != NULL);
-+
-+		osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
-+						  obd->obd_type->typ_procsym,
-+						  "../../../%s/%s",
-+						  osc_obd->obd_type->typ_name,
-+						  osc_obd->obd_name);
-+		if (osc_symlink == NULL) {
-+			CERROR("could not register LOV target "
-+			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
-+			       obd->obd_type->typ_name, obd->obd_name,
-+			       osc_obd->obd_name);
-+			lprocfs_remove(&obd->obd_type->typ_procsym);
-                 }
-         }
--#endif
--
-         RETURN(0);
- }
- 
-@@ -247,6 +241,15 @@ static int lov_connect(const struct lu_env *env,
-         if (data)
-                 lov->lov_ocd = *data;
- 
-+	obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
-+						 obd->obd_proc_entry,
-+						 NULL, NULL);
-+	if (IS_ERR(obd->obd_type->typ_procsym)) {
-+		CERROR("%s: could not register /proc/fs/lustre/%s/%s/target_obds.",
-+		       obd->obd_name, obd->obd_type->typ_name, obd->obd_name);
-+		obd->obd_type->typ_procsym = NULL;
-+	}
-+
-         obd_getref(obd);
-         for (i = 0; i < lov->desc.ld_tgt_count; i++) {
-                 tgt = lov->lov_tgts[i];
-@@ -277,7 +280,6 @@ static int lov_connect(const struct lu_env *env,
- 
- static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
- {
--	struct proc_dir_entry *lov_proc_dir;
-         struct lov_obd *lov = &obd->u.lov;
-         struct obd_device *osc_obd;
-         int rc;
-@@ -293,19 +295,19 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
-                 tgt->ltd_exp->exp_obd->obd_inactive = 1;
-         }
- 
--	lov_proc_dir = obd->obd_proc_private;
--	if (lov_proc_dir)
--		lprocfs_remove_proc_entry(osc_obd->obd_name, lov_proc_dir);
-+	if (osc_obd) {
-+		/* Pass it on to our clients.
-+		 * XXX This should be an argument to disconnect,
-+		 * XXX not a back-door flag on the OBD.  Ah well.
-+		 */
-+		osc_obd->obd_force = obd->obd_force;
-+		osc_obd->obd_fail = obd->obd_fail;
-+		osc_obd->obd_no_recov = obd->obd_no_recov;
- 
--        if (osc_obd) {
--                /* Pass it on to our clients.
--                 * XXX This should be an argument to disconnect,
--                 * XXX not a back-door flag on the OBD.  Ah well.
--                 */
--                osc_obd->obd_force = obd->obd_force;
--                osc_obd->obd_fail = obd->obd_fail;
--                osc_obd->obd_no_recov = obd->obd_no_recov;
--        }
-+		if (obd->obd_type->typ_procsym)
-+			lprocfs_remove_proc_entry(osc_obd->obd_name,
-+						  obd->obd_type->typ_procsym);
-+	}
- 
-         obd_register_observer(osc_obd, NULL);
- 
-@@ -350,6 +352,9 @@ static int lov_disconnect(struct obd_export *exp)
-         }
-         obd_putref(obd);
- 
-+	if (obd->obd_type->typ_procsym)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
-+
- out:
-         rc = class_disconnect(exp); /* bz 9811 */
-         RETURN(rc);
-@@ -779,6 +784,9 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- {
- 	struct lov_desc *desc;
- 	struct lov_obd *lov = &obd->u.lov;
-+#ifdef LPROCFS
-+	struct obd_type *type;
-+#endif
- 	int rc;
- 	ENTRY;
- 
-@@ -834,15 +842,41 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- 
- #ifdef LPROCFS
- 	obd->obd_vars = lprocfs_lov_obd_vars;
--	lprocfs_seq_obd_setup(obd);
--	rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd", 0444,
--				&lov_proc_target_fops, obd);
--	if (rc)
--		CWARN("Error adding the target_obd file\n");
-+	/* If this is true then both client (lov) and server
-+	 * (lod) are on the same node. The lod layer if loaded
-+	 * first will register the lov proc directory. In that
-+	 * case obd->obd_type->typ_procroot will be not set.
-+	 * Instead we use type->typ_procsym as the parent. */
-+	type = class_search_type(LUSTRE_LOD_NAME);
-+	if (type != NULL && type->typ_procsym != NULL) {
-+		obd->obd_proc_entry = lprocfs_seq_register(obd->obd_name,
-+							   type->typ_procsym,
-+							   obd->obd_vars, obd);
-+		if (IS_ERR(obd->obd_proc_entry)) {
-+			rc = PTR_ERR(obd->obd_proc_entry);
-+			CERROR("error %d setting up lprocfs for %s\n", rc,
-+			       obd->obd_name);
-+			obd->obd_proc_entry = NULL;
-+		}
-+	} else {
-+		rc = lprocfs_seq_obd_setup(obd);
-+	}
-+
-+	if (rc == 0) {
-+		rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
-+					0444, &lov_proc_target_fops, obd);
-+		if (rc)
-+			CWARN("Error adding the target_obd file\n");
- 
--	lov->lov_pool_proc_entry = lprocfs_seq_register("pools",
-+		lov->lov_pool_proc_entry = lprocfs_seq_register("pools",
- 							obd->obd_proc_entry,
- 							NULL, NULL);
-+		if (IS_ERR(lov->lov_pool_proc_entry)) {
-+			rc = PTR_ERR(lov->lov_pool_proc_entry);
-+			CERROR("error %d setting up lprocfs for pools\n", rc);
-+			lov->lov_pool_proc_entry = NULL;
-+		}
-+	}
- #endif
- 	RETURN(0);
- 
-@@ -2365,8 +2399,10 @@ extern struct lu_kmem_descr lov_caches[];
- 
- int __init lov_init(void)
- {
-+	bool enable_proc = true;
-+	struct obd_type *type;
- 	int rc;
--        ENTRY;
-+	ENTRY;
- 
-         /* print an address of _any_ initialized kernel symbol from this
-          * module, to allow debugging with gdb that doesn't support data
-@@ -2385,11 +2421,15 @@ int __init lov_init(void)
-                 return -ENOMEM;
-         }
- 
--	rc = class_register_type(&lov_obd_ops, NULL, NULL,
-+	type = class_search_type(LUSTRE_LOD_NAME);
-+	if (type != NULL && type->typ_procsym != NULL)
-+		enable_proc = false;
-+
-+	rc = class_register_type(&lov_obd_ops, NULL, enable_proc, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				NULL,
-+				 NULL,
- #endif
--				LUSTRE_LOV_NAME, &lov_device_type);
-+				 LUSTRE_LOV_NAME, &lov_device_type);
- 
-         if (rc) {
- 		kmem_cache_destroy(lov_oinfo_slab);
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index ee3a654..cea78ac 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -3429,11 +3429,11 @@ struct md_ops mdc_md_ops = {
- 
- int __init mdc_init(void)
- {
--	return class_register_type(&mdc_obd_ops, &mdc_md_ops, NULL,
-+	return class_register_type(&mdc_obd_ops, &mdc_md_ops, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					NULL,
-+				   NULL,
- #endif
--					LUSTRE_MDC_NAME, NULL);
-+				   LUSTRE_MDC_NAME, NULL);
- }
- 
- #ifdef __KERNEL__
-diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
-index fe9de80..0fe590e 100644
---- a/lustre/mdd/mdd_device.c
-+++ b/lustre/mdd/mdd_device.c
-@@ -1582,11 +1582,11 @@ static int __init mdd_mod_init(void)
- 	hsm_actions_logops.lop_add = llog_cat_add_rec;
- 	hsm_actions_logops.lop_declare_add = llog_cat_declare_add_rec;
- 
--	rc = class_register_type(&mdd_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				 lvars.module_vars,
- #endif
--				LUSTRE_MDD_NAME, &mdd_device_type);
-+				 LUSTRE_MDD_NAME, &mdd_device_type);
- 	if (rc)
- 		lu_kmem_fini(mdd_caches);
- 	return rc;
-diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 0e1f0f6..69b1c30 100644
---- a/lustre/mdt/mdt_handler.c
-+++ b/lustre/mdt/mdt_handler.c
-@@ -5901,11 +5901,11 @@ static int __init mdt_mod_init(void)
- 		GOTO(lu_fini, rc);
- 
- 	lprocfs_mdt_init_vars(&lvars);
--	rc = class_register_type(&mdt_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&mdt_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				 lvars.module_vars,
- #endif
--				LUSTRE_MDT_NAME, &mdt_device_type);
-+				 LUSTRE_MDT_NAME, &mdt_device_type);
- 	if (rc)
- 		GOTO(mds_fini, rc);
- lu_fini:
-diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c
-index 367f659..390164f 100644
---- a/lustre/mdt/mdt_mds.c
-+++ b/lustre/mdt/mdt_mds.c
-@@ -539,11 +539,11 @@ int mds_mod_init(void)
- 		mds_num_threads = mdt_num_threads;
- 	}
- 
--	return class_register_type(&mds_obd_device_ops, NULL, NULL,
-+	return class_register_type(&mds_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					lprocfs_mds_module_vars,
-+				   lprocfs_mds_module_vars,
- #endif
--					LUSTRE_MDS_NAME, &mds_device_type);
-+				   LUSTRE_MDS_NAME, &mds_device_type);
- }
- 
- void mds_mod_exit(void)
-diff --git a/lustre/mgc/libmgc.c b/lustre/mgc/libmgc.c
-index 49a329a..ec915c7 100644
---- a/lustre/mgc/libmgc.c
-+++ b/lustre/mgc/libmgc.c
-@@ -158,9 +158,9 @@ struct obd_ops mgc_obd_ops = {
- 
- int __init mgc_init(void)
- {
--	return class_register_type(&mgc_obd_ops, NULL, NULL,
-+	return class_register_type(&mgc_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					NULL,
-+				   NULL,
- #endif
--					LUSTRE_MGC_NAME, NULL);
-+				   LUSTRE_MGC_NAME, NULL);
- }
-diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 8935814..7741bbf 100644
---- a/lustre/mgc/mgc_request.c
-+++ b/lustre/mgc/mgc_request.c
-@@ -2022,11 +2022,11 @@ struct obd_ops mgc_obd_ops = {
- 
- int __init mgc_init(void)
- {
--        return class_register_type(&mgc_obd_ops, NULL, NULL,
-+	return class_register_type(&mgc_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					NULL,
-+				   NULL,
- #endif
--					LUSTRE_MGC_NAME, NULL);
-+				   LUSTRE_MGC_NAME, NULL);
- }
- 
- #ifdef __KERNEL__
-diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
-index 8961fc3..85b219c 100644
---- a/lustre/mgs/mgs_handler.c
-+++ b/lustre/mgs/mgs_handler.c
-@@ -1516,11 +1516,11 @@ static int __init mgs_init(void)
- 	struct lprocfs_static_vars lvars;
- 
- 	lprocfs_mgs_init_vars(&lvars);
--	return class_register_type(&mgs_obd_device_ops, NULL, NULL,
-+	return class_register_type(&mgs_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					lvars.module_vars,
-+				   lvars.module_vars,
- #endif
--					LUSTRE_MGS_NAME, &mgs_device_type);
-+				   LUSTRE_MGS_NAME, &mgs_device_type);
- }
- 
- static void /*__exit*/ mgs_exit(void)
-diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index bf8b6ce..98dbcce 100644
---- a/lustre/obdclass/genops.c
-+++ b/lustre/obdclass/genops.c
-@@ -162,7 +162,7 @@ EXPORT_SYMBOL(class_put_type);
- #define CLASS_MAX_NAME 1024
- 
- int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
--			struct lprocfs_seq_vars *module_vars,
-+			bool enable_proc, struct lprocfs_seq_vars *module_vars,
- #ifndef HAVE_ONLY_PROCFS_SEQ
- 			struct lprocfs_vars *vars,
- #endif
-@@ -202,22 +202,24 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
- 	spin_lock_init(&type->obd_type_lock);
- 
- #ifdef LPROCFS
-+	if (enable_proc) {
- #ifndef HAVE_ONLY_PROCFS_SEQ
--	if (vars) {
--		type->typ_procroot = lprocfs_register(type->typ_name,
--							proc_lustre_root,
--							vars, type);
--	} else
-+		if (vars) {
-+			type->typ_procroot = lprocfs_register(type->typ_name,
-+							      proc_lustre_root,
-+							      vars, type);
-+		} else
- #endif
--	{
--		type->typ_procroot = lprocfs_seq_register(type->typ_name,
--							proc_lustre_root,
--							module_vars, type);
--	}
--	if (IS_ERR(type->typ_procroot)) {
--		rc = PTR_ERR(type->typ_procroot);
--		type->typ_procroot = NULL;
--		GOTO (failed, rc);
-+		{
-+			type->typ_procroot = lprocfs_seq_register(type->typ_name,
-+								  proc_lustre_root,
-+								  module_vars, type);
-+		}
-+		if (IS_ERR(type->typ_procroot)) {
-+			rc = PTR_ERR(type->typ_procroot);
-+			type->typ_procroot = NULL;
-+			GOTO(failed, rc);
-+		}
- 	}
- #endif
-         if (ldt != NULL) {
-@@ -233,18 +235,20 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
- 
-         RETURN (0);
- 
-- failed:
--#ifdef LPROCFS
-+failed:
- 	if (type->typ_name != NULL) {
-+#ifdef LPROCFS
-+		if (type->typ_procroot != NULL) {
- #ifndef HAVE_ONLY_PROCFS_SEQ
--		lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
-+			lprocfs_try_remove_proc_entry(type->typ_name,
-+						      proc_lustre_root);
- #else
--		remove_proc_subtree(type->typ_name, proc_lustre_root);
-+			remove_proc_subtree(type->typ_name, proc_lustre_root);
- #endif
--	}
-+		}
- #endif
--        if (type->typ_name != NULL)
-                 OBD_FREE(type->typ_name, strlen(name) + 1);
-+	}
-         if (type->typ_md_ops != NULL)
-                 OBD_FREE_PTR(type->typ_md_ops);
-         if (type->typ_dt_ops != NULL)
-@@ -278,11 +282,16 @@ int class_unregister_type(const char *name)
- 	 * we can't reference pointer as it can get invalided when another
- 	 * module removes the entry */
- #ifdef LPROCFS
-+	if (type->typ_procroot != NULL) {
- #ifndef HAVE_ONLY_PROCFS_SEQ
--	lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
-+		lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
- #else
--	remove_proc_subtree(type->typ_name, proc_lustre_root);
-+		remove_proc_subtree(type->typ_name, proc_lustre_root);
- #endif
-+	}
-+
-+	if (type->typ_procsym != NULL)
-+		lprocfs_remove(&type->typ_procsym);
- #endif
-         if (type->typ_lu)
-                 lu_device_type_fini(type->typ_lu);
-diff --git a/lustre/obdclass/llog_test.c b/lustre/obdclass/llog_test.c
-index a1051c2..18d5843 100644
---- a/lustre/obdclass/llog_test.c
-+++ b/lustre/obdclass/llog_test.c
-@@ -1261,11 +1261,11 @@ static struct obd_ops llog_obd_ops = {
- 
- static int __init llog_test_init(void)
- {
--	return class_register_type(&llog_obd_ops, NULL, NULL,
-+	return class_register_type(&llog_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					NULL,
-+				   NULL,
- #endif
--					"llog_test", NULL);
-+				   "llog_test", NULL);
- }
- 
- static void __exit llog_test_exit(void)
-diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 9956ada..30d9f59 100644
---- a/lustre/obdclass/lprocfs_status.c
-+++ b/lustre/obdclass/lprocfs_status.c
-@@ -1936,7 +1936,6 @@ lprocfs_seq_obd_setup(struct obd_device *obd)
- 	int rc = 0;
- 
- 	LASSERT(obd != NULL);
--	LASSERT(obd->obd_vars != NULL);
- 	LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
- 	LASSERT(obd->obd_type->typ_procroot != NULL);
- 
-diff --git a/lustre/obdecho/echo_client.c b/lustre/obdecho/echo_client.c
-index 38cff00..632bf52 100644
---- a/lustre/obdecho/echo_client.c
-+++ b/lustre/obdecho/echo_client.c
-@@ -3169,12 +3169,12 @@ int echo_client_init(void)
- 
- 	rc = lu_kmem_init(echo_caches);
- 	if (rc == 0) {
--		rc = class_register_type(&echo_client_obd_ops, NULL, NULL,
-+		rc = class_register_type(&echo_client_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					NULL,
-+					 NULL,
- #endif
--					LUSTRE_ECHO_CLIENT_NAME,
--					&echo_device_type);
-+					 LUSTRE_ECHO_CLIENT_NAME,
-+					 &echo_device_type);
- 		if (rc)
- 			lu_kmem_fini(echo_caches);
- 	}
-@@ -3202,7 +3202,7 @@ static int __init obdecho_init(void)
-         if (rc != 0)
-                 goto failed_0;
- 
--	rc = class_register_type(&echo_obd_ops, NULL, NULL,
-+	rc = class_register_type(&echo_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
- 				NULL,
- #endif
-diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 4cafa48..5d7f0b4 100644
---- a/lustre/ofd/ofd_dev.c
-+++ b/lustre/ofd/ofd_dev.c
-@@ -2394,11 +2394,11 @@ int __init ofd_init(void)
- 
- 	lprocfs_ofd_init_vars(&lvars);
- 
--	rc = class_register_type(&ofd_obd_ops, NULL, NULL,
-+	rc = class_register_type(&ofd_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				 lvars.module_vars,
- #endif
--				LUSTRE_OST_NAME, &ofd_device_type);
-+				 LUSTRE_OST_NAME, &ofd_device_type);
- 	return rc;
- }
- 
-diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c
-index 2b60765..076dcf6 100644
---- a/lustre/osc/osc_request.c
-+++ b/lustre/osc/osc_request.c
-@@ -3091,9 +3091,10 @@ static int brw_queue_work(const struct lu_env *env, void *data)
- 
- int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- {
--	struct client_obd          *cli = &obd->u.cli;
--	void                       *handler;
--	int                        rc;
-+	struct client_obd *cli = &obd->u.cli;
-+	struct obd_type	  *type;
-+	void		  *handler;
-+	int		   rc;
- 	ENTRY;
- 
- 	rc = ptlrpcd_addref();
-@@ -3119,10 +3120,32 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- 		GOTO(out_ptlrpcd_work, rc);
- 
- 	cli->cl_grant_shrink_interval = GRANT_SHRINK_INTERVAL;
-+
- #ifdef LPROCFS
- 	obd->obd_vars = lprocfs_osc_obd_vars;
- #endif
--	if (lprocfs_seq_obd_setup(obd) == 0) {
-+	/* If this is true then both client (osc) and server (osp) are on the
-+	 * same node. The osp layer if loaded first will register the osc proc
-+	 * directory. In that case this obd_device will be attached its proc
-+	 * tree to type->typ_procsym instead of obd->obd_type->typ_procroot. */
-+	type = class_search_type(LUSTRE_OSP_NAME);
-+	if (type && type->typ_procsym) {
-+		obd->obd_proc_entry = lprocfs_seq_register(obd->obd_name,
-+							   type->typ_procsym,
-+							   obd->obd_vars, obd);
-+		if (IS_ERR(obd->obd_proc_entry)) {
-+			rc = PTR_ERR(obd->obd_proc_entry);
-+			CERROR("error %d setting up lprocfs for %s\n", rc,
-+			       obd->obd_name);
-+			obd->obd_proc_entry = NULL;
-+		}
-+	} else {
-+		rc = lprocfs_seq_obd_setup(obd);
-+	}
-+
-+	/* If the basic OSC proc tree construction succeeded then
-+	 * lets do the rest. */
-+	if (rc == 0) {
- 		lproc_osc_attach_seqstat(obd);
- 		sptlrpc_lprocfs_cliobd_attach(obd);
- 		ptlrpc_lprocfs_register_obd(obd);
-@@ -3140,7 +3163,7 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- 
- 	CFS_INIT_LIST_HEAD(&cli->cl_grant_shrink_list);
- 	ns_register_cancel(obd->obd_namespace, osc_cancel_weight);
--	RETURN(rc);
-+	RETURN(0);
- 
- out_ptlrpcd_work:
- 	if (cli->cl_writeback_work != NULL) {
-@@ -3282,8 +3305,10 @@ extern struct lock_class_key osc_ast_guard_class;
- 
- int __init osc_init(void)
- {
--        int rc;
--        ENTRY;
-+	bool enable_proc = true;
-+	struct obd_type *type;
-+	int rc;
-+	ENTRY;
- 
-         /* print an address of _any_ initialized kernel symbol from this
-          * module, to allow debugging with gdb that doesn't support data
-@@ -3294,11 +3319,15 @@ int __init osc_init(void)
- 	if (rc)
- 		RETURN(rc);
- 
--	rc = class_register_type(&osc_obd_ops, NULL, NULL,
-+	type = class_search_type(LUSTRE_OSP_NAME);
-+	if (type != NULL && type->typ_procsym != NULL)
-+		enable_proc = false;
-+
-+	rc = class_register_type(&osc_obd_ops, NULL, enable_proc, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				NULL,
-+				 NULL,
- #endif
--				LUSTRE_OSC_NAME, &osc_device_type);
-+				 LUSTRE_OSC_NAME, &osc_device_type);
-         if (rc) {
-                 lu_kmem_fini(osc_caches);
-                 RETURN(rc);
-diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index 7461f9d..e0da7e6 100644
---- a/lustre/osd-ldiskfs/osd_handler.c
-+++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -6019,11 +6019,11 @@ static int __init osd_mod_init(void)
- 	if (rc)
- 		return rc;
- 
--	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lprocfs_osd_module_vars,
-+				 lprocfs_osd_module_vars,
- #endif
--				LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
-+				 LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
- 	if (rc)
- 		lu_kmem_fini(ldiskfs_caches);
- 	return rc;
-diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 1025be9..47bbc76 100644
---- a/lustre/osd-zfs/osd_handler.c
-+++ b/lustre/osd-zfs/osd_handler.c
-@@ -912,11 +912,11 @@ int __init osd_init(void)
- 	if (rc)
- 		return rc;
- 
--	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lprocfs_osd_module_vars,
-+				 lprocfs_osd_module_vars,
- #endif
--				LUSTRE_OSD_ZFS_NAME, &osd_device_type);
-+				 LUSTRE_OSD_ZFS_NAME, &osd_device_type);
- 	if (rc)
- 		lu_kmem_fini(osd_caches);
- 	return rc;
-diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
-index 550ba5e..60bf8ef 100644
---- a/lustre/osp/osp_dev.c
-+++ b/lustre/osp/osp_dev.c
-@@ -1239,7 +1239,7 @@ struct llog_operations osp_mds_ost_orig_logops;
- static int __init osp_mod_init(void)
- {
- 	struct lprocfs_static_vars	 lvars;
--	cfs_proc_dir_entry_t		*osc_proc_dir;
-+	struct obd_type *type;
- 	int				 rc;
- 
- 	rc = lu_kmem_init(osp_caches);
-@@ -1248,11 +1248,11 @@ static int __init osp_mod_init(void)
- 
- 	lprocfs_osp_init_vars(&lvars);
- 
--	rc = class_register_type(&osp_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&osp_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				 lvars.module_vars,
- #endif
--				LUSTRE_OSP_NAME, &osp_device_type);
-+				 LUSTRE_OSP_NAME, &osp_device_type);
- 
- 	/* create "osc" entry in procfs for compatibility purposes */
- 	if (rc != 0) {
-@@ -1262,11 +1262,11 @@ static int __init osp_mod_init(void)
- 
- 	lprocfs_lwp_init_vars(&lvars);
- 
--	rc = class_register_type(&lwp_obd_device_ops, NULL, NULL,
-+	rc = class_register_type(&lwp_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				 lvars.module_vars,
- #endif
--				LUSTRE_LWP_NAME, &lwp_device_type);
-+				 LUSTRE_LWP_NAME, &lwp_device_type);
- 	if (rc != 0) {
- 		class_unregister_type(LUSTRE_OSP_NAME);
- 		lu_kmem_fini(osp_caches);
-@@ -1278,14 +1278,17 @@ static int __init osp_mod_init(void)
- 	osp_mds_ost_orig_logops.lop_add = llog_cat_add_rec;
- 	osp_mds_ost_orig_logops.lop_declare_add = llog_cat_declare_add_rec;
- 
--	osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
--	if (osc_proc_dir == NULL) {
--		osc_proc_dir = lprocfs_register("osc", proc_lustre_root, NULL,
--						NULL);
--		if (IS_ERR(osc_proc_dir))
--			CERROR("osp: can't create compat entry \"osc\": %d\n",
--			       (int) PTR_ERR(osc_proc_dir));
--	}
-+	/* create "osc" entry in procfs for compatibility purposes */
-+	type = class_search_type(LUSTRE_OSC_NAME);
-+	if (type != NULL && type->typ_procroot != NULL)
-+		return rc;
-+
-+	type = class_search_type(LUSTRE_OSP_NAME);
-+	type->typ_procsym = lprocfs_register("osc", proc_lustre_root,
-+					     NULL, NULL);
-+	if (IS_ERR(type->typ_procsym))
-+		CERROR("osp: can't create compat entry \"osc\": %d\n",
-+		       (int) PTR_ERR(type->typ_procsym));
- 	return rc;
- }
- 
-diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
-index f7448d4..d8897cc 100644
---- a/lustre/ost/ost_handler.c
-+++ b/lustre/ost/ost_handler.c
-@@ -470,11 +470,11 @@ static int __init ost_init(void)
- 
- 	ENTRY;
- 
--	rc = class_register_type(&ost_obd_ops, NULL, NULL,
-+	rc = class_register_type(&ost_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				NULL,
-+				 NULL,
- #endif
--				LUSTRE_OSS_NAME, NULL);
-+				 LUSTRE_OSS_NAME, NULL);
- 
-         if (ost_num_threads != 0 && oss_num_threads == 0) {
-                 LCONSOLE_INFO("ost_num_threads module parameter is deprecated, "
-diff --git a/lustre/quota/qmt_dev.c b/lustre/quota/qmt_dev.c
-index 02ec55b..28783a0 100644
---- a/lustre/quota/qmt_dev.c
-+++ b/lustre/quota/qmt_dev.c
-@@ -466,11 +466,11 @@ int qmt_glb_init(void)
- 	int rc;
- 	ENTRY;
- 
--	rc = class_register_type(&qmt_obd_ops, NULL, NULL,
-+	rc = class_register_type(&qmt_obd_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				NULL,
-+				 NULL,
- #endif
--				LUSTRE_QMT_NAME, &qmt_device_type);
-+				 LUSTRE_QMT_NAME, &qmt_device_type);
- 	RETURN(rc);
- }
- 
--- 
-1.9.1
-

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
similarity index 95%
rename from sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index 90f1770..7a8299b 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From abe827ebe8722336c55affd8388dacfbb38b49f1 Mon Sep 17 00:00:00 2001
+From 2c8c53a01d77519c8de108bbe69734e5931f41d8 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 18 Feb 2014 18:44:22 -0500
-Subject: [PATCH 03/10] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 2/7] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 
@@ -14,10 +14,10 @@ Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
  3 files changed, 60 insertions(+), 46 deletions(-)
 
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 47bbc76..05820e0 100644
+index 0dc8c2e..29a3617 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -761,12 +761,13 @@ static int osd_process_config(const struct lu_env *env,
+@@ -767,12 +767,13 @@ static int osd_process_config(const struct lu_env *env,
  		break;
  	case LCFG_PARAM: {
  		LASSERT(&o->od_dt_dev);
@@ -36,7 +36,7 @@ index 47bbc76..05820e0 100644
  		break;
  	}
  	default:
-@@ -914,7 +915,7 @@ int __init osd_init(void)
+@@ -920,7 +921,7 @@ int __init osd_init(void)
  
  	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
@@ -46,10 +46,10 @@ index 47bbc76..05820e0 100644
  				 LUSTRE_OSD_ZFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h
-index bc51cb1..3dc4881 100644
+index 63f680c..740dba7 100644
 --- a/lustre/osd-zfs/osd_internal.h
 +++ b/lustre/osd-zfs/osd_internal.h
-@@ -402,8 +402,7 @@ enum {
+@@ -420,8 +420,7 @@ enum {
  };
  
  /* osd_lproc.c */

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
similarity index 99%
rename from sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 5b94e9a..1dcde79 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From ab793e8472447314f6428025175f80afc26339ac Mon Sep 17 00:00:00 2001
+From 9028aafc0c8651d6a840d9066ca7d950106fbdc5 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 19:59:18 -0400
-Subject: [PATCH 05/10] LU-3319 procfs: move osp proc handling to seq_files
+Subject: [PATCH 3/7] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
similarity index 98%
rename from sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index 67c955b..9b9e0ae 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 1394aacb441c3ba07b24a4b465f2496af8eb3c73 Mon Sep 17 00:00:00 2001
+From d13a2c80d2a861b1c9fe98e5db3ae1af06a1103a Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 19:57:44 -0400
-Subject: [PATCH 06/10] LU-3319 procfs: move lod proc handling to seq_files
+Subject: [PATCH 4/7] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the lod
@@ -17,7 +17,7 @@ Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
  4 files changed, 157 insertions(+), 141 deletions(-)
 
 diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
-index a653d6a..1baeb37 100644
+index 8a6743d..e63c6ed 100644
 --- a/lustre/lod/lod_dev.c
 +++ b/lustre/lod/lod_dev.c
 @@ -289,12 +289,10 @@ static int lod_process_config(const struct lu_env *env,
@@ -94,7 +94,7 @@ index c3b1bc3..fc18f3d 100644
  void lod_procfs_fini(struct lod_device *lod);
  
 diff --git a/lustre/lod/lod_pool.c b/lustre/lod/lod_pool.c
-index 98b2416..1849e5d 100644
+index 149507f..810e1aa 100644
 --- a/lustre/lod/lod_pool.c
 +++ b/lustre/lod/lod_pool.c
 @@ -283,7 +283,7 @@ static int pool_proc_open(struct inode *inode, struct file *file)

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
deleted file mode 100644
index c5712a1..0000000
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ /dev/null
@@ -1,356 +0,0 @@
-From 00e2e7c431e38433b919735890481e4bb5707cd4 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 4 Mar 2014 10:45:30 -0500
-Subject: [PATCH 04/10] LU-3319 procfs: move mgs proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the mgs
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I1a12dd9b1fc8f139116a8f3a684956a5ba88f055
----
- lustre/mgs/lproc_mgs.c    | 202 +++++++++++++++++++++++-----------------------
- lustre/mgs/mgs_handler.c  |   5 +-
- lustre/mgs/mgs_internal.h |  13 +--
- lustre/mgs/mgs_nids.c     |  11 ++-
- 4 files changed, 110 insertions(+), 121 deletions(-)
-
-diff --git a/lustre/mgs/lproc_mgs.c b/lustre/mgs/lproc_mgs.c
-index ffa2d0d..f0ea956 100644
---- a/lustre/mgs/lproc_mgs.c
-+++ b/lustre/mgs/lproc_mgs.c
-@@ -126,19 +126,110 @@ static int mgsself_srpc_seq_show(struct seq_file *seq, void *v)
- 
-         return 0;
- }
--
- LPROC_SEQ_FOPS_RO(mgsself_srpc);
- 
-+static int mgs_live_seq_show(struct seq_file *seq, void *v)
-+{
-+	struct fs_db             *fsdb = seq->private;
-+	struct mgs_tgt_srpc_conf *srpc_tgt;
-+	int i;
-+
-+	mutex_lock(&fsdb->fsdb_mutex);
-+
-+	seq_printf(seq, "fsname: %s\n", fsdb->fsdb_name);
-+	seq_printf(seq, "flags: %#lx     gen: %d\n",
-+		   fsdb->fsdb_flags, fsdb->fsdb_gen);
-+	for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
-+		if (test_bit(i, fsdb->fsdb_mdt_index_map))
-+			 seq_printf(seq, "%s-MDT%04x\n", fsdb->fsdb_name, i);
-+	for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
-+		if (test_bit(i, fsdb->fsdb_ost_index_map))
-+			 seq_printf(seq, "%s-OST%04x\n", fsdb->fsdb_name, i);
-+
-+	seq_printf(seq, "\nSecure RPC Config Rules:\n");
-+#if 0
-+	seq_printf(seq, "%s.%s=%s\n", fsdb->fsdb_name,
-+		   PARAM_SRPC_UDESC, fsdb->fsdb_srpc_fl_udesc ? "yes" : "no");
-+#endif
-+	for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt;
-+	     srpc_tgt = srpc_tgt->mtsc_next) {
-+		seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt,
-+				    &srpc_tgt->mtsc_rset);
-+	}
-+	seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
-+
-+	lprocfs_rd_ir_state(seq, fsdb);
-+
-+	mutex_unlock(&fsdb->fsdb_mutex);
-+	return 0;
-+}
-+
-+static ssize_t mgs_live_seq_write(struct file *file, const char *buf,
-+				  size_t len, loff_t *off)
-+{
-+	struct seq_file *seq  = file->private_data;
-+	struct fs_db    *fsdb = seq->private;
-+	ssize_t rc;
-+
-+	rc = lprocfs_wr_ir_state(file, buf, len, fsdb);
-+	if (rc >= 0)
-+		rc = len;
-+	return rc;
-+}
-+LPROC_SEQ_FOPS(mgs_live);
-+
-+int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
-+{
-+	int rc;
-+
-+	if (!mgs->mgs_proc_live)
-+		return 0;
-+	rc = lprocfs_seq_create(mgs->mgs_proc_live, fsdb->fsdb_name, 0644,
-+				&mgs_live_fops, fsdb);
-+
-+	return 0;
-+}
-+
-+int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
-+{
-+	if (!mgs->mgs_proc_live)
-+		return 0;
-+
-+	/* didn't create the proc file for MGSSELF_NAME */
-+	if (!test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags))
-+		lprocfs_remove_proc_entry(fsdb->fsdb_name, mgs->mgs_proc_live);
-+	return 0;
-+}
-+
-+LPROC_SEQ_FOPS_RO_TYPE(mgs, uuid);
-+LPROC_SEQ_FOPS_RO_TYPE(mgs, num_exports);
-+LPROC_SEQ_FOPS_RO_TYPE(mgs, hash);
-+LPROC_SEQ_FOPS_WO_TYPE(mgs, evict_client);
-+LPROC_SEQ_FOPS_RW_TYPE(mgs, ir_timeout);
-+
-+struct lprocfs_seq_vars lprocfs_mgs_obd_vars[] = {
-+	{ .name	=	"uuid",
-+	  .fops	=	&mgs_uuid_fops		},
-+	{ .name	=	"num_exports",
-+	  .fops	=	&mgs_num_exports_fops	},
-+	{ .name	=	"hash_stats",
-+	  .fops	=	&mgs_hash_fops		},
-+	{ .name	=	"evict_client",
-+	  .fops	=	&mgs_evict_client_fops	},
-+	{ .name	=	"ir_timeout",
-+	  .fops	=	&mgs_ir_timeout_fops	},
-+	{ 0 }
-+};
-+
- int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
- {
- 	struct obd_device *obd = mgs->mgs_obd;
- 	struct obd_device *osd_obd = mgs->mgs_bottom->dd_lu_dev.ld_obd;
- 	int		   osd_len = strlen(osd_name) - strlen("-osd");
- 	int		   rc;
--	struct lprocfs_static_vars lvars;
- 
--	lprocfs_mgs_init_vars(&lvars);
--	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
-+	obd->obd_vars = lprocfs_mgs_obd_vars;
-+	rc = lprocfs_seq_obd_setup(obd);
- 	if (rc != 0)
- 		GOTO(out, rc);
- 
-@@ -152,17 +243,17 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
- 	if (rc != 0)
- 		GOTO(out, rc);
- 
--        mgs->mgs_proc_live = lprocfs_register("live", obd->obd_proc_entry,
--                                              NULL, NULL);
-+	mgs->mgs_proc_live = lprocfs_seq_register("live", obd->obd_proc_entry,
-+						  NULL, NULL);
-         if (IS_ERR(mgs->mgs_proc_live)) {
-                 rc = PTR_ERR(mgs->mgs_proc_live);
-                 mgs->mgs_proc_live = NULL;
- 		GOTO(out, rc);
-         }
- 
--        obd->obd_proc_exports_entry = lprocfs_register("exports",
--                                                       obd->obd_proc_entry,
--                                                       NULL, NULL);
-+	obd->obd_proc_exports_entry = lprocfs_seq_register("exports",
-+							   obd->obd_proc_entry,
-+							   NULL, NULL);
-         if (IS_ERR(obd->obd_proc_exports_entry)) {
-                 rc = PTR_ERR(obd->obd_proc_exports_entry);
-                 obd->obd_proc_exports_entry = NULL;
-@@ -215,7 +306,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
- 
- 	if (mgs->mgs_proc_live != NULL) {
- 		/* Should be no live entries */
--		LASSERT(mgs->mgs_proc_live->subdir == NULL);
- 		lprocfs_remove(&mgs->mgs_proc_live);
- 		mgs->mgs_proc_live = NULL;
- 	}
-@@ -226,92 +316,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
-         lprocfs_free_md_stats(obd);
- }
- 
--static int mgs_live_seq_show(struct seq_file *seq, void *v)
--{
--        struct fs_db             *fsdb = seq->private;
--        struct mgs_tgt_srpc_conf *srpc_tgt;
--        int i;
--
--	mutex_lock(&fsdb->fsdb_mutex);
--
--        seq_printf(seq, "fsname: %s\n", fsdb->fsdb_name);
--        seq_printf(seq, "flags: %#lx     gen: %d\n",
--                   fsdb->fsdb_flags, fsdb->fsdb_gen);
--        for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
--		if (test_bit(i, fsdb->fsdb_mdt_index_map))
--                         seq_printf(seq, "%s-MDT%04x\n", fsdb->fsdb_name, i);
--        for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
--		if (test_bit(i, fsdb->fsdb_ost_index_map))
--                         seq_printf(seq, "%s-OST%04x\n", fsdb->fsdb_name, i);
--
--        seq_printf(seq, "\nSecure RPC Config Rules:\n");
--#if 0
--        seq_printf(seq, "%s.%s=%s\n", fsdb->fsdb_name,
--                   PARAM_SRPC_UDESC, fsdb->fsdb_srpc_fl_udesc ? "yes" : "no");
--#endif
--        for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt;
--             srpc_tgt = srpc_tgt->mtsc_next) {
--                seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt,
--                                    &srpc_tgt->mtsc_rset);
--        }
--        seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
--
--        lprocfs_rd_ir_state(seq, fsdb);
--
--	mutex_unlock(&fsdb->fsdb_mutex);
--        return 0;
--}
--
--static ssize_t mgs_live_seq_write(struct file *file, const char *buf,
--                                  size_t len, loff_t *off)
--{
--        struct seq_file *seq  = file->private_data;
--        struct fs_db    *fsdb = seq->private;
--        ssize_t rc;
--
--        rc = lprocfs_wr_ir_state(file, buf, len, fsdb);
--        if (rc >= 0)
--                rc = len;
--        return rc;
--}
--LPROC_SEQ_FOPS(mgs_live);
--
--int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
--{
--        int rc;
--
--        if (!mgs->mgs_proc_live)
--                return 0;
--	rc = lprocfs_seq_create(mgs->mgs_proc_live, fsdb->fsdb_name, 0644,
--				&mgs_live_fops, fsdb);
--
--        return 0;
--}
--
--int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
--{
--        if (!mgs->mgs_proc_live)
--                return 0;
--
--	/* didn't create the proc file for MGSSELF_NAME */
--	if (!test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags))
--		lprocfs_remove_proc_entry(fsdb->fsdb_name, mgs->mgs_proc_live);
--        return 0;
--}
--
--struct lprocfs_vars lprocfs_mgs_obd_vars[] = {
--        { "uuid",            lprocfs_rd_uuid,        0, 0 },
--        { "num_exports",     lprocfs_rd_num_exports, 0, 0 },
--        { "hash_stats",      lprocfs_obd_rd_hash,    0, 0 },
--        { "evict_client",    0, lprocfs_wr_evict_client, 0 },
--        { "ir_timeout",      lprocfs_rd_ir_timeout, lprocfs_wr_ir_timeout, 0 },
--        { 0 }
--};
--
--struct lprocfs_vars lprocfs_mgs_module_vars[] = {
--        { 0 }
--};
--
- void mgs_counter_incr(struct obd_export *exp, int opcode)
- {
-         lprocfs_counter_incr(exp->exp_obd->obd_stats, opcode);
-@@ -329,10 +333,4 @@ void mgs_stats_counter_init(struct lprocfs_stats *stats)
-         lprocfs_counter_init(stats, LPROC_MGS_TARGET_REG, 0, "tgtreg", "reqs");
-         lprocfs_counter_init(stats, LPROC_MGS_TARGET_DEL, 0, "tgtdel", "reqs");
- }
--
--void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars)
--{
--    lvars->module_vars  = lprocfs_mgs_module_vars;
--    lvars->obd_vars     = lprocfs_mgs_obd_vars;
--}
- #endif
-diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
-index 85b219c..a9b0857 100644
---- a/lustre/mgs/mgs_handler.c
-+++ b/lustre/mgs/mgs_handler.c
-@@ -1513,12 +1513,9 @@ static struct obd_ops mgs_obd_device_ops = {
- 
- static int __init mgs_init(void)
- {
--	struct lprocfs_static_vars lvars;
--
--	lprocfs_mgs_init_vars(&lvars);
- 	return class_register_type(&mgs_obd_device_ops, NULL, true, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				   lvars.module_vars,
-+				   NULL,
- #endif
- 				   LUSTRE_MGS_NAME, &mgs_device_type);
- }
-diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h
-index ca2846e..d3baacd 100644
---- a/lustre/mgs/mgs_internal.h
-+++ b/lustre/mgs/mgs_internal.h
-@@ -229,10 +229,10 @@ int  mgs_get_ir_logs(struct ptlrpc_request *req);
- int  lprocfs_wr_ir_state(struct file *file, const char *buffer,
-                            unsigned long count, void *data);
- int  lprocfs_rd_ir_state(struct seq_file *seq, void *data);
--int  lprocfs_wr_ir_timeout(struct file *file, const char *buffer,
--                           unsigned long count, void *data);
--int  lprocfs_rd_ir_timeout(char *page, char **start, off_t off, int count,
--                           int *eof, void *data);
-+ssize_t
-+lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer,
-+			     size_t count, loff_t *off);
-+int  lprocfs_ir_timeout_seq_show(struct seq_file *seq, void *data);
- void mgs_fsc_cleanup(struct obd_export *exp);
- void mgs_fsc_cleanup_by_fsdb(struct fs_db *fsdb);
- int  mgs_fsc_attach(const struct lu_env *env, struct obd_export *exp,
-@@ -250,7 +250,6 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name);
- void lproc_mgs_cleanup(struct mgs_device *mgs);
- int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb);
- int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb);
--void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars);
- #else
- static inline int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
- {return 0;}
-@@ -260,10 +259,6 @@ static inline int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
- {return 0;}
- static inline int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
- {return 0;}
--static void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars)
--{
--        memset(lvars, 0, sizeof(*lvars));
--}
- #endif
- 
- /* mgs/lproc_mgs.c */
-diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
-index 24c9d22..a4d8800 100644
---- a/lustre/mgs/mgs_nids.c
-+++ b/lustre/mgs/mgs_nids.c
-@@ -838,15 +838,14 @@ int lprocfs_rd_ir_state(struct seq_file *seq, void *data)
-         return 0;
- }
- 
--int lprocfs_rd_ir_timeout(char *page, char **start, off_t off, int count,
--                          int *eof, void *data)
-+int lprocfs_ir_timeout_seq_show(struct seq_file *m, void *data)
- {
--        *eof = 1;
--        return snprintf(page, count, "%d\n", ir_timeout);
-+	return lprocfs_uint_seq_show(m, &ir_timeout);
- }
- 
--int lprocfs_wr_ir_timeout(struct file *file, const char *buffer,
--                          unsigned long count, void *data)
-+ssize_t
-+lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer,
-+			     size_t count, loff_t *off)
- {
-         return lprocfs_wr_uint(file, buffer, count, &ir_timeout);
- }
--- 
-1.9.1
-

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
similarity index 98%
rename from sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index 2205759..6291914 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 039e3e44e07b59923d94bea976173d9e3cbd0ba9 Mon Sep 17 00:00:00 2001
+From dfc3f832947083639506d38c032e8b237198fee2 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Mar 2014 11:10:33 -0400
-Subject: [PATCH 07/10] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Subject: [PATCH 5/7] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds
@@ -470,10 +470,10 @@ index a9ee560..062f6cc 100644
  	{ 0 }
  };
 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 69b1c30..8b4634f 100644
+index 329c5fc..3f46d6e 100644
 --- a/lustre/mdt/mdt_handler.c
 +++ b/lustre/mdt/mdt_handler.c
-@@ -4644,7 +4644,6 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4672,7 +4672,6 @@ static int mdt_process_config(const struct lu_env *env,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -481,7 +481,7 @@ index 69b1c30..8b4634f 100644
  		struct obd_device	   *obd = d->ld_obd;
  
  		/* For interoperability */
-@@ -4679,14 +4678,13 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4707,14 +4706,13 @@ static int mdt_process_config(const struct lu_env *env,
  			}
  		}
  
@@ -501,7 +501,7 @@ index 69b1c30..8b4634f 100644
  			if (rc > 0 || rc == -ENOSYS)
  				/* we don't understand; pass it on */
  				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5885,7 +5883,6 @@ static struct lu_device_type mdt_device_type = {
+@@ -5913,7 +5911,6 @@ static struct lu_device_type mdt_device_type = {
  
  static int __init mdt_mod_init(void)
  {
@@ -509,7 +509,7 @@ index 69b1c30..8b4634f 100644
  	int rc;
  
  	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5900,10 +5897,9 @@ static int __init mdt_mod_init(void)
+@@ -5928,10 +5925,9 @@ static int __init mdt_mod_init(void)
  	if (rc)
  		GOTO(lu_fini, rc);
  
@@ -587,10 +587,10 @@ index 1300861..3125dcc 100644
  	RETURN(rc);
  }
 diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
-index 7970b86..8fb96c8 100644
+index 5b8cea1..cb52ef4 100644
 --- a/lustre/mdt/mdt_internal.h
 +++ b/lustre/mdt/mdt_internal.h
-@@ -785,9 +785,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
+@@ -759,9 +759,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
  void mdt_thread_info_fini(struct mdt_thread_info *mti);
  struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
  
@@ -600,7 +600,7 @@ index 7970b86..8fb96c8 100644
  int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
  		     const struct md_hsm *mh);
  
-@@ -925,13 +922,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
+@@ -899,13 +896,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
  int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
  
  /* coordinator control /proc interface */
@@ -618,7 +618,7 @@ index 7970b86..8fb96c8 100644
  /* md_hsm helpers */
  struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
  				      const struct lu_fid *fid,
-@@ -1071,8 +1067,6 @@ enum {
+@@ -1045,8 +1041,6 @@ enum {
  };
  void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
  void mdt_stats_counter_init(struct lprocfs_stats *stats);

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 95%
rename from sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 37dd14c..296c476 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From c6c3f4063e244cea365940adc0fd1a1c35d0b525 Mon Sep 17 00:00:00 2001
+From aaafceb14e7eaa2a8171dc99172d20311fd05db2 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 20:01:52 -0400
-Subject: [PATCH 08/10] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 6/7] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd
@@ -9,10 +9,11 @@ layer proc entries over to using seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
  lustre/include/lustre_lfsck.h    |   6 +-
  lustre/lfsck/lfsck_internal.h    |   9 +-
- lustre/lfsck/lfsck_layout.c      | 104 +++------
+ lustre/lfsck/lfsck_layout.c      |  69 ++----
  lustre/lfsck/lfsck_lib.c         |  88 +++-----
  lustre/lfsck/lfsck_namespace.c   |  75 ++-----
  lustre/mdd/mdd_device.c          |  25 +--
@@ -24,7 +25,7 @@ Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
  lustre/ofd/ofd_internal.h        |   6 +-
  lustre/osd-ldiskfs/osd_handler.c |   1 +
  lustre/osd-zfs/osd_handler.c     |   1 +
- 14 files changed, 517 insertions(+), 657 deletions(-)
+ 14 files changed, 500 insertions(+), 639 deletions(-)
 
 diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
 index 0d6f666..5adbffe 100644
@@ -75,7 +76,7 @@ index 4f84c3b..c4e6430 100644
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
  		    struct lfsck_position *pos, bool init);
 diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index de96726..c3b4458 100644
+index c808808..2430fc0 100644
 --- a/lustre/lfsck/lfsck_layout.c
 +++ b/lustre/lfsck/lfsck_layout.c
 @@ -471,7 +471,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
@@ -156,10 +157,10 @@ index de96726..c3b4458 100644
  		      lo->ll_pos_first_inconsistent);
 -	if (rc <= 0)
 -		goto out;
- 
+-
 -	buf += rc;
 -	len -= rc;
--
+ 
 -	rc = snprintf(buf, len,
 -		      "success_count: %u\n"
 +	seq_printf(m, "success_count: %u\n"
@@ -178,7 +179,7 @@ index de96726..c3b4458 100644
  
  	if (lo->ll_status == LS_SCANNING_PHASE1) {
  		__u64 pos;
-@@ -4901,8 +4880,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4902,8 +4881,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -188,7 +189,7 @@ index de96726..c3b4458 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -4916,11 +4894,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4917,11 +4895,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed,
  			      new_checked);
@@ -200,7 +201,7 @@ index de96726..c3b4458 100644
  
  		LASSERT(lfsck->li_di_oit != NULL);
  
-@@ -4933,12 +4906,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4934,12 +4907,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		pos = iops->store(env, lfsck->li_di_oit);
  		if (!lfsck->li_current_oit_processed)
  			pos--;
@@ -214,45 +215,8 @@ index de96726..c3b4458 100644
  	} else if (lo->ll_status == LS_SCANNING_PHASE2) {
  		cfs_duration_t duration = cfs_time_current() -
  					  lfsck->li_time_last_checkpoint;
-@@ -4952,28 +4921,25 @@ static int lfsck_layout_dump(const struct lu_env *env,
- 			do_div(new_checked, duration);
- 		if (rtime != 0)
- 			do_div(speed, rtime);
--		rc = snprintf(buf, len,
--			      "checked_phase1: "LPU64"\n"
--			      "checked_phase2: "LPU64"\n"
--			      "run_time_phase1: %u seconds\n"
--			      "run_time_phase2: %u seconds\n"
--			      "average_speed_phase1: "LPU64" items/sec\n"
--			      "average_speed_phase2: N/A\n"
--			      "real-time_speed_phase1: "LPU64" items/sec\n"
--			      "real-time_speed_phase2: N/A\n"
--			      "current_position: "DFID"\n",
--			      checked,
--			      lo->ll_objs_checked_phase2,
--			      rtime,
--			      lo->ll_run_time_phase2,
--			      speed,
--			      new_checked,
--			      PFID(&com->lc_fid_latest_scanned_phase2));
--		if (rc <= 0)
-+		rc = seq_printf(m, "checked_phase1: "LPU64"\n"
-+				"checked_phase2: "LPU64"\n"
-+				"run_time_phase1: %u seconds\n"
-+				"run_time_phase2: %u seconds\n"
-+				"average_speed_phase1: "LPU64" items/sec\n"
-+				"average_speed_phase2: N/A\n"
-+				"real-time_speed_phase1: "LPU64" items/sec\n"
-+				"real-time_speed_phase2: N/A\n"
-+				"current_position: "DFID"\n",
-+				checked,
-+				lo->ll_objs_checked_phase2,
-+				rtime,
-+				lo->ll_run_time_phase2,
-+				speed,
-+				new_checked,
-+				PFID(&com->lc_fid_latest_scanned_phase2));
-+		if (rc < 0)
+@@ -4978,8 +4947,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 		if (rc <= 0)
  			goto out;
  
 -		buf += rc;
@@ -260,7 +224,7 @@ index de96726..c3b4458 100644
  	} else {
  		__u64 speed1 = lo->ll_objs_checked_phase1;
  		__u64 speed2 = lo->ll_objs_checked_phase2;
-@@ -4982,8 +4948,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4988,8 +4955,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(speed1, lo->ll_run_time_phase1);
  		if (lo->ll_run_time_phase2 != 0)
  			do_div(speed2, lo->ll_run_time_phase2);
@@ -270,7 +234,7 @@ index de96726..c3b4458 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -4998,18 +4963,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -5004,18 +4970,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed1,
  			      speed2);
@@ -291,7 +255,7 @@ index de96726..c3b4458 100644
  
  static int lfsck_layout_master_double_scan(const struct lu_env *env,
 diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index 3b1fe0c..84ffc08 100644
+index c1304b5..43b09b7 100644
 --- a/lustre/lfsck/lfsck_lib.c
 +++ b/lustre/lfsck/lfsck_lib.c
 @@ -899,21 +899,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
@@ -407,7 +371,7 @@ index 3b1fe0c..84ffc08 100644
  }
  
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -1658,7 +1626,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+@@ -1655,7 +1623,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
  
  /* external interfaces */
  
@@ -416,7 +380,7 @@ index 3b1fe0c..84ffc08 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1671,8 +1639,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+@@ -1668,8 +1636,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -426,7 +390,7 @@ index 3b1fe0c..84ffc08 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENXIO;
-@@ -1712,7 +1679,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
+@@ -1709,7 +1676,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_speed);
  
@@ -435,7 +399,7 @@ index 3b1fe0c..84ffc08 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1725,8 +1692,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
+@@ -1722,8 +1689,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -445,7 +409,7 @@ index 3b1fe0c..84ffc08 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENXIO;
-@@ -1776,7 +1742,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
+@@ -1773,7 +1739,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_windows);
  
@@ -454,7 +418,7 @@ index 3b1fe0c..84ffc08 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1792,7 +1758,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
+@@ -1789,7 +1755,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
  	if (likely(lfsck != NULL)) {
  		com = lfsck_component_find(lfsck, type);
  		if (likely(com != NULL)) {
@@ -687,10 +651,10 @@ index 0fe590e..f1c76d6 100644
  				 LUSTRE_MDD_NAME, &mdd_device_type);
  	if (rc)
 diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
-index b536821..8e67fa1 100644
+index a95a42c..64183e3 100644
 --- a/lustre/mdd/mdd_internal.h
 +++ b/lustre/mdd/mdd_internal.h
-@@ -346,7 +346,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
+@@ -347,7 +347,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
                                struct thandle *);
  
  /* mdd_lproc.c */
@@ -1862,7 +1826,7 @@ index 000d4ae..eb6bef0 100644
  {
  	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
 diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 5d7f0b4..f75ffe1 100644
+index 9b82e51..126f29e 100644
 --- a/lustre/ofd/ofd_dev.c
 +++ b/lustre/ofd/ofd_dev.c
 @@ -240,8 +240,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
@@ -2008,7 +1972,7 @@ index 5d7f0b4..f75ffe1 100644
  	lprocfs_free_per_client_stats(obd);
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -2379,7 +2370,6 @@ static struct lu_device_type ofd_device_type = {
+@@ -2387,7 +2378,6 @@ static struct lu_device_type ofd_device_type = {
  
  int __init ofd_init(void)
  {
@@ -2016,7 +1980,7 @@ index 5d7f0b4..f75ffe1 100644
  	int				rc;
  
  	rc = lu_kmem_init(ofd_caches);
-@@ -2392,11 +2382,9 @@ int __init ofd_init(void)
+@@ -2400,11 +2390,9 @@ int __init ofd_init(void)
  		return(rc);
  	}
  
@@ -2049,10 +2013,10 @@ index 3aae6dd..1bdcb80 100644
  #endif
  
 diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index e0da7e6..14808ee 100644
+index 4b5370a..3767f3f 100644
 --- a/lustre/osd-ldiskfs/osd_handler.c
 +++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5921,6 +5921,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+@@ -5931,6 +5931,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
  	osd->od_connects++;
  	spin_unlock(&osd->od_osfs_lock);
  
@@ -2061,10 +2025,10 @@ index e0da7e6..14808ee 100644
  }
  
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 05820e0..e711727 100644
+index 29a3617..ad8908a 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -816,6 +816,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+@@ -822,6 +822,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
  	osd->od_connects++;
  	spin_unlock(&osd->od_objset.lock);
  

diff --git a/sys-cluster/lustre/files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
similarity index 98%
rename from sys-cluster/lustre/files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
rename to sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
index e508fb4..dc787bc 100644
--- a/sys-cluster/lustre/files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
+++ b/sys-cluster/lustre/files/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -1,7 +1,7 @@
-From 3027cd3a234dc4a6531844b885e63b93a2fb6c67 Mon Sep 17 00:00:00 2001
+From 44803997002325709aa62807a55ccf8b6c1ba638 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Fri, 28 Feb 2014 20:30:18 +0800
-Subject: [PATCH 10/10] LU-4416 mm: Backport shrinker changes from upstream
+Subject: [PATCH 7/7] LU-4416 mm: Backport shrinker changes from upstream
 
 Convert shrinker to new count/scan API.
 --ptlrpc shrinker
@@ -22,10 +22,10 @@ Change-Id: Idbd7cd3b7488202e5e8f6fdf757ae6d20e28d642
  6 files changed, 342 insertions(+), 163 deletions(-)
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index cb86497..93360ce 100644
+index 815f082..a6b728a 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -288,6 +288,26 @@ fi
+@@ -295,6 +295,26 @@ fi
  ])
  
  #
@@ -52,7 +52,7 @@ index cb86497..93360ce 100644
  # LIBCFS_PROG_LINUX
  #
  # LNet linux kernel checks
-@@ -319,6 +339,8 @@ LIBCFS_HAVE_CRC32
+@@ -328,6 +348,8 @@ LIBCFS_HAVE_CRC32
  LIBCFS_ENABLE_CRC32_ACCEL
  # 3.10
  LIBCFS_ENABLE_CRC32C_ACCEL
@@ -132,10 +132,10 @@ index 6109645..ce20cb8 100644
  
          register_shrinker(s);
 diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 180d18e..38cebbb 100644
+index 6a16be3..c839486 100644
 --- a/libcfs/include/libcfs/posix/libcfs.h
 +++ b/libcfs/include/libcfs/posix/libcfs.h
-@@ -278,12 +278,19 @@ struct shrinker {
+@@ -269,12 +269,19 @@ struct shrinker {
  #endif
  };
  
@@ -632,7 +632,7 @@ index 1304e95..0850b2a 100644
                  return -ENOMEM;
  
 diff --git a/lustre/ptlrpc/sec_bulk.c b/lustre/ptlrpc/sec_bulk.c
-index 0601486..9d970f20 100644
+index bb1e782..9da60ad 100644
 --- a/lustre/ptlrpc/sec_bulk.c
 +++ b/lustre/ptlrpc/sec_bulk.c
 @@ -232,30 +232,46 @@ static void enc_pools_release_free_pages(long npages)

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
deleted file mode 100644
index 50f9f1c..0000000
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ /dev/null
@@ -1,826 +0,0 @@
-From 671de4e9a7ec811db225a763b88e48379d5a4daf Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 25 Mar 2014 12:37:41 -0400
-Subject: [PATCH 09/10] LU-3319 procfs: update ldiskfs proc handling to
- seq_files
-
-Migrate all ldiskfs proc handling to using strictly
-seq_files. Also include a fix with newer gcc complaining
-certain variables are uninitialized.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
----
- lustre/osd-ldiskfs/osd_compat.c   |   6 +-
- lustre/osd-ldiskfs/osd_handler.c  |  16 +-
- lustre/osd-ldiskfs/osd_internal.h |   6 +-
- lustre/osd-ldiskfs/osd_lproc.c    | 343 ++++++++++++++++++++------------------
- lustre/osd-ldiskfs/osd_scrub.c    | 104 ++++--------
- 5 files changed, 235 insertions(+), 240 deletions(-)
-
-diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c
-index 8b91b64..6330066 100644
---- a/lustre/osd-ldiskfs/osd_compat.c
-+++ b/lustre/osd-ldiskfs/osd_compat.c
-@@ -1164,7 +1164,7 @@ int osd_obj_spec_update(struct osd_thread_info *info, struct osd_device *osd,
- 			handle_t *th)
- {
- 	struct dentry	*root;
--	char		*name;
-+	char		*name = NULL;
- 	int		 rc;
- 	ENTRY;
- 
-@@ -1185,7 +1185,7 @@ int osd_obj_spec_insert(struct osd_thread_info *info, struct osd_device *osd,
- 			handle_t *th)
- {
- 	struct dentry	*root;
--	char		*name;
-+	char		*name = NULL;
- 	int		 rc;
- 	ENTRY;
- 
-@@ -1207,7 +1207,7 @@ int osd_obj_spec_lookup(struct osd_thread_info *info, struct osd_device *osd,
- 	struct dentry	*root;
- 	struct dentry	*dentry;
- 	struct inode	*inode;
--	char		*name;
-+	char		*name = NULL;
- 	int		rc = -ENOENT;
- 	ENTRY;
- 
-diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index 14808ee..2cb9af5 100644
---- a/lustre/osd-ldiskfs/osd_handler.c
-+++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5867,12 +5867,13 @@ static int osd_process_config(const struct lu_env *env,
- 		break;
- 	case LCFG_PARAM:
- 		LASSERT(&o->od_dt_dev);
--		rc = class_process_proc_param(PARAM_OSD, lprocfs_osd_obd_vars,
--					      cfg, &o->od_dt_dev);
-+		rc = class_process_proc_seq_param(PARAM_OSD,
-+						  lprocfs_osd_obd_vars,
-+						  cfg, &o->od_dt_dev);
- 		if (rc > 0 || rc == -ENOSYS)
--			rc = class_process_proc_param(PARAM_OST,
--						      lprocfs_osd_obd_vars,
--						      cfg, &o->od_dt_dev);
-+			rc = class_process_proc_seq_param(PARAM_OST,
-+							  lprocfs_osd_obd_vars,
-+							  cfg, &o->od_dt_dev);
- 		break;
- 	default:
- 		rc = -ENOSYS;
-@@ -6020,9 +6021,10 @@ static int __init osd_mod_init(void)
- 	if (rc)
- 		return rc;
- 
--	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
--#ifndef HAVE_ONLY_PROCFS_SEQ
-+	rc = class_register_type(&osd_obd_device_ops, NULL, true,
- 				 lprocfs_osd_module_vars,
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+				 NULL,
- #endif
- 				 LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
- 	if (rc)
-diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h
-index 185d63d..e1bde19 100644
---- a/lustre/osd-ldiskfs/osd_internal.h
-+++ b/lustre/osd-ldiskfs/osd_internal.h
-@@ -617,8 +617,8 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
- 
- #ifdef LPROCFS
- /* osd_lproc.c */
--extern struct lprocfs_vars lprocfs_osd_obd_vars[];
--extern struct lprocfs_vars lprocfs_osd_module_vars[];
-+extern struct lprocfs_seq_vars lprocfs_osd_obd_vars[];
-+extern struct lprocfs_seq_vars lprocfs_osd_module_vars[];
- int osd_procfs_init(struct osd_device *osd, const char *name);
- int osd_procfs_fini(struct osd_device *osd);
- void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf);
-@@ -673,7 +673,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
- 		   int insert);
- int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid,
- 		   struct osd_inode_id *id);
--int osd_scrub_dump(struct osd_device *dev, char *buf, int len);
-+int osd_scrub_dump(struct seq_file *m, struct osd_device *dev);
- 
- int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd,
- 		   obd_seq seq, struct lu_seq_range *range);
-diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c
-index b9b4e3d..ddaa169 100644
---- a/lustre/osd-ldiskfs/osd_lproc.c
-+++ b/lustre/osd-ldiskfs/osd_lproc.c
-@@ -237,92 +237,46 @@ out:
-         RETURN(result);
- }
- 
--int osd_procfs_init(struct osd_device *osd, const char *name)
-+static int ldiskfs_osd_fstype_seq_show(struct seq_file *m, void *data)
- {
--        struct obd_type     *type;
--        int                  rc;
--        ENTRY;
--
--	/* at the moment there is no linkage between lu_type
--	 * and obd_type, so we lookup obd_type this way */
--	type = class_search_type(LUSTRE_OSD_LDISKFS_NAME);
--
--        LASSERT(name != NULL);
--        LASSERT(type != NULL);
--
--        /* Find the type procroot and add the proc entry for this device */
--        osd->od_proc_entry = lprocfs_register(name, type->typ_procroot,
--					      lprocfs_osd_obd_vars,
--					      &osd->od_dt_dev);
--        if (IS_ERR(osd->od_proc_entry)) {
--                rc = PTR_ERR(osd->od_proc_entry);
--                CERROR("Error %d setting up lprocfs for %s\n",
--                       rc, name);
--                osd->od_proc_entry = NULL;
--                GOTO(out, rc);
--        }
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
--        rc = osd_stats_init(osd);
--
--        EXIT;
--out:
--        if (rc)
--               osd_procfs_fini(osd);
--	return rc;
--}
--
--int osd_procfs_fini(struct osd_device *osd)
--{
--	if (osd->od_stats)
--		lprocfs_free_stats(&osd->od_stats);
--
--        if (osd->od_proc_entry) {
--                 lprocfs_remove(&osd->od_proc_entry);
--                 osd->od_proc_entry = NULL;
--        }
--        RETURN(0);
--}
--
--static int lprocfs_osd_rd_fstype(char *page, char **start, off_t off, int count,
--				 int *eof, void *data)
--{
--	struct osd_device *osd = osd_dt_dev(data);
--
--        LASSERT(osd != NULL);
--        return snprintf(page, count, "ldiskfs\n");
-+	LASSERT(osd != NULL);
-+	return seq_printf(m, "ldiskfs\n");
- }
-+LPROC_SEQ_FOPS_RO(ldiskfs_osd_fstype);
- 
--static int lprocfs_osd_rd_mntdev(char *page, char **start, off_t off, int count,
--                                 int *eof, void *data)
-+static int ldiskfs_osd_mntdev_seq_show(struct seq_file *m, void *data)
- {
--        struct osd_device *osd = osd_dt_dev(data);
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
--        LASSERT(osd != NULL);
-+	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
--                return -EINPROGRESS;
--
--	*eof = 1;
-+		return -EINPROGRESS;
- 
--	return snprintf(page, count, "%s\n", osd->od_mntdev);
-+	return seq_printf(m, "%s\n", osd->od_mntdev);
- }
-+LPROC_SEQ_FOPS_RO(ldiskfs_osd_mntdev);
- 
--static int lprocfs_osd_rd_cache(char *page, char **start, off_t off,
--				int count, int *eof, void *data)
-+static int ldiskfs_osd_cache_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *osd = osd_dt_dev(data);
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
- 		return -EINPROGRESS;
- 
--	return snprintf(page, count, "%u\n", osd->od_read_cache);
-+	return seq_printf(m, "%u\n", osd->od_read_cache);
- }
- 
--static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
--				unsigned long count, void *data)
-+static ssize_t
-+ldiskfs_osd_cache_seq_write(struct file *file, const char *buffer,
-+			    size_t count, loff_t *off)
- {
--	struct osd_device	*osd = osd_dt_dev(data);
--	int			 val, rc;
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *osd = osd_dt_dev(dt);
-+	int		   val, rc;
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
-@@ -335,24 +289,27 @@ static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
- 	osd->od_read_cache = !!val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(ldiskfs_osd_cache);
- 
--static int lprocfs_osd_rd_wcache(char *page, char **start, off_t off,
--				 int count, int *eof, void *data)
-+static int ldiskfs_osd_wcache_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *osd = osd_dt_dev(data);
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
- 		return -EINPROGRESS;
- 
--	return snprintf(page, count, "%u\n", osd->od_writethrough_cache);
-+	return seq_printf(m, "%u\n", osd->od_writethrough_cache);
- }
- 
--static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
--				 unsigned long count, void *data)
-+static ssize_t
-+ldiskfs_osd_wcache_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct osd_device	*osd = osd_dt_dev(data);
--	int			 val, rc;
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *osd = osd_dt_dev(dt);
-+	int		   val, rc;
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
-@@ -365,14 +322,17 @@ static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
- 	osd->od_writethrough_cache = !!val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(ldiskfs_osd_wcache);
- 
--static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
--				     unsigned long count, void *data)
-+static ssize_t
-+lprocfs_osd_force_sync_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--	struct osd_device	*osd = osd_dt_dev(data);
--	struct dt_device	*dt = data;
--	struct lu_env		 env;
--	int			 rc;
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *osd = osd_dt_dev(dt);
-+	struct lu_env	   env;
-+	int		   rc;
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
-@@ -386,20 +346,18 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
- 
- 	return rc == 0 ? count : rc;
- }
-+LPROC_SEQ_FOPS_WO_TYPE(ldiskfs, osd_force_sync);
- 
--static int lprocfs_osd_rd_pdo(char *page, char **start, off_t off, int count,
--                              int *eof, void *data)
-+static int ldiskfs_osd_pdo_seq_show(struct seq_file *m, void *data)
- {
--        *eof = 1;
--
--        return snprintf(page, count, "%s\n", ldiskfs_pdo ? "ON" : "OFF");
-+	return seq_printf(m, "%s\n", ldiskfs_pdo ? "ON" : "OFF");
- }
- 
--static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
--                              unsigned long count, void *data)
-+static ssize_t
-+ldiskfs_osd_pdo_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--        int     pdo;
--        int     rc;
-+	int pdo, rc;
- 
-         rc = lprocfs_write_helper(buffer, count, &pdo);
-         if (rc != 0)
-@@ -409,24 +367,26 @@ static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(ldiskfs_osd_pdo);
- 
--static int lprocfs_osd_rd_auto_scrub(char *page, char **start, off_t off,
--				     int count, int *eof, void *data)
-+static int ldiskfs_osd_auto_scrub_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *dev = osd_dt_dev(data);
-+	struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(dev != NULL);
- 	if (unlikely(dev->od_mnt == NULL))
- 		return -EINPROGRESS;
- 
--	*eof = 1;
--	return snprintf(page, count, "%d\n", !dev->od_noscrub);
-+	return seq_printf(m, "%d\n", !dev->od_noscrub);
- }
- 
--static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
--				     unsigned long count, void *data)
-+static ssize_t
-+ldiskfs_osd_auto_scrub_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--	struct osd_device *dev = osd_dt_dev(data);
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *dev = osd_dt_dev(dt);
- 	int val, rc;
- 
- 	LASSERT(dev != NULL);
-@@ -440,19 +400,18 @@ static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
- 	dev->od_noscrub = !val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(ldiskfs_osd_auto_scrub);
- 
--static int lprocfs_osd_rd_track_declares_assert(char *page, char **start,
--						off_t off, int count,
--						int *eof, void *data)
-+static int
-+ldiskfs_osd_track_declares_assert_seq_show(struct seq_file *m, void *data)
- {
--	*eof = 1;
--
--	return snprintf(page, count, "%d\n", ldiskfs_track_declares_assert);
-+	return seq_printf(m, "%d\n", ldiskfs_track_declares_assert);
- }
- 
--static int lprocfs_osd_wr_track_declares_assert(struct file *file,
-+static ssize_t
-+ldiskfs_osd_track_declares_assert_seq_write(struct file *file,
- 						const char *buffer,
--						unsigned long count, void *data)
-+						size_t count, loff_t *off)
- {
- 	int     track_declares_assert;
- 	int     rc;
-@@ -465,40 +424,40 @@ static int lprocfs_osd_wr_track_declares_assert(struct file *file,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(ldiskfs_osd_track_declares_assert);
- 
--static int lprocfs_osd_rd_oi_scrub(char *page, char **start, off_t off,
--				   int count, int *eof, void *data)
-+static int ldiskfs_osd_oi_scrub_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *dev = osd_dt_dev(data);
-+	struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(dev != NULL);
- 	if (unlikely(dev->od_mnt == NULL))
- 		return -EINPROGRESS;
- 
--	*eof = 1;
--	return osd_scrub_dump(dev, page, count);
-+	return osd_scrub_dump(m, dev);
- }
-+LPROC_SEQ_FOPS_RO(ldiskfs_osd_oi_scrub);
- 
--int lprocfs_osd_rd_readcache(char *page, char **start, off_t off, int count,
--			     int *eof, void *data)
-+int ldiskfs_osd_readcache_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device	*osd = osd_dt_dev(data);
--	int			 rc;
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
- 		return -EINPROGRESS;
- 
--	rc = snprintf(page, count, LPU64"\n", osd->od_readcache_max_filesize);
--	return rc;
-+	return seq_printf(m, LPU64"\n", osd->od_readcache_max_filesize);
- }
- 
--int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
--			     unsigned long count, void *data)
-+ssize_t
-+ldiskfs_osd_readcache_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct osd_device	*osd = osd_dt_dev(data);
--	__u64			 val;
--	int			 rc;
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *osd = osd_dt_dev(dt);
-+	__u64		   val;
-+	int		   rc;
- 
- 	LASSERT(osd != NULL);
- 	if (unlikely(osd->od_mnt == NULL))
-@@ -512,24 +471,26 @@ int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
- 					 OSD_MAX_CACHE_SIZE : val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(ldiskfs_osd_readcache);
- 
--static int lprocfs_osd_rd_lma_self_repair(char *page, char **start, off_t off,
--					  int count, int *eof, void *data)
-+static int ldiskfs_osd_lma_self_repair_seq_show(struct seq_file *m, void *data)
- {
--	struct osd_device *dev = osd_dt_dev(data);
-+	struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
- 
- 	LASSERT(dev != NULL);
- 	if (unlikely(dev->od_mnt == NULL))
- 		return -EINPROGRESS;
- 
--	*eof = 1;
--	return snprintf(page, count, "%d\n", !!dev->od_lma_self_repair);
-+	return seq_printf(m, "%d\n", !!dev->od_lma_self_repair);
- }
- 
--static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
--					  unsigned long count, void *data)
-+static ssize_t
-+ldiskfs_osd_lma_self_repair_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--	struct osd_device *dev = osd_dt_dev(data);
-+	struct seq_file	  *m = file->private_data;
-+	struct dt_device  *dt = m->private;
-+	struct osd_device *dev = osd_dt_dev(dt);
- 	int		   val;
- 	int		   rc;
- 
-@@ -544,38 +505,102 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
- 	dev->od_lma_self_repair = !!val;
- 	return count;
- }
--
--struct lprocfs_vars lprocfs_osd_obd_vars[] = {
--	{ "blocksize",		lprocfs_dt_rd_blksize,	0, 0 },
--	{ "kbytestotal",	lprocfs_dt_rd_kbytestotal,	0, 0 },
--	{ "kbytesfree",		lprocfs_dt_rd_kbytesfree,	0, 0 },
--	{ "kbytesavail",	lprocfs_dt_rd_kbytesavail,	0, 0 },
--	{ "filestotal",		lprocfs_dt_rd_filestotal,	0, 0 },
--	{ "filesfree",		lprocfs_dt_rd_filesfree,	0, 0 },
--        { "fstype",          lprocfs_osd_rd_fstype,      0, 0 },
--        { "mntdev",          lprocfs_osd_rd_mntdev,      0, 0 },
--	{ "force_sync",      0, lprocfs_osd_wr_force_sync     },
--        { "pdo",             lprocfs_osd_rd_pdo, lprocfs_osd_wr_pdo, 0 },
--	{ "auto_scrub",      lprocfs_osd_rd_auto_scrub,
--			     lprocfs_osd_wr_auto_scrub,  0 },
--	{ "oi_scrub",	     lprocfs_osd_rd_oi_scrub,    0, 0 },
--	{ "force_sync",		0, lprocfs_osd_wr_force_sync },
--	{ "read_cache_enable",	lprocfs_osd_rd_cache, lprocfs_osd_wr_cache, 0 },
--	{ "writethrough_cache_enable",	lprocfs_osd_rd_wcache,
--					lprocfs_osd_wr_wcache, 0 },
--	{ "readcache_max_filesize",	lprocfs_osd_rd_readcache,
--					lprocfs_osd_wr_readcache, 0 },
--	{ "lma_self_repair",	lprocfs_osd_rd_lma_self_repair,
--				lprocfs_osd_wr_lma_self_repair, 0, 0 },
-+LPROC_SEQ_FOPS(ldiskfs_osd_lma_self_repair);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_blksize);
-+LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytesfree);
-+LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytesavail);
-+LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filesfree);
-+
-+struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
-+	{ .name	=	"blocksize",
-+	  .fops	=	&ldiskfs_dt_blksize_fops	},
-+	{ .name	=	"kbytestotal",
-+	  .fops	=	&ldiskfs_dt_kbytestotal_fops	},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&ldiskfs_dt_kbytesfree_fops	},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&ldiskfs_dt_kbytesavail_fops	},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&ldiskfs_dt_filestotal_fops	},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&ldiskfs_dt_filesfree_fops	},
-+	{ .name	=	"fstype",
-+	  .fops	=	&ldiskfs_osd_fstype_fops	},
-+	{ .name	=	"mntdev",
-+	  .fops	=	&ldiskfs_osd_mntdev_fops	},
-+	{ .name	=	"force_sync",
-+	  .fops	=	&ldiskfs_osd_force_sync_fops	},
-+	{ .name	=	"pdo",
-+	  .fops	=	&ldiskfs_osd_pdo_fops		},
-+	{ .name	=	"auto_scrub",
-+	  .fops	=	&ldiskfs_osd_auto_scrub_fops	},
-+	{ .name	=	"oi_scrub",
-+	  .fops	=	&ldiskfs_osd_oi_scrub_fops	},
-+	{ .name	=	"read_cache_enable",
-+	  .fops	=	&ldiskfs_osd_cache_fops		},
-+	{ .name	=	"writethrough_cache_enable",
-+	  .fops	=	&ldiskfs_osd_wcache_fops	},
-+	{ .name	=	"readcache_max_filesize",
-+	  .fops	=	&ldiskfs_osd_readcache_fops	},
-+	{ .name	=	"lma_self_repair",
-+	  .fops	=	&ldiskfs_osd_lma_self_repair_fops	},
- 	{ 0 }
- };
- 
--struct lprocfs_vars lprocfs_osd_module_vars[] = {
--        { "num_refs",        lprocfs_rd_numrefs,     0, 0 },
--	{ "track_declares_assert",	lprocfs_osd_rd_track_declares_assert,
--					lprocfs_osd_wr_track_declares_assert,
--					0 },
--        { 0 }
-+struct lprocfs_seq_vars lprocfs_osd_module_vars[] = {
-+	{ .name	=	"track_declares_assert",
-+	  .fops	=	&ldiskfs_osd_track_declares_assert_fops		},
-+	{ 0 }
- };
- 
-+
-+int osd_procfs_init(struct osd_device *osd, const char *name)
-+{
-+	struct obd_type	*type;
-+	int		rc;
-+	ENTRY;
-+
-+	if (osd->od_proc_entry)
-+		RETURN(0);
-+
-+	/* at the moment there is no linkage between lu_type
-+	 * and obd_type, so we lookup obd_type this way */
-+	type = class_search_type(LUSTRE_OSD_LDISKFS_NAME);
-+
-+	LASSERT(name != NULL);
-+	LASSERT(type != NULL);
-+
-+	/* Find the type procroot and add the proc entry for this device */
-+	osd->od_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
-+						  lprocfs_osd_obd_vars,
-+						  &osd->od_dt_dev);
-+	if (IS_ERR(osd->od_proc_entry)) {
-+		rc = PTR_ERR(osd->od_proc_entry);
-+		CERROR("Error %d setting up lprocfs for %s\n",
-+		       rc, name);
-+		osd->od_proc_entry = NULL;
-+		GOTO(out, rc);
-+	}
-+
-+	rc = osd_stats_init(osd);
-+
-+	EXIT;
-+out:
-+	if (rc)
-+		osd_procfs_fini(osd);
-+	return rc;
-+}
-+
-+int osd_procfs_fini(struct osd_device *osd)
-+{
-+	if (osd->od_stats)
-+		lprocfs_free_stats(&osd->od_stats);
-+
-+	if (osd->od_proc_entry)
-+		lprocfs_remove(&osd->od_proc_entry);
-+	RETURN(0);
-+}
- #endif
-diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 7d6c011..05e9f25 100644
---- a/lustre/osd-ldiskfs/osd_scrub.c
-+++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -2571,134 +2571,112 @@ static const char *scrub_param_names[] = {
- 	NULL
- };
- 
--static int scrub_bits_dump(char **buf, int *len, int bits, const char *names[],
-+static int scrub_bits_dump(struct seq_file *m, int bits, const char *names[],
- 			   const char *prefix)
- {
--	int save = *len;
- 	int flag;
- 	int rc;
- 	int i;
- 
--	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
--	if (rc <= 0)
--		return -ENOSPC;
-+	rc = seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
-+	if (rc < 0)
-+		return rc;
- 
--	*buf += rc;
--	*len -= rc;
- 	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
- 		if (flag & bits) {
- 			bits &= ~flag;
--			rc = snprintf(*buf, *len, "%s%c", names[i],
--				      bits != 0 ? ',' : '\n');
--			if (rc <= 0)
--				return -ENOSPC;
--
--			*buf += rc;
--			*len -= rc;
-+			rc = seq_printf(m, "%s%c", names[i],
-+					bits != 0 ? ',' : '\n');
-+			if (rc < 0)
-+				return rc;
- 		}
- 	}
--	return save - *len;
-+	return 0;
- }
- 
--static int scrub_time_dump(char **buf, int *len, __u64 time, const char *prefix)
-+static int scrub_time_dump(struct seq_file *m, __u64 time, const char *prefix)
- {
- 	int rc;
- 
- 	if (time != 0)
--		rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
-+		rc = seq_printf(m, "%s: "LPU64" seconds\n", prefix,
- 			      cfs_time_current_sec() - time);
- 	else
--		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
--	if (rc <= 0)
--		return -ENOSPC;
--
--	*buf += rc;
--	*len -= rc;
-+		rc = seq_printf(m, "%s: N/A\n", prefix);
- 	return rc;
- }
- 
--static int scrub_pos_dump(char **buf, int *len, __u64 pos, const char *prefix)
-+static int scrub_pos_dump(struct seq_file *m, __u64 pos, const char *prefix)
- {
- 	int rc;
- 
- 	if (pos != 0)
--		rc = snprintf(*buf, *len, "%s: "LPU64"\n", prefix, pos);
-+		rc = seq_printf(m, "%s: "LPU64"\n", prefix, pos);
- 	else
--		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
--	if (rc <= 0)
--		return -ENOSPC;
--
--	*buf += rc;
--	*len -= rc;
-+		rc = seq_printf(m, "%s: N/A\n", prefix);
- 	return rc;
- }
- 
--int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
-+int osd_scrub_dump(struct seq_file *m, struct osd_device *dev)
- {
- 	struct osd_scrub  *scrub   = &dev->od_scrub;
- 	struct scrub_file *sf      = &scrub->os_file;
- 	__u64		   checked;
- 	__u64		   speed;
--	int		   save    = len;
--	int		   ret     = -ENOSPC;
- 	int		   rc;
- 
- 	down_read(&scrub->os_rwsem);
--	rc = snprintf(buf, len,
--		      "name: OI_scrub\n"
--		      "magic: 0x%x\n"
--		      "oi_files: %d\n"
--		      "status: %s\n",
--		      sf->sf_magic, (int)sf->sf_oi_count,
--		      scrub_status_names[sf->sf_status]);
--	if (rc <= 0)
-+	rc = seq_printf(m, "name: OI_scrub\n"
-+			"magic: 0x%x\n"
-+			"oi_files: %d\n"
-+			"status: %s\n",
-+			sf->sf_magic, (int)sf->sf_oi_count,
-+			scrub_status_names[sf->sf_status]);
-+	if (rc < 0)
- 		goto out;
- 
--	buf += rc;
--	len -= rc;
--	rc = scrub_bits_dump(&buf, &len, sf->sf_flags, scrub_flags_names,
-+	rc = scrub_bits_dump(m, sf->sf_flags, scrub_flags_names,
- 			     "flags");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_bits_dump(&buf, &len, sf->sf_param, scrub_param_names,
-+	rc = scrub_bits_dump(m, sf->sf_param, scrub_param_names,
- 			     "param");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_time_dump(&buf, &len, sf->sf_time_last_complete,
-+	rc = scrub_time_dump(m, sf->sf_time_last_complete,
- 			     "time_since_last_completed");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_time_dump(&buf, &len, sf->sf_time_latest_start,
-+	rc = scrub_time_dump(m, sf->sf_time_latest_start,
- 			     "time_since_latest_start");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_time_dump(&buf, &len, sf->sf_time_last_checkpoint,
-+	rc = scrub_time_dump(m, sf->sf_time_last_checkpoint,
- 			     "time_since_last_checkpoint");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_pos_dump(&buf, &len, sf->sf_pos_latest_start,
-+	rc = scrub_pos_dump(m, sf->sf_pos_latest_start,
- 			    "latest_start_position");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_pos_dump(&buf, &len, sf->sf_pos_last_checkpoint,
-+	rc = scrub_pos_dump(m, sf->sf_pos_last_checkpoint,
- 			    "last_checkpoint_position");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = scrub_pos_dump(&buf, &len, sf->sf_pos_first_inconsistent,
-+	rc = scrub_pos_dump(m, sf->sf_pos_first_inconsistent,
- 			    "first_failure_position");
- 	if (rc < 0)
- 		goto out;
- 
- 	checked = sf->sf_items_checked + scrub->os_new_checked;
--	rc = snprintf(buf, len,
--		      "checked: "LPU64"\n"
-+	rc = seq_printf(m, "checked: "LPU64"\n"
- 		      "updated: "LPU64"\n"
- 		      "failed: "LPU64"\n"
- 		      "prior_updated: "LPU64"\n"
-@@ -2708,11 +2686,9 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
- 		      checked, sf->sf_items_updated, sf->sf_items_failed,
- 		      sf->sf_items_updated_prior, sf->sf_items_noscrub,
- 		      sf->sf_items_igif, sf->sf_success_count);
--	if (rc <= 0)
-+	if (rc < 0)
- 		goto out;
- 
--	buf += rc;
--	len -= rc;
- 	speed = checked;
- 	if (thread_is_running(&scrub->os_thread)) {
- 		cfs_duration_t duration = cfs_time_current() -
-@@ -2725,8 +2701,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
- 			do_div(new_checked, duration);
- 		if (rtime != 0)
- 			do_div(speed, rtime);
--		rc = snprintf(buf, len,
--			      "run_time: %u seconds\n"
-+		rc = seq_printf(m, "run_time: %u seconds\n"
- 			      "average_speed: "LPU64" objects/sec\n"
- 			      "real-time_speed: "LPU64" objects/sec\n"
- 			      "current_position: %u\n"
-@@ -2739,8 +2714,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
- 	} else {
- 		if (sf->sf_run_time != 0)
- 			do_div(speed, sf->sf_run_time);
--		rc = snprintf(buf, len,
--			      "run_time: %u seconds\n"
-+		rc = seq_printf(m, "run_time: %u seconds\n"
- 			      "average_speed: "LPU64" objects/sec\n"
- 			      "real-time_speed: N/A\n"
- 			      "current_position: N/A\n"
-@@ -2750,14 +2724,8 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
- 			      sf->sf_run_time, speed, scrub->os_lf_scanned,
- 			      scrub->os_lf_repaired, scrub->os_lf_failed);
- 	}
--	if (rc <= 0)
--		goto out;
--
--	buf += rc;
--	len -= rc;
--	ret = save - len;
- 
- out:
- 	up_read(&scrub->os_rwsem);
--	return ret;
-+	return (rc < 0 ? -ENOSPC : 0);
- }
--- 
-1.9.1
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 50587cc..f777e39 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -7,6 +7,14 @@ EAPI=5
 WANT_AUTOCONF="2.5"
 WANT_AUTOMAKE="1.10"
 
+if [[ $PV = *9999* ]]; then
+	KEYWORDS=""
+	EGIT_BRANCH="master"
+else
+	KEYWORDS="~amd64"
+	EGIT_TAG="${PV}"
+fi
+
 inherit git-r3 autotools linux-mod toolchain-funcs udev flag-o-matic
 
 DESCRIPTION="Lustre is a parallel distributed file system"
@@ -16,7 +24,6 @@ EGIT_REPO_URI="git://git.whamcloud.com/fs/lustre-release.git"
 
 LICENSE="GPL-2"
 SLOT="0"
-KEYWORDS=""
 IUSE="+client +utils server liblustre readline tests tcpd +urandom"
 
 RDEPEND="
@@ -33,16 +40,13 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-3319-procfs-fix-symlink-handling.patch"
-	"${FILESDIR}/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
-	"${FILESDIR}/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
+	"${FILESDIR}/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0006-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0007-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
 	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-04-02 12:29 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-04-02 12:29 UTC (permalink / raw
  To: gentoo-commits

commit:     a7d037ca556e8c39196b91cba9b18b20864d3b46
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Apr  2 12:28:58 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Apr  2 12:28:58 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=a7d037ca

Lustre with patches up to kernel v3.13

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |  15 +
 .../0001-LU-3319-procfs-fix-symlink-handling.patch |   2 +-
 ...cfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch |   2 +-
 ...cfs-update-zfs-proc-handling-to-seq_files.patch |   2 +-
 ...rocfs-move-mgs-proc-handling-to-seq_files.patch |   2 +-
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |   2 +-
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |   2 +-
 ...cfs-move-mdt-mds-proc-handling-to-seq_fil.patch |   2 +-
 ...cfs-move-mdd-ofd-proc-handling-to-seq_fil.patch |   2 +-
 ...cfs-update-ldiskfs-proc-handling-to-seq_f.patch |   3 +-
 ...m-Backport-shrinker-changes-from-upstream.patch | 757 +++++++++++++++++++++
 .../lustre/files/lustre-readline6.3_fix.patch      |  13 +
 sys-cluster/lustre/lustre-9999.ebuild              |   2 +
 13 files changed, 797 insertions(+), 9 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 6b3ecb1..0ed9678 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,21 @@
 # $Header: $
 
   02 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch,
+  +files/lustre-readline6.3_fix.patch,
+  files/0001-LU-3319-procfs-fix-symlink-handling.patch,
+  files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
+  files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  lustre-9999.ebuild:
+  Lustre with patches up to kernel v3.13
+
+  02 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-3319-procfs-fix-symlink-handling.patch,
   +files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
   +files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
index d0b6e9c..4583601 100644
--- a/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
@@ -1,7 +1,7 @@
 From 4c418e7208a62c7bb7d61c1f97cf300675215bd4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 28 Mar 2014 11:19:07 -0400
-Subject: [PATCH 1/9] LU-3319 procfs: fix symlink handling
+Subject: [PATCH 01/10] LU-3319 procfs: fix symlink handling
 
 While working on symlink handling for seq files I noticed a
 long outstanding bug. Code was developed to link osc obds

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
index d7da497..5c67013 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
 From 7dbddd98e60ab73580ea52c8b53274da2283d624 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Feb 2014 12:54:05 -0500
-Subject: [PATCH 2/9] LU-3319 procfs: Move NRS TBF proc handling to seq_files
+Subject: [PATCH 02/10] LU-3319 procfs: Move NRS TBF proc handling to seq_files
 
 With newer kernels moving their proc file system handling
 to seq_files this patch migrates the proc handling for NRS

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index b06c8da..90f1770 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From abe827ebe8722336c55affd8388dacfbb38b49f1 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 18 Feb 2014 18:44:22 -0500
-Subject: [PATCH 3/9] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 03/10] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
index c7d415a..c5712a1 100644
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From 00e2e7c431e38433b919735890481e4bb5707cd4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 4 Mar 2014 10:45:30 -0500
-Subject: [PATCH 4/9] LU-3319 procfs: move mgs proc handling to seq_files
+Subject: [PATCH 04/10] LU-3319 procfs: move mgs proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mgs

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index e439041..5b94e9a 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From ab793e8472447314f6428025175f80afc26339ac Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 19:59:18 -0400
-Subject: [PATCH 5/9] LU-3319 procfs: move osp proc handling to seq_files
+Subject: [PATCH 05/10] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index d9bcc89..67c955b 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From 1394aacb441c3ba07b24a4b465f2496af8eb3c73 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 19:57:44 -0400
-Subject: [PATCH 6/9] LU-3319 procfs: move lod proc handling to seq_files
+Subject: [PATCH 06/10] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the lod

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index 5c1c9cd..2205759 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
 From 039e3e44e07b59923d94bea976173d9e3cbd0ba9 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Mar 2014 11:10:33 -0400
-Subject: [PATCH 7/9] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Subject: [PATCH 07/10] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 6c6106b..37dd14c 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
 From c6c3f4063e244cea365940adc0fd1a1c35d0b525 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 26 Mar 2014 20:01:52 -0400
-Subject: [PATCH 8/9] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 08/10] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index cc93d19..50f9f1c 100644
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,7 +1,8 @@
 From 671de4e9a7ec811db225a763b88e48379d5a4daf Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 25 Mar 2014 12:37:41 -0400
-Subject: [PATCH 9/9] LU-3319 procfs: update ldiskfs proc handling to seq_files
+Subject: [PATCH 09/10] LU-3319 procfs: update ldiskfs proc handling to
+ seq_files
 
 Migrate all ldiskfs proc handling to using strictly
 seq_files. Also include a fix with newer gcc complaining

diff --git a/sys-cluster/lustre/files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch b/sys-cluster/lustre/files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
new file mode 100644
index 0000000..e508fb4
--- /dev/null
+++ b/sys-cluster/lustre/files/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch
@@ -0,0 +1,757 @@
+From 3027cd3a234dc4a6531844b885e63b93a2fb6c67 Mon Sep 17 00:00:00 2001
+From: yangsheng <yang.sheng@intel.com>
+Date: Fri, 28 Feb 2014 20:30:18 +0800
+Subject: [PATCH 10/10] LU-4416 mm: Backport shrinker changes from upstream
+
+Convert shrinker to new count/scan API.
+--ptlrpc shrinker
+--lu_object shrinker
+--ldlm pool shrinker
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Signed-off-by: Andreas Dilger <andreas.dilger@intel.com>
+Signed-off-by: yang sheng <yang.sheng@intel.com>
+Change-Id: Idbd7cd3b7488202e5e8f6fdf757ae6d20e28d642
+---
+ libcfs/autoconf/lustre-libcfs.m4        |  22 ++++
+ libcfs/include/libcfs/linux/linux-mem.h |  34 ++++-
+ libcfs/include/libcfs/posix/libcfs.h    |  13 +-
+ lustre/ldlm/ldlm_pool.c                 | 222 ++++++++++++++++++++------------
+ lustre/obdclass/lu_object.c             | 134 +++++++++++--------
+ lustre/ptlrpc/sec_bulk.c                |  80 +++++++++---
+ 6 files changed, 342 insertions(+), 163 deletions(-)
+
+diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
+index cb86497..93360ce 100644
+--- a/libcfs/autoconf/lustre-libcfs.m4
++++ b/libcfs/autoconf/lustre-libcfs.m4
+@@ -288,6 +288,26 @@ fi
+ ])
+ 
+ #
++# FC19 3.12 kernel struct shrinker change
++#
++AC_DEFUN([LIBCFS_SHRINKER_COUNT],
++[AC_MSG_CHECKING([shrinker has count_objects])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/mmzone.h>
++	#include <linux/shrinker.h>
++],[
++	((struct shrinker*)0)->count_objects(NULL, NULL);
++],[
++	AC_MSG_RESULT(yes)
++	AC_DEFINE(HAVE_SHRINKER_COUNT, 1,
++		[shrinker has count_objects memeber])
++],[
++	AC_MSG_RESULT(no)
++],[
++])
++])
++
++#
+ # LIBCFS_PROG_LINUX
+ #
+ # LNet linux kernel checks
+@@ -319,6 +339,8 @@ LIBCFS_HAVE_CRC32
+ LIBCFS_ENABLE_CRC32_ACCEL
+ # 3.10
+ LIBCFS_ENABLE_CRC32C_ACCEL
++# 3.12
++LIBCFS_SHRINKER_COUNT
+ ])
+ 
+ #
+diff --git a/libcfs/include/libcfs/linux/linux-mem.h b/libcfs/include/libcfs/linux/linux-mem.h
+index 6109645..ce20cb8 100644
+--- a/libcfs/include/libcfs/linux/linux-mem.h
++++ b/libcfs/include/libcfs/linux/linux-mem.h
+@@ -108,13 +108,16 @@ extern void *cfs_mem_cache_cpt_alloc(struct kmem_cache *cachep,
+ /*
+  * Shrinker
+  */
+-
+ #ifdef HAVE_SHRINK_CONTROL
+ # define SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)  \
+                        struct shrinker *shrinker, \
+                        struct shrink_control *sc
+ # define shrink_param(sc, var) ((sc)->var)
+ #else
++struct shrink_control {
++	gfp_t gfp_mask;
++	unsigned long nr_to_scan;
++};
+ # ifdef HAVE_SHRINKER_WANT_SHRINK_PTR
+ #  define SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)  \
+                         struct shrinker *shrinker, \
+@@ -123,13 +126,31 @@ extern void *cfs_mem_cache_cpt_alloc(struct kmem_cache *cachep,
+ #  define SHRINKER_ARGS(sc, nr_to_scan, gfp_mask)  \
+                         int nr_to_scan, gfp_t gfp_mask
+ # endif
++	/* avoid conflict with spl mm_compat.h */
++# define HAVE_SHRINK_CONTROL_STRUCT 1
+ # define shrink_param(sc, var) (var)
+ #endif
+ 
+-typedef int (*shrinker_t)(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask));
++#ifdef HAVE_SHRINKER_COUNT
++struct shrinker_var {
++	unsigned long (*count)(struct shrinker *,
++			       struct shrink_control *sc);
++	unsigned long (*scan)(struct shrinker *,
++			      struct shrink_control *sc);
++};
++# define DEF_SHRINKER_VAR(name, shrink, count_obj, scan_obj) \
++	    struct shrinker_var name = { .count = count_obj, .scan = scan_obj }
++#else
++struct shrinker_var {
++	int (*shrink)(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask));
++};
++# define DEF_SHRINKER_VAR(name, shrinker, count, scan) \
++	    struct shrinker_var name = { .shrink = shrinker }
++# define SHRINK_STOP (~0UL)
++#endif
+ 
+ static inline
+-struct shrinker *set_shrinker(int seek, shrinker_t func)
++struct shrinker *set_shrinker(int seek, struct shrinker_var *var)
+ {
+         struct shrinker *s;
+ 
+@@ -137,7 +158,12 @@ struct shrinker *set_shrinker(int seek, shrinker_t func)
+         if (s == NULL)
+                 return (NULL);
+ 
+-        s->shrink = func;
++#ifdef HAVE_SHRINKER_COUNT
++	s->count_objects = var->count;
++	s->scan_objects = var->scan;
++#else
++	s->shrink = var->shrink;
++#endif
+         s->seeks = seek;
+ 
+         register_shrinker(s);
+diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
+index 180d18e..38cebbb 100644
+--- a/libcfs/include/libcfs/posix/libcfs.h
++++ b/libcfs/include/libcfs/posix/libcfs.h
+@@ -278,12 +278,19 @@ struct shrinker {
+ #endif
+ };
+ 
+-#define DEFAULT_SEEKS (0)
++struct shrinker_var {
++#ifndef __INTEL_COMPILER
++	;
++#endif
++};
++
++#define DEF_SHRINKER_VAR(name, shrink, count, scan) \
++		struct shrinker_var name = {};
+ 
+-typedef int (*shrinker_t)(int, unsigned int);
++#define DEFAULT_SEEKS (0)
+ 
+ static inline
+-struct shrinker *set_shrinker(int seeks, shrinker_t shrink)
++struct shrinker *set_shrinker(int seeks, struct shrinker_var *var)
+ {
+ 	return (struct shrinker *)0xdeadbea1; /* Cannot return NULL here */
+ }
+diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
+index 6cf50f2..b3eaf1c 100644
+--- a/lustre/ldlm/ldlm_pool.c
++++ b/lustre/ldlm/ldlm_pool.c
+@@ -531,7 +531,7 @@ static int ldlm_cli_pool_shrink(struct ldlm_pool *pl,
+                                 int nr, unsigned int gfp_mask)
+ {
+         struct ldlm_namespace *ns;
+-        int canceled = 0, unused;
++	int unused;
+ 
+         ns = ldlm_pl2ns(pl);
+ 
+@@ -550,17 +550,14 @@ static int ldlm_cli_pool_shrink(struct ldlm_pool *pl,
+ 	unused = ns->ns_nr_unused;
+ 	spin_unlock(&ns->ns_lock);
+ 
+-        if (nr) {
+-		canceled = ldlm_cancel_lru(ns, nr, LCF_ASYNC,
+-					   LDLM_CANCEL_SHRINK);
+-        }
+ #ifdef __KERNEL__
+-        /*
+-         * Return the number of potentially reclaimable locks.
+-         */
+-        return ((unused - canceled) / 100) * sysctl_vfs_cache_pressure;
++	if (nr == 0)
++		return (unused / 100) * sysctl_vfs_cache_pressure;
++	else
++		return ldlm_cancel_lru(ns, nr, LCF_ASYNC, LDLM_CANCEL_SHRINK);
+ #else
+-        return unused - canceled;
++	return unused - (nr ? ldlm_cancel_lru(ns, nr, LCF_ASYNC,
++					      LDLM_CANCEL_SHRINK) : 0);
+ #endif
+ }
+ 
+@@ -1045,41 +1042,36 @@ static struct shrinker *ldlm_pools_cli_shrinker;
+ static struct completion ldlm_pools_comp;
+ 
+ /*
+- * Cancel \a nr locks from all namespaces (if possible). Returns number of
+- * cached locks after shrink is finished. All namespaces are asked to
+- * cancel approximately equal amount of locks to keep balancing.
+- */
+-static int ldlm_pools_shrink(ldlm_side_t client, int nr,
+-                             unsigned int gfp_mask)
++* count locks from all namespaces (if possible). Returns number of
++* cached locks.
++*/
++static unsigned long ldlm_pools_count(ldlm_side_t client, unsigned int gfp_mask)
+ {
+-	unsigned int total = 0, cached = 0;
+-	int nr_ns;
+-        struct ldlm_namespace *ns;
++	int total = 0, nr_ns;
++	struct ldlm_namespace *ns;
+ 	struct ldlm_namespace *ns_old = NULL; /* loop detection */
+-        void *cookie;
++	void *cookie;
+ 
+-        if (client == LDLM_NAMESPACE_CLIENT && nr != 0 &&
+-            !(gfp_mask & __GFP_FS))
+-                return -1;
++	if (client == LDLM_NAMESPACE_CLIENT && !(gfp_mask & __GFP_FS))
++		return 0;
+ 
+-        CDEBUG(D_DLMTRACE, "Request to shrink %d %s locks from all pools\n",
+-               nr, client == LDLM_NAMESPACE_CLIENT ? "client" : "server");
++	CDEBUG(D_DLMTRACE, "Request to count %s locks from all pools\n",
++	       client == LDLM_NAMESPACE_CLIENT ? "client" : "server");
+ 
+-        cookie = cl_env_reenter();
++	cookie = cl_env_reenter();
+ 
+-        /*
+-         * Find out how many resources we may release.
+-         */
++	/*
++	 * Find out how many resources we may release.
++	 */
+ 	for (nr_ns = ldlm_namespace_nr_read(client);
+-	     nr_ns > 0; nr_ns--)
+-        {
++	     nr_ns > 0; nr_ns--) {
+ 		mutex_lock(ldlm_namespace_lock(client));
+-                if (cfs_list_empty(ldlm_namespace_list(client))) {
++		if (list_empty(ldlm_namespace_list(client))) {
+ 			mutex_unlock(ldlm_namespace_lock(client));
+-                        cl_env_reexit(cookie);
+-                        return 0;
+-                }
+-                ns = ldlm_namespace_first_locked(client);
++			cl_env_reexit(cookie);
++			return 0;
++		}
++		ns = ldlm_namespace_first_locked(client);
+ 
+ 		if (ns == ns_old) {
+ 			mutex_unlock(ldlm_namespace_lock(client));
+@@ -1095,57 +1087,117 @@ static int ldlm_pools_shrink(ldlm_side_t client, int nr,
+ 		if (ns_old == NULL)
+ 			ns_old = ns;
+ 
+-                ldlm_namespace_get(ns);
+-                ldlm_namespace_move_to_active_locked(ns, client);
++		ldlm_namespace_get(ns);
++		ldlm_namespace_move_to_active_locked(ns, client);
+ 		mutex_unlock(ldlm_namespace_lock(client));
+-                total += ldlm_pool_shrink(&ns->ns_pool, 0, gfp_mask);
+-                ldlm_namespace_put(ns);
+-        }
++		total += ldlm_pool_shrink(&ns->ns_pool, 0, gfp_mask);
++		ldlm_namespace_put(ns);
++	}
+ 
+-        if (nr == 0 || total == 0) {
+-                cl_env_reexit(cookie);
+-                return total;
+-        }
++	cl_env_reexit(cookie);
++	return total;
++}
+ 
+-        /*
+-         * Shrink at least ldlm_namespace_nr(client) namespaces.
+-         */
+-	for (nr_ns = ldlm_namespace_nr_read(client) - nr_ns;
+-	     nr_ns > 0; nr_ns--)
+-        {
+-		__u64 cancel;
+-		unsigned int nr_locks;
++static unsigned long ldlm_pools_scan(ldlm_side_t client, int nr,
++				     unsigned int gfp_mask)
++{
++	unsigned long freed = 0;
++	int tmp, nr_ns;
++	struct ldlm_namespace *ns;
++	void *cookie;
+ 
+-                /*
+-                 * Do not call shrink under ldlm_namespace_lock(client)
+-                 */
++	if (client == LDLM_NAMESPACE_CLIENT && !(gfp_mask & __GFP_FS))
++		return -1;
++
++	cookie = cl_env_reenter();
++
++	/*
++	 * Shrink at least ldlm_namespace_nr_read(client) namespaces.
++	 */
++	for (tmp = nr_ns = ldlm_namespace_nr_read(client);
++	     tmp > 0; tmp--) {
++		int cancel, nr_locks;
++
++		/*
++		 * Do not call shrink under ldlm_namespace_lock(client)
++		*/
+ 		mutex_lock(ldlm_namespace_lock(client));
+-                if (cfs_list_empty(ldlm_namespace_list(client))) {
++		if (list_empty(ldlm_namespace_list(client))) {
+ 			mutex_unlock(ldlm_namespace_lock(client));
+-                        /*
+-                         * If list is empty, we can't return any @cached > 0,
+-                         * that probably would cause needless shrinker
+-                         * call.
+-                         */
+-                        cached = 0;
+-                        break;
+-                }
+-                ns = ldlm_namespace_first_locked(client);
+-                ldlm_namespace_get(ns);
+-                ldlm_namespace_move_to_active_locked(ns, client);
++			break;
++		}
++		ns = ldlm_namespace_first_locked(client);
++		ldlm_namespace_get(ns);
++		ldlm_namespace_move_to_active_locked(ns, client);
+ 		mutex_unlock(ldlm_namespace_lock(client));
+ 
+-                nr_locks = ldlm_pool_granted(&ns->ns_pool);
+-		cancel = (__u64)nr_locks * nr;
+-		do_div(cancel, total);
+-		ldlm_pool_shrink(&ns->ns_pool, 1 + cancel, gfp_mask);
+-                cached += ldlm_pool_granted(&ns->ns_pool);
+-                ldlm_namespace_put(ns);
+-        }
+-        cl_env_reexit(cookie);
+-        /* we only decrease the SLV in server pools shrinker, return -1 to
+-         * kernel to avoid needless loop. LU-1128 */
+-        return (client == LDLM_NAMESPACE_SERVER) ? -1 : cached;
++		nr_locks = ldlm_pool_granted(&ns->ns_pool);
++		/*
++		 * We use to shrink propotionally but with new shrinker API,
++		 * we lost the total number of freeable locks.
++		 */
++		cancel = 1 + min_t(int, nr_locks, nr / nr_ns);
++		freed += ldlm_pool_shrink(&ns->ns_pool, cancel, gfp_mask);
++		ldlm_namespace_put(ns);
++	}
++	cl_env_reexit(cookie);
++	/*
++	 * we only decrease the SLV in server pools shrinker, return
++	 * SHRINK_STOP to kernel to avoid needless loop. LU-1128
++	 */
++	return (client == LDLM_NAMESPACE_SERVER) ? SHRINK_STOP : freed;
++}
++
++#ifdef HAVE_SHRINKER_COUNT
++static unsigned long ldlm_pools_srv_count(struct shrinker *s,
++					  struct shrink_control *sc)
++{
++	return ldlm_pools_count(LDLM_NAMESPACE_SERVER, sc->gfp_mask);
++}
++
++static unsigned long ldlm_pools_srv_scan(struct shrinker *s,
++					 struct shrink_control *sc)
++{
++	return ldlm_pools_scan(LDLM_NAMESPACE_SERVER, sc->nr_to_scan,
++			       sc->gfp_mask);
++}
++
++static unsigned long ldlm_pools_cli_count(struct shrinker *s, struct shrink_control *sc)
++{
++	return ldlm_pools_count(LDLM_NAMESPACE_CLIENT, sc->gfp_mask);
++}
++
++static unsigned long ldlm_pools_cli_scan(struct shrinker *s,
++					 struct shrink_control *sc)
++{
++	return ldlm_pools_scan(LDLM_NAMESPACE_CLIENT, sc->nr_to_scan,
++			       sc->gfp_mask);
++}
++
++#else
++/*
++ * Cancel \a nr locks from all namespaces (if possible). Returns number of
++ * cached locks after shrink is finished. All namespaces are asked to
++ * cancel approximately equal amount of locks to keep balancing.
++ */
++static int ldlm_pools_shrink(ldlm_side_t client, int nr,
++			     unsigned int gfp_mask)
++{
++	unsigned int total = 0;
++
++	if (client == LDLM_NAMESPACE_CLIENT && nr != 0 &&
++	    !(gfp_mask & __GFP_FS))
++		return -1;
++
++	CDEBUG(D_DLMTRACE, "Request to shrink %d %s locks from all pools\n",
++	       nr, client == LDLM_NAMESPACE_CLIENT ? "client" : "server");
++
++	total = ldlm_pools_count(client, gfp_mask);
++
++	if (nr == 0 || total == 0)
++		return total;
++
++	return ldlm_pools_scan(client, nr, gfp_mask);
+ }
+ 
+ static int ldlm_pools_srv_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
+@@ -1162,6 +1214,8 @@ static int ldlm_pools_cli_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
+                                  shrink_param(sc, gfp_mask));
+ }
+ 
++#endif /* HAVE_SHRINKER_COUNT */
++
+ int ldlm_pools_recalc(ldlm_side_t client)
+ {
+         __u32 nr_l = 0, nr_p = 0, l;
+@@ -1418,16 +1472,18 @@ static void ldlm_pools_thread_stop(void)
+ int ldlm_pools_init(void)
+ {
+ 	int rc;
++	DEF_SHRINKER_VAR(shsvar, ldlm_pools_srv_shrink,
++			 ldlm_pools_srv_count, ldlm_pools_srv_scan);
++	DEF_SHRINKER_VAR(shcvar, ldlm_pools_cli_shrink,
++			 ldlm_pools_cli_count, ldlm_pools_cli_scan);
+ 	ENTRY;
+ 
+ 	rc = ldlm_pools_thread_start();
+ 	if (rc == 0) {
+ 		ldlm_pools_srv_shrinker =
+-			set_shrinker(DEFAULT_SEEKS,
+-					 ldlm_pools_srv_shrink);
++			set_shrinker(DEFAULT_SEEKS, &shsvar);
+ 		ldlm_pools_cli_shrinker =
+-			set_shrinker(DEFAULT_SEEKS,
+-					 ldlm_pools_cli_shrink);
++			set_shrinker(DEFAULT_SEEKS, &shcvar);
+ 	}
+ 	RETURN(rc);
+ }
+diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c
+index 1304e95..0850b2a 100644
+--- a/lustre/obdclass/lu_object.c
++++ b/lustre/obdclass/lu_object.c
+@@ -1884,6 +1884,69 @@ static void lu_site_stats_get(cfs_hash_t *hs,
+ 
+ #ifdef __KERNEL__
+ 
++static unsigned long lu_cache_shrink_count(struct shrinker *sk,
++					   struct shrink_control *sc)
++{
++	lu_site_stats_t stats;
++	struct lu_site *s;
++	struct lu_site *tmp;
++	unsigned long cached = 0;
++
++	if (!(sc->gfp_mask & __GFP_FS))
++		return 0;
++
++	mutex_lock(&lu_sites_guard);
++	list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
++		memset(&stats, 0, sizeof(stats));
++		lu_site_stats_get(s->ls_obj_hash, &stats, 0);
++		cached += stats.lss_total - stats.lss_busy;
++	}
++	mutex_unlock(&lu_sites_guard);
++
++	cached = (cached / 100) * sysctl_vfs_cache_pressure;
++	CDEBUG(D_INODE, "%ld objects cached\n", cached);
++	return cached;
++}
++
++static unsigned long lu_cache_shrink_scan(struct shrinker *sk,
++					  struct shrink_control *sc)
++{
++	struct lu_site *s;
++	struct lu_site *tmp;
++	unsigned long remain = sc->nr_to_scan, freed = 0;
++	LIST_HEAD(splice);
++
++	if (!(sc->gfp_mask & __GFP_FS))
++		/* We must not take the lu_sites_guard lock when
++		 * __GFP_FS is *not* set because of the deadlock
++		 * possibility detailed above. Additionally,
++		 * since we cannot determine the number of
++		 * objects in the cache without taking this
++		 * lock, we're in a particularly tough spot. As
++		 * a result, we'll just lie and say our cache is
++		 * empty. This _should_ be ok, as we can't
++		 * reclaim objects when __GFP_FS is *not* set
++		 * anyways.
++		 */
++		return SHRINK_STOP;
++
++	mutex_lock(&lu_sites_guard);
++	list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
++		freed = lu_site_purge(&lu_shrink_env, s, remain);
++		remain -= freed;
++		/*
++		 * Move just shrunk site to the tail of site list to
++		 * assure shrinking fairness.
++		 */
++		list_move_tail(&s->ls_linkage, &splice);
++	}
++	list_splice(&splice, lu_sites.prev);
++	mutex_unlock(&lu_sites_guard);
++
++	return sc->nr_to_scan - remain;
++}
++
++#ifndef HAVE_SHRINKER_COUNT
+ /*
+  * There exists a potential lock inversion deadlock scenario when using
+  * Lustre on top of ZFS. This occurs between one of ZFS's
+@@ -1904,59 +1967,29 @@ static void lu_site_stats_get(cfs_hash_t *hs,
+  */
+ static int lu_cache_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
+ {
+-        lu_site_stats_t stats;
+-        struct lu_site *s;
+-        struct lu_site *tmp;
+         int cached = 0;
+-        int remain = shrink_param(sc, nr_to_scan);
+-        CFS_LIST_HEAD(splice);
+-
+-	if (!(shrink_param(sc, gfp_mask) & __GFP_FS)) {
+-		if (remain != 0)
+-                        return -1;
+-		else
+-			/* We must not take the lu_sites_guard lock when
+-			 * __GFP_FS is *not* set because of the deadlock
+-			 * possibility detailed above. Additionally,
+-			 * since we cannot determine the number of
+-			 * objects in the cache without taking this
+-			 * lock, we're in a particularly tough spot. As
+-			 * a result, we'll just lie and say our cache is
+-			 * empty. This _should_ be ok, as we can't
+-			 * reclaim objects when __GFP_FS is *not* set
+-			 * anyways.
+-			 */
+-			return 0;
+-        }
++	struct shrink_control scv = {
++		 .nr_to_scan = shrink_param(sc, nr_to_scan),
++		 .gfp_mask   = shrink_param(sc, gfp_mask)
++	};
++#if !defined(HAVE_SHRINKER_WANT_SHRINK_PTR) && !defined(HAVE_SHRINK_CONTROL)
++	struct shrinker* shrinker = NULL;
++#endif
+ 
+-	CDEBUG(D_INODE, "Shrink %d objects\n", remain);
+ 
+-	mutex_lock(&lu_sites_guard);
+-        cfs_list_for_each_entry_safe(s, tmp, &lu_sites, ls_linkage) {
+-                if (shrink_param(sc, nr_to_scan) != 0) {
+-                        remain = lu_site_purge(&lu_shrink_env, s, remain);
+-                        /*
+-                         * Move just shrunk site to the tail of site list to
+-                         * assure shrinking fairness.
+-                         */
+-                        cfs_list_move_tail(&s->ls_linkage, &splice);
+-                }
++	CDEBUG(D_INODE, "Shrink %lu objects\n", scv.nr_to_scan);
+ 
+-                memset(&stats, 0, sizeof(stats));
+-                lu_site_stats_get(s->ls_obj_hash, &stats, 0);
+-                cached += stats.lss_total - stats.lss_busy;
+-                if (shrink_param(sc, nr_to_scan) && remain <= 0)
+-                        break;
+-        }
+-        cfs_list_splice(&splice, lu_sites.prev);
+-	mutex_unlock(&lu_sites_guard);
++	lu_cache_shrink_scan(shrinker, &scv);
+ 
+-        cached = (cached / 100) * sysctl_vfs_cache_pressure;
+-        if (shrink_param(sc, nr_to_scan) == 0)
+-                CDEBUG(D_INODE, "%d objects cached\n", cached);
+-        return cached;
++	cached = lu_cache_shrink_count(shrinker, &scv);
++	if (scv.nr_to_scan == 0)
++		CDEBUG(D_INODE, "%d objects cached\n", cached);
++	return cached;
+ }
+ 
++#endif /* HAVE_SHRINKER_COUNT */
++
++
+ /*
+  * Debugging stuff.
+  */
+@@ -2005,11 +2038,6 @@ void lu_context_keys_dump(void)
+         }
+ }
+ EXPORT_SYMBOL(lu_context_keys_dump);
+-#else  /* !__KERNEL__ */
+-static int lu_cache_shrink(int nr, unsigned int gfp_mask)
+-{
+-        return 0;
+-}
+ #endif /* __KERNEL__ */
+ 
+ /**
+@@ -2018,6 +2046,8 @@ static int lu_cache_shrink(int nr, unsigned int gfp_mask)
+ int lu_global_init(void)
+ {
+         int result;
++	DEF_SHRINKER_VAR(shvar, lu_cache_shrink,
++			 lu_cache_shrink_count, lu_cache_shrink_scan);
+ 
+         CDEBUG(D_INFO, "Lustre LU module (%p).\n", &lu_keys);
+ 
+@@ -2046,7 +2076,7 @@ int lu_global_init(void)
+          * inode, one for ea. Unfortunately setting this high value results in
+          * lu_object/inode cache consuming all the memory.
+          */
+-	lu_site_shrinker = set_shrinker(DEFAULT_SEEKS, lu_cache_shrink);
++	lu_site_shrinker = set_shrinker(DEFAULT_SEEKS, &shvar);
+         if (lu_site_shrinker == NULL)
+                 return -ENOMEM;
+ 
+diff --git a/lustre/ptlrpc/sec_bulk.c b/lustre/ptlrpc/sec_bulk.c
+index 0601486..9d970f20 100644
+--- a/lustre/ptlrpc/sec_bulk.c
++++ b/lustre/ptlrpc/sec_bulk.c
+@@ -232,30 +232,46 @@ static void enc_pools_release_free_pages(long npages)
+ }
+ 
+ /*
+- * could be called frequently for query (@nr_to_scan == 0).
+  * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
+  */
+-static int enc_pools_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
++static unsigned long enc_pools_shrink_count(struct shrinker *s,
++					    struct shrink_control *sc)
+ {
+-	if (unlikely(shrink_param(sc, nr_to_scan) != 0)) {
++	/*
++	 * if no pool access for a long time, we consider it's fully idle.
++	 * a little race here is fine.
++	 */
++	if (unlikely(cfs_time_current_sec() - page_pools.epp_last_access >
++		     CACHE_QUIESCENT_PERIOD)) {
+ 		spin_lock(&page_pools.epp_lock);
+-                shrink_param(sc, nr_to_scan) = min_t(unsigned long,
+-                                                   shrink_param(sc, nr_to_scan),
+-                                                   page_pools.epp_free_pages -
+-                                                   PTLRPC_MAX_BRW_PAGES);
+-                if (shrink_param(sc, nr_to_scan) > 0) {
+-                        enc_pools_release_free_pages(shrink_param(sc,
+-                                                                  nr_to_scan));
+-                        CDEBUG(D_SEC, "released %ld pages, %ld left\n",
+-                               (long)shrink_param(sc, nr_to_scan),
+-                               page_pools.epp_free_pages);
+-
+-                        page_pools.epp_st_shrinks++;
+-                        page_pools.epp_last_shrink = cfs_time_current_sec();
+-                }
++		page_pools.epp_idle_idx = IDLE_IDX_MAX;
+ 		spin_unlock(&page_pools.epp_lock);
+ 	}
+ 
++	LASSERT(page_pools.epp_idle_idx <= IDLE_IDX_MAX);
++	return max((int)page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES, 0) *
++		(IDLE_IDX_MAX - page_pools.epp_idle_idx) / IDLE_IDX_MAX;
++}
++
++/*
++ * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
++ */
++static unsigned long enc_pools_shrink_scan(struct shrinker *s,
++					   struct shrink_control *sc)
++{
++	spin_lock(&page_pools.epp_lock);
++	sc->nr_to_scan = min_t(unsigned long, sc->nr_to_scan,
++			      page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES);
++	if (sc->nr_to_scan > 0) {
++		enc_pools_release_free_pages(sc->nr_to_scan);
++		CDEBUG(D_SEC, "released %ld pages, %ld left\n",
++		       (long)sc->nr_to_scan, page_pools.epp_free_pages);
++
++		page_pools.epp_st_shrinks++;
++		page_pools.epp_last_shrink = cfs_time_current_sec();
++	}
++	spin_unlock(&page_pools.epp_lock);
++
+ 	/*
+ 	 * if no pool access for a long time, we consider it's fully idle.
+ 	 * a little race here is fine.
+@@ -268,10 +284,31 @@ static int enc_pools_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
+ 	}
+ 
+ 	LASSERT(page_pools.epp_idle_idx <= IDLE_IDX_MAX);
+-	return max((int)page_pools.epp_free_pages - PTLRPC_MAX_BRW_PAGES, 0) *
+-		(IDLE_IDX_MAX - page_pools.epp_idle_idx) / IDLE_IDX_MAX;
++	return sc->nr_to_scan;
++}
++
++#ifndef HAVE_SHRINKER_COUNT
++/*
++ * could be called frequently for query (@nr_to_scan == 0).
++ * we try to keep at least PTLRPC_MAX_BRW_PAGES pages in the pool.
++ */
++static int enc_pools_shrink(SHRINKER_ARGS(sc, nr_to_scan, gfp_mask))
++{
++	struct shrink_control scv = {
++		.nr_to_scan = shrink_param(sc, nr_to_scan),
++		.gfp_mask   = shrink_param(sc, gfp_mask)
++	};
++#if !defined(HAVE_SHRINKER_WANT_SHRINK_PTR) && !defined(HAVE_SHRINK_CONTROL)
++	struct shrinker* shrinker = NULL;
++#endif
++
++	enc_pools_shrink_scan(shrinker, &scv);
++
++	return enc_pools_shrink_count(shrinker, &scv);
+ }
+ 
++#endif /* HAVE_SHRINKER_COUNT */
++
+ static inline
+ int npages_to_npools(unsigned long npages)
+ {
+@@ -706,6 +743,8 @@ static inline void enc_pools_free(void)
+ 
+ int sptlrpc_enc_pool_init(void)
+ {
++	DEF_SHRINKER_VAR(shvar, enc_pools_shrink,
++			 enc_pools_shrink_count, enc_pools_shrink_scan);
+ 	/*
+ 	 * maximum capacity is 1/8 of total physical memory.
+ 	 * is the 1/8 a good number?
+@@ -741,8 +780,7 @@ int sptlrpc_enc_pool_init(void)
+         if (page_pools.epp_pools == NULL)
+                 return -ENOMEM;
+ 
+-	pools_shrinker = set_shrinker(pools_shrinker_seeks,
+-                                          enc_pools_shrink);
++	pools_shrinker = set_shrinker(pools_shrinker_seeks, &shvar);
+         if (pools_shrinker == NULL) {
+                 enc_pools_free();
+                 return -ENOMEM;
+-- 
+1.9.1
+

diff --git a/sys-cluster/lustre/files/lustre-readline6.3_fix.patch b/sys-cluster/lustre/files/lustre-readline6.3_fix.patch
new file mode 100644
index 0000000..50384d6
--- /dev/null
+++ b/sys-cluster/lustre/files/lustre-readline6.3_fix.patch
@@ -0,0 +1,13 @@
+diff --git a/libcfs/libcfs/util/parser.c b/libcfs/libcfs/util/parser.c
+index f395fa3..3fc0373 100644
+--- a/libcfs/libcfs/util/parser.c
++++ b/libcfs/libcfs/util/parser.c
+@@ -308,7 +308,7 @@ int init_input()
+                 rl_deprep_term_function = (rl_voidfunc_t *)noop_fn;
+         }
+ 
+-        rl_attempted_completion_function = (CPPFunction *)command_completion;
++        rl_attempted_completion_function = (rl_completion_func_t *)command_completion;
+         rl_completion_entry_function = (void *)command_generator;
+ #endif
+         return interactive;

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index c4de667..50587cc 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -42,6 +42,8 @@ PATCHES=(
 	"${FILESDIR}/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
 	"${FILESDIR}/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
 	"${FILESDIR}/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
+	"${FILESDIR}/0010-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch"
+	"${FILESDIR}/lustre-readline6.3_fix.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-04-02 10:50 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-04-02 10:50 UTC (permalink / raw
  To: gentoo-commits

commit:     43571edfe360d4cbbf44cf273b8da80c9c3ba80e
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Apr  2 10:49:58 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Apr  2 10:49:58 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=43571edf

Lustre need more patches

Package-Manager: portage-2.2.10
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   22 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |   95 --
 .../0001-LU-3319-procfs-fix-symlink-handling.patch | 1132 ++++++++++++++++++++
 ...cfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch |  123 +++
 ...fs-update-zfs-proc-handling-to-seq_files.patch} |   67 +-
 .../0004-LU-3319-procfs-fix-symlink-handling.patch |  371 -------
 ...ocfs-move-mgs-proc-handling-to-seq_files.patch} |   22 +-
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |  192 ++--
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |  200 ++--
 ...fs-move-mdt-mds-proc-handling-to-seq_fil.patch} |  215 ++--
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} |  455 +++++---
 ...cfs-update-ldiskfs-proc-handling-to-seq_f.patch |  204 ++--
 ...0010-LU-3319-lprocfs-client-side-cleanups.patch |  463 --------
 ...-LU-3974-llite-use-new-struct-dir_context.patch |  254 -----
 ...-LU-3974-llite-invalidatepage-api-changed.patch |  134 ---
 sys-cluster/lustre/lustre-9999.ebuild              |   15 +-
 16 files changed, 2028 insertions(+), 1936 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 73299e5..6b3ecb1 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,28 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  02 Apr 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-3319-procfs-fix-symlink-handling.patch,
+  +files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch,
+  +files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  +files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  +files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  -files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  -files/0004-LU-3319-procfs-fix-symlink-handling.patch,
+  -files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  -files/0010-LU-3319-lprocfs-client-side-cleanups.patch,
+  -files/0011-LU-3974-llite-use-new-struct-dir_context.patch,
+  -files/0012-LU-3974-llite-invalidatepage-api-changed.patch,
+  files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  lustre-9999.ebuild:
+  Lustre need more patches
+
   27 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
   files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
deleted file mode 100644
index 63fcb0a..0000000
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ /dev/null
@@ -1,95 +0,0 @@
-From f384f155612fb8b3fa6a12c4c969e29629f82027 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox
- friendly
-
-this commit makes AC check for linux kernel arch sandbox friendly
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: I173cd892bca5587519806cf6d300a5053dfb935f
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
----
- config/lustre-build-linux.m4 | 66 ++++++++++++++++++++++++++++++++++++++------
- 1 file changed, 58 insertions(+), 8 deletions(-)
-
-diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index 894101c..8062ace 100644
---- a/config/lustre-build-linux.m4
-+++ b/config/lustre-build-linux.m4
-@@ -394,14 +394,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
- # Determine the kernel's idea of the current architecture
- #
- AC_DEFUN([LB_LINUX_ARCH],
--         [AC_MSG_CHECKING([Linux kernel architecture])
--          AS_IF([rm -f $PWD/build/arch
--                 make -s --no-print-directory echoarch -f $PWD/build/Makefile \
--                     LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -C $LINUX $CROSS_VARS  \
--                     ARCHFILE=$PWD/build/arch && LINUX_ARCH=`cat $PWD/build/arch`],
--                [AC_MSG_RESULT([$LINUX_ARCH])],
--                [AC_MSG_ERROR([Could not determine the kernel architecture.])])
--          rm -f build/arch])
-+[LINUXARCH=
-+rm -f build/conftest.i
-+AC_MSG_CHECKING([Linux kernel architecture])
-+if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/compile.h ; then
-+	LINUXARCHHEADER=$AUTOCONF_HDIR/compile.h
-+else
-+	LINUXARCHHEADER=linux/autoconf.h
-+fi
-+LB_LINUX_TRY_MAKE([
-+#include <$LINUXARCHHEADER>
-+
-+#ifndef UTS_MACHINE
-+
-+ #ifdef CONFIG_X86
-+  #ifdef CONFIG_X86_32
-+   #define UTS_MACHINE i386
-+  #endif
-+  #ifdef CONFIG_X86_64
-+   #define UTS_MACHINE x86_64
-+  #endif
-+ #endif
-+
-+ #ifdef CONFIG_IA64
-+  #define UTS_MACHINE ia64
-+ #endif
-+
-+ #ifdef CONFIG_PPC
-+  #ifdef CONFIG_PPC32
-+   #define UTS_MACHINE ppc
-+  #endif
-+  #ifdef CONFIG_PPC64
-+   #define UTS_MACHINE ppc64
-+  #endif
-+ #endif
-+
-+#endif
-+],[
-+	char *LINUXARCH;
-+	LINUXARCH=UTS_MACHINE;
-+],[
-+	$makerule LUSTRE_KERNEL_TEST=conftest.i
-+],[
-+	test -s build/conftest.i
-+],[
-+	# LINUXARCH="UTS_MACHINE"
-+	eval $(grep "LINUXARCH=" build/conftest.i)
-+],[
-+	AC_MSG_RESULT([unknown])
-+	AC_MSG_ERROR([Could not preprocess test program.  Consult config.log for details.])
-+])
-+	rm -f build/conftest.i
-+	if test x$LINUXARCH = x ; then
-+		AC_MSG_RESULT([unknown])
-+		AC_MSG_ERROR([Could not determine Linux architecture from linux/version.h.])
-+	fi
-+AC_MSG_RESULT([$LINUXARCH])
-+AC_SUBST(LINUXARCH)
-+])
- 
- #
- # LB_LINUX_TRY_COMPILE
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
new file mode 100644
index 0000000..d0b6e9c
--- /dev/null
+++ b/sys-cluster/lustre/files/0001-LU-3319-procfs-fix-symlink-handling.patch
@@ -0,0 +1,1132 @@
+From 4c418e7208a62c7bb7d61c1f97cf300675215bd4 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Fri, 28 Mar 2014 11:19:07 -0400
+Subject: [PATCH 1/9] LU-3319 procfs: fix symlink handling
+
+While working on symlink handling for seq files I noticed a
+long outstanding bug. Code was developed to link osc obds
+to target_obds of the lov layer. The target_obds directory
+was never created for the symlinks. This patch enables this
+long forgotten feature. Also addressed is the race condition
+experinced with server side code ported to seq_files that
+used symlinks. To avoid the race the handle obd_proc_private
+was moved from struct obd_device to struct obd_type which
+now allows earlier registeration that only happens once.
+The second problem addressed is the module loading race.
+Several modules share the same top proc directory entry which
+can become a issue if a client exist on a server node since
+the linux proc system allows multiple directories of the same
+name. Original Lustre had a lprocfs_srch but that doesn't
+work if you use the kernels internal cache for the proc
+system so you need to keep track of who grabs the proc root
+first and then use the first one registered for when the
+next module loads.
+
+Change-Id: Ib158ec4444ed7abc0f3c3e820ee4a333631a58d1
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+---
+ lustre/include/lprocfs_status.h  |   4 +-
+ lustre/include/obd.h             |  17 +++--
+ lustre/include/obd_class.h       |   5 +-
+ lustre/lmv/lmv_obd.c             |  65 +++++-----------
+ lustre/lod/lod_dev.c             |  28 +++----
+ lustre/lov/lov_obd.c             | 156 ++++++++++++++++++++++++---------------
+ lustre/mdc/mdc_request.c         |   6 +-
+ lustre/mdd/mdd_device.c          |   6 +-
+ lustre/mdt/mdt_handler.c         |   6 +-
+ lustre/mdt/mdt_mds.c             |   6 +-
+ lustre/mgc/libmgc.c              |   6 +-
+ lustre/mgc/mgc_request.c         |   6 +-
+ lustre/mgs/mgs_handler.c         |   6 +-
+ lustre/obdclass/genops.c         |  55 ++++++++------
+ lustre/obdclass/llog_test.c      |   6 +-
+ lustre/obdclass/lprocfs_status.c |   1 -
+ lustre/obdecho/echo_client.c     |  10 +--
+ lustre/ofd/ofd_dev.c             |   6 +-
+ lustre/osc/osc_request.c         |  49 +++++++++---
+ lustre/osd-ldiskfs/osd_handler.c |   6 +-
+ lustre/osd-zfs/osd_handler.c     |   6 +-
+ lustre/osp/osp_dev.c             |  33 +++++----
+ lustre/ost/ost_handler.c         |   6 +-
+ lustre/quota/qmt_dev.c           |   6 +-
+ 24 files changed, 277 insertions(+), 224 deletions(-)
+
+diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h
+index 978b10c..0d6fd4c 100644
+--- a/lustre/include/lprocfs_status.h
++++ b/lustre/include/lprocfs_status.h
+@@ -1145,12 +1145,10 @@ static inline int lprocfs_seq_add_vars(cfs_proc_dir_entry_t *root,
+ 				       struct lprocfs_seq_vars *var,
+ 				       void *data)
+ { return 0; }
+-#ifndef HAVE_ONLY_PROCFS_SEQ
+ static inline cfs_proc_dir_entry_t *
+ lprocfs_seq_register(const char *name, cfs_proc_dir_entry_t *parent,
+-		     struct lprocfs_vars *list, void *data)
++		     struct lprocfs_seq_vars *list, void *data)
+ { return NULL; }
+-#endif
+ static inline void lprocfs_remove(cfs_proc_dir_entry_t **root)
+ { return; }
+ static inline void lprocfs_remove_proc_entry(const char *name,
+diff --git a/lustre/include/obd.h b/lustre/include/obd.h
+index bb67e43..5353524 100644
+--- a/lustre/include/obd.h
++++ b/lustre/include/obd.h
+@@ -190,13 +190,15 @@ struct obd_info {
+ };
+ 
+ struct obd_type {
+-        cfs_list_t typ_chain;
+-        struct obd_ops *typ_dt_ops;
+-        struct md_ops *typ_md_ops;
+-        cfs_proc_dir_entry_t *typ_procroot;
+-        char *typ_name;
+-        int  typ_refcnt;
+-        struct lu_device_type *typ_lu;
++	struct list_head typ_chain;
++	struct obd_ops *typ_dt_ops;
++	struct md_ops *typ_md_ops;
++	struct proc_dir_entry *typ_procroot;
++	struct proc_dir_entry *typ_procsym;
++	__u32 typ_sym_filter;
++	char *typ_name;
++	int  typ_refcnt;
++	struct lu_device_type *typ_lu;
+ 	spinlock_t obd_type_lock;
+ };
+ 
+@@ -834,7 +836,6 @@ struct obd_device {
+ 
+ 	struct proc_dir_entry	*obd_proc_entry;
+ 	struct proc_dir_entry	*obd_proc_exports_entry;
+-	void			*obd_proc_private;	/* type private PDEs */
+ 	struct proc_dir_entry	*obd_svc_procroot;
+ 	struct lprocfs_stats	*obd_svc_stats;
+ 	struct lprocfs_seq_vars	*obd_vars;
+diff --git a/lustre/include/obd_class.h b/lustre/include/obd_class.h
+index aeb94ba..5de7cd7 100644
+--- a/lustre/include/obd_class.h
++++ b/lustre/include/obd_class.h
+@@ -86,13 +86,12 @@ struct lu_device_type;
+ 
+ /* genops.c */
+ struct obd_export *class_conn2export(struct lustre_handle *);
+-int class_register_type(struct obd_ops *, struct md_ops *,
++int class_register_type(struct obd_ops *, struct md_ops *, bool enable_proc,
+ 			struct lprocfs_seq_vars *module_vars,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ 			struct lprocfs_vars *,
+ #endif
+-			const char *nm,
+-			struct lu_device_type *ldt);
++			const char *nm, struct lu_device_type *ldt);
+ int class_unregister_type(const char *nm);
+ 
+ struct obd_device *class_newdev(const char *type_name, const char *name);
+diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
+index 8f26e6c..cd16eaf 100644
+--- a/lustre/lmv/lmv_obd.c
++++ b/lustre/lmv/lmv_obd.c
+@@ -270,9 +270,6 @@ static int lmv_connect(const struct lu_env *env,
+                        struct obd_uuid *cluuid, struct obd_connect_data *data,
+                        void *localdata)
+ {
+-#ifdef __KERNEL__
+-        struct proc_dir_entry *lmv_proc_dir;
+-#endif
+         struct lmv_obd        *lmv = &obd->u.lmv;
+         struct lustre_handle  conn = { 0 };
+         int                    rc = 0;
+@@ -304,21 +301,16 @@ static int lmv_connect(const struct lu_env *env,
+         if (data)
+                 lmv->conn_data = *data;
+ 
+-#ifdef __KERNEL__
+-	if (obd->obd_proc_private != NULL) {
+-		lmv_proc_dir = obd->obd_proc_private;
+-	} else {
+-		lmv_proc_dir = lprocfs_seq_register("target_obds",
+-						    obd->obd_proc_entry,
+-						    NULL, NULL);
+-		if (IS_ERR(lmv_proc_dir)) {
++	if (obd->obd_type->typ_procsym == NULL) {
++		obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
++							 obd->obd_proc_entry,
++							 NULL, NULL);
++		if (IS_ERR(obd->obd_type->typ_procsym)) {
+ 			CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
+ 			       obd->obd_type->typ_name, obd->obd_name);
+-			lmv_proc_dir = NULL;
++			obd->obd_type->typ_procsym = NULL;
+ 		}
+-		obd->obd_proc_private = lmv_proc_dir;
+ 	}
+-#endif
+ 
+         /*
+          * All real clients should perform actual connection right away, because
+@@ -329,12 +321,8 @@ static int lmv_connect(const struct lu_env *env,
+ 	if (data != NULL && (data->ocd_connect_flags & OBD_CONNECT_REAL))
+                 rc = lmv_check_connect(obd);
+ 
+-#ifdef __KERNEL__
+-	if (rc && lmv_proc_dir) {
+-		lprocfs_remove(&lmv_proc_dir);
+-		obd->obd_proc_private = NULL;
+-	}
+-#endif
++	if (rc && obd->obd_type->typ_procsym != NULL)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
+         RETURN(rc);
+ }
+ 
+@@ -416,9 +404,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
+ 
+ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ {
+-#ifdef __KERNEL__
+-        struct proc_dir_entry   *lmv_proc_dir;
+-#endif
+         struct lmv_obd          *lmv = &obd->u.lmv;
+         struct obd_uuid         *cluuid = &lmv->cluuid;
+         struct obd_uuid          lmv_mdc_uuid = { "LMV_MDC_UUID" };
+@@ -497,15 +482,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ 		mdc_obd->obd_name, mdc_obd->obd_uuid.uuid,
+ 		atomic_read(&obd->obd_refcount));
+ 
+-#ifdef __KERNEL__
+-	lmv_proc_dir = obd->obd_proc_private;
+-	if (lmv_proc_dir) {
++	if (obd->obd_type->typ_procsym != NULL) {
+ 		struct proc_dir_entry *mdc_symlink;
+ 
+ 		LASSERT(mdc_obd->obd_type != NULL);
+ 		LASSERT(mdc_obd->obd_type->typ_name != NULL);
+ 		mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
+-						  lmv_proc_dir,
++						  obd->obd_type->typ_procsym,
+ 						  "../../../%s/%s",
+ 						  mdc_obd->obd_type->typ_name,
+ 						  mdc_obd->obd_name);
+@@ -514,11 +497,9 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ 			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
+ 			       obd->obd_type->typ_name, obd->obd_name,
+ 			       mdc_obd->obd_name);
+-			lprocfs_remove(&lmv_proc_dir);
+-			obd->obd_proc_private = NULL;
++			lprocfs_remove(&obd->obd_type->typ_procsym);
+ 		}
+ 	}
+-#endif
+ 	RETURN(0);
+ }
+ 
+@@ -706,9 +687,6 @@ int lmv_check_connect(struct obd_device *obd)
+ 
+ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ {
+-#ifdef __KERNEL__
+-        struct proc_dir_entry  *lmv_proc_dir;
+-#endif
+         struct lmv_obd         *lmv = &obd->u.lmv;
+         struct obd_device      *mdc_obd;
+         int                     rc;
+@@ -725,11 +703,10 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+                 mdc_obd->obd_no_recov = obd->obd_no_recov;
+         }
+ 
+-#ifdef __KERNEL__
+-	lmv_proc_dir = obd->obd_proc_private;
+-	if (lmv_proc_dir)
+-		lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
+-#endif
++	if (obd->obd_type->typ_procsym != NULL)
++		lprocfs_remove_proc_entry(mdc_obd->obd_name,
++					  obd->obd_type->typ_procsym);
++
+ 	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
+ 	if (rc)
+ 		CERROR("Can't finanize fids factory\n");
+@@ -777,13 +754,11 @@ static int lmv_disconnect(struct obd_export *exp)
+ 		lmv_disconnect_mdc(obd, lmv->tgts[i]);
+         }
+ 
+-#ifdef __KERNEL__
+-	if (obd->obd_proc_private)
+-		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
++	if (obd->obd_type->typ_procsym != NULL)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
+ 	else
+ 		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
+ 		       obd->obd_type->typ_name, obd->obd_name);
+-#endif
+ 
+ out_local:
+         /*
+@@ -3423,11 +3398,11 @@ struct md_ops lmv_md_ops = {
+ 
+ int __init lmv_init(void)
+ {
+-	return class_register_type(&lmv_obd_ops, &lmv_md_ops, NULL,
++	return class_register_type(&lmv_obd_ops, &lmv_md_ops, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					NULL,
++				   NULL,
+ #endif
+-					LUSTRE_LMV_NAME, NULL);
++				   LUSTRE_LMV_NAME, NULL);
+ }
+ 
+ #ifdef __KERNEL__
+diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
+index 1d4849f..a653d6a 100644
+--- a/lustre/lod/lod_dev.c
++++ b/lustre/lod/lod_dev.c
+@@ -892,8 +892,8 @@ static struct obd_ops lod_obd_device_ops = {
+ static int __init lod_mod_init(void)
+ {
+ 	struct lprocfs_static_vars  lvars = { 0 };
+-	cfs_proc_dir_entry_t       *lov_proc_dir;
+-	int			    rc;
++	struct obd_type	*type;
++	int rc;
+ 
+ 	rc = lu_kmem_init(lod_caches);
+ 	if (rc)
+@@ -901,32 +901,32 @@ static int __init lod_mod_init(void)
+ 
+ 	lprocfs_lod_init_vars(&lvars);
+ 
+-	rc = class_register_type(&lod_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&lod_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				 lvars.module_vars,
+ #endif
+-				LUSTRE_LOD_NAME, &lod_device_type);
++				 LUSTRE_LOD_NAME, &lod_device_type);
+ 	if (rc) {
+ 		lu_kmem_fini(lod_caches);
+ 		return rc;
+ 	}
+ 
+ 	/* create "lov" entry in procfs for compatibility purposes */
+-	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
+-	if (lov_proc_dir == NULL) {
+-		lov_proc_dir = lprocfs_register("lov", proc_lustre_root,
+-						NULL, NULL);
+-		if (IS_ERR(lov_proc_dir))
+-			CERROR("lod: can't create compat entry \"lov\": %d\n",
+-			       (int)PTR_ERR(lov_proc_dir));
+-	}
++	type = class_search_type(LUSTRE_LOV_NAME);
++	if (type != NULL && type->typ_procroot != NULL)
++		return rc;
+ 
++	type = class_search_type(LUSTRE_LOD_NAME);
++	type->typ_procsym = lprocfs_register("lov", proc_lustre_root,
++					     NULL, NULL);
++	if (IS_ERR(type->typ_procsym))
++		CERROR("lod: can't create compat entry \"lov\": %d\n",
++		       (int)PTR_ERR(type->typ_procsym));
+ 	return rc;
+ }
+ 
+ static void __exit lod_mod_exit(void)
+ {
+-
+ 	lprocfs_try_remove_proc_entry("lov", proc_lustre_root);
+ 
+ 	class_unregister_type(LUSTRE_LOD_NAME);
+diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c
+index 9d47ec5..78c11fb 100644
+--- a/lustre/lov/lov_obd.c
++++ b/lustre/lov/lov_obd.c
+@@ -124,19 +124,16 @@ static int lov_notify(struct obd_device *obd, struct obd_device *watched,
+ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
+                     struct obd_connect_data *data)
+ {
+-        struct lov_obd *lov = &obd->u.lov;
+-        struct obd_uuid *tgt_uuid;
+-        struct obd_device *tgt_obd;
+-        static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
+-        struct obd_import *imp;
+-#ifdef __KERNEL__
+-	struct proc_dir_entry *lov_proc_dir;
+-#endif
+-        int rc;
+-        ENTRY;
++	struct lov_obd *lov = &obd->u.lov;
++	struct obd_uuid *tgt_uuid;
++	struct obd_device *tgt_obd;
++	static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
++	struct obd_import *imp;
++	int rc;
++	ENTRY;
+ 
+-        if (!lov->lov_tgts[index])
+-                RETURN(-EINVAL);
++	if (lov->lov_tgts[index] == NULL)
++		RETURN(-EINVAL);
+ 
+         tgt_uuid = &lov->lov_tgts[index]->ltd_uuid;
+         tgt_obd = lov->lov_tgts[index]->ltd_obd;
+@@ -191,32 +188,29 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
+         CDEBUG(D_CONFIG, "Connected tgt idx %d %s (%s) %sactive\n", index,
+                obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in");
+ 
+-#ifdef __KERNEL__
+-	lov_proc_dir = obd->obd_proc_private;
+-        if (lov_proc_dir) {
+-                struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
++	if (obd->obd_type->typ_procsym != NULL) {
+ 		struct proc_dir_entry *osc_symlink;
+-
+-                LASSERT(osc_obd != NULL);
+-                LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
+-                LASSERT(osc_obd->obd_type->typ_name != NULL);
+-
+-                osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
+-                                                  lov_proc_dir,
+-                                                  "../../../%s/%s",
+-                                                  osc_obd->obd_type->typ_name,
+-                                                  osc_obd->obd_name);
+-                if (osc_symlink == NULL) {
+-                        CERROR("could not register LOV target "
+-                                "/proc/fs/lustre/%s/%s/target_obds/%s.",
+-                                obd->obd_type->typ_name, obd->obd_name,
+-                                osc_obd->obd_name);
+-                        lprocfs_remove(&lov_proc_dir);
+-			obd->obd_proc_private = NULL;
++		struct obd_device *osc_obd;
++
++		osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
++
++		LASSERT(osc_obd != NULL);
++		LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
++		LASSERT(osc_obd->obd_type->typ_name != NULL);
++
++		osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
++						  obd->obd_type->typ_procsym,
++						  "../../../%s/%s",
++						  osc_obd->obd_type->typ_name,
++						  osc_obd->obd_name);
++		if (osc_symlink == NULL) {
++			CERROR("could not register LOV target "
++			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
++			       obd->obd_type->typ_name, obd->obd_name,
++			       osc_obd->obd_name);
++			lprocfs_remove(&obd->obd_type->typ_procsym);
+                 }
+         }
+-#endif
+-
+         RETURN(0);
+ }
+ 
+@@ -247,6 +241,15 @@ static int lov_connect(const struct lu_env *env,
+         if (data)
+                 lov->lov_ocd = *data;
+ 
++	obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
++						 obd->obd_proc_entry,
++						 NULL, NULL);
++	if (IS_ERR(obd->obd_type->typ_procsym)) {
++		CERROR("%s: could not register /proc/fs/lustre/%s/%s/target_obds.",
++		       obd->obd_name, obd->obd_type->typ_name, obd->obd_name);
++		obd->obd_type->typ_procsym = NULL;
++	}
++
+         obd_getref(obd);
+         for (i = 0; i < lov->desc.ld_tgt_count; i++) {
+                 tgt = lov->lov_tgts[i];
+@@ -277,7 +280,6 @@ static int lov_connect(const struct lu_env *env,
+ 
+ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
+ {
+-	struct proc_dir_entry *lov_proc_dir;
+         struct lov_obd *lov = &obd->u.lov;
+         struct obd_device *osc_obd;
+         int rc;
+@@ -293,19 +295,19 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
+                 tgt->ltd_exp->exp_obd->obd_inactive = 1;
+         }
+ 
+-	lov_proc_dir = obd->obd_proc_private;
+-	if (lov_proc_dir)
+-		lprocfs_remove_proc_entry(osc_obd->obd_name, lov_proc_dir);
++	if (osc_obd) {
++		/* Pass it on to our clients.
++		 * XXX This should be an argument to disconnect,
++		 * XXX not a back-door flag on the OBD.  Ah well.
++		 */
++		osc_obd->obd_force = obd->obd_force;
++		osc_obd->obd_fail = obd->obd_fail;
++		osc_obd->obd_no_recov = obd->obd_no_recov;
+ 
+-        if (osc_obd) {
+-                /* Pass it on to our clients.
+-                 * XXX This should be an argument to disconnect,
+-                 * XXX not a back-door flag on the OBD.  Ah well.
+-                 */
+-                osc_obd->obd_force = obd->obd_force;
+-                osc_obd->obd_fail = obd->obd_fail;
+-                osc_obd->obd_no_recov = obd->obd_no_recov;
+-        }
++		if (obd->obd_type->typ_procsym)
++			lprocfs_remove_proc_entry(osc_obd->obd_name,
++						  obd->obd_type->typ_procsym);
++	}
+ 
+         obd_register_observer(osc_obd, NULL);
+ 
+@@ -350,6 +352,9 @@ static int lov_disconnect(struct obd_export *exp)
+         }
+         obd_putref(obd);
+ 
++	if (obd->obd_type->typ_procsym)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
++
+ out:
+         rc = class_disconnect(exp); /* bz 9811 */
+         RETURN(rc);
+@@ -779,6 +784,9 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ {
+ 	struct lov_desc *desc;
+ 	struct lov_obd *lov = &obd->u.lov;
++#ifdef LPROCFS
++	struct obd_type *type;
++#endif
+ 	int rc;
+ 	ENTRY;
+ 
+@@ -834,15 +842,41 @@ int lov_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ 
+ #ifdef LPROCFS
+ 	obd->obd_vars = lprocfs_lov_obd_vars;
+-	lprocfs_seq_obd_setup(obd);
+-	rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd", 0444,
+-				&lov_proc_target_fops, obd);
+-	if (rc)
+-		CWARN("Error adding the target_obd file\n");
++	/* If this is true then both client (lov) and server
++	 * (lod) are on the same node. The lod layer if loaded
++	 * first will register the lov proc directory. In that
++	 * case obd->obd_type->typ_procroot will be not set.
++	 * Instead we use type->typ_procsym as the parent. */
++	type = class_search_type(LUSTRE_LOD_NAME);
++	if (type != NULL && type->typ_procsym != NULL) {
++		obd->obd_proc_entry = lprocfs_seq_register(obd->obd_name,
++							   type->typ_procsym,
++							   obd->obd_vars, obd);
++		if (IS_ERR(obd->obd_proc_entry)) {
++			rc = PTR_ERR(obd->obd_proc_entry);
++			CERROR("error %d setting up lprocfs for %s\n", rc,
++			       obd->obd_name);
++			obd->obd_proc_entry = NULL;
++		}
++	} else {
++		rc = lprocfs_seq_obd_setup(obd);
++	}
++
++	if (rc == 0) {
++		rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
++					0444, &lov_proc_target_fops, obd);
++		if (rc)
++			CWARN("Error adding the target_obd file\n");
+ 
+-	lov->lov_pool_proc_entry = lprocfs_seq_register("pools",
++		lov->lov_pool_proc_entry = lprocfs_seq_register("pools",
+ 							obd->obd_proc_entry,
+ 							NULL, NULL);
++		if (IS_ERR(lov->lov_pool_proc_entry)) {
++			rc = PTR_ERR(lov->lov_pool_proc_entry);
++			CERROR("error %d setting up lprocfs for pools\n", rc);
++			lov->lov_pool_proc_entry = NULL;
++		}
++	}
+ #endif
+ 	RETURN(0);
+ 
+@@ -2365,8 +2399,10 @@ extern struct lu_kmem_descr lov_caches[];
+ 
+ int __init lov_init(void)
+ {
++	bool enable_proc = true;
++	struct obd_type *type;
+ 	int rc;
+-        ENTRY;
++	ENTRY;
+ 
+         /* print an address of _any_ initialized kernel symbol from this
+          * module, to allow debugging with gdb that doesn't support data
+@@ -2385,11 +2421,15 @@ int __init lov_init(void)
+                 return -ENOMEM;
+         }
+ 
+-	rc = class_register_type(&lov_obd_ops, NULL, NULL,
++	type = class_search_type(LUSTRE_LOD_NAME);
++	if (type != NULL && type->typ_procsym != NULL)
++		enable_proc = false;
++
++	rc = class_register_type(&lov_obd_ops, NULL, enable_proc, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				NULL,
++				 NULL,
+ #endif
+-				LUSTRE_LOV_NAME, &lov_device_type);
++				 LUSTRE_LOV_NAME, &lov_device_type);
+ 
+         if (rc) {
+ 		kmem_cache_destroy(lov_oinfo_slab);
+diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
+index ee3a654..cea78ac 100644
+--- a/lustre/mdc/mdc_request.c
++++ b/lustre/mdc/mdc_request.c
+@@ -3429,11 +3429,11 @@ struct md_ops mdc_md_ops = {
+ 
+ int __init mdc_init(void)
+ {
+-	return class_register_type(&mdc_obd_ops, &mdc_md_ops, NULL,
++	return class_register_type(&mdc_obd_ops, &mdc_md_ops, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					NULL,
++				   NULL,
+ #endif
+-					LUSTRE_MDC_NAME, NULL);
++				   LUSTRE_MDC_NAME, NULL);
+ }
+ 
+ #ifdef __KERNEL__
+diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
+index fe9de80..0fe590e 100644
+--- a/lustre/mdd/mdd_device.c
++++ b/lustre/mdd/mdd_device.c
+@@ -1582,11 +1582,11 @@ static int __init mdd_mod_init(void)
+ 	hsm_actions_logops.lop_add = llog_cat_add_rec;
+ 	hsm_actions_logops.lop_declare_add = llog_cat_declare_add_rec;
+ 
+-	rc = class_register_type(&mdd_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				 lvars.module_vars,
+ #endif
+-				LUSTRE_MDD_NAME, &mdd_device_type);
++				 LUSTRE_MDD_NAME, &mdd_device_type);
+ 	if (rc)
+ 		lu_kmem_fini(mdd_caches);
+ 	return rc;
+diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
+index 0e1f0f6..69b1c30 100644
+--- a/lustre/mdt/mdt_handler.c
++++ b/lustre/mdt/mdt_handler.c
+@@ -5901,11 +5901,11 @@ static int __init mdt_mod_init(void)
+ 		GOTO(lu_fini, rc);
+ 
+ 	lprocfs_mdt_init_vars(&lvars);
+-	rc = class_register_type(&mdt_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&mdt_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				 lvars.module_vars,
+ #endif
+-				LUSTRE_MDT_NAME, &mdt_device_type);
++				 LUSTRE_MDT_NAME, &mdt_device_type);
+ 	if (rc)
+ 		GOTO(mds_fini, rc);
+ lu_fini:
+diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c
+index 367f659..390164f 100644
+--- a/lustre/mdt/mdt_mds.c
++++ b/lustre/mdt/mdt_mds.c
+@@ -539,11 +539,11 @@ int mds_mod_init(void)
+ 		mds_num_threads = mdt_num_threads;
+ 	}
+ 
+-	return class_register_type(&mds_obd_device_ops, NULL, NULL,
++	return class_register_type(&mds_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					lprocfs_mds_module_vars,
++				   lprocfs_mds_module_vars,
+ #endif
+-					LUSTRE_MDS_NAME, &mds_device_type);
++				   LUSTRE_MDS_NAME, &mds_device_type);
+ }
+ 
+ void mds_mod_exit(void)
+diff --git a/lustre/mgc/libmgc.c b/lustre/mgc/libmgc.c
+index 49a329a..ec915c7 100644
+--- a/lustre/mgc/libmgc.c
++++ b/lustre/mgc/libmgc.c
+@@ -158,9 +158,9 @@ struct obd_ops mgc_obd_ops = {
+ 
+ int __init mgc_init(void)
+ {
+-	return class_register_type(&mgc_obd_ops, NULL, NULL,
++	return class_register_type(&mgc_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					NULL,
++				   NULL,
+ #endif
+-					LUSTRE_MGC_NAME, NULL);
++				   LUSTRE_MGC_NAME, NULL);
+ }
+diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
+index 8935814..7741bbf 100644
+--- a/lustre/mgc/mgc_request.c
++++ b/lustre/mgc/mgc_request.c
+@@ -2022,11 +2022,11 @@ struct obd_ops mgc_obd_ops = {
+ 
+ int __init mgc_init(void)
+ {
+-        return class_register_type(&mgc_obd_ops, NULL, NULL,
++	return class_register_type(&mgc_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					NULL,
++				   NULL,
+ #endif
+-					LUSTRE_MGC_NAME, NULL);
++				   LUSTRE_MGC_NAME, NULL);
+ }
+ 
+ #ifdef __KERNEL__
+diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
+index 8961fc3..85b219c 100644
+--- a/lustre/mgs/mgs_handler.c
++++ b/lustre/mgs/mgs_handler.c
+@@ -1516,11 +1516,11 @@ static int __init mgs_init(void)
+ 	struct lprocfs_static_vars lvars;
+ 
+ 	lprocfs_mgs_init_vars(&lvars);
+-	return class_register_type(&mgs_obd_device_ops, NULL, NULL,
++	return class_register_type(&mgs_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					lvars.module_vars,
++				   lvars.module_vars,
+ #endif
+-					LUSTRE_MGS_NAME, &mgs_device_type);
++				   LUSTRE_MGS_NAME, &mgs_device_type);
+ }
+ 
+ static void /*__exit*/ mgs_exit(void)
+diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
+index bf8b6ce..98dbcce 100644
+--- a/lustre/obdclass/genops.c
++++ b/lustre/obdclass/genops.c
+@@ -162,7 +162,7 @@ EXPORT_SYMBOL(class_put_type);
+ #define CLASS_MAX_NAME 1024
+ 
+ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
+-			struct lprocfs_seq_vars *module_vars,
++			bool enable_proc, struct lprocfs_seq_vars *module_vars,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ 			struct lprocfs_vars *vars,
+ #endif
+@@ -202,22 +202,24 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
+ 	spin_lock_init(&type->obd_type_lock);
+ 
+ #ifdef LPROCFS
++	if (enable_proc) {
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-	if (vars) {
+-		type->typ_procroot = lprocfs_register(type->typ_name,
+-							proc_lustre_root,
+-							vars, type);
+-	} else
++		if (vars) {
++			type->typ_procroot = lprocfs_register(type->typ_name,
++							      proc_lustre_root,
++							      vars, type);
++		} else
+ #endif
+-	{
+-		type->typ_procroot = lprocfs_seq_register(type->typ_name,
+-							proc_lustre_root,
+-							module_vars, type);
+-	}
+-	if (IS_ERR(type->typ_procroot)) {
+-		rc = PTR_ERR(type->typ_procroot);
+-		type->typ_procroot = NULL;
+-		GOTO (failed, rc);
++		{
++			type->typ_procroot = lprocfs_seq_register(type->typ_name,
++								  proc_lustre_root,
++								  module_vars, type);
++		}
++		if (IS_ERR(type->typ_procroot)) {
++			rc = PTR_ERR(type->typ_procroot);
++			type->typ_procroot = NULL;
++			GOTO(failed, rc);
++		}
+ 	}
+ #endif
+         if (ldt != NULL) {
+@@ -233,18 +235,20 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
+ 
+         RETURN (0);
+ 
+- failed:
+-#ifdef LPROCFS
++failed:
+ 	if (type->typ_name != NULL) {
++#ifdef LPROCFS
++		if (type->typ_procroot != NULL) {
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-		lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
++			lprocfs_try_remove_proc_entry(type->typ_name,
++						      proc_lustre_root);
+ #else
+-		remove_proc_subtree(type->typ_name, proc_lustre_root);
++			remove_proc_subtree(type->typ_name, proc_lustre_root);
+ #endif
+-	}
++		}
+ #endif
+-        if (type->typ_name != NULL)
+                 OBD_FREE(type->typ_name, strlen(name) + 1);
++	}
+         if (type->typ_md_ops != NULL)
+                 OBD_FREE_PTR(type->typ_md_ops);
+         if (type->typ_dt_ops != NULL)
+@@ -278,11 +282,16 @@ int class_unregister_type(const char *name)
+ 	 * we can't reference pointer as it can get invalided when another
+ 	 * module removes the entry */
+ #ifdef LPROCFS
++	if (type->typ_procroot != NULL) {
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-	lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
++		lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
+ #else
+-	remove_proc_subtree(type->typ_name, proc_lustre_root);
++		remove_proc_subtree(type->typ_name, proc_lustre_root);
+ #endif
++	}
++
++	if (type->typ_procsym != NULL)
++		lprocfs_remove(&type->typ_procsym);
+ #endif
+         if (type->typ_lu)
+                 lu_device_type_fini(type->typ_lu);
+diff --git a/lustre/obdclass/llog_test.c b/lustre/obdclass/llog_test.c
+index a1051c2..18d5843 100644
+--- a/lustre/obdclass/llog_test.c
++++ b/lustre/obdclass/llog_test.c
+@@ -1261,11 +1261,11 @@ static struct obd_ops llog_obd_ops = {
+ 
+ static int __init llog_test_init(void)
+ {
+-	return class_register_type(&llog_obd_ops, NULL, NULL,
++	return class_register_type(&llog_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					NULL,
++				   NULL,
+ #endif
+-					"llog_test", NULL);
++				   "llog_test", NULL);
+ }
+ 
+ static void __exit llog_test_exit(void)
+diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
+index 9956ada..30d9f59 100644
+--- a/lustre/obdclass/lprocfs_status.c
++++ b/lustre/obdclass/lprocfs_status.c
+@@ -1936,7 +1936,6 @@ lprocfs_seq_obd_setup(struct obd_device *obd)
+ 	int rc = 0;
+ 
+ 	LASSERT(obd != NULL);
+-	LASSERT(obd->obd_vars != NULL);
+ 	LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
+ 	LASSERT(obd->obd_type->typ_procroot != NULL);
+ 
+diff --git a/lustre/obdecho/echo_client.c b/lustre/obdecho/echo_client.c
+index 38cff00..632bf52 100644
+--- a/lustre/obdecho/echo_client.c
++++ b/lustre/obdecho/echo_client.c
+@@ -3169,12 +3169,12 @@ int echo_client_init(void)
+ 
+ 	rc = lu_kmem_init(echo_caches);
+ 	if (rc == 0) {
+-		rc = class_register_type(&echo_client_obd_ops, NULL, NULL,
++		rc = class_register_type(&echo_client_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					NULL,
++					 NULL,
+ #endif
+-					LUSTRE_ECHO_CLIENT_NAME,
+-					&echo_device_type);
++					 LUSTRE_ECHO_CLIENT_NAME,
++					 &echo_device_type);
+ 		if (rc)
+ 			lu_kmem_fini(echo_caches);
+ 	}
+@@ -3202,7 +3202,7 @@ static int __init obdecho_init(void)
+         if (rc != 0)
+                 goto failed_0;
+ 
+-	rc = class_register_type(&echo_obd_ops, NULL, NULL,
++	rc = class_register_type(&echo_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ 				NULL,
+ #endif
+diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
+index 4cafa48..5d7f0b4 100644
+--- a/lustre/ofd/ofd_dev.c
++++ b/lustre/ofd/ofd_dev.c
+@@ -2394,11 +2394,11 @@ int __init ofd_init(void)
+ 
+ 	lprocfs_ofd_init_vars(&lvars);
+ 
+-	rc = class_register_type(&ofd_obd_ops, NULL, NULL,
++	rc = class_register_type(&ofd_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				 lvars.module_vars,
+ #endif
+-				LUSTRE_OST_NAME, &ofd_device_type);
++				 LUSTRE_OST_NAME, &ofd_device_type);
+ 	return rc;
+ }
+ 
+diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c
+index 2b60765..076dcf6 100644
+--- a/lustre/osc/osc_request.c
++++ b/lustre/osc/osc_request.c
+@@ -3091,9 +3091,10 @@ static int brw_queue_work(const struct lu_env *env, void *data)
+ 
+ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ {
+-	struct client_obd          *cli = &obd->u.cli;
+-	void                       *handler;
+-	int                        rc;
++	struct client_obd *cli = &obd->u.cli;
++	struct obd_type	  *type;
++	void		  *handler;
++	int		   rc;
+ 	ENTRY;
+ 
+ 	rc = ptlrpcd_addref();
+@@ -3119,10 +3120,32 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ 		GOTO(out_ptlrpcd_work, rc);
+ 
+ 	cli->cl_grant_shrink_interval = GRANT_SHRINK_INTERVAL;
++
+ #ifdef LPROCFS
+ 	obd->obd_vars = lprocfs_osc_obd_vars;
+ #endif
+-	if (lprocfs_seq_obd_setup(obd) == 0) {
++	/* If this is true then both client (osc) and server (osp) are on the
++	 * same node. The osp layer if loaded first will register the osc proc
++	 * directory. In that case this obd_device will be attached its proc
++	 * tree to type->typ_procsym instead of obd->obd_type->typ_procroot. */
++	type = class_search_type(LUSTRE_OSP_NAME);
++	if (type && type->typ_procsym) {
++		obd->obd_proc_entry = lprocfs_seq_register(obd->obd_name,
++							   type->typ_procsym,
++							   obd->obd_vars, obd);
++		if (IS_ERR(obd->obd_proc_entry)) {
++			rc = PTR_ERR(obd->obd_proc_entry);
++			CERROR("error %d setting up lprocfs for %s\n", rc,
++			       obd->obd_name);
++			obd->obd_proc_entry = NULL;
++		}
++	} else {
++		rc = lprocfs_seq_obd_setup(obd);
++	}
++
++	/* If the basic OSC proc tree construction succeeded then
++	 * lets do the rest. */
++	if (rc == 0) {
+ 		lproc_osc_attach_seqstat(obd);
+ 		sptlrpc_lprocfs_cliobd_attach(obd);
+ 		ptlrpc_lprocfs_register_obd(obd);
+@@ -3140,7 +3163,7 @@ int osc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ 
+ 	CFS_INIT_LIST_HEAD(&cli->cl_grant_shrink_list);
+ 	ns_register_cancel(obd->obd_namespace, osc_cancel_weight);
+-	RETURN(rc);
++	RETURN(0);
+ 
+ out_ptlrpcd_work:
+ 	if (cli->cl_writeback_work != NULL) {
+@@ -3282,8 +3305,10 @@ extern struct lock_class_key osc_ast_guard_class;
+ 
+ int __init osc_init(void)
+ {
+-        int rc;
+-        ENTRY;
++	bool enable_proc = true;
++	struct obd_type *type;
++	int rc;
++	ENTRY;
+ 
+         /* print an address of _any_ initialized kernel symbol from this
+          * module, to allow debugging with gdb that doesn't support data
+@@ -3294,11 +3319,15 @@ int __init osc_init(void)
+ 	if (rc)
+ 		RETURN(rc);
+ 
+-	rc = class_register_type(&osc_obd_ops, NULL, NULL,
++	type = class_search_type(LUSTRE_OSP_NAME);
++	if (type != NULL && type->typ_procsym != NULL)
++		enable_proc = false;
++
++	rc = class_register_type(&osc_obd_ops, NULL, enable_proc, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				NULL,
++				 NULL,
+ #endif
+-				LUSTRE_OSC_NAME, &osc_device_type);
++				 LUSTRE_OSC_NAME, &osc_device_type);
+         if (rc) {
+                 lu_kmem_fini(osc_caches);
+                 RETURN(rc);
+diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
+index 7461f9d..e0da7e6 100644
+--- a/lustre/osd-ldiskfs/osd_handler.c
++++ b/lustre/osd-ldiskfs/osd_handler.c
+@@ -6019,11 +6019,11 @@ static int __init osd_mod_init(void)
+ 	if (rc)
+ 		return rc;
+ 
+-	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lprocfs_osd_module_vars,
++				 lprocfs_osd_module_vars,
+ #endif
+-				LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
++				 LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
+ 	if (rc)
+ 		lu_kmem_fini(ldiskfs_caches);
+ 	return rc;
+diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
+index 1025be9..47bbc76 100644
+--- a/lustre/osd-zfs/osd_handler.c
++++ b/lustre/osd-zfs/osd_handler.c
+@@ -912,11 +912,11 @@ int __init osd_init(void)
+ 	if (rc)
+ 		return rc;
+ 
+-	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lprocfs_osd_module_vars,
++				 lprocfs_osd_module_vars,
+ #endif
+-				LUSTRE_OSD_ZFS_NAME, &osd_device_type);
++				 LUSTRE_OSD_ZFS_NAME, &osd_device_type);
+ 	if (rc)
+ 		lu_kmem_fini(osd_caches);
+ 	return rc;
+diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
+index 550ba5e..60bf8ef 100644
+--- a/lustre/osp/osp_dev.c
++++ b/lustre/osp/osp_dev.c
+@@ -1239,7 +1239,7 @@ struct llog_operations osp_mds_ost_orig_logops;
+ static int __init osp_mod_init(void)
+ {
+ 	struct lprocfs_static_vars	 lvars;
+-	cfs_proc_dir_entry_t		*osc_proc_dir;
++	struct obd_type *type;
+ 	int				 rc;
+ 
+ 	rc = lu_kmem_init(osp_caches);
+@@ -1248,11 +1248,11 @@ static int __init osp_mod_init(void)
+ 
+ 	lprocfs_osp_init_vars(&lvars);
+ 
+-	rc = class_register_type(&osp_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&osp_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				 lvars.module_vars,
+ #endif
+-				LUSTRE_OSP_NAME, &osp_device_type);
++				 LUSTRE_OSP_NAME, &osp_device_type);
+ 
+ 	/* create "osc" entry in procfs for compatibility purposes */
+ 	if (rc != 0) {
+@@ -1262,11 +1262,11 @@ static int __init osp_mod_init(void)
+ 
+ 	lprocfs_lwp_init_vars(&lvars);
+ 
+-	rc = class_register_type(&lwp_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&lwp_obd_device_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				 lvars.module_vars,
+ #endif
+-				LUSTRE_LWP_NAME, &lwp_device_type);
++				 LUSTRE_LWP_NAME, &lwp_device_type);
+ 	if (rc != 0) {
+ 		class_unregister_type(LUSTRE_OSP_NAME);
+ 		lu_kmem_fini(osp_caches);
+@@ -1278,14 +1278,17 @@ static int __init osp_mod_init(void)
+ 	osp_mds_ost_orig_logops.lop_add = llog_cat_add_rec;
+ 	osp_mds_ost_orig_logops.lop_declare_add = llog_cat_declare_add_rec;
+ 
+-	osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
+-	if (osc_proc_dir == NULL) {
+-		osc_proc_dir = lprocfs_register("osc", proc_lustre_root, NULL,
+-						NULL);
+-		if (IS_ERR(osc_proc_dir))
+-			CERROR("osp: can't create compat entry \"osc\": %d\n",
+-			       (int) PTR_ERR(osc_proc_dir));
+-	}
++	/* create "osc" entry in procfs for compatibility purposes */
++	type = class_search_type(LUSTRE_OSC_NAME);
++	if (type != NULL && type->typ_procroot != NULL)
++		return rc;
++
++	type = class_search_type(LUSTRE_OSP_NAME);
++	type->typ_procsym = lprocfs_register("osc", proc_lustre_root,
++					     NULL, NULL);
++	if (IS_ERR(type->typ_procsym))
++		CERROR("osp: can't create compat entry \"osc\": %d\n",
++		       (int) PTR_ERR(type->typ_procsym));
+ 	return rc;
+ }
+ 
+diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
+index f7448d4..d8897cc 100644
+--- a/lustre/ost/ost_handler.c
++++ b/lustre/ost/ost_handler.c
+@@ -470,11 +470,11 @@ static int __init ost_init(void)
+ 
+ 	ENTRY;
+ 
+-	rc = class_register_type(&ost_obd_ops, NULL, NULL,
++	rc = class_register_type(&ost_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				NULL,
++				 NULL,
+ #endif
+-				LUSTRE_OSS_NAME, NULL);
++				 LUSTRE_OSS_NAME, NULL);
+ 
+         if (ost_num_threads != 0 && oss_num_threads == 0) {
+                 LCONSOLE_INFO("ost_num_threads module parameter is deprecated, "
+diff --git a/lustre/quota/qmt_dev.c b/lustre/quota/qmt_dev.c
+index 02ec55b..28783a0 100644
+--- a/lustre/quota/qmt_dev.c
++++ b/lustre/quota/qmt_dev.c
+@@ -466,11 +466,11 @@ int qmt_glb_init(void)
+ 	int rc;
+ 	ENTRY;
+ 
+-	rc = class_register_type(&qmt_obd_ops, NULL, NULL,
++	rc = class_register_type(&qmt_obd_ops, NULL, true, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				NULL,
++				 NULL,
+ #endif
+-				LUSTRE_QMT_NAME, &qmt_device_type);
++				 LUSTRE_QMT_NAME, &qmt_device_type);
+ 	RETURN(rc);
+ }
+ 
+-- 
+1.9.1
+

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
new file mode 100644
index 0000000..d7da497
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch
@@ -0,0 +1,123 @@
+From 7dbddd98e60ab73580ea52c8b53274da2283d624 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 25 Feb 2014 12:54:05 -0500
+Subject: [PATCH 2/9] LU-3319 procfs: Move NRS TBF proc handling to seq_files
+
+With newer kernels moving their proc file system handling
+to seq_files this patch migrates the proc handling for NRS
+TBF to this new approach.
+
+Change-Id: I121755b611296bf7b9527de65d0e6cf8c4980151
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+---
+ lustre/ptlrpc/nrs_tbf.c | 35 ++++++++++++++---------------------
+ 1 file changed, 14 insertions(+), 21 deletions(-)
+
+diff --git a/lustre/ptlrpc/nrs_tbf.c b/lustre/ptlrpc/nrs_tbf.c
+index 96eac30..09ab0e7 100644
+--- a/lustre/ptlrpc/nrs_tbf.c
++++ b/lustre/ptlrpc/nrs_tbf.c
+@@ -1572,30 +1572,26 @@ static void nrs_tbf_req_stop(struct ptlrpc_nrs_policy *policy,
+  */
+ #define LPROCFS_NRS_RATE_MAX		65535
+ 
+-static int ptlrpc_lprocfs_rd_nrs_tbf_rule(char *page, char **start,
+-					   off_t off, int count, int *eof,
+-					   void *data)
++static int
++ptlrpc_lprocfs_nrs_tbf_rule_seq_show(struct seq_file *m, void *data)
+ {
+-	struct ptlrpc_service	    *svc = data;
++	struct ptlrpc_service	    *svc = m->private;
+ 	int			     rc;
+ 	int			     rc2;
+ 	struct nrs_tbf_dump	     dump;
+ 
+-	rc2 = snprintf(page, count, "regular_requests:\n");
++	rc2 = seq_printf(m, "regular_requests:\n");
+ 	/**
+ 	 * Perform two separate calls to this as only one of the NRS heads'
+ 	 * policies may be in the ptlrpc_nrs_pol_state::NRS_POL_STATE_STARTED or
+ 	 * ptlrpc_nrs_pol_state::NRS_POL_STATE_STOPPING state.
+ 	 */
+ 	dump.td_length = 0;
+-	dump.td_buff = page + rc2;
+-	dump.td_size = count - rc2;
+ 	rc = ptlrpc_nrs_policy_control(svc, PTLRPC_NRS_QUEUE_REG,
+ 				       NRS_POL_NAME_TBF,
+ 				       NRS_CTL_TBF_RD_RULE,
+ 				       false, &dump);
+ 	if (rc == 0) {
+-		*eof = 1;
+ 		rc2 += dump.td_length;
+ 		/**
+ 		 * Ignore -ENODEV as the regular NRS head's policy may be in the
+@@ -1608,16 +1604,13 @@ static int ptlrpc_lprocfs_rd_nrs_tbf_rule(char *page, char **start,
+ 	if (!nrs_svc_has_hp(svc))
+ 		goto no_hp;
+ 
+-	rc2 += snprintf(page + rc2, count - rc2, "high_priority_requests:\n");
++	rc2 += seq_printf(m, "high_priority_requests:\n");
+ 	dump.td_length = 0;
+-	dump.td_buff = page + rc2;
+-	dump.td_size = count - rc2;
+ 	rc = ptlrpc_nrs_policy_control(svc, PTLRPC_NRS_QUEUE_HP,
+ 				       NRS_POL_NAME_TBF,
+ 				       NRS_CTL_TBF_RD_RULE,
+ 				       false, &dump);
+ 	if (rc == 0) {
+-		*eof = 1;
+ 		rc2 += dump.td_length;
+ 		/**
+ 		 * Ignore -ENODEV as the high priority NRS head's policy may be
+@@ -1762,11 +1755,12 @@ out:
+ 
+ extern struct nrs_core nrs_core;
+ #define LPROCFS_WR_NRS_TBF_MAX_CMD (4096)
+-static int ptlrpc_lprocfs_wr_nrs_tbf_rule(struct file *file,
+-					  const char *buffer,
+-					  unsigned long count, void *data)
++static ssize_t
++ptlrpc_lprocfs_nrs_tbf_rule_seq_write(struct file *file, const char *buffer,
++				      size_t count, loff_t *off)
+ {
+-	struct ptlrpc_service	  *svc = data;
++	struct seq_file		  *m = file->private_data;
++	struct ptlrpc_service	  *svc = m->private;
+ 	char			  *kernbuf;
+ 	char			  *val;
+ 	int			   rc;
+@@ -1830,7 +1824,7 @@ out_free_kernbuff:
+ out:
+ 	return rc ? rc : count;
+ }
+-
++LPROC_SEQ_FOPS(ptlrpc_lprocfs_nrs_tbf_rule);
+ 
+ /**
+  * Initializes a TBF policy's lprocfs interface for service \a svc
+@@ -1843,10 +1837,9 @@ out:
+ int nrs_tbf_lprocfs_init(struct ptlrpc_service *svc)
+ {
+ 	int	rc;
+-	struct lprocfs_vars nrs_tbf_lprocfs_vars[] = {
++	struct lprocfs_seq_vars nrs_tbf_lprocfs_vars[] = {
+ 		{ .name		= "nrs_tbf_rule",
+-		  .read_fptr	= ptlrpc_lprocfs_rd_nrs_tbf_rule,
+-		  .write_fptr	= ptlrpc_lprocfs_wr_nrs_tbf_rule,
++		  .fops		= &ptlrpc_lprocfs_nrs_tbf_rule_fops,
+ 		  .data = svc },
+ 		{ NULL }
+ 	};
+@@ -1854,7 +1847,7 @@ int nrs_tbf_lprocfs_init(struct ptlrpc_service *svc)
+ 	if (svc->srv_procroot == NULL)
+ 		return 0;
+ 
+-	rc = lprocfs_add_vars(svc->srv_procroot, nrs_tbf_lprocfs_vars, NULL);
++	rc = lprocfs_seq_add_vars(svc->srv_procroot, nrs_tbf_lprocfs_vars, NULL);
+ 
+ 	return rc;
+ }
+-- 
+1.9.1
+

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
similarity index 79%
rename from sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index ff3c6bf..b06c8da 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 699242b35f07c7c64959dca02cc359d389c7f568 Mon Sep 17 00:00:00 2001
+From abe827ebe8722336c55affd8388dacfbb38b49f1 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 3 Jan 2014 09:55:26 -0500
-Subject: [PATCH 02/12] LU-3319 procfs: update zfs proc handling to seq_files
+Date: Tue, 18 Feb 2014 18:44:22 -0500
+Subject: [PATCH 3/9] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 
@@ -9,68 +9,61 @@ Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
 ---
  lustre/osd-zfs/osd_handler.c  | 13 ++++---
- lustre/osd-zfs/osd_internal.h |  3 --
- lustre/osd-zfs/osd_lproc.c    | 88 ++++++++++++++++++++++++-------------------
- 3 files changed, 57 insertions(+), 47 deletions(-)
+ lustre/osd-zfs/osd_internal.h |  3 +-
+ lustre/osd-zfs/osd_lproc.c    | 90 +++++++++++++++++++++++++------------------
+ 3 files changed, 60 insertions(+), 46 deletions(-)
 
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 1025be9..c9bf49a 100644
+index 47bbc76..05820e0 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -748,6 +748,7 @@ static int osd_device_init(const struct lu_env *env, struct lu_device *d,
- static int osd_process_config(const struct lu_env *env,
- 			      struct lu_device *d, struct lustre_cfg *cfg)
- {
-+	struct obd_device	*obd = d->ld_obd;
- 	struct osd_device	*o = osd_dev(d);
- 	int			rc;
- 	ENTRY;
-@@ -761,12 +762,12 @@ static int osd_process_config(const struct lu_env *env,
+@@ -761,12 +761,13 @@ static int osd_process_config(const struct lu_env *env,
  		break;
  	case LCFG_PARAM: {
  		LASSERT(&o->od_dt_dev);
 -		rc = class_process_proc_param(PARAM_OSD, lprocfs_osd_obd_vars,
 -					      cfg, &o->od_dt_dev);
-+		rc = class_process_proc_seq_param(PARAM_OSD, obd->obd_vars,
-+						  cfg, &o->od_dt_dev);
++		rc = class_process_proc_seq_param(PARAM_OSD,
++						  lprocfs_osd_obd_vars, cfg,
++						  &o->od_dt_dev);
  		if (rc > 0 || rc == -ENOSYS)
 -			rc = class_process_proc_param(PARAM_OST,
 -						      lprocfs_osd_obd_vars,
 -						      cfg, &o->od_dt_dev);
 +			rc = class_process_proc_seq_param(PARAM_OST,
-+							  obd->obd_vars, cfg,
-+							  &o->od_dt_dev);
++							  lprocfs_osd_obd_vars,
++							  cfg, &o->od_dt_dev);
  		break;
  	}
  	default:
 @@ -914,7 +915,7 @@ int __init osd_init(void)
  
- 	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
+ 	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lprocfs_osd_module_vars,
-+				NULL,
+-				 lprocfs_osd_module_vars,
++				 NULL,
  #endif
- 				LUSTRE_OSD_ZFS_NAME, &osd_device_type);
+ 				 LUSTRE_OSD_ZFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h
-index bc51cb1..77b118f 100644
+index bc51cb1..3dc4881 100644
 --- a/lustre/osd-zfs/osd_internal.h
 +++ b/lustre/osd-zfs/osd_internal.h
-@@ -402,9 +402,6 @@ enum {
+@@ -402,8 +402,7 @@ enum {
  };
  
  /* osd_lproc.c */
 -extern struct lprocfs_vars lprocfs_osd_obd_vars[];
 -extern struct lprocfs_vars lprocfs_osd_module_vars[];
--
++extern struct lprocfs_seq_vars lprocfs_osd_obd_vars[];
+ 
  int osd_procfs_init(struct osd_device *osd, const char *name);
  int osd_procfs_fini(struct osd_device *osd);
- 
 diff --git a/lustre/osd-zfs/osd_lproc.c b/lustre/osd-zfs/osd_lproc.c
-index 0854ce6..a7ce60d 100644
+index 0854ce6..bed08e9 100644
 --- a/lustre/osd-zfs/osd_lproc.c
 +++ b/lustre/osd-zfs/osd_lproc.c
-@@ -107,27 +107,26 @@ out:
+@@ -107,27 +107,27 @@ out:
  	RETURN(result);
  }
  
@@ -105,11 +98,12 @@ index 0854ce6..a7ce60d 100644
 +				size_t count, loff_t *off)
  {
 -	struct dt_device  *dt = data;
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
  	struct lu_env      env;
  	int rc;
  
-@@ -139,20 +138,21 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+@@ -139,20 +139,22 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
  
  	return rc == 0 ? count : rc;
  }
@@ -133,12 +127,13 @@ index 0854ce6..a7ce60d 100644
 +						size_t count, loff_t *off)
  {
 -	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
 +	struct osd_device *osd = osd_dt_dev(dt);
  	int                rc, val;
  
  	LASSERT(osd != NULL);
-@@ -165,24 +165,36 @@ static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
+@@ -165,24 +167,36 @@ static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -193,7 +188,7 @@ index 0854ce6..a7ce60d 100644
  	{ 0 }
  };
  
-@@ -202,7 +214,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
+@@ -202,7 +216,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
  	LASSERT(name != NULL);
  	LASSERT(type != NULL);
  
@@ -203,5 +198,5 @@ index 0854ce6..a7ce60d 100644
  	if (IS_ERR(osd->od_proc_entry)) {
  		rc = PTR_ERR(osd->od_proc_entry);
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
deleted file mode 100644
index 935325e..0000000
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
+++ /dev/null
@@ -1,371 +0,0 @@
-From 4bc21601224ea84152d9c3cc83eee33af8eb8cb2 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Sun, 9 Feb 2014 09:37:44 -0500
-Subject: [PATCH 04/12] LU-3319 procfs: fix symlink handling
-
-While working on symlink handling for seq files I noticed a
-long outstanding bug. Code was developed to link osc obds
-to target_obds of the lov layer. The target_obds directory
-was never created for the symlinks. This patches enables
-this long forgotten feature. Also addressed is the race
-condition experinced with server side code ported to
-seq_files that used symlinks. To avoid the race the handle
-obd_proc_private was moved from struct obd_device to
-struct obd_type which now allows earlier registeration that
-only happens once.
-
-Change-Id: Ib158ec4444ed7abc0f3c3e820ee4a333631a58d1
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
----
- lustre/include/obd.h     | 17 +++++----
- lustre/lmv/lmv_obd.c     | 48 ++++++++---------------
- lustre/lov/lov_obd.c     | 99 +++++++++++++++++++++++++++---------------------
- lustre/obdclass/genops.c | 17 +++++----
- 4 files changed, 91 insertions(+), 90 deletions(-)
-
-diff --git a/lustre/include/obd.h b/lustre/include/obd.h
-index ac80412..42266da 100644
---- a/lustre/include/obd.h
-+++ b/lustre/include/obd.h
-@@ -183,13 +183,15 @@ struct obd_info {
- };
- 
- struct obd_type {
--        cfs_list_t typ_chain;
--        struct obd_ops *typ_dt_ops;
--        struct md_ops *typ_md_ops;
--        cfs_proc_dir_entry_t *typ_procroot;
--        char *typ_name;
--        int  typ_refcnt;
--        struct lu_device_type *typ_lu;
-+	struct list_head typ_chain;
-+	struct obd_ops *typ_dt_ops;
-+	struct md_ops *typ_md_ops;
-+	cfs_proc_dir_entry_t *typ_procroot;
-+	cfs_proc_dir_entry_t *typ_procsym;
-+	__u32 typ_sym_filter;
-+	char *typ_name;
-+	int  typ_refcnt;
-+	struct lu_device_type *typ_lu;
- 	spinlock_t obd_type_lock;
- };
- 
-@@ -825,7 +827,6 @@ struct obd_device {
- 
- 	struct proc_dir_entry	*obd_proc_entry;
- 	struct proc_dir_entry	*obd_proc_exports_entry;
--	void			*obd_proc_private;	/* type private PDEs */
- 	struct proc_dir_entry	*obd_svc_procroot;
- 	struct lprocfs_stats	*obd_svc_stats;
- 	struct lprocfs_seq_vars	*obd_vars;
-diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
-index ee5f3a7..66a9448 100644
---- a/lustre/lmv/lmv_obd.c
-+++ b/lustre/lmv/lmv_obd.c
-@@ -263,9 +263,6 @@ static int lmv_connect(const struct lu_env *env,
-                        struct obd_uuid *cluuid, struct obd_connect_data *data,
-                        void *localdata)
- {
--#ifdef __KERNEL__
--        struct proc_dir_entry *lmv_proc_dir;
--#endif
-         struct lmv_obd        *lmv = &obd->u.lmv;
-         struct lustre_handle  conn = { 0 };
-         int                    rc = 0;
-@@ -298,18 +295,15 @@ static int lmv_connect(const struct lu_env *env,
-                 lmv->conn_data = *data;
- 
- #ifdef __KERNEL__
--	if (obd->obd_proc_private != NULL) {
--		lmv_proc_dir = obd->obd_proc_private;
--	} else {
--		lmv_proc_dir = lprocfs_seq_register("target_obds",
--						    obd->obd_proc_entry,
--						    NULL, NULL);
--		if (IS_ERR(lmv_proc_dir)) {
-+	if (obd->obd_type->typ_procsym == NULL) {
-+		obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
-+							 obd->obd_proc_entry,
-+							 NULL, NULL);
-+		if (IS_ERR(obd->obd_type->typ_procsym)) {
- 			CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
- 			       obd->obd_type->typ_name, obd->obd_name);
--			lmv_proc_dir = NULL;
-+			obd->obd_type->typ_procsym = NULL;
- 		}
--		obd->obd_proc_private = lmv_proc_dir;
- 	}
- #endif
- 
-@@ -323,10 +317,8 @@ static int lmv_connect(const struct lu_env *env,
-                 rc = lmv_check_connect(obd);
- 
- #ifdef __KERNEL__
--	if (rc && lmv_proc_dir) {
--		lprocfs_remove(&lmv_proc_dir);
--		obd->obd_proc_private = NULL;
--	}
-+	if (rc && obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
- #endif
-         RETURN(rc);
- }
-@@ -405,9 +397,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
- 
- int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- {
--#ifdef __KERNEL__
--        struct proc_dir_entry   *lmv_proc_dir;
--#endif
-         struct lmv_obd          *lmv = &obd->u.lmv;
-         struct obd_uuid         *cluuid = &lmv->cluuid;
-         struct obd_uuid          lmv_mdc_uuid = { "LMV_MDC_UUID" };
-@@ -487,14 +476,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
-                 cfs_atomic_read(&obd->obd_refcount));
- 
- #ifdef __KERNEL__
--	lmv_proc_dir = obd->obd_proc_private;
--	if (lmv_proc_dir) {
-+	if (obd->obd_type->typ_procsym != NULL) {
- 		struct proc_dir_entry *mdc_symlink;
- 
- 		LASSERT(mdc_obd->obd_type != NULL);
- 		LASSERT(mdc_obd->obd_type->typ_name != NULL);
- 		mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
--						  lmv_proc_dir,
-+						  obd->obd_type->typ_procsym,
- 						  "../../../%s/%s",
- 						  mdc_obd->obd_type->typ_name,
- 						  mdc_obd->obd_name);
-@@ -503,8 +491,7 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- 			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
- 			       obd->obd_type->typ_name, obd->obd_name,
- 			       mdc_obd->obd_name);
--			lprocfs_remove(&lmv_proc_dir);
--			obd->obd_proc_private = NULL;
-+			lprocfs_remove(&obd->obd_type->typ_procsym);
- 		}
- 	}
- #endif
-@@ -696,9 +683,6 @@ int lmv_check_connect(struct obd_device *obd)
- 
- static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- {
--#ifdef __KERNEL__
--        struct proc_dir_entry  *lmv_proc_dir;
--#endif
-         struct lmv_obd         *lmv = &obd->u.lmv;
-         struct obd_device      *mdc_obd;
-         int                     rc;
-@@ -716,9 +700,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
-         }
- 
- #ifdef __KERNEL__
--	lmv_proc_dir = obd->obd_proc_private;
--	if (lmv_proc_dir)
--		lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
-+	if (obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove_proc_entry(mdc_obd->obd_name,
-+					  obd->obd_type->typ_procsym);
- #endif
- 	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
- 	if (rc)
-@@ -768,8 +752,8 @@ static int lmv_disconnect(struct obd_export *exp)
-         }
- 
- #ifdef __KERNEL__
--	if (obd->obd_proc_private)
--		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
-+	if (obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
- 	else
- 		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
- 		       obd->obd_type->typ_name, obd->obd_name);
-diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c
-index 286cd15..a3310fd 100644
---- a/lustre/lov/lov_obd.c
-+++ b/lustre/lov/lov_obd.c
-@@ -127,19 +127,16 @@ static int lov_notify(struct obd_device *obd, struct obd_device *watched,
- int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
-                     struct obd_connect_data *data)
- {
--        struct lov_obd *lov = &obd->u.lov;
--        struct obd_uuid *tgt_uuid;
--        struct obd_device *tgt_obd;
--        static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
--        struct obd_import *imp;
--#ifdef __KERNEL__
--	struct proc_dir_entry *lov_proc_dir;
--#endif
--        int rc;
--        ENTRY;
-+	struct lov_obd *lov = &obd->u.lov;
-+	struct obd_uuid *tgt_uuid;
-+	struct obd_device *tgt_obd;
-+	static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
-+	struct obd_import *imp;
-+	int rc;
-+	ENTRY;
- 
--        if (!lov->lov_tgts[index])
--                RETURN(-EINVAL);
-+	if (lov->lov_tgts[index] == NULL)
-+		RETURN(-EINVAL);
- 
-         tgt_uuid = &lov->lov_tgts[index]->ltd_uuid;
-         tgt_obd = lov->lov_tgts[index]->ltd_obd;
-@@ -195,27 +192,25 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
-                obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in");
- 
- #ifdef __KERNEL__
--	lov_proc_dir = obd->obd_proc_private;
--        if (lov_proc_dir) {
--                struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
-+	if (obd->obd_type->typ_procsym != NULL) {
-+		struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
- 		struct proc_dir_entry *osc_symlink;
- 
--                LASSERT(osc_obd != NULL);
--                LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
--                LASSERT(osc_obd->obd_type->typ_name != NULL);
--
--                osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
--                                                  lov_proc_dir,
--                                                  "../../../%s/%s",
--                                                  osc_obd->obd_type->typ_name,
--                                                  osc_obd->obd_name);
--                if (osc_symlink == NULL) {
--                        CERROR("could not register LOV target "
--                                "/proc/fs/lustre/%s/%s/target_obds/%s.",
--                                obd->obd_type->typ_name, obd->obd_name,
--                                osc_obd->obd_name);
--                        lprocfs_remove(&lov_proc_dir);
--			obd->obd_proc_private = NULL;
-+		LASSERT(osc_obd != NULL);
-+		LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
-+		LASSERT(osc_obd->obd_type->typ_name != NULL);
-+
-+		osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
-+						  obd->obd_type->typ_procsym,
-+						  "../../../%s/%s",
-+						  osc_obd->obd_type->typ_name,
-+						  osc_obd->obd_name);
-+		if (osc_symlink == NULL) {
-+			CERROR("could not register LOV target "
-+			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
-+			       obd->obd_type->typ_name, obd->obd_name,
-+			       osc_obd->obd_name);
-+			lprocfs_remove(&obd->obd_type->typ_procsym);
-                 }
-         }
- #endif
-@@ -250,6 +245,17 @@ static int lov_connect(const struct lu_env *env,
-         if (data)
-                 lov->lov_ocd = *data;
- 
-+#ifdef __KERNEL__
-+	obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
-+						 obd->obd_proc_entry,
-+						 NULL, NULL);
-+	if (IS_ERR(obd->obd_type->typ_procsym)) {
-+		CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
-+		       obd->obd_type->typ_name, obd->obd_name);
-+		obd->obd_type->typ_procsym = NULL;
-+	}
-+#endif
-+
-         obd_getref(obd);
-         for (i = 0; i < lov->desc.ld_tgt_count; i++) {
-                 tgt = lov->lov_tgts[i];
-@@ -280,7 +286,6 @@ static int lov_connect(const struct lu_env *env,
- 
- static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
- {
--	struct proc_dir_entry *lov_proc_dir;
-         struct lov_obd *lov = &obd->u.lov;
-         struct obd_device *osc_obd;
-         int rc;
-@@ -296,18 +301,18 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
-                 tgt->ltd_exp->exp_obd->obd_inactive = 1;
-         }
- 
--	lov_proc_dir = obd->obd_proc_private;
--	if (lov_proc_dir)
--		lprocfs_remove_proc_entry(osc_obd->obd_name, lov_proc_dir);
-+	if (obd->obd_type->typ_procsym)
-+		lprocfs_remove_proc_entry(osc_obd->obd_name,
-+					  obd->obd_type->typ_procsym);
- 
--        if (osc_obd) {
--                /* Pass it on to our clients.
--                 * XXX This should be an argument to disconnect,
--                 * XXX not a back-door flag on the OBD.  Ah well.
--                 */
--                osc_obd->obd_force = obd->obd_force;
--                osc_obd->obd_fail = obd->obd_fail;
--                osc_obd->obd_no_recov = obd->obd_no_recov;
-+	if (osc_obd) {
-+		/* Pass it on to our clients.
-+		 * XXX This should be an argument to disconnect,
-+		 * XXX not a back-door flag on the OBD.  Ah well.
-+		 */
-+		osc_obd->obd_force = obd->obd_force;
-+		osc_obd->obd_fail = obd->obd_fail;
-+		osc_obd->obd_no_recov = obd->obd_no_recov;
-         }
- 
-         obd_register_observer(osc_obd, NULL);
-@@ -353,6 +358,14 @@ static int lov_disconnect(struct obd_export *exp)
-         }
-         obd_putref(obd);
- 
-+#ifdef __KERNEL__
-+	if (obd->obd_type->typ_procsym)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
-+	else
-+		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
-+		       obd->obd_type->typ_name, obd->obd_name);
-+#endif
-+
- out:
-         rc = class_disconnect(exp); /* bz 9811 */
-         RETURN(rc);
-diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index 20cd0a0..00bf342 100644
---- a/lustre/obdclass/genops.c
-+++ b/lustre/obdclass/genops.c
-@@ -181,14 +181,15 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
-                 RETURN(-EEXIST);
-         }
- 
--        rc = -ENOMEM;
--        OBD_ALLOC(type, sizeof(*type));
--        if (type == NULL)
--                RETURN(rc);
-+	rc = -ENOMEM;
-+	OBD_ALLOC(type, sizeof(*type));
-+	if (type == NULL)
-+		RETURN(rc);
-+	memset(type, 0, sizeof(*type));
- 
--        OBD_ALLOC_PTR(type->typ_dt_ops);
--        OBD_ALLOC_PTR(type->typ_md_ops);
--        OBD_ALLOC(type->typ_name, strlen(name) + 1);
-+	OBD_ALLOC_PTR(type->typ_dt_ops);
-+	OBD_ALLOC_PTR(type->typ_md_ops);
-+	OBD_ALLOC(type->typ_name, strlen(name) + 1);
- 
-         if (type->typ_dt_ops == NULL ||
-             type->typ_md_ops == NULL ||
-@@ -242,6 +243,8 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
-         if (type->typ_dt_ops != NULL)
-                 OBD_FREE_PTR(type->typ_dt_ops);
- #ifdef LPROCFS
-+	if (type->typ_procsym != NULL)
-+		lprocfs_remove(&type->typ_procsym);
- #ifndef HAVE_ONLY_PROCFS_SEQ
- 	lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
- #else
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
similarity index 96%
rename from sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
index 38785b2..c7d415a 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 44eb91a37b43a71a0d531359c9da082b6e1ec454 Mon Sep 17 00:00:00 2001
+From 00e2e7c431e38433b919735890481e4bb5707cd4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 3 Jan 2014 09:58:53 -0500
-Subject: [PATCH 03/12] LU-3319 procfs: move mgs proc handling to seq_files
+Date: Tue, 4 Mar 2014 10:45:30 -0500
+Subject: [PATCH 4/9] LU-3319 procfs: move mgs proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mgs
@@ -271,22 +271,22 @@ index ffa2d0d..f0ea956 100644
 -}
  #endif
 diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
-index 5be9040..4bb842c 100644
+index 85b219c..a9b0857 100644
 --- a/lustre/mgs/mgs_handler.c
 +++ b/lustre/mgs/mgs_handler.c
-@@ -1434,12 +1434,9 @@ static struct obd_ops mgs_obd_device_ops = {
+@@ -1513,12 +1513,9 @@ static struct obd_ops mgs_obd_device_ops = {
  
  static int __init mgs_init(void)
  {
 -	struct lprocfs_static_vars lvars;
 -
 -	lprocfs_mgs_init_vars(&lvars);
- 	return class_register_type(&mgs_obd_device_ops, NULL, NULL,
+ 	return class_register_type(&mgs_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--					lvars.module_vars,
-+					NULL,
+-				   lvars.module_vars,
++				   NULL,
  #endif
- 					LUSTRE_MGS_NAME, &mgs_device_type);
+ 				   LUSTRE_MGS_NAME, &mgs_device_type);
  }
 diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h
 index ca2846e..d3baacd 100644
@@ -327,7 +327,7 @@ index ca2846e..d3baacd 100644
  
  /* mgs/lproc_mgs.c */
 diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
-index a2bae59..3248387 100644
+index 24c9d22..a4d8800 100644
 --- a/lustre/mgs/mgs_nids.c
 +++ b/lustre/mgs/mgs_nids.c
 @@ -838,15 +838,14 @@ int lprocfs_rd_ir_state(struct seq_file *seq, void *data)
@@ -352,5 +352,5 @@ index a2bae59..3248387 100644
          return lprocfs_wr_uint(file, buffer, count, &ir_timeout);
  }
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 2d5a974..e439041 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From e9786df9c5618c2cff7d81088548fefee874468a Mon Sep 17 00:00:00 2001
+From ab793e8472447314f6428025175f80afc26339ac Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Sun, 9 Feb 2014 17:10:18 -0500
-Subject: [PATCH 05/12] LU-3319 procfs: move osp proc handling to seq_files
+Date: Wed, 26 Mar 2014 19:59:18 -0400
+Subject: [PATCH 5/9] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp
@@ -10,17 +10,17 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
 ---
- lustre/osp/lproc_osp.c    | 373 ++++++++++++++++++++++++----------------------
- lustre/osp/lwp_dev.c      |  18 +--
- lustre/osp/osp_dev.c      |  48 +++---
+ lustre/osp/lproc_osp.c    | 402 +++++++++++++++++++++++++---------------------
+ lustre/osp/lwp_dev.c      |  19 +--
+ lustre/osp/osp_dev.c      |  32 ++--
  lustre/osp/osp_internal.h |   2 -
- 4 files changed, 222 insertions(+), 219 deletions(-)
+ 4 files changed, 228 insertions(+), 227 deletions(-)
 
 diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c
-index 75ebeb1..1ec40fc 100644
+index 75ebeb1..1271b7c 100644
 --- a/lustre/osp/lproc_osp.c
 +++ b/lustre/osp/lproc_osp.c
-@@ -45,24 +45,23 @@
+@@ -45,24 +45,24 @@
  #include "osp_internal.h"
  
  #ifdef LPROCFS
@@ -48,12 +48,13 @@ index 75ebeb1..1ec40fc 100644
  {
 -	struct obd_device	*dev = data;
 -	int			 val, rc;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
 +	int		   val, rc;
  
  	rc = lprocfs_write_helper(buffer, count, &val);
  	if (rc)
-@@ -81,67 +80,60 @@ static int osp_wr_active(struct file *file, const char *buffer,
+@@ -81,67 +81,61 @@ static int osp_wr_active(struct file *file, const char *buffer,
  	LPROCFS_CLIMP_EXIT(dev);
  	return count;
  }
@@ -137,11 +138,12 @@ index 75ebeb1..1ec40fc 100644
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*dev = data;
-+	struct obd_device	*dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*dev = m->private;
  	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
  	int			 val, rc;
  
-@@ -158,25 +150,24 @@ static int osp_wr_max_rpcs_in_flight(struct file *file, const char *buffer,
+@@ -158,25 +152,25 @@ static int osp_wr_max_rpcs_in_flight(struct file *file, const char *buffer,
  	osp->opd_syn_max_rpc_in_flight = val;
  	return count;
  }
@@ -171,11 +173,12 @@ index 75ebeb1..1ec40fc 100644
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*dev = data;
-+	struct obd_device	*dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*dev = m->private;
  	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
  	int			 val, rc;
  
-@@ -194,23 +185,24 @@ static int osp_wr_max_rpcs_in_prog(struct file *file, const char *buffer,
+@@ -194,23 +188,25 @@ static int osp_wr_max_rpcs_in_prog(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -203,11 +206,12 @@ index 75ebeb1..1ec40fc 100644
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
  	struct osp_device	*osp = lu2osp_dev(obd->obd_lu_dev);
  	int			 val, rc, i;
  
-@@ -242,23 +234,24 @@ static int osp_wr_create_count(struct file *file, const char *buffer,
+@@ -242,23 +238,25 @@ static int osp_wr_create_count(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -235,11 +239,12 @@ index 75ebeb1..1ec40fc 100644
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
  	struct osp_device	*osp = lu2osp_dev(obd->obd_lu_dev);
  	int			 val, rc;
  
-@@ -281,89 +274,85 @@ static int osp_wr_max_create_count(struct file *file, const char *buffer,
+@@ -281,89 +279,86 @@ static int osp_wr_max_create_count(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -353,11 +358,12 @@ index 75ebeb1..1ec40fc 100644
 +			size_t count, loff_t *off)
  {
 -	struct obd_device	*dev = data;
-+	struct obd_device	*dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*dev = m->private;
  	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
  	int			 val, rc;
  
-@@ -381,25 +370,23 @@ static int osp_wr_maxage(struct file *file, const char *buffer,
+@@ -381,25 +376,23 @@ static int osp_wr_maxage(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -390,7 +396,7 @@ index 75ebeb1..1ec40fc 100644
  	struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev);
  
  	if (osp == NULL)
-@@ -411,87 +398,126 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
+@@ -411,126 +404,161 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
  	 * - sync changes are zero - no llog records
  	 * - sync in progress are zero - no RPCs in flight
  	 */
@@ -566,31 +572,49 @@ index 75ebeb1..1ec40fc 100644
  {
  	struct obd_device	*obd = osp->opd_obd;
 -	struct proc_dir_entry	*osc_proc_dir;
-+	struct proc_dir_entry	*symlink = NULL;
++	struct proc_dir_entry	*osc_proc_dir = NULL;
++	struct obd_type		*type;
  	int			 rc;
  
 -	obd->obd_proc_entry = lprocfs_register(obd->obd_name,
-+	obd->obd_proc_entry = lprocfs_seq_register(obd->obd_name,
- 					       obd->obd_type->typ_procroot,
- 					       lprocfs_osp_osd_vars,
- 					       &osp->opd_dt_dev);
-@@ -502,34 +528,29 @@ void osp_lprocfs_init(struct osp_device *osp)
+-					       obd->obd_type->typ_procroot,
+-					       lprocfs_osp_osd_vars,
+-					       &osp->opd_dt_dev);
+-	if (IS_ERR(obd->obd_proc_entry)) {
+-		CERROR("%s: can't register in lprocfs: %ld\n",
+-		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
+-		obd->obd_proc_entry = NULL;
++	obd->obd_vars = lprocfs_osp_obd_vars;
++	if (lprocfs_seq_obd_setup(obd) != 0)
  		return;
- 	}
+-	}
  
 -	rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd);
-+	rc = lprocfs_seq_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd);
++	rc = lprocfs_seq_add_vars(obd->obd_proc_entry, lprocfs_osp_osd_vars,
++				  &osp->opd_dt_dev);
  	if (rc) {
- 		CERROR("%s: can't register in lprocfs: %ld\n",
- 		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
+-		CERROR("%s: can't register in lprocfs: %ld\n",
+-		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
++		CERROR("%s: can't register in lprocfs, rc %d\n",
++		       obd->obd_name, rc);
  		return;
  	}
-+	obd->obd_vars = lprocfs_osp_obd_vars;
  
  	ptlrpc_lprocfs_register_obd(obd);
  
-+	if (osp->opd_connect_mdt || obd->obd_type->typ_procsym == NULL ||
-+	    !strstr(obd->obd_name, "osc"))
++	if (osp->opd_connect_mdt || !strstr(obd->obd_name, "osc"))
++		return;
++
++	/* If the real OSC is present which is the case for setups
++	 * with both server and clients on the same node then use
++	 * the OSC's proc root */
++	type = class_search_type(LUSTRE_OSC_NAME);
++	if (type != NULL && type->typ_procroot != NULL)
++		osc_proc_dir = type->typ_procroot;
++	else
++		osc_proc_dir = obd->obd_type->typ_procsym;
++
++	if (osc_proc_dir == NULL)
 +		return;
 +
  	/* for compatibility we link old procfs's OSC entries to osp ones */
@@ -612,31 +636,28 @@ index 75ebeb1..1ec40fc 100644
 -			OBD_FREE(name, strlen(obd->obd_name) + 1);
 -			osp->opd_symlink = symlink;
 -		}
-+	symlink = lprocfs_add_symlink(obd->obd_name, obd->obd_type->typ_procsym,
-+				      "../osp/%s", obd->obd_name);
-+	if (symlink == NULL) {
+-	}
++	osp->opd_symlink = lprocfs_add_symlink(obd->obd_name, osc_proc_dir,
++					       "../osp/%s", obd->obd_name);
++	if (osp->opd_symlink == NULL)
 +		CERROR("could not register OSC symlink for "
 +			"/proc/fs/lustre/osp/%s.", obd->obd_name);
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
-+	} else {
-+		osp->opd_symlink = symlink;
- 	}
  }
  
+ #endif /* LPROCFS */
 diff --git a/lustre/osp/lwp_dev.c b/lustre/osp/lwp_dev.c
-index dc4f978..b6e84e1 100644
+index a73973a..c115ee6 100644
 --- a/lustre/osp/lwp_dev.c
 +++ b/lustre/osp/lwp_dev.c
-@@ -184,25 +184,13 @@ const struct lu_device_operations lwp_lu_ops = {
+@@ -184,25 +184,9 @@ const struct lu_device_operations lwp_lu_ops = {
  	.ldo_process_config	= lwp_process_config,
  };
  
 -static struct lprocfs_vars lprocfs_lwp_module_vars[] = {
 -	{ "num_refs",		lprocfs_rd_numrefs, 0, 0 },
-+static struct lprocfs_seq_vars lprocfs_lwp_obd_vars[] = {
- 	{ 0 }
- };
- 
+-	{ 0 }
+-};
+-
 -static struct lprocfs_vars lprocfs_lwp_obd_vars[] = {
 -	{ 0 }
 -};
@@ -654,19 +675,18 @@ index dc4f978..b6e84e1 100644
  	int			   rc;
  	ENTRY;
  
-@@ -231,8 +219,8 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
+@@ -231,8 +215,7 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
  		RETURN(rc);
  	}
  
 -	lprocfs_lwp_init_vars(&lvars);
 -	if (lprocfs_obd_setup(lwp->lpd_obd, lvars.obd_vars) == 0)
-+	lwp->lpd_obd->obd_vars = lprocfs_lwp_obd_vars;
 +	if (lprocfs_seq_obd_setup(lwp->lpd_obd) == 0)
  		ptlrpc_lprocfs_register_obd(lwp->lpd_obd);
  
  	RETURN(0);
 diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
-index a8d75ea..336b9f0 100644
+index 60bf8ef..b0c68ad 100644
 --- a/lustre/osp/osp_dev.c
 +++ b/lustre/osp/osp_dev.c
 @@ -366,7 +366,7 @@ static int osp_process_config(const struct lu_env *env,
@@ -693,24 +713,13 @@ index a8d75ea..336b9f0 100644
  		if (rc > 0)
  			rc = 0;
  		if (rc == -ENOSYS) {
-@@ -844,6 +842,9 @@ static struct lu_device *osp_device_fini(const struct lu_env *env,
- 			OBD_FREE_PTR(cli->cl_rpc_lock);
- 			cli->cl_rpc_lock = NULL;
- 		}
-+	} else {
-+		if (m->opd_obd->obd_type->typ_procsym != NULL)
-+			lprocfs_remove(&m->opd_obd->obd_type->typ_procsym);
- 	}
- 
- 	rc = client_obd_cleanup(m->opd_obd);
-@@ -1233,33 +1234,26 @@ struct llog_operations osp_mds_ost_orig_logops;
+@@ -1238,33 +1236,27 @@ struct llog_operations osp_mds_ost_orig_logops;
  
  static int __init osp_mod_init(void)
  {
 -	struct lprocfs_static_vars	 lvars;
--	cfs_proc_dir_entry_t		*osc_proc_dir;
+ 	struct obd_type *type;
 -	int				 rc;
-+	struct obd_type *type;
 +	int rc;
  
  	rc = lu_kmem_init(osp_caches);
@@ -718,13 +727,13 @@ index a8d75ea..336b9f0 100644
  		return rc;
  
 -	lprocfs_osp_init_vars(&lvars);
--
- 	rc = class_register_type(&osp_obd_device_ops, NULL, NULL,
+ 
+ 	rc = class_register_type(&osp_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
+-				 lvars.module_vars,
++				 NULL,
  #endif
- 				LUSTRE_OSP_NAME, &osp_device_type);
+ 				 LUSTRE_OSP_NAME, &osp_device_type);
 -
 -	/* create "osc" entry in procfs for compatibility purposes */
  	if (rc != 0) {
@@ -734,36 +743,27 @@ index a8d75ea..336b9f0 100644
  
 -	lprocfs_lwp_init_vars(&lvars);
 -
- 	rc = class_register_type(&lwp_obd_device_ops, NULL, NULL,
+ 	rc = class_register_type(&lwp_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
+-				 lvars.module_vars,
++				 NULL,
  #endif
- 				LUSTRE_LWP_NAME, &lwp_device_type);
+ 				 LUSTRE_LWP_NAME, &lwp_device_type);
  	if (rc != 0) {
-@@ -1273,21 +1267,23 @@ static int __init osp_mod_init(void)
- 	osp_mds_ost_orig_logops.lop_add = llog_cat_add_rec;
- 	osp_mds_ost_orig_logops.lop_declare_add = llog_cat_declare_add_rec;
- 
--	osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
--	if (osc_proc_dir == NULL) {
--		osc_proc_dir = lprocfs_register("osc", proc_lustre_root, NULL,
--						NULL);
--		if (IS_ERR(osc_proc_dir))
--			CERROR("osp: can't create compat entry \"osc\": %d\n",
--			       (int) PTR_ERR(osc_proc_dir));
-+	type = class_search_type(LUSTRE_OSC_NAME);
-+	if (type)
-+		return rc;
-+
-+	type = class_search_type(LUSTRE_OSP_NAME);
+@@ -1284,18 +1276,18 @@ static int __init osp_mod_init(void)
+ 		return rc;
+ 
+ 	type = class_search_type(LUSTRE_OSP_NAME);
+-	type->typ_procsym = lprocfs_register("osc", proc_lustre_root,
+-					     NULL, NULL);
+-	if (IS_ERR(type->typ_procsym))
 +	type->typ_procsym = lprocfs_seq_register("osc", proc_lustre_root,
 +						 NULL, NULL);
 +	if (IS_ERR(type->typ_procsym)) {
-+		CERROR("osp: can't create compat entry \"osc\": %d\n",
-+		       (int) PTR_ERR(type->typ_procsym));
+ 		CERROR("osp: can't create compat entry \"osc\": %d\n",
+ 		       (int) PTR_ERR(type->typ_procsym));
 +		type->typ_procsym = NULL;
- 	}
++	}
  	return rc;
  }
  
@@ -775,10 +775,10 @@ index a8d75ea..336b9f0 100644
  	class_unregister_type(LUSTRE_OSP_NAME);
  	lu_kmem_fini(osp_caches);
 diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
-index 2af16c0..84eca11 100644
+index 1291374..66ad203 100644
 --- a/lustre/osp/osp_internal.h
 +++ b/lustre/osp/osp_internal.h
-@@ -526,7 +526,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
+@@ -530,7 +530,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
  int osp_init_pre_fid(struct osp_device *osp);
  
  /* lproc_osp.c */
@@ -786,7 +786,7 @@ index 2af16c0..84eca11 100644
  void osp_lprocfs_init(struct osp_device *osp);
  
  /* osp_sync.c */
-@@ -540,7 +539,6 @@ int osp_sync_fini(struct osp_device *d);
+@@ -544,7 +543,6 @@ int osp_sync_fini(struct osp_device *d);
  void __osp_sync_check_for_work(struct osp_device *d);
  
  /* lwp_dev.c */
@@ -795,5 +795,5 @@ index 2af16c0..84eca11 100644
  extern struct lu_device_type lwp_device_type;
  
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index 06e3571..d9bcc89 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 2670599090a754d9fa8c7d952b530bc8fb88d56e Mon Sep 17 00:00:00 2001
+From 1394aacb441c3ba07b24a4b465f2496af8eb3c73 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Sun, 9 Feb 2014 11:08:45 -0500
-Subject: [PATCH 06/12] LU-3319 procfs: move lod proc handling to seq_files
+Date: Wed, 26 Mar 2014 19:57:44 -0400
+Subject: [PATCH 6/9] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the lod
@@ -10,14 +10,14 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
 ---
- lustre/lod/lod_dev.c      |  39 ++++---
+ lustre/lod/lod_dev.c      |  23 ++--
  lustre/lod/lod_internal.h |   1 -
  lustre/lod/lod_pool.c     |   7 +-
- lustre/lod/lproc_lod.c    | 251 ++++++++++++++++++++++++----------------------
- 4 files changed, 152 insertions(+), 146 deletions(-)
+ lustre/lod/lproc_lod.c    | 267 +++++++++++++++++++++++++---------------------
+ 4 files changed, 157 insertions(+), 141 deletions(-)
 
 diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
-index a451462..8776aa3 100644
+index a653d6a..1baeb37 100644
 --- a/lustre/lod/lod_dev.c
 +++ b/lustre/lod/lod_dev.c
 @@ -289,12 +289,10 @@ static int lod_process_config(const struct lu_env *env,
@@ -36,70 +36,56 @@ index a451462..8776aa3 100644
  		if (rc > 0)
  			rc = 0;
  		GOTO(out, rc);
-@@ -890,19 +888,16 @@ static struct obd_ops lod_obd_device_ops = {
+@@ -891,7 +889,6 @@ static struct obd_ops lod_obd_device_ops = {
  
  static int __init lod_mod_init(void)
  {
 -	struct lprocfs_static_vars  lvars = { 0 };
--	cfs_proc_dir_entry_t       *lov_proc_dir;
--	int			    rc;
-+	struct obd_type *lod, *lov;
-+	int rc;
+ 	struct obd_type	*type;
+ 	int rc;
  
- 	rc = lu_kmem_init(lod_caches);
+@@ -899,11 +896,9 @@ static int __init lod_mod_init(void)
  	if (rc)
  		return rc;
  
 -	lprocfs_lod_init_vars(&lvars);
 -
- 	rc = class_register_type(&lod_obd_device_ops, NULL, NULL,
+ 	rc = class_register_type(&lod_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
+-				 lvars.module_vars,
++				 NULL,
  #endif
- 				LUSTRE_LOD_NAME, &lod_device_type);
+ 				 LUSTRE_LOD_NAME, &lod_device_type);
  	if (rc) {
-@@ -911,23 +906,25 @@ static int __init lod_mod_init(void)
- 	}
+@@ -917,18 +912,18 @@ static int __init lod_mod_init(void)
+ 		return rc;
  
- 	/* create "lov" entry in procfs for compatibility purposes */
--	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
--	if (lov_proc_dir == NULL) {
--		lov_proc_dir = lprocfs_register("lov", proc_lustre_root,
--						NULL, NULL);
--		if (IS_ERR(lov_proc_dir))
-+	lod = class_search_type(LUSTRE_LOD_NAME);
-+	lov = class_search_type(LUSTRE_LOV_NAME);
-+	if (lov == NULL) {
-+		lod->typ_procsym = lprocfs_seq_register("lov", proc_lustre_root,
-+							NULL, NULL);
-+		if (IS_ERR(lod->typ_procsym)) {
- 			CERROR("lod: can't create compat entry \"lov\": %d\n",
--			       (int)PTR_ERR(lov_proc_dir));
-+			       (int)PTR_ERR(lod->typ_procsym));
-+			lod->typ_procsym = NULL;
-+		}
-+	} else {
-+		/* Map lov proc root to lod symlink */
-+		lod->typ_procsym = lov->typ_procroot;
- 	}
--
+ 	type = class_search_type(LUSTRE_LOD_NAME);
+-	type->typ_procsym = lprocfs_register("lov", proc_lustre_root,
+-					     NULL, NULL);
+-	if (IS_ERR(type->typ_procsym))
++	type->typ_procsym = lprocfs_seq_register("lov", proc_lustre_root,
++						 NULL, NULL);
++	if (IS_ERR(type->typ_procsym)) {
+ 		CERROR("lod: can't create compat entry \"lov\": %d\n",
+ 		       (int)PTR_ERR(type->typ_procsym));
++		type->typ_procsym = NULL;
++	}
  	return rc;
  }
  
  static void __exit lod_mod_exit(void)
  {
--
 -	lprocfs_try_remove_proc_entry("lov", proc_lustre_root);
 -
  	class_unregister_type(LUSTRE_LOD_NAME);
  	lu_kmem_fini(lod_caches);
  }
 diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h
-index 2a00890..65ba47a 100644
+index c3b1bc3..fc18f3d 100644
 --- a/lustre/lod/lod_internal.h
 +++ b/lustre/lod/lod_internal.h
-@@ -431,7 +431,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
+@@ -432,7 +432,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
  int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *);
  
  /* lproc_lod.c */
@@ -133,10 +119,10 @@ index 98b2416..1849e5d 100644
  						       &pool_proc_operations);
  	if (IS_ERR(new_pool->pool_proc_entry)) {
 diff --git a/lustre/lod/lproc_lod.c b/lustre/lod/lproc_lod.c
-index e976063..e420a5e 100644
+index e976063..1598658 100644
 --- a/lustre/lod/lproc_lod.c
 +++ b/lustre/lod/lproc_lod.c
-@@ -42,23 +42,22 @@
+@@ -42,23 +42,23 @@
  #include <lustre_param.h>
  
  #ifdef LPROCFS
@@ -163,11 +149,12 @@ index e976063..e420a5e 100644
 +			 size_t count, loff_t *off)
  {
 -	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  	__u64 val;
  	int rc;
-@@ -73,24 +72,24 @@ static int lod_wr_stripesize(struct file *file, const char *buffer,
+@@ -73,24 +73,25 @@ static int lod_wr_stripesize(struct file *file, const char *buffer,
  	lod->lod_desc.ld_default_stripe_size = val;
  	return count;
  }
@@ -196,11 +183,12 @@ index e976063..e420a5e 100644
 +			   size_t count, loff_t *off)
  {
 -	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  	__u64 val;
  	int rc;
-@@ -104,23 +103,23 @@ static int lod_wr_stripeoffset(struct file *file, const char *buffer,
+@@ -104,23 +105,24 @@ static int lod_wr_stripeoffset(struct file *file, const char *buffer,
  	lod->lod_desc.ld_default_stripe_offset = val;
  	return count;
  }
@@ -228,11 +216,12 @@ index e976063..e420a5e 100644
 +			 size_t count, loff_t *off)
  {
 -	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  	int val, rc;
  
-@@ -134,24 +133,24 @@ static int lod_wr_stripetype(struct file *file, const char *buffer,
+@@ -134,24 +136,25 @@ static int lod_wr_stripetype(struct file *file, const char *buffer,
  	lod->lod_desc.ld_pattern = val;
  	return count;
  }
@@ -261,11 +250,12 @@ index e976063..e420a5e 100644
 +			  size_t count, loff_t *off)
  {
 -	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  	int val, rc;
  
-@@ -165,62 +164,57 @@ static int lod_wr_stripecount(struct file *file, const char *buffer,
+@@ -165,62 +168,58 @@ static int lod_wr_stripecount(struct file *file, const char *buffer,
  	lod->lod_desc.ld_default_stripe_count = val;
  	return count;
  }
@@ -293,7 +283,7 @@ index e976063..e420a5e 100644
 +static int lod_activeobd_seq_show(struct seq_file *m, void *v)
  {
 -	struct obd_device* dev = (struct obd_device*)data;
-+	struct obd_device* dev = m->private;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  
  	LASSERT(dev != NULL);
@@ -344,11 +334,12 @@ index e976063..e420a5e 100644
 +			   size_t count, loff_t *off)
  {
 -	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  	int val, rc;
  
-@@ -238,24 +232,24 @@ static int lod_wr_qos_priofree(struct file *file, const char *buffer,
+@@ -238,24 +237,25 @@ static int lod_wr_qos_priofree(struct file *file, const char *buffer,
  	lod->lod_qos.lq_reset = 1;
  	return count;
  }
@@ -377,11 +368,12 @@ index e976063..e420a5e 100644
 +			      size_t count, loff_t *off)
  {
 -	struct obd_device *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file   *m = file->private_data;
++	struct obd_device *dev = m->private;
  	struct lod_device *lod;
  	int val, rc;
  
-@@ -273,23 +267,23 @@ static int lod_wr_qos_thresholdrr(struct file *file, const char *buffer,
+@@ -273,23 +273,24 @@ static int lod_wr_qos_thresholdrr(struct file *file, const char *buffer,
  	lod->lod_qos.lq_dirty = 1;
  	return count;
  }
@@ -409,11 +401,12 @@ index e976063..e420a5e 100644
 +			 size_t count, loff_t *off)
  {
 -	struct obd_device	*dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*dev = m->private;
  	struct lustre_cfg_bufs	 bufs;
  	struct lod_device	*lod;
  	struct lu_device	*next;
-@@ -327,6 +321,7 @@ static int lod_wr_qos_maxage(struct file *file, const char *buffer,
+@@ -327,6 +328,7 @@ static int lod_wr_qos_maxage(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -421,7 +414,7 @@ index e976063..e420a5e 100644
  
  static void *lod_osts_seq_start(struct seq_file *p, loff_t *pos)
  {
-@@ -414,56 +409,63 @@ static const struct seq_operations lod_osts_sops = {
+@@ -414,56 +416,63 @@ static const struct seq_operations lod_osts_sops = {
  
  static int lod_osts_seq_open(struct inode *inode, struct file *file)
  {
@@ -452,6 +445,16 @@ index e976063..e420a5e 100644
 -	{ "qos_prio_free",lod_rd_qos_priofree,    lod_wr_qos_priofree, 0 },
 -	{ "qos_threshold_rr",  lod_rd_qos_thresholdrr, lod_wr_qos_thresholdrr, 0 },
 -	{ "qos_maxage",   lod_rd_qos_maxage,      lod_wr_qos_maxage, 0 },
+-	{ 0 }
+-};
+-
+-static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
+-	{ "blocksize",    lprocfs_dt_rd_blksize, 0, 0 },
+-	{ "kbytestotal",  lprocfs_dt_rd_kbytestotal, 0, 0 },
+-	{ "kbytesfree",   lprocfs_dt_rd_kbytesfree, 0, 0 },
+-	{ "kbytesavail",  lprocfs_dt_rd_kbytesavail, 0, 0 },
+-	{ "filestotal",   lprocfs_dt_rd_filestotal, 0, 0 },
+-	{ "filesfree",    lprocfs_dt_rd_filesfree, 0, 0 },
 +LPROC_SEQ_FOPS_RO_TYPE(lod, uuid);
 +
 +LPROC_SEQ_FOPS_RO_TYPE(lod, dt_blksize);
@@ -487,13 +490,8 @@ index e976063..e420a5e 100644
  	{ 0 }
  };
  
--static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
--	{ "blocksize",    lprocfs_dt_rd_blksize, 0, 0 },
--	{ "kbytestotal",  lprocfs_dt_rd_kbytestotal, 0, 0 },
--	{ "kbytesfree",   lprocfs_dt_rd_kbytesfree, 0, 0 },
--	{ "kbytesavail",  lprocfs_dt_rd_kbytesavail, 0, 0 },
--	{ "filestotal",   lprocfs_dt_rd_filestotal, 0, 0 },
--	{ "filesfree",    lprocfs_dt_rd_filesfree, 0, 0 },
+-static struct lprocfs_vars lprocfs_lod_module_vars[] = {
+-	{ "num_refs",     lprocfs_rd_numrefs,     0, 0 },
 +static struct lprocfs_seq_vars lprocfs_lod_osd_vars[] = {
 +	{ "blocksize",		&lod_dt_blksize_fops		},
 +	{ "kbytestotal",	&lod_dt_kbytestotal_fops	},
@@ -504,11 +502,6 @@ index e976063..e420a5e 100644
  	{ 0 }
  };
  
--static struct lprocfs_vars lprocfs_lod_module_vars[] = {
--	{ "num_refs",     lprocfs_rd_numrefs,     0, 0 },
--	{ 0 }
--};
--
 -void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars)
 -{
 -	lvars->module_vars	= lprocfs_lod_module_vars;
@@ -518,13 +511,18 @@ index e976063..e420a5e 100644
  static const struct file_operations lod_proc_target_fops = {
  	.owner   = THIS_MODULE,
  	.open    = lod_osts_seq_open,
-@@ -475,20 +477,18 @@ static const struct file_operations lod_proc_target_fops = {
+@@ -474,21 +483,21 @@ static const struct file_operations lod_proc_target_fops = {
+ 
  int lod_procfs_init(struct lod_device *lod)
  {
- 	struct obd_device *obd = lod2obd(lod);
+-	struct obd_device *obd = lod2obd(lod);
 -	struct lprocfs_static_vars lvars;
 -	cfs_proc_dir_entry_t *lov_proc_dir;
- 	int rc;
+-	int rc;
++	struct obd_device	*obd = lod2obd(lod);
++	struct proc_dir_entry	*lov_proc_dir = NULL;
++	struct obd_type		*type;
++	int			 rc;
  
 -	lprocfs_lod_init_vars(&lvars);
 -	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
@@ -543,7 +541,7 @@ index e976063..e420a5e 100644
  	if (rc) {
  		CERROR("%s: cannot setup procfs entry: %d\n",
  		       obd->obd_name, rc);
-@@ -503,9 +503,9 @@ int lod_procfs_init(struct lod_device *lod)
+@@ -503,9 +512,9 @@ int lod_procfs_init(struct lod_device *lod)
  		GOTO(out, rc);
  	}
  
@@ -556,42 +554,38 @@ index e976063..e420a5e 100644
  	if (IS_ERR(lod->lod_pool_proc_entry)) {
  		rc = PTR_ERR(lod->lod_pool_proc_entry);
  		lod->lod_pool_proc_entry = NULL;
-@@ -514,14 +514,18 @@ int lod_procfs_init(struct lod_device *lod)
+@@ -514,14 +523,24 @@ int lod_procfs_init(struct lod_device *lod)
  		GOTO(out, rc);
  	}
  
 -	/* for compatibility we link old procfs's OSC entries to osp ones */
 -	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
 -	if (lov_proc_dir != NULL && strstr(obd->obd_name, "lov") != NULL)
-+	/* for compatibility we link old procfs's LOV entries to lod ones */
-+	if (obd->obd_type->typ_procsym != NULL) {
- 		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
+-		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
 -						       lov_proc_dir,
 -						       "../lod/%s",
 -						       obd->obd_name);
--
-+							obd->obd_type->typ_procsym,
-+							"../lod/%s",
-+							obd->obd_name);
-+		if (lod->lod_symlink == NULL) {
-+			CERROR("could not register LOV symlink for "
-+				"/proc/fs/lustre/lod/%s.", obd->obd_name);
-+			lprocfs_remove(&obd->obd_type->typ_procsym);
-+		}
-+	}
++	/* If the real LOV is present which is the case for setups
++	 * with both server and clients on the same node then use
++	 * the LOV's proc root */
++	type = class_search_type(LUSTRE_LOV_NAME);
++	if (type != NULL && type->typ_procroot != NULL)
++		lov_proc_dir = type->typ_procroot;
++	else
++		lov_proc_dir = obd->obd_type->typ_procsym;
++
++	if (lov_proc_dir == NULL)
++		RETURN(0);
+ 
++	/* for compatibility we link old procfs's LOV entries to lod ones */
++	lod->lod_symlink = lprocfs_add_symlink(obd->obd_name, lov_proc_dir,
++					       "../lod/%s", obd->obd_name);
++	if (lod->lod_symlink == NULL)
++		CERROR("could not register LOV symlink for "
++			"/proc/fs/lustre/lod/%s.", obd->obd_name);
  	RETURN(0);
  
  out:
-@@ -542,6 +546,9 @@ void lod_procfs_fini(struct lod_device *lod)
- 		lod->lod_pool_proc_entry = NULL;
- 	}
- 
-+	if (obd->obd_type->typ_procsym != NULL)
-+		lprocfs_remove(&obd->obd_type->typ_procsym);
-+
- 	lprocfs_obd_cleanup(obd);
- }
- 
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
similarity index 89%
rename from sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index c271eb7..5c1c9cd 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 9ab620dbc6aae86b9d39d97ba50912dc93b6e4e2 Mon Sep 17 00:00:00 2001
+From 039e3e44e07b59923d94bea976173d9e3cbd0ba9 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Sun, 9 Feb 2014 11:04:31 -0500
-Subject: [PATCH 08/12] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Date: Tue, 25 Mar 2014 11:10:33 -0400
+Subject: [PATCH 7/9] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds
@@ -10,21 +10,21 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Icbafdcd2c2fe3959a51dda3f9c715b0ff8d95742
 ---
- lustre/mdt/mdt_coordinator.c      | 259 +++++++--------
+ lustre/mdt/mdt_coordinator.c      | 269 +++++++---------
  lustre/mdt/mdt_handler.c          |  16 +-
  lustre/mdt/mdt_hsm_cdt_actions.c  |   5 +-
  lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
  lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
  lustre/mdt/mdt_internal.h         |  14 +-
- lustre/mdt/mdt_lproc.c            | 639 ++++++++++++++++++--------------------
+ lustre/mdt/mdt_lproc.c            | 659 +++++++++++++++++++-------------------
  lustre/mdt/mdt_mds.c              |  12 +-
- 8 files changed, 442 insertions(+), 513 deletions(-)
+ 8 files changed, 469 insertions(+), 516 deletions(-)
 
 diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
-index 037bcbd..9bbcbd4 100644
+index a9ee560..062f6cc 100644
 --- a/lustre/mdt/mdt_coordinator.c
 +++ b/lustre/mdt/mdt_coordinator.c
-@@ -46,7 +46,7 @@
+@@ -45,7 +45,7 @@
  #include <lustre_log.h>
  #include "mdt_internal.h"
  
@@ -33,7 +33,7 @@ index 037bcbd..9bbcbd4 100644
  
  /**
   * get obj and HSM attributes on a fid
-@@ -393,7 +393,7 @@ int hsm_cdt_procfs_init(struct mdt_device *mdt)
+@@ -392,7 +392,7 @@ int hsm_cdt_procfs_init(struct mdt_device *mdt)
  	ENTRY;
  
  	/* init /proc entries, failure is not critical */
@@ -42,7 +42,7 @@ index 037bcbd..9bbcbd4 100644
  					     mdt2obd_dev(mdt)->obd_proc_entry,
  					     lprocfs_mdt_hsm_vars, mdt);
  	if (IS_ERR(cdt->cdt_proc_dir)) {
-@@ -425,7 +425,7 @@ void  hsm_cdt_procfs_fini(struct mdt_device *mdt)
+@@ -424,7 +424,7 @@ void  hsm_cdt_procfs_fini(struct mdt_device *mdt)
   * \param none
   * \retval var vector
   */
@@ -51,7 +51,7 @@ index 037bcbd..9bbcbd4 100644
  {
  	return lprocfs_mdt_hsm_vars;
  }
-@@ -1786,22 +1786,17 @@ static __u64 hsm_policy_str2bit(const char *name)
+@@ -1785,22 +1785,17 @@ static __u64 hsm_policy_str2bit(const char *name)
   * \param hexa [IN] print mask before bit names
   * \param buffer [OUT] string
   * \param count [IN] size of buffer
@@ -80,7 +80,7 @@ index 037bcbd..9bbcbd4 100644
  	for (i = 0; i < CDT_POLICY_SHIFT_COUNT; i++) {
  		bit = (1ULL << i);
  
-@@ -1810,48 +1805,34 @@ static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
+@@ -1809,48 +1804,37 @@ static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
  				break;
  		}
  		if (bit & mask)
@@ -95,10 +95,12 @@ index 037bcbd..9bbcbd4 100644
 -		count -= sz;
 +			seq_printf(m, "%s ", hsm_policy_names[j].name);
  	}
--	/* remove last ' ' */
+ 	/* remove last ' ' */
 -	*ptr = '\0';
 -	ptr--;
 -	RETURN(ptr - buffer);
++	m->count--;
++	seq_putc(m, '\0');
  }
  
  /* methods to read/write HSM policy flags */
@@ -140,7 +142,7 @@ index 037bcbd..9bbcbd4 100644
  	int			 rc;
  	ENTRY;
  
-@@ -1884,18 +1865,10 @@ static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
+@@ -1883,18 +1867,10 @@ static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
  
  		policy = hsm_policy_str2bit(token);
  		if (policy == 0) {
@@ -156,13 +158,13 @@ index 037bcbd..9bbcbd4 100644
 -			      "supported policies are: %s\n", mdt_obd_name(mdt),
 -			      token, msg);
 -			OBD_FREE(msg, sz);
-+				"supported policies are: \n", mdt_obd_name(mdt),
-+				token);
++			      "supported policies are:\n", mdt_obd_name(mdt),
++			      token);
 +			hsm_policy_bit2str(m, 0, false);
  			GOTO(out, rc = -EINVAL);
  		}
  		switch (sign) {
-@@ -1934,25 +1907,24 @@ out:
+@@ -1933,25 +1909,25 @@ out:
  	OBD_FREE(buf, count + 1);
  	RETURN(rc);
  }
@@ -193,11 +195,12 @@ index 037bcbd..9bbcbd4 100644
  									\
  {									\
 -	struct mdt_device	*mdt = data;				\
-+	struct mdt_device	*mdt = ((struct seq_file *)file->private_data)->private;\
++	struct seq_file		*m = file->private_data;		\
++	struct mdt_device	*mdt = m->private;			\
  	struct coordinator	*cdt = &mdt->mdt_coordinator;		\
  	int			 val;					\
  	int			 rc;					\
-@@ -1966,7 +1938,7 @@ static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
+@@ -1965,7 +1941,7 @@ static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
  		RETURN(count);						\
  	}								\
  	RETURN(-EINVAL);						\
@@ -206,7 +209,7 @@ index 037bcbd..9bbcbd4 100644
  
  GENERATE_PROC_METHOD(cdt_loop_period)
  GENERATE_PROC_METHOD(cdt_grace_delay)
-@@ -1984,10 +1956,11 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
+@@ -1983,10 +1959,12 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
  #define CDT_PURGE_CMD    "purge"
  #define CDT_HELP_CMD     "help"
  
@@ -217,11 +220,12 @@ index 037bcbd..9bbcbd4 100644
 +			      size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
  	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	struct coordinator	*cdt = &(mdt->mdt_coordinator);
  	int			 rc, usage = 0;
-@@ -2041,83 +2014,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+@@ -2040,83 +2018,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
  	RETURN(count);
  }
  
@@ -327,7 +331,7 @@ index 037bcbd..9bbcbd4 100644
  }
  
  static inline enum hsm_copytool_action
-@@ -2137,9 +2098,9 @@ hsm_copytool_name2action(const char *name)
+@@ -2136,9 +2102,9 @@ hsm_copytool_name2action(const char *name)
  		return -1;
  }
  
@@ -340,7 +344,7 @@ index 037bcbd..9bbcbd4 100644
  {
  	char *buf, *pos, *name;
  	size_t buf_size;
-@@ -2183,69 +2144,73 @@ out:
+@@ -2182,69 +2148,76 @@ out:
  	RETURN(rc);
  }
  
@@ -352,7 +356,8 @@ index 037bcbd..9bbcbd4 100644
 +					size_t count, loff_t *off)
  {
 -	struct mdt_device *mdt = data;
-+	struct mdt_device *mdt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct mdt_device	*mdt = m->private;
  	struct coordinator *cdt = &mdt->mdt_coordinator;
  
 -	return lprocfs_wr_hsm_request_mask(file, buf, count,
@@ -368,8 +373,10 @@ index 037bcbd..9bbcbd4 100644
 +					size_t count, loff_t *off)
  {
 -	struct mdt_device *mdt = data;
-+	struct mdt_device *mdt = ((struct seq_file *)file->private_data)->private;
- 	struct coordinator *cdt = &mdt->mdt_coordinator;
+-	struct coordinator *cdt = &mdt->mdt_coordinator;
++	struct seq_file		*m = file->private_data;
++	struct mdt_device	*mdt = m->private;
++	struct coordinator	*cdt = &mdt->mdt_coordinator;
  
 -	return lprocfs_wr_hsm_request_mask(file, buf, count,
 +	return mdt_write_hsm_request_mask(file, buf, count,
@@ -384,8 +391,10 @@ index 037bcbd..9bbcbd4 100644
 +					size_t count, loff_t *off)
  {
 -	struct mdt_device *mdt = data;
-+	struct mdt_device *mdt = ((struct seq_file *)file->private_data)->private;
- 	struct coordinator *cdt = &mdt->mdt_coordinator;
+-	struct coordinator *cdt = &mdt->mdt_coordinator;
++	struct seq_file		*m = file->private_data;
++	struct mdt_device	*mdt = m->private;
++	struct coordinator	*cdt = &mdt->mdt_coordinator;
  
 -	return lprocfs_wr_hsm_request_mask(file, buf, count,
 +	return mdt_write_hsm_request_mask(file, buf, count,
@@ -461,10 +470,10 @@ index 037bcbd..9bbcbd4 100644
  	{ 0 }
  };
 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 17b7605..2b08be9 100644
+index 69b1c30..8b4634f 100644
 --- a/lustre/mdt/mdt_handler.c
 +++ b/lustre/mdt/mdt_handler.c
-@@ -4584,7 +4584,6 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4644,7 +4644,6 @@ static int mdt_process_config(const struct lu_env *env,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -472,7 +481,7 @@ index 17b7605..2b08be9 100644
  		struct obd_device	   *obd = d->ld_obd;
  
  		/* For interoperability */
-@@ -4619,14 +4618,13 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4679,14 +4678,13 @@ static int mdt_process_config(const struct lu_env *env,
  			}
  		}
  
@@ -492,7 +501,7 @@ index 17b7605..2b08be9 100644
  			if (rc > 0 || rc == -ENOSYS)
  				/* we don't understand; pass it on */
  				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5825,7 +5823,6 @@ static struct lu_device_type mdt_device_type = {
+@@ -5885,7 +5883,6 @@ static struct lu_device_type mdt_device_type = {
  
  static int __init mdt_mod_init(void)
  {
@@ -500,17 +509,17 @@ index 17b7605..2b08be9 100644
  	int rc;
  
  	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5840,10 +5837,9 @@ static int __init mdt_mod_init(void)
+@@ -5900,10 +5897,9 @@ static int __init mdt_mod_init(void)
  	if (rc)
  		GOTO(lu_fini, rc);
  
 -	lprocfs_mdt_init_vars(&lvars);
- 	rc = class_register_type(&mdt_obd_device_ops, NULL, NULL,
+ 	rc = class_register_type(&mdt_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
+-				 lvars.module_vars,
++				 NULL,
  #endif
- 				LUSTRE_MDT_NAME, &mdt_device_type);
+ 				 LUSTRE_MDT_NAME, &mdt_device_type);
  	if (rc)
 diff --git a/lustre/mdt/mdt_hsm_cdt_actions.c b/lustre/mdt/mdt_hsm_cdt_actions.c
 index da7f5a9..49c6b8b 100644
@@ -578,10 +587,10 @@ index 1300861..3125dcc 100644
  	RETURN(rc);
  }
 diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
-index c3d4f7f..7b0381a 100644
+index 7970b86..8fb96c8 100644
 --- a/lustre/mdt/mdt_internal.h
 +++ b/lustre/mdt/mdt_internal.h
-@@ -787,9 +787,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
+@@ -785,9 +785,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
  void mdt_thread_info_fini(struct mdt_thread_info *mti);
  struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
  
@@ -591,7 +600,7 @@ index c3d4f7f..7b0381a 100644
  int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
  		     const struct md_hsm *mh);
  
-@@ -924,13 +921,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
+@@ -925,13 +922,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
  int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
  
  /* coordinator control /proc interface */
@@ -609,7 +618,7 @@ index c3d4f7f..7b0381a 100644
  /* md_hsm helpers */
  struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
  				      const struct lu_fid *fid,
-@@ -1070,8 +1066,6 @@ enum {
+@@ -1071,8 +1067,6 @@ enum {
  };
  void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
  void mdt_stats_counter_init(struct lprocfs_stats *stats);
@@ -619,7 +628,7 @@ index c3d4f7f..7b0381a 100644
  void mdt_procfs_fini(struct mdt_device *mdt);
  
 diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c
-index 0ee5148..658f00d 100644
+index 0ee5148..a895d57 100644
 --- a/lustre/mdt/mdt_lproc.c
 +++ b/lustre/mdt/mdt_lproc.c
 @@ -156,7 +156,6 @@ static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
@@ -630,13 +639,12 @@ index 0ee5148..658f00d 100644
  LPROC_SEQ_FOPS(mdt_rename_stats);
  
  static int lproc_mdt_attach_rename_seqstat(struct mdt_device *mdt)
-@@ -213,143 +212,73 @@ void mdt_rename_counter_tally(struct mdt_thread_info *info,
+@@ -213,143 +212,76 @@ void mdt_rename_counter_tally(struct mdt_thread_info *info,
                                (unsigned int)ma->ma_attr.la_size);
  }
  
 -int mdt_procfs_init(struct mdt_device *mdt, const char *name)
-+static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
- {
+-{
 -	struct obd_device		*obd = mdt2obd_dev(mdt);
 -	struct lprocfs_static_vars	 lvars;
 -	int				 rc;
@@ -682,7 +690,8 @@ index 0ee5148..658f00d 100644
 -}
 -
 -void mdt_procfs_fini(struct mdt_device *mdt)
--{
++static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
+ {
 -	struct obd_device *obd = mdt2obd_dev(mdt);
 -
 -	if (obd->obd_proc_exports_entry != NULL) {
@@ -721,7 +730,8 @@ index 0ee5148..658f00d 100644
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int rc, val;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
 +	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int rc, val;
  
@@ -752,7 +762,7 @@ index 0ee5148..658f00d 100644
 -        *eof = 1;
 -        return snprintf(page, count, "%u\n",
 -                        mdt->mdt_identity_cache->uc_acquire_expire);
-+	return seq_printf(m,"%u\n", mdt->mdt_identity_cache->uc_acquire_expire);
++	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_acquire_expire);
  }
  
 -static int lprocfs_wr_identity_acquire_expire(struct file *file,
@@ -766,7 +776,8 @@ index 0ee5148..658f00d 100644
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int rc, val;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
 +	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int rc, val;
  
@@ -812,11 +823,12 @@ index 0ee5148..658f00d 100644
 +				size_t count, loff_t *off)
  {
 -	struct obd_device	*obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
  	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	struct upcall_cache	*hash = mdt->mdt_identity_cache;
  	int			 rc;
-@@ -388,11 +317,13 @@ static int lprocfs_wr_identity_upcall(struct file *file, const char *buffer,
+@@ -388,11 +320,14 @@ static int lprocfs_wr_identity_upcall(struct file *file, const char *buffer,
  		OBD_FREE(kernbuf, count + 1);
  	RETURN(rc);
  }
@@ -829,11 +841,12 @@ index 0ee5148..658f00d 100644
 +				 size_t count, void *data)
  {
 -        struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
          struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
          int rc, uid;
  
-@@ -403,11 +334,13 @@ static int lprocfs_wr_identity_flush(struct file *file, const char *buffer,
+@@ -403,11 +338,14 @@ static int lprocfs_wr_identity_flush(struct file *file, const char *buffer,
          mdt_flush_identity(mdt->mdt_identity_cache, uid);
          return count;
  }
@@ -846,11 +859,12 @@ index 0ee5148..658f00d 100644
 +				size_t count, void *data)
  {
 -	struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	struct identity_downcall_data *param;
  	int size = sizeof(*param), rc, checked = 0;
-@@ -415,7 +348,7 @@ static int lprocfs_wr_identity_info(struct file *file, const char *buffer,
+@@ -415,7 +353,7 @@ static int lprocfs_wr_identity_info(struct file *file, const char *buffer,
  again:
  	if (count < size) {
  		CERROR("%s: invalid data count = %lu, size = %d\n",
@@ -859,7 +873,7 @@ index 0ee5148..658f00d 100644
  		return -EINVAL;
  	}
  
-@@ -468,23 +401,24 @@ out:
+@@ -468,23 +406,25 @@ out:
  
  	return rc ? rc : count;
  }
@@ -887,11 +901,12 @@ index 0ee5148..658f00d 100644
 +			size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	int val, rc;
  
-@@ -521,64 +455,65 @@ static int lprocfs_wr_capa(struct file *file, const char *buffer,
+@@ -521,64 +461,67 @@ static int lprocfs_wr_capa(struct file *file, const char *buffer,
  		      mdt->mdt_lut.lut_oss_capa ? "enabled" : "disabled");
  	return count;
  }
@@ -945,7 +960,8 @@ index 0ee5148..658f00d 100644
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
 +	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
@@ -987,13 +1003,14 @@ index 0ee5148..658f00d 100644
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
++	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
          rc = lprocfs_write_helper(buffer, count, &val);
          if (rc)
-@@ -588,11 +523,13 @@ static int lprocfs_wr_ck_timeout(struct file *file, const char *buffer,
+@@ -588,11 +531,13 @@ static int lprocfs_wr_ck_timeout(struct file *file, const char *buffer,
          mdt->mdt_capa_conf = 1;
          return count;
  }
@@ -1009,16 +1026,17 @@ index 0ee5148..658f00d 100644
  {
          char *kbuf;
          char *tmpbuf;
-@@ -614,7 +551,7 @@ static int lprocfs_mdt_wr_evict_client(struct file *file, const char *buffer,
+@@ -614,7 +559,8 @@ static int lprocfs_mdt_wr_evict_client(struct file *file, const char *buffer,
          tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
  
          if (strncmp(tmpbuf, "nid:", 4) != 0) {
 -                count = lprocfs_wr_evict_client(file, buffer, count, data);
-+		count = lprocfs_evict_client_seq_write(file, buffer, count, off);
++		count = lprocfs_evict_client_seq_write(file, buffer, count,
++						       off);
                  goto out;
          }
  
-@@ -627,21 +564,21 @@ out:
+@@ -627,21 +573,22 @@ out:
  
  #undef BUFLEN
  
@@ -1044,13 +1062,14 @@ index 0ee5148..658f00d 100644
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
++	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
          rc = lprocfs_write_helper(buffer, count, &val);
          if (rc)
-@@ -659,22 +596,23 @@ static int lprocfs_wr_sec_level(struct file *file, const char *buffer,
+@@ -659,22 +606,24 @@ static int lprocfs_wr_sec_level(struct file *file, const char *buffer,
  	mdt->mdt_lut.lut_sec_level = val;
  	return count;
  }
@@ -1078,13 +1097,14 @@ index 0ee5148..658f00d 100644
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        int val, rc;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
++	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
 +	int val, rc;
  
          rc = lprocfs_write_helper(buffer, count, &val);
          if (rc)
-@@ -682,15 +620,15 @@ static int lprocfs_wr_cos(struct file *file, const char *buffer,
+@@ -682,15 +631,15 @@ static int lprocfs_wr_cos(struct file *file, const char *buffer,
          mdt_enable_cos(mdt, val);
          return count;
  }
@@ -1106,7 +1126,7 @@ index 0ee5148..658f00d 100644
  }
  
  static int safe_strtoul(const char *str, char **endp, unsigned long *res)
-@@ -708,10 +646,11 @@ static int safe_strtoul(const char *str, char **endp, unsigned long *res)
+@@ -708,11 +657,13 @@ static int safe_strtoul(const char *str, char **endp, unsigned long *res)
          return 0;
  }
  
@@ -1117,11 +1137,14 @@ index 0ee5148..658f00d 100644
 +			  size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
++	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	int rc;
  	char kernbuf[50], *tmp, *end, *errmsg;
-@@ -765,22 +704,23 @@ failed:
+ 	unsigned long uid, gid;
+@@ -765,23 +716,25 @@ failed:
  	      mdt_obd_name(mdt), buffer, errmsg, rc);
  	RETURN(rc);
  }
@@ -1151,11 +1174,14 @@ index 0ee5148..658f00d 100644
 +			    size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
- 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
++	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	int rc;
  	char *kernbuf, *errmsg;
-@@ -842,25 +782,26 @@ failed:
+ 	cfs_list_t tmp;
+@@ -842,25 +795,27 @@ failed:
  		OBD_FREE(kernbuf, count + 1);
  	RETURN(rc);
  }
@@ -1187,7 +1213,8 @@ index 0ee5148..658f00d 100644
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 -        char kernbuf[16];
 -        unsigned long val = 0;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
 +	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	struct obd_export *exp;
 +	char kernbuf[16];
@@ -1195,7 +1222,7 @@ index 0ee5148..658f00d 100644
  
          if (count > (sizeof(kernbuf) - 1))
                  return -EINVAL;
-@@ -902,20 +843,21 @@ static int lprocfs_wr_mdt_som(struct file *file, const char *buffer,
+@@ -902,20 +857,22 @@ static int lprocfs_wr_mdt_som(struct file *file, const char *buffer,
  
          return count;
  }
@@ -1220,11 +1247,12 @@ index 0ee5148..658f00d 100644
 +				size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	__u32 val;
  	int rc;
-@@ -930,22 +872,22 @@ static int lprocfs_wr_enable_remote_dir(struct file *file, const char *buffer,
+@@ -930,22 +887,23 @@ static int lprocfs_wr_enable_remote_dir(struct file *file, const char *buffer,
  	mdt->mdt_enable_remote_dir = val;
  	return count;
  }
@@ -1252,11 +1280,12 @@ index 0ee5148..658f00d 100644
 +				    size_t count, loff_t *off)
  {
 -	struct obd_device *obd = data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct obd_device *obd = m->private;
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	__u32 val;
  	int rc;
-@@ -957,97 +899,72 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
+@@ -957,97 +915,72 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
  	mdt->mdt_enable_remote_dir_gid = val;
  	return count;
  }
@@ -1420,7 +1449,7 @@ index 0ee5148..658f00d 100644
  	{ 0 }
  };
  
-@@ -1085,21 +1002,15 @@ int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v)
+@@ -1085,21 +1018,15 @@ int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v)
  
  int lprocfs_mdt_open_files_seq_open(struct inode *inode, struct file *file)
  {
@@ -1443,7 +1472,7 @@ index 0ee5148..658f00d 100644
  
  	return 0;
  }
-@@ -1140,3 +1051,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
+@@ -1140,3 +1067,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
          lprocfs_counter_init(stats, LPROC_MDT_CROSSDIR_RENAME, 0,
                               "crossdir_rename", "reqs");
  }
@@ -1512,7 +1541,7 @@ index 0ee5148..658f00d 100644
 +	lprocfs_job_stats_fini(obd);
 +}
 diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c
-index 367f659..4fa66c3 100644
+index 390164f..424ddf5 100644
 --- a/lustre/mdt/mdt_mds.c
 +++ b/lustre/mdt/mdt_mds.c
 @@ -464,6 +464,13 @@ static struct lu_device *mds_device_free(const struct lu_env *env,
@@ -1541,13 +1570,13 @@ index 367f659..4fa66c3 100644
  		l = ERR_PTR(rc);
 @@ -541,7 +549,7 @@ int mds_mod_init(void)
  
- 	return class_register_type(&mds_obd_device_ops, NULL, NULL,
+ 	return class_register_type(&mds_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--					lprocfs_mds_module_vars,
-+					NULL,
+-				   lprocfs_mds_module_vars,
++				   NULL,
  #endif
- 					LUSTRE_MDS_NAME, &mds_device_type);
+ 				   LUSTRE_MDS_NAME, &mds_device_type);
  }
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 87%
rename from sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index b2921fc..6c6106b 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,41 +1,36 @@
-From 6af3bd54359520829a6199e81171fd849a6656f4 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Thu, 27 Feb 2014 16:06:08 +0400
-Subject: [PATCH 07/12] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+From c6c3f4063e244cea365940adc0fd1a1c35d0b525 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Wed, 26 Mar 2014 20:01:52 -0400
+Subject: [PATCH 8/9] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd
 layer proc entries over to using seq_files.
 
-Conflicts:
-	lustre/mdd/mdd_lproc.c
-	lustre/lfsck/lfsck_layout.c
-
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
 ---
  lustre/include/lustre_lfsck.h    |   6 +-
  lustre/lfsck/lfsck_internal.h    |   9 +-
- lustre/lfsck/lfsck_layout.c      | 101 ++-------
- lustre/lfsck/lfsck_lib.c         |  77 +++----
+ lustre/lfsck/lfsck_layout.c      | 104 +++------
+ lustre/lfsck/lfsck_lib.c         |  88 +++-----
  lustre/lfsck/lfsck_namespace.c   |  75 ++-----
  lustre/mdd/mdd_device.c          |  25 +--
  lustre/mdd/mdd_internal.h        |   1 -
- lustre/mdd/mdd_lproc.c           | 300 ++++++++++++---------------
+ lustre/mdd/mdd_lproc.c           | 302 +++++++++++--------------
  lustre/obdclass/lprocfs_status.c |   9 +-
- lustre/ofd/lproc_ofd.c           | 436 ++++++++++++++++++++-------------------
- lustre/ofd/ofd_dev.c             |  48 ++---
+ lustre/ofd/lproc_ofd.c           | 467 ++++++++++++++++++++-------------------
+ lustre/ofd/ofd_dev.c             |  80 +++----
  lustre/ofd/ofd_internal.h        |   6 +-
  lustre/osd-ldiskfs/osd_handler.c |   1 +
  lustre/osd-zfs/osd_handler.c     |   1 +
- 14 files changed, 462 insertions(+), 633 deletions(-)
+ 14 files changed, 517 insertions(+), 657 deletions(-)
 
 diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
-index 1209bc2..bdb0955 100644
+index 0d6f666..5adbffe 100644
 --- a/lustre/include/lustre_lfsck.h
 +++ b/lustre/include/lustre_lfsck.h
-@@ -158,12 +158,12 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
+@@ -148,12 +148,12 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
  int lfsck_query(const struct lu_env *env, struct dt_device *key,
  		struct lfsck_request *lr);
  
@@ -52,10 +47,10 @@ index 1209bc2..bdb0955 100644
  static inline void lfsck_pack_rfa(struct lfsck_request *lr,
  				  const struct lu_fid *fid)
 diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
-index 9f20729..48d3d82 100644
+index 4f84c3b..c4e6430 100644
 --- a/lustre/lfsck/lfsck_internal.h
 +++ b/lustre/lfsck/lfsck_internal.h
-@@ -293,8 +293,7 @@ struct lfsck_operations {
+@@ -299,8 +299,7 @@ struct lfsck_operations {
  
  	int (*lfsck_dump)(const struct lu_env *env,
  			  struct lfsck_component *com,
@@ -65,7 +60,7 @@ index 9f20729..48d3d82 100644
  
  	int (*lfsck_double_scan)(const struct lu_env *env,
  				 struct lfsck_component *com);
-@@ -571,10 +570,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
+@@ -586,10 +585,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
  			     struct lfsck_component *com);
  void lfsck_instance_cleanup(const struct lu_env *env,
  			    struct lfsck_instance *lfsck);
@@ -80,10 +75,19 @@ index 9f20729..48d3d82 100644
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
  		    struct lfsck_position *pos, bool init);
 diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index f77ee87..27394e2 100644
+index de96726..c3b4458 100644
 --- a/lustre/lfsck/lfsck_layout.c
 +++ b/lustre/lfsck/lfsck_layout.c
-@@ -3657,69 +3657,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
+@@ -471,7 +471,7 @@ static struct lfsck_rbtree_node *lfsck_rbtree_new(const struct lu_env *env,
+ 		return ERR_PTR(-ENOMEM);
+ 	}
+ 
+-	rb_init_node(&lrn->lrn_node);
++	RB_CLEAR_NODE(&lrn->lrn_node);
+ 	lrn->lrn_seq = fid_seq(fid);
+ 	lrn->lrn_first_oid = fid_oid(fid) & ~LFSCK_RBTREE_BITMAP_MASK;
+ 	atomic_set(&lrn->lrn_known_count, 0);
+@@ -4798,69 +4798,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
  }
  
  static int lfsck_layout_dump(const struct lu_env *env,
@@ -152,17 +156,17 @@ index f77ee87..27394e2 100644
  		      lo->ll_pos_first_inconsistent);
 -	if (rc <= 0)
 -		goto out;
--
+ 
 -	buf += rc;
 -	len -= rc;
- 
+-
 -	rc = snprintf(buf, len,
 -		      "success_count: %u\n"
 +	seq_printf(m, "success_count: %u\n"
  		      "repaired_dangling: "LPU64"\n"
  		      "repaired_unmatched_pair: "LPU64"\n"
  		      "repaired_multiple_referenced: "LPU64"\n"
-@@ -3739,11 +3723,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4880,11 +4864,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		      lo->ll_objs_skipped,
  		      lo->ll_objs_failed_phase1,
  		      lo->ll_objs_failed_phase2);
@@ -174,7 +178,7 @@ index f77ee87..27394e2 100644
  
  	if (lo->ll_status == LS_SCANNING_PHASE1) {
  		__u64 pos;
-@@ -3760,8 +3739,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4901,8 +4880,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -184,7 +188,7 @@ index f77ee87..27394e2 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -3775,11 +3753,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4916,11 +4894,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed,
  			      new_checked);
@@ -196,29 +200,24 @@ index f77ee87..27394e2 100644
  
  		LASSERT(lfsck->li_di_oit != NULL);
  
-@@ -3792,47 +3765,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4933,12 +4906,8 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		pos = iops->store(env, lfsck->li_di_oit);
  		if (!lfsck->li_current_oit_processed)
  			pos--;
 -		rc = snprintf(buf, len, "current_position: "LPU64"\n", pos);
 -		if (rc <= 0)
 -			goto out;
--
++		seq_printf(m, "current_position: "LPU64"\n", pos);
+ 
 -		buf += rc;
 -		len -= rc;
--	} else if (lo->ll_status == LS_SCANNING_PHASE2) {
--		cfs_duration_t duration = cfs_time_current() -
--					  lfsck->li_time_last_checkpoint;
--		__u64 checked = lo->ll_objs_checked_phase1 + com->lc_new_checked;
--		__u64 speed = checked;
--		__u64 new_checked = com->lc_new_checked * HZ;
--		__u32 rtime = lo->ll_run_time_phase1 +
--			      cfs_duration_sec(duration + HALF_SEC);
--
--		if (duration != 0)
--			do_div(new_checked, duration);
--		if (rtime != 0)
--			do_div(speed, rtime);
+ 	} else if (lo->ll_status == LS_SCANNING_PHASE2) {
+ 		cfs_duration_t duration = cfs_time_current() -
+ 					  lfsck->li_time_last_checkpoint;
+@@ -4952,28 +4921,25 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 			do_div(new_checked, duration);
+ 		if (rtime != 0)
+ 			do_div(speed, rtime);
 -		rc = snprintf(buf, len,
 -			      "checked_phase1: "LPU64"\n"
 -			      "checked_phase2: "LPU64"\n"
@@ -237,15 +236,31 @@ index f77ee87..27394e2 100644
 -			      new_checked,
 -			      PFID(&com->lc_fid_latest_scanned_phase2));
 -		if (rc <= 0)
--			goto out;
--
++		rc = seq_printf(m, "checked_phase1: "LPU64"\n"
++				"checked_phase2: "LPU64"\n"
++				"run_time_phase1: %u seconds\n"
++				"run_time_phase2: %u seconds\n"
++				"average_speed_phase1: "LPU64" items/sec\n"
++				"average_speed_phase2: N/A\n"
++				"real-time_speed_phase1: "LPU64" items/sec\n"
++				"real-time_speed_phase2: N/A\n"
++				"current_position: "DFID"\n",
++				checked,
++				lo->ll_objs_checked_phase2,
++				rtime,
++				lo->ll_run_time_phase2,
++				speed,
++				new_checked,
++				PFID(&com->lc_fid_latest_scanned_phase2));
++		if (rc < 0)
+ 			goto out;
+ 
 -		buf += rc;
 -		len -= rc;
-+		seq_printf(m, "current_position: "LPU64"\n", pos);
  	} else {
  		__u64 speed1 = lo->ll_objs_checked_phase1;
  		__u64 speed2 = lo->ll_objs_checked_phase2;
-@@ -3841,8 +3774,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4982,8 +4948,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(speed1, lo->ll_run_time_phase1);
  		if (lo->ll_run_time_phase2 != 0)
  			do_div(speed2, lo->ll_run_time_phase2);
@@ -255,7 +270,7 @@ index f77ee87..27394e2 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -3857,18 +3789,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -4998,18 +4963,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed1,
  			      speed2);
@@ -276,10 +291,10 @@ index f77ee87..27394e2 100644
  
  static int lfsck_layout_master_double_scan(const struct lu_env *env,
 diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index de7b849..d358ca1 100644
+index 3b1fe0c..84ffc08 100644
 --- a/lustre/lfsck/lfsck_lib.c
 +++ b/lustre/lfsck/lfsck_lib.c
-@@ -426,77 +426,52 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
+@@ -899,21 +899,15 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
  	return 0;
  }
  
@@ -291,8 +306,9 @@ index de7b849..d358ca1 100644
  	int flag;
 -	int rc;
  	int i;
+ 	bool newline = (bits != 0 ? false : true);
  
--	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+-	rc = snprintf(*buf, *len, "%s:%c", prefix, newline ? '\n' : ' ');
 -	if (rc <= 0)
 -		return -ENOSPC;
 +	seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
@@ -302,20 +318,35 @@ index de7b849..d358ca1 100644
  	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
  		if (flag & bits) {
  			bits &= ~flag;
- 			if (names[i] != NULL) {
+@@ -921,69 +915,43 @@ int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
+ 				if (bits == 0)
+ 					newline = true;
+ 
 -				rc = snprintf(*buf, *len, "%s%c", names[i],
--					      bits != 0 ? ',' : '\n');
+-					      newline ? '\n' : ',');
 -				if (rc <= 0)
 -					return -ENOSPC;
 -
 -				*buf += rc;
 -				*len -= rc;
 +				seq_printf(m, "%s%c", names[i],
-+					   bits != 0 ? ',' : '\n');
++					   newline ? '\n' : ',');
  			}
  		}
  	}
+ 
+-	if (!newline) {
+-		rc = snprintf(*buf, *len, "\n");
+-		if (rc <= 0)
+-			return -ENOSPC;
+-
+-		*buf += rc;
+-		*len -= rc;
+-	}
+-
 -	return save - *len;
++	if (!newline)
++		seq_printf(m, "\n");
 +	return 0;
  }
  
@@ -328,7 +359,7 @@ index de7b849..d358ca1 100644
 -		rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
 -			      cfs_time_current_sec() - time);
 +		seq_printf(m, "%s: "LPU64" seconds\n", prefix,
-+			   cfs_time_current_sec() - time);
++			  cfs_time_current_sec() - time);
  	else
 -		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
 -	if (rc <= 0)
@@ -376,7 +407,7 @@ index de7b849..d358ca1 100644
  }
  
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -1149,7 +1124,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+@@ -1658,7 +1626,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
  
  /* external interfaces */
  
@@ -385,7 +416,7 @@ index de7b849..d358ca1 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1162,8 +1137,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+@@ -1671,8 +1639,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -394,8 +425,8 @@ index de7b849..d358ca1 100644
 +		seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
  		lfsck_instance_put(&env, lfsck);
  	} else {
- 		rc = -ENODEV;
-@@ -1203,7 +1177,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
+ 		rc = -ENXIO;
+@@ -1712,7 +1679,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_speed);
  
@@ -404,7 +435,7 @@ index de7b849..d358ca1 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1216,8 +1190,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
+@@ -1725,8 +1692,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -413,8 +444,8 @@ index de7b849..d358ca1 100644
 +		seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_async_windows);
  		lfsck_instance_put(&env, lfsck);
  	} else {
- 		rc = -ENODEV;
-@@ -1267,7 +1240,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
+ 		rc = -ENXIO;
+@@ -1776,7 +1742,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_windows);
  
@@ -423,7 +454,7 @@ index de7b849..d358ca1 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1283,7 +1256,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
+@@ -1792,7 +1758,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
  	if (likely(lfsck != NULL)) {
  		com = lfsck_component_find(lfsck, type);
  		if (likely(com != NULL)) {
@@ -433,7 +464,7 @@ index de7b849..d358ca1 100644
  		} else {
  			rc = -ENOTSUPP;
 diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
-index 6fc08fb..2abad67 100644
+index c80fb48..bcbfb8e 100644
 --- a/lustre/lfsck/lfsck_namespace.c
 +++ b/lustre/lfsck/lfsck_namespace.c
 @@ -1088,65 +1088,56 @@ static int lfsck_namespace_post(const struct lu_env *env,
@@ -604,10 +635,10 @@ index 6fc08fb..2abad67 100644
  
  static int lfsck_namespace_double_scan_main(void *args)
 diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
-index 40a4ee3..b0acecb 100644
+index 0fe590e..f1c76d6 100644
 --- a/lustre/mdd/mdd_device.c
 +++ b/lustre/mdd/mdd_device.c
-@@ -812,16 +812,16 @@ static int mdd_process_config(const struct lu_env *env,
+@@ -884,16 +884,16 @@ static int mdd_process_config(const struct lu_env *env,
          ENTRY;
  
          switch (cfg->lcfg_command) {
@@ -634,7 +665,7 @@ index 40a4ee3..b0acecb 100644
          case LCFG_SETUP:
                  rc = next->ld_ops->ldo_process_config(env, next, cfg);
                  if (rc)
-@@ -1497,11 +1497,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
+@@ -1564,11 +1564,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
  
  static int __init mdd_mod_init(void)
  {
@@ -646,20 +677,20 @@ index 40a4ee3..b0acecb 100644
  	rc = lu_kmem_init(mdd_caches);
  	if (rc)
  		return rc;
-@@ -1517,7 +1514,7 @@ static int __init mdd_mod_init(void)
+@@ -1584,7 +1581,7 @@ static int __init mdd_mod_init(void)
  
- 	rc = class_register_type(&mdd_obd_device_ops, NULL, NULL,
+ 	rc = class_register_type(&mdd_obd_device_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
+-				 lvars.module_vars,
++				 NULL,
  #endif
- 				LUSTRE_MDD_NAME, &mdd_device_type);
+ 				 LUSTRE_MDD_NAME, &mdd_device_type);
  	if (rc)
 diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
-index 0bfb2a2..bccef77 100644
+index b536821..8e67fa1 100644
 --- a/lustre/mdd/mdd_internal.h
 +++ b/lustre/mdd/mdd_internal.h
-@@ -342,7 +342,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
+@@ -346,7 +346,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
                                struct thandle *);
  
  /* mdd_lproc.c */
@@ -668,7 +699,7 @@ index 0bfb2a2..bccef77 100644
  int mdd_procfs_fini(struct mdd_device *mdd);
  
 diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
-index de379b3..5714ee6 100644
+index de379b3..7ac4afa 100644
 --- a/lustre/mdd/mdd_lproc.c
 +++ b/lustre/mdd/mdd_lproc.c
 @@ -49,56 +49,14 @@
@@ -711,10 +742,7 @@ index de379b3..5714ee6 100644
 -}
 -
 -int mdd_procfs_fini(struct mdd_device *mdd)
-+static ssize_t
-+mdd_atime_diff_seq_write(struct file *file, const char *buffer,
-+			 size_t count, loff_t *off)
- {
+-{
 -        if (mdd->mdd_proc_entry) {
 -                 lprocfs_remove(&mdd->mdd_proc_entry);
 -                 mdd->mdd_proc_entry = NULL;
@@ -724,7 +752,10 @@ index de379b3..5714ee6 100644
 -
 -static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
 -                                 unsigned long count, void *data)
--{
++static ssize_t
++mdd_atime_diff_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
 -        struct mdd_device *mdd = data;
 -        char kernbuf[20], *end;
 -        unsigned long diff = 0;
@@ -867,7 +898,7 @@ index de379b3..5714ee6 100644
  
  	llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb,
 -			 &cucb, 0, 0);
-+			 &m, 0, 0);
++			 m, 0, 0);
  
  	lu_env_fini(&env);
  	llog_ctxt_put(ctxt);
@@ -968,7 +999,7 @@ index de379b3..5714ee6 100644
  	__u32		   val;
  	int		   rc;
  
-@@ -320,54 +255,77 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
+@@ -320,54 +255,87 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
  
  	return rc != 0 ? rc : count;
  }
@@ -989,12 +1020,35 @@ index de379b3..5714ee6 100644
 -	return rc;
 +	return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
  }
++LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
  
 -static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
 -				   int count, int *eof, void *data)
--{
++static int mdd_lfsck_layout_seq_show(struct seq_file *m, void *data)
+ {
 -	struct mdd_device *mdd = data;
-+LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
++	struct mdd_device *mdd = m->private;
+ 
+ 	LASSERT(mdd != NULL);
+-	*eof = 1;
+ 
+-	return lfsck_dump(mdd->mdd_bottom, page, count, LT_LAYOUT);
++	return lfsck_dump(m, mdd->mdd_bottom, LT_LAYOUT);
+ }
+-
+-static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
+-        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
+-        { "changelog_mask",  lprocfs_rd_changelog_mask,
+-                             lprocfs_wr_changelog_mask, 0 },
+-        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
+-        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
+-	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
+-			       lprocfs_wr_lfsck_speed_limit, 0 },
+-	{ "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
+-				 lprocfs_wr_lfsck_async_windows, 0 },
+-	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
+-	{ "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
++LPROC_SEQ_FOPS_RO(mdd_lfsck_layout);
 +
 +static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
 +	{ .name =	"atime_diff",
@@ -1007,42 +1061,34 @@ index de379b3..5714ee6 100644
 +	  .fops =	&mdd_sync_perm_fops		},
 +	{ .name =	"lfsck_speed_limit",
 +	  .fops =	&mdd_lfsck_speed_limit_fops	},
-+	{ .name	=	"lfsck_async_windows",
-+	  .fops	=	&mdd_lfsck_async_windows_fops	},
-+	{ .name =       "lfsck_namespace",
-+	  .fops =       &mdd_lfsck_namespace_fops       },
-+	{ 0 }
-+};
- 
--	LASSERT(mdd != NULL);
--	*eof = 1;
++	{ .name =	"lfsck_async_windows",
++	  .fops =	&mdd_lfsck_async_windows_fops	},
++	{ .name =	"lfsck_namespace",
++	  .fops =	&mdd_lfsck_namespace_fops	},
++	{ .name	=	"lfsck_layout",
++	  .fops	=	&mdd_lfsck_layout_fops		},
+ 	{ 0 }
+ };
+ 
+-static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
+-        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
+-        { 0 }
+-};
+-
+-void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
 +int mdd_procfs_init(struct mdd_device *mdd, const char *name)
-+{
+ {
+-        lvars->module_vars  = lprocfs_mdd_module_vars;
+-        lvars->obd_vars     = lprocfs_mdd_obd_vars;
 +	struct obd_device *obd = class_name2obd(name);
 +	struct obd_type   *type;
 +	int		   rc;
 +	ENTRY;
- 
--	return lfsck_dump(mdd->mdd_bottom, page, count, LT_LAYOUT);
--}
++
 +	/* at the moment there is no linkage between lu_type
 +	 * and obd_type, so we lookup obd_type this way */
 +	type = class_search_type(LUSTRE_MDD_NAME);
- 
--static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
--        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
--        { "changelog_mask",  lprocfs_rd_changelog_mask,
--                             lprocfs_wr_changelog_mask, 0 },
--        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
--        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
--	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
--			       lprocfs_wr_lfsck_speed_limit, 0 },
--	{ "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
--				 lprocfs_wr_lfsck_async_windows, 0 },
--	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
--	{ "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
--	{ 0 }
--};
++
 +	LASSERT(name != NULL);
 +	LASSERT(type != NULL);
 +	LASSERT(obd  != NULL);
@@ -1059,32 +1105,23 @@ index de379b3..5714ee6 100644
 +		GOTO(out, rc);
 +	}
 +	rc = 0;
- 
--static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
--        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
--        { 0 }
--};
 +	EXIT;
 +out:
 +	if (rc)
 +		mdd_procfs_fini(mdd);
 +	return rc;
-+}
+ }
  
--void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
 +int mdd_procfs_fini(struct mdd_device *mdd)
- {
--        lvars->module_vars  = lprocfs_mdd_module_vars;
--        lvars->obd_vars     = lprocfs_mdd_obd_vars;
++{
 +	if (mdd->mdd_proc_entry) {
 +		lprocfs_remove(&mdd->mdd_proc_entry);
 +		mdd->mdd_proc_entry = NULL;
 +	}
 +	RETURN(0);
- }
--
++}
 diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 0ca58c5..5b72a5a 100644
+index 30d9f59..5e479c8 100644
 --- a/lustre/obdclass/lprocfs_status.c
 +++ b/lustre/obdclass/lprocfs_status.c
 @@ -388,11 +388,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
@@ -1104,7 +1141,7 @@ index 0ca58c5..5b72a5a 100644
  EXPORT_SYMBOL(lprocfs_evict_client_fops);
  #endif
 diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
-index e303fd6..1759a7d 100644
+index 000d4ae..eb6bef0 100644
 --- a/lustre/ofd/lproc_ofd.c
 +++ b/lustre/ofd/lproc_ofd.c
 @@ -47,80 +47,75 @@
@@ -1600,7 +1637,7 @@ index e303fd6..1759a7d 100644
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
  	__u32			 val;
  	int			 rc;
-@@ -516,84 +512,108 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+@@ -516,37 +512,34 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
  
  	return rc != 0 ? rc : count;
  }
@@ -1611,13 +1648,55 @@ index e303fd6..1759a7d 100644
 +static int ofd_lfsck_layout_seq_show(struct seq_file *m, void *data)
  {
 -	struct obd_device	*obd = data;
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-
+-	*eof = 1;
++	struct obd_device *obd = m->private;
++	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	return lfsck_dump(ofd->ofd_osd, page, count, LT_LAYOUT);
++	return lfsck_dump(m, ofd->ofd_osd, LT_LAYOUT);
+ }
++LPROC_SEQ_FOPS_RO(ofd_lfsck_layout);
+ 
+-static int lprocfs_rd_lfsck_verify_pfid(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++static int ofd_lfsck_verify_pfid_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-
+-	*eof = 1;
++	struct obd_device *obd = m->private;
++	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count,
+-			"switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
+-			ofd->ofd_lfsck_verify_pfid ? "on" : "off",
+-			ofd->ofd_inconsistency_self_detected,
+-			ofd->ofd_inconsistency_self_repaired);
++	return seq_printf(m, "switch: %s\ndetected: "LPU64"\nrepaired: "LPU64"\n",
++			  ofd->ofd_lfsck_verify_pfid ? "on" : "off",
++			  ofd->ofd_inconsistency_self_detected,
++			  ofd->ofd_inconsistency_self_repaired);
+ }
+ 
+-static int lprocfs_wr_lfsck_verify_pfid(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++ofd_lfsck_verify_pfid_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
 +	struct obd_device	*obd = m->private;
  	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	__u32			 val;
+ 	int			 rc;
+@@ -559,75 +552,101 @@ static int lprocfs_wr_lfsck_verify_pfid(struct file *file, const char *buffer,
  
--	*eof = 1;
--
--	return lfsck_dump(ofd->ofd_osd, page, count, LT_LAYOUT);
--}
+ 	return count;
+ }
 -
 -static struct lprocfs_vars lprocfs_ofd_obd_vars[] = {
 -	{ "uuid",		 lprocfs_rd_uuid, 0, 0 },
@@ -1671,14 +1750,14 @@ index e303fd6..1759a7d 100644
 -	{ "lfsck_speed_limit",	lprocfs_rd_lfsck_speed_limit,
 -				lprocfs_wr_lfsck_speed_limit, 0 },
 -	{ "lfsck_layout",	lprocfs_rd_lfsck_layout, 0, 0 },
+-	{ "lfsck_verify_pfid",	lprocfs_rd_lfsck_verify_pfid,
+-				lprocfs_wr_lfsck_verify_pfid, 0 },
 -	{ 0 }
 -};
 -
 -static struct lprocfs_vars lprocfs_ofd_module_vars[] = {
 -	{ "num_refs",	  lprocfs_rd_numrefs,	0, 0 },
-+	return lfsck_dump(m, ofd->ofd_osd, LT_LAYOUT);
-+}
-+LPROC_SEQ_FOPS_RO(ofd_lfsck_layout);
++LPROC_SEQ_FOPS(ofd_lfsck_verify_pfid);
 +
 +LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid);
 +LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize);
@@ -1764,10 +1843,12 @@ index e303fd6..1759a7d 100644
 +	  .fops =	&ofd_job_interval_fops		},
 +	{ .name =	"soft_sync_limit",
 +	  .fops =	&ofd_soft_sync_limit_fops	},
-+	{ .name	=	"lfsck_speed_limit",
-+	  .fops	=	&ofd_lfsck_speed_limit_fops	},
-+	{ .name	=	"lfsck_layout",
-+	  .fops	=	&ofd_lfsck_layout_fops		},
++	{ .name =	"lfsck_speed_limit",
++	  .fops =	&ofd_lfsck_speed_limit_fops	},
++	{ .name =	"lfsck_layout",
++	  .fops =	&ofd_lfsck_layout_fops		},
++	{ .name	=	"lfsck_verify_pfid",
++	  .fops	=	&ofd_lfsck_verify_pfid_fops	},
  	{ 0 }
  };
  
@@ -1781,7 +1862,7 @@ index e303fd6..1759a7d 100644
  {
  	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
 diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 9900bed..a9cc81f 100644
+index 5d7f0b4..f75ffe1 100644
 --- a/lustre/ofd/ofd_dev.c
 +++ b/lustre/ofd/ofd_dev.c
 @@ -240,8 +240,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
@@ -1827,16 +1908,17 @@ index 9900bed..a9cc81f 100644
  	if (rc) {
  		CERROR("%s: lprocfs_obd_setup failed: %d.\n",
  		       obd->obd_name, rc);
-@@ -524,7 +523,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -524,7 +523,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  
  	obd->obd_uses_nid_stats = 1;
  
 -	entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL);
-+	entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL, NULL);
++	entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL,
++				     NULL);
  	if (IS_ERR(entry)) {
  		rc = PTR_ERR(entry);
  		CERROR("%s: error %d setting up lprocfs for %s\n",
-@@ -534,8 +533,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -534,8 +534,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  	obd->obd_proc_exports_entry = entry;
  
  	entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
@@ -1849,7 +1931,7 @@ index 9900bed..a9cc81f 100644
  	if (IS_ERR(entry)) {
  		rc = PTR_ERR(entry);
  		CERROR("%s: add proc entry 'clear' failed: %d.\n",
-@@ -551,7 +552,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -551,7 +553,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  		GOTO(remove_entry_clear, rc);
  	RETURN(0);
  remove_entry_clear:
@@ -1858,42 +1940,59 @@ index 9900bed..a9cc81f 100644
  obd_cleanup:
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -564,29 +565,28 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+@@ -563,47 +565,36 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+ {
  	struct obd_device	*obd = ofd_obd(ofd);
  	struct obd_device	*osd_obd = ofd->ofd_osd_exp->exp_obd;
- 	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
+-	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
 -	cfs_proc_dir_entry_t	*osd_dir;
-+	cfs_proc_dir_entry_t	*osd_dir = osd_obd->obd_type->typ_procsym;
++	struct proc_dir_entry	*osd_dir = osd_obd->obd_type->typ_procsym;
  
 -	osd_dir = lprocfs_srch(osd_root, obd->obd_name);
  	if (osd_dir == NULL)
  		return;
  
 -	if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
-+	//if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
- 		lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
- 				    "../../%s/%s/brw_stats",
- 				    osd_root->name, osd_dir->name);
- 
+-		lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
+-				    "../../%s/%s/brw_stats",
+-				    osd_root->name, osd_dir->name);
+-
 -	if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL)
-+	//if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL)
- 		lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
- 				    "../../%s/%s/read_cache_enable",
- 				    osd_root->name, osd_dir->name);
- 
+-		lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
+-				    "../../%s/%s/read_cache_enable",
+-				    osd_root->name, osd_dir->name);
+-
 -	if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL)
-+	//if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL)
- 		lprocfs_add_symlink("readcache_max_filesize",
- 				    obd->obd_proc_entry,
- 				    "../../%s/%s/readcache_max_filesize",
- 				    osd_root->name, osd_dir->name);
- 
+-		lprocfs_add_symlink("readcache_max_filesize",
+-				    obd->obd_proc_entry,
+-				    "../../%s/%s/readcache_max_filesize",
+-				    osd_root->name, osd_dir->name);
+-
 -	if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL)
-+	//if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL)
- 		lprocfs_add_symlink("writethrough_cache_enable",
- 				    obd->obd_proc_entry,
- 				    "../../%s/%s/writethrough_cache_enable",
-@@ -597,13 +597,8 @@ static void ofd_procfs_fini(struct ofd_device *ofd)
+-		lprocfs_add_symlink("writethrough_cache_enable",
+-				    obd->obd_proc_entry,
+-				    "../../%s/%s/writethrough_cache_enable",
+-				    osd_root->name, osd_dir->name);
++	lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
++			    "../../%s/%s/brw_stats",
++			    osd_obd->obd_type->typ_name, obd->obd_name);
++
++	lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
++			    "../../%s/%s/read_cache_enable",
++			    osd_obd->obd_type->typ_name, obd->obd_name);
++
++	lprocfs_add_symlink("readcache_max_filesize",
++			    obd->obd_proc_entry,
++			    "../../%s/%s/readcache_max_filesize",
++			    osd_obd->obd_type->typ_name, obd->obd_name);
++
++	lprocfs_add_symlink("writethrough_cache_enable",
++			    obd->obd_proc_entry,
++			    "../../%s/%s/writethrough_cache_enable",
++			    osd_obd->obd_type->typ_name, obd->obd_name);
+ }
+ 
+ static void ofd_procfs_fini(struct ofd_device *ofd)
  {
  	struct obd_device *obd = ofd_obd(ofd);
  
@@ -1909,7 +2008,7 @@ index 9900bed..a9cc81f 100644
  	lprocfs_free_per_client_stats(obd);
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -2368,7 +2363,6 @@ static struct lu_device_type ofd_device_type = {
+@@ -2379,7 +2370,6 @@ static struct lu_device_type ofd_device_type = {
  
  int __init ofd_init(void)
  {
@@ -1917,24 +2016,24 @@ index 9900bed..a9cc81f 100644
  	int				rc;
  
  	rc = lu_kmem_init(ofd_caches);
-@@ -2381,11 +2375,9 @@ int __init ofd_init(void)
+@@ -2392,11 +2382,9 @@ int __init ofd_init(void)
  		return(rc);
  	}
  
 -	lprocfs_ofd_init_vars(&lvars);
 -
- 	rc = class_register_type(&ofd_obd_ops, NULL, NULL,
+ 	rc = class_register_type(&ofd_obd_ops, NULL, true, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
+-				 lvars.module_vars,
++				 NULL,
  #endif
- 				LUSTRE_OST_NAME, &ofd_device_type);
+ 				 LUSTRE_OST_NAME, &ofd_device_type);
  	return rc;
 diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index ab041ce..60cfb50 100644
+index 3aae6dd..1bdcb80 100644
 --- a/lustre/ofd/ofd_internal.h
 +++ b/lustre/ofd/ofd_internal.h
-@@ -392,13 +392,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
+@@ -403,13 +403,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
  
  /* lproc_ofd.c */
  #ifdef LPROCFS
@@ -1950,10 +2049,10 @@ index ab041ce..60cfb50 100644
  #endif
  
 diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index a8022f0..4e1ec4a 100644
+index e0da7e6..14808ee 100644
 --- a/lustre/osd-ldiskfs/osd_handler.c
 +++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5892,6 +5892,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+@@ -5921,6 +5921,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
  	osd->od_connects++;
  	spin_unlock(&osd->od_osfs_lock);
  
@@ -1962,7 +2061,7 @@ index a8022f0..4e1ec4a 100644
  }
  
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index c9bf49a..bd2463a 100644
+index 05820e0..e711727 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
 @@ -816,6 +816,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
@@ -1974,5 +2073,5 @@ index c9bf49a..bd2463a 100644
  }
  
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index 7f9d4d7..cc93d19 100644
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,12 +1,11 @@
-From 98a6eee60a100d445d7533eeba907e4e75c36f18 Mon Sep 17 00:00:00 2001
+From 671de4e9a7ec811db225a763b88e48379d5a4daf Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Sun, 9 Feb 2014 10:45:37 -0500
-Subject: [PATCH 09/12] LU-3319 procfs: update ldiskfs proc handling to
- seq_files
+Date: Tue, 25 Mar 2014 12:37:41 -0400
+Subject: [PATCH 9/9] LU-3319 procfs: update ldiskfs proc handling to seq_files
 
 Migrate all ldiskfs proc handling to using strictly
 seq_files. Also include a fix with newer gcc complaining
-certain variables are initialized.
+certain variables are uninitialized.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
@@ -14,12 +13,12 @@ Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
  lustre/osd-ldiskfs/osd_compat.c   |   6 +-
  lustre/osd-ldiskfs/osd_handler.c  |  16 +-
  lustre/osd-ldiskfs/osd_internal.h |   6 +-
- lustre/osd-ldiskfs/osd_lproc.c    | 336 ++++++++++++++++++++------------------
- lustre/osd-ldiskfs/osd_scrub.c    |  73 +++------
- 5 files changed, 220 insertions(+), 217 deletions(-)
+ lustre/osd-ldiskfs/osd_lproc.c    | 343 ++++++++++++++++++++------------------
+ lustre/osd-ldiskfs/osd_scrub.c    | 104 ++++--------
+ 5 files changed, 235 insertions(+), 240 deletions(-)
 
 diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c
-index e693e8d..3fb6783 100644
+index 8b91b64..6330066 100644
 --- a/lustre/osd-ldiskfs/osd_compat.c
 +++ b/lustre/osd-ldiskfs/osd_compat.c
 @@ -1164,7 +1164,7 @@ int osd_obj_spec_update(struct osd_thread_info *info, struct osd_device *osd,
@@ -50,53 +49,46 @@ index e693e8d..3fb6783 100644
  	ENTRY;
  
 diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index 4e1ec4a..1d9a2ba 100644
+index 14808ee..2cb9af5 100644
 --- a/lustre/osd-ldiskfs/osd_handler.c
 +++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5824,6 +5824,7 @@ static struct lu_device *osd_device_free(const struct lu_env *env,
- static int osd_process_config(const struct lu_env *env,
-                               struct lu_device *d, struct lustre_cfg *cfg)
- {
-+	struct obd_device		*obd = d->ld_obd;
- 	struct osd_device		*o = osd_dev(d);
- 	int				rc;
- 	ENTRY;
-@@ -5838,12 +5839,12 @@ static int osd_process_config(const struct lu_env *env,
+@@ -5867,12 +5867,13 @@ static int osd_process_config(const struct lu_env *env,
  		break;
  	case LCFG_PARAM:
  		LASSERT(&o->od_dt_dev);
 -		rc = class_process_proc_param(PARAM_OSD, lprocfs_osd_obd_vars,
 -					      cfg, &o->od_dt_dev);
-+		rc = class_process_proc_seq_param(PARAM_OSD, obd->obd_vars,
++		rc = class_process_proc_seq_param(PARAM_OSD,
++						  lprocfs_osd_obd_vars,
 +						  cfg, &o->od_dt_dev);
  		if (rc > 0 || rc == -ENOSYS)
 -			rc = class_process_proc_param(PARAM_OST,
 -						      lprocfs_osd_obd_vars,
 -						      cfg, &o->od_dt_dev);
 +			rc = class_process_proc_seq_param(PARAM_OST,
-+							  obd->obd_vars, cfg,
-+							  &o->od_dt_dev);
++							  lprocfs_osd_obd_vars,
++							  cfg, &o->od_dt_dev);
  		break;
  	default:
  		rc = -ENOSYS;
-@@ -5991,9 +5992,10 @@ static int __init osd_mod_init(void)
+@@ -6020,9 +6021,10 @@ static int __init osd_mod_init(void)
  	if (rc)
  		return rc;
  
--	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
+-	rc = class_register_type(&osd_obd_device_ops, NULL, true, NULL,
 -#ifndef HAVE_ONLY_PROCFS_SEQ
-+	rc = class_register_type(&osd_obd_device_ops, NULL,
- 				lprocfs_osd_module_vars,
++	rc = class_register_type(&osd_obd_device_ops, NULL, true,
+ 				 lprocfs_osd_module_vars,
 +#ifndef HAVE_ONLY_PROCFS_SEQ
-+				NULL,
++				 NULL,
  #endif
- 				LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
+ 				 LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h
-index dc52885..7d54162 100644
+index 185d63d..e1bde19 100644
 --- a/lustre/osd-ldiskfs/osd_internal.h
 +++ b/lustre/osd-ldiskfs/osd_internal.h
-@@ -616,8 +616,8 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
+@@ -617,8 +617,8 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
  
  #ifdef LPROCFS
  /* osd_lproc.c */
@@ -107,7 +99,7 @@ index dc52885..7d54162 100644
  int osd_procfs_init(struct osd_device *osd, const char *name);
  int osd_procfs_fini(struct osd_device *osd);
  void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf);
-@@ -672,7 +672,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
+@@ -673,7 +673,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
  		   int insert);
  int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid,
  		   struct osd_inode_id *id);
@@ -117,7 +109,7 @@ index dc52885..7d54162 100644
  int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd,
  		   obd_seq seq, struct lu_seq_range *range);
 diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c
-index b9b4e3d..947a4b9 100644
+index b9b4e3d..ddaa169 100644
 --- a/lustre/osd-ldiskfs/osd_lproc.c
 +++ b/lustre/osd-ldiskfs/osd_lproc.c
 @@ -237,92 +237,46 @@ out:
@@ -125,7 +117,8 @@ index b9b4e3d..947a4b9 100644
  }
  
 -int osd_procfs_init(struct osd_device *osd, const char *name)
--{
++static int ldiskfs_osd_fstype_seq_show(struct seq_file *m, void *data)
+ {
 -        struct obd_type     *type;
 -        int                  rc;
 -        ENTRY;
@@ -148,7 +141,8 @@ index b9b4e3d..947a4b9 100644
 -                osd->od_proc_entry = NULL;
 -                GOTO(out, rc);
 -        }
--
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
 -        rc = osd_stats_init(osd);
 -
 -        EXIT;
@@ -172,11 +166,9 @@ index b9b4e3d..947a4b9 100644
 -
 -static int lprocfs_osd_rd_fstype(char *page, char **start, off_t off, int count,
 -				 int *eof, void *data)
-+static int ldiskfs_osd_fstype_seq_show(struct seq_file *m, void *data)
- {
+-{
 -	struct osd_device *osd = osd_dt_dev(data);
-+	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
- 
+-
 -        LASSERT(osd != NULL);
 -        return snprintf(page, count, "ldiskfs\n");
 +	LASSERT(osd != NULL);
@@ -200,7 +192,7 @@ index b9b4e3d..947a4b9 100644
 +		return -EINPROGRESS;
  
 -	return snprintf(page, count, "%s\n", osd->od_mntdev);
-+	return seq_printf(m, "%u\n", osd->od_read_cache);
++	return seq_printf(m, "%s\n", osd->od_mntdev);
  }
 +LPROC_SEQ_FOPS_RO(ldiskfs_osd_mntdev);
  
@@ -227,14 +219,14 @@ index b9b4e3d..947a4b9 100644
  {
 -	struct osd_device	*osd = osd_dt_dev(data);
 -	int			 val, rc;
-+	struct seq_file *m = file->private_data;
++	struct seq_file	  *m = file->private_data;
 +	struct dt_device  *dt = m->private;
 +	struct osd_device *osd = osd_dt_dev(dt);
 +	int		   val, rc;
  
  	LASSERT(osd != NULL);
  	if (unlikely(osd->od_mnt == NULL))
-@@ -335,24 +289,26 @@ static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
+@@ -335,24 +289,27 @@ static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
  	osd->od_read_cache = !!val;
  	return count;
  }
@@ -263,13 +255,14 @@ index b9b4e3d..947a4b9 100644
  {
 -	struct osd_device	*osd = osd_dt_dev(data);
 -	int			 val, rc;
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
 +	struct osd_device *osd = osd_dt_dev(dt);
 +	int		   val, rc;
  
  	LASSERT(osd != NULL);
  	if (unlikely(osd->od_mnt == NULL))
-@@ -365,14 +321,16 @@ static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
+@@ -365,14 +322,17 @@ static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
  	osd->od_writethrough_cache = !!val;
  	return count;
  }
@@ -285,14 +278,15 @@ index b9b4e3d..947a4b9 100644
 -	struct dt_device	*dt = data;
 -	struct lu_env		 env;
 -	int			 rc;
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
 +	struct osd_device *osd = osd_dt_dev(dt);
 +	struct lu_env	   env;
 +	int		   rc;
  
  	LASSERT(osd != NULL);
  	if (unlikely(osd->od_mnt == NULL))
-@@ -386,20 +344,18 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+@@ -386,20 +346,18 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
  
  	return rc == 0 ? count : rc;
  }
@@ -320,7 +314,7 @@ index b9b4e3d..947a4b9 100644
  
          rc = lprocfs_write_helper(buffer, count, &pdo);
          if (rc != 0)
-@@ -409,24 +365,25 @@ static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
+@@ -409,24 +367,26 @@ static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
  
          return count;
  }
@@ -349,12 +343,13 @@ index b9b4e3d..947a4b9 100644
 +					size_t count, loff_t *off)
  {
 -	struct osd_device *dev = osd_dt_dev(data);
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
 +	struct osd_device *dev = osd_dt_dev(dt);
  	int val, rc;
  
  	LASSERT(dev != NULL);
-@@ -440,19 +397,18 @@ static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
+@@ -440,19 +400,18 @@ static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
  	dev->od_noscrub = !val;
  	return count;
  }
@@ -381,13 +376,11 @@ index b9b4e3d..947a4b9 100644
  {
  	int     track_declares_assert;
  	int     rc;
-@@ -465,38 +421,39 @@ static int lprocfs_osd_wr_track_declares_assert(struct file *file,
+@@ -465,40 +424,40 @@ static int lprocfs_osd_wr_track_declares_assert(struct file *file,
  
  	return count;
  }
 +LPROC_SEQ_FOPS(ldiskfs_osd_track_declares_assert);
-+
-+extern int osd_scrub_dump(struct seq_file *m, struct osd_device *dev);
  
 -static int lprocfs_osd_rd_oi_scrub(char *page, char **start, off_t off,
 -				   int count, int *eof, void *data)
@@ -430,12 +423,17 @@ index b9b4e3d..947a4b9 100644
 +				size_t count, loff_t *off)
  {
 -	struct osd_device	*osd = osd_dt_dev(data);
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
-+	struct osd_device	*osd = osd_dt_dev(dt);
- 	__u64			 val;
- 	int			 rc;
+-	__u64			 val;
+-	int			 rc;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
++	struct osd_device *osd = osd_dt_dev(dt);
++	__u64		   val;
++	int		   rc;
  
-@@ -512,24 +469,25 @@ int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+@@ -512,24 +471,26 @@ int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
  					 OSD_MAX_CACHE_SIZE : val;
  	return count;
  }
@@ -464,12 +462,13 @@ index b9b4e3d..947a4b9 100644
 +					size_t count, loff_t *off)
  {
 -	struct osd_device *dev = osd_dt_dev(data);
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file	  *m = file->private_data;
++	struct dt_device  *dt = m->private;
 +	struct osd_device *dev = osd_dt_dev(dt);
  	int		   val;
  	int		   rc;
  
-@@ -544,38 +502,102 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
+@@ -544,38 +505,102 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
  	dev->od_lma_self_repair = !!val;
  	return count;
  }
@@ -602,10 +601,10 @@ index b9b4e3d..947a4b9 100644
 +}
  #endif
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index e558163..b5b91c8 100644
+index 7d6c011..05e9f25 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -2551,80 +2551,69 @@ static const char *scrub_param_names[] = {
+@@ -2571,134 +2571,112 @@ static const char *scrub_param_names[] = {
  	NULL
  };
  
@@ -619,9 +618,11 @@ index e558163..b5b91c8 100644
  	int i;
  
 -	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+-	if (rc <= 0)
+-		return -ENOSPC;
 +	rc = seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
- 	if (rc <= 0)
- 		return -ENOSPC;
++	if (rc < 0)
++		return rc;
  
 -	*buf += rc;
 -	*len -= rc;
@@ -630,13 +631,15 @@ index e558163..b5b91c8 100644
  			bits &= ~flag;
 -			rc = snprintf(*buf, *len, "%s%c", names[i],
 -				      bits != 0 ? ',' : '\n');
-+			rc = seq_printf(m, "%s%c", names[i],
-+					bits != 0 ? ',' : '\n');
- 			if (rc <= 0)
- 				return -ENOSPC;
+-			if (rc <= 0)
+-				return -ENOSPC;
 -
 -			*buf += rc;
 -			*len -= rc;
++			rc = seq_printf(m, "%s%c", names[i],
++					bits != 0 ? ',' : '\n');
++			if (rc < 0)
++				return rc;
  		}
  	}
 -	return save - *len;
@@ -654,14 +657,13 @@ index e558163..b5b91c8 100644
  			      cfs_time_current_sec() - time);
  	else
 -		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
-+		rc = seq_printf(m, "%s: N/A\n", prefix);
- 	if (rc <= 0)
- 		return -ENOSPC;
- 
+-	if (rc <= 0)
+-		return -ENOSPC;
+-
 -	*buf += rc;
 -	*len -= rc;
--	return rc;
-+	return 0;
++		rc = seq_printf(m, "%s: N/A\n", prefix);
+ 	return rc;
  }
  
 -static int scrub_pos_dump(char **buf, int *len, __u64 pos, const char *prefix)
@@ -674,34 +676,42 @@ index e558163..b5b91c8 100644
 +		rc = seq_printf(m, "%s: "LPU64"\n", prefix, pos);
  	else
 -		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
-+		rc = seq_printf(m, "%s: N/A\n", prefix);
- 	if (rc <= 0)
- 		return -ENOSPC;
- 
+-	if (rc <= 0)
+-		return -ENOSPC;
+-
 -	*buf += rc;
 -	*len -= rc;
++		rc = seq_printf(m, "%s: N/A\n", prefix);
  	return rc;
  }
  
 -int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
-+int osd_scrub_dump(struct seq_file *m,struct osd_device *dev)
++int osd_scrub_dump(struct seq_file *m, struct osd_device *dev)
  {
  	struct osd_scrub  *scrub   = &dev->od_scrub;
  	struct scrub_file *sf      = &scrub->os_file;
  	__u64		   checked;
  	__u64		   speed;
 -	int		   save    = len;
- 	int		   ret     = -ENOSPC;
+-	int		   ret     = -ENOSPC;
  	int		   rc;
  
  	down_read(&scrub->os_rwsem);
 -	rc = snprintf(buf, len,
-+	rc = seq_printf(m,
- 		      "name: OI_scrub\n"
- 		      "magic: 0x%x\n"
- 		      "oi_files: %d\n"
-@@ -2634,51 +2623,48 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
- 	if (rc <= 0)
+-		      "name: OI_scrub\n"
+-		      "magic: 0x%x\n"
+-		      "oi_files: %d\n"
+-		      "status: %s\n",
+-		      sf->sf_magic, (int)sf->sf_oi_count,
+-		      scrub_status_names[sf->sf_status]);
+-	if (rc <= 0)
++	rc = seq_printf(m, "name: OI_scrub\n"
++			"magic: 0x%x\n"
++			"oi_files: %d\n"
++			"status: %s\n",
++			sf->sf_magic, (int)sf->sf_oi_count,
++			scrub_status_names[sf->sf_status]);
++	if (rc < 0)
  		goto out;
  
 -	buf += rc;
@@ -761,8 +771,12 @@ index e558163..b5b91c8 100644
  		      "updated: "LPU64"\n"
  		      "failed: "LPU64"\n"
  		      "prior_updated: "LPU64"\n"
-@@ -2691,8 +2677,6 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
- 	if (rc <= 0)
+@@ -2708,11 +2686,9 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 		      checked, sf->sf_items_updated, sf->sf_items_failed,
+ 		      sf->sf_items_updated_prior, sf->sf_items_noscrub,
+ 		      sf->sf_items_igif, sf->sf_success_count);
+-	if (rc <= 0)
++	if (rc < 0)
  		goto out;
  
 -	buf += rc;
@@ -770,7 +784,7 @@ index e558163..b5b91c8 100644
  	speed = checked;
  	if (thread_is_running(&scrub->os_thread)) {
  		cfs_duration_t duration = cfs_time_current() -
-@@ -2705,8 +2689,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2725,8 +2701,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -780,7 +794,7 @@ index e558163..b5b91c8 100644
  			      "average_speed: "LPU64" objects/sec\n"
  			      "real-time_speed: "LPU64" objects/sec\n"
  			      "current_position: %u\n"
-@@ -2719,8 +2702,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2739,8 +2714,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	} else {
  		if (sf->sf_run_time != 0)
  			do_div(speed, sf->sf_run_time);
@@ -790,18 +804,22 @@ index e558163..b5b91c8 100644
  			      "average_speed: "LPU64" objects/sec\n"
  			      "real-time_speed: N/A\n"
  			      "current_position: N/A\n"
-@@ -2732,10 +2714,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2750,14 +2724,8 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 			      sf->sf_run_time, speed, scrub->os_lf_scanned,
+ 			      scrub->os_lf_repaired, scrub->os_lf_failed);
  	}
- 	if (rc <= 0)
- 		goto out;
+-	if (rc <= 0)
+-		goto out;
 -
 -	buf += rc;
 -	len -= rc;
 -	ret = save - len;
-+	ret = 0;
  
  out:
  	up_read(&scrub->os_rwsem);
+-	return ret;
++	return (rc < 0 ? -ENOSPC : 0);
+ }
 -- 
-1.8.5.3
+1.9.1
 

diff --git a/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch b/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
deleted file mode 100644
index b076a3a..0000000
--- a/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
+++ /dev/null
@@ -1,463 +0,0 @@
-From 48d1258335516d5335567f11f5be91ceafbbac4e Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 21 Jan 2014 12:06:59 -0500
-Subject: [PATCH 10/12] LU-3319 lprocfs: client side cleanups
-
-Now that all the client side seq_file patches it is
-time to handle the issue that people pointed out but
-were not severe enough to prevent landing. This patch
-addresses all the concerns as well and move all struct
-lprocfs_seq_var to be initialized C99 style.
-
-Change-Id: I89e8b719bd067ecf4e3cab481a2d4c62d5052af0
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
----
- lustre/fid/lproc_fid.c           | 21 ++++++---
- lustre/lmv/lproc_lmv.c           | 15 ++++---
- lustre/lov/lproc_lov.c           | 42 ++++++++++++------
- lustre/mdc/lproc_mdc.c           | 52 ++++++++++++++--------
- lustre/mgc/lproc_mgc.c           | 25 +++++++----
- lustre/obdclass/lprocfs_status.c |  1 -
- lustre/obdecho/echo.c            |  3 +-
- lustre/osc/lproc_osc.c           | 94 +++++++++++++++++++++++++++-------------
- lustre/osc/osc_request.c         |  2 +-
- lustre/ost/ost_handler.c         |  3 +-
- lustre/ptlrpc/lproc_ptlrpc.c     |  2 +-
- lustre/quota/qmt_pool.c          |  3 +-
- lustre/quota/qsd_lib.c           | 12 +++--
- 13 files changed, 183 insertions(+), 92 deletions(-)
-
-diff --git a/lustre/fid/lproc_fid.c b/lustre/fid/lproc_fid.c
-index d89c4f6..3b9d170 100644
---- a/lustre/fid/lproc_fid.c
-+++ b/lustre/fid/lproc_fid.c
-@@ -203,9 +203,12 @@ LPROC_SEQ_FOPS(lprocfs_server_fid_width);
- LPROC_SEQ_FOPS_RO(lprocfs_server_fid_server);
- 
- struct lprocfs_seq_vars seq_server_proc_list[] = {
--	{ "space",      &lprocfs_server_fid_space_fops },
--	{ "width",      &lprocfs_server_fid_width_fops },
--	{ "server",     &lprocfs_server_fid_server_fops },
-+	{ .name	=	"space",
-+	  .fops	=	&lprocfs_server_fid_space_fops	},
-+	{ .name	=	"width",
-+	  .fops	=	&lprocfs_server_fid_width_fops	},
-+	{ .name	=	"server",
-+	  .fops	=	&lprocfs_server_fid_server_fops	},
- 	{ NULL }
- };
- 
-@@ -623,10 +626,14 @@ LPROC_SEQ_FOPS_RO(lprocfs_client_fid_server);
- LPROC_SEQ_FOPS_RO(lprocfs_client_fid_fid);
- 
- struct lprocfs_seq_vars seq_client_proc_list[] = {
--	{ "space",	&lprocfs_client_fid_space_fops },
--	{ "width",	&lprocfs_client_fid_width_fops },
--	{ "server",	&lprocfs_client_fid_server_fops },
--	{ "fid",	&lprocfs_client_fid_fid_fops },
-+	{ .name	=	"space",
-+	  .fops	=	&lprocfs_client_fid_space_fops	},
-+	{ .name	=	"width",
-+	  .fops	=	&lprocfs_client_fid_width_fops	},
-+	{ .name	=	"server",
-+	  .fops	=	&lprocfs_client_fid_server_fops	},
-+	{ .name	=	"fid",
-+	  .fops	=	&lprocfs_client_fid_fid_fops	},
- 	{ NULL }
- };
- #endif
-diff --git a/lustre/lmv/lproc_lmv.c b/lustre/lmv/lproc_lmv.c
-index eea5927..5a7271a 100644
---- a/lustre/lmv/lproc_lmv.c
-+++ b/lustre/lmv/lproc_lmv.c
-@@ -203,11 +203,16 @@ static int lmv_target_seq_open(struct inode *inode, struct file *file)
- LPROC_SEQ_FOPS_RO_TYPE(lmv, uuid);
- 
- struct lprocfs_seq_vars lprocfs_lmv_obd_vars[] = {
--	{ "numobd",	&lmv_numobd_fops	},
--	{ "placement",	&lmv_placement_fops	},
--	{ "activeobd",	&lmv_activeobd_fops	},
--	{ "uuid",	&lmv_uuid_fops		},
--	{ "desc_uuid",	&lmv_desc_uuid_fops	},
-+	{ .name	=	"numobd",
-+	  .fops	=	&lmv_numobd_fops	},
-+	{ .name	=	"placement",
-+	  .fops	=	&lmv_placement_fops	},
-+	{ .name	=	"activeobd",
-+	  .fops	=	&lmv_activeobd_fops	},
-+	{ .name	=	"uuid",
-+	  .fops	=	&lmv_uuid_fops		},
-+	{ .name	=	"desc_uuid",
-+	  .fops	=	&lmv_desc_uuid_fops	},
- 	{ 0 }
- };
- 
-diff --git a/lustre/lov/lproc_lov.c b/lustre/lov/lproc_lov.c
-index e400faf..7786513 100644
---- a/lustre/lov/lproc_lov.c
-+++ b/lustre/lov/lproc_lov.c
-@@ -263,20 +263,34 @@ LPROC_SEQ_FOPS_RO_TYPE(lov, kbytesfree);
- LPROC_SEQ_FOPS_RO_TYPE(lov, kbytesavail);
- 
- struct lprocfs_seq_vars lprocfs_lov_obd_vars[] = {
--	{ "uuid",		&lov_uuid_fops		},
--	{ "stripesize",		&lov_stripesize_fops	},
--	{ "stripeoffset",	&lov_stripeoffset_fops	},
--	{ "stripecount",	&lov_stripecount_fops	},
--	{ "stripetype",		&lov_stripetype_fops	},
--	{ "numobd",		&lov_numobd_fops	},
--	{ "activeobd",		&lov_activeobd_fops	},
--	{ "filestotal",		&lov_filestotal_fops	},
--	{ "filesfree",		&lov_filesfree_fops	},
--	{ "blocksize",		&lov_blksize_fops	},
--	{ "kbytestotal",	&lov_kbytestotal_fops	},
--	{ "kbytesfree",		&lov_kbytesfree_fops	},
--	{ "kbytesavail",	&lov_kbytesavail_fops	},
--	{ "desc_uuid",		&lov_desc_uuid_fops	},
-+	{ .name	=	"uuid",
-+	  .fops	=	&lov_uuid_fops		},
-+	{ .name	=	"stripesize",
-+	  .fops	=	&lov_stripesize_fops	},
-+	{ .name	=	"stripeoffset",
-+	  .fops	=	&lov_stripeoffset_fops	},
-+	{ .name	=	"stripecount",
-+	  .fops	=	&lov_stripecount_fops	},
-+	{ .name	=	"stripetype",
-+	  .fops	=	&lov_stripetype_fops	},
-+	{ .name	=	"numobd",
-+	  .fops	=	&lov_numobd_fops	},
-+	{ .name	=	"activeobd",
-+	  .fops	=	&lov_activeobd_fops	},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&lov_filestotal_fops	},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&lov_filesfree_fops	},
-+	{ .name	=	"blocksize",
-+	  .fops	=	&lov_blksize_fops	},
-+	{ .name	=	"kbytestotal",
-+	  .fops	=	&lov_kbytestotal_fops	},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&lov_kbytesfree_fops	},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&lov_kbytesavail_fops	},
-+	{ .name	=	"desc_uuid",
-+	  .fops	=	&lov_desc_uuid_fops	},
- 	{ 0 }
- };
- 
-diff --git a/lustre/mdc/lproc_mdc.c b/lustre/mdc/lproc_mdc.c
-index cba4f61..69e377f 100644
---- a/lustre/mdc/lproc_mdc.c
-+++ b/lustre/mdc/lproc_mdc.c
-@@ -103,29 +103,47 @@ LPROC_SEQ_FOPS_RW_TYPE(mdc, import);
- LPROC_SEQ_FOPS_RW_TYPE(mdc, pinger_recov);
- 
- struct lprocfs_seq_vars lprocfs_mdc_obd_vars[] = {
--	{ "uuid",		&mdc_uuid_fops,		0,	0 },
--	{ "ping",		&mdc_ping_fops,		0,	0222 },
--	{ "connect_flags",	&mdc_connect_flags_fops,0,	0 },
--	{ "blocksize",		&mdc_blksize_fops,	0,	0 },
--	{ "kbytestotal",	&mdc_kbytestotal_fops,	0,	0 },
--	{ "kbytesfree",		&mdc_kbytesfree_fops,	0,	0 },
--	{ "kbytesavail",	&mdc_kbytesavail_fops,	0,	0 },
--	{ "filestotal",		&mdc_filestotal_fops,	0,	0 },
--	{ "filesfree",		&mdc_filesfree_fops,	0,	0 },
--	{ "mds_server_uuid",	&mdc_server_uuid_fops,	0,	0 },
--	{ "mds_conn_uuid",	&mdc_conn_uuid_fops,	0,	0 },
-+	{ .name	=	"uuid",
-+	  .fops	=	&mdc_uuid_fops		},
-+	{ .name	=	"ping",
-+	  .fops	=	&mdc_ping_fops,
-+	  .proc_mode =	0222			},
-+	{ .name	=	"connect_flags",
-+	  .fops	=	&mdc_connect_flags_fops	},
-+	{ .name	=	"blocksize",
-+	  .fops	=	&mdc_blksize_fops	},
-+	{ .name	=	"kbytestotal",
-+	  .fops	=	&mdc_kbytestotal_fops	},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&mdc_kbytesfree_fops	},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&mdc_kbytesavail_fops	},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&mdc_filestotal_fops	},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&mdc_filesfree_fops	},
-+	{ .name	=	"mds_server_uuid",
-+	  .fops	=	&mdc_server_uuid_fops	},
-+	{ .name	=	"mds_conn_uuid",
-+	  .fops	=	&mdc_conn_uuid_fops	},
- 	/*
- 	 * FIXME: below proc entry is provided, but not in used, instead
- 	 * sbi->sb_md_brw_size is used, the per obd variable should be used
- 	 * when CMD is enabled, and dir pages are managed in MDC layer.
- 	 * Remember to enable proc write function.
- 	 */
--	{ "max_pages_per_rpc",	&mdc_obd_max_pages_per_rpc_fops	},
--	{ "max_rpcs_in_flight",	&mdc_max_rpcs_in_flight_fops	},
--	{ "timeouts",		&mdc_timeouts_fops		},
--	{ "import",		&mdc_import_fops		},
--	{ "state",		&mdc_state_fops			},
--	{ "pinger_recov",	&mdc_pinger_recov_fops		},
-+	{ .name	=	"max_pages_per_rpc",
-+	  .fops	=	&mdc_obd_max_pages_per_rpc_fops	},
-+	{ .name	=	"max_rpcs_in_flight",
-+	  .fops	=	&mdc_max_rpcs_in_flight_fops	},
-+	{ .name	=	"timeouts",
-+	  .fops	=	&mdc_timeouts_fops		},
-+	{ .name	=	"import",
-+	  .fops	=	&mdc_import_fops		},
-+	{ .name	=	"state",
-+	  .fops	=	&mdc_state_fops			},
-+	{ .name	=	"pinger_recov",
-+	  .fops	=	&mdc_pinger_recov_fops		},
- 	{ 0 }
- };
- #endif /* LPROCFS */
-diff --git a/lustre/mgc/lproc_mgc.c b/lustre/mgc/lproc_mgc.c
-index 648b6e5..f818def 100644
---- a/lustre/mgc/lproc_mgc.c
-+++ b/lustre/mgc/lproc_mgc.c
-@@ -59,14 +59,23 @@ static int mgc_ir_state_seq_show(struct seq_file *m, void *v)
- LPROC_SEQ_FOPS_RO(mgc_ir_state);
- 
- struct lprocfs_seq_vars lprocfs_mgc_obd_vars[] = {
--	{ "uuid",		&mgc_uuid_fops,		0,	0 },
--	{ "ping",		&mgc_ping_fops,		0,	0222 },
--	{ "connect_flags",	&mgc_connect_flags_fops,0,	0 },
--	{ "mgs_server_uuid",	&mgc_server_uuid_fops,	0,	0 },
--	{ "mgs_conn_uuid",	&mgc_conn_uuid_fops,	0,	0 },
--	{ "import",		&mgc_import_fops,	0,	0 },
--	{ "state",		&mgc_state_fops,	0,	0 },
--	{ "ir_state",		&mgc_ir_state_fops,	0,	0 },
-+	{ .name	=	"uuid",
-+	  .fops	=	&mgc_uuid_fops		},
-+	{ .name	=	"ping",
-+	  .fops	=	&mgc_ping_fops,
-+	  .proc_mode =	0222			},
-+	{ .name	=	"connect_flags",
-+	  .fops	=	&mgc_connect_flags_fops	},
-+	{ .name	=	"mgs_server_uuid",
-+	  .fops	=	&mgc_server_uuid_fops	},
-+	{ .name	=	"mgs_conn_uuid",
-+	  .fops	=	&mgc_conn_uuid_fops	},
-+	{ .name	=	"import",
-+	  .fops	=	&mgc_import_fops	},
-+	{ .name	=	"state",
-+	  .fops	=	&mgc_state_fops		},
-+	{ .name	=	"ir_state",
-+	  .fops	=	&mgc_ir_state_fops	},
- 	{ 0 }
- };
- #endif /* LPROCFS */
-diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 5b72a5a..551f629 100644
---- a/lustre/obdclass/lprocfs_status.c
-+++ b/lustre/obdclass/lprocfs_status.c
-@@ -2583,7 +2583,6 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
- EXPORT_SYMBOL(lprocfs_init_ldlm_stats);
- 
- #ifdef HAVE_SERVER_SUPPORT
--/* No one appears to be using this ?? */
- int lprocfs_exp_nid_seq_show(struct seq_file *m, void *data)
- {
- 	struct obd_export *exp = m->private;
-diff --git a/lustre/obdecho/echo.c b/lustre/obdecho/echo.c
-index 6d63aff..8563e68 100644
---- a/lustre/obdecho/echo.c
-+++ b/lustre/obdecho/echo.c
-@@ -561,7 +561,8 @@ commitrw_cleanup:
- 
- LPROC_SEQ_FOPS_RO_TYPE(echo, uuid);
- static struct lprocfs_seq_vars lprocfs_echo_obd_vars[] = {
--	{ "uuid",	&echo_uuid_fops		},
-+	{ .name	=	"uuid",
-+	  .fops	=	&echo_uuid_fops		},
- 	{ 0 }
- };
- 
-diff --git a/lustre/osc/lproc_osc.c b/lustre/osc/lproc_osc.c
-index d6e3703..ccfc212 100644
---- a/lustre/osc/lproc_osc.c
-+++ b/lustre/osc/lproc_osc.c
-@@ -543,37 +543,69 @@ LPROC_SEQ_FOPS_RW_TYPE(osc, import);
- LPROC_SEQ_FOPS_RW_TYPE(osc, pinger_recov);
- 
- struct lprocfs_seq_vars lprocfs_osc_obd_vars[] = {
--	{ "uuid",		&osc_uuid_fops			},
--	{ "ping",		&osc_ping_fops,		0, 0222	},
--	{ "connect_flags",	&osc_connect_flags_fops		},
--	{ "blocksize",		&osc_blksize_fops		},
--	{ "kbytestotal",	&osc_kbytestotal_fops		},
--	{ "kbytesfree",		&osc_kbytesfree_fops		},
--	{ "kbytesavail",	&osc_kbytesavail_fops		},
--	{ "filestotal",		&osc_filestotal_fops		},
--	{ "filesfree",		&osc_filesfree_fops		},
--	{ "ost_server_uuid",	&osc_server_uuid_fops		},
--	{ "ost_conn_uuid",	&osc_conn_uuid_fops		},
--	{ "active",		&osc_active_fops		},
--	{ "max_pages_per_rpc",	&osc_obd_max_pages_per_rpc_fops	},
--	{ "max_rpcs_in_flight",	&osc_max_rpcs_in_flight_fops	},
--	{ "destroys_in_flight",	&osc_destroys_in_flight_fops	},
--	{ "max_dirty_mb",	&osc_max_dirty_mb_fops		},
--	{ "osc_cached_mb",	&osc_cached_mb_fops		},
--	{ "cur_dirty_bytes",	&osc_cur_dirty_bytes_fops	},
--	{ "cur_grant_bytes",	&osc_cur_grant_bytes_fops	},
--	{ "cur_lost_grant_bytes",	&osc_cur_lost_grant_bytes_fops	},
--	{ "grant_shrink_interval",	&osc_grant_shrink_interval_fops	},
--	{ "checksums",		&osc_checksum_fops		},
--	{ "checksum_type",	&osc_checksum_type_fops		},
--	{ "resend_count",	&osc_resend_count_fops		},
--	{ "timeouts",		&osc_timeouts_fops		},
--	{ "contention_seconds",	&osc_contention_seconds_fops	},
--	{ "lockless_truncate",	&osc_lockless_truncate_fops	},
--	{ "import",		&osc_import_fops		},
--	{ "state",		&osc_state_fops			},
--	{ "pinger_recov",	&osc_pinger_recov_fops		},
--	{ "unstable_stats",	&osc_unstable_stats_fops	},
-+	{ .name	=	"uuid",
-+	  .fops	=	&osc_uuid_fops			},
-+	{ .name	=	"ping",
-+	  .fops	=	&osc_ping_fops,
-+	  .proc_mode =	0222				},
-+	{ .name	=	"connect_flags",
-+	  .fops	=	&osc_connect_flags_fops		},
-+	{ .name	=	"blocksize",
-+	  .fops	=	&osc_blksize_fops		},
-+	{ .name	=	"kbytestotal",
-+	  .fops	=	&osc_kbytestotal_fops		},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&osc_kbytesfree_fops		},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&osc_kbytesavail_fops		},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&osc_filestotal_fops		},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&osc_filesfree_fops		},
-+	{ .name	=	"ost_server_uuid",
-+	  .fops	=	&osc_server_uuid_fops		},
-+	{ .name	=	"ost_conn_uuid",
-+	  .fops	=	&osc_conn_uuid_fops		},
-+	{ .name	=	"active",
-+	  .fops	=	&osc_active_fops		},
-+	{ .name	=	"max_pages_per_rpc",
-+	  .fops	=	&osc_obd_max_pages_per_rpc_fops	},
-+	{ .name	=	"max_rpcs_in_flight",
-+	  .fops	=	&osc_max_rpcs_in_flight_fops	},
-+	{ .name	=	"destroys_in_flight",
-+	  .fops	=	&osc_destroys_in_flight_fops	},
-+	{ .name	=	"max_dirty_mb",
-+	  .fops	=	&osc_max_dirty_mb_fops		},
-+	{ .name	=	"osc_cached_mb",
-+	  .fops	=	&osc_cached_mb_fops		},
-+	{ .name	=	"cur_dirty_bytes",
-+	  .fops	=	&osc_cur_dirty_bytes_fops	},
-+	{ .name	=	"cur_grant_bytes",
-+	  .fops	=	&osc_cur_grant_bytes_fops	},
-+	{ .name	=	"cur_lost_grant_bytes",
-+	  .fops	=	&osc_cur_lost_grant_bytes_fops	},
-+	{ .name	=	"grant_shrink_interval",
-+	  .fops	=	&osc_grant_shrink_interval_fops	},
-+	{ .name	=	"checksums",
-+	  .fops	=	&osc_checksum_fops		},
-+	{ .name	=	"checksum_type",
-+	  .fops	=	&osc_checksum_type_fops		},
-+	{ .name	=	"resend_count",
-+	  .fops	=	&osc_resend_count_fops		},
-+	{ .name	=	"timeouts",
-+	  .fops	=	&osc_timeouts_fops		},
-+	{ .name	=	"contention_seconds",
-+	  .fops	=	&osc_contention_seconds_fops	},
-+	{ .name	=	"lockless_truncate",
-+	  .fops	=	&osc_lockless_truncate_fops	},
-+	{ .name	=	"import",
-+	  .fops	=	&osc_import_fops		},
-+	{ .name	=	"state",
-+	  .fops	=	&osc_state_fops			},
-+	{ .name	=	"pinger_recov",
-+	  .fops	=	&osc_pinger_recov_fops		},
-+	{ .name	=	"unstable_stats",
-+	  .fops	=	&osc_unstable_stats_fops	},
- 	{ 0 }
- };
- 
-diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c
-index b9d1b71..f95fb55 100644
---- a/lustre/osc/osc_request.c
-+++ b/lustre/osc/osc_request.c
-@@ -3669,7 +3669,7 @@ int osc_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg)
- {
- 	int rc = class_process_proc_seq_param(PARAM_OSC, obd->obd_vars,
- 					      lcfg, obd);
--	return(rc > 0 ? 0: rc);
-+	return rc > 0 ? 0: rc;
- }
- 
- static int osc_process_config(struct obd_device *obd, obd_count len, void *buf)
-diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
-index a39381f..d5458b2 100644
---- a/lustre/ost/ost_handler.c
-+++ b/lustre/ost/ost_handler.c
-@@ -75,7 +75,8 @@ static struct cfs_cpt_table	*ost_io_cptable;
- LPROC_SEQ_FOPS_RO_TYPE(ost, uuid);
- 
- static struct lprocfs_seq_vars lprocfs_ost_obd_vars[] = {
--	{ "uuid",	&ost_uuid_fops	},
-+	{ .name	=	"uuid",
-+	  .fops	=	&ost_uuid_fops	},
- 	{ 0 }
- };
- #endif /* LPROCFS */
-diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c
-index 8e5a397..bf21958 100644
---- a/lustre/ptlrpc/lproc_ptlrpc.c
-+++ b/lustre/ptlrpc/lproc_ptlrpc.c
-@@ -1382,7 +1382,7 @@ lprocfs_import_seq_write(struct file *file, const char *buffer, size_t count,
- 
- 		*ptr = 0;
- 		do_reconn = 0;
--		ptr += strlen("::");
-+		ptr += 2; /* Skip :: */
- 		inst = simple_strtol(ptr, &endptr, 10);
- 		if (*endptr) {
- 			CERROR("config: wrong instance # %s\n", ptr);
-diff --git a/lustre/quota/qmt_pool.c b/lustre/quota/qmt_pool.c
-index afd450c..df6d6fc 100644
---- a/lustre/quota/qmt_pool.c
-+++ b/lustre/quota/qmt_pool.c
-@@ -171,7 +171,8 @@ static int qpi_state_seq_show(struct seq_file *m, void *data)
- LPROC_SEQ_FOPS_RO(qpi_state);
- 
- static struct lprocfs_seq_vars lprocfs_quota_qpi_vars[] = {
--	{ "info",	&qpi_state_fops	},
-+	{ .name	=	"info",
-+	  .fops	=	&qpi_state_fops	},
- 	{ NULL }
- };
- 
-diff --git a/lustre/quota/qsd_lib.c b/lustre/quota/qsd_lib.c
-index 990cfee..573473c 100644
---- a/lustre/quota/qsd_lib.c
-+++ b/lustre/quota/qsd_lib.c
-@@ -208,10 +208,14 @@ qsd_timeout_seq_write(struct file *file, const char *buffer,
- LPROC_SEQ_FOPS(qsd_timeout);
- 
- static struct lprocfs_seq_vars lprocfs_quota_qsd_vars[] = {
--	{ "info",		&qsd_state_fops		},
--	{ "enabled",		&qsd_enabled_fops	},
--	{ "force_reint",	&qsd_force_reint_fops	},
--	{ "timeout",		&qsd_timeout_fops	},
-+	{ .name	=	"info",
-+	  .fops	=	&qsd_state_fops		},
-+	{ .name	=	"enabled",
-+	  .fops	=	&qsd_enabled_fops	},
-+	{ .name	=	"force_reint",
-+	  .fops	=	&qsd_force_reint_fops	},
-+	{ .name	=	"timeout",
-+	  .fops	=	&qsd_timeout_fops	},
- 	{ NULL }
- };
- 
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
deleted file mode 100644
index 5b3983d..0000000
--- a/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
+++ /dev/null
@@ -1,254 +0,0 @@
-From b3af9f9fde020df881b52b059a9e0d5d2c6ccfb9 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Mon, 20 Jan 2014 21:23:00 -0500
-Subject: [PATCH 11/12] LU-3974 llite: use new struct dir_context
-
-The readdir and nfs code over time has added more
-parameters to be passed to be processed. For the 3.11
-kernel a new struct dir_context was introduced to
-minimize the impact of future expansion. This patch
-addresses this change.
-
-Conflicts:
-	lustre/llite/dir.c
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Ib42bf8cb06635a2a64e63b294d79e66ac82a1a5b
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
----
- lustre/autoconf/lustre-core.m4 | 20 ++++++++++++++++
- lustre/llite/dir.c             | 54 ++++++++++++++++++++++++++++++++----------
- lustre/llite/llite_internal.h  | 14 ++++++++---
- lustre/llite/llite_nfs.c       | 17 +++++++++----
- 4 files changed, 85 insertions(+), 20 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index e6207c9..f44a277 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1349,6 +1349,25 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.11 readdir now takes the new struct dir_context
-+#
-+AC_DEFUN([LC_HAVE_DIR_CONTEXT],
-+[AC_MSG_CHECKING([if dir_context exist])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct dir_context ctx;
-+
-+	ctx.pos = 0;
-+],[
-+	AC_DEFINE(HAVE_DIR_CONTEXT, 1, [dir_context exist])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # 3.11 dentry_operations.d_compare() taken 5 arguments.
- #
- AC_DEFUN([LC_D_COMPARE_5ARGS],
-@@ -1523,6 +1542,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_BLKDEV_RELEASE_RETURN_INT
- 
- 	 # 3.11
-+	 LC_HAVE_DIR_CONTEXT
- 	 LC_D_COMPARE_5ARGS
- 	 LC_HAVE_DCOUNT
- 
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 6a1e3c5..05639f0 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -195,9 +195,16 @@ struct lu_dirent *ll_dir_entry_next(struct inode *dir,
- 	return entry;
- }
- 
-+
-+#ifdef HAVE_DIR_CONTEXT
-+int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
-+		struct dir_context *ctx)
-+{
-+#else
- int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
- 		void *cookie, filldir_t filldir)
- {
-+#endif
- 	struct ll_sb_info	*sbi = ll_i2sbi(inode);
- 	struct ll_dir_chain	chain;
- 	struct lu_dirent	*ent;
-@@ -241,12 +248,17 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
- 		fid_le_to_cpu(&fid, &ent->lde_fid);
- 		ino = cl_fid_build_ino(&fid, api32);
- 		type = ll_dirent_type_get(ent);
-+
-+#ifdef HAVE_DIR_CONTEXT
- 		/* For 'll_nfs_get_name_filldir()', it will try
- 		 * to access the 'ent' through its 'lde_name',
- 		 * so the parameter 'name' for 'filldir()' must
- 		 * be part of the 'ent'. */
-+		done = !dir_emit(ctx, ent->lde_name, namelen, ino, type);
-+#else
- 		done = filldir(cookie, ent->lde_name, namelen, lhash,
- 			       ino, type);
-+#endif
- 		if (done) {
- 			if (op_data->op_hash_offset != MDS_DIR_END_OFF)
- 				op_data->op_hash_offset = last_hash;
-@@ -268,7 +280,11 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
- 	RETURN(rc);
- }
- 
-+#ifdef HAVE_DIR_CONTEXT
-+static int ll_iterate(struct file *filp, struct dir_context *ctx)
-+#else
- static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
-+#endif
- {
- 	struct inode		*inode	= filp->f_dentry->d_inode;
- 	struct ll_file_data	*lfd	= LUSTRE_FPRIVATE(filp);
-@@ -305,22 +321,32 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
- 
- 	op_data->op_hash_offset = pos;
- 	op_data->op_max_pages = sbi->ll_md_brw_size >> PAGE_CACHE_SHIFT;
-+#ifdef HAVE_DIR_CONTEXT
-+	ctx->pos = pos;
-+	rc = ll_dir_read(inode, op_data, ctx);
-+	pos = ctx->pos;
-+#else
- 	rc = ll_dir_read(inode, op_data, cookie, filldir);
-+#endif
- 	if (lfd != NULL)
- 		lfd->lfd_pos = op_data->op_hash_offset;
- 
- 	if (pos == MDS_DIR_END_OFF) {
- 		if (api32)
--			filp->f_pos = LL_DIR_END_OFF_32BIT;
-+			pos = LL_DIR_END_OFF_32BIT;
- 		else
--			filp->f_pos = LL_DIR_END_OFF;
-+			pos = LL_DIR_END_OFF;
- 	} else {
- 		if (api32 && hash64)
--			filp->f_pos = op_data->op_hash_offset >> 32;
-+			pos = op_data->op_hash_offset >> 32;
- 		else
--			filp->f_pos = op_data->op_hash_offset;
-+			pos = op_data->op_hash_offset;
- 	}
--
-+#ifdef HAVE_DIR_CONTEXT
-+	ctx->pos = pos;
-+#else
-+	filp->f_pos = pos;
-+#endif
- 	ll_finish_md_op_data(op_data);
- 	filp->f_version = inode->i_version;
- #ifdef HAVE_TOUCH_ATIME_1ARG
-@@ -1809,11 +1835,15 @@ int ll_dir_release(struct inode *inode, struct file *file)
- }
- 
- struct file_operations ll_dir_operations = {
--        .llseek   = ll_dir_seek,
--        .open     = ll_dir_open,
--        .release  = ll_dir_release,
--        .read     = generic_read_dir,
--        .readdir  = ll_readdir,
--        .unlocked_ioctl   = ll_dir_ioctl,
--        .fsync    = ll_fsync,
-+	.llseek		= ll_dir_seek,
-+	.open		= ll_dir_open,
-+	.release	= ll_dir_release,
-+	.read		= generic_read_dir,
-+#ifdef HAVE_DIR_CONTEXT
-+	.iterate	= ll_iterate,
-+#else
-+	.readdir	= ll_readdir,
-+#endif
-+	.unlocked_ioctl	= ll_dir_ioctl,
-+	.fsync		= ll_fsync,
- };
-diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 59ecdfb..148f6fa 100644
---- a/lustre/llite/llite_internal.h
-+++ b/lustre/llite/llite_internal.h
-@@ -92,9 +92,12 @@ extern struct file_operations ll_pgcache_seq_fops;
- #define REMOTE_PERM_HASHSIZE 16
- 
- struct ll_getname_data {
--        char            *lgd_name;      /* points to a buffer with NAME_MAX+1 size */
--        struct lu_fid    lgd_fid;       /* target fid we are looking for */
--        int              lgd_found;     /* inode matched? */
-+#ifdef HAVE_DIR_CONTEXT
-+	struct dir_context	ctx;
-+#endif
-+	char		*lgd_name;	/* points to a buffer with NAME_MAX+1 size */
-+	struct lu_fid	lgd_fid;	/* target fid we are looking for */
-+	int		lgd_found;	/* inode matched? */
- };
- 
- /* llite setxid/access permission for user on remote client */
-@@ -726,8 +729,13 @@ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
- /* llite/dir.c */
- extern struct file_operations ll_dir_operations;
- extern struct inode_operations ll_dir_inode_operations;
-+#ifdef HAVE_DIR_CONTEXT
-+int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
-+		struct dir_context *ctx);
-+#else
- int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
- 		void *cookie, filldir_t filldir);
-+#endif
- int ll_get_mdt_idx(struct inode *inode);
- 
- struct lu_dirent *ll_dir_entry_start(struct inode *dir,
-diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
-index f96d17e..713e846 100644
---- a/lustre/llite/llite_nfs.c
-+++ b/lustre/llite/llite_nfs.c
-@@ -230,7 +230,14 @@ static int ll_get_name(struct dentry *dentry, char *name,
-                        struct dentry *child)
- {
- 	struct inode *dir = dentry->d_inode;
--	struct ll_getname_data lgd;
-+	struct ll_getname_data lgd = {
-+		.lgd_name	= name,
-+		.lgd_fid	= ll_i2info(child->d_inode)->lli_fid,
-+#ifdef HAVE_DIR_CONTEXT
-+		.ctx.actor	= ll_nfs_get_name_filldir,
-+#endif
-+		.lgd_found = 0,
-+	};
- 	struct md_op_data *op_data;
- 	int rc;
- 	ENTRY;
-@@ -241,10 +248,6 @@ static int ll_get_name(struct dentry *dentry, char *name,
-         if (!dir->i_fop)
-                 GOTO(out, rc = -EINVAL);
- 
--        lgd.lgd_name = name;
--        lgd.lgd_fid = ll_i2info(child->d_inode)->lli_fid;
--        lgd.lgd_found = 0;
--
- 	op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
- 				     LUSTRE_OPC_ANY, dir);
- 	if (IS_ERR(op_data))
-@@ -254,7 +257,11 @@ static int ll_get_name(struct dentry *dentry, char *name,
- 	op_data->op_max_pages =
- 		ll_i2sbi(dir)->ll_md_brw_size >> PAGE_CACHE_SHIFT;
- 	mutex_lock(&dir->i_mutex);
-+#ifdef HAVE_DIR_CONTEXT
-+	rc = ll_dir_read(dir, op_data, &lgd.ctx);
-+#else
- 	rc = ll_dir_read(dir, op_data, &lgd, ll_nfs_get_name_filldir);
-+#endif
- 	mutex_unlock(&dir->i_mutex);
- 	ll_finish_md_op_data(op_data);
- 	if (!rc && !lgd.lgd_found)
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
deleted file mode 100644
index 90e558e..0000000
--- a/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
+++ /dev/null
@@ -1,134 +0,0 @@
-From 95cacafafbc5bc0ec28bbf7898df28bb0f0295e6 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 24 Sep 2013 12:29:47 -0400
-Subject: [PATCH 12/12] LU-3974 llite: invalidatepage api changed
-
-Until recently invalidating pages from the buffer cache
-was dependent only on the page passed in and the start
-in the page to invalidate. Starting with the 3.11 kernel
-you can also specify the length of the data in the page
-to invalidate. This patch enables us to handle the new
-case.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Iedf458b20b2604bc3099d5ae38bf0ad07df83bd3
----
- lustre/autoconf/lustre-core.m4                 | 20 ++++++++++++++++++++
- lustre/include/linux/lustre_patchless_compat.h | 19 +++++++++++--------
- lustre/llite/rw26.c                            | 24 +++++++++++++++++-------
- 3 files changed, 48 insertions(+), 15 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index f44a277..5409fde 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1349,6 +1349,25 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.11 invalidatepage requires the length of the range to invalidate
-+#
-+AC_DEFUN([LC_INVALIDATE_RANGE],
-+[AC_MSG_CHECKING([if address_space_operations.invalidatepage requires 3 arguments])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct address_space_operations a_ops;
-+
-+	a_ops.invalidatepage(NULL,0,0);
-+],[
-+	AC_DEFINE(HAVE_INVALIDATE_RANGE, 1, [address_space_operations.invalidatepage needs 3 arguments])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # 3.11 readdir now takes the new struct dir_context
- #
- AC_DEFUN([LC_HAVE_DIR_CONTEXT],
-@@ -1542,6 +1561,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_BLKDEV_RELEASE_RETURN_INT
- 
- 	 # 3.11
-+	 LC_INVALIDATE_RANGE
- 	 LC_HAVE_DIR_CONTEXT
- 	 LC_D_COMPARE_5ARGS
- 	 LC_HAVE_DCOUNT
-diff --git a/lustre/include/linux/lustre_patchless_compat.h b/lustre/include/linux/lustre_patchless_compat.h
-index 747bd4d..5b7bab6 100644
---- a/lustre/include/linux/lustre_patchless_compat.h
-+++ b/lustre/include/linux/lustre_patchless_compat.h
-@@ -78,15 +78,18 @@ static inline void ll_delete_from_page_cache(struct page *page)
- static inline void
- truncate_complete_page(struct address_space *mapping, struct page *page)
- {
--        if (page->mapping != mapping)
--                return;
-+	if (page->mapping != mapping)
-+		return;
- 
--        if (PagePrivate(page))
--                page->mapping->a_ops->invalidatepage(page, 0);
--
--        cancel_dirty_page(page, PAGE_SIZE);
--        ClearPageMappedToDisk(page);
--        ll_delete_from_page_cache(page);
-+	if (PagePrivate(page))
-+#ifdef HAVE_INVALIDATE_RANGE
-+		page->mapping->a_ops->invalidatepage(page, 0, PAGE_CACHE_SIZE);
-+#else
-+		page->mapping->a_ops->invalidatepage(page, 0);
-+#endif
-+	cancel_dirty_page(page, PAGE_SIZE);
-+	ClearPageMappedToDisk(page);
-+	ll_delete_from_page_cache(page);
- }
- #endif /* !HAVE_TRUNCATE_COMPLETE_PAGE */
- 
-diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c
-index 447dc43..77151de 100644
---- a/lustre/llite/rw26.c
-+++ b/lustre/llite/rw26.c
-@@ -76,7 +76,13 @@
-  * aligned truncate). Lustre leaves partially truncated page in the cache,
-  * relying on struct inode::i_size to limit further accesses.
-  */
--static void ll_invalidatepage(struct page *vmpage, unsigned long offset)
-+static void ll_invalidatepage(struct page *vmpage,
-+#ifdef HAVE_INVALIDATE_RANGE
-+				unsigned int offset, unsigned int length
-+#else
-+				unsigned long offset
-+#endif
-+			     )
- {
-         struct inode     *inode;
-         struct lu_env    *env;
-@@ -88,12 +94,16 @@ static void ll_invalidatepage(struct page *vmpage, unsigned long offset)
-         LASSERT(PageLocked(vmpage));
-         LASSERT(!PageWriteback(vmpage));
- 
--        /*
--         * It is safe to not check anything in invalidatepage/releasepage
--         * below because they are run with page locked and all our io is
--         * happening with locked page too
--         */
--        if (offset == 0) {
-+	/*
-+	 * It is safe to not check anything in invalidatepage/releasepage
-+	 * below because they are run with page locked and all our io is
-+	 * happening with locked page too
-+	 */
-+#ifdef HAVE_INVALIDATE_RANGE
-+	if (offset == 0 && length == PAGE_CACHE_SIZE) {
-+#else
-+	if (offset == 0) {
-+#endif
-                 env = cl_env_get(&refcheck);
-                 if (!IS_ERR(env)) {
-                         inode = vmpage->mapping->host;
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index ad303cf..c4de667 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -33,18 +33,15 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0004-LU-3319-procfs-fix-symlink-handling.patch"
+	"${FILESDIR}/0001-LU-3319-procfs-fix-symlink-handling.patch"
+	"${FILESDIR}/0002-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0007-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
 	"${FILESDIR}/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
-	"${FILESDIR}/0010-LU-3319-lprocfs-client-side-cleanups.patch"
-	"${FILESDIR}/0011-LU-3974-llite-use-new-struct-dir_context.patch"
-	"${FILESDIR}/0012-LU-3974-llite-invalidatepage-api-changed.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-02-27 12:08 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-02-27 12:08 UTC (permalink / raw
  To: gentoo-commits

commit:     7890d3a30936ae1853d6893b900dc87350a834f4
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Feb 27 12:08:26 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Feb 27 12:08:26 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=7890d3a3

Update patches

Package-Manager: portage-2.2.8-r1
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |  15 +++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |   2 +-
 ...cfs-update-zfs-proc-handling-to-seq_files.patch |  10 +-
 ...rocfs-move-mgs-proc-handling-to-seq_files.patch |   2 +-
 .../0004-LU-3319-procfs-fix-symlink-handling.patch |  26 ++--
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |  26 ++--
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |  14 +--
 ...cfs-move-mdd-ofd-proc-handling-to-seq_fil.patch | 133 +++++++++++++--------
 ...cfs-move-mdt-mds-proc-handling-to-seq_fil.patch |  20 ++--
 ...cfs-update-ldiskfs-proc-handling-to-seq_f.patch |  38 +++---
 ...0010-LU-3319-lprocfs-client-side-cleanups.patch |   8 +-
 ...-LU-3974-llite-use-new-struct-dir_context.patch |  20 ++--
 ...-LU-3974-llite-invalidatepage-api-changed.patch |   2 +-
 13 files changed, 184 insertions(+), 132 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 9fefa38..73299e5 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,21 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  27 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  files/0004-LU-3319-procfs-fix-symlink-handling.patch,
+  files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  files/0010-LU-3319-lprocfs-client-side-cleanups.patch,
+  files/0011-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0012-LU-3974-llite-invalidatepage-api-changed.patch:
+  Update patches
+
   12 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
   files/0011-LU-3974-llite-use-new-struct-dir_context.patch,
   files/0012-LU-3974-llite-invalidatepage-api-changed.patch:

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index caa6587..63fcb0a 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,4 +1,4 @@
-From 247c87f4a981fd26bfaf219930193b1a35865736 Mon Sep 17 00:00:00 2001
+From f384f155612fb8b3fa6a12c4c969e29629f82027 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
 Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox

diff --git a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index 939f1fc..ff3c6bf 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From c05c0be01814527d8d3762963c7a6d4c28189d2d Mon Sep 17 00:00:00 2001
+From 699242b35f07c7c64959dca02cc359d389c7f568 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 3 Jan 2014 09:55:26 -0500
 Subject: [PATCH 02/12] LU-3319 procfs: update zfs proc handling to seq_files
@@ -14,10 +14,10 @@ Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
  3 files changed, 57 insertions(+), 47 deletions(-)
 
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index d4193cd..36bf6a4 100644
+index 1025be9..c9bf49a 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -745,6 +745,7 @@ static int osd_device_init(const struct lu_env *env, struct lu_device *d,
+@@ -748,6 +748,7 @@ static int osd_device_init(const struct lu_env *env, struct lu_device *d,
  static int osd_process_config(const struct lu_env *env,
  			      struct lu_device *d, struct lustre_cfg *cfg)
  {
@@ -25,7 +25,7 @@ index d4193cd..36bf6a4 100644
  	struct osd_device	*o = osd_dev(d);
  	int			rc;
  	ENTRY;
-@@ -758,12 +759,12 @@ static int osd_process_config(const struct lu_env *env,
+@@ -761,12 +762,12 @@ static int osd_process_config(const struct lu_env *env,
  		break;
  	case LCFG_PARAM: {
  		LASSERT(&o->od_dt_dev);
@@ -43,7 +43,7 @@ index d4193cd..36bf6a4 100644
  		break;
  	}
  	default:
-@@ -911,7 +912,7 @@ int __init osd_init(void)
+@@ -914,7 +915,7 @@ int __init osd_init(void)
  
  	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
index 756975e..38785b2 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From b262846027fbf96a5a80b81cfe86da53ce6e6f9f Mon Sep 17 00:00:00 2001
+From 44eb91a37b43a71a0d531359c9da082b6e1ec454 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 3 Jan 2014 09:58:53 -0500
 Subject: [PATCH 03/12] LU-3319 procfs: move mgs proc handling to seq_files

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
index fc78c68..935325e 100644
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
@@ -1,4 +1,4 @@
-From 8f24a0e29b5f4b18193742c9aecd960c6b6102ff Mon Sep 17 00:00:00 2001
+From 4bc21601224ea84152d9c3cc83eee33af8eb8cb2 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 09:37:44 -0500
 Subject: [PATCH 04/12] LU-3319 procfs: fix symlink handling
@@ -24,7 +24,7 @@ Signed-off-by: James Simmons <uja.ornl@gmail.com>
  4 files changed, 91 insertions(+), 90 deletions(-)
 
 diff --git a/lustre/include/obd.h b/lustre/include/obd.h
-index c18052b..8fd2ce7 100644
+index ac80412..42266da 100644
 --- a/lustre/include/obd.h
 +++ b/lustre/include/obd.h
 @@ -183,13 +183,15 @@ struct obd_info {
@@ -59,10 +59,10 @@ index c18052b..8fd2ce7 100644
  	struct lprocfs_stats	*obd_svc_stats;
  	struct lprocfs_seq_vars	*obd_vars;
 diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
-index e0941c9..93db311 100644
+index ee5f3a7..66a9448 100644
 --- a/lustre/lmv/lmv_obd.c
 +++ b/lustre/lmv/lmv_obd.c
-@@ -242,9 +242,6 @@ static int lmv_connect(const struct lu_env *env,
+@@ -263,9 +263,6 @@ static int lmv_connect(const struct lu_env *env,
                         struct obd_uuid *cluuid, struct obd_connect_data *data,
                         void *localdata)
  {
@@ -72,7 +72,7 @@ index e0941c9..93db311 100644
          struct lmv_obd        *lmv = &obd->u.lmv;
          struct lustre_handle  conn = { 0 };
          int                    rc = 0;
-@@ -277,18 +274,15 @@ static int lmv_connect(const struct lu_env *env,
+@@ -298,18 +295,15 @@ static int lmv_connect(const struct lu_env *env,
                  lmv->conn_data = *data;
  
  #ifdef __KERNEL__
@@ -97,7 +97,7 @@ index e0941c9..93db311 100644
  	}
  #endif
  
-@@ -302,10 +296,8 @@ static int lmv_connect(const struct lu_env *env,
+@@ -323,10 +317,8 @@ static int lmv_connect(const struct lu_env *env,
                  rc = lmv_check_connect(obd);
  
  #ifdef __KERNEL__
@@ -110,7 +110,7 @@ index e0941c9..93db311 100644
  #endif
          RETURN(rc);
  }
-@@ -384,9 +376,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
+@@ -405,9 +397,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
  
  int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
  {
@@ -120,7 +120,7 @@ index e0941c9..93db311 100644
          struct lmv_obd          *lmv = &obd->u.lmv;
          struct obd_uuid         *cluuid = &lmv->cluuid;
          struct obd_uuid          lmv_mdc_uuid = { "LMV_MDC_UUID" };
-@@ -466,14 +455,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+@@ -487,14 +476,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
                  cfs_atomic_read(&obd->obd_refcount));
  
  #ifdef __KERNEL__
@@ -137,7 +137,7 @@ index e0941c9..93db311 100644
  						  "../../../%s/%s",
  						  mdc_obd->obd_type->typ_name,
  						  mdc_obd->obd_name);
-@@ -482,8 +470,7 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+@@ -503,8 +491,7 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
  			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
  			       obd->obd_type->typ_name, obd->obd_name,
  			       mdc_obd->obd_name);
@@ -147,7 +147,7 @@ index e0941c9..93db311 100644
  		}
  	}
  #endif
-@@ -675,9 +662,6 @@ int lmv_check_connect(struct obd_device *obd)
+@@ -696,9 +683,6 @@ int lmv_check_connect(struct obd_device *obd)
  
  static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
  {
@@ -157,7 +157,7 @@ index e0941c9..93db311 100644
          struct lmv_obd         *lmv = &obd->u.lmv;
          struct obd_device      *mdc_obd;
          int                     rc;
-@@ -695,9 +679,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+@@ -716,9 +700,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
          }
  
  #ifdef __KERNEL__
@@ -170,7 +170,7 @@ index e0941c9..93db311 100644
  #endif
  	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
  	if (rc)
-@@ -747,8 +731,8 @@ static int lmv_disconnect(struct obd_export *exp)
+@@ -768,8 +752,8 @@ static int lmv_disconnect(struct obd_export *exp)
          }
  
  #ifdef __KERNEL__
@@ -331,7 +331,7 @@ index 286cd15..a3310fd 100644
          rc = class_disconnect(exp); /* bz 9811 */
          RETURN(rc);
 diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index c9d8a4e..a4a981c 100644
+index 20cd0a0..00bf342 100644
 --- a/lustre/obdclass/genops.c
 +++ b/lustre/obdclass/genops.c
 @@ -181,14 +181,15 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 7734600..2d5a974 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From cfafe91ff9caf648f144c1a162112b7d1485aae4 Mon Sep 17 00:00:00 2001
+From e9786df9c5618c2cff7d81088548fefee874468a Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 17:10:18 -0500
 Subject: [PATCH 05/12] LU-3319 procfs: move osp proc handling to seq_files
@@ -624,10 +624,10 @@ index 75ebeb1..1ec40fc 100644
  }
  
 diff --git a/lustre/osp/lwp_dev.c b/lustre/osp/lwp_dev.c
-index 9560504..d6ae965 100644
+index dc4f978..b6e84e1 100644
 --- a/lustre/osp/lwp_dev.c
 +++ b/lustre/osp/lwp_dev.c
-@@ -186,25 +186,13 @@ const struct lu_device_operations lwp_lu_ops = {
+@@ -184,25 +184,13 @@ const struct lu_device_operations lwp_lu_ops = {
  	.ldo_process_config	= lwp_process_config,
  };
  
@@ -654,7 +654,7 @@ index 9560504..d6ae965 100644
  	int			   rc;
  	ENTRY;
  
-@@ -233,8 +221,8 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
+@@ -231,8 +219,8 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
  		RETURN(rc);
  	}
  
@@ -666,10 +666,10 @@ index 9560504..d6ae965 100644
  
  	RETURN(0);
 diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
-index 5828d88..7d45fa1 100644
+index a8d75ea..336b9f0 100644
 --- a/lustre/osp/osp_dev.c
 +++ b/lustre/osp/osp_dev.c
-@@ -371,7 +371,7 @@ static int osp_process_config(const struct lu_env *env,
+@@ -366,7 +366,7 @@ static int osp_process_config(const struct lu_env *env,
  			      struct lu_device *dev, struct lustre_cfg *lcfg)
  {
  	struct osp_device		*d = lu2osp_dev(dev);
@@ -678,7 +678,7 @@ index 5828d88..7d45fa1 100644
  	int				 rc;
  
  	ENTRY;
-@@ -385,11 +385,9 @@ static int osp_process_config(const struct lu_env *env,
+@@ -380,11 +380,9 @@ static int osp_process_config(const struct lu_env *env,
  		rc = osp_shutdown(env, d);
  		break;
  	case LCFG_PARAM:
@@ -693,7 +693,7 @@ index 5828d88..7d45fa1 100644
  		if (rc > 0)
  			rc = 0;
  		if (rc == -ENOSYS) {
-@@ -842,6 +840,9 @@ static struct lu_device *osp_device_fini(const struct lu_env *env,
+@@ -844,6 +842,9 @@ static struct lu_device *osp_device_fini(const struct lu_env *env,
  			OBD_FREE_PTR(cli->cl_rpc_lock);
  			cli->cl_rpc_lock = NULL;
  		}
@@ -703,7 +703,7 @@ index 5828d88..7d45fa1 100644
  	}
  
  	rc = client_obd_cleanup(m->opd_obd);
-@@ -1220,33 +1221,26 @@ struct llog_operations osp_mds_ost_orig_logops;
+@@ -1233,33 +1234,26 @@ struct llog_operations osp_mds_ost_orig_logops;
  
  static int __init osp_mod_init(void)
  {
@@ -741,7 +741,7 @@ index 5828d88..7d45fa1 100644
  #endif
  				LUSTRE_LWP_NAME, &lwp_device_type);
  	if (rc != 0) {
-@@ -1260,21 +1254,23 @@ static int __init osp_mod_init(void)
+@@ -1273,21 +1267,23 @@ static int __init osp_mod_init(void)
  	osp_mds_ost_orig_logops.lop_add = llog_cat_add_rec;
  	osp_mds_ost_orig_logops.lop_declare_add = llog_cat_declare_add_rec;
  
@@ -775,10 +775,10 @@ index 5828d88..7d45fa1 100644
  	class_unregister_type(LUSTRE_OSP_NAME);
  	lu_kmem_fini(osp_caches);
 diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
-index 0871d8d..0cc608b 100644
+index 2af16c0..84eca11 100644
 --- a/lustre/osp/osp_internal.h
 +++ b/lustre/osp/osp_internal.h
-@@ -433,7 +433,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
+@@ -526,7 +526,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
  int osp_init_pre_fid(struct osp_device *osp);
  
  /* lproc_osp.c */
@@ -786,7 +786,7 @@ index 0871d8d..0cc608b 100644
  void osp_lprocfs_init(struct osp_device *osp);
  
  /* osp_sync.c */
-@@ -447,7 +446,6 @@ int osp_sync_fini(struct osp_device *d);
+@@ -540,7 +539,6 @@ int osp_sync_fini(struct osp_device *d);
  void __osp_sync_check_for_work(struct osp_device *d);
  
  /* lwp_dev.c */

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index 1ca6b12..06e3571 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From 82953bddbc3c7b9aa044d9eecc796bc12638f476 Mon Sep 17 00:00:00 2001
+From 2670599090a754d9fa8c7d952b530bc8fb88d56e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 11:08:45 -0500
 Subject: [PATCH 06/12] LU-3319 procfs: move lod proc handling to seq_files
@@ -17,10 +17,10 @@ Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
  4 files changed, 152 insertions(+), 146 deletions(-)
 
 diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
-index 02a1e1e..b0ad1fd 100644
+index a451462..8776aa3 100644
 --- a/lustre/lod/lod_dev.c
 +++ b/lustre/lod/lod_dev.c
-@@ -297,12 +297,10 @@ static int lod_process_config(const struct lu_env *env,
+@@ -289,12 +289,10 @@ static int lod_process_config(const struct lu_env *env,
  	}
  
  	case LCFG_PARAM: {
@@ -36,7 +36,7 @@ index 02a1e1e..b0ad1fd 100644
  		if (rc > 0)
  			rc = 0;
  		GOTO(out, rc);
-@@ -916,19 +914,16 @@ static struct obd_ops lod_obd_device_ops = {
+@@ -890,19 +888,16 @@ static struct obd_ops lod_obd_device_ops = {
  
  static int __init lod_mod_init(void)
  {
@@ -59,7 +59,7 @@ index 02a1e1e..b0ad1fd 100644
  #endif
  				LUSTRE_LOD_NAME, &lod_device_type);
  	if (rc) {
-@@ -937,23 +932,25 @@ static int __init lod_mod_init(void)
+@@ -911,23 +906,25 @@ static int __init lod_mod_init(void)
  	}
  
  	/* create "lov" entry in procfs for compatibility purposes */
@@ -96,10 +96,10 @@ index 02a1e1e..b0ad1fd 100644
  	lu_kmem_fini(lod_caches);
  }
 diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h
-index 6d99ad5..9299a91 100644
+index 2a00890..65ba47a 100644
 --- a/lustre/lod/lod_internal.h
 +++ b/lustre/lod/lod_internal.h
-@@ -376,7 +376,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
+@@ -431,7 +431,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
  int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *);
  
  /* lproc_lod.c */

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 0e748e6..b2921fc 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,6 +1,6 @@
-From 2790709429e9aaf4b11fca12e3f2e9d70f6608ce Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 31 Jan 2014 14:00:32 -0500
+From 6af3bd54359520829a6199e81171fd849a6656f4 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Thu, 27 Feb 2014 16:06:08 +0400
 Subject: [PATCH 07/12] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
@@ -9,14 +9,15 @@ layer proc entries over to using seq_files.
 
 Conflicts:
 	lustre/mdd/mdd_lproc.c
+	lustre/lfsck/lfsck_layout.c
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
 ---
  lustre/include/lustre_lfsck.h    |   6 +-
  lustre/lfsck/lfsck_internal.h    |   9 +-
- lustre/lfsck/lfsck_layout.c      |  66 ++----
+ lustre/lfsck/lfsck_layout.c      | 101 ++-------
  lustre/lfsck/lfsck_lib.c         |  77 +++----
  lustre/lfsck/lfsck_namespace.c   |  75 ++-----
  lustre/mdd/mdd_device.c          |  25 +--
@@ -28,13 +29,13 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  lustre/ofd/ofd_internal.h        |   6 +-
  lustre/osd-ldiskfs/osd_handler.c |   1 +
  lustre/osd-zfs/osd_handler.c     |   1 +
- 14 files changed, 462 insertions(+), 598 deletions(-)
+ 14 files changed, 462 insertions(+), 633 deletions(-)
 
 diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
-index 2e93420..0e578ac 100644
+index 1209bc2..bdb0955 100644
 --- a/lustre/include/lustre_lfsck.h
 +++ b/lustre/include/lustre_lfsck.h
-@@ -156,11 +156,11 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
+@@ -158,12 +158,12 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
  int lfsck_query(const struct lu_env *env, struct dt_device *key,
  		struct lfsck_request *lr);
  
@@ -48,12 +49,13 @@ index 2e93420..0e578ac 100644
 -int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type);
 +int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type);
  
- #endif /* _LUSTRE_LFSCK_H */
+ static inline void lfsck_pack_rfa(struct lfsck_request *lr,
+ 				  const struct lu_fid *fid)
 diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
-index 01d3c60..fb98cf2 100644
+index 9f20729..48d3d82 100644
 --- a/lustre/lfsck/lfsck_internal.h
 +++ b/lustre/lfsck/lfsck_internal.h
-@@ -288,8 +288,7 @@ struct lfsck_operations {
+@@ -293,8 +293,7 @@ struct lfsck_operations {
  
  	int (*lfsck_dump)(const struct lu_env *env,
  			  struct lfsck_component *com,
@@ -63,7 +65,7 @@ index 01d3c60..fb98cf2 100644
  
  	int (*lfsck_double_scan)(const struct lu_env *env,
  				 struct lfsck_component *com);
-@@ -546,10 +545,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
+@@ -571,10 +570,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
  			     struct lfsck_component *com);
  void lfsck_instance_cleanup(const struct lu_env *env,
  			    struct lfsck_instance *lfsck);
@@ -78,10 +80,10 @@ index 01d3c60..fb98cf2 100644
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
  		    struct lfsck_position *pos, bool init);
 diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index bdcd4c4..1295764 100644
+index f77ee87..27394e2 100644
 --- a/lustre/lfsck/lfsck_layout.c
 +++ b/lustre/lfsck/lfsck_layout.c
-@@ -2249,69 +2249,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
+@@ -3657,69 +3657,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
  }
  
  static int lfsck_layout_dump(const struct lu_env *env,
@@ -160,7 +162,7 @@ index bdcd4c4..1295764 100644
  		      "repaired_dangling: "LPU64"\n"
  		      "repaired_unmatched_pair: "LPU64"\n"
  		      "repaired_multiple_referenced: "LPU64"\n"
-@@ -2331,11 +2315,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -3739,11 +3723,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		      lo->ll_objs_skipped,
  		      lo->ll_objs_failed_phase1,
  		      lo->ll_objs_failed_phase2);
@@ -172,7 +174,7 @@ index bdcd4c4..1295764 100644
  
  	if (lo->ll_status == LS_SCANNING_PHASE1) {
  		__u64 pos;
-@@ -2352,8 +2331,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -3760,8 +3739,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -182,7 +184,7 @@ index bdcd4c4..1295764 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -2367,11 +2345,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -3775,11 +3753,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed,
  			      new_checked);
@@ -194,7 +196,7 @@ index bdcd4c4..1295764 100644
  
  		LASSERT(lfsck->li_di_oit != NULL);
  
-@@ -2384,12 +2357,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -3792,47 +3765,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		pos = iops->store(env, lfsck->li_di_oit);
  		if (!lfsck->li_current_oit_processed)
  			pos--;
@@ -204,11 +206,46 @@ index bdcd4c4..1295764 100644
 -
 -		buf += rc;
 -		len -= rc;
+-	} else if (lo->ll_status == LS_SCANNING_PHASE2) {
+-		cfs_duration_t duration = cfs_time_current() -
+-					  lfsck->li_time_last_checkpoint;
+-		__u64 checked = lo->ll_objs_checked_phase1 + com->lc_new_checked;
+-		__u64 speed = checked;
+-		__u64 new_checked = com->lc_new_checked * HZ;
+-		__u32 rtime = lo->ll_run_time_phase1 +
+-			      cfs_duration_sec(duration + HALF_SEC);
+-
+-		if (duration != 0)
+-			do_div(new_checked, duration);
+-		if (rtime != 0)
+-			do_div(speed, rtime);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
+-			      "checked_phase2: "LPU64"\n"
+-			      "run_time_phase1: %u seconds\n"
+-			      "run_time_phase2: %u seconds\n"
+-			      "average_speed_phase1: "LPU64" items/sec\n"
+-			      "average_speed_phase2: N/A\n"
+-			      "real-time_speed_phase1: "LPU64" items/sec\n"
+-			      "real-time_speed_phase2: N/A\n"
+-			      "current_position: "DFID"\n",
+-			      checked,
+-			      lo->ll_objs_checked_phase2,
+-			      rtime,
+-			      lo->ll_run_time_phase2,
+-			      speed,
+-			      new_checked,
+-			      PFID(&com->lc_fid_latest_scanned_phase2));
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
 +		seq_printf(m, "current_position: "LPU64"\n", pos);
  	} else {
- 		/* XXX: LS_SCANNING_PHASE2 will be handled in the future. */
  		__u64 speed1 = lo->ll_objs_checked_phase1;
-@@ -2399,8 +2367,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 		__u64 speed2 = lo->ll_objs_checked_phase2;
+@@ -3841,8 +3774,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(speed1, lo->ll_run_time_phase1);
  		if (lo->ll_run_time_phase2 != 0)
  			do_div(speed2, lo->ll_run_time_phase2);
@@ -218,7 +255,7 @@ index bdcd4c4..1295764 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -2415,18 +2382,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -3857,18 +3789,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed1,
  			      speed2);
@@ -239,10 +276,10 @@ index bdcd4c4..1295764 100644
  
  static int lfsck_layout_master_double_scan(const struct lu_env *env,
 diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index 3eb3a02..b949b8d 100644
+index de7b849..d358ca1 100644
 --- a/lustre/lfsck/lfsck_lib.c
 +++ b/lustre/lfsck/lfsck_lib.c
-@@ -425,77 +425,52 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
+@@ -426,77 +426,52 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
  	return 0;
  }
  
@@ -339,7 +376,7 @@ index 3eb3a02..b949b8d 100644
  }
  
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -1104,7 +1079,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+@@ -1149,7 +1124,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
  
  /* external interfaces */
  
@@ -348,7 +385,7 @@ index 3eb3a02..b949b8d 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1117,8 +1092,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+@@ -1162,8 +1137,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -358,7 +395,7 @@ index 3eb3a02..b949b8d 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENODEV;
-@@ -1158,7 +1132,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
+@@ -1203,7 +1177,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_speed);
  
@@ -367,7 +404,7 @@ index 3eb3a02..b949b8d 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1171,8 +1145,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
+@@ -1216,8 +1190,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -377,7 +414,7 @@ index 3eb3a02..b949b8d 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENODEV;
-@@ -1222,7 +1195,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
+@@ -1267,7 +1240,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_windows);
  
@@ -386,7 +423,7 @@ index 3eb3a02..b949b8d 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1238,7 +1211,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
+@@ -1283,7 +1256,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
  	if (likely(lfsck != NULL)) {
  		com = lfsck_component_find(lfsck, type);
  		if (likely(com != NULL)) {
@@ -619,10 +656,10 @@ index 40a4ee3..b0acecb 100644
  				LUSTRE_MDD_NAME, &mdd_device_type);
  	if (rc)
 diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
-index daa1dcb..5332b2c 100644
+index 0bfb2a2..bccef77 100644
 --- a/lustre/mdd/mdd_internal.h
 +++ b/lustre/mdd/mdd_internal.h
-@@ -340,7 +340,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
+@@ -342,7 +342,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
                                struct thandle *);
  
  /* mdd_lproc.c */
@@ -1047,7 +1084,7 @@ index de379b3..5714ee6 100644
  }
 -
 diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 7cd7870..f9cb944 100644
+index 0ca58c5..5b72a5a 100644
 --- a/lustre/obdclass/lprocfs_status.c
 +++ b/lustre/obdclass/lprocfs_status.c
 @@ -388,11 +388,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
@@ -1744,7 +1781,7 @@ index e303fd6..1759a7d 100644
  {
  	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
 diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 6782e5d..1575972 100644
+index 9900bed..a9cc81f 100644
 --- a/lustre/ofd/ofd_dev.c
 +++ b/lustre/ofd/ofd_dev.c
 @@ -240,8 +240,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
@@ -1767,7 +1804,7 @@ index 6782e5d..1575972 100644
  					      d->ld_obd);
  		if (rc > 0 || rc == -ENOSYS) {
  			CDEBUG(D_CONFIG, "pass param %s down the stack.\n",
-@@ -492,9 +490,10 @@ static struct lu_device_operations ofd_lu_ops = {
+@@ -496,9 +494,10 @@ static struct lu_device_operations ofd_lu_ops = {
  	.ldo_prepare		= ofd_prepare,
  };
  
@@ -1779,7 +1816,7 @@ index 6782e5d..1575972 100644
  	struct obd_device		*obd = ofd_obd(ofd);
  	cfs_proc_dir_entry_t		*entry;
  	int				 rc = 0;
-@@ -503,8 +502,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -507,8 +506,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  
  	/* lprocfs must be setup before the ofd so state can be safely added
  	 * to /proc incrementally as the ofd is setup */
@@ -1790,7 +1827,7 @@ index 6782e5d..1575972 100644
  	if (rc) {
  		CERROR("%s: lprocfs_obd_setup failed: %d.\n",
  		       obd->obd_name, rc);
-@@ -520,7 +519,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -524,7 +523,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  
  	obd->obd_uses_nid_stats = 1;
  
@@ -1799,7 +1836,7 @@ index 6782e5d..1575972 100644
  	if (IS_ERR(entry)) {
  		rc = PTR_ERR(entry);
  		CERROR("%s: error %d setting up lprocfs for %s\n",
-@@ -530,8 +529,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -534,8 +533,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  	obd->obd_proc_exports_entry = entry;
  
  	entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
@@ -1812,7 +1849,7 @@ index 6782e5d..1575972 100644
  	if (IS_ERR(entry)) {
  		rc = PTR_ERR(entry);
  		CERROR("%s: add proc entry 'clear' failed: %d.\n",
-@@ -547,7 +548,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+@@ -551,7 +552,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
  		GOTO(remove_entry_clear, rc);
  	RETURN(0);
  remove_entry_clear:
@@ -1821,7 +1858,7 @@ index 6782e5d..1575972 100644
  obd_cleanup:
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -560,29 +561,28 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+@@ -564,29 +565,28 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
  	struct obd_device	*obd = ofd_obd(ofd);
  	struct obd_device	*osd_obd = ofd->ofd_osd_exp->exp_obd;
  	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
@@ -1856,7 +1893,7 @@ index 6782e5d..1575972 100644
  		lprocfs_add_symlink("writethrough_cache_enable",
  				    obd->obd_proc_entry,
  				    "../../%s/%s/writethrough_cache_enable",
-@@ -593,13 +593,8 @@ static void ofd_procfs_fini(struct ofd_device *ofd)
+@@ -597,13 +597,8 @@ static void ofd_procfs_fini(struct ofd_device *ofd)
  {
  	struct obd_device *obd = ofd_obd(ofd);
  
@@ -1872,7 +1909,7 @@ index 6782e5d..1575972 100644
  	lprocfs_free_per_client_stats(obd);
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -2364,7 +2359,6 @@ static struct lu_device_type ofd_device_type = {
+@@ -2368,7 +2363,6 @@ static struct lu_device_type ofd_device_type = {
  
  int __init ofd_init(void)
  {
@@ -1880,7 +1917,7 @@ index 6782e5d..1575972 100644
  	int				rc;
  
  	rc = lu_kmem_init(ofd_caches);
-@@ -2377,11 +2371,9 @@ int __init ofd_init(void)
+@@ -2381,11 +2375,9 @@ int __init ofd_init(void)
  		return(rc);
  	}
  
@@ -1894,10 +1931,10 @@ index 6782e5d..1575972 100644
  				LUSTRE_OST_NAME, &ofd_device_type);
  	return rc;
 diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index b22ceec..79dfaa9 100644
+index ab041ce..60cfb50 100644
 --- a/lustre/ofd/ofd_internal.h
 +++ b/lustre/ofd/ofd_internal.h
-@@ -390,13 +390,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
+@@ -392,13 +392,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
  
  /* lproc_ofd.c */
  #ifdef LPROCFS
@@ -1913,10 +1950,10 @@ index b22ceec..79dfaa9 100644
  #endif
  
 diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index 6f369d0..9027533 100644
+index a8022f0..4e1ec4a 100644
 --- a/lustre/osd-ldiskfs/osd_handler.c
 +++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5882,6 +5882,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+@@ -5892,6 +5892,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
  	osd->od_connects++;
  	spin_unlock(&osd->od_osfs_lock);
  
@@ -1925,10 +1962,10 @@ index 6f369d0..9027533 100644
  }
  
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 36bf6a4..40d2c67 100644
+index c9bf49a..bd2463a 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -813,6 +813,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+@@ -816,6 +816,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
  	osd->od_connects++;
  	spin_unlock(&osd->od_objset.lock);
  

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index a6a425b..c271eb7 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,4 +1,4 @@
-From 1013b4b997343de8530c4d4ef5380220d57f155a Mon Sep 17 00:00:00 2001
+From 9ab620dbc6aae86b9d39d97ba50912dc93b6e4e2 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 11:04:31 -0500
 Subject: [PATCH 08/12] LU-3319 procfs: move mdt/mds proc handling to seq_files
@@ -461,10 +461,10 @@ index 037bcbd..9bbcbd4 100644
  	{ 0 }
  };
 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 064fef1..c850356 100644
+index 17b7605..2b08be9 100644
 --- a/lustre/mdt/mdt_handler.c
 +++ b/lustre/mdt/mdt_handler.c
-@@ -4539,7 +4539,6 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4584,7 +4584,6 @@ static int mdt_process_config(const struct lu_env *env,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -472,7 +472,7 @@ index 064fef1..c850356 100644
  		struct obd_device	   *obd = d->ld_obd;
  
  		/* For interoperability */
-@@ -4574,14 +4573,13 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4619,14 +4618,13 @@ static int mdt_process_config(const struct lu_env *env,
  			}
  		}
  
@@ -492,7 +492,7 @@ index 064fef1..c850356 100644
  			if (rc > 0 || rc == -ENOSYS)
  				/* we don't understand; pass it on */
  				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5762,7 +5760,6 @@ static struct lu_device_type mdt_device_type = {
+@@ -5825,7 +5823,6 @@ static struct lu_device_type mdt_device_type = {
  
  static int __init mdt_mod_init(void)
  {
@@ -500,7 +500,7 @@ index 064fef1..c850356 100644
  	int rc;
  
  	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5777,10 +5774,9 @@ static int __init mdt_mod_init(void)
+@@ -5840,10 +5837,9 @@ static int __init mdt_mod_init(void)
  	if (rc)
  		GOTO(lu_fini, rc);
  
@@ -578,10 +578,10 @@ index 1300861..3125dcc 100644
  	RETURN(rc);
  }
 diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
-index d548988..e30d78d 100644
+index c3d4f7f..7b0381a 100644
 --- a/lustre/mdt/mdt_internal.h
 +++ b/lustre/mdt/mdt_internal.h
-@@ -784,9 +784,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
+@@ -787,9 +787,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
  void mdt_thread_info_fini(struct mdt_thread_info *mti);
  struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
  
@@ -591,7 +591,7 @@ index d548988..e30d78d 100644
  int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
  		     const struct md_hsm *mh);
  
-@@ -919,13 +916,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
+@@ -924,13 +921,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
  int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
  
  /* coordinator control /proc interface */
@@ -609,7 +609,7 @@ index d548988..e30d78d 100644
  /* md_hsm helpers */
  struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
  				      const struct lu_fid *fid,
-@@ -1065,8 +1061,6 @@ enum {
+@@ -1070,8 +1066,6 @@ enum {
  };
  void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
  void mdt_stats_counter_init(struct lprocfs_stats *stats);

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index 97b8e0e..7f9d4d7 100644
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,4 +1,4 @@
-From adf3be9fe382564c4760b83a5843b7d5502bbe48 Mon Sep 17 00:00:00 2001
+From 98a6eee60a100d445d7533eeba907e4e75c36f18 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 10:45:37 -0500
 Subject: [PATCH 09/12] LU-3319 procfs: update ldiskfs proc handling to
@@ -19,10 +19,10 @@ Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
  5 files changed, 220 insertions(+), 217 deletions(-)
 
 diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c
-index b4a018c..6ca1304 100644
+index e693e8d..3fb6783 100644
 --- a/lustre/osd-ldiskfs/osd_compat.c
 +++ b/lustre/osd-ldiskfs/osd_compat.c
-@@ -1168,7 +1168,7 @@ int osd_obj_spec_update(struct osd_thread_info *info, struct osd_device *osd,
+@@ -1164,7 +1164,7 @@ int osd_obj_spec_update(struct osd_thread_info *info, struct osd_device *osd,
  			handle_t *th)
  {
  	struct dentry	*root;
@@ -31,7 +31,7 @@ index b4a018c..6ca1304 100644
  	int		 rc;
  	ENTRY;
  
-@@ -1189,7 +1189,7 @@ int osd_obj_spec_insert(struct osd_thread_info *info, struct osd_device *osd,
+@@ -1185,7 +1185,7 @@ int osd_obj_spec_insert(struct osd_thread_info *info, struct osd_device *osd,
  			handle_t *th)
  {
  	struct dentry	*root;
@@ -40,7 +40,7 @@ index b4a018c..6ca1304 100644
  	int		 rc;
  	ENTRY;
  
-@@ -1211,7 +1211,7 @@ int osd_obj_spec_lookup(struct osd_thread_info *info, struct osd_device *osd,
+@@ -1207,7 +1207,7 @@ int osd_obj_spec_lookup(struct osd_thread_info *info, struct osd_device *osd,
  	struct dentry	*root;
  	struct dentry	*dentry;
  	struct inode	*inode;
@@ -50,10 +50,10 @@ index b4a018c..6ca1304 100644
  	ENTRY;
  
 diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index 9027533..dfaa542 100644
+index 4e1ec4a..1d9a2ba 100644
 --- a/lustre/osd-ldiskfs/osd_handler.c
 +++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5814,6 +5814,7 @@ static struct lu_device *osd_device_free(const struct lu_env *env,
+@@ -5824,6 +5824,7 @@ static struct lu_device *osd_device_free(const struct lu_env *env,
  static int osd_process_config(const struct lu_env *env,
                                struct lu_device *d, struct lustre_cfg *cfg)
  {
@@ -61,7 +61,7 @@ index 9027533..dfaa542 100644
  	struct osd_device		*o = osd_dev(d);
  	int				rc;
  	ENTRY;
-@@ -5828,12 +5829,12 @@ static int osd_process_config(const struct lu_env *env,
+@@ -5838,12 +5839,12 @@ static int osd_process_config(const struct lu_env *env,
  		break;
  	case LCFG_PARAM:
  		LASSERT(&o->od_dt_dev);
@@ -79,7 +79,7 @@ index 9027533..dfaa542 100644
  		break;
  	default:
  		rc = -ENOSYS;
-@@ -5981,9 +5982,10 @@ static int __init osd_mod_init(void)
+@@ -5991,9 +5992,10 @@ static int __init osd_mod_init(void)
  	if (rc)
  		return rc;
  
@@ -93,10 +93,10 @@ index 9027533..dfaa542 100644
  				LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h
-index 8436d1f..c90147f 100644
+index dc52885..7d54162 100644
 --- a/lustre/osd-ldiskfs/osd_internal.h
 +++ b/lustre/osd-ldiskfs/osd_internal.h
-@@ -623,8 +623,8 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
+@@ -616,8 +616,8 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
  
  #ifdef LPROCFS
  /* osd_lproc.c */
@@ -107,7 +107,7 @@ index 8436d1f..c90147f 100644
  int osd_procfs_init(struct osd_device *osd, const char *name);
  int osd_procfs_fini(struct osd_device *osd);
  void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf);
-@@ -679,7 +679,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
+@@ -672,7 +672,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
  		   int insert);
  int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid,
  		   struct osd_inode_id *id);
@@ -602,10 +602,10 @@ index b9b4e3d..947a4b9 100644
 +}
  #endif
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index cce33af..1002913 100644
+index e558163..b5b91c8 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -2578,80 +2578,69 @@ static const char *scrub_param_names[] = {
+@@ -2551,80 +2551,69 @@ static const char *scrub_param_names[] = {
  	NULL
  };
  
@@ -700,7 +700,7 @@ index cce33af..1002913 100644
  		      "name: OI_scrub\n"
  		      "magic: 0x%x\n"
  		      "oi_files: %d\n"
-@@ -2661,51 +2650,48 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2634,51 +2623,48 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	if (rc <= 0)
  		goto out;
  
@@ -761,7 +761,7 @@ index cce33af..1002913 100644
  		      "updated: "LPU64"\n"
  		      "failed: "LPU64"\n"
  		      "prior_updated: "LPU64"\n"
-@@ -2718,8 +2704,6 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2691,8 +2677,6 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	if (rc <= 0)
  		goto out;
  
@@ -770,7 +770,7 @@ index cce33af..1002913 100644
  	speed = checked;
  	if (thread_is_running(&scrub->os_thread)) {
  		cfs_duration_t duration = cfs_time_current() -
-@@ -2732,8 +2716,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2705,8 +2689,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -780,7 +780,7 @@ index cce33af..1002913 100644
  			      "average_speed: "LPU64" objects/sec\n"
  			      "real-time_speed: "LPU64" objects/sec\n"
  			      "current_position: %u\n"
-@@ -2746,8 +2729,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2719,8 +2702,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	} else {
  		if (sf->sf_run_time != 0)
  			do_div(speed, sf->sf_run_time);
@@ -790,7 +790,7 @@ index cce33af..1002913 100644
  			      "average_speed: "LPU64" objects/sec\n"
  			      "real-time_speed: N/A\n"
  			      "current_position: N/A\n"
-@@ -2759,10 +2741,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2732,10 +2714,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	}
  	if (rc <= 0)
  		goto out;

diff --git a/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch b/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
index 1eed584..b076a3a 100644
--- a/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
+++ b/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
@@ -1,4 +1,4 @@
-From cd81037fa6ecc7f6b36d3c49205a3d6f3e7aa0de Mon Sep 17 00:00:00 2001
+From 48d1258335516d5335567f11f5be91ceafbbac4e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 21 Jan 2014 12:06:59 -0500
 Subject: [PATCH 10/12] LU-3319 lprocfs: client side cleanups
@@ -251,10 +251,10 @@ index 648b6e5..f818def 100644
  };
  #endif /* LPROCFS */
 diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index f9cb944..abe5d71 100644
+index 5b72a5a..551f629 100644
 --- a/lustre/obdclass/lprocfs_status.c
 +++ b/lustre/obdclass/lprocfs_status.c
-@@ -2581,7 +2581,6 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
+@@ -2583,7 +2583,6 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
  EXPORT_SYMBOL(lprocfs_init_ldlm_stats);
  
  #ifdef HAVE_SERVER_SUPPORT
@@ -395,7 +395,7 @@ index b9d1b71..f95fb55 100644
  
  static int osc_process_config(struct obd_device *obd, obd_count len, void *buf)
 diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
-index d4da00d..d20a30f 100644
+index a39381f..d5458b2 100644
 --- a/lustre/ost/ost_handler.c
 +++ b/lustre/ost/ost_handler.c
 @@ -75,7 +75,8 @@ static struct cfs_cpt_table	*ost_io_cptable;

diff --git a/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
index 6f9b651..5b3983d 100644
--- a/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,4 +1,4 @@
-From 5d386e041277db90dc2dc8c890d0f90705e443a7 Mon Sep 17 00:00:00 2001
+From b3af9f9fde020df881b52b059a9e0d5d2c6ccfb9 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 20 Jan 2014 21:23:00 -0500
 Subject: [PATCH 11/12] LU-3974 llite: use new struct dir_context
@@ -61,7 +61,7 @@ index e6207c9..f44a277 100644
  	 LC_HAVE_DCOUNT
  
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index dc5d623..eb09ef8 100644
+index 6a1e3c5..05639f0 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
 @@ -195,9 +195,16 @@ struct lu_dirent *ll_dir_entry_next(struct inode *dir,
@@ -149,7 +149,7 @@ index dc5d623..eb09ef8 100644
  	ll_finish_md_op_data(op_data);
  	filp->f_version = inode->i_version;
  #ifdef HAVE_TOUCH_ATIME_1ARG
-@@ -1702,11 +1728,15 @@ int ll_dir_release(struct inode *inode, struct file *file)
+@@ -1809,11 +1835,15 @@ int ll_dir_release(struct inode *inode, struct file *file)
  }
  
  struct file_operations ll_dir_operations = {
@@ -173,10 +173,10 @@ index dc5d623..eb09ef8 100644
 +	.fsync		= ll_fsync,
  };
 diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 92b278e..c477b4c 100644
+index 59ecdfb..148f6fa 100644
 --- a/lustre/llite/llite_internal.h
 +++ b/lustre/llite/llite_internal.h
-@@ -91,9 +91,12 @@ extern struct file_operations ll_pgcache_seq_fops;
+@@ -92,9 +92,12 @@ extern struct file_operations ll_pgcache_seq_fops;
  #define REMOTE_PERM_HASHSIZE 16
  
  struct ll_getname_data {
@@ -192,7 +192,7 @@ index 92b278e..c477b4c 100644
  };
  
  /* llite setxid/access permission for user on remote client */
-@@ -719,8 +722,13 @@ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
+@@ -726,8 +729,13 @@ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
  /* llite/dir.c */
  extern struct file_operations ll_dir_operations;
  extern struct inode_operations ll_dir_inode_operations;
@@ -207,10 +207,10 @@ index 92b278e..c477b4c 100644
  
  struct lu_dirent *ll_dir_entry_start(struct inode *dir,
 diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
-index 68616e9..faad453 100644
+index f96d17e..713e846 100644
 --- a/lustre/llite/llite_nfs.c
 +++ b/lustre/llite/llite_nfs.c
-@@ -236,7 +236,14 @@ static int ll_get_name(struct dentry *dentry, char *name,
+@@ -230,7 +230,14 @@ static int ll_get_name(struct dentry *dentry, char *name,
                         struct dentry *child)
  {
  	struct inode *dir = dentry->d_inode;
@@ -226,7 +226,7 @@ index 68616e9..faad453 100644
  	struct md_op_data *op_data;
  	int rc;
  	ENTRY;
-@@ -247,10 +254,6 @@ static int ll_get_name(struct dentry *dentry, char *name,
+@@ -241,10 +248,6 @@ static int ll_get_name(struct dentry *dentry, char *name,
          if (!dir->i_fop)
                  GOTO(out, rc = -EINVAL);
  
@@ -237,7 +237,7 @@ index 68616e9..faad453 100644
  	op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
  				     LUSTRE_OPC_ANY, dir);
  	if (IS_ERR(op_data))
-@@ -260,7 +263,11 @@ static int ll_get_name(struct dentry *dentry, char *name,
+@@ -254,7 +257,11 @@ static int ll_get_name(struct dentry *dentry, char *name,
  	op_data->op_max_pages =
  		ll_i2sbi(dir)->ll_md_brw_size >> PAGE_CACHE_SHIFT;
  	mutex_lock(&dir->i_mutex);

diff --git a/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
index 21584ac..90e558e 100644
--- a/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,4 +1,4 @@
-From 9ade0a01cf77e4ec0cbe26cd38c9c32d727fa74e Mon Sep 17 00:00:00 2001
+From 95cacafafbc5bc0ec28bbf7898df28bb0f0295e6 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
 Subject: [PATCH 12/12] LU-3974 llite: invalidatepage api changed


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-02-12  6:56 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-02-12  6:56 UTC (permalink / raw
  To: gentoo-commits

commit:     61f39afcd42fb1cb16103b70dde2a62ba2e2553f
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 06:58:58 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Feb 12 06:58:58 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=61f39afc

Fix build v2

Package-Manager: portage-2.2.8-r1
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |  5 ++++
 ...-LU-3974-llite-use-new-struct-dir_context.patch | 35 ++++++++--------------
 ...-LU-3974-llite-invalidatepage-api-changed.patch |  2 +-
 3 files changed, 18 insertions(+), 24 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 5274002..9fefa38 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,11 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  12 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0011-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0012-LU-3974-llite-invalidatepage-api-changed.patch:
+  Fix build v2
+
   12 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Drop unneded patch v2
 

diff --git a/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
index c2ca771..6f9b651 100644
--- a/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,4 +1,4 @@
-From da6a877ec27753ce11499d1bde68d392f90179c4 Mon Sep 17 00:00:00 2001
+From 5d386e041277db90dc2dc8c890d0f90705e443a7 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 20 Jan 2014 21:23:00 -0500
 Subject: [PATCH 11/12] LU-3974 llite: use new struct dir_context
@@ -16,11 +16,11 @@ Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Ib42bf8cb06635a2a64e63b294d79e66ac82a1a5b
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- lustre/autoconf/lustre-core.m4 | 20 +++++++++++++
- lustre/llite/dir.c             | 65 ++++++++++++++++++++++++++++++++++--------
- lustre/llite/llite_internal.h  | 14 +++++++--
- lustre/llite/llite_nfs.c       | 17 +++++++----
- 4 files changed, 96 insertions(+), 20 deletions(-)
+ lustre/autoconf/lustre-core.m4 | 20 ++++++++++++++++
+ lustre/llite/dir.c             | 54 ++++++++++++++++++++++++++++++++----------
+ lustre/llite/llite_internal.h  | 14 ++++++++---
+ lustre/llite/llite_nfs.c       | 17 +++++++++----
+ 4 files changed, 85 insertions(+), 20 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
 index e6207c9..f44a277 100644
@@ -61,24 +61,13 @@ index e6207c9..f44a277 100644
  	 LC_HAVE_DCOUNT
  
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index dc5d623..5009934 100644
+index dc5d623..eb09ef8 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
-@@ -195,9 +195,27 @@ struct lu_dirent *ll_dir_entry_next(struct inode *dir,
+@@ -195,9 +195,16 @@ struct lu_dirent *ll_dir_entry_next(struct inode *dir,
  	return entry;
  }
  
-+void ll_dir_entry_end(struct inode *dir, struct md_op_data *op_data,
-+		      struct lu_dirent *ent)
-+{
-+	struct lu_dirent *entry;
-+	struct md_callback cb_op;
-+
-+	cb_op.md_blocking_ast = ll_md_blocking_ast;
-+	op_data->op_cli_flags = CLI_READENT_END;
-+	md_read_entry(ll_i2mdexp(dir), op_data, &cb_op, &entry);
-+	return;
-+}
 +
 +#ifdef HAVE_DIR_CONTEXT
 +int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
@@ -92,7 +81,7 @@ index dc5d623..5009934 100644
  	struct ll_sb_info	*sbi = ll_i2sbi(inode);
  	struct ll_dir_chain	chain;
  	struct lu_dirent	*ent;
-@@ -241,12 +259,17 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
+@@ -241,12 +248,17 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
  		fid_le_to_cpu(&fid, &ent->lde_fid);
  		ino = cl_fid_build_ino(&fid, api32);
  		type = ll_dirent_type_get(ent);
@@ -110,7 +99,7 @@ index dc5d623..5009934 100644
  		if (done) {
  			if (op_data->op_hash_offset != MDS_DIR_END_OFF)
  				op_data->op_hash_offset = last_hash;
-@@ -268,7 +291,11 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
+@@ -268,7 +280,11 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
  	RETURN(rc);
  }
  
@@ -122,7 +111,7 @@ index dc5d623..5009934 100644
  {
  	struct inode		*inode	= filp->f_dentry->d_inode;
  	struct ll_file_data	*lfd	= LUSTRE_FPRIVATE(filp);
-@@ -305,22 +332,32 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+@@ -305,22 +321,32 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
  
  	op_data->op_hash_offset = pos;
  	op_data->op_max_pages = sbi->ll_md_brw_size >> PAGE_CACHE_SHIFT;
@@ -160,7 +149,7 @@ index dc5d623..5009934 100644
  	ll_finish_md_op_data(op_data);
  	filp->f_version = inode->i_version;
  #ifdef HAVE_TOUCH_ATIME_1ARG
-@@ -1702,11 +1739,15 @@ int ll_dir_release(struct inode *inode, struct file *file)
+@@ -1702,11 +1728,15 @@ int ll_dir_release(struct inode *inode, struct file *file)
  }
  
  struct file_operations ll_dir_operations = {

diff --git a/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
index 63a3ec3..21584ac 100644
--- a/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,4 +1,4 @@
-From 4e78aa55c404914cdc2d01060fb73fc1b0a6b63e Mon Sep 17 00:00:00 2001
+From 9ade0a01cf77e4ec0cbe26cd38c9c32d727fa74e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
 Subject: [PATCH 12/12] LU-3974 llite: invalidatepage api changed


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-02-12  6:39 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-02-12  6:39 UTC (permalink / raw
  To: gentoo-commits

commit:     254e187c761ee0202bdd8d69475a412ee682de55
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 06:41:36 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Feb 12 06:41:36 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=254e187c

Drop unneded patch

Package-Manager: portage-2.2.8-r1
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       | 28 +++++++++++++++
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |  2 +-
 ...4-lfsck-old-single-OI-MDT-always-scrubbed.patch | 41 ----------------------
 ...fs-update-zfs-proc-handling-to-seq_files.patch} |  2 +-
 ...ocfs-move-mgs-proc-handling-to-seq_files.patch} |  2 +-
 ...0004-LU-3319-procfs-fix-symlink-handling.patch} |  2 +-
 ...ocfs-move-osp-proc-handling-to-seq_files.patch} |  2 +-
 ...ocfs-move-lod-proc-handling-to-seq_files.patch} |  2 +-
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} |  2 +-
 ...fs-move-mdt-mds-proc-handling-to-seq_fil.patch} |  2 +-
 ...fs-update-ldiskfs-proc-handling-to-seq_f.patch} |  2 +-
 ...010-LU-3319-lprocfs-client-side-cleanups.patch} |  2 +-
 ...LU-3974-llite-use-new-struct-dir_context.patch} |  2 +-
 ...LU-3974-llite-invalidatepage-api-changed.patch} |  2 +-
 14 files changed, 40 insertions(+), 53 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 53b8be5..dc604d0 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,34 @@
 # $Header: $
 
   12 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  +files/0004-LU-3319-procfs-fix-symlink-handling.patch,
+  +files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  +files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  +files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  +files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  +files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  +files/0010-LU-3319-lprocfs-client-side-cleanups.patch,
+  +files/0011-LU-3974-llite-use-new-struct-dir_context.patch,
+  +files/0012-LU-3974-llite-invalidatepage-api-changed.patch,
+  -files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch,
+  -files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  -files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  -files/0005-LU-3319-procfs-fix-symlink-handling.patch,
+  -files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  -files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  -files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  -files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  -files/0011-LU-3319-lprocfs-client-side-cleanups.patch,
+  -files/0012-LU-3974-llite-use-new-struct-dir_context.patch,
+  -files/0013-LU-3974-llite-invalidatepage-api-changed.patch:
+  Drop unneded patch
+
+  12 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch,
   +files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   +files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,

diff --git a/sys-cluster/lustre/files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 97%
rename from sys-cluster/lustre/files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index f6b0965..caa6587 100644
--- a/sys-cluster/lustre/files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From 247c87f4a981fd26bfaf219930193b1a35865736 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 02/13] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch b/sys-cluster/lustre/files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch
deleted file mode 100644
index 18ec7cf..0000000
--- a/sys-cluster/lustre/files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch
+++ /dev/null
@@ -1,41 +0,0 @@
-From 9e3436c298d65a5867920b0de0d3920972465407 Mon Sep 17 00:00:00 2001
-From: Ned Bass <bass6@llnl.gov>
-Date: Thu, 30 Jan 2014 14:56:20 -0800
-Subject: [PATCH 01/13] LU-4554 lfsck: old single-OI MDT always scrubbed
-
-Old ldiskfs MDT's that contain a single OI container named "oi.16"
-trigger an automatic OI scrub on each restart.  This is because
-osd_oi_table_open() gets ENOENT opening "oi.16.0" and consequently
-sets bit 0 in scrub_file::sf_oi_bitmap.  This bit indicates the OI
-container 0 needs to be recreated, and it triggers a scrub in
-osd_fid_lookup() for lookups that fail with ENOENT.  Fix this by
-clearing the bit in osd_oi_init() after a successful open of
-"oi.16".
-
-Signed-off-by: Ned Bass <bass6@llnl.gov>
-Change-Id: Ie69223d3f8289c90de46f9afe0a2de0e0625b0f6
-Reviewed-on: http://review.whamcloud.com/9067
-Tested-by: Jenkins
-Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
-Tested-by: Maloo <hpdd-maloo@intel.com>
-Reviewed-by: James Nunez <james.a.nunez@intel.com>
-Reviewed-by: Fan Yong <fan.yong@intel.com>
----
- lustre/osd-ldiskfs/osd_oi.c | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/lustre/osd-ldiskfs/osd_oi.c b/lustre/osd-ldiskfs/osd_oi.c
-index 6e690be..b4bfb9a 100644
---- a/lustre/osd-ldiskfs/osd_oi.c
-+++ b/lustre/osd-ldiskfs/osd_oi.c
-@@ -368,6 +368,7 @@ int osd_oi_init(struct osd_thread_info *info, struct osd_device *osd)
- 	/* if previous failed then try found single OI from old filesystem */
- 	rc = osd_oi_open(info, osd, OSD_OI_NAME_BASE, &oi[0], false);
- 	if (rc == 0) { /* found single OI from old filesystem */
-+		ldiskfs_clear_bit(0, sf->sf_oi_bitmap);
- 		if (sf->sf_success_count == 0)
- 			/* XXX: There is one corner case that if the OI_scrub
- 			 *	file crashed or lost and we regard it upgrade,
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
similarity index 99%
rename from sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index a93c92a..939f1fc 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From c05c0be01814527d8d3762963c7a6d4c28189d2d Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 3 Jan 2014 09:55:26 -0500
-Subject: [PATCH 03/13] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 02/12] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
similarity index 99%
rename from sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
index fe32411..756975e 100644
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From b262846027fbf96a5a80b81cfe86da53ce6e6f9f Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 3 Jan 2014 09:58:53 -0500
-Subject: [PATCH 04/13] LU-3319 procfs: move mgs proc handling to seq_files
+Subject: [PATCH 03/12] LU-3319 procfs: move mgs proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mgs

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
similarity index 99%
rename from sys-cluster/lustre/files/0005-LU-3319-procfs-fix-symlink-handling.patch
rename to sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
index 533c4d9..fc78c68 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-fix-symlink-handling.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-fix-symlink-handling.patch
@@ -1,7 +1,7 @@
 From 8f24a0e29b5f4b18193742c9aecd960c6b6102ff Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 09:37:44 -0500
-Subject: [PATCH 05/13] LU-3319 procfs: fix symlink handling
+Subject: [PATCH 04/12] LU-3319 procfs: fix symlink handling
 
 While working on symlink handling for seq files I noticed a
 long outstanding bug. Code was developed to link osc obds

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
similarity index 99%
rename from sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 0ff28fd..7734600 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From cfafe91ff9caf648f144c1a162112b7d1485aae4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 17:10:18 -0500
-Subject: [PATCH 06/13] LU-3319 procfs: move osp proc handling to seq_files
+Subject: [PATCH 05/12] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
similarity index 99%
rename from sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index dad3b48..1ca6b12 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
 From 82953bddbc3c7b9aa044d9eecc796bc12638f476 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 11:08:45 -0500
-Subject: [PATCH 07/13] LU-3319 procfs: move lod proc handling to seq_files
+Subject: [PATCH 06/12] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the lod

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 99%
rename from sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index 4019ae5..0e748e6 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
 From 2790709429e9aaf4b11fca12e3f2e9d70f6608ce Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 31 Jan 2014 14:00:32 -0500
-Subject: [PATCH 08/13] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 07/12] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
similarity index 99%
rename from sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index febec32..a6a425b 100644
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
 From 1013b4b997343de8530c4d4ef5380220d57f155a Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 11:04:31 -0500
-Subject: [PATCH 09/13] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Subject: [PATCH 08/12] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds

diff --git a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
similarity index 99%
rename from sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
rename to sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index 0be7f2a..97b8e0e 100644
--- a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,7 +1,7 @@
 From adf3be9fe382564c4760b83a5843b7d5502bbe48 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Sun, 9 Feb 2014 10:45:37 -0500
-Subject: [PATCH 10/13] LU-3319 procfs: update ldiskfs proc handling to
+Subject: [PATCH 09/12] LU-3319 procfs: update ldiskfs proc handling to
  seq_files
 
 Migrate all ldiskfs proc handling to using strictly

diff --git a/sys-cluster/lustre/files/0011-LU-3319-lprocfs-client-side-cleanups.patch b/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
similarity index 99%
rename from sys-cluster/lustre/files/0011-LU-3319-lprocfs-client-side-cleanups.patch
rename to sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
index b3ff994..1eed584 100644
--- a/sys-cluster/lustre/files/0011-LU-3319-lprocfs-client-side-cleanups.patch
+++ b/sys-cluster/lustre/files/0010-LU-3319-lprocfs-client-side-cleanups.patch
@@ -1,7 +1,7 @@
 From cd81037fa6ecc7f6b36d3c49205a3d6f3e7aa0de Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 21 Jan 2014 12:06:59 -0500
-Subject: [PATCH 11/13] LU-3319 lprocfs: client side cleanups
+Subject: [PATCH 10/12] LU-3319 lprocfs: client side cleanups
 
 Now that all the client side seq_file patches it is
 time to handle the issue that people pointed out but

diff --git a/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
similarity index 99%
rename from sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
rename to sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
index 7a5b843..c2ca771 100644
--- a/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0011-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,7 +1,7 @@
 From da6a877ec27753ce11499d1bde68d392f90179c4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 20 Jan 2014 21:23:00 -0500
-Subject: [PATCH 12/13] LU-3974 llite: use new struct dir_context
+Subject: [PATCH 11/12] LU-3974 llite: use new struct dir_context
 
 The readdir and nfs code over time has added more
 parameters to be passed to be processed. For the 3.11

diff --git a/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
similarity index 98%
rename from sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
rename to sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
index ccca806..63a3ec3 100644
--- a/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0012-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,7 +1,7 @@
 From 4e78aa55c404914cdc2d01060fb73fc1b0a6b63e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
-Subject: [PATCH 13/13] LU-3974 llite: invalidatepage api changed
+Subject: [PATCH 12/12] LU-3974 llite: invalidatepage api changed
 
 Until recently invalidating pages from the buffer cache
 was dependent only on the page passed in and the start


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-02-12  6:36 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-02-12  6:36 UTC (permalink / raw
  To: gentoo-commits

commit:     9e1a5a9a1156d8187bda078a639eeb057aa60536
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Feb 12 06:36:56 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Feb 12 06:38:00 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=9e1a5a9a

Update lustre patches

Package-Manager: portage-2.2.8-r1
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |  23 +++
 ...4-lfsck-old-single-OI-MDT-always-scrubbed.patch |  41 ++++++
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |   4 +-
 ...fs-update-zfs-proc-handling-to-seq_files.patch} |   4 +-
 ...rocfs-move-mgs-proc-handling-to-seq_files.patch |   2 +-
 ...0005-LU-3319-procfs-fix-symlink-handling.patch} |  85 ++++++-----
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |  13 +-
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |  15 +-
 ...fs-move-mdd-ofd-proc-handling-to-seq_fil.patch} | 157 +++++++++++----------
 ...fs-move-mdt-mds-proc-handling-to-seq_fil.patch} |  18 +--
 ...cfs-update-ldiskfs-proc-handling-to-seq_f.patch |  21 ++-
 ...011-LU-3319-lprocfs-client-side-cleanups.patch} |   8 +-
 ...73-osd-ldiskfs-readdir-replace-by-iterate.patch | 140 ------------------
 ...-LU-3974-llite-use-new-struct-dir_context.patch |   9 +-
 ...-LU-3974-llite-invalidatepage-api-changed.patch |   4 +-
 sys-cluster/lustre/lustre-9999.ebuild              |  14 +-
 16 files changed, 254 insertions(+), 304 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index e5fdda4..53b8be5 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,29 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  12 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch,
+  +files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0005-LU-3319-procfs-fix-symlink-handling.patch,
+  +files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  +files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  +files/0011-LU-3319-lprocfs-client-side-cleanups.patch,
+  -files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0002-LU-3319-lprocfs-client-side-cleanups.patch,
+  -files/0003-LU-3319-procfs-fix-symlink-handling.patch,
+  -files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  -files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  -files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  -files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch,
+  files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  files/0012-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0013-LU-3974-llite-invalidatepage-api-changed.patch, lustre-9999.ebuild:
+  Update lustre patches
+
   04 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0002-LU-3319-lprocfs-client-side-cleanups.patch,
   +files/0003-LU-3319-procfs-fix-symlink-handling.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch b/sys-cluster/lustre/files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch
new file mode 100644
index 0000000..18ec7cf
--- /dev/null
+++ b/sys-cluster/lustre/files/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch
@@ -0,0 +1,41 @@
+From 9e3436c298d65a5867920b0de0d3920972465407 Mon Sep 17 00:00:00 2001
+From: Ned Bass <bass6@llnl.gov>
+Date: Thu, 30 Jan 2014 14:56:20 -0800
+Subject: [PATCH 01/13] LU-4554 lfsck: old single-OI MDT always scrubbed
+
+Old ldiskfs MDT's that contain a single OI container named "oi.16"
+trigger an automatic OI scrub on each restart.  This is because
+osd_oi_table_open() gets ENOENT opening "oi.16.0" and consequently
+sets bit 0 in scrub_file::sf_oi_bitmap.  This bit indicates the OI
+container 0 needs to be recreated, and it triggers a scrub in
+osd_fid_lookup() for lookups that fail with ENOENT.  Fix this by
+clearing the bit in osd_oi_init() after a successful open of
+"oi.16".
+
+Signed-off-by: Ned Bass <bass6@llnl.gov>
+Change-Id: Ie69223d3f8289c90de46f9afe0a2de0e0625b0f6
+Reviewed-on: http://review.whamcloud.com/9067
+Tested-by: Jenkins
+Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
+Tested-by: Maloo <hpdd-maloo@intel.com>
+Reviewed-by: James Nunez <james.a.nunez@intel.com>
+Reviewed-by: Fan Yong <fan.yong@intel.com>
+---
+ lustre/osd-ldiskfs/osd_oi.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lustre/osd-ldiskfs/osd_oi.c b/lustre/osd-ldiskfs/osd_oi.c
+index 6e690be..b4bfb9a 100644
+--- a/lustre/osd-ldiskfs/osd_oi.c
++++ b/lustre/osd-ldiskfs/osd_oi.c
+@@ -368,6 +368,7 @@ int osd_oi_init(struct osd_thread_info *info, struct osd_device *osd)
+ 	/* if previous failed then try found single OI from old filesystem */
+ 	rc = osd_oi_open(info, osd, OSD_OI_NAME_BASE, &oi[0], false);
+ 	if (rc == 0) { /* found single OI from old filesystem */
++		ldiskfs_clear_bit(0, sf->sf_oi_bitmap);
+ 		if (sf->sf_success_count == 0)
+ 			/* XXX: There is one corner case that if the OI_scrub
+ 			 *	file crashed or lost and we regard it upgrade,
+-- 
+1.8.5.3
+

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 95%
rename from sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index eaec9aa..f6b0965 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From 03643a33bd4d6a6fc3f8412f3e5f7f9a4bbd445b Mon Sep 17 00:00:00 2001
+From 247c87f4a981fd26bfaf219930193b1a35865736 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/13] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 02/13] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
similarity index 98%
rename from sys-cluster/lustre/files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index 4d11be8..a93c92a 100644
--- a/sys-cluster/lustre/files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From 3c08f9d074a2f89f71f41c8a99272706ad4450ea Mon Sep 17 00:00:00 2001
+From c05c0be01814527d8d3762963c7a6d4c28189d2d Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 3 Jan 2014 09:55:26 -0500
-Subject: [PATCH 05/13] LU-3319 procfs: update zfs proc handling to seq_files
+Subject: [PATCH 03/13] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 

diff --git a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
index dd5e377..fe32411 100644
--- a/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From 223f07785cbb8d28ef563bfba382b101a064a928 Mon Sep 17 00:00:00 2001
+From b262846027fbf96a5a80b81cfe86da53ce6e6f9f Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 3 Jan 2014 09:58:53 -0500
 Subject: [PATCH 04/13] LU-3319 procfs: move mgs proc handling to seq_files

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-fix-symlink-handling.patch
similarity index 84%
rename from sys-cluster/lustre/files/0003-LU-3319-procfs-fix-symlink-handling.patch
rename to sys-cluster/lustre/files/0005-LU-3319-procfs-fix-symlink-handling.patch
index 8d1a0df..533c4d9 100644
--- a/sys-cluster/lustre/files/0003-LU-3319-procfs-fix-symlink-handling.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-fix-symlink-handling.patch
@@ -1,7 +1,7 @@
-From ce693d2759e274a114a668e477264d1af8181159 Mon Sep 17 00:00:00 2001
+From 8f24a0e29b5f4b18193742c9aecd960c6b6102ff Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 31 Jan 2014 11:37:53 -0500
-Subject: [PATCH 03/13] LU-3319 procfs: fix symlink handling
+Date: Sun, 9 Feb 2014 09:37:44 -0500
+Subject: [PATCH 05/13] LU-3319 procfs: fix symlink handling
 
 While working on symlink handling for seq files I noticed a
 long outstanding bug. Code was developed to link osc obds
@@ -17,11 +17,11 @@ only happens once.
 Change-Id: Ib158ec4444ed7abc0f3c3e820ee4a333631a58d1
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 ---
- lustre/include/obd.h     |  17 ++++----
- lustre/lmv/lmv_obd.c     |  49 +++++++++--------------
- lustre/lov/lov_obd.c     | 100 +++++++++++++++++++++++++++--------------------
- lustre/obdclass/genops.c |   3 ++
- 4 files changed, 87 insertions(+), 82 deletions(-)
+ lustre/include/obd.h     | 17 +++++----
+ lustre/lmv/lmv_obd.c     | 48 ++++++++---------------
+ lustre/lov/lov_obd.c     | 99 +++++++++++++++++++++++++++---------------------
+ lustre/obdclass/genops.c | 17 +++++----
+ 4 files changed, 91 insertions(+), 90 deletions(-)
 
 diff --git a/lustre/include/obd.h b/lustre/include/obd.h
 index c18052b..8fd2ce7 100644
@@ -59,7 +59,7 @@ index c18052b..8fd2ce7 100644
  	struct lprocfs_stats	*obd_svc_stats;
  	struct lprocfs_seq_vars	*obd_vars;
 diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
-index e0941c9..7e1738e 100644
+index e0941c9..93db311 100644
 --- a/lustre/lmv/lmv_obd.c
 +++ b/lustre/lmv/lmv_obd.c
 @@ -242,9 +242,6 @@ static int lmv_connect(const struct lu_env *env,
@@ -97,20 +97,20 @@ index e0941c9..7e1738e 100644
  	}
  #endif
  
-@@ -302,9 +296,9 @@ static int lmv_connect(const struct lu_env *env,
+@@ -302,10 +296,8 @@ static int lmv_connect(const struct lu_env *env,
                  rc = lmv_check_connect(obd);
  
  #ifdef __KERNEL__
 -	if (rc && lmv_proc_dir) {
 -		lprocfs_remove(&lmv_proc_dir);
 -		obd->obd_proc_private = NULL;
-+	if (rc && obd->obd_type->typ_procsym != NULL) {
+-	}
++	if (rc && obd->obd_type->typ_procsym != NULL)
 +		lprocfs_remove(&obd->obd_type->typ_procsym);
-+		obd->obd_type->typ_procsym = NULL;
- 	}
  #endif
          RETURN(rc);
-@@ -384,9 +378,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
+ }
+@@ -384,9 +376,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
  
  int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
  {
@@ -120,7 +120,7 @@ index e0941c9..7e1738e 100644
          struct lmv_obd          *lmv = &obd->u.lmv;
          struct obd_uuid         *cluuid = &lmv->cluuid;
          struct obd_uuid          lmv_mdc_uuid = { "LMV_MDC_UUID" };
-@@ -466,14 +457,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+@@ -466,14 +455,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
                  cfs_atomic_read(&obd->obd_refcount));
  
  #ifdef __KERNEL__
@@ -137,18 +137,17 @@ index e0941c9..7e1738e 100644
  						  "../../../%s/%s",
  						  mdc_obd->obd_type->typ_name,
  						  mdc_obd->obd_name);
-@@ -482,8 +472,8 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+@@ -482,8 +470,7 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
  			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
  			       obd->obd_type->typ_name, obd->obd_name,
  			       mdc_obd->obd_name);
 -			lprocfs_remove(&lmv_proc_dir);
 -			obd->obd_proc_private = NULL;
 +			lprocfs_remove(&obd->obd_type->typ_procsym);
-+			obd->obd_type->typ_procsym = NULL;
  		}
  	}
  #endif
-@@ -675,9 +665,6 @@ int lmv_check_connect(struct obd_device *obd)
+@@ -675,9 +662,6 @@ int lmv_check_connect(struct obd_device *obd)
  
  static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
  {
@@ -158,7 +157,7 @@ index e0941c9..7e1738e 100644
          struct lmv_obd         *lmv = &obd->u.lmv;
          struct obd_device      *mdc_obd;
          int                     rc;
-@@ -695,9 +682,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+@@ -695,9 +679,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
          }
  
  #ifdef __KERNEL__
@@ -171,7 +170,7 @@ index e0941c9..7e1738e 100644
  #endif
  	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
  	if (rc)
-@@ -747,8 +734,8 @@ static int lmv_disconnect(struct obd_export *exp)
+@@ -747,8 +731,8 @@ static int lmv_disconnect(struct obd_export *exp)
          }
  
  #ifdef __KERNEL__
@@ -183,7 +182,7 @@ index e0941c9..7e1738e 100644
  		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
  		       obd->obd_type->typ_name, obd->obd_name);
 diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c
-index 286cd15..b52a263 100644
+index 286cd15..a3310fd 100644
 --- a/lustre/lov/lov_obd.c
 +++ b/lustre/lov/lov_obd.c
 @@ -127,19 +127,16 @@ static int lov_notify(struct obd_device *obd, struct obd_device *watched,
@@ -215,7 +214,7 @@ index 286cd15..b52a263 100644
  
          tgt_uuid = &lov->lov_tgts[index]->ltd_uuid;
          tgt_obd = lov->lov_tgts[index]->ltd_obd;
-@@ -195,27 +192,26 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
+@@ -195,27 +192,25 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
                 obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in");
  
  #ifdef __KERNEL__
@@ -257,11 +256,10 @@ index 286cd15..b52a263 100644
 +			       obd->obd_type->typ_name, obd->obd_name,
 +			       osc_obd->obd_name);
 +			lprocfs_remove(&obd->obd_type->typ_procsym);
-+			obd->obd_type->typ_procsym = NULL;
                  }
          }
  #endif
-@@ -250,6 +246,17 @@ static int lov_connect(const struct lu_env *env,
+@@ -250,6 +245,17 @@ static int lov_connect(const struct lu_env *env,
          if (data)
                  lov->lov_ocd = *data;
  
@@ -279,7 +277,7 @@ index 286cd15..b52a263 100644
          obd_getref(obd);
          for (i = 0; i < lov->desc.ld_tgt_count; i++) {
                  tgt = lov->lov_tgts[i];
-@@ -280,7 +287,6 @@ static int lov_connect(const struct lu_env *env,
+@@ -280,7 +286,6 @@ static int lov_connect(const struct lu_env *env,
  
  static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
  {
@@ -287,7 +285,7 @@ index 286cd15..b52a263 100644
          struct lov_obd *lov = &obd->u.lov;
          struct obd_device *osc_obd;
          int rc;
-@@ -296,18 +302,18 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
+@@ -296,18 +301,18 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
                  tgt->ltd_exp->exp_obd->obd_inactive = 1;
          }
  
@@ -317,7 +315,7 @@ index 286cd15..b52a263 100644
          }
  
          obd_register_observer(osc_obd, NULL);
-@@ -353,6 +359,14 @@ static int lov_disconnect(struct obd_export *exp)
+@@ -353,6 +358,14 @@ static int lov_disconnect(struct obd_export *exp)
          }
          obd_putref(obd);
  
@@ -333,17 +331,32 @@ index 286cd15..b52a263 100644
          rc = class_disconnect(exp); /* bz 9811 */
          RETURN(rc);
 diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index c9d8a4e..b9606bb 100644
+index c9d8a4e..a4a981c 100644
 --- a/lustre/obdclass/genops.c
 +++ b/lustre/obdclass/genops.c
-@@ -220,6 +220,7 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
- 		type->typ_procroot = NULL;
- 		GOTO (failed, rc);
- 	}
-+	type->typ_procsym = NULL;
- #endif
-         if (ldt != NULL) {
-                 type->typ_lu = ldt;
+@@ -181,14 +181,15 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
+                 RETURN(-EEXIST);
+         }
+ 
+-        rc = -ENOMEM;
+-        OBD_ALLOC(type, sizeof(*type));
+-        if (type == NULL)
+-                RETURN(rc);
++	rc = -ENOMEM;
++	OBD_ALLOC(type, sizeof(*type));
++	if (type == NULL)
++		RETURN(rc);
++	memset(type, 0, sizeof(*type));
+ 
+-        OBD_ALLOC_PTR(type->typ_dt_ops);
+-        OBD_ALLOC_PTR(type->typ_md_ops);
+-        OBD_ALLOC(type->typ_name, strlen(name) + 1);
++	OBD_ALLOC_PTR(type->typ_dt_ops);
++	OBD_ALLOC_PTR(type->typ_md_ops);
++	OBD_ALLOC(type->typ_name, strlen(name) + 1);
+ 
+         if (type->typ_dt_ops == NULL ||
+             type->typ_md_ops == NULL ||
 @@ -242,6 +243,8 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
          if (type->typ_dt_ops != NULL)
                  OBD_FREE_PTR(type->typ_dt_ops);

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 4189564..0ff28fd 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,6 +1,6 @@
-From 0af5f0dce053b1623b18bec48731d20c0a80b7b5 Mon Sep 17 00:00:00 2001
+From cfafe91ff9caf648f144c1a162112b7d1485aae4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 31 Jan 2014 12:50:59 -0500
+Date: Sun, 9 Feb 2014 17:10:18 -0500
 Subject: [PATCH 06/13] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
@@ -10,14 +10,14 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
 ---
- lustre/osp/lproc_osp.c    | 374 ++++++++++++++++++++++++----------------------
+ lustre/osp/lproc_osp.c    | 373 ++++++++++++++++++++++++----------------------
  lustre/osp/lwp_dev.c      |  18 +--
  lustre/osp/osp_dev.c      |  48 +++---
  lustre/osp/osp_internal.h |   2 -
- 4 files changed, 223 insertions(+), 219 deletions(-)
+ 4 files changed, 222 insertions(+), 219 deletions(-)
 
 diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c
-index 75ebeb1..3dc5ec7 100644
+index 75ebeb1..1ec40fc 100644
 --- a/lustre/osp/lproc_osp.c
 +++ b/lustre/osp/lproc_osp.c
 @@ -45,24 +45,23 @@
@@ -574,7 +574,7 @@ index 75ebeb1..3dc5ec7 100644
  					       obd->obd_type->typ_procroot,
  					       lprocfs_osp_osd_vars,
  					       &osp->opd_dt_dev);
-@@ -502,34 +528,30 @@ void osp_lprocfs_init(struct osp_device *osp)
+@@ -502,34 +528,29 @@ void osp_lprocfs_init(struct osp_device *osp)
  		return;
  	}
  
@@ -618,7 +618,6 @@ index 75ebeb1..3dc5ec7 100644
 +		CERROR("could not register OSC symlink for "
 +			"/proc/fs/lustre/osp/%s.", obd->obd_name);
 +		lprocfs_remove(&obd->obd_type->typ_procsym);
-+		obd->obd_type->typ_procsym = NULL;
 +	} else {
 +		osp->opd_symlink = symlink;
  	}

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index 3aad32c..dad3b48 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,6 +1,6 @@
-From 9260e5e777af25ebc1a94113ede31667c5f10e97 Mon Sep 17 00:00:00 2001
+From 82953bddbc3c7b9aa044d9eecc796bc12638f476 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 31 Jan 2014 12:46:28 -0500
+Date: Sun, 9 Feb 2014 11:08:45 -0500
 Subject: [PATCH 07/13] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
@@ -13,8 +13,8 @@ Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
  lustre/lod/lod_dev.c      |  39 ++++---
  lustre/lod/lod_internal.h |   1 -
  lustre/lod/lod_pool.c     |   7 +-
- lustre/lod/lproc_lod.c    | 252 ++++++++++++++++++++++++----------------------
- 4 files changed, 153 insertions(+), 146 deletions(-)
+ lustre/lod/lproc_lod.c    | 251 ++++++++++++++++++++++++----------------------
+ 4 files changed, 152 insertions(+), 146 deletions(-)
 
 diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
 index 02a1e1e..b0ad1fd 100644
@@ -133,7 +133,7 @@ index 98b2416..1849e5d 100644
  						       &pool_proc_operations);
  	if (IS_ERR(new_pool->pool_proc_entry)) {
 diff --git a/lustre/lod/lproc_lod.c b/lustre/lod/lproc_lod.c
-index e976063..6e20b36 100644
+index e976063..e420a5e 100644
 --- a/lustre/lod/lproc_lod.c
 +++ b/lustre/lod/lproc_lod.c
 @@ -42,23 +42,22 @@
@@ -556,7 +556,7 @@ index e976063..6e20b36 100644
  	if (IS_ERR(lod->lod_pool_proc_entry)) {
  		rc = PTR_ERR(lod->lod_pool_proc_entry);
  		lod->lod_pool_proc_entry = NULL;
-@@ -514,14 +514,19 @@ int lod_procfs_init(struct lod_device *lod)
+@@ -514,14 +514,18 @@ int lod_procfs_init(struct lod_device *lod)
  		GOTO(out, rc);
  	}
  
@@ -577,13 +577,12 @@ index e976063..6e20b36 100644
 +			CERROR("could not register LOV symlink for "
 +				"/proc/fs/lustre/lod/%s.", obd->obd_name);
 +			lprocfs_remove(&obd->obd_type->typ_procsym);
-+			obd->obd_type->typ_procsym = NULL;
 +		}
 +	}
  	RETURN(0);
  
  out:
-@@ -542,6 +547,9 @@ void lod_procfs_fini(struct lod_device *lod)
+@@ -542,6 +546,9 @@ void lod_procfs_fini(struct lod_device *lod)
  		lod->lod_pool_proc_entry = NULL;
  	}
  

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
similarity index 96%
rename from sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
index e289134..4019ae5 100644
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -1,14 +1,18 @@
-From 075cf04c212e2bf0f38c94433a80bca2e5bb051e Mon Sep 17 00:00:00 2001
+From 2790709429e9aaf4b11fca12e3f2e9d70f6608ce Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Fri, 31 Jan 2014 14:00:32 -0500
-Subject: [PATCH 09/13] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+Subject: [PATCH 08/13] LU-3319 procfs: move mdd/ofd proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdd/ofd
 layer proc entries over to using seq_files.
 
+Conflicts:
+	lustre/mdd/mdd_lproc.c
+
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
  lustre/include/lustre_lfsck.h    |   6 +-
  lustre/lfsck/lfsck_internal.h    |   9 +-
@@ -17,14 +21,14 @@ Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
  lustre/lfsck/lfsck_namespace.c   |  75 ++-----
  lustre/mdd/mdd_device.c          |  25 +--
  lustre/mdd/mdd_internal.h        |   1 -
- lustre/mdd/mdd_lproc.c           | 293 ++++++++++++--------------
+ lustre/mdd/mdd_lproc.c           | 300 ++++++++++++---------------
  lustre/obdclass/lprocfs_status.c |   9 +-
  lustre/ofd/lproc_ofd.c           | 436 ++++++++++++++++++++-------------------
  lustre/ofd/ofd_dev.c             |  48 ++---
  lustre/ofd/ofd_internal.h        |   6 +-
  lustre/osd-ldiskfs/osd_handler.c |   1 +
  lustre/osd-zfs/osd_handler.c     |   1 +
- 14 files changed, 463 insertions(+), 590 deletions(-)
+ 14 files changed, 462 insertions(+), 598 deletions(-)
 
 diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
 index 2e93420..0e578ac 100644
@@ -46,7 +50,7 @@ index 2e93420..0e578ac 100644
  
  #endif /* _LUSTRE_LFSCK_H */
 diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
-index 698fb5f..1893ccc 100644
+index 01d3c60..fb98cf2 100644
 --- a/lustre/lfsck/lfsck_internal.h
 +++ b/lustre/lfsck/lfsck_internal.h
 @@ -288,8 +288,7 @@ struct lfsck_operations {
@@ -59,7 +63,7 @@ index 698fb5f..1893ccc 100644
  
  	int (*lfsck_double_scan)(const struct lu_env *env,
  				 struct lfsck_component *com);
-@@ -539,10 +538,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
+@@ -546,10 +545,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
  			     struct lfsck_component *com);
  void lfsck_instance_cleanup(const struct lu_env *env,
  			    struct lfsck_instance *lfsck);
@@ -74,10 +78,10 @@ index 698fb5f..1893ccc 100644
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
  		    struct lfsck_position *pos, bool init);
 diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
-index e7c12d2..8b9c43e 100644
+index bdcd4c4..1295764 100644
 --- a/lustre/lfsck/lfsck_layout.c
 +++ b/lustre/lfsck/lfsck_layout.c
-@@ -2024,69 +2024,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
+@@ -2249,69 +2249,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
  }
  
  static int lfsck_layout_dump(const struct lu_env *env,
@@ -156,7 +160,7 @@ index e7c12d2..8b9c43e 100644
  		      "repaired_dangling: "LPU64"\n"
  		      "repaired_unmatched_pair: "LPU64"\n"
  		      "repaired_multiple_referenced: "LPU64"\n"
-@@ -2106,11 +2090,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -2331,11 +2315,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		      lo->ll_objs_skipped,
  		      lo->ll_objs_failed_phase1,
  		      lo->ll_objs_failed_phase2);
@@ -168,7 +172,7 @@ index e7c12d2..8b9c43e 100644
  
  	if (lo->ll_status == LS_SCANNING_PHASE1) {
  		__u64 pos;
-@@ -2127,8 +2106,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -2352,8 +2331,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -178,7 +182,7 @@ index e7c12d2..8b9c43e 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -2142,11 +2120,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -2367,11 +2345,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed,
  			      new_checked);
@@ -190,7 +194,7 @@ index e7c12d2..8b9c43e 100644
  
  		LASSERT(lfsck->li_di_oit != NULL);
  
-@@ -2159,12 +2132,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -2384,12 +2357,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  		pos = iops->store(env, lfsck->li_di_oit);
  		if (!lfsck->li_current_oit_processed)
  			pos--;
@@ -204,7 +208,7 @@ index e7c12d2..8b9c43e 100644
  	} else {
  		/* XXX: LS_SCANNING_PHASE2 will be handled in the future. */
  		__u64 speed1 = lo->ll_objs_checked_phase1;
-@@ -2174,8 +2142,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -2399,8 +2367,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			do_div(speed1, lo->ll_run_time_phase1);
  		if (lo->ll_run_time_phase2 != 0)
  			do_div(speed2, lo->ll_run_time_phase2);
@@ -214,7 +218,7 @@ index e7c12d2..8b9c43e 100644
  			      "checked_phase2: "LPU64"\n"
  			      "run_time_phase1: %u seconds\n"
  			      "run_time_phase2: %u seconds\n"
-@@ -2190,18 +2157,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
+@@ -2415,18 +2382,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
  			      lo->ll_run_time_phase2,
  			      speed1,
  			      speed2);
@@ -235,10 +239,10 @@ index e7c12d2..8b9c43e 100644
  
  static int lfsck_layout_master_double_scan(const struct lu_env *env,
 diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index ad92e32..747e376 100644
+index 3eb3a02..b949b8d 100644
 --- a/lustre/lfsck/lfsck_lib.c
 +++ b/lustre/lfsck/lfsck_lib.c
-@@ -424,77 +424,52 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
+@@ -425,77 +425,52 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
  	return 0;
  }
  
@@ -335,7 +339,7 @@ index ad92e32..747e376 100644
  }
  
  void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -1102,7 +1077,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+@@ -1104,7 +1079,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
  
  /* external interfaces */
  
@@ -344,7 +348,7 @@ index ad92e32..747e376 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1115,8 +1090,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+@@ -1117,8 +1092,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -354,7 +358,7 @@ index ad92e32..747e376 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENODEV;
-@@ -1156,7 +1130,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
+@@ -1158,7 +1132,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_speed);
  
@@ -363,7 +367,7 @@ index ad92e32..747e376 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1169,8 +1143,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
+@@ -1171,8 +1145,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
  
  	lfsck = lfsck_instance_find(key, true, false);
  	if (likely(lfsck != NULL)) {
@@ -373,7 +377,7 @@ index ad92e32..747e376 100644
  		lfsck_instance_put(&env, lfsck);
  	} else {
  		rc = -ENODEV;
-@@ -1220,7 +1193,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
+@@ -1222,7 +1195,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
  }
  EXPORT_SYMBOL(lfsck_set_windows);
  
@@ -382,7 +386,7 @@ index ad92e32..747e376 100644
  {
  	struct lu_env		env;
  	struct lfsck_instance  *lfsck;
-@@ -1236,7 +1209,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
+@@ -1238,7 +1211,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
  	if (likely(lfsck != NULL)) {
  		com = lfsck_component_find(lfsck, type);
  		if (likely(com != NULL)) {
@@ -627,7 +631,7 @@ index daa1dcb..5332b2c 100644
  int mdd_procfs_fini(struct mdd_device *mdd);
  
 diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
-index 2573e33..e20324c 100644
+index de379b3..5714ee6 100644
 --- a/lustre/mdd/mdd_lproc.c
 +++ b/lustre/mdd/mdd_lproc.c
 @@ -49,56 +49,14 @@
@@ -635,10 +639,7 @@ index 2573e33..e20324c 100644
  #include "mdd_internal.h"
  
 -int mdd_procfs_init(struct mdd_device *mdd, const char *name)
-+static ssize_t
-+mdd_atime_diff_seq_write(struct file *file, const char *buffer,
-+			 size_t count, loff_t *off)
- {
+-{
 -        struct lprocfs_static_vars lvars;
 -        struct obd_type     *type;
 -        int                  rc;
@@ -673,7 +674,10 @@ index 2573e33..e20324c 100644
 -}
 -
 -int mdd_procfs_fini(struct mdd_device *mdd)
--{
++static ssize_t
++mdd_atime_diff_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
 -        if (mdd->mdd_proc_entry) {
 -                 lprocfs_remove(&mdd->mdd_proc_entry);
 -                 mdd->mdd_proc_entry = NULL;
@@ -770,21 +774,21 @@ index 2573e33..e20324c 100644
  {
 -        struct llog_changelog_user_rec *rec;
 -        struct cucb_data *cucb = (struct cucb_data *)data;
--
--        LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
 +	struct llog_changelog_user_rec *rec;
 +	struct seq_file *m = data;
  
--        rec = (struct llog_changelog_user_rec *)hdr;
+-        LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
 +	LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
  
+-        rec = (struct llog_changelog_user_rec *)hdr;
++	rec = (struct llog_changelog_user_rec *)hdr;
+ 
 -        cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx,
 -                              CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
 -                              rec->cur_id, rec->cur_endrec);
 -        if (cucb->idx >= cucb->count)
 -                return -ENOSPC;
-+	rec = (struct llog_changelog_user_rec *)hdr;
- 
+-
 -        return 0;
 +	seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
 +		   rec->cur_id, rec->cur_endrec);
@@ -860,7 +864,7 @@ index 2573e33..e20324c 100644
          int val, rc;
  
          LASSERT(mdd != NULL);
-@@ -264,24 +202,22 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
+@@ -264,22 +202,22 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
          mdd->mdd_sync_permission = !!val;
          return count;
  }
@@ -871,14 +875,12 @@ index 2573e33..e20324c 100644
 +static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
  {
 -	struct mdd_device *mdd = data;
--	int rc;
 +	struct mdd_device *mdd = m->private;
  
  	LASSERT(mdd != NULL);
 -	*eof = 1;
 -
--	rc = lfsck_get_speed(mdd->mdd_bottom, page, count);
--	return rc != 0 ? rc : count;
+-	return lfsck_get_speed(mdd->mdd_bottom, page, count);
 +	return lfsck_get_speed(m, mdd->mdd_bottom);
  }
  
@@ -894,7 +896,7 @@ index 2573e33..e20324c 100644
  	__u32 val;
  	int rc;
  
-@@ -293,25 +229,22 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+@@ -291,25 +229,22 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
  	rc = lfsck_set_speed(mdd->mdd_bottom, val);
  	return rc != 0 ? rc : count;
  }
@@ -929,7 +931,7 @@ index 2573e33..e20324c 100644
  	__u32		   val;
  	int		   rc;
  
-@@ -322,42 +255,76 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
+@@ -320,54 +255,77 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
  
  	return rc != 0 ? rc : count;
  }
@@ -950,18 +952,11 @@ index 2573e33..e20324c 100644
 -	return rc;
 +	return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
  }
--
--static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
--        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
--        { "changelog_mask",  lprocfs_rd_changelog_mask,
--                             lprocfs_wr_changelog_mask, 0 },
--        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
--        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
--	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
--			       lprocfs_wr_lfsck_speed_limit, 0 },
--	{ "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
--				 lprocfs_wr_lfsck_async_windows, 0 },
--	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
+ 
+-static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
+-{
+-	struct mdd_device *mdd = data;
 +LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
 +
 +static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
@@ -979,28 +974,38 @@ index 2573e33..e20324c 100644
 +	  .fops	=	&mdd_lfsck_async_windows_fops	},
 +	{ .name =       "lfsck_namespace",
 +	  .fops =       &mdd_lfsck_namespace_fops       },
- 	{ 0 }
- };
++	{ 0 }
++};
  
--static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
--        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
--        { 0 }
--};
--
--void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
+-	LASSERT(mdd != NULL);
+-	*eof = 1;
 +int mdd_procfs_init(struct mdd_device *mdd, const char *name)
- {
--        lvars->module_vars  = lprocfs_mdd_module_vars;
--        lvars->obd_vars     = lprocfs_mdd_obd_vars;
++{
 +	struct obd_device *obd = class_name2obd(name);
 +	struct obd_type   *type;
 +	int		   rc;
 +	ENTRY;
-+
+ 
+-	return lfsck_dump(mdd->mdd_bottom, page, count, LT_LAYOUT);
+-}
 +	/* at the moment there is no linkage between lu_type
 +	 * and obd_type, so we lookup obd_type this way */
 +	type = class_search_type(LUSTRE_MDD_NAME);
-+
+ 
+-static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
+-        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
+-        { "changelog_mask",  lprocfs_rd_changelog_mask,
+-                             lprocfs_wr_changelog_mask, 0 },
+-        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
+-        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
+-	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
+-			       lprocfs_wr_lfsck_speed_limit, 0 },
+-	{ "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
+-				 lprocfs_wr_lfsck_async_windows, 0 },
+-	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
+-	{ "lfsck_layout", lprocfs_rd_lfsck_layout, 0, 0 },
+-	{ 0 }
+-};
 +	LASSERT(name != NULL);
 +	LASSERT(type != NULL);
 +	LASSERT(obd  != NULL);
@@ -1017,24 +1022,32 @@ index 2573e33..e20324c 100644
 +		GOTO(out, rc);
 +	}
 +	rc = 0;
-+
+ 
+-static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
+-        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
+-        { 0 }
+-};
 +	EXIT;
 +out:
 +	if (rc)
 +		mdd_procfs_fini(mdd);
 +	return rc;
- }
++}
  
+-void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
 +int mdd_procfs_fini(struct mdd_device *mdd)
-+{
+ {
+-        lvars->module_vars  = lprocfs_mdd_module_vars;
+-        lvars->obd_vars     = lprocfs_mdd_obd_vars;
 +	if (mdd->mdd_proc_entry) {
 +		lprocfs_remove(&mdd->mdd_proc_entry);
 +		mdd->mdd_proc_entry = NULL;
 +	}
 +	RETURN(0);
-+}
+ }
+-
 diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 63d01cc..abe5d71 100644
+index 7cd7870..f9cb944 100644
 --- a/lustre/obdclass/lprocfs_status.c
 +++ b/lustre/obdclass/lprocfs_status.c
 @@ -388,11 +388,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
@@ -1731,7 +1744,7 @@ index e303fd6..1759a7d 100644
  {
  	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
 diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 3559991..f59f843 100644
+index 6782e5d..1575972 100644
 --- a/lustre/ofd/ofd_dev.c
 +++ b/lustre/ofd/ofd_dev.c
 @@ -240,8 +240,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
@@ -1859,7 +1872,7 @@ index 3559991..f59f843 100644
  	lprocfs_free_per_client_stats(obd);
  	lprocfs_obd_cleanup(obd);
  	lprocfs_free_obd_stats(obd);
-@@ -2363,7 +2358,6 @@ static struct lu_device_type ofd_device_type = {
+@@ -2364,7 +2359,6 @@ static struct lu_device_type ofd_device_type = {
  
  int __init ofd_init(void)
  {
@@ -1867,7 +1880,7 @@ index 3559991..f59f843 100644
  	int				rc;
  
  	rc = lu_kmem_init(ofd_caches);
-@@ -2376,11 +2370,9 @@ int __init ofd_init(void)
+@@ -2377,11 +2371,9 @@ int __init ofd_init(void)
  		return(rc);
  	}
  

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
similarity index 99%
rename from sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index efaca78..febec32 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 44996aad332f6a30634b651c6e5fe92c01923090 Mon Sep 17 00:00:00 2001
+From 1013b4b997343de8530c4d4ef5380220d57f155a Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 31 Jan 2014 10:47:37 -0500
-Subject: [PATCH 08/13] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Date: Sun, 9 Feb 2014 11:04:31 -0500
+Subject: [PATCH 09/13] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds
@@ -461,10 +461,10 @@ index 037bcbd..9bbcbd4 100644
  	{ 0 }
  };
 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 4c386b1..273cb80 100644
+index 064fef1..c850356 100644
 --- a/lustre/mdt/mdt_handler.c
 +++ b/lustre/mdt/mdt_handler.c
-@@ -4538,7 +4538,6 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4539,7 +4539,6 @@ static int mdt_process_config(const struct lu_env *env,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -472,7 +472,7 @@ index 4c386b1..273cb80 100644
  		struct obd_device	   *obd = d->ld_obd;
  
  		/* For interoperability */
-@@ -4573,14 +4572,13 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4574,14 +4573,13 @@ static int mdt_process_config(const struct lu_env *env,
  			}
  		}
  
@@ -492,7 +492,7 @@ index 4c386b1..273cb80 100644
  			if (rc > 0 || rc == -ENOSYS)
  				/* we don't understand; pass it on */
  				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5759,7 +5757,6 @@ static struct lu_device_type mdt_device_type = {
+@@ -5762,7 +5760,6 @@ static struct lu_device_type mdt_device_type = {
  
  static int __init mdt_mod_init(void)
  {
@@ -500,7 +500,7 @@ index 4c386b1..273cb80 100644
  	int rc;
  
  	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5774,10 +5771,9 @@ static int __init mdt_mod_init(void)
+@@ -5777,10 +5774,9 @@ static int __init mdt_mod_init(void)
  	if (rc)
  		GOTO(lu_fini, rc);
  
@@ -557,7 +557,7 @@ index 9a9ce6d..158cced 100644
  	RETURN(rc);
  }
 diff --git a/lustre/mdt/mdt_hsm_cdt_requests.c b/lustre/mdt/mdt_hsm_cdt_requests.c
-index 796cbea..7bbc771 100644
+index 1300861..3125dcc 100644
 --- a/lustre/mdt/mdt_hsm_cdt_requests.c
 +++ b/lustre/mdt/mdt_hsm_cdt_requests.c
 @@ -569,15 +569,12 @@ static int lprocfs_open_hsm_active_requests(struct inode *inode,

diff --git a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index acfa04f..0be7f2a 100644
--- a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,11 +1,12 @@
-From 5a0b800373ce5e05f6ac64686e6381f7d2706044 Mon Sep 17 00:00:00 2001
+From adf3be9fe382564c4760b83a5843b7d5502bbe48 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Fri, 31 Jan 2014 10:38:14 -0500
+Date: Sun, 9 Feb 2014 10:45:37 -0500
 Subject: [PATCH 10/13] LU-3319 procfs: update ldiskfs proc handling to
  seq_files
 
 Migrate all ldiskfs proc handling to using strictly
-seq_files.
+seq_files. Also include a fix with newer gcc complaining
+certain variables are initialized.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
@@ -13,9 +14,9 @@ Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
  lustre/osd-ldiskfs/osd_compat.c   |   6 +-
  lustre/osd-ldiskfs/osd_handler.c  |  16 +-
  lustre/osd-ldiskfs/osd_internal.h |   6 +-
- lustre/osd-ldiskfs/osd_lproc.c    | 338 ++++++++++++++++++++------------------
- lustre/osd-ldiskfs/osd_scrub.c    |  73 +++-----
- 5 files changed, 222 insertions(+), 217 deletions(-)
+ lustre/osd-ldiskfs/osd_lproc.c    | 336 ++++++++++++++++++++------------------
+ lustre/osd-ldiskfs/osd_scrub.c    |  73 +++------
+ 5 files changed, 220 insertions(+), 217 deletions(-)
 
 diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c
 index b4a018c..6ca1304 100644
@@ -116,7 +117,7 @@ index 8436d1f..c90147f 100644
  int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd,
  		   obd_seq seq, struct lu_seq_range *range);
 diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c
-index b9b4e3d..67f3423 100644
+index b9b4e3d..947a4b9 100644
 --- a/lustre/osd-ldiskfs/osd_lproc.c
 +++ b/lustre/osd-ldiskfs/osd_lproc.c
 @@ -237,92 +237,46 @@ out:
@@ -468,7 +469,7 @@ index b9b4e3d..67f3423 100644
  	int		   val;
  	int		   rc;
  
-@@ -544,38 +502,104 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
+@@ -544,38 +502,102 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
  	dev->od_lma_self_repair = !!val;
  	return count;
  }
@@ -595,10 +596,8 @@ index b9b4e3d..67f3423 100644
 +	if (osd->od_stats)
 +		lprocfs_free_stats(&osd->od_stats);
 +
-+	if (osd->od_proc_entry) {
++	if (osd->od_proc_entry)
 +		lprocfs_remove(&osd->od_proc_entry);
-+		osd->od_proc_entry = NULL;
-+	}
 +	RETURN(0);
 +}
  #endif

diff --git a/sys-cluster/lustre/files/0002-LU-3319-lprocfs-client-side-cleanups.patch b/sys-cluster/lustre/files/0011-LU-3319-lprocfs-client-side-cleanups.patch
similarity index 98%
rename from sys-cluster/lustre/files/0002-LU-3319-lprocfs-client-side-cleanups.patch
rename to sys-cluster/lustre/files/0011-LU-3319-lprocfs-client-side-cleanups.patch
index 5dd4981..b3ff994 100644
--- a/sys-cluster/lustre/files/0002-LU-3319-lprocfs-client-side-cleanups.patch
+++ b/sys-cluster/lustre/files/0011-LU-3319-lprocfs-client-side-cleanups.patch
@@ -1,7 +1,7 @@
-From cc1b44ff52af1f78705c18169e951b2b626906b4 Mon Sep 17 00:00:00 2001
+From cd81037fa6ecc7f6b36d3c49205a3d6f3e7aa0de Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 21 Jan 2014 12:06:59 -0500
-Subject: [PATCH 02/13] LU-3319 lprocfs: client side cleanups
+Subject: [PATCH 11/13] LU-3319 lprocfs: client side cleanups
 
 Now that all the client side seq_file patches it is
 time to handle the issue that people pointed out but
@@ -251,10 +251,10 @@ index 648b6e5..f818def 100644
  };
  #endif /* LPROCFS */
 diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 7cd7870..63d01cc 100644
+index f9cb944..abe5d71 100644
 --- a/lustre/obdclass/lprocfs_status.c
 +++ b/lustre/obdclass/lprocfs_status.c
-@@ -2582,7 +2582,6 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
+@@ -2581,7 +2581,6 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
  EXPORT_SYMBOL(lprocfs_init_ldlm_stats);
  
  #ifdef HAVE_SERVER_SUPPORT

diff --git a/sys-cluster/lustre/files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch b/sys-cluster/lustre/files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch
deleted file mode 100644
index 3b1a7e5..0000000
--- a/sys-cluster/lustre/files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch
+++ /dev/null
@@ -1,140 +0,0 @@
-From 508cde3f8347e7d6a6d299cbdfce537ebc29650c Mon Sep 17 00:00:00 2001
-From: yangsheng <yang.sheng@intel.com>
-Date: Fri, 8 Nov 2013 22:31:36 +0800
-Subject: [PATCH 11/13] LU-3373 osd-ldiskfs: readdir replace by iterate
-
-Use iterate instead of readdir callback in iop.
-
-Signed-off-by: yang sheng <yang.sheng@intel.com>
-Change-Id: Icb08292009c965ca693814e854ae2e77b3e7a4f0
----
- lustre/osd-ldiskfs/osd_handler.c | 32 +++++++++++++++++++++++++-------
- lustre/osd-ldiskfs/osd_scrub.c   | 18 +++++++++++++++++-
- 2 files changed, 42 insertions(+), 8 deletions(-)
-
-diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index dfaa542..f635394 100644
---- a/lustre/osd-ldiskfs/osd_handler.c
-+++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -4733,6 +4733,12 @@ static void osd_it_ea_put(const struct lu_env *env, struct dt_it *di)
- {
- }
- 
-+struct osd_filldir_cbs {
-+#ifdef HAVE_DIR_CONTEXT
-+	struct dir_context ctx;
-+#endif
-+	struct osd_it_ea  *it;
-+};
- /**
-  * It is called internally by ->readdir(). It fills the
-  * iterator's in-memory data structure with required
-@@ -4744,11 +4750,11 @@ static void osd_it_ea_put(const struct lu_env *env, struct dt_it *di)
-  * \retval 0 on success
-  * \retval 1 on buffer full
-  */
--static int osd_ldiskfs_filldir(char *buf, const char *name, int namelen,
-+static int osd_ldiskfs_filldir(void *buf, const char *name, int namelen,
-                                loff_t offset, __u64 ino,
-                                unsigned d_type)
- {
--        struct osd_it_ea        *it   = (struct osd_it_ea *)buf;
-+	struct osd_it_ea	*it   = ((struct osd_filldir_cbs *)buf)->it;
- 	struct osd_object	*obj  = it->oie_obj;
-         struct osd_it_ea_dirent *ent  = it->oie_dirent;
-         struct lu_fid           *fid  = &ent->oied_fid;
-@@ -4811,7 +4817,14 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
-         struct osd_object  *obj   = it->oie_obj;
-         struct inode       *inode = obj->oo_inode;
-         struct htree_lock  *hlock = NULL;
--        int                 result = 0;
-+	struct file	   *filp  = &it->oie_file;
-+	int                 rc = 0;
-+	struct osd_filldir_cbs buf = {
-+#ifdef HAVE_DIR_CONTEXT
-+		.ctx.actor = osd_ldiskfs_filldir,
-+#endif
-+		.it = it
-+	};
- 
-         ENTRY;
-         it->oie_dirent = it->oie_buf;
-@@ -4825,8 +4838,13 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
- 		down_read(&obj->oo_ext_idx_sem);
-         }
- 
--        result = inode->i_fop->readdir(&it->oie_file, it,
--                                       (filldir_t) osd_ldiskfs_filldir);
-+#ifdef HAVE_DIR_CONTEXT
-+	buf.ctx.pos = filp->f_pos;
-+	rc = inode->i_fop->iterate(filp, &buf.ctx);
-+	filp->f_pos = buf.ctx.pos;
-+#else
-+	rc = inode->i_fop->readdir(filp, &buf, osd_ldiskfs_filldir);
-+#endif
- 
-         if (hlock != NULL)
-                 ldiskfs_htree_unlock(hlock);
-@@ -4834,13 +4852,13 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
- 		up_read(&obj->oo_ext_idx_sem);
- 
-         if (it->oie_rd_dirent == 0) {
--                result = -EIO;
-+		rc = -EIO;
-         } else {
-                 it->oie_dirent = it->oie_buf;
-                 it->oie_it_dirent = 1;
-         }
- 
--        RETURN(result);
-+	RETURN(rc);
- }
- 
- /**
-diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 1002913..8d19c1e 100644
---- a/lustre/osd-ldiskfs/osd_scrub.c
-+++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -1465,6 +1465,10 @@ struct osd_ios_item {
- };
- 
- struct osd_ios_filldir_buf {
-+#ifdef HAVE_DIR_CONTEXT
-+	/* please keep it as first member */
-+	struct dir_context	 ctx;
-+#endif
- 	struct osd_thread_info	*oifb_info;
- 	struct osd_device	*oifb_dev;
- 	struct dentry		*oifb_dentry;
-@@ -1760,7 +1764,13 @@ static int
- osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev,
- 		     struct dentry *dentry, filldir_t filldir)
- {
--	struct osd_ios_filldir_buf    buf   = { info, dev, dentry };
-+	struct osd_ios_filldir_buf    buf   = {
-+#ifdef HAVE_DIR_CONTEXT
-+						.ctx.actor = filldir,
-+#endif
-+						.oifb_info = info,
-+						.oifb_dev = dev,
-+						.oifb_dentry = dentry };
- 	struct file		     *filp  = &info->oti_it_ea.oie_file;
- 	struct inode		     *inode = dentry->d_inode;
- 	const struct file_operations *fops  = inode->i_fop;
-@@ -1777,7 +1787,13 @@ osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev,
- 	filp->private_data = NULL;
- 	set_file_inode(filp, inode);
- 
-+#ifdef HAVE_DIR_CONTEXT
-+	buf.ctx.pos = filp->f_pos;
-+	rc = fops->iterate(filp, &buf.ctx);
-+	filp->f_pos = buf.ctx.pos;
-+#else
- 	rc = fops->readdir(filp, &buf, filldir);
-+#endif
- 	fops->release(inode, filp);
- 
- 	RETURN(rc);
--- 
-1.8.5.3
-

diff --git a/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
index 29696dd..7a5b843 100644
--- a/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,4 +1,4 @@
-From a93c1a0d6dfaa1a17e0806c5a3f71996af15fb20 Mon Sep 17 00:00:00 2001
+From da6a877ec27753ce11499d1bde68d392f90179c4 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 20 Jan 2014 21:23:00 -0500
 Subject: [PATCH 12/13] LU-3974 llite: use new struct dir_context
@@ -9,6 +9,9 @@ kernel a new struct dir_context was introduced to
 minimize the impact of future expansion. This patch
 addresses this change.
 
+Conflicts:
+	lustre/llite/dir.c
+
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Ib42bf8cb06635a2a64e63b294d79e66ac82a1a5b
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
@@ -181,7 +184,7 @@ index dc5d623..5009934 100644
 +	.fsync		= ll_fsync,
  };
 diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 5c22795..251a218 100644
+index 92b278e..c477b4c 100644
 --- a/lustre/llite/llite_internal.h
 +++ b/lustre/llite/llite_internal.h
 @@ -91,9 +91,12 @@ extern struct file_operations ll_pgcache_seq_fops;
@@ -200,7 +203,7 @@ index 5c22795..251a218 100644
  };
  
  /* llite setxid/access permission for user on remote client */
-@@ -718,8 +721,13 @@ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
+@@ -719,8 +722,13 @@ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
  /* llite/dir.c */
  extern struct file_operations ll_dir_operations;
  extern struct inode_operations ll_dir_inode_operations;

diff --git a/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
index 2886b55..ccca806 100644
--- a/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,4 +1,4 @@
-From 48a712836dff9f15b8d17b9e34caa6acfebf22ce Mon Sep 17 00:00:00 2001
+From 4e78aa55c404914cdc2d01060fb73fc1b0a6b63e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
 Subject: [PATCH 13/13] LU-3974 llite: invalidatepage api changed
@@ -88,7 +88,7 @@ index 747bd4d..5b7bab6 100644
  #endif /* !HAVE_TRUNCATE_COMPLETE_PAGE */
  
 diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c
-index 9365c74..bee7996 100644
+index 447dc43..77151de 100644
 --- a/lustre/llite/rw26.c
 +++ b/lustre/llite/rw26.c
 @@ -76,7 +76,13 @@

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 959fb1f..bf158ad 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -33,17 +33,17 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-3319-lprocfs-client-side-cleanups.patch"
-	"${FILESDIR}/0003-LU-3319-procfs-fix-symlink-handling.patch"
+	"${FILESDIR}/0001-LU-4554-lfsck-old-single-OI-MDT-always-scrubbed.patch"
+	"${FILESDIR}/0002-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
+	"${FILESDIR}/0003-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0005-LU-3319-procfs-fix-symlink-handling.patch"
 	"${FILESDIR}/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
 	"${FILESDIR}/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0008-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0009-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
 	"${FILESDIR}/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
-	"${FILESDIR}/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch"
+	"${FILESDIR}/0011-LU-3319-lprocfs-client-side-cleanups.patch"
 	"${FILESDIR}/0012-LU-3974-llite-use-new-struct-dir_context.patch"
 	"${FILESDIR}/0013-LU-3974-llite-invalidatepage-api-changed.patch"
 )


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2014-02-04 11:28 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2014-02-04 11:28 UTC (permalink / raw
  To: gentoo-commits

commit:     97dab7148009d3fe5414e7cad4bcac1102cdcb71
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue Feb  4 11:30:50 2014 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue Feb  4 11:30:50 2014 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=97dab714

Make lustre build with 3.11 kernel

Package-Manager: portage-2.2.8-r1
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   34 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    8 +-
 ...0002-LU-3319-lprocfs-client-side-cleanups.patch |  463 ++
 ...3-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch | 5997 --------------------
 .../0003-LU-3319-procfs-fix-symlink-handling.patch |  358 ++
 ...74-llite-dentry-d_compare-changes-in-3.11.patch |  132 -
 ...ocfs-move-mgs-proc-handling-to-seq_files.patch} |   53 +-
 ...-LU-3974-llite-use-new-struct-dir_context.patch |  276 -
 ...fs-update-zfs-proc-handling-to-seq_files.patch} |   82 +-
 ...cfs-move-llite-proc-handling-over-to-seq_.patch | 1334 -----
 ...ocfs-move-osp-proc-handling-to-seq_files.patch} |  235 +-
 ...cfs-move-lmv-proc-handling-over-to-seq_fi.patch |  409 --
 ...ocfs-move-lod-proc-handling-to-seq_files.patch} |  157 +-
 ...cfs-move-ldlm-proc-handling-over-to-seq_f.patch |  789 ---
 ...fs-move-mdt-mds-proc-handling-to-seq_fil.patch} |  214 +-
 ...cfs-move-mdd-ofd-proc-handling-to-seq_fil.patch | 1928 +++++++
 ...cfs-move-ost-proc-handling-over-to-seq_fi.patch |  174 -
 ...fs-update-ldiskfs-proc-handling-to-seq_f.patch} |  220 +-
 ...cfs-update-shared-server-side-core-proc-h.patch | 1260 ----
 ...73-osd-ldiskfs-readdir-replace-by-iterate.patch |  140 +
 ...-LU-3974-llite-use-new-struct-dir_context.patch |  262 +
 ...rocfs-move-ofd-proc-handling-to-seq_files.patch |  759 ---
 ...LU-3974-llite-invalidatepage-api-changed.patch} |   12 +-
 ...rocfs-move-mdd-proc-handling-to-seq_files.patch |  788 ---
 sys-cluster/lustre/lustre-9999.ebuild              |   29 +-
 25 files changed, 3788 insertions(+), 12325 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index ea473e4..e5fdda4 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,40 @@
 # Copyright 1999-2014 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  04 Feb 2014; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0002-LU-3319-lprocfs-client-side-cleanups.patch,
+  +files/0003-LU-3319-procfs-fix-symlink-handling.patch,
+  +files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  +files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  +files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  +files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  +files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch,
+  +files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  +files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch,
+  +files/0012-LU-3974-llite-use-new-struct-dir_context.patch,
+  +files/0013-LU-3974-llite-invalidatepage-api-changed.patch,
+  -files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,
+  -files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch,
+  -files/0004-LU-3974-llite-use-new-struct-dir_context.patch,
+  -files/0005-LU-3974-llite-invalidatepage-api-changed.patch,
+  -files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch,
+  -files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch,
+  -files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch,
+  -files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch,
+  -files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch,
+  -files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  -files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  -files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch,
+  -files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  -files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  -files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  -files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch,
+  -files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  lustre-9999.ebuild:
+  Make lustre build with 3.11 kernel
+
   06 Jan 2014; Justin Lecher <jlec@gentoo.org> lustre-9999.ebuild:
   Switch from git-2 to git-r3
 

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index e489733..eaec9aa 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From a607b37a64f797b766825ccb6f41176685cd843f Mon Sep 17 00:00:00 2001
+From 03643a33bd4d6a6fc3f8412f3e5f7f9a4bbd445b Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/18] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/13] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -14,7 +14,7 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  1 file changed, 58 insertions(+), 8 deletions(-)
 
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index b1ec10e..4a835ea 100644
+index 894101c..8062ace 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
 @@ -394,14 +394,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
@@ -91,5 +91,5 @@ index b1ec10e..4a835ea 100644
  #
  # LB_LINUX_TRY_COMPILE
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0002-LU-3319-lprocfs-client-side-cleanups.patch b/sys-cluster/lustre/files/0002-LU-3319-lprocfs-client-side-cleanups.patch
new file mode 100644
index 0000000..5dd4981
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-3319-lprocfs-client-side-cleanups.patch
@@ -0,0 +1,463 @@
+From cc1b44ff52af1f78705c18169e951b2b626906b4 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 21 Jan 2014 12:06:59 -0500
+Subject: [PATCH 02/13] LU-3319 lprocfs: client side cleanups
+
+Now that all the client side seq_file patches it is
+time to handle the issue that people pointed out but
+were not severe enough to prevent landing. This patch
+addresses all the concerns as well and move all struct
+lprocfs_seq_var to be initialized C99 style.
+
+Change-Id: I89e8b719bd067ecf4e3cab481a2d4c62d5052af0
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+---
+ lustre/fid/lproc_fid.c           | 21 ++++++---
+ lustre/lmv/lproc_lmv.c           | 15 ++++---
+ lustre/lov/lproc_lov.c           | 42 ++++++++++++------
+ lustre/mdc/lproc_mdc.c           | 52 ++++++++++++++--------
+ lustre/mgc/lproc_mgc.c           | 25 +++++++----
+ lustre/obdclass/lprocfs_status.c |  1 -
+ lustre/obdecho/echo.c            |  3 +-
+ lustre/osc/lproc_osc.c           | 94 +++++++++++++++++++++++++++-------------
+ lustre/osc/osc_request.c         |  2 +-
+ lustre/ost/ost_handler.c         |  3 +-
+ lustre/ptlrpc/lproc_ptlrpc.c     |  2 +-
+ lustre/quota/qmt_pool.c          |  3 +-
+ lustre/quota/qsd_lib.c           | 12 +++--
+ 13 files changed, 183 insertions(+), 92 deletions(-)
+
+diff --git a/lustre/fid/lproc_fid.c b/lustre/fid/lproc_fid.c
+index d89c4f6..3b9d170 100644
+--- a/lustre/fid/lproc_fid.c
++++ b/lustre/fid/lproc_fid.c
+@@ -203,9 +203,12 @@ LPROC_SEQ_FOPS(lprocfs_server_fid_width);
+ LPROC_SEQ_FOPS_RO(lprocfs_server_fid_server);
+ 
+ struct lprocfs_seq_vars seq_server_proc_list[] = {
+-	{ "space",      &lprocfs_server_fid_space_fops },
+-	{ "width",      &lprocfs_server_fid_width_fops },
+-	{ "server",     &lprocfs_server_fid_server_fops },
++	{ .name	=	"space",
++	  .fops	=	&lprocfs_server_fid_space_fops	},
++	{ .name	=	"width",
++	  .fops	=	&lprocfs_server_fid_width_fops	},
++	{ .name	=	"server",
++	  .fops	=	&lprocfs_server_fid_server_fops	},
+ 	{ NULL }
+ };
+ 
+@@ -623,10 +626,14 @@ LPROC_SEQ_FOPS_RO(lprocfs_client_fid_server);
+ LPROC_SEQ_FOPS_RO(lprocfs_client_fid_fid);
+ 
+ struct lprocfs_seq_vars seq_client_proc_list[] = {
+-	{ "space",	&lprocfs_client_fid_space_fops },
+-	{ "width",	&lprocfs_client_fid_width_fops },
+-	{ "server",	&lprocfs_client_fid_server_fops },
+-	{ "fid",	&lprocfs_client_fid_fid_fops },
++	{ .name	=	"space",
++	  .fops	=	&lprocfs_client_fid_space_fops	},
++	{ .name	=	"width",
++	  .fops	=	&lprocfs_client_fid_width_fops	},
++	{ .name	=	"server",
++	  .fops	=	&lprocfs_client_fid_server_fops	},
++	{ .name	=	"fid",
++	  .fops	=	&lprocfs_client_fid_fid_fops	},
+ 	{ NULL }
+ };
+ #endif
+diff --git a/lustre/lmv/lproc_lmv.c b/lustre/lmv/lproc_lmv.c
+index eea5927..5a7271a 100644
+--- a/lustre/lmv/lproc_lmv.c
++++ b/lustre/lmv/lproc_lmv.c
+@@ -203,11 +203,16 @@ static int lmv_target_seq_open(struct inode *inode, struct file *file)
+ LPROC_SEQ_FOPS_RO_TYPE(lmv, uuid);
+ 
+ struct lprocfs_seq_vars lprocfs_lmv_obd_vars[] = {
+-	{ "numobd",	&lmv_numobd_fops	},
+-	{ "placement",	&lmv_placement_fops	},
+-	{ "activeobd",	&lmv_activeobd_fops	},
+-	{ "uuid",	&lmv_uuid_fops		},
+-	{ "desc_uuid",	&lmv_desc_uuid_fops	},
++	{ .name	=	"numobd",
++	  .fops	=	&lmv_numobd_fops	},
++	{ .name	=	"placement",
++	  .fops	=	&lmv_placement_fops	},
++	{ .name	=	"activeobd",
++	  .fops	=	&lmv_activeobd_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&lmv_uuid_fops		},
++	{ .name	=	"desc_uuid",
++	  .fops	=	&lmv_desc_uuid_fops	},
+ 	{ 0 }
+ };
+ 
+diff --git a/lustre/lov/lproc_lov.c b/lustre/lov/lproc_lov.c
+index e400faf..7786513 100644
+--- a/lustre/lov/lproc_lov.c
++++ b/lustre/lov/lproc_lov.c
+@@ -263,20 +263,34 @@ LPROC_SEQ_FOPS_RO_TYPE(lov, kbytesfree);
+ LPROC_SEQ_FOPS_RO_TYPE(lov, kbytesavail);
+ 
+ struct lprocfs_seq_vars lprocfs_lov_obd_vars[] = {
+-	{ "uuid",		&lov_uuid_fops		},
+-	{ "stripesize",		&lov_stripesize_fops	},
+-	{ "stripeoffset",	&lov_stripeoffset_fops	},
+-	{ "stripecount",	&lov_stripecount_fops	},
+-	{ "stripetype",		&lov_stripetype_fops	},
+-	{ "numobd",		&lov_numobd_fops	},
+-	{ "activeobd",		&lov_activeobd_fops	},
+-	{ "filestotal",		&lov_filestotal_fops	},
+-	{ "filesfree",		&lov_filesfree_fops	},
+-	{ "blocksize",		&lov_blksize_fops	},
+-	{ "kbytestotal",	&lov_kbytestotal_fops	},
+-	{ "kbytesfree",		&lov_kbytesfree_fops	},
+-	{ "kbytesavail",	&lov_kbytesavail_fops	},
+-	{ "desc_uuid",		&lov_desc_uuid_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&lov_uuid_fops		},
++	{ .name	=	"stripesize",
++	  .fops	=	&lov_stripesize_fops	},
++	{ .name	=	"stripeoffset",
++	  .fops	=	&lov_stripeoffset_fops	},
++	{ .name	=	"stripecount",
++	  .fops	=	&lov_stripecount_fops	},
++	{ .name	=	"stripetype",
++	  .fops	=	&lov_stripetype_fops	},
++	{ .name	=	"numobd",
++	  .fops	=	&lov_numobd_fops	},
++	{ .name	=	"activeobd",
++	  .fops	=	&lov_activeobd_fops	},
++	{ .name	=	"filestotal",
++	  .fops	=	&lov_filestotal_fops	},
++	{ .name	=	"filesfree",
++	  .fops	=	&lov_filesfree_fops	},
++	{ .name	=	"blocksize",
++	  .fops	=	&lov_blksize_fops	},
++	{ .name	=	"kbytestotal",
++	  .fops	=	&lov_kbytestotal_fops	},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&lov_kbytesfree_fops	},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&lov_kbytesavail_fops	},
++	{ .name	=	"desc_uuid",
++	  .fops	=	&lov_desc_uuid_fops	},
+ 	{ 0 }
+ };
+ 
+diff --git a/lustre/mdc/lproc_mdc.c b/lustre/mdc/lproc_mdc.c
+index cba4f61..69e377f 100644
+--- a/lustre/mdc/lproc_mdc.c
++++ b/lustre/mdc/lproc_mdc.c
+@@ -103,29 +103,47 @@ LPROC_SEQ_FOPS_RW_TYPE(mdc, import);
+ LPROC_SEQ_FOPS_RW_TYPE(mdc, pinger_recov);
+ 
+ struct lprocfs_seq_vars lprocfs_mdc_obd_vars[] = {
+-	{ "uuid",		&mdc_uuid_fops,		0,	0 },
+-	{ "ping",		&mdc_ping_fops,		0,	0222 },
+-	{ "connect_flags",	&mdc_connect_flags_fops,0,	0 },
+-	{ "blocksize",		&mdc_blksize_fops,	0,	0 },
+-	{ "kbytestotal",	&mdc_kbytestotal_fops,	0,	0 },
+-	{ "kbytesfree",		&mdc_kbytesfree_fops,	0,	0 },
+-	{ "kbytesavail",	&mdc_kbytesavail_fops,	0,	0 },
+-	{ "filestotal",		&mdc_filestotal_fops,	0,	0 },
+-	{ "filesfree",		&mdc_filesfree_fops,	0,	0 },
+-	{ "mds_server_uuid",	&mdc_server_uuid_fops,	0,	0 },
+-	{ "mds_conn_uuid",	&mdc_conn_uuid_fops,	0,	0 },
++	{ .name	=	"uuid",
++	  .fops	=	&mdc_uuid_fops		},
++	{ .name	=	"ping",
++	  .fops	=	&mdc_ping_fops,
++	  .proc_mode =	0222			},
++	{ .name	=	"connect_flags",
++	  .fops	=	&mdc_connect_flags_fops	},
++	{ .name	=	"blocksize",
++	  .fops	=	&mdc_blksize_fops	},
++	{ .name	=	"kbytestotal",
++	  .fops	=	&mdc_kbytestotal_fops	},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&mdc_kbytesfree_fops	},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&mdc_kbytesavail_fops	},
++	{ .name	=	"filestotal",
++	  .fops	=	&mdc_filestotal_fops	},
++	{ .name	=	"filesfree",
++	  .fops	=	&mdc_filesfree_fops	},
++	{ .name	=	"mds_server_uuid",
++	  .fops	=	&mdc_server_uuid_fops	},
++	{ .name	=	"mds_conn_uuid",
++	  .fops	=	&mdc_conn_uuid_fops	},
+ 	/*
+ 	 * FIXME: below proc entry is provided, but not in used, instead
+ 	 * sbi->sb_md_brw_size is used, the per obd variable should be used
+ 	 * when CMD is enabled, and dir pages are managed in MDC layer.
+ 	 * Remember to enable proc write function.
+ 	 */
+-	{ "max_pages_per_rpc",	&mdc_obd_max_pages_per_rpc_fops	},
+-	{ "max_rpcs_in_flight",	&mdc_max_rpcs_in_flight_fops	},
+-	{ "timeouts",		&mdc_timeouts_fops		},
+-	{ "import",		&mdc_import_fops		},
+-	{ "state",		&mdc_state_fops			},
+-	{ "pinger_recov",	&mdc_pinger_recov_fops		},
++	{ .name	=	"max_pages_per_rpc",
++	  .fops	=	&mdc_obd_max_pages_per_rpc_fops	},
++	{ .name	=	"max_rpcs_in_flight",
++	  .fops	=	&mdc_max_rpcs_in_flight_fops	},
++	{ .name	=	"timeouts",
++	  .fops	=	&mdc_timeouts_fops		},
++	{ .name	=	"import",
++	  .fops	=	&mdc_import_fops		},
++	{ .name	=	"state",
++	  .fops	=	&mdc_state_fops			},
++	{ .name	=	"pinger_recov",
++	  .fops	=	&mdc_pinger_recov_fops		},
+ 	{ 0 }
+ };
+ #endif /* LPROCFS */
+diff --git a/lustre/mgc/lproc_mgc.c b/lustre/mgc/lproc_mgc.c
+index 648b6e5..f818def 100644
+--- a/lustre/mgc/lproc_mgc.c
++++ b/lustre/mgc/lproc_mgc.c
+@@ -59,14 +59,23 @@ static int mgc_ir_state_seq_show(struct seq_file *m, void *v)
+ LPROC_SEQ_FOPS_RO(mgc_ir_state);
+ 
+ struct lprocfs_seq_vars lprocfs_mgc_obd_vars[] = {
+-	{ "uuid",		&mgc_uuid_fops,		0,	0 },
+-	{ "ping",		&mgc_ping_fops,		0,	0222 },
+-	{ "connect_flags",	&mgc_connect_flags_fops,0,	0 },
+-	{ "mgs_server_uuid",	&mgc_server_uuid_fops,	0,	0 },
+-	{ "mgs_conn_uuid",	&mgc_conn_uuid_fops,	0,	0 },
+-	{ "import",		&mgc_import_fops,	0,	0 },
+-	{ "state",		&mgc_state_fops,	0,	0 },
+-	{ "ir_state",		&mgc_ir_state_fops,	0,	0 },
++	{ .name	=	"uuid",
++	  .fops	=	&mgc_uuid_fops		},
++	{ .name	=	"ping",
++	  .fops	=	&mgc_ping_fops,
++	  .proc_mode =	0222			},
++	{ .name	=	"connect_flags",
++	  .fops	=	&mgc_connect_flags_fops	},
++	{ .name	=	"mgs_server_uuid",
++	  .fops	=	&mgc_server_uuid_fops	},
++	{ .name	=	"mgs_conn_uuid",
++	  .fops	=	&mgc_conn_uuid_fops	},
++	{ .name	=	"import",
++	  .fops	=	&mgc_import_fops	},
++	{ .name	=	"state",
++	  .fops	=	&mgc_state_fops		},
++	{ .name	=	"ir_state",
++	  .fops	=	&mgc_ir_state_fops	},
+ 	{ 0 }
+ };
+ #endif /* LPROCFS */
+diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
+index 7cd7870..63d01cc 100644
+--- a/lustre/obdclass/lprocfs_status.c
++++ b/lustre/obdclass/lprocfs_status.c
+@@ -2582,7 +2582,6 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
+ EXPORT_SYMBOL(lprocfs_init_ldlm_stats);
+ 
+ #ifdef HAVE_SERVER_SUPPORT
+-/* No one appears to be using this ?? */
+ int lprocfs_exp_nid_seq_show(struct seq_file *m, void *data)
+ {
+ 	struct obd_export *exp = m->private;
+diff --git a/lustre/obdecho/echo.c b/lustre/obdecho/echo.c
+index 6d63aff..8563e68 100644
+--- a/lustre/obdecho/echo.c
++++ b/lustre/obdecho/echo.c
+@@ -561,7 +561,8 @@ commitrw_cleanup:
+ 
+ LPROC_SEQ_FOPS_RO_TYPE(echo, uuid);
+ static struct lprocfs_seq_vars lprocfs_echo_obd_vars[] = {
+-	{ "uuid",	&echo_uuid_fops		},
++	{ .name	=	"uuid",
++	  .fops	=	&echo_uuid_fops		},
+ 	{ 0 }
+ };
+ 
+diff --git a/lustre/osc/lproc_osc.c b/lustre/osc/lproc_osc.c
+index d6e3703..ccfc212 100644
+--- a/lustre/osc/lproc_osc.c
++++ b/lustre/osc/lproc_osc.c
+@@ -543,37 +543,69 @@ LPROC_SEQ_FOPS_RW_TYPE(osc, import);
+ LPROC_SEQ_FOPS_RW_TYPE(osc, pinger_recov);
+ 
+ struct lprocfs_seq_vars lprocfs_osc_obd_vars[] = {
+-	{ "uuid",		&osc_uuid_fops			},
+-	{ "ping",		&osc_ping_fops,		0, 0222	},
+-	{ "connect_flags",	&osc_connect_flags_fops		},
+-	{ "blocksize",		&osc_blksize_fops		},
+-	{ "kbytestotal",	&osc_kbytestotal_fops		},
+-	{ "kbytesfree",		&osc_kbytesfree_fops		},
+-	{ "kbytesavail",	&osc_kbytesavail_fops		},
+-	{ "filestotal",		&osc_filestotal_fops		},
+-	{ "filesfree",		&osc_filesfree_fops		},
+-	{ "ost_server_uuid",	&osc_server_uuid_fops		},
+-	{ "ost_conn_uuid",	&osc_conn_uuid_fops		},
+-	{ "active",		&osc_active_fops		},
+-	{ "max_pages_per_rpc",	&osc_obd_max_pages_per_rpc_fops	},
+-	{ "max_rpcs_in_flight",	&osc_max_rpcs_in_flight_fops	},
+-	{ "destroys_in_flight",	&osc_destroys_in_flight_fops	},
+-	{ "max_dirty_mb",	&osc_max_dirty_mb_fops		},
+-	{ "osc_cached_mb",	&osc_cached_mb_fops		},
+-	{ "cur_dirty_bytes",	&osc_cur_dirty_bytes_fops	},
+-	{ "cur_grant_bytes",	&osc_cur_grant_bytes_fops	},
+-	{ "cur_lost_grant_bytes",	&osc_cur_lost_grant_bytes_fops	},
+-	{ "grant_shrink_interval",	&osc_grant_shrink_interval_fops	},
+-	{ "checksums",		&osc_checksum_fops		},
+-	{ "checksum_type",	&osc_checksum_type_fops		},
+-	{ "resend_count",	&osc_resend_count_fops		},
+-	{ "timeouts",		&osc_timeouts_fops		},
+-	{ "contention_seconds",	&osc_contention_seconds_fops	},
+-	{ "lockless_truncate",	&osc_lockless_truncate_fops	},
+-	{ "import",		&osc_import_fops		},
+-	{ "state",		&osc_state_fops			},
+-	{ "pinger_recov",	&osc_pinger_recov_fops		},
+-	{ "unstable_stats",	&osc_unstable_stats_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&osc_uuid_fops			},
++	{ .name	=	"ping",
++	  .fops	=	&osc_ping_fops,
++	  .proc_mode =	0222				},
++	{ .name	=	"connect_flags",
++	  .fops	=	&osc_connect_flags_fops		},
++	{ .name	=	"blocksize",
++	  .fops	=	&osc_blksize_fops		},
++	{ .name	=	"kbytestotal",
++	  .fops	=	&osc_kbytestotal_fops		},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&osc_kbytesfree_fops		},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&osc_kbytesavail_fops		},
++	{ .name	=	"filestotal",
++	  .fops	=	&osc_filestotal_fops		},
++	{ .name	=	"filesfree",
++	  .fops	=	&osc_filesfree_fops		},
++	{ .name	=	"ost_server_uuid",
++	  .fops	=	&osc_server_uuid_fops		},
++	{ .name	=	"ost_conn_uuid",
++	  .fops	=	&osc_conn_uuid_fops		},
++	{ .name	=	"active",
++	  .fops	=	&osc_active_fops		},
++	{ .name	=	"max_pages_per_rpc",
++	  .fops	=	&osc_obd_max_pages_per_rpc_fops	},
++	{ .name	=	"max_rpcs_in_flight",
++	  .fops	=	&osc_max_rpcs_in_flight_fops	},
++	{ .name	=	"destroys_in_flight",
++	  .fops	=	&osc_destroys_in_flight_fops	},
++	{ .name	=	"max_dirty_mb",
++	  .fops	=	&osc_max_dirty_mb_fops		},
++	{ .name	=	"osc_cached_mb",
++	  .fops	=	&osc_cached_mb_fops		},
++	{ .name	=	"cur_dirty_bytes",
++	  .fops	=	&osc_cur_dirty_bytes_fops	},
++	{ .name	=	"cur_grant_bytes",
++	  .fops	=	&osc_cur_grant_bytes_fops	},
++	{ .name	=	"cur_lost_grant_bytes",
++	  .fops	=	&osc_cur_lost_grant_bytes_fops	},
++	{ .name	=	"grant_shrink_interval",
++	  .fops	=	&osc_grant_shrink_interval_fops	},
++	{ .name	=	"checksums",
++	  .fops	=	&osc_checksum_fops		},
++	{ .name	=	"checksum_type",
++	  .fops	=	&osc_checksum_type_fops		},
++	{ .name	=	"resend_count",
++	  .fops	=	&osc_resend_count_fops		},
++	{ .name	=	"timeouts",
++	  .fops	=	&osc_timeouts_fops		},
++	{ .name	=	"contention_seconds",
++	  .fops	=	&osc_contention_seconds_fops	},
++	{ .name	=	"lockless_truncate",
++	  .fops	=	&osc_lockless_truncate_fops	},
++	{ .name	=	"import",
++	  .fops	=	&osc_import_fops		},
++	{ .name	=	"state",
++	  .fops	=	&osc_state_fops			},
++	{ .name	=	"pinger_recov",
++	  .fops	=	&osc_pinger_recov_fops		},
++	{ .name	=	"unstable_stats",
++	  .fops	=	&osc_unstable_stats_fops	},
+ 	{ 0 }
+ };
+ 
+diff --git a/lustre/osc/osc_request.c b/lustre/osc/osc_request.c
+index b9d1b71..f95fb55 100644
+--- a/lustre/osc/osc_request.c
++++ b/lustre/osc/osc_request.c
+@@ -3669,7 +3669,7 @@ int osc_process_config_base(struct obd_device *obd, struct lustre_cfg *lcfg)
+ {
+ 	int rc = class_process_proc_seq_param(PARAM_OSC, obd->obd_vars,
+ 					      lcfg, obd);
+-	return(rc > 0 ? 0: rc);
++	return rc > 0 ? 0: rc;
+ }
+ 
+ static int osc_process_config(struct obd_device *obd, obd_count len, void *buf)
+diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
+index d4da00d..d20a30f 100644
+--- a/lustre/ost/ost_handler.c
++++ b/lustre/ost/ost_handler.c
+@@ -75,7 +75,8 @@ static struct cfs_cpt_table	*ost_io_cptable;
+ LPROC_SEQ_FOPS_RO_TYPE(ost, uuid);
+ 
+ static struct lprocfs_seq_vars lprocfs_ost_obd_vars[] = {
+-	{ "uuid",	&ost_uuid_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&ost_uuid_fops	},
+ 	{ 0 }
+ };
+ #endif /* LPROCFS */
+diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c
+index 8e5a397..bf21958 100644
+--- a/lustre/ptlrpc/lproc_ptlrpc.c
++++ b/lustre/ptlrpc/lproc_ptlrpc.c
+@@ -1382,7 +1382,7 @@ lprocfs_import_seq_write(struct file *file, const char *buffer, size_t count,
+ 
+ 		*ptr = 0;
+ 		do_reconn = 0;
+-		ptr += strlen("::");
++		ptr += 2; /* Skip :: */
+ 		inst = simple_strtol(ptr, &endptr, 10);
+ 		if (*endptr) {
+ 			CERROR("config: wrong instance # %s\n", ptr);
+diff --git a/lustre/quota/qmt_pool.c b/lustre/quota/qmt_pool.c
+index afd450c..df6d6fc 100644
+--- a/lustre/quota/qmt_pool.c
++++ b/lustre/quota/qmt_pool.c
+@@ -171,7 +171,8 @@ static int qpi_state_seq_show(struct seq_file *m, void *data)
+ LPROC_SEQ_FOPS_RO(qpi_state);
+ 
+ static struct lprocfs_seq_vars lprocfs_quota_qpi_vars[] = {
+-	{ "info",	&qpi_state_fops	},
++	{ .name	=	"info",
++	  .fops	=	&qpi_state_fops	},
+ 	{ NULL }
+ };
+ 
+diff --git a/lustre/quota/qsd_lib.c b/lustre/quota/qsd_lib.c
+index 990cfee..573473c 100644
+--- a/lustre/quota/qsd_lib.c
++++ b/lustre/quota/qsd_lib.c
+@@ -208,10 +208,14 @@ qsd_timeout_seq_write(struct file *file, const char *buffer,
+ LPROC_SEQ_FOPS(qsd_timeout);
+ 
+ static struct lprocfs_seq_vars lprocfs_quota_qsd_vars[] = {
+-	{ "info",		&qsd_state_fops		},
+-	{ "enabled",		&qsd_enabled_fops	},
+-	{ "force_reint",	&qsd_force_reint_fops	},
+-	{ "timeout",		&qsd_timeout_fops	},
++	{ .name	=	"info",
++	  .fops	=	&qsd_state_fops		},
++	{ .name	=	"enabled",
++	  .fops	=	&qsd_enabled_fops	},
++	{ .name	=	"force_reint",
++	  .fops	=	&qsd_force_reint_fops	},
++	{ .name	=	"timeout",
++	  .fops	=	&qsd_timeout_fops	},
+ 	{ NULL }
+ };
+ 
+-- 
+1.8.5.3
+

diff --git a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
deleted file mode 100644
index 8f3258a..0000000
--- a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
+++ /dev/null
@@ -1,5997 +0,0 @@
-From e53207df22261a635315a62f1405eb8c7b700963 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 5 Dec 2013 09:05:22 -0500
-Subject: [PATCH 02/18] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
-
-ldiskfs patches
-
-Signed-off-by: yang sheng <yang.sheng@intel.com>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I59a8e7086c4567f1fe493ac7f0086365b5a6535c
----
- config/lustre-build-ldiskfs.m4                     |   15 +-
- config/lustre-build-linux.m4                       |   12 +-
- .../fc19/ext4-change-entry-avoid-conflict.patch    |   71 +
- .../patches/fc19/ext4-disable-mb-cache.patch       |  150 ++
- .../kernel_patches/patches/fc19/ext4-fiemap.patch  |  111 +
- .../patches/fc19/ext4-force_over_128tb.patch       |   57 +
- .../patches/fc19/ext4-inode-version.patch          |   59 +
- .../patches/fc19/ext4-kill-dx_root.patch           |  235 ++
- .../patches/fc19/ext4-large-eas.patch              |  785 +++++++
- .../patches/fc19/ext4-lookup-dotdot.patch          |   37 +
- .../patches/fc19/ext4-max-dir-size.patch           |   44 +
- .../patches/fc19/ext4-mballoc-extra-checks.patch   |  315 +++
- .../fc19/ext4-mballoc-pa_free-mismatch.patch       |  109 +
- .../kernel_patches/patches/fc19/ext4-misc.patch    |  193 ++
- .../patches/fc19/ext4-nocmtime.patch               |   28 +
- .../patches/fc19/ext4-osd-iam-exports.patch        |   56 +
- .../patches/fc19/ext4-osd-iop-common.patch         |  135 ++
- .../patches/fc19/ext4-pdir-fix.patch               |   61 +
- .../patches/fc19/ext4-prealloc.patch               |  387 ++++
- .../patches/fc19/ext4_data_in_dirent.patch         |  649 ++++++
- .../kernel_patches/patches/fc19/ext4_pdirop.patch  | 2252 ++++++++++++++++++++
- .../kernel_patches/series/ldiskfs-3.x-fc19.series  |   22 +
- 22 files changed, 5781 insertions(+), 2 deletions(-)
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch
- create mode 100644 ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch
- create mode 100644 ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series
-
-diff --git a/config/lustre-build-ldiskfs.m4 b/config/lustre-build-ldiskfs.m4
-index 4b15de3..c979bab 100644
---- a/config/lustre-build-ldiskfs.m4
-+++ b/config/lustre-build-ldiskfs.m4
-@@ -9,7 +9,7 @@ AS_IF([test x$RHEL_KERNEL = xyes], [
- 	AS_VERSION_COMPARE([$RHEL_KERNEL_VERSION],[2.6.32],[],
- 	[SER="2.6-rhel6.series"],[SER="2.6-rhel6.series"])],
- 	[SER="2.6-rhel6.4.series"],[SER="2.6-rhel6.4.series"])
--], [test x$SUSE_KERNEL = xyes], [
-+], [ AS_IF([test x$SUSE_KERNEL = xyes], [
- 	AS_VERSION_COMPARE([$LINUXRELEASE],[3.0.0],[
- 	AS_VERSION_COMPARE([$LINUXRELEASE],[2.6.32],[],
- 	[SER="2.6-sles11.series"],[SER="2.6-sles11.series"])],
-@@ -22,6 +22,19 @@ AS_IF([test x$RHEL_KERNEL = xyes], [
- 			;;
- 		esac
- 	])
-+], [ AS_IF([test x$FEDORA_KERNEL = xyes], [
-+	AS_VERSION_COMPARE([$LINUXRELEASE],[3.11],[],
-+	[SER="3.x-fc19.series"],[SER="3.x-fc19.series"])
-+])
-+])
-+])
-+
-+#
-+# Handle the case were someone uses their own kernel
-+#
-+AS_IF([test -z "$SER"], [
-+	AS_VERSION_COMPARE([$LINUXRELEASE],[3.11],[],
-+	[SER="3.x-fc19.series"],[SER="3.x-fc19.series"])
- ])
- LDISKFS_SERIES=$SER
- 
-diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index 4a835ea..9afda9c 100644
---- a/config/lustre-build-linux.m4
-+++ b/config/lustre-build-linux.m4
-@@ -109,7 +109,16 @@ AC_MSG_CHECKING([for RedHat kernel version])
- 		AC_MSG_RESULT([${RHEL_KERNEL_VERSION}])
- 	], [
- 		AC_MSG_RESULT([not found])
--		LB_LINUX_CONFIG([SUSE_KERNEL],[SUSE_KERNEL="yes"],[])
-+		LB_LINUX_CONFIG([SUSE_KERNEL],[SUSE_KERNEL="yes"],[
-+			AC_MSG_CHECKING([for Fedora 19 kernel])
-+			AS_IF([test "$(echo $LINUXRELEASE | grep fc19)" == "$LINUXRELEASE" ],[
-+				AC_MSG_RESULT([yes])
-+				FEDORA_KERNEL="yes"
-+			], [
-+				FEDORA_KERNEL="no"
-+				AC_MSG_RESULT([no])
-+			])
-+		])
- 	])
- 
- AC_MSG_CHECKING([for kernel module package directory])
-@@ -118,6 +127,7 @@ AC_ARG_WITH([kmp-moddir],
- 		       [set the kmod updates or extra directory]),
- 	[KMP_MODDIR=$withval],[
- 	AS_IF([test x$RHEL_KERNEL = xyes], [KMP_MODDIR="extra"],
-+	      [test x$FEDORA_KERNEL = xyes], [KMP_MODDIR="extra"],
- 	      [test x$SUSE_KERNEL = xyes], [KMP_MODDIR="updates"])])
- 
- AC_MSG_RESULT($KMP_MODDIR)
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch
-new file mode 100644
-index 0000000..b1e4b9f
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-change-entry-avoid-conflict.patch
-@@ -0,0 +1,71 @@
-+Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.c
-+===================================================================
-+--- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/xattr.c
-++++ linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.c
-+@@ -945,7 +945,7 @@ ext4_xattr_set_entry(struct ext4_xattr_i
-+ 		if (!i->value) {
-+ 			/* Remove the old name. */
-+ 			size_t size = EXT4_XATTR_LEN(name_len);
-+-			last = ENTRY((void *)last - size);
-++			last = XA_ENTRY((void *)last - size);
-+ 			memmove(s->here, (void *)s->here + size,
-+ 				(void *)last - (void *)s->here + sizeof(__u32));
-+ 			memset(last, 0, size);
-+@@ -1086,9 +1086,9 @@ ext4_xattr_block_set(handle_t *handle, s
-+ 			if (s->base == NULL)
-+ 				goto cleanup;
-+ 			memcpy(s->base, BHDR(bs->bh), bs->bh->b_size);
-+-			s->first = ENTRY(header(s->base)+1);
-++			s->first = XA_ENTRY(header(s->base)+1);
-+ 			header(s->base)->h_refcount = cpu_to_le32(1);
-+-			s->here = ENTRY(s->base + offset);
-++			s->here = XA_ENTRY(s->base + offset);
-+ 			s->end = s->base + bs->bh->b_size;
-+ 		}
-+ 	} else {
-+@@ -1101,8 +1101,8 @@ ext4_xattr_block_set(handle_t *handle, s
-+ 		header(s->base)->h_magic = cpu_to_le32(EXT4_XATTR_MAGIC);
-+ 		header(s->base)->h_blocks = cpu_to_le32(1);
-+ 		header(s->base)->h_refcount = cpu_to_le32(1);
-+-		s->first = ENTRY(header(s->base)+1);
-+-		s->here = ENTRY(header(s->base)+1);
-++		s->first = XA_ENTRY(header(s->base)+1);
-++		s->here = XA_ENTRY(header(s->base)+1);
-+ 		s->end = s->base + sb->s_blocksize;
-+ 	}
-+ 
-+@@ -1884,8 +1884,8 @@ ext4_xattr_cmp(struct ext4_xattr_header
-+ {
-+ 	struct ext4_xattr_entry *entry1, *entry2;
-+ 
-+-	entry1 = ENTRY(header1+1);
-+-	entry2 = ENTRY(header2+1);
-++	entry1 = XA_ENTRY(header1+1);
-++	entry2 = XA_ENTRY(header2+1);
-+ 	while (!IS_LAST_ENTRY(entry1)) {
-+ 		if (IS_LAST_ENTRY(entry2))
-+ 			return 1;
-+@@ -2011,7 +2011,7 @@ static void ext4_xattr_rehash(struct ext
-+ 	__u32 hash = 0;
-+ 
-+ 	ext4_xattr_hash_entry(header, entry);
-+-	here = ENTRY(header+1);
-++	here = XA_ENTRY(header+1);
-+ 	while (!IS_LAST_ENTRY(here)) {
-+ 		if (!here->e_hash) {
-+ 			/* Block is not shared if an entry's hash value == 0 */
-+Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.h
-+===================================================================
-+--- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/xattr.h
-++++ linux-3.10.9-200.fc17.x86_64/fs/ext4/xattr.h
-+@@ -77,8 +77,8 @@ struct ext4_xattr_entry {
-+ 	((b) - EXT4_XATTR_LEN(3) - sizeof(struct ext4_xattr_header) - 4)
-+ 
-+ #define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
-+-#define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
-+-#define BFIRST(bh) ENTRY(BHDR(bh)+1)
-++#define XA_ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
-++#define BFIRST(bh) XA_ENTRY(BHDR(bh)+1)
-+ #define IS_LAST_ENTRY(entry) (*(__u32 *)(entry) == 0)
-+ 
-+ #define EXT4_ZERO_XATTR_VALUE ((void *)-1)
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch
-new file mode 100644
-index 0000000..93a9022
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-disable-mb-cache.patch
-@@ -0,0 +1,150 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -941,6 +941,7 @@ struct ext4_inode_info {
-+ /*
-+  * Mount flags set via mount options or defaults
-+  */
-++#define EXT4_MOUNT_NO_MBCACHE		0x00001 /* Disable mbcache */
-+ #define EXT4_MOUNT_GRPID		0x00004	/* Create files with directory's group */
-+ #define EXT4_MOUNT_DEBUG		0x00008	/* Some debugging messages */
-+ #define EXT4_MOUNT_ERRORS_CONT		0x00010	/* Continue on errors */
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -1152,6 +1152,7 @@ enum {
-+ 	Opt_inode_readahead_blks, Opt_journal_ioprio,
-+ 	Opt_mballoc, Opt_force_over_128tb,
-+ 	Opt_dioread_nolock, Opt_dioread_lock,
-++	Opt_no_mbcache,
-+ 	Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
-+ 	Opt_max_dir_size_kb,
-+ };
-+@@ -1230,6 +1231,7 @@ static const match_table_t tokens = {
-+ 	{Opt_discard, "discard"},
-+ 	{Opt_nodiscard, "nodiscard"},
-+ 	{Opt_init_itable, "init_itable=%u"},
-++	{Opt_no_mbcache, "no_mbcache"},
-+ 	{Opt_init_itable, "init_itable"},
-+ 	{Opt_noinit_itable, "noinit_itable"},
-+ 	{Opt_max_dir_size_kb, "max_dir_size_kb=%u"},
-+@@ -1389,6 +1391,7 @@ static const struct mount_opts {
-+ 	{Opt_noauto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_SET},
-+ 	{Opt_auto_da_alloc, EXT4_MOUNT_NO_AUTO_DA_ALLOC, MOPT_CLEAR},
-+ 	{Opt_noinit_itable, EXT4_MOUNT_INIT_INODE_TABLE, MOPT_CLEAR},
-++	{Opt_no_mbcache, EXT4_MOUNT_NO_MBCACHE, MOPT_SET},
-+ 	{Opt_commit, 0, MOPT_GTE0},
-+ 	{Opt_max_batch_time, 0, MOPT_GTE0},
-+ 	{Opt_min_batch_time, 0, MOPT_GTE0},
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
-+@@ -81,7 +81,8 @@
-+ # define ea_bdebug(bh, fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
-+ #endif
-+ 
-+-static void ext4_xattr_cache_insert(struct buffer_head *);
-++static void ext4_xattr_cache_insert(struct super_block *,
-++				    struct buffer_head *);
-+ static struct buffer_head *ext4_xattr_cache_find(struct inode *,
-+ 						 struct ext4_xattr_header *,
-+ 						 struct mb_cache_entry **);
-+@@ -385,7 +386,7 @@ bad_block:
-+ 		error = -EIO;
-+ 		goto cleanup;
-+ 	}
-+-	ext4_xattr_cache_insert(bh);
-++	ext4_xattr_cache_insert(inode->i_sb, bh);
-+ 	entry = BFIRST(bh);
-+ 	error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1,
-+ 				      inode);
-+@@ -546,7 +547,7 @@ ext4_xattr_block_list(struct dentry *den
-+ 		error = -EIO;
-+ 		goto cleanup;
-+ 	}
-+-	ext4_xattr_cache_insert(bh);
-++	ext4_xattr_cache_insert(inode->i_sb, bh);
-+ 	error = ext4_xattr_list_entries(dentry, BFIRST(bh), buffer, buffer_size);
-+ 
-+ cleanup:
-+@@ -643,7 +644,9 @@ ext4_xattr_release_block(handle_t *handl
-+ 	struct mb_cache_entry *ce = NULL;
-+ 	int error = 0;
-+ 
-+-	ce = mb_cache_entry_get(ext4_xattr_cache, bh->b_bdev, bh->b_blocknr);
-++	if (!test_opt(inode->i_sb, NO_MBCACHE))
-++		ce = mb_cache_entry_get(ext4_xattr_cache, bh->b_bdev,
-++					bh->b_blocknr);
-+ 	error = ext4_journal_get_write_access(handle, bh);
-+ 	if (error)
-+ 		goto out;
-+@@ -1037,8 +1040,10 @@ ext4_xattr_block_set(handle_t *handle, s
-+ #define header(x) ((struct ext4_xattr_header *)(x))
-+ 
-+ 	if (s->base) {
-+-		ce = mb_cache_entry_get(ext4_xattr_cache, bs->bh->b_bdev,
-+-					bs->bh->b_blocknr);
-++		if (!test_opt(inode->i_sb, NO_MBCACHE))
-++			ce = mb_cache_entry_get(ext4_xattr_cache,
-++						bs->bh->b_bdev,
-++						bs->bh->b_blocknr);
-+ 		error = ext4_journal_get_write_access(handle, bs->bh);
-+ 		if (error)
-+ 			goto cleanup;
-+@@ -1055,7 +1060,7 @@ ext4_xattr_block_set(handle_t *handle, s
-+ 				if (!IS_LAST_ENTRY(s->first))
-+ 					ext4_xattr_rehash(header(s->base),
-+ 							  s->here);
-+-				ext4_xattr_cache_insert(bs->bh);
-++				ext4_xattr_cache_insert(sb, bs->bh);
-+ 			}
-+ 			unlock_buffer(bs->bh);
-+ 			if (error == -EIO)
-+@@ -1138,7 +1143,8 @@ inserted:
-+ 				if (error)
-+ 					goto cleanup_dquot;
-+ 			}
-+-			mb_cache_entry_release(ce);
-++			if (ce)
-++				mb_cache_entry_release(ce);
-+ 			ce = NULL;
-+ 		} else if (bs->bh && s->base == bs->bh->b_data) {
-+ 			/* We were modifying this block in-place. */
-+@@ -1191,7 +1197,7 @@ getblk_failed:
-+ 			memcpy(new_bh->b_data, s->base, new_bh->b_size);
-+ 			set_buffer_uptodate(new_bh);
-+ 			unlock_buffer(new_bh);
-+-			ext4_xattr_cache_insert(new_bh);
-++			ext4_xattr_cache_insert(sb, new_bh);
-+ 			error = ext4_handle_dirty_xattr_block(handle,
-+ 							      inode, new_bh);
-+ 			if (error)
-+@@ -1837,12 +1843,15 @@ ext4_xattr_put_super(struct super_block
-+  * Returns 0, or a negative error number on failure.
-+  */
-+ static void
-+-ext4_xattr_cache_insert(struct buffer_head *bh)
-++ext4_xattr_cache_insert(struct super_block *sb, struct buffer_head *bh)
-+ {
-+ 	__u32 hash = le32_to_cpu(BHDR(bh)->h_hash);
-+ 	struct mb_cache_entry *ce;
-+ 	int error;
-+ 
-++	if (test_opt(sb, NO_MBCACHE))
-++		return;
-++
-+ 	ce = mb_cache_entry_alloc(ext4_xattr_cache, GFP_NOFS);
-+ 	if (!ce) {
-+ 		ea_bdebug(bh, "out of memory");
-+@@ -1915,6 +1924,8 @@ ext4_xattr_cache_find(struct inode *inod
-+ 	__u32 hash = le32_to_cpu(header->h_hash);
-+ 	struct mb_cache_entry *ce;
-+ 
-++	if (test_opt(inode->i_sb, NO_MBCACHE))
-++		return NULL;
-+ 	if (!header->h_hash)
-+ 		return NULL;  /* never share */
-+ 	ea_idebug(inode, "looking for cached blocks [%x]", (int)hash);
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch
-new file mode 100644
-index 0000000..11d6d93
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-fiemap.patch
-@@ -0,0 +1,111 @@
-+This patch adds direct EXT4_IOC_FIEMAP support to ldiskfs, for Lustre to call
-+without having to go through do_vfs_ioctl() (which isn't exported, and has a
-+number of other ioctls which are not suitable for Lustre). The actual FIEMAP
-+support is already in the kernel/ext4 for normal usage.
-+
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -585,7 +585,7 @@ enum {
-+ #define EXT4_IOC_GROUP_ADD		_IOW('f', 8, struct ext4_new_group_input)
-+ #define EXT4_IOC_MIGRATE		_IO('f', 9)
-+  /* note ioctl 10 reserved for an early version of the FIEMAP ioctl */
-+- /* note ioctl 11 reserved for filesystem-independent FIEMAP ioctl */
-++#define EXT4_IOC_FIEMAP			_IOWR('f', 11, struct fiemap)
-+ #define EXT4_IOC_ALLOC_DA_BLKS		_IO('f', 12)
-+ #define EXT4_IOC_MOVE_EXT		_IOWR('f', 15, struct move_extent)
-+ #define EXT4_IOC_RESIZE_FS		_IOW('f', 16, __u64)
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ioctl.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ioctl.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ioctl.c
-+@@ -214,6 +214,71 @@ swap_boot_out:
-+ 	return err;
-+ }
-+ 
-++/* So that the fiemap access checks can't overflow on 32 bit machines. */
-++#define FIEMAP_MAX_EXTENTS     (UINT_MAX / sizeof(struct fiemap_extent))
-++
-++static int fiemap_check_ranges(struct super_block *sb,
-++			       u64 start, u64 len, u64 *new_len)
-++{
-++	*new_len = len;
-++
-++	if (len == 0)
-++		return -EINVAL;
-++
-++	if (start > sb->s_maxbytes)
-++		return -EFBIG;
-++
-++	/*
-++	 * Shrink request scope to what the fs can actually handle.
-++	 */
-++	if ((len > sb->s_maxbytes) ||
-++	    (sb->s_maxbytes - len) < start)
-++		*new_len = sb->s_maxbytes - start;
-++
-++	return 0;
-++}
-++
-++int ioctl_fiemap(struct inode *inode, struct file *filp, unsigned long arg)
-++{
-++	struct fiemap fiemap;
-++	u64 len;
-++	struct fiemap_extent_info fieinfo = {0, };
-++	struct super_block *sb = inode->i_sb;
-++	int error = 0;
-++
-++	if (copy_from_user(&fiemap, (struct fiemap __user *) arg,
-++			   sizeof(struct fiemap)))
-++		 return -EFAULT;
-++
-++	if (fiemap.fm_extent_count > FIEMAP_MAX_EXTENTS)
-++		return -EINVAL;
-++
-++	error = fiemap_check_ranges(sb, fiemap.fm_start, fiemap.fm_length,
-++				    &len);
-++	if (error)
-++		return error;
-++
-++	fieinfo.fi_flags = fiemap.fm_flags;
-++	fieinfo.fi_extents_max = fiemap.fm_extent_count;
-++	fieinfo.fi_extents_start = (struct fiemap_extent *)(arg + sizeof(fiemap));
-++
-++	if (fiemap.fm_extent_count != 0 &&
-++	    !access_ok(VERIFY_WRITE, (void *)arg,
-++		       offsetof(typeof(fiemap), fm_extents[fiemap.fm_extent_count])))
-++		return -EFAULT;
-++
-++	if (fieinfo.fi_flags & FIEMAP_FLAG_SYNC)
-++		filemap_write_and_wait(inode->i_mapping);
-++
-++	error = ext4_fiemap(inode, &fieinfo, fiemap.fm_start, len);
-++	fiemap.fm_flags = fieinfo.fi_flags;
-++	fiemap.fm_mapped_extents = fieinfo.fi_extents_mapped;
-++	if (copy_to_user((char *)arg, &fiemap, sizeof(fiemap)))
-++		error = -EFAULT;
-++
-++	return error;
-++}
-++
-+ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
-+ {
-+ 	struct inode *inode = file_inode(filp);
-+@@ -532,6 +597,9 @@ group_add_out:
-+ 		mnt_drop_write_file(filp);
-+ 		return err;
-+ 	}
-++	case EXT4_IOC_FIEMAP: {
-++		return ioctl_fiemap(inode, filp, arg);
-++	}
-+ 
-+ 	case EXT4_IOC_ALLOC_DA_BLKS:
-+ 	{
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/fiemap.h
-+===================================================================
-+--- /dev/null
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/fiemap.h
-+@@ -0,0 +1,2 @@
-++
-++#include_next <fiemap.h>
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch
-new file mode 100644
-index 0000000..84e75e5
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-force_over_128tb.patch
-@@ -0,0 +1,57 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -60,6 +60,8 @@ static struct ext4_lazy_init *ext4_li_in
-+ static struct mutex ext4_li_mtx;
-+ static struct ext4_features *ext4_feat;
-+ 
-++static int force_over_128tb;
-++
-+ static int ext4_load_journal(struct super_block *, struct ext4_super_block *,
-+ 			     unsigned long journal_devnum);
-+ static int ext4_show_options(struct seq_file *seq, struct dentry *root);
-+@@ -1146,7 +1148,7 @@ enum {
-+ 	Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_mblk_io_submit,
-+ 	Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
-+ 	Opt_inode_readahead_blks, Opt_journal_ioprio,
-+-	Opt_mballoc,
-++	Opt_mballoc, Opt_force_over_128tb,
-+ 	Opt_dioread_nolock, Opt_dioread_lock,
-+ 	Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
-+ 	Opt_max_dir_size_kb,
-+@@ -1222,6 +1224,7 @@ static const match_table_t tokens = {
-+ 	{Opt_noauto_da_alloc, "noauto_da_alloc"},
-+ 	{Opt_dioread_nolock, "dioread_nolock"},
-+ 	{Opt_dioread_lock, "dioread_lock"},
-++	{Opt_force_over_128tb, "force_over_128tb"},
-+ 	{Opt_discard, "discard"},
-+ 	{Opt_nodiscard, "nodiscard"},
-+ 	{Opt_init_itable, "init_itable=%u"},
-+@@ -1468,6 +1471,9 @@ static int handle_mount_opt(struct super
-+ 	case Opt_iopen_nopriv:
-+ 	case Opt_mballoc:
-+ 		return 1;
-++	case Opt_force_over_128tb:
-++		force_over_128tb = 1;
-++		break;
-+ 	}
-+ 
-+ 	for (m = ext4_mount_opts; m->token != Opt_err; m++)
-+@@ -3718,6 +3724,16 @@ static int ext4_fill_super(struct super_
-+ 		goto failed_mount;
-+ 	}
-+ 
-++	if (ext4_blocks_count(es) > (8ULL << 32)) {
-++		if (force_over_128tb == 0) {
-++			printk(KERN_ERR "EXT4-fs does not support filesystems "
-++			       "greater than 128TB and can cause data corruption."
-++			       "Use \"force_over_128tb\" mount option to override."
-++			       "\n");
-++			goto failed_mount;
-++		}
-++	}
-++
-+ 	if (EXT4_BLOCKS_PER_GROUP(sb) == 0)
-+ 		goto cantfind_ext4;
-+ 
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch
-new file mode 100644
-index 0000000..2cae2f0
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-inode-version.patch
-@@ -0,0 +1,59 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+@@ -4145,11 +4145,11 @@ struct inode *ext4_iget(struct super_blo
-+ 	EXT4_INODE_GET_XTIME(i_atime, inode, raw_inode);
-+ 	EXT4_EINODE_GET_XTIME(i_crtime, ei, raw_inode);
-+ 
-+-	inode->i_version = le32_to_cpu(raw_inode->i_disk_version);
-++	ei->i_fs_version = le32_to_cpu(raw_inode->i_disk_version);
-+ 	if (EXT4_INODE_SIZE(inode->i_sb) > EXT4_GOOD_OLD_INODE_SIZE) {
-+ 		if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
-+-			inode->i_version |=
-+-			(__u64)(le32_to_cpu(raw_inode->i_version_hi)) << 32;
-++			ei->i_fs_version |= (__u64)(le32_to_cpu(raw_inode->i_version_hi))
-++									 << 32;
-+ 	}
-+ 
-+ 	ret = 0;
-+@@ -4365,11 +4365,11 @@ static int ext4_do_update_inode(handle_t
-+ 			raw_inode->i_block[block] = ei->i_data[block];
-+ 	}
-+ 
-+-	raw_inode->i_disk_version = cpu_to_le32(inode->i_version);
-++	raw_inode->i_disk_version = cpu_to_le32(ei->i_fs_version);
-+ 	if (ei->i_extra_isize) {
-+ 		if (EXT4_FITS_IN_INODE(raw_inode, ei, i_version_hi))
-+-			raw_inode->i_version_hi =
-+-			cpu_to_le32(inode->i_version >> 32);
-++			raw_inode->i_version_hi = cpu_to_le32(ei->i_fs_version
-++							      >> 32);
-+ 		raw_inode->i_extra_isize = cpu_to_le16(ei->i_extra_isize);
-+ 	}
-+ 
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ialloc.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
-+@@ -899,6 +899,7 @@ got:
-+ 	ei->i_dtime = 0;
-+ 	ei->i_block_group = group;
-+ 	ei->i_last_alloc_group = ~0;
-++	ei->i_fs_version = 0;
-+ 
-+ 	ext4_set_inode_flags(inode);
-+ 	if (IS_DIRSYNC(inode))
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -915,6 +915,8 @@ struct ext4_inode_info {
-+ 	tid_t i_sync_tid;
-+ 	tid_t i_datasync_tid;
-+ 
-++	__u64 i_fs_version;
-++
-+ 	/* Precomputed uuid+inum+igen checksum for seeding inode checksums */
-+ 	__u32 i_csum_seed;
-+ };
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch
-new file mode 100644
-index 0000000..f9c65d0
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-kill-dx_root.patch
-@@ -0,0 +1,235 @@
-+removes static definition of dx_root struct. so that "." and ".." dirent can
-+have extra data. This patch does not change any functionality but is required for
-+ext4_data_in_dirent patch.
-+ 
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -201,22 +201,13 @@ struct dx_entry
-+  * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
-+  */
-+ 
-+-struct dx_root
-++struct dx_root_info
-+ {
-+-	struct fake_dirent dot;
-+-	char dot_name[4];
-+-	struct fake_dirent dotdot;
-+-	char dotdot_name[4];
-+-	struct dx_root_info
-+-	{
-+-		__le32 reserved_zero;
-+-		u8 hash_version;
-+-		u8 info_length; /* 8 */
-+-		u8 indirect_levels;
-+-		u8 unused_flags;
-+-	}
-+-	info;
-+-	struct dx_entry	entries[0];
-++	__le32 reserved_zero;
-++	u8 hash_version;
-++	u8 info_length; /* 8 */
-++	u8 indirect_levels;
-++	u8 unused_flags;
-+ };
-+ 
-+ struct dx_node
-+@@ -519,6 +510,16 @@ ext4_next_entry(struct ext4_dir_entry_2
-+  * Future: use high four bits of block for coalesce-on-delete flags
-+  * Mask them off for now.
-+  */
-++struct dx_root_info * dx_get_dx_info(struct ext4_dir_entry_2 *de)
-++{
-++       /* get dotdot first */
-++       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(1));
-++
-++       /* dx root info is after dotdot entry */
-++       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(2));
-++
-++       return (struct dx_root_info *) de;
-++}
-+ 
-+ static inline ext4_lblk_t dx_get_block(struct dx_entry *entry)
-+ {
-+@@ -681,7 +682,7 @@ dx_probe(const struct qstr *d_name, stru
-+ {
-+ 	unsigned count, indirect;
-+ 	struct dx_entry *at, *entries, *p, *q, *m;
-+-	struct dx_root *root;
-++	struct dx_root_info * info;
-+ 	struct buffer_head *bh;
-+ 	struct dx_frame *frame = frame_in;
-+ 	u32 hash;
-+@@ -692,17 +693,18 @@ dx_probe(const struct qstr *d_name, stru
-+ 		*err = PTR_ERR(bh);
-+ 		goto fail;
-+ 	}
-+-	root = (struct dx_root *) bh->b_data;
-+-	if (root->info.hash_version != DX_HASH_TEA &&
-+-	    root->info.hash_version != DX_HASH_HALF_MD4 &&
-+-	    root->info.hash_version != DX_HASH_LEGACY) {
-++
-++	info = dx_get_dx_info((struct ext4_dir_entry_2*)bh->b_data);
-++	if (info->hash_version != DX_HASH_TEA &&
-++	    info->hash_version != DX_HASH_HALF_MD4 &&
-++	    info->hash_version != DX_HASH_LEGACY) {
-+ 		ext4_warning(dir->i_sb, "Unrecognised inode hash code %d for directory "
-+-                             "#%lu", root->info.hash_version, dir->i_ino);
-++                             "#%lu", info->hash_version, dir->i_ino);
-+ 		brelse(bh);
-+ 		*err = ERR_BAD_DX_DIR;
-+ 		goto fail;
-+ 	}
-+-	hinfo->hash_version = root->info.hash_version;
-++	hinfo->hash_version = info->hash_version;
-+ 	if (hinfo->hash_version <= DX_HASH_TEA)
-+ 		hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
-+ 	hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed;
-+@@ -710,27 +712,26 @@ dx_probe(const struct qstr *d_name, stru
-+ 		ext4fs_dirhash(d_name->name, d_name->len, hinfo);
-+ 	hash = hinfo->hash;
-+ 
-+-	if (root->info.unused_flags & 1) {
-++	if (info->unused_flags & 1) {
-+ 		ext4_warning(dir->i_sb, "Unimplemented inode hash flags: %#06x",
-+-			     root->info.unused_flags);
-++			     info->unused_flags);
-+ 		brelse(bh);
-+ 		*err = ERR_BAD_DX_DIR;
-+ 		goto fail;
-+ 	}
-+ 
-+-	if ((indirect = root->info.indirect_levels) > 1) {
-++	if ((indirect = info->indirect_levels) > 1) {
-+ 		ext4_warning(dir->i_sb, "Unimplemented inode hash depth: %#06x",
-+-			     root->info.indirect_levels);
-++			     info->indirect_levels);
-+ 		brelse(bh);
-+ 		*err = ERR_BAD_DX_DIR;
-+ 		goto fail;
-+ 	}
-+ 
-+-	entries = (struct dx_entry *) (((char *)&root->info) +
-+-				       root->info.info_length);
-++	entries = (struct dx_entry *) (((char *)info) + info->info_length);
-+ 
-+ 	if (dx_get_limit(entries) != dx_root_limit(dir,
-+-						   root->info.info_length)) {
-++						   info->info_length)) {
-+ 		ext4_warning(dir->i_sb, "dx entry: limit != root limit");
-+ 		brelse(bh);
-+ 		*err = ERR_BAD_DX_DIR;
-+@@ -815,10 +816,12 @@ fail:
-+ 
-+ static void dx_release (struct dx_frame *frames)
-+ {
-++	struct dx_root_info *info;
-+ 	if (frames[0].bh == NULL)
-+ 		return;
-+ 
-+-	if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
-++	info = dx_get_dx_info((struct ext4_dir_entry_2*)frames[0].bh->b_data);
-++	if (info->indirect_levels)
-+ 		brelse(frames[1].bh);
-+ 	brelse(frames[0].bh);
-+ }
-+@@ -1795,10 +1798,9 @@ static int make_indexed_dir(handle_t *ha
-+ 	const char	*name = dentry->d_name.name;
-+ 	int		namelen = dentry->d_name.len;
-+ 	struct buffer_head *bh2;
-+-	struct dx_root	*root;
-+ 	struct dx_frame	frames[2], *frame;
-+ 	struct dx_entry *entries;
-+-	struct ext4_dir_entry_2	*de, *de2;
-++	struct ext4_dir_entry_2 *de, *de2, *dot_de, *dotdot_de;
-+ 	struct ext4_dir_entry_tail *t;
-+ 	char		*data1, *top;
-+ 	unsigned	len;
-+@@ -1806,7 +1808,7 @@ static int make_indexed_dir(handle_t *ha
-+ 	unsigned	blocksize;
-+ 	struct dx_hash_info hinfo;
-+ 	ext4_lblk_t  block;
-+-	struct fake_dirent *fde;
-++	struct dx_root_info *dx_info;
-+ 	int		csum_size = 0;
-+ 
-+ 	if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
-+@@ -1821,18 +1823,19 @@ static int make_indexed_dir(handle_t *ha
-+ 		brelse(bh);
-+ 		return retval;
-+ 	}
-+-	root = (struct dx_root *) bh->b_data;
-++
-++	dot_de = (struct ext4_dir_entry_2 *) bh->b_data;
-++	dotdot_de = ext4_next_entry(dot_de, blocksize);
-+ 
-+ 	/* The 0th block becomes the root, move the dirents out */
-+-	fde = &root->dotdot;
-+-	de = (struct ext4_dir_entry_2 *)((char *)fde +
-+-		ext4_rec_len_from_disk(fde->rec_len, blocksize));
-+-	if ((char *) de >= (((char *) root) + blocksize)) {
-++	de = (struct ext4_dir_entry_2 *)((char *)dotdot_de +
-++		ext4_rec_len_from_disk(dotdot_de->rec_len, blocksize));
-++	if ((char *) de >= (((char *) dot_de) + blocksize)) {
-+ 		EXT4_ERROR_INODE(dir, "invalid rec_len for '..'");
-+ 		brelse(bh);
-+ 		return -EIO;
-+ 	}
-+-	len = ((char *) root) + (blocksize - csum_size) - (char *) de;
-++	len = ((char *) dot_de) + (blocksize - csum_size) - (char *) de;
-+ 
-+ 	/* Allocate new block for the 0th block's dirents */
-+ 	bh2 = ext4_append(handle, dir, &block);
-+@@ -1858,19 +1861,23 @@ static int make_indexed_dir(handle_t *ha
-+ 	}
-+ 
-+ 	/* Initialize the root; the dot dirents already exist */
-+-	de = (struct ext4_dir_entry_2 *) (&root->dotdot);
-+-	de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(2),
-+-					   blocksize);
-+-	memset (&root->info, 0, sizeof(root->info));
-+-	root->info.info_length = sizeof(root->info);
-+-	root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
-+-	entries = root->entries;
-++	dotdot_de->rec_len = ext4_rec_len_to_disk(blocksize -
-++			le16_to_cpu(dot_de->rec_len), blocksize);
-++
-++	/* initialize hashing info */
-++	dx_info = dx_get_dx_info(dot_de);
-++	memset (dx_info, 0, sizeof(*dx_info));
-++	dx_info->info_length = sizeof(*dx_info);
-++	dx_info->hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
-++
-++	entries = (void *)dx_info + sizeof(*dx_info);
-++
-+ 	dx_set_block(entries, 1);
-+ 	dx_set_count(entries, 1);
-+-	dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info)));
-++	dx_set_limit(entries, dx_root_limit(dir, sizeof(*dx_info)));
-+ 
-+ 	/* Initialize as for dx_probe */
-+-	hinfo.hash_version = root->info.hash_version;
-++	hinfo.hash_version = dx_info->hash_version;
-+ 	if (hinfo.hash_version <= DX_HASH_TEA)
-+ 		hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
-+ 	hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
-+@@ -2160,6 +2167,7 @@ static int ext4_dx_add_entry(handle_t *h
-+ 				goto journal_error;
-+ 			brelse (bh2);
-+ 		} else {
-++			struct dx_root_info * info;
-+ 			dxtrace(printk(KERN_DEBUG
-+ 				       "Creating second level index...\n"));
-+ 			memcpy((char *) entries2, (char *) entries,
-+@@ -2169,7 +2177,9 @@ static int ext4_dx_add_entry(handle_t *h
-+ 			/* Set up root */
-+ 			dx_set_count(entries, 1);
-+ 			dx_set_block(entries + 0, newblock);
-+-			((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
-++			info = dx_get_dx_info((struct ext4_dir_entry_2*)
-++					frames[0].bh->b_data);
-++			info->indirect_levels = 1;
-+ 
-+ 			/* Add new access path frame */
-+ 			frame = frames + 1;
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch
-new file mode 100644
-index 0000000..4bbb6f5
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-large-eas.patch
-@@ -0,0 +1,785 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -1533,6 +1533,7 @@ static inline void ext4_clear_state_flag
-+ 					 EXT4_FEATURE_INCOMPAT_EXTENTS| \
-+ 					 EXT4_FEATURE_INCOMPAT_64BIT| \
-+ 					 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
-++					 EXT4_FEATURE_INCOMPAT_EA_INODE| \
-+ 					 EXT4_FEATURE_INCOMPAT_MMP |	\
-+ 					 EXT4_FEATURE_INCOMPAT_DIRDATA| \
-+ 					 EXT4_FEATURE_INCOMPAT_INLINE_DATA)
-+@@ -1940,6 +1941,12 @@ struct mmpd_data {
-+ #endif
-+ 
-+ /*
-++ * Maximum size of xattr attributes for FEATURE_INCOMPAT_EA_INODE 1Mb
-++ * This limit is arbitrary, but is reasonable for the xattr API.
-++ */
-++#define EXT4_XATTR_MAX_LARGE_EA_SIZE    (1024 * 1024)
-++
-++/*
-+  * Function prototypes
-+  */
-+ 
-+@@ -2163,6 +2170,7 @@ extern void ext4_set_inode_flags(struct
-+ extern void ext4_get_inode_flags(struct ext4_inode_info *);
-+ extern int ext4_alloc_da_blocks(struct inode *inode);
-+ extern void ext4_set_aops(struct inode *inode);
-++extern int ext4_meta_trans_blocks(struct inode *, int nrblocks, int chunk);
-+ extern int ext4_writepage_trans_blocks(struct inode *);
-+ extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks);
-+ extern int ext4_block_truncate_page(handle_t *handle,
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+@@ -136,8 +136,6 @@ static void ext4_invalidatepage(struct p
-+ 				unsigned int length);
-+ static int __ext4_journalled_writepage(struct page *page, unsigned int len);
-+ static int ext4_bh_delay_or_unwritten(handle_t *handle, struct buffer_head *bh);
-+-static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
-+-				  int pextents);
-+ 
-+ /*
-+  * Test whether an inode is a fast symlink.
-+@@ -4716,7 +4714,7 @@ static int ext4_index_trans_blocks(struc
-+  *
-+  * Also account for superblock, inode, quota and xattr blocks
-+  */
-+-static int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
-++int ext4_meta_trans_blocks(struct inode *inode, int lblocks,
-+ 				  int pextents)
-+ {
-+ 	ext4_group_t groups, ngroups = ext4_get_groups_count(inode->i_sb);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
-+@@ -220,19 +220,26 @@ ext4_xattr_check_block(struct inode *ino
-+ }
-+ 
-+ static inline int
-+-ext4_xattr_check_entry(struct ext4_xattr_entry *entry, size_t size)
-++ext4_xattr_check_entry(struct ext4_xattr_entry *entry, size_t size,
-++		       struct inode *inode)
-+ {
-+ 	size_t value_size = le32_to_cpu(entry->e_value_size);
-+ 
-+-	if (entry->e_value_block != 0 || value_size > size ||
-+-	    le16_to_cpu(entry->e_value_offs) + value_size > size)
-++	if ((entry->e_value_inum == 0) &&
-++	   (le16_to_cpu(entry->e_value_offs) + value_size > size))
-++		return -EIO;
-++	if (entry->e_value_inum != 0 &&
-++	    (le32_to_cpu(entry->e_value_inum) < EXT4_FIRST_INO(inode->i_sb) ||
-++	     le32_to_cpu(entry->e_value_inum) >
-++	     le32_to_cpu(EXT4_SB(inode->i_sb)->s_es->s_inodes_count)))
-+ 		return -EIO;
-+ 	return 0;
-+ }
-+ 
-+ static int
-+ ext4_xattr_find_entry(struct ext4_xattr_entry **pentry, int name_index,
-+-		      const char *name, size_t size, int sorted)
-++		      const char *name, size_t size, int sorted,
-++		      struct inode *inode)
-+ {
-+ 	struct ext4_xattr_entry *entry;
-+ 	size_t name_len;
-+@@ -252,11 +259,103 @@ ext4_xattr_find_entry(struct ext4_xattr_
-+ 			break;
-+ 	}
-+ 	*pentry = entry;
-+-	if (!cmp && ext4_xattr_check_entry(entry, size))
-++	if (!cmp && ext4_xattr_check_entry(entry, size, inode))
-+ 			return -EIO;
-+ 	return cmp ? -ENODATA : 0;
-+ }
-+ 
-++/*
-++ * Read the EA value from an inode.
-++ */
-++static int
-++ext4_xattr_inode_read(struct inode *ea_inode, void *buf, size_t *size)
-++{
-++	unsigned long block = 0;
-++	struct buffer_head *bh = NULL;
-++	int err, blocksize;
-++	size_t csize, ret_size = 0;
-++
-++	if (*size == 0)
-++		return 0;
-++
-++	blocksize = ea_inode->i_sb->s_blocksize;
-++
-++	while (ret_size < *size) {
-++		csize = (*size - ret_size) > blocksize ? blocksize :
-++							*size - ret_size;
-++		bh = ext4_bread(NULL, ea_inode, block, 0, &err);
-++		if (!bh) {
-++			*size = ret_size;
-++			return err;
-++		}
-++		memcpy(buf, bh->b_data, csize);
-++		brelse(bh);
-++
-++		buf += csize;
-++		block += 1;
-++		ret_size += csize;
-++	}
-++
-++	*size = ret_size;
-++
-++	return err;
-++}
-++
-++struct inode *ext4_xattr_inode_iget(struct inode *parent, int ea_ino, int *err)
-++{
-++	struct inode *ea_inode = NULL;
-++
-++	ea_inode = ext4_iget(parent->i_sb, ea_ino);
-++	if (IS_ERR(ea_inode) || is_bad_inode(ea_inode)) {
-++		ext4_error(parent->i_sb, "error while reading EA inode %d",
-++			   ea_ino);
-++		*err = -EIO;
-++		return NULL;
-++	}
-++
-++	if (ea_inode->i_xattr_inode_parent != parent->i_ino ||
-++	    ea_inode->i_generation != parent->i_generation) {
-++		ext4_error(parent->i_sb, "Backpointer from EA inode %d "
-++			   "to parent invalid.", ea_ino);
-++		*err = -EINVAL;
-++		goto error;
-++	}
-++
-++	if (!(EXT4_I(ea_inode)->i_flags & EXT4_EA_INODE_FL)) {
-++		ext4_error(parent->i_sb, "EA inode %d does not have "
-++			   "EXT4_EA_INODE_FL flag set.\n", ea_ino);
-++		*err = -EINVAL;
-++		goto error;
-++	}
-++
-++	*err = 0;
-++	return ea_inode;
-++
-++error:
-++	iput(ea_inode);
-++	return NULL;
-++}
-++
-++/*
-++ * Read the value from the EA inode.
-++ */
-++static int
-++ext4_xattr_inode_get(struct inode *inode, int ea_ino, void *buffer,
-++		     size_t *size)
-++{
-++	struct inode *ea_inode = NULL;
-++	int err;
-++
-++	ea_inode = ext4_xattr_inode_iget(inode, ea_ino, &err);
-++	if (err)
-++		return err;
-++
-++	err = ext4_xattr_inode_read(ea_inode, buffer, size);
-++	iput(ea_inode);
-++
-++	return err;
-++}
-++
-+ static int
-+ ext4_xattr_block_get(struct inode *inode, int name_index, const char *name,
-+ 		     void *buffer, size_t buffer_size)
-+@@ -288,7 +387,8 @@ bad_block:
-+ 	}
-+ 	ext4_xattr_cache_insert(bh);
-+ 	entry = BFIRST(bh);
-+-	error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1);
-++	error = ext4_xattr_find_entry(&entry, name_index, name, bh->b_size, 1,
-++				      inode);
-+ 	if (error == -EIO)
-+ 		goto bad_block;
-+ 	if (error)
-+@@ -298,8 +398,16 @@ bad_block:
-+ 		error = -ERANGE;
-+ 		if (size > buffer_size)
-+ 			goto cleanup;
-+-		memcpy(buffer, bh->b_data + le16_to_cpu(entry->e_value_offs),
-+-		       size);
-++		if (entry->e_value_inum != 0) {
-++			error = ext4_xattr_inode_get(inode,
-++					     le32_to_cpu(entry->e_value_inum),
-++					     buffer, &size);
-++			if (error)
-++				goto cleanup;
-++		} else {
-++			memcpy(buffer, bh->b_data +
-++			       le16_to_cpu(entry->e_value_offs), size);
-++		}
-+ 	}
-+ 	error = size;
-+ 
-+@@ -333,7 +441,7 @@ ext4_xattr_ibody_get(struct inode *inode
-+ 	if (error)
-+ 		goto cleanup;
-+ 	error = ext4_xattr_find_entry(&entry, name_index, name,
-+-				      end - (void *)entry, 0);
-++				      end - (void *)entry, 0, inode);
-+ 	if (error)
-+ 		goto cleanup;
-+ 	size = le32_to_cpu(entry->e_value_size);
-+@@ -341,8 +449,16 @@ ext4_xattr_ibody_get(struct inode *inode
-+ 		error = -ERANGE;
-+ 		if (size > buffer_size)
-+ 			goto cleanup;
-+-		memcpy(buffer, (void *)IFIRST(header) +
-+-		       le16_to_cpu(entry->e_value_offs), size);
-++		if (entry->e_value_inum != 0) {
-++			error = ext4_xattr_inode_get(inode,
-++					     le32_to_cpu(entry->e_value_inum),
-++					     buffer, &size);
-++			if (error)
-++				goto cleanup;
-++		} else {
-++			memcpy(buffer, (void *)IFIRST(header) +
-++			       le16_to_cpu(entry->e_value_offs), size);
-++		}
-+ 	}
-+ 	error = size;
-+ 
-+@@ -568,7 +684,7 @@ static size_t ext4_xattr_free_space(stru
-+ {
-+ 	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
-+ 		*total += EXT4_XATTR_LEN(last->e_name_len);
-+-		if (!last->e_value_block && last->e_value_size) {
-++		if (last->e_value_inum == 0 && last->e_value_size > 0) {
-+ 			size_t offs = le16_to_cpu(last->e_value_offs);
-+ 			if (offs < *min_offs)
-+ 				*min_offs = offs;
-+@@ -577,16 +693,171 @@ static size_t ext4_xattr_free_space(stru
-+ 	return (*min_offs - ((void *)last - base) - sizeof(__u32));
-+ }
-+ 
-++/*
-++ * Write the value of the EA in an inode.
-++ */
-++static int
-++ext4_xattr_inode_write(handle_t *handle, struct inode *ea_inode,
-++		       const void *buf, int bufsize)
-++{
-++	struct buffer_head *bh = NULL;
-++	unsigned long block = 0;
-++	unsigned blocksize = ea_inode->i_sb->s_blocksize;
-++	unsigned max_blocks = (bufsize + blocksize - 1) >> ea_inode->i_blkbits;
-++	int csize, wsize = 0;
-++	int ret = 0;
-++	int retries = 0;
-++
-++retry:
-++	while (ret >= 0 && ret < max_blocks) {
-++		struct ext4_map_blocks map;
-++		map.m_lblk = block += ret;
-++		map.m_len = max_blocks -= ret;
-++
-++		ret = ext4_map_blocks(handle, ea_inode, &map, EXT4_GET_BLOCKS_CREATE);
-++		if (ret <= 0) {
-++			ext4_mark_inode_dirty(handle, ea_inode);
-++			if (ret == -ENOSPC &&
-++			    ext4_should_retry_alloc(ea_inode->i_sb, &retries)) {
-++				ret = 0;
-++				goto retry;
-++			}
-++			break;
-++		}
-++	}
-++
-++	if (ret < 0)
-++		return ret;
-++
-++	block = 0;
-++	while (wsize < bufsize) {
-++		if (bh != NULL)
-++			brelse(bh);
-++		csize = (bufsize - wsize) > blocksize ? blocksize :
-++								bufsize - wsize;
-++		bh = ext4_getblk(handle, ea_inode, block, 0, &ret);
-++		if (!bh)
-++			goto out;
-++		ret = ext4_journal_get_write_access(handle, bh);
-++		if (ret)
-++			goto out;
-++
-++		memcpy(bh->b_data, buf, csize);
-++		set_buffer_uptodate(bh);
-++		ext4_journal_dirty_metadata(handle, bh);
-++
-++		buf += csize;
-++		wsize += csize;
-++		block += 1;
-++	}
-++
-++	i_size_write(ea_inode, wsize);
-++	ext4_update_i_disksize(ea_inode, wsize);
-++
-++	ext4_mark_inode_dirty(handle, ea_inode);
-++
-++out:
-++	brelse(bh);
-++
-++	return ret;
-++}
-++
-++/*
-++ * Create an inode to store the value of a large EA.
-++ */
-++static struct inode *
-++ext4_xattr_inode_create(handle_t *handle, struct inode *inode)
-++{
-++	struct inode *ea_inode = NULL;
-++
-++	/*
-++	 * Let the next inode be the goal, so we try and allocate the EA inode
-++	 * in the same group, or nearby one.
-++	 */
-++	ea_inode = ext4_new_inode(handle, inode->i_sb->s_root->d_inode,
-++				  S_IFREG|0600, NULL, inode->i_ino + 1, NULL);
-++
-++	if (!IS_ERR(ea_inode)) {
-++		ea_inode->i_op = &ext4_file_inode_operations;
-++		ea_inode->i_fop = &ext4_file_operations;
-++		ext4_set_aops(ea_inode);
-++		ea_inode->i_generation = inode->i_generation;
-++		EXT4_I(ea_inode)->i_flags |= EXT4_EA_INODE_FL;
-++
-++		/*
-++		 * A back-pointer from EA inode to parent inode will be useful
-++		 * for e2fsck.
-++		 */
-++		ea_inode->i_xattr_inode_parent = inode->i_ino;
-++		unlock_new_inode(ea_inode);
-++	}
-++
-++	return ea_inode;
-++}
-++
-++/*
-++ * Unlink the inode storing the value of the EA.
-++ */
-+ static int
-+-ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
-++ext4_xattr_inode_unlink(struct inode *inode, int ea_ino)
-++{
-++	struct inode *ea_inode = NULL;
-++	int err;
-++
-++	ea_inode = ext4_xattr_inode_iget(inode, ea_ino, &err);
-++	if (err)
-++		return err;
-++
-++	clear_nlink(ea_inode);
-++	iput(ea_inode);
-++
-++	return 0;
-++}
-++
-++/*
-++ * Add value of the EA in an inode.
-++ */
-++static int
-++ext4_xattr_inode_set(handle_t *handle, struct inode *inode, int *ea_ino,
-++		     const void *value, size_t value_len)
-++{
-++	struct inode *ea_inode = NULL;
-++	int err;
-++
-++	/* Create an inode for the EA value */
-++	ea_inode = ext4_xattr_inode_create(handle, inode);
-++	if (IS_ERR(ea_inode))
-++		return -1;
-++
-++	err = ext4_xattr_inode_write(handle, ea_inode, value, value_len);
-++	if (err)
-++		clear_nlink(ea_inode);
-++	else
-++		*ea_ino = ea_inode->i_ino;
-++
-++	iput(ea_inode);
-++
-++	return err;
-++}
-++
-++static int
-++ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s,
-++		     handle_t *handle, struct inode *inode)
-+ {
-+ 	struct ext4_xattr_entry *last;
-+ 	size_t free, min_offs = s->end - s->base, name_len = strlen(i->name);
-++	int in_inode = i->in_inode;
-++
-++	if (EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
-++		 EXT4_FEATURE_INCOMPAT_EA_INODE) &&
-++	    (EXT4_XATTR_SIZE(i->value_len) >
-++	     EXT4_XATTR_MIN_LARGE_EA_SIZE(inode->i_sb->s_blocksize)))
-++		in_inode = 1;
-+ 
-+ 	/* Compute min_offs and last. */
-+ 	last = s->first;
-+ 	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
-+-		if (!last->e_value_block && last->e_value_size) {
-++		if (last->e_value_inum == 0 && last->e_value_size > 0) {
-+ 			size_t offs = le16_to_cpu(last->e_value_offs);
-+ 			if (offs < min_offs)
-+ 				min_offs = offs;
-+@@ -594,16 +865,21 @@ ext4_xattr_set_entry(struct ext4_xattr_i
-+ 	}
-+ 	free = min_offs - ((void *)last - s->base) - sizeof(__u32);
-+ 	if (!s->not_found) {
-+-		if (!s->here->e_value_block && s->here->e_value_size) {
-++		if (!in_inode && s->here->e_value_inum == 0 &&
-++		    s->here->e_value_size > 0) {
-+ 			size_t size = le32_to_cpu(s->here->e_value_size);
-+ 			free += EXT4_XATTR_SIZE(size);
-+ 		}
-+ 		free += EXT4_XATTR_LEN(name_len);
-+ 	}
-+ 	if (i->value) {
-+-		if (free < EXT4_XATTR_SIZE(i->value_len) ||
-+-		    free < EXT4_XATTR_LEN(name_len) +
-+-			   EXT4_XATTR_SIZE(i->value_len))
-++		size_t value_len = EXT4_XATTR_SIZE(i->value_len);
-++
-++		if (in_inode)
-++			value_len = 0;
-++
-++		if (free < value_len ||
-++		    free < EXT4_XATTR_LEN(name_len) + value_len)
-+ 			return -ENOSPC;
-+ 	}
-+ 
-+@@ -617,7 +893,8 @@ ext4_xattr_set_entry(struct ext4_xattr_i
-+ 		s->here->e_name_len = name_len;
-+ 		memcpy(s->here->e_name, i->name, name_len);
-+ 	} else {
-+-		if (!s->here->e_value_block && s->here->e_value_size) {
-++		if (s->here->e_value_offs > 0 && s->here->e_value_inum == 0 &&
-++		    s->here->e_value_size > 0) {
-+ 			void *first_val = s->base + min_offs;
-+ 			size_t offs = le16_to_cpu(s->here->e_value_offs);
-+ 			void *val = s->base + offs;
-+@@ -651,13 +928,17 @@ ext4_xattr_set_entry(struct ext4_xattr_i
-+ 			last = s->first;
-+ 			while (!IS_LAST_ENTRY(last)) {
-+ 				size_t o = le16_to_cpu(last->e_value_offs);
-+-				if (!last->e_value_block &&
-+-				    last->e_value_size && o < offs)
-++				if (last->e_value_size > 0 && o < offs)
-+ 					last->e_value_offs =
-+ 						cpu_to_le16(o + size);
-+ 				last = EXT4_XATTR_NEXT(last);
-+ 			}
-+ 		}
-++		if (s->here->e_value_inum != 0) {
-++			ext4_xattr_inode_unlink(inode,
-++					le32_to_cpu(s->here->e_value_inum));
-++			s->here->e_value_inum = 0;
-++		}
-+ 		if (!i->value) {
-+ 			/* Remove the old name. */
-+ 			size_t size = EXT4_XATTR_LEN(name_len);
-+@@ -671,10 +952,17 @@ ext4_xattr_set_entry(struct ext4_xattr_i
-+ 	if (i->value) {
-+ 		/* Insert the new value. */
-+ 		s->here->e_value_size = cpu_to_le32(i->value_len);
-+-		if (i->value_len) {
-++		if (in_inode) {
-++			int ea_ino = le32_to_cpu(s->here->e_value_inum);
-++			ext4_xattr_inode_set(handle, inode, &ea_ino, i->value,
-++					     i->value_len);
-++			s->here->e_value_inum = cpu_to_le32(ea_ino);
-++			s->here->e_value_offs = 0;
-++		} else if (i->value_len) {
-+ 			size_t size = EXT4_XATTR_SIZE(i->value_len);
-+ 			void *val = s->base + min_offs - size;
-+ 			s->here->e_value_offs = cpu_to_le16(min_offs - size);
-++			s->here->e_value_inum = 0;
-+ 			if (i->value == EXT4_ZERO_XATTR_VALUE) {
-+ 				memset(val, 0, size);
-+ 			} else {
-+@@ -724,7 +1012,7 @@ ext4_xattr_block_find(struct inode *inod
-+ 		bs->s.end = bs->bh->b_data + bs->bh->b_size;
-+ 		bs->s.here = bs->s.first;
-+ 		error = ext4_xattr_find_entry(&bs->s.here, i->name_index,
-+-					      i->name, bs->bh->b_size, 1);
-++					     i->name, bs->bh->b_size, 1, inode);
-+ 		if (error && error != -ENODATA)
-+ 			goto cleanup;
-+ 		bs->s.not_found = error;
-+@@ -748,8 +1036,6 @@ ext4_xattr_block_set(handle_t *handle, s
-+ 
-+ #define header(x) ((struct ext4_xattr_header *)(x))
-+ 
-+-	if (i->value && i->value_len > sb->s_blocksize)
-+-		return -ENOSPC;
-+ 	if (s->base) {
-+ 		ce = mb_cache_entry_get(ext4_xattr_cache, bs->bh->b_bdev,
-+ 					bs->bh->b_blocknr);
-+@@ -764,7 +1050,7 @@ ext4_xattr_block_set(handle_t *handle, s
-+ 				ce = NULL;
-+ 			}
-+ 			ea_bdebug(bs->bh, "modifying in-place");
-+-			error = ext4_xattr_set_entry(i, s);
-++			error = ext4_xattr_set_entry(i, s, handle, inode);
-+ 			if (!error) {
-+ 				if (!IS_LAST_ENTRY(s->first))
-+ 					ext4_xattr_rehash(header(s->base),
-+@@ -815,7 +1101,7 @@ ext4_xattr_block_set(handle_t *handle, s
-+ 		s->end = s->base + sb->s_blocksize;
-+ 	}
-+ 
-+-	error = ext4_xattr_set_entry(i, s);
-++	error = ext4_xattr_set_entry(i, s, handle, inode);
-+ 	if (error == -EIO)
-+ 		goto bad_block;
-+ 	if (error)
-+@@ -963,7 +1249,7 @@ int ext4_xattr_ibody_find(struct inode *
-+ 		/* Find the named attribute. */
-+ 		error = ext4_xattr_find_entry(&is->s.here, i->name_index,
-+ 					      i->name, is->s.end -
-+-					      (void *)is->s.base, 0);
-++					      (void *)is->s.base, 0, inode);
-+ 		if (error && error != -ENODATA)
-+ 			return error;
-+ 		is->s.not_found = error;
-+@@ -981,7 +1267,7 @@ int ext4_xattr_ibody_inline_set(handle_t
-+ 
-+ 	if (EXT4_I(inode)->i_extra_isize == 0)
-+ 		return -ENOSPC;
-+-	error = ext4_xattr_set_entry(i, s);
-++	error = ext4_xattr_set_entry(i, s, handle, inode);
-+ 	if (error) {
-+ 		if (error == -ENOSPC &&
-+ 		    ext4_has_inline_data(inode)) {
-+@@ -993,7 +1279,7 @@ int ext4_xattr_ibody_inline_set(handle_t
-+ 			error = ext4_xattr_ibody_find(inode, i, is);
-+ 			if (error)
-+ 				return error;
-+-			error = ext4_xattr_set_entry(i, s);
-++			error = ext4_xattr_set_entry(i, s, handle, inode);
-+ 		}
-+ 		if (error)
-+ 			return error;
-+@@ -1019,7 +1305,7 @@ static int ext4_xattr_ibody_set(handle_t
-+ 
-+ 	if (EXT4_I(inode)->i_extra_isize == 0)
-+ 		return -ENOSPC;
-+-	error = ext4_xattr_set_entry(i, s);
-++	error = ext4_xattr_set_entry(i, s, handle, inode);
-+ 	if (error)
-+ 		return error;
-+ 	header = IHDR(inode, ext4_raw_inode(&is->iloc));
-+@@ -1055,7 +1341,7 @@ ext4_xattr_set_handle(handle_t *handle,
-+ 		.name = name,
-+ 		.value = value,
-+ 		.value_len = value_len,
-+-
-++		.in_inode = 0,
-+ 	};
-+ 	struct ext4_xattr_ibody_find is = {
-+ 		.s = { .not_found = -ENODATA, },
-+@@ -1120,6 +1406,15 @@ ext4_xattr_set_handle(handle_t *handle,
-+ 					goto cleanup;
-+ 			}
-+ 			error = ext4_xattr_block_set(handle, inode, &i, &bs);
-++			if (EXT4_HAS_INCOMPAT_FEATURE(inode->i_sb,
-++					EXT4_FEATURE_INCOMPAT_EA_INODE) &&
-++			    error == -ENOSPC) {
-++				/* xattr not fit to block, store at external
-++				 * inode */
-++				i.in_inode = 1;
-++				error = ext4_xattr_ibody_set(handle, inode,
-++							     &i, &is);
-++			}
-+ 			if (error)
-+ 				goto cleanup;
-+ 			if (!is.s.not_found) {
-+@@ -1167,9 +1462,22 @@ ext4_xattr_set(struct inode *inode, int
-+ 	       const void *value, size_t value_len, int flags)
-+ {
-+ 	handle_t *handle;
-++	struct super_block *sb = inode->i_sb;
-+ 	int error, retries = 0;
-+ 	int credits = ext4_jbd2_credits_xattr(inode);
-+ 
-++	if ((value_len >= EXT4_XATTR_MIN_LARGE_EA_SIZE(sb->s_blocksize)) &&
-++	    EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EA_INODE)) {
-++		int nrblocks = (value_len + sb->s_blocksize - 1) >>
-++					sb->s_blocksize_bits;
-++
-++		/* For new inode */
-++		credits += EXT4_SINGLEDATA_TRANS_BLOCKS(sb) + 3;
-++
-++		/* For data blocks of EA inode */
-++		credits += ext4_meta_trans_blocks(inode, nrblocks, 0);
-++	}
-++
-+ retry:
-+ 	handle = ext4_journal_start(inode, EXT4_HT_XATTR, credits);
-+ 	if (IS_ERR(handle)) {
-+@@ -1181,7 +1489,7 @@ retry:
-+ 					      value, value_len, flags);
-+ 		error2 = ext4_journal_stop(handle);
-+ 		if (error == -ENOSPC &&
-+-		    ext4_should_retry_alloc(inode->i_sb, &retries))
-++		    ext4_should_retry_alloc(sb, &retries))
-+ 			goto retry;
-+ 		if (error == 0)
-+ 			error = error2;
-+@@ -1203,7 +1511,7 @@ static void ext4_xattr_shift_entries(str
-+ 
-+ 	/* Adjust the value offsets of the entries */
-+ 	for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
-+-		if (!last->e_value_block && last->e_value_size) {
-++		if (last->e_value_inum == 0 && last->e_value_size > 0) {
-+ 			new_offs = le16_to_cpu(last->e_value_offs) +
-+ 							value_offs_shift;
-+ 			BUG_ON(new_offs + le32_to_cpu(last->e_value_size)
-+@@ -1443,15 +1751,41 @@ cleanup:
-+ /*
-+  * ext4_xattr_delete_inode()
-+  *
-+- * Free extended attribute resources associated with this inode. This
-++ * Free extended attribute resources associated with this inode. Traverse
-++ * all entries and unlink any xattr inodes associated with this inode. This
-+  * is called immediately before an inode is freed. We have exclusive
-+- * access to the inode.
-++ * access to the inode. If an orphan inode is deleted it will also delete any
-++ * xattr block and all xattr inodes. They are checked by ext4_xattr_inode_iget()
-++ * to ensure they belong to the parent inode and were not deleted already.
-+  */
-+ void
-+ ext4_xattr_delete_inode(handle_t *handle, struct inode *inode)
-+ {
-+ 	struct buffer_head *bh = NULL;
-++	struct ext4_xattr_ibody_header *header;
-++	struct ext4_inode *raw_inode;
-++	struct ext4_iloc iloc;
-++	struct ext4_xattr_entry *entry;
-++	int error;
-++
-++	if (!ext4_test_inode_state(inode, EXT4_STATE_XATTR))
-++		goto delete_external_ea;
-++
-++	error = ext4_get_inode_loc(inode, &iloc);
-++	if (error)
-++		goto cleanup;
-++	raw_inode = ext4_raw_inode(&iloc);
-++	header = IHDR(inode, raw_inode);
-++	entry = IFIRST(header);
-++	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
-++		if (entry->e_value_inum != 0) {
-++			ext4_xattr_inode_unlink(inode,
-++					le32_to_cpu(entry->e_value_inum));
-++			entry->e_value_inum = 0;
-++		}
-++	}
-+ 
-++delete_external_ea:
-+ 	if (!EXT4_I(inode)->i_file_acl)
-+ 		goto cleanup;
-+ 	bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl);
-+@@ -1466,6 +1800,16 @@ ext4_xattr_delete_inode(handle_t *handle
-+ 				 EXT4_I(inode)->i_file_acl);
-+ 		goto cleanup;
-+ 	}
-++
-++	entry = BFIRST(bh);
-++	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
-++		if (entry->e_value_inum != 0) {
-++			ext4_xattr_inode_unlink(inode,
-++					le32_to_cpu(entry->e_value_inum));
-++			entry->e_value_inum = 0;
-++		}
-++	}
-++
-+ 	ext4_xattr_release_block(handle, inode, bh);
-+ 	EXT4_I(inode)->i_file_acl = 0;
-+ 
-+@@ -1540,10 +1884,9 @@ ext4_xattr_cmp(struct ext4_xattr_header
-+ 		    entry1->e_name_index != entry2->e_name_index ||
-+ 		    entry1->e_name_len != entry2->e_name_len ||
-+ 		    entry1->e_value_size != entry2->e_value_size ||
-++		    entry1->e_value_inum != entry2->e_value_inum ||
-+ 		    memcmp(entry1->e_name, entry2->e_name, entry1->e_name_len))
-+ 			return 1;
-+-		if (entry1->e_value_block != 0 || entry2->e_value_block != 0)
-+-			return -EIO;
-+ 		if (memcmp((char *)header1 + le16_to_cpu(entry1->e_value_offs),
-+ 			   (char *)header2 + le16_to_cpu(entry2->e_value_offs),
-+ 			   le32_to_cpu(entry1->e_value_size)))
-+@@ -1627,7 +1970,7 @@ static inline void ext4_xattr_hash_entry
-+ 		       *name++;
-+ 	}
-+ 
-+-	if (entry->e_value_block == 0 && entry->e_value_size != 0) {
-++	if (entry->e_value_inum == 0 && entry->e_value_size != 0) {
-+ 		__le32 *value = (__le32 *)((char *)header +
-+ 			le16_to_cpu(entry->e_value_offs));
-+ 		for (n = (le32_to_cpu(entry->e_value_size) +
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.h
-+@@ -42,7 +42,7 @@ struct ext4_xattr_entry {
-+ 	__u8	e_name_len;	/* length of name */
-+ 	__u8	e_name_index;	/* attribute name index */
-+ 	__le16	e_value_offs;	/* offset in disk block of value */
-+-	__le32	e_value_block;	/* disk block attribute is stored on (n/i) */
-++	__le32	e_value_inum;	/* inode in which the value is stored */
-+ 	__le32	e_value_size;	/* size of attribute value */
-+ 	__le32	e_hash;		/* hash value of name and value */
-+ 	char	e_name[0];	/* attribute name */
-+@@ -67,6 +67,15 @@ struct ext4_xattr_entry {
-+ 		EXT4_I(inode)->i_extra_isize))
-+ #define IFIRST(hdr) ((struct ext4_xattr_entry *)((hdr)+1))
-+ 
-++#define i_xattr_inode_parent i_mtime.tv_sec
-++
-++/*
-++ * The minimum size of EA value when you start storing it in an external inode
-++ * size of block - size of header - size of 1 entry - 4 null bytes
-++*/
-++#define EXT4_XATTR_MIN_LARGE_EA_SIZE(b)					\
-++	((b) - EXT4_XATTR_LEN(3) - sizeof(struct ext4_xattr_header) - 4)
-++
-+ #define BHDR(bh) ((struct ext4_xattr_header *)((bh)->b_data))
-+ #define ENTRY(ptr) ((struct ext4_xattr_entry *)(ptr))
-+ #define BFIRST(bh) ENTRY(BHDR(bh)+1)
-+@@ -75,10 +84,11 @@ struct ext4_xattr_entry {
-+ #define EXT4_ZERO_XATTR_VALUE ((void *)-1)
-+ 
-+ struct ext4_xattr_info {
-+-	int name_index;
-+ 	const char *name;
-+ 	const void *value;
-+ 	size_t value_len;
-++	int name_index;
-++	int in_inode;
-+ };
-+ 
-+ struct ext4_xattr_search {
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inline.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
-+@@ -59,7 +59,7 @@ static int get_max_inline_xattr_value_si
-+ 
-+ 	/* Compute min_offs. */
-+ 	for (; !IS_LAST_ENTRY(entry); entry = EXT4_XATTR_NEXT(entry)) {
-+-		if (!entry->e_value_block && entry->e_value_size) {
-++		if (!entry->e_value_inum && entry->e_value_size) {
-+ 			size_t offs = le16_to_cpu(entry->e_value_offs);
-+ 			if (offs < min_offs)
-+ 				min_offs = offs;
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch
-new file mode 100644
-index 0000000..f4318c5
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-lookup-dotdot.patch
-@@ -0,0 +1,37 @@
-+Index: linux-3.10.9-200.fc17.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.10.9-200.fc17.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.10.9-200.fc17.x86_64/fs/ext4/namei.c
-+@@ -1438,6 +1438,32 @@ static struct dentry *ext4_lookup(struct
-+ 			return ERR_PTR(-EIO);
-+ 		}
-+ 	}
-++	/* ".." shouldn't go into dcache to preserve dcache hierarchy
-++	 * otherwise we'll get parent being a child of actual child.
-++	 * see bug 10458 for details -bzzz */
-++	if (inode && (dentry->d_name.name[0] == '.' && (dentry->d_name.len == 1 ||
-++		(dentry->d_name.len == 2 && dentry->d_name.name[1] == '.')))) {
-++		struct dentry *goal = NULL;
-++
-++		/* first, look for an existing dentry - any one is good */
-++		goal = d_find_any_alias(inode);
-++		if (goal == NULL) {
-++			spin_lock(&dentry->d_lock);
-++			/* there is no alias, we need to make current dentry:
-++			 *  a) inaccessible for __d_lookup()
-++			 *  b) inaccessible for iopen */
-++			J_ASSERT(hlist_unhashed(&dentry->d_alias));
-++			dentry->d_flags |= DCACHE_NFSFS_RENAMED;
-++			/* this is d_instantiate() ... */
-++			hlist_add_head(&dentry->d_alias, &inode->i_dentry);
-++			dentry->d_inode = inode;
-++			spin_unlock(&dentry->d_lock);
-++		}
-++		if (goal)
-++			iput(inode);
-++		return goal;
-++	}
-++
-+ 	return d_splice_alias(inode, dentry);
-+ }
-+ 
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch
-new file mode 100644
-index 0000000..a1e12a8
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-max-dir-size.patch
-@@ -0,0 +1,44 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -2485,8 +2485,11 @@ static ssize_t sbi_ui_show(struct ext4_a
-+ 			   struct ext4_sb_info *sbi, char *buf)
-+ {
-+ 	unsigned int *ui = (unsigned int *) (((char *) sbi) + a->u.offset);
-++	unsigned int v = *ui;
-+ 
-+-	return snprintf(buf, PAGE_SIZE, "%u\n", *ui);
-++	if (strcmp("max_dir_size", a->attr.name) == 0)
-++		v <<= 10;
-++	return snprintf(buf, PAGE_SIZE, "%u\n", v);
-+ }
-+ 
-+ static ssize_t sbi_ui_store(struct ext4_attr *a,
-+@@ -2500,6 +2503,8 @@ static ssize_t sbi_ui_store(struct ext4_
-+ 	ret = kstrtoul(skip_spaces(buf), 0, &t);
-+ 	if (ret)
-+ 		return ret;
-++	if (strcmp("max_dir_size", a->attr.name) == 0)
-++		t >>= 10;
-+ 	*ui = t;
-+ 	return count;
-+ }
-+@@ -2582,6 +2587,8 @@ EXT4_RW_ATTR(reserved_clusters);
-+ EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show,
-+ 		 inode_readahead_blks_store, s_inode_readahead_blks);
-+ EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal);
-++EXT4_RW_ATTR_SBI_UI(max_dir_size, s_max_dir_size_kb);
-++EXT4_RW_ATTR_SBI_UI(max_dir_size_kb, s_max_dir_size_kb);
-+ EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats);
-+ EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
-+ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
-+@@ -2600,6 +2607,8 @@ static struct attribute *ext4_attrs[] =
-+ 	ATTR_LIST(reserved_clusters),
-+ 	ATTR_LIST(inode_readahead_blks),
-+ 	ATTR_LIST(inode_goal),
-++	ATTR_LIST(max_dir_size),
-++	ATTR_LIST(max_dir_size_kb),
-+ 	ATTR_LIST(mb_stats),
-+ 	ATTR_LIST(mb_max_to_scan),
-+ 	ATTR_LIST(mb_min_to_scan),
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch
-new file mode 100644
-index 0000000..a0eb883
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-extra-checks.patch
-@@ -0,0 +1,315 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -2449,6 +2449,7 @@ struct ext4_group_info {
-+ 	ext4_grpblk_t	bb_fragments;	/* nr of freespace fragments */
-+ 	ext4_grpblk_t	bb_largest_free_order;/* order of largest frag in BG */
-+ 	struct          list_head bb_prealloc_list;
-++	unsigned long   bb_prealloc_nr;
-+ #ifdef DOUBLE_CHECK
-+ 	void            *bb_bitmap;
-+ #endif
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
-+@@ -362,7 +362,7 @@ static const char *ext4_groupinfo_slab_n
-+ 	"ext4_groupinfo_64k", "ext4_groupinfo_128k"
-+ };
-+ 
-+-static void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
-++static int ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
-+ 					ext4_group_t group);
-+ static void ext4_mb_generate_from_freelist(struct super_block *sb, void *bitmap,
-+ 						ext4_group_t group);
-+@@ -718,7 +718,7 @@ mb_set_largest_free_order(struct super_b
-+ }
-+ 
-+ static noinline_for_stack
-+-void ext4_mb_generate_buddy(struct super_block *sb,
-++int ext4_mb_generate_buddy(struct super_block *sb,
-+ 				void *buddy, void *bitmap, ext4_group_t group)
-+ {
-+ 	struct ext4_group_info *grp = ext4_get_group_info(sb, group);
-+@@ -750,14 +750,13 @@ void ext4_mb_generate_buddy(struct super
-+ 	grp->bb_fragments = fragments;
-+ 
-+ 	if (free != grp->bb_free) {
-+-		ext4_grp_locked_error(sb, group, 0, 0,
-+-				      "%u clusters in bitmap, %u in gd",
-+-				      free, grp->bb_free);
-+-		/*
-+-		 * If we intent to continue, we consider group descritor
-+-		 * corrupt and update bb_free using bitmap value
-+-		 */
-+-		grp->bb_free = free;
-++		struct ext4_group_desc *gdp;
-++		gdp = ext4_get_group_desc (sb, group, NULL);
-++		ext4_error(sb, "group %lu: %u blocks in bitmap, %u in bb, "
-++			"%u in gd, %lu pa's\n", (long unsigned int)group,
-++			free, grp->bb_free, ext4_free_group_clusters(sb, gdp),
-++			grp->bb_prealloc_nr);
-++		return -EIO;
-+ 	}
-+ 	mb_set_largest_free_order(sb, grp);
-+ 
-+@@ -768,6 +767,8 @@ void ext4_mb_generate_buddy(struct super
-+ 	EXT4_SB(sb)->s_mb_buddies_generated++;
-+ 	EXT4_SB(sb)->s_mb_generation_time += period;
-+ 	spin_unlock(&EXT4_SB(sb)->s_bal_lock);
-++
-++	return 0;
-+ }
-+ 
-+ static void mb_regenerate_buddy(struct ext4_buddy *e4b)
-+@@ -883,7 +884,7 @@ static int ext4_mb_init_cache(struct pag
-+ 	}
-+ 
-+ 	first_block = page->index * blocks_per_page;
-+-	for (i = 0; i < blocks_per_page; i++) {
-++	for (i = 0; i < blocks_per_page && err == 0; i++) {
-+ 		group = (first_block + i) >> 1;
-+ 		if (group >= ngroups)
-+ 			break;
-+@@ -922,7 +923,7 @@ static int ext4_mb_init_cache(struct pag
-+ 			ext4_lock_group(sb, group);
-+ 			/* init the buddy */
-+ 			memset(data, 0xff, blocksize);
-+-			ext4_mb_generate_buddy(sb, data, incore, group);
-++			err = ext4_mb_generate_buddy(sb, data, incore, group);
-+ 			ext4_unlock_group(sb, group);
-+ 			incore = NULL;
-+ 		} else {
-+@@ -937,7 +938,7 @@ static int ext4_mb_init_cache(struct pag
-+ 			memcpy(data, bitmap, blocksize);
-+ 
-+ 			/* mark all preallocated blks used in in-core bitmap */
-+-			ext4_mb_generate_from_pa(sb, data, group);
-++			err = ext4_mb_generate_from_pa(sb, data, group);
-+ 			ext4_mb_generate_from_freelist(sb, data, group);
-+ 			ext4_unlock_group(sb, group);
-+ 
-+@@ -947,7 +948,8 @@ static int ext4_mb_init_cache(struct pag
-+ 			incore = data;
-+ 		}
-+ 	}
-+-	SetPageUptodate(page);
-++	if (likely(err == 0))
-++		SetPageUptodate(page);
-+ 
-+ out:
-+ 	if (bh) {
-+@@ -2224,9 +2226,11 @@ static void *ext4_mb_seq_groups_next(str
-+ static int ext4_mb_seq_groups_show(struct seq_file *seq, void *v)
-+ {
-+ 	struct super_block *sb = seq->private;
-++	struct ext4_group_desc *gdp;
-+ 	ext4_group_t group = (ext4_group_t) ((unsigned long) v);
-+ 	int i;
-+ 	int err, buddy_loaded = 0;
-++	int free = 0;
-+ 	struct ext4_buddy e4b;
-+ 	struct ext4_group_info *grinfo;
-+ 	struct sg {
-+@@ -2236,10 +2240,10 @@ static int ext4_mb_seq_groups_show(struc
-+ 
-+ 	group--;
-+ 	if (group == 0)
-+-		seq_printf(seq, "#%-5s: %-5s %-5s %-5s "
-++		seq_printf(seq, "#%-5s: %-5s %-5s %-5s %-5s %-5s"
-+ 				"[ %-5s %-5s %-5s %-5s %-5s %-5s %-5s "
-+ 				  "%-5s %-5s %-5s %-5s %-5s %-5s %-5s ]\n",
-+-			   "group", "free", "frags", "first",
-++			   "group", "free", "frags", "first", "first", "pa",
-+ 			   "2^0", "2^1", "2^2", "2^3", "2^4", "2^5", "2^6",
-+ 			   "2^7", "2^8", "2^9", "2^10", "2^11", "2^12", "2^13");
-+ 
-+@@ -2256,13 +2260,19 @@ static int ext4_mb_seq_groups_show(struc
-+ 		buddy_loaded = 1;
-+ 	}
-+ 
-++	gdp = ext4_get_group_desc(sb, group, NULL);
-++	if (gdp != NULL)
-++		free = ext4_free_group_clusters(sb, gdp);
-++
-+ 	memcpy(&sg, ext4_get_group_info(sb, group), i);
-+ 
-+ 	if (buddy_loaded)
-+ 		ext4_mb_unload_buddy(&e4b);
-+ 
-+-	seq_printf(seq, "#%-5u: %-5u %-5u %-5u [", group, sg.info.bb_free,
-+-			sg.info.bb_fragments, sg.info.bb_first_free);
-++	seq_printf(seq, "#%-5lu: %-5u %-5u %-5u %-5u %-5lu [",
-++			(long unsigned int)group, sg.info.bb_free, free,
-++			sg.info.bb_fragments, sg.info.bb_first_free,
-++			sg.info.bb_prealloc_nr);
-+ 	for (i = 0; i <= 13; i++)
-+ 		seq_printf(seq, " %-5u", i <= sb->s_blocksize_bits + 1 ?
-+ 				sg.info.bb_counters[i] : 0);
-+@@ -3507,22 +3517,67 @@ static void ext4_mb_generate_from_freeli
-+ }
-+ 
-+ /*
-++ * check free blocks in bitmap match free block in group descriptor
-++ * do this before taking preallocated blocks into account to be able
-++ * to detect on-disk corruptions. The group lock should be hold by the
-++ * caller.
-++ */
-++int ext4_mb_check_ondisk_bitmap(struct super_block *sb, void *bitmap,
-++				struct ext4_group_desc *gdp, int group)
-++{
-++	unsigned short max = EXT4_BLOCKS_PER_GROUP(sb);
-++	unsigned short i, first, free = 0;
-++
-++	i = mb_find_next_zero_bit(bitmap, max, 0);
-++
-++	while (i < max) {
-++		first = i;
-++		i = mb_find_next_bit(bitmap, max, i);
-++		if (i > max)
-++			i = max;
-++		free += i - first;
-++		if (i < max)
-++			i = mb_find_next_zero_bit(bitmap, max, i);
-++	}
-++
-++	if (free != ext4_free_group_clusters(sb, gdp)) {
-++		ext4_error(sb, "on-disk bitmap for group %d"
-++			"corrupted: %u blocks free in bitmap, %u - in gd\n",
-++			group, free, ext4_free_group_clusters(sb, gdp));
-++		return -EIO;
-++	}
-++	return 0;
-++}
-++
-++/*
-+  * the function goes through all preallocation in this group and marks them
-+  * used in in-core bitmap. buddy must be generated from this bitmap
-+  * Need to be called with ext4 group lock held
-+  */
-+ static noinline_for_stack
-+-void ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
-++int ext4_mb_generate_from_pa(struct super_block *sb, void *bitmap,
-+ 					ext4_group_t group)
-+ {
-+ 	struct ext4_group_info *grp = ext4_get_group_info(sb, group);
-+ 	struct ext4_prealloc_space *pa;
-++	struct ext4_group_desc *gdp;
-+ 	struct list_head *cur;
-+ 	ext4_group_t groupnr;
-+ 	ext4_grpblk_t start;
-+ 	int preallocated = 0;
-++	int skip = 0, count = 0;
-++	int err;
-+ 	int len;
-+ 
-++	gdp = ext4_get_group_desc (sb, group, NULL);
-++	if (gdp == NULL)
-++		return -EIO;
-++
-++	/* before applying preallocations, check bitmap consistency */
-++	err = ext4_mb_check_ondisk_bitmap(sb, bitmap, gdp, group);
-++	if (err)
-++		return err;
-++
-+ 	/* all form of preallocation discards first load group,
-+ 	 * so the only competing code is preallocation use.
-+ 	 * we don't need any locking here
-+@@ -3538,13 +3593,23 @@ void ext4_mb_generate_from_pa(struct sup
-+ 					     &groupnr, &start);
-+ 		len = pa->pa_len;
-+ 		spin_unlock(&pa->pa_lock);
-+-		if (unlikely(len == 0))
-++		if (unlikely(len == 0)) {
-++			skip++;
-+ 			continue;
-++		}
-+ 		BUG_ON(groupnr != group);
-+ 		ext4_set_bits(bitmap, start, len);
-+ 		preallocated += len;
-++		count ++;
-++	}
-++	if (count + skip != grp->bb_prealloc_nr) {
-++		ext4_error(sb, "lost preallocations: "
-++			   "count %d, bb_prealloc_nr %lu, skip %d\n",
-++			   count, grp->bb_prealloc_nr, skip);
-++		return -EIO;
-+ 	}
-+ 	mb_debug(1, "prellocated %u for group %u\n", preallocated, group);
-++	return 0;
-+ }
-+ 
-+ static void ext4_mb_pa_callback(struct rcu_head *head)
-+@@ -3603,6 +3668,7 @@ static void ext4_mb_put_pa(struct ext4_a
-+ 	 */
-+ 	ext4_lock_group(sb, grp);
-+ 	list_del(&pa->pa_group_list);
-++	ext4_get_group_info(sb, grp)->bb_prealloc_nr--;
-+ 	ext4_unlock_group(sb, grp);
-+ 
-+ 	spin_lock(pa->pa_obj_lock);
-+@@ -3697,6 +3763,7 @@ ext4_mb_new_inode_pa(struct ext4_allocat
-+ 
-+ 	ext4_lock_group(sb, ac->ac_b_ex.fe_group);
-+ 	list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
-++	grp->bb_prealloc_nr++;
-+ 	ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
-+ 
-+ 	spin_lock(pa->pa_obj_lock);
-+@@ -3758,6 +3825,7 @@ ext4_mb_new_group_pa(struct ext4_allocat
-+ 
-+ 	ext4_lock_group(sb, ac->ac_b_ex.fe_group);
-+ 	list_add(&pa->pa_group_list, &grp->bb_prealloc_list);
-++	grp->bb_prealloc_nr++;
-+ 	ext4_unlock_group(sb, ac->ac_b_ex.fe_group);
-+ 
-+ 	/*
-+@@ -3927,6 +3995,8 @@ repeat:
-+ 
-+ 		spin_unlock(&pa->pa_lock);
-+ 
-++		BUG_ON(grp->bb_prealloc_nr == 0);
-++		grp->bb_prealloc_nr--;
-+ 		list_del(&pa->pa_group_list);
-+ 		list_add(&pa->u.pa_tmp_list, &list);
-+ 	}
-+@@ -4056,7 +4126,7 @@ repeat:
-+ 		if (err) {
-+ 			ext4_error(sb, "Error loading buddy information for %u",
-+ 					group);
-+-			continue;
-++			return;
-+ 		}
-+ 
-+ 		bitmap_bh = ext4_read_block_bitmap(sb, group);
-+@@ -4068,6 +4138,8 @@ repeat:
-+ 		}
-+ 
-+ 		ext4_lock_group(sb, group);
-++		BUG_ON(e4b.bd_info->bb_prealloc_nr == 0);
-++		e4b.bd_info->bb_prealloc_nr--;
-+ 		list_del(&pa->pa_group_list);
-+ 		ext4_mb_release_inode_pa(&e4b, bitmap_bh, pa);
-+ 		ext4_unlock_group(sb, group);
-+@@ -4328,6 +4400,7 @@ ext4_mb_discard_lg_preallocations(struct
-+ 		}
-+ 		ext4_lock_group(sb, group);
-+ 		list_del(&pa->pa_group_list);
-++		ext4_get_group_info(sb, group)->bb_prealloc_nr--;
-+ 		ext4_mb_release_group_pa(&e4b, pa);
-+ 		ext4_unlock_group(sb, group);
-+ 
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
-+@@ -82,7 +82,7 @@ extern ushort ext4_mballoc_debug;
-+ /*
-+  * for which requests use 2^N search using buddies
-+  */
-+-#define MB_DEFAULT_ORDER2_REQS		2
-++#define MB_DEFAULT_ORDER2_REQS		8
-+ 
-+ /*
-+  * default group prealloc size 512 blocks
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch
-new file mode 100644
-index 0000000..df69372
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-mballoc-pa_free-mismatch.patch
-@@ -0,0 +1,109 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
-+@@ -3747,6 +3747,7 @@ ext4_mb_new_inode_pa(struct ext4_allocat
-+ 	INIT_LIST_HEAD(&pa->pa_group_list);
-+ 	pa->pa_deleted = 0;
-+ 	pa->pa_type = MB_INODE_PA;
-++	pa->pa_error = 0;
-+ 
-+ 	mb_debug(1, "new inode pa %p: %llu/%u for %u\n", pa,
-+ 			pa->pa_pstart, pa->pa_len, pa->pa_lstart);
-+@@ -3808,6 +3809,7 @@ ext4_mb_new_group_pa(struct ext4_allocat
-+ 	INIT_LIST_HEAD(&pa->pa_group_list);
-+ 	pa->pa_deleted = 0;
-+ 	pa->pa_type = MB_GROUP_PA;
-++	pa->pa_error = 0;
-+ 
-+ 	mb_debug(1, "new group pa %p: %llu/%u for %u\n", pa,
-+ 			pa->pa_pstart, pa->pa_len, pa->pa_lstart);
-+@@ -3868,7 +3870,9 @@ ext4_mb_release_inode_pa(struct ext4_bud
-+ 	int err = 0;
-+ 	int free = 0;
-+ 
-++	assert_spin_locked(ext4_group_lock_ptr(sb, e4b->bd_group));
-+ 	BUG_ON(pa->pa_deleted == 0);
-++	BUG_ON(pa->pa_inode == NULL);
-+ 	ext4_get_group_no_and_offset(sb, pa->pa_pstart, &group, &bit);
-+ 	grp_blk_start = pa->pa_pstart - EXT4_C2B(sbi, bit);
-+ 	BUG_ON(group != e4b->bd_group && pa->pa_len != 0);
-+@@ -3891,12 +3895,18 @@ ext4_mb_release_inode_pa(struct ext4_bud
-+ 		mb_free_blocks(pa->pa_inode, e4b, bit, next - bit);
-+ 		bit = next + 1;
-+ 	}
-+-	if (free != pa->pa_free) {
-+-		ext4_msg(e4b->bd_sb, KERN_CRIT,
-+-			 "pa %p: logic %lu, phys. %lu, len %lu",
-+-			 pa, (unsigned long) pa->pa_lstart,
-+-			 (unsigned long) pa->pa_pstart,
-+-			 (unsigned long) pa->pa_len);
-++
-++	/* "free < pa->pa_free" means we maybe double alloc the same blocks,
-++	 * otherwise maybe leave some free blocks unavailable, no need to BUG.*/
-++	if ((free > pa->pa_free && !pa->pa_error) || (free < pa->pa_free)) {
-++		ext4_error(sb, "pa free mismatch: [pa %p] "
-++				"[phy %lu] [logic %lu] [len %u] [free %u] "
-++				"[error %u] [inode %lu] [freed %u]", pa,
-++				(unsigned long)pa->pa_pstart,
-++				(unsigned long)pa->pa_lstart,
-++				(unsigned)pa->pa_len, (unsigned)pa->pa_free,
-++				(unsigned)pa->pa_error, pa->pa_inode->i_ino,
-++				free);
-+ 		ext4_grp_locked_error(sb, group, 0, 0, "free %u, pa_free %u",
-+ 					free, pa->pa_free);
-+ 		/*
-+@@ -3904,6 +3914,7 @@ ext4_mb_release_inode_pa(struct ext4_bud
-+ 		 * from the bitmap and continue.
-+ 		 */
-+ 	}
-++	BUG_ON(pa->pa_free != free);
-+ 	atomic_add(free, &sbi->s_mb_discarded);
-+ 
-+ 	return err;
-+@@ -4661,6 +4672,25 @@ errout:
-+ 		ac->ac_b_ex.fe_len = 0;
-+ 		ar->len = 0;
-+ 		ext4_mb_show_ac(ac);
-++		if (ac->ac_pa) {
-++			struct ext4_prealloc_space *pa = ac->ac_pa;
-++
-++			/* We can not make sure whether the bitmap has
-++			 * been updated or not when fail case. So can
-++			 * not revert pa_free back, just mark pa_error*/
-++			pa->pa_error++;
-++			ext4_error(sb,
-++				"Updating bitmap error: [err %d] "
-++				"[pa %p] [phy %lu] [logic %lu] "
-++				"[len %u] [free %u] [error %u] "
-++				"[inode %lu]", *errp, pa,
-++				(unsigned long)pa->pa_pstart,
-++				(unsigned long)pa->pa_lstart,
-++				(unsigned)pa->pa_len,
-++				(unsigned)pa->pa_free,
-++				(unsigned)pa->pa_error,
-++				pa->pa_inode ? pa->pa_inode->i_ino : 0);
-++		}
-+ 	}
-+ 	ext4_mb_release_context(ac);
-+ out:
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.h
-+@@ -19,6 +19,7 @@
-+ #include <linux/seq_file.h>
-+ #include <linux/blkdev.h>
-+ #include <linux/mutex.h>
-++#include <linux/genhd.h>
-+ #include "ext4_jbd2.h"
-+ #include "ext4.h"
-+ 
-+@@ -126,6 +127,7 @@ struct ext4_prealloc_space {
-+ 	ext4_grpblk_t		pa_free;	/* how many blocks are free */
-+ 	unsigned short		pa_type;	/* pa type. inode or group */
-+ 	spinlock_t		*pa_obj_lock;
-++	unsigned short		pa_error;
-+ 	struct inode		*pa_inode;	/* hack, for history only */
-+ };
-+ 
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch
-new file mode 100644
-index 0000000..1f0ab31
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-misc.patch
-@@ -0,0 +1,193 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -1421,6 +1421,11 @@ static inline void ext4_clear_state_flag
-+ 
-+ #define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
-+ 
-++/* Has been moved to linux/magic.h but we need it for Lustre */
-++#define EXT4_SUPER_MAGIC	0xEF53
-++#define JOURNAL_START_HAS_3ARGS	1
-++#define HAVE_LDISKFS_MAP_BLOCKS	1
-++
-+ /*
-+  * Codes for operating systems
-+  */
-+@@ -2670,6 +2675,8 @@ struct ext4_extent;
-+ 
-+ extern int ext4_ext_tree_init(handle_t *handle, struct inode *);
-+ extern int ext4_ext_writepage_trans_blocks(struct inode *, int);
-++extern struct buffer_head *ext4_read_inode_bitmap(struct super_block *sb,
-++						  ext4_group_t block_group);
-+ extern int ext4_ext_index_trans_blocks(struct inode *inode, int extents);
-+ extern int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
-+ 			       struct ext4_map_blocks *map, int flags);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4_jbd2.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.c
-+@@ -34,6 +34,8 @@ static void ext4_put_nojournal(handle_t
-+ 
-+ 	current->journal_info = handle;
-+ }
-++EXPORT_SYMBOL(__ext4_journal_get_write_access);
-++EXPORT_SYMBOL(__ext4_journal_start_sb);
-+ 
-+ /*
-+  * Wrappers for jbd2_journal_start/end.
-+@@ -299,3 +301,4 @@ int __ext4_handle_dirty_super(const char
-+ 		mark_buffer_dirty(bh);
-+ 	return err;
-+ }
-++EXPORT_SYMBOL(__ext4_handle_dirty_metadata);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4_jbd2.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4_jbd2.h
-+@@ -37,6 +37,8 @@
-+ 	(EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_EXTENTS)   \
-+ 	 ? 20U : 8U)
-+ 
-++#define ext4_journal_dirty_metadata(handle, bh)  \
-++		ext4_handle_dirty_metadata(handle, NULL, bh)
-+ /* Extended attribute operations touch at most two data buffers,
-+  * two bitmap buffers, and two group summaries, in addition to the inode
-+  * and the superblock, which are already accounted for. */
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+@@ -4222,6 +4222,9 @@ bad_inode:
-+ 	iget_failed(inode);
-+ 	return ERR_PTR(ret);
-+ }
-++EXPORT_SYMBOL(ext4_iget);
-++EXPORT_SYMBOL(ext4_map_blocks);
-++EXPORT_SYMBOL(ext4_truncate);
-+ 
-+ static int ext4_inode_blocks_set(handle_t *handle,
-+ 				struct ext4_inode *raw_inode,
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -1141,10 +1141,12 @@ enum {
-+ 	Opt_usrjquota, Opt_grpjquota, Opt_offusrjquota, Opt_offgrpjquota,
-+ 	Opt_jqfmt_vfsold, Opt_jqfmt_vfsv0, Opt_jqfmt_vfsv1, Opt_quota,
-+ 	Opt_noquota, Opt_barrier, Opt_nobarrier, Opt_err,
-++	Opt_iopen, Opt_noiopen, Opt_iopen_nopriv,
-+ 	Opt_usrquota, Opt_grpquota, Opt_i_version,
-+ 	Opt_stripe, Opt_delalloc, Opt_nodelalloc, Opt_mblk_io_submit,
-+ 	Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
-+ 	Opt_inode_readahead_blks, Opt_journal_ioprio,
-++	Opt_mballoc,
-+ 	Opt_dioread_nolock, Opt_dioread_lock,
-+ 	Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
-+ 	Opt_max_dir_size_kb,
-+@@ -1198,6 +1200,10 @@ static const match_table_t tokens = {
-+ 	{Opt_noquota, "noquota"},
-+ 	{Opt_quota, "quota"},
-+ 	{Opt_usrquota, "usrquota"},
-++	{Opt_iopen, "iopen"},
-++	{Opt_noiopen, "noiopen"},
-++	{Opt_iopen_nopriv, "iopen_nopriv"},
-++	{Opt_mballoc, "mballoc"},
-+ 	{Opt_barrier, "barrier=%u"},
-+ 	{Opt_barrier, "barrier"},
-+ 	{Opt_nobarrier, "nobarrier"},
-+@@ -1457,6 +1463,11 @@ static int handle_mount_opt(struct super
-+ 	case Opt_i_version:
-+ 		sb->s_flags |= MS_I_VERSION;
-+ 		return 1;
-++	case Opt_iopen:
-++	case Opt_noiopen:
-++	case Opt_iopen_nopriv:
-++	case Opt_mballoc:
-++		return 1;
-+ 	}
-+ 
-+ 	for (m = ext4_mount_opts; m->token != Opt_err; m++)
-+@@ -4162,6 +4173,8 @@ out_free_orig:
-+ 	return err ? err : ret;
-+ }
-+ 
-++EXPORT_SYMBOL(ext4_force_commit);
-++
-+ /*
-+  * Setup any per-fs journal parameters now.  We'll do this both on
-+  * initial mount, once the journal has been initialised but before we've
-+@@ -5501,6 +5514,9 @@ static void __exit ext4_exit_fs(void)
-+ 	ext4_exit_es();
-+ }
-+ 
-++EXPORT_SYMBOL(ext4_bread);
-++EXPORT_SYMBOL(__ext4_journal_stop);
-++
-+ MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others");
-+ MODULE_DESCRIPTION("Fourth Extended Filesystem");
-+ MODULE_LICENSE("GPL");
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -2210,7 +2210,7 @@ out:
-+  * DIR_NLINK feature is set if 1) nlinks > EXT4_LINK_MAX or 2) nlinks == 2,
-+  * since this indicates that nlinks count was previously 1.
-+  */
-+-static void ext4_inc_count(handle_t *handle, struct inode *inode)
-++void ext4_inc_count(handle_t *handle, struct inode *inode)
-+ {
-+ 	inc_nlink(inode);
-+ 	if (is_dx(inode) && inode->i_nlink > 1) {
-+@@ -2222,16 +2222,18 @@ static void ext4_inc_count(handle_t *han
-+ 		}
-+ 	}
-+ }
-++EXPORT_SYMBOL(ext4_inc_count);
-+ 
-+ /*
-+  * If a directory had nlink == 1, then we should let it be 1. This indicates
-+  * directory has >EXT4_LINK_MAX subdirs.
-+  */
-+-static void ext4_dec_count(handle_t *handle, struct inode *inode)
-++void ext4_dec_count(handle_t *handle, struct inode *inode)
-+ {
-+ 	if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
-+ 		drop_nlink(inode);
-+ }
-++EXPORT_SYMBOL(ext4_dec_count);
-+ 
-+ 
-+ static int ext4_add_nondir(handle_t *handle,
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ialloc.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ialloc.c
-+@@ -111,7 +111,7 @@ void ext4_end_bitmap_read(struct buffer_
-+  *
-+  * Return buffer_head of bitmap on success or NULL.
-+  */
-+-static struct buffer_head *
-++struct buffer_head *
-+ ext4_read_inode_bitmap(struct super_block *sb, ext4_group_t block_group)
-+ {
-+ 	struct ext4_group_desc *desc;
-+@@ -191,6 +191,7 @@ verify:
-+ 	set_buffer_verified(bh);
-+ 	return bh;
-+ }
-++EXPORT_SYMBOL(ext4_read_inode_bitmap);
-+ 
-+ /*
-+  * NOTE! When we get the inode, we're the only people
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/extents.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/extents.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/extents.c
-+@@ -4774,3 +4774,5 @@ int ext4_fiemap(struct inode *inode, str
-+ 
-+ 	return error;
-+ }
-++
-++EXPORT_SYMBOL(ext4_mark_inode_dirty);
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch
-new file mode 100644
-index 0000000..0717d15
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-nocmtime.patch
-@@ -0,0 +1,28 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/xattr.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/xattr.c
-+@@ -1432,7 +1432,8 @@ ext4_xattr_set_handle(handle_t *handle,
-+ 	}
-+ 	if (!error) {
-+ 		ext4_xattr_update_super_block(handle, inode->i_sb);
-+-		inode->i_ctime = ext4_current_time(inode);
-++		if (!IS_NOCMTIME(inode))
-++ 			inode->i_ctime = ext4_current_time(inode);
-+ 		if (!value)
-+ 			ext4_clear_inode_state(inode, EXT4_STATE_NO_EXPAND);
-+ 		error = ext4_mark_iloc_dirty(handle, inode, &is.iloc);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -1797,7 +1797,8 @@ static int add_dirent_to_buf(handle_t *h
-+ 	 * happen is that the times are slightly out of date
-+ 	 * and/or different from the directory change time.
-+ 	 */
-+-	dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
-++	if (!IS_NOCMTIME(dir))
-++		dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
-+ 	ext4_update_dx_flag(dir);
-+ 	dir->i_version++;
-+ 	ext4_mark_inode_dirty(handle, dir);
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch
-new file mode 100644
-index 0000000..1f2cf1a
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iam-exports.patch
-@@ -0,0 +1,56 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -2167,6 +2167,9 @@ extern struct buffer_head * ext4_find_en
-+ 					    struct ext4_dir_entry_2 ** res_dir,
-+ 					    int *inlined);
-+ #define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL)
-++extern struct buffer_head *ext4_append(handle_t *handle,
-++				       struct inode *inode,
-++				       ext4_lblk_t *block);
-+ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
-+ 			       struct inode *inode);
-+ extern int search_dir(struct buffer_head *bh,
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/hash.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/hash.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/hash.c
-+@@ -206,3 +206,4 @@ int ext4fs_dirhash(const char *name, int
-+ 	hinfo->minor_hash = minor_hash;
-+ 	return 0;
-+ }
-++EXPORT_SYMBOL(ext4fs_dirhash);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -48,7 +48,7 @@
-+ #define NAMEI_RA_BLOCKS  4
-+ #define NAMEI_RA_SIZE	     (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
-+ 
-+-static struct buffer_head *ext4_append(handle_t *handle,
-++struct buffer_head *ext4_append(handle_t *handle,
-+ 					struct inode *inode,
-+ 					ext4_lblk_t *block)
-+ {
-+@@ -163,6 +163,7 @@ static struct buffer_head *__ext4_read_d
-+ 	}
-+ 	return bh;
-+ }
-++EXPORT_SYMBOL(ext4_append);
-+ 
-+ #ifndef assert
-+ #define assert(test) J_ASSERT(test)
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -552,6 +552,7 @@ void __ext4_std_error(struct super_block
-+ 
-+ 	ext4_handle_error(sb);
-+ }
-++EXPORT_SYMBOL(__ext4_std_error);
-+ 
-+ /*
-+  * ext4_abort is a much stronger failure handler than ext4_error.  The
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch
-new file mode 100644
-index 0000000..64e82d7
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-osd-iop-common.patch
-@@ -0,0 +1,135 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -2155,6 +2155,20 @@ extern int ext4_orphan_add(handle_t *, s
-+ extern int ext4_orphan_del(handle_t *, struct inode *);
-+ extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
-+ 				__u32 start_minor_hash, __u32 *next_hash);
-++extern struct inode *ext4_create_inode(handle_t *handle,
-++				       struct inode * dir, int mode);
-++extern int ext4_add_entry(handle_t *handle, struct dentry *dentry,
-++			  struct inode *inode);
-++extern int ext4_delete_entry(handle_t *handle, struct inode * dir,
-++			     struct ext4_dir_entry_2 * de_del,
-++			     struct buffer_head * bh);
-++extern struct buffer_head * ext4_find_entry(struct inode *dir,
-++					    const struct qstr *d_name,
-++					    struct ext4_dir_entry_2 ** res_dir,
-++					    int *inlined);
-++#define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL)
-++extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
-++			       struct inode *inode);
-+ extern int search_dir(struct buffer_head *bh,
-+ 		      char *search_buf,
-+ 		      int buf_size,
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -1218,7 +1218,7 @@ static int is_dx_internal_node(struct in
-+  * The returned buffer_head has ->b_count elevated.  The caller is expected
-+  * to brelse() it when appropriate.
-+  */
-+-static struct buffer_head * ext4_find_entry (struct inode *dir,
-++struct buffer_head * ext4_find_entry(struct inode *dir,
-+ 					const struct qstr *d_name,
-+ 					struct ext4_dir_entry_2 **res_dir,
-+ 					int *inlined)
-+@@ -1362,6 +1362,7 @@ cleanup_and_exit:
-+ 		brelse(bh_use[ra_ptr]);
-+ 	return ret;
-+ }
-++EXPORT_SYMBOL(ext4_find_entry);
-+ 
-+ static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name,
-+ 		       struct ext4_dir_entry_2 **res_dir, int *err)
-+@@ -1910,8 +1911,8 @@ static int make_indexed_dir(handle_t *ha
-+  * may not sleep between calling this and putting something into
-+  * the entry, as someone else might have used it while you slept.
-+  */
-+-static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
-+-			  struct inode *inode)
-++int ext4_add_entry(handle_t *handle, struct dentry *dentry,
-++		   struct inode *inode)
-+ {
-+ 	struct inode *dir = dentry->d_parent->d_inode;
-+ 	struct buffer_head *bh;
-+@@ -1986,6 +1987,7 @@ static int ext4_add_entry(handle_t *hand
-+ 		ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
-+ 	return retval;
-+ }
-++EXPORT_SYMBOL(ext4_add_entry);
-+ 
-+ /*
-+  * Returns 0 for success, or a negative error value
-+@@ -2172,7 +2174,7 @@ int ext4_generic_delete_entry(handle_t *
-+ 	return -ENOENT;
-+ }
-+ 
-+-static int ext4_delete_entry(handle_t *handle,
-++int ext4_delete_entry(handle_t *handle,
-+ 			     struct inode *dir,
-+ 			     struct ext4_dir_entry_2 *de_del,
-+ 			     struct buffer_head *bh)
-+@@ -2213,7 +2215,7 @@ out:
-+ 		ext4_std_error(dir->i_sb, err);
-+ 	return err;
-+ }
-+-
-++EXPORT_SYMBOL(ext4_delete_entry);
-+ /*
-+  * DIR_NLINK feature is set if 1) nlinks > EXT4_LINK_MAX or 2) nlinks == 2,
-+  * since this indicates that nlinks count was previously 1.
-+@@ -2260,6 +2262,27 @@ static int ext4_add_nondir(handle_t *han
-+ 	return err;
-+ }
-+ 
-++struct inode * ext4_create_inode(handle_t *handle, struct inode * dir, int mode)
-++{
-++	struct inode *inode;
-++
-++	inode = ext4_new_inode(handle, dir, mode, NULL, 0, NULL);
-++	if (!IS_ERR(inode)) {
-++		if (S_ISCHR(mode) || S_ISBLK(mode) || S_ISFIFO(mode)) {
-++#ifdef CONFIG_LDISKFS_FS_XATTR
-++			inode->i_op = &ext4_special_inode_operations;
-++#endif
-++		} else {
-++			inode->i_op = &ext4_file_inode_operations;
-++			inode->i_fop = &ext4_file_operations;
-++			ext4_set_aops(inode);
-++		}
-++		unlock_new_inode(inode);
-++	}
-++	return inode;
-++}
-++EXPORT_SYMBOL(ext4_create_inode);
-++
-+ /*
-+  * By the time this is called, we already have created
-+  * the directory cache entry for the new file, but it
-+@@ -2448,6 +2471,23 @@ out:
-+ 	return err;
-+ }
-+ 
-++/* Initialize @inode as a subdirectory of @dir, and add the
-++ * "." and ".." entries into the first directory block. */
-++int ext4_add_dot_dotdot(handle_t *handle, struct inode * dir,
-++			struct inode *inode)
-++{
-++	if (IS_ERR(handle))
-++		return PTR_ERR(handle);
-++
-++	if (IS_DIRSYNC(dir))
-++		ext4_handle_sync(handle);
-++
-++	inode->i_op = &ext4_dir_inode_operations;
-++	inode->i_fop = &ext4_dir_operations;
-++	return ext4_init_new_dir(handle, dir, inode);
-++}
-++EXPORT_SYMBOL(ext4_add_dot_dotdot);
-++
-+ static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
-+ {
-+ 	handle_t *handle;
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch
-new file mode 100644
-index 0000000..db24d01
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-pdir-fix.patch
-@@ -0,0 +1,61 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -793,6 +793,9 @@ struct ext4_inode_info {
-+ 	__u32	i_dtime;
-+ 	ext4_fsblk_t	i_file_acl;
-+ 
-++	/* following fields for parallel directory operations -bzzz */
-++	struct semaphore i_append_sem;
-++
-+ 	/*
-+ 	 * i_block_group is the number of the block group which contains
-+ 	 * this file's inode.  Constant across the lifetime of the inode,
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -53,6 +53,7 @@ static struct buffer_head *ext4_append(h
-+ 					ext4_lblk_t *block)
-+ {
-+ 	struct buffer_head *bh;
-++	struct ext4_inode_info *ei = EXT4_I(inode);
-+ 	int err = 0;
-+ 
-+ 	if (unlikely(EXT4_SB(inode->i_sb)->s_max_dir_size_kb &&
-+@@ -60,14 +61,21 @@ static struct buffer_head *ext4_append(h
-+ 		      EXT4_SB(inode->i_sb)->s_max_dir_size_kb)))
-+ 		return ERR_PTR(-ENOSPC);
-+ 
-++	/* with parallel dir operations all appends
-++	* have to be serialized -bzzz */
-++	down(&ei->i_append_sem);
-++
-+ 	*block = inode->i_size >> inode->i_sb->s_blocksize_bits;
-+ 
-+ 	bh = ext4_bread(handle, inode, *block, 1, &err);
-+-	if (!bh)
-++	if (!bh) {
-++		up(&ei->i_append_sem);
-+		return ERR_PTR(err);
-++	}
-+ 	inode->i_size += inode->i_sb->s_blocksize;
-+ 	EXT4_I(inode)->i_disksize = inode->i_size;
-+ 	err = ext4_journal_get_write_access(handle, bh);
-++	up(&ei->i_append_sem);
-+ 	if (err) {
-+ 		brelse(bh);
-+ 		ext4_std_error(inode->i_sb, err);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -859,6 +859,7 @@ static struct inode *ext4_alloc_inode(st
-+ 		return NULL;
-+ 
-+ 	ei->vfs_inode.i_version = 1;
-++	sema_init(&ei->i_append_sem, 1);
-+ 	INIT_LIST_HEAD(&ei->i_prealloc_list);
-+ 	spin_lock_init(&ei->i_prealloc_lock);
-+ 	ext4_es_init_tree(&ei->i_es_tree);
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch b/ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch
-new file mode 100644
-index 0000000..cb54844
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4-prealloc.patch
-@@ -0,0 +1,387 @@
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -1237,11 +1237,14 @@ struct ext4_sb_info {
-+ 
-+ 	/* tunables */
-+ 	unsigned long s_stripe;
-+-	unsigned int s_mb_stream_request;
-++	unsigned long s_mb_small_req;
-++	unsigned long s_mb_large_req;
-+ 	unsigned int s_mb_max_to_scan;
-+ 	unsigned int s_mb_min_to_scan;
-+ 	unsigned int s_mb_stats;
-+ 	unsigned int s_mb_order2_reqs;
-++	unsigned long *s_mb_prealloc_table;
-++	unsigned long s_mb_prealloc_table_size;
-+ 	unsigned int s_mb_group_prealloc;
-+ 	unsigned int s_max_dir_size_kb;
-+ 	/* where last allocation was done - for stream allocation */
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/mballoc.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/mballoc.c
-+@@ -1828,6 +1828,25 @@ int ext4_mb_find_by_goal(struct ext4_all
-+ 	return 0;
-+ }
-+ 
-++static void ext4_mb_prealloc_table_add(struct ext4_sb_info *sbi, int value)
-++{
-++	int i;
-++
-++	if (value > (sbi->s_blocks_per_group - 1 - 1 - sbi->s_itb_per_group))
-++		return;
-++
-++	for (i = 0; i < sbi->s_mb_prealloc_table_size; i++) {
-++		if (sbi->s_mb_prealloc_table[i] == 0) {
-++			sbi->s_mb_prealloc_table[i] = value;
-++			return;
-++		}
-++
-++		/* they should add values in order */
-++		if (value <= sbi->s_mb_prealloc_table[i])
-++			return;
-++	}
-++}
-++
-+ /*
-+  * The routine scans buddy structures (not bitmap!) from given order
-+  * to max order and tries to find big enough chunk to satisfy the req
-+@@ -2263,6 +2282,86 @@ static const struct seq_operations ext4_
-+ 	.show   = ext4_mb_seq_groups_show,
-+ };
-+ 
-++#define EXT4_MB_PREALLOC_TABLE          "prealloc_table"
-++
-++static ssize_t ext4_mb_prealloc_table_proc_write(struct file *file,
-++					     const char __user *buf,
-++					     size_t cnt, loff_t *pos)
-++{
-++	struct ext4_sb_info *sbi = EXT4_SB(PDE_DATA(file_inode(file)));
-++	unsigned long value;
-++	unsigned long prev = 0;
-++	char str[128];
-++	char *cur;
-++	char *end;
-++	unsigned long *new_table;
-++	int num = 0;
-++	int i = 0;
-++
-++	if (cnt >= sizeof(str))
-++		return -EINVAL;
-++	if (copy_from_user(str, buf, cnt))
-++		return -EFAULT;
-++
-++	num = 0;
-++	cur = str;
-++	end = str + cnt;
-++	while (cur < end) {
-++		while ((cur < end) && (*cur == ' ')) cur++;
-++		value = simple_strtol(cur, &cur, 0);
-++		if (value == 0)
-++			break;
-++		if (value <= prev)
-++			return -EINVAL;
-++		prev = value;
-++		num++;
-++	}
-++
-++	new_table = kmalloc(num * sizeof(*new_table), GFP_KERNEL);
-++	if (new_table == NULL)
-++		return -ENOMEM;
-++	kfree(sbi->s_mb_prealloc_table);
-++	memset(new_table, 0, num * sizeof(*new_table));
-++	sbi->s_mb_prealloc_table = new_table;
-++	sbi->s_mb_prealloc_table_size = num;
-++	cur = str;
-++	end = str + cnt;
-++	while (cur < end && i < num) {
-++	while ((cur < end) && (*cur == ' ')) cur++;
-++		value = simple_strtol(cur, &cur, 0);
-++		ext4_mb_prealloc_table_add(sbi, value);
-++		i++;
-++	}
-++
-++	return cnt;
-++}
-++
-++static int mb_prealloc_table_seq_show(struct seq_file *m, void *v)
-++{
-++ 	struct ext4_sb_info *sbi = EXT4_SB(m->private);
-++	int i;
-++
-++	for (i = 0; i < sbi->s_mb_prealloc_table_size; i++)
-++		seq_printf(m, "%ld ", sbi->s_mb_prealloc_table[i]);
-++	seq_printf(m, "\n");
-++
-++	return 0;
-++}
-++
-++static int mb_prealloc_table_seq_open(struct inode *inode, struct file *file)
-++{
-++	return single_open(file, mb_prealloc_table_seq_show, PDE_DATA(inode));
-++}
-++
-++struct file_operations ext4_mb_prealloc_seq_fops = {
-++	.owner   = THIS_MODULE,
-++	.open    = mb_prealloc_table_seq_open,
-++	.read    = seq_read,
-++	.llseek  = seq_lseek,
-++	.release = single_release,
-++	.write   = ext4_mb_prealloc_table_proc_write,
-++};
-++
-+ static int ext4_mb_seq_groups_open(struct inode *inode, struct file *file)
-+ {
-+ 	struct super_block *sb = PDE_DATA(inode);
-+@@ -2557,7 +2656,6 @@ int ext4_mb_init(struct super_block *sb)
-+ 	sbi->s_mb_max_to_scan = MB_DEFAULT_MAX_TO_SCAN;
-+ 	sbi->s_mb_min_to_scan = MB_DEFAULT_MIN_TO_SCAN;
-+ 	sbi->s_mb_stats = MB_DEFAULT_STATS;
-+-	sbi->s_mb_stream_request = MB_DEFAULT_STREAM_THRESHOLD;
-+ 	sbi->s_mb_order2_reqs = MB_DEFAULT_ORDER2_REQS;
-+ 	/*
-+ 	 * The default group preallocation is 512, which for 4k block
-+@@ -2581,9 +2679,48 @@ int ext4_mb_init(struct super_block *sb)
-+ 	 * RAID stripe size so that preallocations don't fragment
-+ 	 * the stripes.
-+ 	 */
-+-	if (sbi->s_stripe > 1) {
-+-		sbi->s_mb_group_prealloc = roundup(
-+-			sbi->s_mb_group_prealloc, sbi->s_stripe);
-++
-++	if (sbi->s_stripe == 0) {
-++		sbi->s_mb_prealloc_table_size = 10;
-++		i = sbi->s_mb_prealloc_table_size * sizeof(unsigned long);
-++		sbi->s_mb_prealloc_table = kmalloc(i, GFP_NOFS);
-++		if (sbi->s_mb_prealloc_table == NULL) {
-++			ret = -ENOMEM;
-++			goto out;
-++		}
-++		memset(sbi->s_mb_prealloc_table, 0, i);
-++
-++		ext4_mb_prealloc_table_add(sbi, 4);
-++		ext4_mb_prealloc_table_add(sbi, 8);
-++		ext4_mb_prealloc_table_add(sbi, 16);
-++		ext4_mb_prealloc_table_add(sbi, 32);
-++		ext4_mb_prealloc_table_add(sbi, 64);
-++		ext4_mb_prealloc_table_add(sbi, 128);
-++		ext4_mb_prealloc_table_add(sbi, 256);
-++		ext4_mb_prealloc_table_add(sbi, 512);
-++		ext4_mb_prealloc_table_add(sbi, 1024);
-++		ext4_mb_prealloc_table_add(sbi, 2048);
-++
-++		sbi->s_mb_small_req = 256;
-++		sbi->s_mb_large_req = 1024;
-++		sbi->s_mb_group_prealloc = 512;
-++	} else {
-++		sbi->s_mb_prealloc_table_size = 3;
-++		i = sbi->s_mb_prealloc_table_size * sizeof(unsigned long);
-++		sbi->s_mb_prealloc_table = kmalloc(i, GFP_NOFS);
-++		if (sbi->s_mb_prealloc_table == NULL) {
-++			ret = -ENOMEM;
-++			goto out;
-++		}
-++		memset(sbi->s_mb_prealloc_table, 0, i);
-++
-++		ext4_mb_prealloc_table_add(sbi, sbi->s_stripe);
-++		ext4_mb_prealloc_table_add(sbi, sbi->s_stripe * 2);
-++		ext4_mb_prealloc_table_add(sbi, sbi->s_stripe * 4);
-++
-++		sbi->s_mb_small_req = sbi->s_stripe;
-++		sbi->s_mb_large_req = sbi->s_stripe * 8;
-++		sbi->s_mb_group_prealloc = sbi->s_stripe * 4;
-+ 	}
-+ 
-+ 	sbi->s_locality_groups = alloc_percpu(struct ext4_locality_group);
-+@@ -2605,9 +2742,13 @@ int ext4_mb_init(struct super_block *sb)
-+ 	if (ret != 0)
-+ 		goto out_free_locality_groups;
-+ 
-+-	if (sbi->s_proc)
-++	if (sbi->s_proc) {
-+ 		proc_create_data("mb_groups", S_IRUGO, sbi->s_proc,
-+ 				 &ext4_mb_seq_groups_fops, sb);
-++		proc_create_data(EXT4_MB_PREALLOC_TABLE, S_IFREG | S_IRUGO |
-++				 S_IWUSR, sbi->s_proc,
-++				 &ext4_mb_prealloc_seq_fops, sb);
-++	}
-+ 
-+ 	return 0;
-+ 
-+@@ -2615,6 +2756,7 @@ out_free_locality_groups:
-+ 	free_percpu(sbi->s_locality_groups);
-+ 	sbi->s_locality_groups = NULL;
-+ out_free_groupinfo_slab:
-++	kfree(sbi->s_mb_prealloc_table);
-+ 	ext4_groupinfo_destroy_slabs();
-+ out:
-+ 	kfree(sbi->s_mb_offsets);
-+@@ -2651,8 +2793,10 @@ int ext4_mb_release(struct super_block *
-+ 	struct ext4_sb_info *sbi = EXT4_SB(sb);
-+ 	struct kmem_cache *cachep = get_groupinfo_cache(sb->s_blocksize_bits);
-+ 
-+-	if (sbi->s_proc)
-++	if (sbi->s_proc) {
-+ 		remove_proc_entry("mb_groups", sbi->s_proc);
-++		remove_proc_entry(EXT4_MB_PREALLOC_TABLE, sbi->s_proc);
-++	}
-+ 
-+ 	if (sbi->s_group_info) {
-+ 		for (i = 0; i < ngroups; i++) {
-+@@ -2963,9 +3107,9 @@ ext4_mb_normalize_request(struct ext4_al
-+ 				struct ext4_allocation_request *ar)
-+ {
-+ 	struct ext4_sb_info *sbi = EXT4_SB(ac->ac_sb);
-+-	int bsbits, max;
-++	int bsbits, i, wind;
-+ 	ext4_lblk_t end;
-+-	loff_t size, start_off;
-++	loff_t size;
-+ 	loff_t orig_size __maybe_unused;
-+ 	ext4_lblk_t start;
-+ 	struct ext4_inode_info *ei = EXT4_I(ac->ac_inode);
-+@@ -2998,50 +3142,34 @@ ext4_mb_normalize_request(struct ext4_al
-+ 	size = size << bsbits;
-+ 	if (size < i_size_read(ac->ac_inode))
-+ 		size = i_size_read(ac->ac_inode);
-+-	orig_size = size;
-++	size = (size + ac->ac_sb->s_blocksize - 1) >> bsbits;
-+ 
-+-	/* max size of free chunks */
-+-	max = 2 << bsbits;
-++	start = wind = 0;
-+ 
-+-#define NRL_CHECK_SIZE(req, size, max, chunk_size)	\
-+-		(req <= (size) || max <= (chunk_size))
-++	/* let's choose preallocation window depending on file size */
-++	for (i = 0; i < sbi->s_mb_prealloc_table_size; i++) {
-++		if (size <= sbi->s_mb_prealloc_table[i]) {
-++			wind = sbi->s_mb_prealloc_table[i];
-++			break;
-++		}
-++	}
-++	size = wind;
-+ 
-+-	/* first, try to predict filesize */
-+-	/* XXX: should this table be tunable? */
-+-	start_off = 0;
-+-	if (size <= 16 * 1024) {
-+-		size = 16 * 1024;
-+-	} else if (size <= 32 * 1024) {
-+-		size = 32 * 1024;
-+-	} else if (size <= 64 * 1024) {
-+-		size = 64 * 1024;
-+-	} else if (size <= 128 * 1024) {
-+-		size = 128 * 1024;
-+-	} else if (size <= 256 * 1024) {
-+-		size = 256 * 1024;
-+-	} else if (size <= 512 * 1024) {
-+-		size = 512 * 1024;
-+-	} else if (size <= 1024 * 1024) {
-+-		size = 1024 * 1024;
-+-	} else if (NRL_CHECK_SIZE(size, 4 * 1024 * 1024, max, 2 * 1024)) {
-+-		start_off = ((loff_t)ac->ac_o_ex.fe_logical >>
-+-						(21 - bsbits)) << 21;
-+-		size = 2 * 1024 * 1024;
-+-	} else if (NRL_CHECK_SIZE(size, 8 * 1024 * 1024, max, 4 * 1024)) {
-+-		start_off = ((loff_t)ac->ac_o_ex.fe_logical >>
-+-							(22 - bsbits)) << 22;
-+-		size = 4 * 1024 * 1024;
-+-	} else if (NRL_CHECK_SIZE(ac->ac_o_ex.fe_len,
-+-					(8<<20)>>bsbits, max, 8 * 1024)) {
-+-		start_off = ((loff_t)ac->ac_o_ex.fe_logical >>
-+-							(23 - bsbits)) << 23;
-+-		size = 8 * 1024 * 1024;
-+-	} else {
-+-		start_off = (loff_t)ac->ac_o_ex.fe_logical << bsbits;
-+-		size	  = ac->ac_o_ex.fe_len << bsbits;
-++	if (wind == 0) {
-++		__u64 tstart, tend;
-++		/* file is quite large, we now preallocate with
-++		 * the biggest configured window with regart to
-++		 * logical offset */
-++		wind = sbi->s_mb_prealloc_table[i - 1];
-++		tstart = ac->ac_o_ex.fe_logical;
-++		do_div(tstart, wind);
-++		start = tstart * wind;
-++		tend = ac->ac_o_ex.fe_logical + ac->ac_o_ex.fe_len - 1;
-++		do_div(tend, wind);
-++		tend = tend * wind + wind;
-++		size = tend - start;
-+ 	}
-+-	size = size >> bsbits;
-+-	start = start_off >> bsbits;
-++	orig_size = size;
-+ 
-+ 	/* don't cover already allocated blocks in selected range */
-+ 	if (ar->pleft && start <= ar->lleft) {
-+@@ -3117,7 +3245,6 @@ ext4_mb_normalize_request(struct ext4_al
-+ 	}
-+ 	BUG_ON(start + size <= ac->ac_o_ex.fe_logical &&
-+ 			start > ac->ac_o_ex.fe_logical);
-+-	BUG_ON(size <= 0 || size > EXT4_CLUSTERS_PER_GROUP(ac->ac_sb));
-+ 
-+ 	/* now prepare goal request */
-+ 
-+@@ -4056,11 +4183,19 @@ static void ext4_mb_group_or_file(struct
-+ 
-+ 	/* don't use group allocation for large files */
-+ 	size = max(size, isize);
-+-	if (size > sbi->s_mb_stream_request) {
-++	if ((ac->ac_o_ex.fe_len >= sbi->s_mb_small_req) ||
-++	    (size >= sbi->s_mb_large_req)) {
-+ 		ac->ac_flags |= EXT4_MB_STREAM_ALLOC;
-+ 		return;
-+ 	}
-+ 
-++	/*
-++	 * request is so large that we don't care about
-++	 * streaming - it overweights any possible seek
-++	 */
-++	if (ac->ac_o_ex.fe_len >= sbi->s_mb_large_req)
-++		return;
-++
-+ 	BUG_ON(ac->ac_lg != NULL);
-+ 	/*
-+ 	 * locality group prealloc space are per cpu. The reason for having
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/super.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/super.c
-+@@ -2564,7 +2564,8 @@ EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats
-+ EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan);
-+ EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan);
-+ EXT4_RW_ATTR_SBI_UI(mb_order2_req, s_mb_order2_reqs);
-+-EXT4_RW_ATTR_SBI_UI(mb_stream_req, s_mb_stream_request);
-++EXT4_RW_ATTR_SBI_UI(mb_small_req, s_mb_small_req);
-++EXT4_RW_ATTR_SBI_UI(mb_large_req, s_mb_large_req);
-+ EXT4_RW_ATTR_SBI_UI(mb_group_prealloc, s_mb_group_prealloc);
-+ EXT4_DEPRECATED_ATTR(max_writeback_mb_bump, 128);
-+ EXT4_RW_ATTR_SBI_UI(extent_max_zeroout_kb, s_extent_max_zeroout_kb);
-+@@ -2581,7 +2582,8 @@ static struct attribute *ext4_attrs[] =
-+ 	ATTR_LIST(mb_max_to_scan),
-+ 	ATTR_LIST(mb_min_to_scan),
-+ 	ATTR_LIST(mb_order2_req),
-+-	ATTR_LIST(mb_stream_req),
-++	ATTR_LIST(mb_small_req),
-++	ATTR_LIST(mb_large_req),
-+ 	ATTR_LIST(mb_group_prealloc),
-+ 	ATTR_LIST(max_writeback_mb_bump),
-+ 	ATTR_LIST(extent_max_zeroout_kb),
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+@@ -2434,6 +2434,10 @@ static int ext4_writepages(struct addres
-+ 		ext4_journal_stop(handle);
-+ 	}
-+ 
-++	if (wbc->nr_to_write < sbi->s_mb_small_req) {
-++		wbc->nr_to_write = sbi->s_mb_small_req;
-++	}
-++
-+ 	if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
-+ 		range_whole = 1;
-+ 
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch b/ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch
-new file mode 100644
-index 0000000..7e8e94d
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4_data_in_dirent.patch
-@@ -0,0 +1,649 @@
-+this patch implements feature which allows ext4 fs users (e.g. Lustre)
-+to store data in ext4 dirent.
-+data is stored in ext4 dirent after file-name, this space is accounted
-+in de->rec_len. flag EXT4_DIRENT_LUFID added to d_type if extra data
-+is present.
-+
-+make use of dentry->d_fsdata to pass fid to ext4. so no
-+changes in ext4_add_entry() interface required.
-+
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/dir.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/dir.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/dir.c
-+@@ -70,11 +70,11 @@ int __ext4_check_dir_entry(const char *f
-+ 	const int rlen = ext4_rec_len_from_disk(de->rec_len,
-+ 						dir->i_sb->s_blocksize);
-+ 
-+-	if (unlikely(rlen < EXT4_DIR_REC_LEN(1)))
-++	if (unlikely(rlen < __EXT4_DIR_REC_LEN(1)))
-+ 		error_msg = "rec_len is smaller than minimal";
-+ 	else if (unlikely(rlen % 4 != 0))
-+ 		error_msg = "rec_len % 4 != 0";
-+-	else if (unlikely(rlen < EXT4_DIR_REC_LEN(de->name_len)))
-++	else if (unlikely(rlen < EXT4_DIR_REC_LEN(de)))
-+ 		error_msg = "rec_len is too small for name_len";
-+ 	else if (unlikely(((char *) de - buf) + rlen > size))
-+ 		error_msg = "directory entry across range";
-+@@ -202,7 +202,7 @@ static int ext4_readdir(struct file *fil
-+ 				 * failure will be detected in the
-+ 				 * dirent test below. */
-+ 				if (ext4_rec_len_from_disk(de->rec_len,
-+-					sb->s_blocksize) < EXT4_DIR_REC_LEN(1))
-++					sb->s_blocksize) < __EXT4_DIR_REC_LEN(1))
-+ 					break;
-+ 				i += ext4_rec_len_from_disk(de->rec_len,
-+ 							    sb->s_blocksize);
-+@@ -421,12 +421,17 @@ int ext4_htree_store_dirent(struct file
-+ 	struct fname *fname, *new_fn;
-+ 	struct dir_private_info *info;
-+ 	int len;
-++	int extra_data = 1;
-+ 
-+ 	info = dir_file->private_data;
-+ 	p = &info->root.rb_node;
-+ 
-+ 	/* Create and allocate the fname structure */
-+-	len = sizeof(struct fname) + dirent->name_len + 1;
-++	if (dirent->file_type & EXT4_DIRENT_LUFID)
-++		extra_data = ext4_get_dirent_data_len(dirent);
-++
-++	len = sizeof(struct fname) + dirent->name_len + extra_data;
-++
-+ 	new_fn = kzalloc(len, GFP_KERNEL);
-+ 	if (!new_fn)
-+ 		return -ENOMEM;
-+@@ -435,7 +440,7 @@ int ext4_htree_store_dirent(struct file
-+ 	new_fn->inode = le32_to_cpu(dirent->inode);
-+ 	new_fn->name_len = dirent->name_len;
-+ 	new_fn->file_type = dirent->file_type;
-+-	memcpy(new_fn->name, dirent->name, dirent->name_len);
-++	memcpy(new_fn->name, dirent->name, dirent->name_len + extra_data);
-+ 	new_fn->name[dirent->name_len] = 0;
-+ 
-+ 	while (*p) {
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -1534,6 +1534,7 @@ static inline void ext4_clear_state_flag
-+ 					 EXT4_FEATURE_INCOMPAT_64BIT| \
-+ 					 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
-+ 					 EXT4_FEATURE_INCOMPAT_MMP |	\
-++					 EXT4_FEATURE_INCOMPAT_DIRDATA| \
-+ 					 EXT4_FEATURE_INCOMPAT_INLINE_DATA)
-+ #define EXT4_FEATURE_RO_COMPAT_SUPP	(EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
-+ 					 EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
-+@@ -1640,6 +1641,43 @@ struct ext4_dir_entry_tail {
-+ #define EXT4_FT_SYMLINK		7
-+ 
-+ #define EXT4_FT_MAX		8
-++#define EXT4_FT_MASK		0xf
-++
-++#if EXT4_FT_MAX > EXT4_FT_MASK
-++#error "conflicting EXT4_FT_MAX and EXT4_FT_MASK"
-++#endif
-++
-++/*
-++ * d_type has 4 unused bits, so it can hold four types data. these different
-++ * type of data (e.g. lustre data, high 32 bits of 64-bit inode number) can be
-++ * stored, in flag order, after file-name in ext4 dirent.
-++*/
-++/*
-++ * this flag is added to d_type if ext4 dirent has extra data after
-++ * filename. this data length is variable and length is stored in first byte
-++ * of data. data start after filename NUL byte.
-++ * This is used by Lustre FS.
-++  */
-++#define EXT4_DIRENT_LUFID		0x10
-++
-++#define EXT4_LUFID_MAGIC    0xAD200907UL
-++struct ext4_dentry_param {
-++	__u32  edp_magic;	/* EXT4_LUFID_MAGIC */
-++	char   edp_len;		/* size of edp_data in bytes */
-++	char   edp_data[0];	/* packed array of data */
-++} __attribute__((packed));
-++
-++static inline unsigned char *ext4_dentry_get_data(struct super_block *sb,
-++		struct ext4_dentry_param* p)
-++
-++{
-++	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_DIRDATA))
-++		return NULL;
-++	if (p && p->edp_magic == EXT4_LUFID_MAGIC)
-++		return &p->edp_len;
-++	else
-++		return NULL;
-++}
-+ 
-+ #define EXT4_FT_DIR_CSUM	0xDE
-+ 
-+@@ -1650,8 +1688,11 @@ struct ext4_dir_entry_tail {
-+  */
-+ #define EXT4_DIR_PAD			4
-+ #define EXT4_DIR_ROUND			(EXT4_DIR_PAD - 1)
-+-#define EXT4_DIR_REC_LEN(name_len)	(((name_len) + 8 + EXT4_DIR_ROUND) & \
-++#define __EXT4_DIR_REC_LEN(name_len)	(((name_len) + 8 + EXT4_DIR_ROUND) & \
-+ 					 ~EXT4_DIR_ROUND)
-++#define EXT4_DIR_REC_LEN(de)		(__EXT4_DIR_REC_LEN((de)->name_len +\
-++					ext4_get_dirent_data_len(de)))
-++
-+ #define EXT4_MAX_REC_LEN		((1<<16)-1)
-+ 
-+ /*
-+@@ -1998,7 +2039,7 @@ extern int ext4_find_dest_de(struct inod
-+ void ext4_insert_dentry(struct inode *inode,
-+ 			struct ext4_dir_entry_2 *de,
-+ 			int buf_size,
-+-			const char *name, int namelen);
-++			const char *name, int namelen, void *data);
-+ static inline void ext4_update_dx_flag(struct inode *inode)
-+ {
-+ 	if (!EXT4_HAS_COMPAT_FEATURE(inode->i_sb,
-+@@ -2011,11 +2052,18 @@ static unsigned char ext4_filetype_table
-+ 
-+ static inline  unsigned char get_dtype(struct super_block *sb, int filetype)
-+ {
-++	int fl_index = filetype & EXT4_FT_MASK;
-++
-+ 	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FILETYPE) ||
-+-	    (filetype >= EXT4_FT_MAX))
-++	    (fl_index >= EXT4_FT_MAX))
-+ 		return DT_UNKNOWN;
-+ 
-+-	return ext4_filetype_table[filetype];
-++	if (!EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_DIRDATA))
-++		return (ext4_filetype_table[fl_index]);
-++
-++	return (ext4_filetype_table[fl_index]) |
-++		(filetype & EXT4_DIRENT_LUFID);
-++
-+ }
-+ 
-+ /* fsync.c */
-+@@ -2171,7 +2219,7 @@ extern struct buffer_head *ext4_append(h
-+ 				       struct inode *inode,
-+ 				       ext4_lblk_t *block);
-+ extern int ext4_add_dot_dotdot(handle_t *handle, struct inode *dir,
-+-			       struct inode *inode);
-++			       struct inode *inode, const void *, const void *);
-+ extern int search_dir(struct buffer_head *bh,
-+ 		      char *search_buf,
-+ 		      int buf_size,
-+@@ -2827,6 +2875,28 @@ extern struct mutex ext4__aio_mutex[EXT4
-+ extern int ext4_resize_begin(struct super_block *sb);
-+ extern void ext4_resize_end(struct super_block *sb);
-+ 
-++/*
-++ * Compute the total directory entry data length.
-++ * This includes the filename and an implicit NUL terminator (always present),
-++ * and optional extensions.  Each extension has a bit set in the high 4 bits of
-++ * de->file_type, and the extension length is the first byte in each entry.
-++ */
-++static inline int ext4_get_dirent_data_len(struct ext4_dir_entry_2 *de)
-++{
-++	char *len = de->name + de->name_len + 1 /* NUL terminator */;
-++	int dlen = 0;
-++	__u8 extra_data_flags = (de->file_type & ~EXT4_FT_MASK) >> 4;
-++
-++	while (extra_data_flags) {
-++		if (extra_data_flags & 1) {
-++			dlen += *len + (dlen == 0);
-++			len += *len;
-++		}
-++		extra_data_flags >>= 1;
-++	}
-++	return dlen;
-++}
-++
-+ #endif	/* __KERNEL__ */
-+ 
-+ #endif	/* _EXT4_H */
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -247,7 +247,8 @@ static unsigned dx_get_count(struct dx_e
-+ static unsigned dx_get_limit(struct dx_entry *entries);
-+ static void dx_set_count(struct dx_entry *entries, unsigned value);
-+ static void dx_set_limit(struct dx_entry *entries, unsigned value);
-+-static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
-++static inline unsigned dx_root_limit(struct inode *dir,
-++		struct ext4_dir_entry_2 *dot_de, unsigned infosize);
-+ static unsigned dx_node_limit(struct inode *dir);
-+ static struct dx_frame *dx_probe(const struct qstr *d_name,
-+ 				 struct inode *dir,
-+@@ -512,11 +513,12 @@ ext4_next_entry(struct ext4_dir_entry_2
-+  */
-+ struct dx_root_info * dx_get_dx_info(struct ext4_dir_entry_2 *de)
-+ {
-+-       /* get dotdot first */
-+-       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(1));
-++	BUG_ON(de->name_len != 1);
-++	/* get dotdot first */
-++	de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(de));
-+ 
-+-       /* dx root info is after dotdot entry */
-+-       de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(2));
-++	/* dx root info is after dotdot entry */
-++	de = (struct ext4_dir_entry_2 *)((char *)de + EXT4_DIR_REC_LEN(de));
-+ 
-+        return (struct dx_root_info *) de;
-+ }
-+@@ -561,10 +563,16 @@ static inline void dx_set_limit(struct d
-+ 	((struct dx_countlimit *) entries)->limit = cpu_to_le16(value);
-+ }
-+ 
-+-static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
-++static inline unsigned dx_root_limit(struct inode *dir,
-++		struct ext4_dir_entry_2 *dot_de, unsigned infosize)
-+ {
-+-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
-+-		EXT4_DIR_REC_LEN(2) - infosize;
-++	struct ext4_dir_entry_2 *dotdot_de;
-++	unsigned entry_space;
-++
-++	BUG_ON(dot_de->name_len != 1);
-++	dotdot_de = ext4_next_entry(dot_de, dir->i_sb->s_blocksize);
-++	entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(dot_de) -
-++			 EXT4_DIR_REC_LEN(dotdot_de) - infosize;
-+ 
-+ 	if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
-+ 				       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
-+@@ -574,7 +582,7 @@ static inline unsigned dx_root_limit(str
-+ 
-+ static inline unsigned dx_node_limit(struct inode *dir)
-+ {
-+-	unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
-++	unsigned entry_space = dir->i_sb->s_blocksize - __EXT4_DIR_REC_LEN(0);
-+ 
-+ 	if (EXT4_HAS_RO_COMPAT_FEATURE(dir->i_sb,
-+ 				       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
-+@@ -625,7 +633,7 @@ static struct stats dx_show_leaf(struct
-+ 				printk(":%x.%u ", h.hash,
-+ 				       (unsigned) ((char *) de - base));
-+ 			}
-+-			space += EXT4_DIR_REC_LEN(de->name_len);
-++			space += EXT4_DIR_REC_LEN(de);
-+ 			names++;
-+ 		}
-+ 		de = ext4_next_entry(de, size);
-+@@ -731,6 +739,7 @@ dx_probe(const struct qstr *d_name, stru
-+ 	entries = (struct dx_entry *) (((char *)info) + info->info_length);
-+ 
-+ 	if (dx_get_limit(entries) != dx_root_limit(dir,
-++						   (struct ext4_dir_entry_2*)bh->b_data,
-+ 						   info->info_length)) {
-+ 		ext4_warning(dir->i_sb, "dx entry: limit != root limit");
-+ 		brelse(bh);
-+@@ -924,7 +933,7 @@ static int htree_dirblock_to_tree(struct
-+ 	de = (struct ext4_dir_entry_2 *) bh->b_data;
-+ 	top = (struct ext4_dir_entry_2 *) ((char *) de +
-+ 					   dir->i_sb->s_blocksize -
-+-					   EXT4_DIR_REC_LEN(0));
-++					   __EXT4_DIR_REC_LEN(0));
-+ 	for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) {
-+ 		if (ext4_check_dir_entry(dir, NULL, de, bh,
-+ 				bh->b_data, bh->b_size,
-+@@ -1516,7 +1525,7 @@ dx_move_dirents(char *from, char *to, st
-+ 	while (count--) {
-+ 		struct ext4_dir_entry_2 *de = (struct ext4_dir_entry_2 *)
-+ 						(from + (map->offs<<2));
-+-		rec_len = EXT4_DIR_REC_LEN(de->name_len);
-++		rec_len = EXT4_DIR_REC_LEN(de);
-+ 		memcpy (to, de, rec_len);
-+ 		((struct ext4_dir_entry_2 *) to)->rec_len =
-+ 				ext4_rec_len_to_disk(rec_len, blocksize);
-+@@ -1540,7 +1549,7 @@ static struct ext4_dir_entry_2* dx_pack_
-+ 	while ((char*)de < base + blocksize) {
-+ 		next = ext4_next_entry(de, blocksize);
-+ 		if (de->inode && de->name_len) {
-+-			rec_len = EXT4_DIR_REC_LEN(de->name_len);
-++			rec_len = EXT4_DIR_REC_LEN(de);
-+ 			if (de > to)
-+ 				memmove(to, de, rec_len);
-+ 			to->rec_len = ext4_rec_len_to_disk(rec_len, blocksize);
-+@@ -1675,11 +1684,12 @@ int ext4_find_dest_de(struct inode *dir,
-+ 		      struct ext4_dir_entry_2 **dest_de)
-+ {
-+ 	struct ext4_dir_entry_2 *de;
-+-	unsigned short reclen = EXT4_DIR_REC_LEN(namelen);
-++	unsigned short reclen = __EXT4_DIR_REC_LEN((namelen & 0xffff) + (namelen >> 16));
-+ 	int nlen, rlen;
-+ 	unsigned int offset = 0;
-+ 	char *top;
-+ 
-++	namelen &= 0xffff;
-+ 	de = (struct ext4_dir_entry_2 *)buf;
-+ 	top = buf + buf_size - reclen;
-+ 	while ((char *) de <= top) {
-+@@ -1688,7 +1698,7 @@ int ext4_find_dest_de(struct inode *dir,
-+ 			return -EIO;
-+ 		if (ext4_match(namelen, name, de))
-+ 			return -EEXIST;
-+-		nlen = EXT4_DIR_REC_LEN(de->name_len);
-++		nlen = EXT4_DIR_REC_LEN(de);
-+ 		rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
-+ 		if ((de->inode ? rlen - nlen : rlen) >= reclen)
-+ 			break;
-+@@ -1705,12 +1715,12 @@ int ext4_find_dest_de(struct inode *dir,
-+ void ext4_insert_dentry(struct inode *inode,
-+ 			struct ext4_dir_entry_2 *de,
-+ 			int buf_size,
-+-			const char *name, int namelen)
-++			const char *name, int namelen, void *data)
-+ {
-+ 
-+ 	int nlen, rlen;
-+ 
-+-	nlen = EXT4_DIR_REC_LEN(de->name_len);
-++	nlen = EXT4_DIR_REC_LEN(de);
-+ 	rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
-+ 	if (de->inode) {
-+ 		struct ext4_dir_entry_2 *de1 =
-+@@ -1724,6 +1734,11 @@ void ext4_insert_dentry(struct inode *in
-+ 	ext4_set_de_type(inode->i_sb, de, inode->i_mode);
-+ 	de->name_len = namelen;
-+ 	memcpy(de->name, name, namelen);
-++	if (data) {
-++		de->name[namelen] = 0;
-++		memcpy(&de->name[namelen + 1], data, *(char *)data);
-++		de->file_type |= EXT4_DIRENT_LUFID;
-++	}
-+ }
-+ /*
-+  * Add a new entry into a directory (leaf) block.  If de is non-NULL,
-+@@ -1743,15 +1758,21 @@ static int add_dirent_to_buf(handle_t *h
-+ 	unsigned int	blocksize = dir->i_sb->s_blocksize;
-+ 	int		csum_size = 0;
-+ 	int		err;
-++	unsigned char	*data;
-+ 
-++	data = ext4_dentry_get_data(inode->i_sb, (struct ext4_dentry_param *)
-++						dentry->d_fsdata);
-+ 	if (EXT4_HAS_RO_COMPAT_FEATURE(inode->i_sb,
-+ 				       EXT4_FEATURE_RO_COMPAT_METADATA_CSUM))
-+ 		csum_size = sizeof(struct ext4_dir_entry_tail);
-+ 
-+ 	if (!de) {
-++		int dlen = 0;
-++		if (data)
-++			dlen = (*data) + 1;
-+ 		err = ext4_find_dest_de(dir, inode,
-+ 					bh, bh->b_data, blocksize - csum_size,
-+-					name, namelen, &de);
-++					name, namelen + (dlen << 16), &de);
-+ 		if (err)
-+ 			return err;
-+ 	}
-+@@ -1763,7 +1784,7 @@ static int add_dirent_to_buf(handle_t *h
-+ 	}
-+ 
-+ 	/* By now the buffer is marked for journaling */
-+-	ext4_insert_dentry(inode, de, blocksize, name, namelen);
-++	ext4_insert_dentry(inode, de, blocksize, name, namelen, data);
-+ 
-+ 	/*
-+ 	 * XXX shouldn't update any times until successful
-+@@ -1874,7 +1895,8 @@ static int make_indexed_dir(handle_t *ha
-+ 
-+ 	dx_set_block(entries, 1);
-+ 	dx_set_count(entries, 1);
-+-	dx_set_limit(entries, dx_root_limit(dir, sizeof(*dx_info)));
-++	dx_set_limit(entries, dx_root_limit(dir,
-++					 dot_de, sizeof(*dx_info)));
-+ 
-+ 	/* Initialize as for dx_probe */
-+ 	hinfo.hash_version = dx_info->hash_version;
-+@@ -1917,6 +1939,8 @@ static int ext4_update_dotdot(handle_t *
-+ 	struct buffer_head * dir_block;
-+ 	struct ext4_dir_entry_2 * de;
-+ 	int len, journal = 0, err = 0;
-++	int dlen = 0;
-++	char *data;
-+ 
-+ 	if (IS_ERR(handle))
-+ 		return PTR_ERR(handle);
-+@@ -1932,19 +1956,24 @@ static int ext4_update_dotdot(handle_t *
-+ 	/* the first item must be "." */
-+ 	assert(de->name_len == 1 && de->name[0] == '.');
-+ 	len = le16_to_cpu(de->rec_len);
-+-	assert(len >= EXT4_DIR_REC_LEN(1));
-+-	if (len > EXT4_DIR_REC_LEN(1)) {
-++	assert(len >= __EXT4_DIR_REC_LEN(1));
-++	if (len > __EXT4_DIR_REC_LEN(1)) {
-+ 		BUFFER_TRACE(dir_block, "get_write_access");
-+ 		err = ext4_journal_get_write_access(handle, dir_block);
-+ 		if (err)
-+ 			goto out_journal;
-+ 
-+ 		journal = 1;
-+-		de->rec_len = cpu_to_le16(EXT4_DIR_REC_LEN(1));
-++		de->rec_len = cpu_to_le16(EXT4_DIR_REC_LEN(de));
-+ 	}
-+ 
-+-	len -= EXT4_DIR_REC_LEN(1);
-+-	assert(len == 0 || len >= EXT4_DIR_REC_LEN(2));
-++	len -= EXT4_DIR_REC_LEN(de);
-++	data = ext4_dentry_get_data(dir->i_sb,
-++			(struct ext4_dentry_param *) dentry->d_fsdata);
-++	if (data)
-++		dlen = *data + 1;
-++	assert(len == 0 || len >= __EXT4_DIR_REC_LEN(2 + dlen));
-++
-+ 	de = (struct ext4_dir_entry_2 *)
-+ 			((char *) de + le16_to_cpu(de->rec_len));
-+ 	if (!journal) {
-+@@ -1958,10 +1987,15 @@ static int ext4_update_dotdot(handle_t *
-+ 	if (len > 0)
-+ 		de->rec_len = cpu_to_le16(len);
-+ 	else
-+-		assert(le16_to_cpu(de->rec_len) >= EXT4_DIR_REC_LEN(2));
-++		assert(le16_to_cpu(de->rec_len) >= __EXT4_DIR_REC_LEN(2));
-+ 	de->name_len = 2;
-+ 	strcpy (de->name, "..");
-+-	ext4_set_de_type(dir->i_sb, de, S_IFDIR);
-++	if (data != NULL && ext4_get_dirent_data_len(de) >= dlen) {
-++		de->name[2] = 0;
-++		memcpy(&de->name[2 + 1], data, *data);
-++		ext4_set_de_type(dir->i_sb, de, S_IFDIR);
-++		de->file_type |= EXT4_DIRENT_LUFID;
-++	}
-+ 
-+ out_journal:
-+ 	if (journal) {
-+@@ -2474,37 +2508,70 @@ err_drop_inode:
-+ 	return err;
-+ }
-+ 
-++struct tp_block {
-++	struct inode *inode;
-++	void *data1;
-++	void *data2;
-++};
-++
-+ struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
-+ 			  struct ext4_dir_entry_2 *de,
-+ 			  int blocksize, int csum_size,
-+ 			  unsigned int parent_ino, int dotdot_real_len)
-+ {
-++	void *data1 = NULL, *data2 = NULL;
-++	int dot_reclen = 0;
-++
-++	if (dotdot_real_len == 10) {
-++		struct tp_block *tpb = (struct tp_block*)inode;
-++		data1 = tpb->data1;
-++		data2 = tpb->data2;
-++		inode = tpb->inode;
-++		dotdot_real_len = 0;
-++	}
-+ 	de->inode = cpu_to_le32(inode->i_ino);
-+ 	de->name_len = 1;
-+-	de->rec_len = ext4_rec_len_to_disk(EXT4_DIR_REC_LEN(de->name_len),
-+-					   blocksize);
-+ 	strcpy(de->name, ".");
-+ 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
-+ 
-++	/* get packed fid data*/
-++	data1 = ext4_dentry_get_data(inode->i_sb,
-++				(struct ext4_dentry_param *) data1);
-++	if (data1) {
-++		de->name[1] = 0;
-++		memcpy(&de->name[2], data1, *(char *) data1);
-++		de->file_type |= EXT4_DIRENT_LUFID;
-++	}
-++	de->rec_len = cpu_to_le16(EXT4_DIR_REC_LEN(de));
-++	dot_reclen = cpu_to_le16(de->rec_len);
-+ 	de = ext4_next_entry(de, blocksize);
-+ 	de->inode = cpu_to_le32(parent_ino);
-+ 	de->name_len = 2;
-+ 	if (!dotdot_real_len)
-+ 		de->rec_len = ext4_rec_len_to_disk(blocksize -
-+-					(csum_size + EXT4_DIR_REC_LEN(1)),
-++					(csum_size + dot_reclen),
-+ 					blocksize);
-+ 	else
-+ 		de->rec_len = ext4_rec_len_to_disk(
-+-				EXT4_DIR_REC_LEN(de->name_len), blocksize);
-++				EXT4_DIR_REC_LEN(de), blocksize);
-+ 	strcpy(de->name, "..");
-+ 	ext4_set_de_type(inode->i_sb, de, S_IFDIR);
-++	data2 = ext4_dentry_get_data(inode->i_sb,
-++			(struct ext4_dentry_param *) data2);
-++	if (data2) {
-++		de->name[2] = 0;
-++		memcpy(&de->name[3], data2, *(char *) data2);
-++		de->file_type |= EXT4_DIRENT_LUFID;
-++	}
-+ 
-+ 	return ext4_next_entry(de, blocksize);
-+ }
-+ 
-+ static int ext4_init_new_dir(handle_t *handle, struct inode *dir,
-+-			     struct inode *inode)
-++			     struct inode *inode,
-++			     const void *data1, const void *data2)
-+ {
-++	struct tp_block param;
-+ 	struct buffer_head *dir_block = NULL;
-+ 	struct ext4_dir_entry_2 *de;
-+ 	struct ext4_dir_entry_tail *t;
-+@@ -2534,7 +2601,11 @@ static int ext4_init_new_dir(handle_t *h
-+ 	if (err)
-+ 		goto out;
-+ 	de = (struct ext4_dir_entry_2 *)dir_block->b_data;
-+-	ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0);
-++	param.inode = inode;
-++	param.data1 = (void *)data1;
-++	param.data2 = (void *)data2;
-++	ext4_init_dot_dotdot((struct inode *)(&param), de, blocksize,
-++			     csum_size, dir->i_ino, 10);
-+ 	set_nlink(inode, 2);
-+ 	if (csum_size) {
-+ 		t = EXT4_DIRENT_TAIL(dir_block->b_data, blocksize);
-+@@ -2554,7 +2625,8 @@ out:
-+ /* Initialize @inode as a subdirectory of @dir, and add the
-+  * "." and ".." entries into the first directory block. */
-+ int ext4_add_dot_dotdot(handle_t *handle, struct inode * dir,
-+-			struct inode *inode)
-++			struct inode *inode,
-++                       const void *data1, const void *data2)
-+ {
-+ 	if (IS_ERR(handle))
-+ 		return PTR_ERR(handle);
-+@@ -2564,7 +2636,7 @@ int ext4_add_dot_dotdot(handle_t *handle
-+ 
-+ 	inode->i_op = &ext4_dir_inode_operations;
-+ 	inode->i_fop = &ext4_dir_operations;
-+-	return ext4_init_new_dir(handle, dir, inode);
-++	return ext4_init_new_dir(handle, dir, inode, data1, data2);
-+ }
-+ EXPORT_SYMBOL(ext4_add_dot_dotdot);
-+ 
-+@@ -2592,7 +2664,7 @@ retry:
-+ 
-+ 	inode->i_op = &ext4_dir_inode_operations;
-+ 	inode->i_fop = &ext4_dir_operations;
-+-	err = ext4_init_new_dir(handle, dir, inode);
-++	err = ext4_init_new_dir(handle, dir, inode, NULL, NULL);
-+ 	if (err)
-+ 		goto out_clear_inode;
-+ 	err = ext4_mark_inode_dirty(handle, inode);
-+@@ -2644,7 +2716,7 @@ static int empty_dir(struct inode *inode
-+ 	}
-+ 
-+ 	sb = inode->i_sb;
-+-	if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) {
-++	if (inode->i_size < __EXT4_DIR_REC_LEN(1) + __EXT4_DIR_REC_LEN(2)) {
-+ 		EXT4_ERROR_INODE(inode, "invalid size");
-+ 		return 1;
-+ 	}
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inline.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inline.c
-+@@ -998,7 +998,7 @@ static int ext4_add_dirent_to_inline(han
-+ 	int		err;
-+ 	struct ext4_dir_entry_2 *de;
-+ 
-+-	reclen = EXT4_DIR_REC_LEN(namelen);
-++	reclen = __EXT4_DIR_REC_LEN(namelen);
-+ 	err = ext4_find_dest_de(dir, inode, iloc->bh,
-+ 				inline_start, inline_size,
-+ 				name, namelen, &de);
-+@@ -1008,7 +1008,7 @@ static int ext4_add_dirent_to_inline(han
-+ 	err = ext4_journal_get_write_access(handle, iloc->bh);
-+ 	if (err)
-+ 		return err;
-+-	ext4_insert_dentry(inode, de, inline_size, name, namelen);
-++	ext4_insert_dentry(inode, de, inline_size, name, namelen, NULL);
-+ 
-+ 	ext4_show_inline_dir(dir, iloc->bh, inline_start, inline_size);
-+ 
-+@@ -1078,7 +1078,7 @@ static int ext4_update_inline_dir(handle
-+ 	int old_size = EXT4_I(dir)->i_inline_size - EXT4_MIN_INLINE_DATA_SIZE;
-+ 	int new_size = get_max_inline_xattr_value_size(dir, iloc);
-+ 
-+-	if (new_size - old_size <= EXT4_DIR_REC_LEN(1))
-++	if (new_size - old_size <= __EXT4_DIR_REC_LEN(1))
-+ 		return -ENOSPC;
-+ 
-+ 	ret = ext4_update_inline_data(handle, dir,
-+@@ -1348,7 +1348,7 @@ int htree_inlinedir_to_tree(struct file
-+ 			fake.name_len = 1;
-+ 			strcpy(fake.name, ".");
-+ 			fake.rec_len = ext4_rec_len_to_disk(
-+-						EXT4_DIR_REC_LEN(fake.name_len),
-++						EXT4_DIR_REC_LEN(&fake),
-+ 						inline_size);
-+ 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
-+ 			de = &fake;
-+@@ -1358,7 +1358,7 @@ int htree_inlinedir_to_tree(struct file
-+ 			fake.name_len = 2;
-+ 			strcpy(fake.name, "..");
-+ 			fake.rec_len = ext4_rec_len_to_disk(
-+-						EXT4_DIR_REC_LEN(fake.name_len),
-++						EXT4_DIR_REC_LEN(&fake),
-+ 						inline_size);
-+ 			ext4_set_de_type(inode->i_sb, &fake, S_IFDIR);
-+ 			de = &fake;
-+@@ -1453,8 +1453,8 @@ int ext4_read_inline_dir(struct file *fi
-+ 	 * So we will use extra_offset and extra_size to indicate them
-+ 	 * during the inline dir iteration.
-+ 	 */
-+-	dotdot_offset = EXT4_DIR_REC_LEN(1);
-+-	dotdot_size = dotdot_offset + EXT4_DIR_REC_LEN(2);
-++	dotdot_offset = __EXT4_DIR_REC_LEN(1);
-++	dotdot_size = dotdot_offset + __EXT4_DIR_REC_LEN(2);
-+ 	extra_offset = dotdot_size - EXT4_INLINE_DOTDOT_SIZE;
-+ 	extra_size = extra_offset + inline_size;
-+ 
-+@@ -1489,7 +1489,7 @@ int ext4_read_inline_dir(struct file *fi
-+ 			 * failure will be detected in the
-+ 			 * dirent test below. */
-+ 			if (ext4_rec_len_from_disk(de->rec_len, extra_size)
-+-				< EXT4_DIR_REC_LEN(1))
-++				< __EXT4_DIR_REC_LEN(1))
-+ 				break;
-+ 			i += ext4_rec_len_from_disk(de->rec_len,
-+ 						    extra_size);
-diff --git a/ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch b/ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch
-new file mode 100644
-index 0000000..3af9392
---- /dev/null
-+++ b/ldiskfs/kernel_patches/patches/fc19/ext4_pdirop.patch
-@@ -0,0 +1,2252 @@
-+Index: linux-3.11.1-200.fc19.x86_64/include/linux/htree_lock.h
-+===================================================================
-+--- /dev/null
-++++ linux-3.11.1-200.fc19.x86_64/include/linux/htree_lock.h
-+@@ -0,0 +1,187 @@
-++/*
-++ * include/linux/htree_lock.h
-++ *
-++ * Copyright (c) 2011, 2012, Intel Corporation.
-++ *
-++ * Author: Liang Zhen <liang@whamcloud.com>
-++ */
-++
-++/*
-++ * htree lock
-++ *
-++ * htree_lock is an advanced lock, it can support five lock modes (concept is
-++ * taken from DLM) and it's a sleeping lock.
-++ *
-++ * most common use case is:
-++ * - create a htree_lock_head for data
-++ * - each thread (contender) creates it's own htree_lock
-++ * - contender needs to call htree_lock(lock_node, mode) to protect data and
-++ *   call htree_unlock to release lock
-++ *
-++ * Also, there is advanced use-case which is more complex, user can have
-++ * PW/PR lock on particular key, it's mostly used while user holding shared
-++ * lock on the htree (CW, CR)
-++ *
-++ * htree_lock(lock_node, HTREE_LOCK_CR); lock the htree with CR
-++ * htree_node_lock(lock_node, HTREE_LOCK_PR, key...); lock @key with PR
-++ * ...
-++ * htree_node_unlock(lock_node);; unlock the key
-++ *
-++ * Another tip is, we can have N-levels of this kind of keys, all we need to
-++ * do is specifying N-levels while creating htree_lock_head, then we can
-++ * lock/unlock a specific level by:
-++ * htree_node_lock(lock_node, mode1, key1, level1...);
-++ * do something;
-++ * htree_node_lock(lock_node, mode1, key2, level2...);
-++ * do something;
-++ * htree_node_unlock(lock_node, level2);
-++ * htree_node_unlock(lock_node, level1);
-++ *
-++ * NB: for multi-level, should be careful about locking order to avoid deadlock
-++ */
-++
-++#ifndef _LINUX_HTREE_LOCK_H
-++#define _LINUX_HTREE_LOCK_H
-++
-++#include <linux/list.h>
-++#include <linux/spinlock.h>
-++#include <linux/sched.h>
-++
-++/*
-++ * Lock Modes
-++ * more details can be found here:
-++ * http://en.wikipedia.org/wiki/Distributed_lock_manager
-++ */
-++typedef enum {
-++	HTREE_LOCK_EX	= 0, /* exclusive lock: incompatible with all others */
-++	HTREE_LOCK_PW,	     /* protected write: allows only CR users */
-++	HTREE_LOCK_PR,	     /* protected read: allow PR, CR users */
-++	HTREE_LOCK_CW,	     /* concurrent write: allow CR, CW users */
-++	HTREE_LOCK_CR,	     /* concurrent read: allow all but EX users */
-++	HTREE_LOCK_MAX,	     /* number of lock modes */
-++} htree_lock_mode_t;
-++
-++#define HTREE_LOCK_NL		HTREE_LOCK_MAX
-++#define HTREE_LOCK_INVAL	0xdead10c
-++
-++enum {
-++	HTREE_HBITS_MIN		= 2,
-++	HTREE_HBITS_DEF		= 14,
-++	HTREE_HBITS_MAX		= 32,
-++};
-++
-++enum {
-++	HTREE_EVENT_DISABLE	= (0),
-++	HTREE_EVENT_RD		= (1 << HTREE_LOCK_PR),
-++	HTREE_EVENT_WR		= (1 << HTREE_LOCK_PW),
-++	HTREE_EVENT_RDWR	= (HTREE_EVENT_RD | HTREE_EVENT_WR),
-++};
-++
-++struct htree_lock;
-++
-++typedef void (*htree_event_cb_t)(void *target, void *event);
-++
-++struct htree_lock_child {
-++	struct list_head	lc_list;	/* granted list */
-++	htree_event_cb_t	lc_callback;	/* event callback */
-++	unsigned		lc_events;	/* event types */
-++};
-++
-++struct htree_lock_head {
-++	unsigned long		lh_lock;	/* bits lock */
-++	/* blocked lock list (htree_lock) */
-++	struct list_head	lh_blocked_list;
-++	/* # key levels */
-++	u16			lh_depth;
-++	/* hash bits for key and limit number of locks */
-++	u16			lh_hbits;
-++	/* counters for blocked locks */
-++	u16			lh_nblocked[HTREE_LOCK_MAX];
-++	/* counters for granted locks */
-++	u16			lh_ngranted[HTREE_LOCK_MAX];
-++	/* private data */
-++	void			*lh_private;
-++	/* array of children locks */
-++	struct htree_lock_child	lh_children[0];
-++};
-++
-++/* htree_lock_node_t is child-lock for a specific key (ln_value) */
-++struct htree_lock_node {
-++	htree_lock_mode_t	ln_mode;
-++	/* major hash key */
-++	u16			ln_major_key;
-++	/* minor hash key */
-++	u16			ln_minor_key;
-++	struct list_head	ln_major_list;
-++	struct list_head	ln_minor_list;
-++	/* alive list, all locks (granted, blocked, listening) are on it */
-++	struct list_head	ln_alive_list;
-++	/* blocked list */
-++	struct list_head	ln_blocked_list;
-++	/* granted list */
-++	struct list_head	ln_granted_list;
-++	void			*ln_ev_target;
-++};
-++
-++struct htree_lock {
-++	struct task_struct	*lk_task;
-++	struct htree_lock_head	*lk_head;
-++	void			*lk_private;
-++	unsigned		lk_depth;
-++	htree_lock_mode_t	lk_mode;
-++	struct list_head	lk_blocked_list;
-++	struct htree_lock_node	lk_nodes[0];
-++};
-++
-++/* create a lock head, which stands for a resource */
-++struct htree_lock_head *htree_lock_head_alloc(unsigned depth,
-++					      unsigned hbits, unsigned priv);
-++/* free a lock head */
-++void htree_lock_head_free(struct htree_lock_head *lhead);
-++/* register event callback for child lock at level @depth */
-++void htree_lock_event_attach(struct htree_lock_head *lhead, unsigned depth,
-++			     unsigned events, htree_event_cb_t callback);
-++/* create a lock handle, which stands for a thread */
-++struct htree_lock *htree_lock_alloc(unsigned depth, unsigned pbytes);
-++/* free a lock handle */
-++void htree_lock_free(struct htree_lock *lck);
-++/* lock htree, when @wait is true, 0 is returned if the lock can't
-++ * be granted immediately */
-++int htree_lock_try(struct htree_lock *lck, struct htree_lock_head *lhead,
-++		   htree_lock_mode_t mode, int wait);
-++/* unlock htree */
-++void htree_unlock(struct htree_lock *lck);
-++/* unlock and relock htree with @new_mode */
-++int htree_change_lock_try(struct htree_lock *lck,
-++			  htree_lock_mode_t new_mode, int wait);
-++void htree_change_mode(struct htree_lock *lck, htree_lock_mode_t mode);
-++/* require child lock (key) of htree at level @dep, @event will be sent to all
-++ * listeners on this @key while lock being granted */
-++int htree_node_lock_try(struct htree_lock *lck, htree_lock_mode_t mode,
-++			u32 key, unsigned dep, int wait, void *event);
-++/* release child lock at level @dep, this lock will listen on it's key
-++ * if @event isn't NULL, event_cb will be called against @lck while granting
-++ * any other lock at level @dep with the same key */
-++void htree_node_unlock(struct htree_lock *lck, unsigned dep, void *event);
-++/* stop listening on child lock at level @dep */
-++void htree_node_stop_listen(struct htree_lock *lck, unsigned dep);
-++/* for debug */
-++void htree_lock_stat_print(int depth);
-++void htree_lock_stat_reset(void);
-++
-++#define htree_lock(lck, lh, mode)	htree_lock_try(lck, lh, mode, 1)
-++#define htree_change_lock(lck, mode)	htree_change_lock_try(lck, mode, 1)
-++
-++#define htree_lock_mode(lck)		((lck)->lk_mode)
-++
-++#define htree_node_lock(lck, mode, key, dep)	\
-++	htree_node_lock_try(lck, mode, key, dep, 1, NULL)
-++/* this is only safe in thread context of lock owner */
-++#define htree_node_is_granted(lck, dep)		\
-++	((lck)->lk_nodes[dep].ln_mode != HTREE_LOCK_INVAL && \
-++	 (lck)->lk_nodes[dep].ln_mode != HTREE_LOCK_NL)
-++/* this is only safe in thread context of lock owner */
-++#define htree_node_is_listening(lck, dep)	\
-++	((lck)->lk_nodes[dep].ln_mode == HTREE_LOCK_NL)
-++
-++#endif
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/htree_lock.c
-+===================================================================
-+--- /dev/null
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/htree_lock.c
-+@@ -0,0 +1,880 @@
-++/*
-++ * fs/ext4/htree_lock.c
-++ *
-++ * Copyright (c) 2011, 2012, Intel Corporation.
-++ *
-++ * Author: Liang Zhen <liang@whamcloud.com>
-++ */
-++#include <linux/jbd2.h>
-++#include <linux/hash.h>
-++#include <linux/module.h>
-++#include <linux/htree_lock.h>
-++
-++enum {
-++	HTREE_LOCK_BIT_EX	= (1 << HTREE_LOCK_EX),
-++	HTREE_LOCK_BIT_PW	= (1 << HTREE_LOCK_PW),
-++	HTREE_LOCK_BIT_PR	= (1 << HTREE_LOCK_PR),
-++	HTREE_LOCK_BIT_CW	= (1 << HTREE_LOCK_CW),
-++	HTREE_LOCK_BIT_CR	= (1 << HTREE_LOCK_CR),
-++};
-++
-++enum {
-++	HTREE_LOCK_COMPAT_EX	= 0,
-++	HTREE_LOCK_COMPAT_PW	= HTREE_LOCK_COMPAT_EX | HTREE_LOCK_BIT_CR,
-++	HTREE_LOCK_COMPAT_PR	= HTREE_LOCK_COMPAT_PW | HTREE_LOCK_BIT_PR,
-++	HTREE_LOCK_COMPAT_CW	= HTREE_LOCK_COMPAT_PW | HTREE_LOCK_BIT_CW,
-++	HTREE_LOCK_COMPAT_CR	= HTREE_LOCK_COMPAT_CW | HTREE_LOCK_BIT_PR |
-++				  HTREE_LOCK_BIT_PW,
-++};
-++
-++static int htree_lock_compat[] = {
-++	[HTREE_LOCK_EX]		HTREE_LOCK_COMPAT_EX,
-++	[HTREE_LOCK_PW]		HTREE_LOCK_COMPAT_PW,
-++	[HTREE_LOCK_PR]		HTREE_LOCK_COMPAT_PR,
-++	[HTREE_LOCK_CW]		HTREE_LOCK_COMPAT_CW,
-++	[HTREE_LOCK_CR]		HTREE_LOCK_COMPAT_CR,
-++};
-++
-++/* max allowed htree-lock depth.
-++ * We only need depth=3 for ext4 although user can have higher value. */
-++#define HTREE_LOCK_DEP_MAX	16
-++
-++#ifdef HTREE_LOCK_DEBUG
-++
-++static char *hl_name[] = {
-++	[HTREE_LOCK_EX]		"EX",
-++	[HTREE_LOCK_PW]		"PW",
-++	[HTREE_LOCK_PR]		"PR",
-++	[HTREE_LOCK_CW]		"CW",
-++	[HTREE_LOCK_CR]		"CR",
-++};
-++
-++/* lock stats */
-++struct htree_lock_node_stats {
-++	unsigned long long	blocked[HTREE_LOCK_MAX];
-++	unsigned long long	granted[HTREE_LOCK_MAX];
-++	unsigned long long	retried[HTREE_LOCK_MAX];
-++	unsigned long long	events;
-++};
-++
-++struct htree_lock_stats {
-++	struct htree_lock_node_stats	nodes[HTREE_LOCK_DEP_MAX];
-++	unsigned long long	granted[HTREE_LOCK_MAX];
-++	unsigned long long	blocked[HTREE_LOCK_MAX];
-++};
-++
-++static struct htree_lock_stats hl_stats;
-++
-++void htree_lock_stat_reset(void)
-++{
-++	memset(&hl_stats, 0, sizeof(hl_stats));
-++}
-++
-++void htree_lock_stat_print(int depth)
-++{
-++	int     i;
-++	int	j;
-++
-++	printk(KERN_DEBUG "HTREE LOCK STATS:\n");
-++	for (i = 0; i < HTREE_LOCK_MAX; i++) {
-++		printk(KERN_DEBUG "[%s]: G [%10llu], B [%10llu]\n",
-++		       hl_name[i], hl_stats.granted[i], hl_stats.blocked[i]);
-++	}
-++	for (i = 0; i < depth; i++) {
-++		printk(KERN_DEBUG "HTREE CHILD [%d] STATS:\n", i);
-++		for (j = 0; j < HTREE_LOCK_MAX; j++) {
-++			printk(KERN_DEBUG
-++				"[%s]: G [%10llu], B [%10llu], R [%10llu]\n",
-++				hl_name[j], hl_stats.nodes[i].granted[j],
-++				hl_stats.nodes[i].blocked[j],
-++				hl_stats.nodes[i].retried[j]);
-++		}
-++	}
-++}
-++
-++#define lk_grant_inc(m)       do { hl_stats.granted[m]++; } while (0)
-++#define lk_block_inc(m)       do { hl_stats.blocked[m]++; } while (0)
-++#define ln_grant_inc(d, m)    do { hl_stats.nodes[d].granted[m]++; } while (0)
-++#define ln_block_inc(d, m)    do { hl_stats.nodes[d].blocked[m]++; } while (0)
-++#define ln_retry_inc(d, m)    do { hl_stats.nodes[d].retried[m]++; } while (0)
-++#define ln_event_inc(d)       do { hl_stats.nodes[d].events++; } while (0)
-++
-++#else /* !DEBUG */
-++
-++void htree_lock_stat_reset(void) {}
-++void htree_lock_stat_print(int depth) {}
-++
-++#define lk_grant_inc(m)	      do {} while (0)
-++#define lk_block_inc(m)	      do {} while (0)
-++#define ln_grant_inc(d, m)    do {} while (0)
-++#define ln_block_inc(d, m)    do {} while (0)
-++#define ln_retry_inc(d, m)    do {} while (0)
-++#define ln_event_inc(d)	      do {} while (0)
-++
-++#endif /* DEBUG */
-++
-++EXPORT_SYMBOL(htree_lock_stat_reset);
-++EXPORT_SYMBOL(htree_lock_stat_print);
-++
-++#define HTREE_DEP_ROOT		  (-1)
-++
-++#define htree_spin_lock(lhead, dep)				\
-++	bit_spin_lock((dep) + 1, &(lhead)->lh_lock)
-++#define htree_spin_unlock(lhead, dep)				\
-++	bit_spin_unlock((dep) + 1, &(lhead)->lh_lock)
-++
-++#define htree_key_event_ignore(child, ln)			\
-++	(!((child)->lc_events & (1 << (ln)->ln_mode)))
-++
-++static int
-++htree_key_list_empty(struct htree_lock_node *ln)
-++{
-++	return list_empty(&ln->ln_major_list) && list_empty(&ln->ln_minor_list);
-++}
-++
-++static void
-++htree_key_list_del_init(struct htree_lock_node *ln)
-++{
-++	struct htree_lock_node *tmp = NULL;
-++
-++	if (!list_empty(&ln->ln_minor_list)) {
-++		tmp = list_entry(ln->ln_minor_list.next,
-++				 struct htree_lock_node, ln_minor_list);
-++		list_del_init(&ln->ln_minor_list);
-++	}
-++
-++	if (list_empty(&ln->ln_major_list))
-++		return;
-++
-++	if (tmp == NULL) { /* not on minor key list */
-++		list_del_init(&ln->ln_major_list);
-++	} else {
-++		BUG_ON(!list_empty(&tmp->ln_major_list));
-++		list_replace_init(&ln->ln_major_list, &tmp->ln_major_list);
-++	}
-++}
-++
-++static void
-++htree_key_list_replace_init(struct htree_lock_node *old,
-++			    struct htree_lock_node *new)
-++{
-++	if (!list_empty(&old->ln_major_list))
-++		list_replace_init(&old->ln_major_list, &new->ln_major_list);
-++
-++	if (!list_empty(&old->ln_minor_list))
-++		list_replace_init(&old->ln_minor_list, &new->ln_minor_list);
-++}
-++
-++static void
-++htree_key_event_enqueue(struct htree_lock_child *child,
-++			struct htree_lock_node *ln, int dep, void *event)
-++{
-++	struct htree_lock_node *tmp;
-++
-++	/* NB: ALWAYS called holding lhead::lh_lock(dep) */
-++	BUG_ON(ln->ln_mode == HTREE_LOCK_NL);
-++	if (event == NULL || htree_key_event_ignore(child, ln))
-++		return;
-++
-++	/* shouldn't be a very long list */
-++	list_for_each_entry(tmp, &ln->ln_alive_list, ln_alive_list) {
-++		if (tmp->ln_mode == HTREE_LOCK_NL) {
-++			ln_event_inc(dep);
-++			if (child->lc_callback != NULL)
-++				child->lc_callback(tmp->ln_ev_target, event);
-++		}
-++	}
-++}
-++
-++static int
-++htree_node_lock_enqueue(struct htree_lock *newlk, struct htree_lock *curlk,
-++			unsigned dep, int wait, void *event)
-++{
-++	struct htree_lock_child *child = &newlk->lk_head->lh_children[dep];
-++	struct htree_lock_node *newln = &newlk->lk_nodes[dep];
-++	struct htree_lock_node *curln = &curlk->lk_nodes[dep];
-++
-++	/* NB: ALWAYS called holding lhead::lh_lock(dep) */
-++	/* NB: we only expect PR/PW lock mode at here, only these two modes are
-++	 * allowed for htree_node_lock(asserted in htree_node_lock_internal),
-++	 * NL is only used for listener, user can't directly require NL mode */
-++	if ((curln->ln_mode == HTREE_LOCK_NL) ||
-++	    (curln->ln_mode != HTREE_LOCK_PW &&
-++	     newln->ln_mode != HTREE_LOCK_PW)) {
-++		/* no conflict, attach it on granted list of @curlk */
-++		if (curln->ln_mode != HTREE_LOCK_NL) {
-++			list_add(&newln->ln_granted_list,
-++				 &curln->ln_granted_list);
-++		} else {
-++			/* replace key owner */
-++			htree_key_list_replace_init(curln, newln);
-++		}
-++
-++		list_add(&newln->ln_alive_list, &curln->ln_alive_list);
-++		htree_key_event_enqueue(child, newln, dep, event);
-++		ln_grant_inc(dep, newln->ln_mode);
-++		return 1; /* still hold lh_lock */
-++	}
-++
-++	if (!wait) { /* can't grant and don't want to wait */
-++		ln_retry_inc(dep, newln->ln_mode);
-++		newln->ln_mode = HTREE_LOCK_INVAL;
-++		return -1; /* don't wait and just return -1 */
-++	}
-++
-++	newlk->lk_task = current;
-++	set_current_state(TASK_UNINTERRUPTIBLE);
-++	/* conflict, attach it on blocked list of curlk */
-++	list_add_tail(&newln->ln_blocked_list, &curln->ln_blocked_list);
-++	list_add(&newln->ln_alive_list, &curln->ln_alive_list);
-++	ln_block_inc(dep, newln->ln_mode);
-++
-++	htree_spin_unlock(newlk->lk_head, dep);
-++	/* wait to be given the lock */
-++	if (newlk->lk_task != NULL)
-++		schedule();
-++	/* granted, no doubt, wake up will set me RUNNING */
-++	if (event == NULL || htree_key_event_ignore(child, newln))
-++		return 0; /* granted without lh_lock */
-++
-++	htree_spin_lock(newlk->lk_head, dep);
-++	htree_key_event_enqueue(child, newln, dep, event);
-++	return 1; /* still hold lh_lock */
-++}
-++
-++/*
-++ * get PR/PW access to particular tree-node according to @dep and @key,
-++ * it will return -1 if @wait is false and can't immediately grant this lock.
-++ * All listeners(HTREE_LOCK_NL) on @dep and with the same @key will get
-++ * @event if it's not NULL.
-++ * NB: ALWAYS called holding lhead::lh_lock
-++ */
-++static int
-++htree_node_lock_internal(struct htree_lock_head *lhead, struct htree_lock *lck,
-++			 htree_lock_mode_t mode, u32 key, unsigned dep,
-++			 int wait, void *event)
-++{
-++	LIST_HEAD		(list);
-++	struct htree_lock	*tmp;
-++	struct htree_lock	*tmp2;
-++	u16			major;
-++	u16			minor;
-++	u8			reverse;
-++	u8			ma_bits;
-++	u8			mi_bits;
-++
-++	BUG_ON(mode != HTREE_LOCK_PW && mode != HTREE_LOCK_PR);
-++	BUG_ON(htree_node_is_granted(lck, dep));
-++
-++	key = hash_long(key, lhead->lh_hbits);
-++
-++	mi_bits = lhead->lh_hbits >> 1;
-++	ma_bits = lhead->lh_hbits - mi_bits;
-++
-++	lck->lk_nodes[dep].ln_major_key = major = key & ((1U << ma_bits) - 1);
-++	lck->lk_nodes[dep].ln_minor_key = minor = key >> ma_bits;
-++	lck->lk_nodes[dep].ln_mode = mode;
-++
-++	/*
-++	 * The major key list is an ordered list, so searches are started
-++	 * at the end of the list that is numerically closer to major_key,
-++	 * so at most half of the list will be walked (for well-distributed
-++	 * keys). The list traversal aborts early if the expected key
-++	 * location is passed.
-++	 */
-++	reverse = (major >= (1 << (ma_bits - 1)));
-++
-++	if (reverse) {
-++		list_for_each_entry_reverse(tmp,
-++					&lhead->lh_children[dep].lc_list,
-++					lk_nodes[dep].ln_major_list) {
-++			if (tmp->lk_nodes[dep].ln_major_key == major) {
-++				goto search_minor;
-++
-++			} else if (tmp->lk_nodes[dep].ln_major_key < major) {
-++				/* attach _after_ @tmp */
-++				list_add(&lck->lk_nodes[dep].ln_major_list,
-++					 &tmp->lk_nodes[dep].ln_major_list);
-++				goto out_grant_major;
-++			}
-++		}
-++
-++		list_add(&lck->lk_nodes[dep].ln_major_list,
-++			 &lhead->lh_children[dep].lc_list);
-++		goto out_grant_major;
-++
-++	} else {
-++		list_for_each_entry(tmp, &lhead->lh_children[dep].lc_list,
-++				    lk_nodes[dep].ln_major_list) {
-++			if (tmp->lk_nodes[dep].ln_major_key == major) {
-++				goto search_minor;
-++
-++			} else if (tmp->lk_nodes[dep].ln_major_key > major) {
-++				/* insert _before_ @tmp */
-++				list_add_tail(&lck->lk_nodes[dep].ln_major_list,
-++					&tmp->lk_nodes[dep].ln_major_list);
-++				goto out_grant_major;
-++			}
-++		}
-++
-++		list_add_tail(&lck->lk_nodes[dep].ln_major_list,
-++			      &lhead->lh_children[dep].lc_list);
-++		goto out_grant_major;
-++	}
-++
-++ search_minor:
-++	/*
-++	 * NB: minor_key list doesn't have a "head", @list is just a
-++	 * temporary stub for helping list searching, make sure it's removed
-++	 * after searching.
-++	 * minor_key list is an ordered list too.
-++	 */
-++	list_add_tail(&list, &tmp->lk_nodes[dep].ln_minor_list);
-++
-++	reverse = (minor >= (1 << (mi_bits - 1)));
-++
-++	if (reverse) {
-++		list_for_each_entry_reverse(tmp2, &list,
-++					    lk_nodes[dep].ln_minor_list) {
-++			if (tmp2->lk_nodes[dep].ln_minor_key == minor) {
-++				goto out_enqueue;
-++
-++			} else if (tmp2->lk_nodes[dep].ln_minor_key < minor) {
-++				/* attach _after_ @tmp2 */
-++				list_add(&lck->lk_nodes[dep].ln_minor_list,
-++					 &tmp2->lk_nodes[dep].ln_minor_list);
-++				goto out_grant_minor;
-++			}
-++		}
-++
-++		list_add(&lck->lk_nodes[dep].ln_minor_list, &list);
-++
-++	} else {
-++		list_for_each_entry(tmp2, &list,
-++				    lk_nodes[dep].ln_minor_list) {
-++			if (tmp2->lk_nodes[dep].ln_minor_key == minor) {
-++				goto out_enqueue;
-++
-++			} else if (tmp2->lk_nodes[dep].ln_minor_key > minor) {
-++				/* insert _before_ @tmp2 */
-++				list_add_tail(&lck->lk_nodes[dep].ln_minor_list,
-++					&tmp2->lk_nodes[dep].ln_minor_list);
-++				goto out_grant_minor;
-++			}
-++		}
-++
-++		list_add_tail(&lck->lk_nodes[dep].ln_minor_list, &list);
-++	}
-++
-++ out_grant_minor:
-++	if (list.next == &lck->lk_nodes[dep].ln_minor_list) {
-++		/* new lock @lck is the first one on minor_key list, which
-++		 * means it has the smallest minor_key and it should
-++		 * replace @tmp as minor_key owner */
-++		list_replace_init(&tmp->lk_nodes[dep].ln_major_list,
-++				  &lck->lk_nodes[dep].ln_major_list);
-++	}
-++	/* remove the temporary head */
-++	list_del(&list);
-++
-++ out_grant_major:
-++	ln_grant_inc(dep, lck->lk_nodes[dep].ln_mode);
-++	return 1; /* granted with holding lh_lock */
-++
-++ out_enqueue:
-++	list_del(&list); /* remove temprary head */
-++	return htree_node_lock_enqueue(lck, tmp2, dep, wait, event);
-++}
-++
-++/*
-++ * release the key of @lck at level @dep, and grant any blocked locks.
-++ * caller will still listen on @key if @event is not NULL, which means
-++ * caller can see a event (by event_cb) while granting any lock with
-++ * the same key at level @dep.
-++ * NB: ALWAYS called holding lhead::lh_lock
-++ * NB: listener will not block anyone because listening mode is HTREE_LOCK_NL
-++ */
-++static void
-++htree_node_unlock_internal(struct htree_lock_head *lhead,
-++			   struct htree_lock *curlk, unsigned dep, void *event)
-++{
-++	struct htree_lock_node	*curln = &curlk->lk_nodes[dep];
-++	struct htree_lock	*grtlk = NULL;
-++	struct htree_lock_node	*grtln;
-++	struct htree_lock	*poslk;
-++	struct htree_lock	*tmplk;
-++
-++	if (!htree_node_is_granted(curlk, dep))
-++		return;
-++
-++	if (!list_empty(&curln->ln_granted_list)) {
-++		/* there is another granted lock */
-++		grtlk = list_entry(curln->ln_granted_list.next,
-++				   struct htree_lock,
-++				   lk_nodes[dep].ln_granted_list);
-++		list_del_init(&curln->ln_granted_list);
-++	}
-++
-++	if (grtlk == NULL && !list_empty(&curln->ln_blocked_list)) {
-++		/*
-++		 * @curlk is the only granted lock, so we confirmed:
-++		 * a) curln is key owner (attached on major/minor_list),
-++		 *    so if there is any blocked lock, it should be attached
-++		 *    on curln->ln_blocked_list
-++		 * b) we always can grant the first blocked lock
-++		 */
-++		grtlk = list_entry(curln->ln_blocked_list.next,
-++				   struct htree_lock,
-++				   lk_nodes[dep].ln_blocked_list);
-++		BUG_ON(grtlk->lk_task == NULL);
-++		wake_up_process(grtlk->lk_task);
-++	}
-++
-++	if (event != NULL &&
-++	    lhead->lh_children[dep].lc_events != HTREE_EVENT_DISABLE) {
-++		curln->ln_ev_target = event;
-++		curln->ln_mode = HTREE_LOCK_NL; /* listen! */
-++	} else {
-++		curln->ln_mode = HTREE_LOCK_INVAL;
-++	}
-++
-++	if (grtlk == NULL) { /* I must be the only one locking this key */
-++		struct htree_lock_node *tmpln;
-++
-++		BUG_ON(htree_key_list_empty(curln));
-++
-++		if (curln->ln_mode == HTREE_LOCK_NL) /* listening */
-++			return;
-++
-++		/* not listening */
-++		if (list_empty(&curln->ln_alive_list)) { /* no more listener */
-++			htree_key_list_del_init(curln);
-++			return;
-++		}
-++
-++		tmpln = list_entry(curln->ln_alive_list.next,
-++				   struct htree_lock_node, ln_alive_list);
-++
-++		BUG_ON(tmpln->ln_mode != HTREE_LOCK_NL);
-++
-++		htree_key_list_replace_init(curln, tmpln);
-++		list_del_init(&curln->ln_alive_list);
-++
-++		return;
-++	}
-++
-++	/* have a granted lock */
-++	grtln = &grtlk->lk_nodes[dep];
-++	if (!list_empty(&curln->ln_blocked_list)) {
-++		/* only key owner can be on both lists */
-++		BUG_ON(htree_key_list_empty(curln));
-++
-++		if (list_empty(&grtln->ln_blocked_list)) {
-++			list_add(&grtln->ln_blocked_list,
-++				 &curln->ln_blocked_list);
-++		}
-++		list_del_init(&curln->ln_blocked_list);
-++	}
-++	/*
-++	 * NB: this is the tricky part:
-++	 * We have only two modes for child-lock (PR and PW), also,
-++	 * only owner of the key (attached on major/minor_list) can be on
-++	 * both blocked_list and granted_list, so @grtlk must be one
-++	 * of these two cases:
-++	 *
-++	 * a) @grtlk is taken from granted_list, which means we've granted
-++	 *    more than one lock so @grtlk has to be PR, the first blocked
-++	 *    lock must be PW and we can't grant it at all.
-++	 *    So even @grtlk is not owner of the key (empty blocked_list),
-++	 *    we don't care because we can't grant any lock.
-++	 * b) we just grant a new lock which is taken from head of blocked
-++	 *    list, and it should be the first granted lock, and it should
-++	 *    be the first one linked on blocked_list.
-++	 *
-++	 * Either way, we can get correct result by iterating blocked_list
-++	 * of @grtlk, and don't have to bother on how to find out
-++	 * owner of current key.
-++	 */
-++	list_for_each_entry_safe(poslk, tmplk, &grtln->ln_blocked_list,
-++				 lk_nodes[dep].ln_blocked_list) {
-++		if (grtlk->lk_nodes[dep].ln_mode == HTREE_LOCK_PW ||
-++		    poslk->lk_nodes[dep].ln_mode == HTREE_LOCK_PW)
-++			break;
-++		/* grant all readers */
-++		list_del_init(&poslk->lk_nodes[dep].ln_blocked_list);
-++		list_add(&poslk->lk_nodes[dep].ln_granted_list,
-++			 &grtln->ln_granted_list);
-++
-++		BUG_ON(poslk->lk_task == NULL);
-++		wake_up_process(poslk->lk_task);
-++	}
-++
-++	/* if @curln is the owner of this key, replace it with @grtln */
-++	if (!htree_key_list_empty(curln))
-++		htree_key_list_replace_init(curln, grtln);
-++
-++	if (curln->ln_mode == HTREE_LOCK_INVAL)
-++		list_del_init(&curln->ln_alive_list);
-++}
-++
-++/*
-++ * it's just wrapper of htree_node_lock_internal, it returns 1 on granted
-++ * and 0 only if @wait is false and can't grant it immediately
-++ */
-++int
-++htree_node_lock_try(struct htree_lock *lck, htree_lock_mode_t mode,
-++		    u32 key, unsigned dep, int wait, void *event)
-++{
-++	struct htree_lock_head *lhead = lck->lk_head;
-++	int rc;
-++
-++	BUG_ON(dep >= lck->lk_depth);
-++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
-++
-++	htree_spin_lock(lhead, dep);
-++	rc = htree_node_lock_internal(lhead, lck, mode, key, dep, wait, event);
-++	if (rc != 0)
-++		htree_spin_unlock(lhead, dep);
-++	return rc >= 0;
-++}
-++EXPORT_SYMBOL(htree_node_lock_try);
-++
-++/* it's wrapper of htree_node_unlock_internal */
-++void
-++htree_node_unlock(struct htree_lock *lck, unsigned dep, void *event)
-++{
-++	struct htree_lock_head *lhead = lck->lk_head;
-++
-++	BUG_ON(dep >= lck->lk_depth);
-++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
-++
-++	htree_spin_lock(lhead, dep);
-++	htree_node_unlock_internal(lhead, lck, dep, event);
-++	htree_spin_unlock(lhead, dep);
-++}
-++EXPORT_SYMBOL(htree_node_unlock);
-++
-++/* stop listening on child-lock level @dep */
-++void
-++htree_node_stop_listen(struct htree_lock *lck, unsigned dep)
-++{
-++	struct htree_lock_node *ln = &lck->lk_nodes[dep];
-++	struct htree_lock_node *tmp;
-++
-++	BUG_ON(htree_node_is_granted(lck, dep));
-++	BUG_ON(!list_empty(&ln->ln_blocked_list));
-++	BUG_ON(!list_empty(&ln->ln_granted_list));
-++
-++	if (!htree_node_is_listening(lck, dep))
-++		return;
-++
-++	htree_spin_lock(lck->lk_head, dep);
-++	ln->ln_mode = HTREE_LOCK_INVAL;
-++	ln->ln_ev_target = NULL;
-++
-++	if (htree_key_list_empty(ln)) { /* not owner */
-++		list_del_init(&ln->ln_alive_list);
-++		goto out;
-++	}
-++
-++	/* I'm the owner... */
-++	if (list_empty(&ln->ln_alive_list)) { /* no more listener */
-++		htree_key_list_del_init(ln);
-++		goto out;
-++	}
-++
-++	tmp = list_entry(ln->ln_alive_list.next,
-++			 struct htree_lock_node, ln_alive_list);
-++
-++	BUG_ON(tmp->ln_mode != HTREE_LOCK_NL);
-++	htree_key_list_replace_init(ln, tmp);
-++	list_del_init(&ln->ln_alive_list);
-++ out:
-++	htree_spin_unlock(lck->lk_head, dep);
-++}
-++EXPORT_SYMBOL(htree_node_stop_listen);
-++
-++/* release all child-locks if we have any */
-++static void
-++htree_node_release_all(struct htree_lock *lck)
-++{
-++	int	i;
-++
-++	for (i = 0; i < lck->lk_depth; i++) {
-++		if (htree_node_is_granted(lck, i))
-++			htree_node_unlock(lck, i, NULL);
-++		else if (htree_node_is_listening(lck, i))
-++			htree_node_stop_listen(lck, i);
-++	}
-++}
-++
-++/*
-++ * obtain htree lock, it could be blocked inside if there's conflict
-++ * with any granted or blocked lock and @wait is true.
-++ * NB: ALWAYS called holding lhead::lh_lock
-++ */
-++static int
-++htree_lock_internal(struct htree_lock *lck, int wait)
-++{
-++	struct htree_lock_head *lhead = lck->lk_head;
-++	int	granted = 0;
-++	int	blocked = 0;
-++	int	i;
-++
-++	for (i = 0; i < HTREE_LOCK_MAX; i++) {
-++		if (lhead->lh_ngranted[i] != 0)
-++			granted |= 1 << i;
-++		if (lhead->lh_nblocked[i] != 0)
-++			blocked |= 1 << i;
-++	}
-++	if ((htree_lock_compat[lck->lk_mode] & granted) != granted ||
-++	    (htree_lock_compat[lck->lk_mode] & blocked) != blocked) {
-++		/* will block current lock even it just conflicts with any
-++		 * other blocked lock, so lock like EX wouldn't starve */
-++		if (!wait)
-++			return -1;
-++		lhead->lh_nblocked[lck->lk_mode]++;
-++		lk_block_inc(lck->lk_mode);
-++
-++		lck->lk_task = current;
-++		list_add_tail(&lck->lk_blocked_list, &lhead->lh_blocked_list);
-++
-++		set_current_state(TASK_UNINTERRUPTIBLE);
-++		htree_spin_unlock(lhead, HTREE_DEP_ROOT);
-++		/* wait to be given the lock */
-++		if (lck->lk_task != NULL)
-++			schedule();
-++		/* granted, no doubt. wake up will set me RUNNING */
-++		return 0; /* without lh_lock */
-++	}
-++	lhead->lh_ngranted[lck->lk_mode]++;
-++	lk_grant_inc(lck->lk_mode);
-++	return 1;
-++}
-++
-++/* release htree lock. NB: ALWAYS called holding lhead::lh_lock */
-++static void
-++htree_unlock_internal(struct htree_lock *lck)
-++{
-++	struct htree_lock_head *lhead = lck->lk_head;
-++	struct htree_lock *tmp;
-++	struct htree_lock *tmp2;
-++	int granted = 0;
-++	int i;
-++
-++	BUG_ON(lhead->lh_ngranted[lck->lk_mode] == 0);
-++
-++	lhead->lh_ngranted[lck->lk_mode]--;
-++	lck->lk_mode = HTREE_LOCK_INVAL;
-++
-++	for (i = 0; i < HTREE_LOCK_MAX; i++) {
-++		if (lhead->lh_ngranted[i] != 0)
-++			granted |= 1 << i;
-++	}
-++	list_for_each_entry_safe(tmp, tmp2,
-++				 &lhead->lh_blocked_list, lk_blocked_list) {
-++		/* conflict with any granted lock? */
-++		if ((htree_lock_compat[tmp->lk_mode] & granted) != granted)
-++			break;
-++
-++		list_del_init(&tmp->lk_blocked_list);
-++
-++		BUG_ON(lhead->lh_nblocked[tmp->lk_mode] == 0);
-++
-++		lhead->lh_nblocked[tmp->lk_mode]--;
-++		lhead->lh_ngranted[tmp->lk_mode]++;
-++		granted |= 1 << tmp->lk_mode;
-++
-++		BUG_ON(tmp->lk_task == NULL);
-++		wake_up_process(tmp->lk_task);
-++	}
-++}
-++
-++/* it's wrapper of htree_lock_internal and exported interface.
-++ * It always return 1 with granted lock if @wait is true, it can return 0
-++ * if @wait is false and locking request can't be granted immediately */
-++int
-++htree_lock_try(struct htree_lock *lck, struct htree_lock_head *lhead,
-++	       htree_lock_mode_t mode, int wait)
-++{
-++	int	rc;
-++
-++	BUG_ON(lck->lk_depth > lhead->lh_depth);
-++	BUG_ON(lck->lk_head != NULL);
-++	BUG_ON(lck->lk_task != NULL);
-++
-++	lck->lk_head = lhead;
-++	lck->lk_mode = mode;
-++
-++	htree_spin_lock(lhead, HTREE_DEP_ROOT);
-++	rc = htree_lock_internal(lck, wait);
-++	if (rc != 0)
-++		htree_spin_unlock(lhead, HTREE_DEP_ROOT);
-++	return rc >= 0;
-++}
-++EXPORT_SYMBOL(htree_lock_try);
-++
-++/* it's wrapper of htree_unlock_internal and exported interface.
-++ * It will release all htree_node_locks and htree_lock */
-++void
-++htree_unlock(struct htree_lock *lck)
-++{
-++	BUG_ON(lck->lk_head == NULL);
-++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
-++
-++	htree_node_release_all(lck);
-++
-++	htree_spin_lock(lck->lk_head, HTREE_DEP_ROOT);
-++	htree_unlock_internal(lck);
-++	htree_spin_unlock(lck->lk_head, HTREE_DEP_ROOT);
-++	lck->lk_head = NULL;
-++	lck->lk_task = NULL;
-++}
-++EXPORT_SYMBOL(htree_unlock);
-++
-++/* change lock mode */
-++void
-++htree_change_mode(struct htree_lock *lck, htree_lock_mode_t mode)
-++{
-++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL);
-++	lck->lk_mode = mode;
-++}
-++EXPORT_SYMBOL(htree_change_mode);
-++
-++/* release htree lock, and lock it again with new mode.
-++ * This function will first release all htree_node_locks and htree_lock,
-++ * then try to gain htree_lock with new @mode.
-++ * It always return 1 with granted lock if @wait is true, it can return 0
-++ * if @wait is false and locking request can't be granted immediately */
-++int
-++htree_change_lock_try(struct htree_lock *lck, htree_lock_mode_t mode, int wait)
-++{
-++	struct htree_lock_head *lhead = lck->lk_head;
-++	int rc;
-++
-++	BUG_ON(lhead == NULL);
-++	BUG_ON(lck->lk_mode == mode);
-++	BUG_ON(lck->lk_mode == HTREE_LOCK_INVAL || mode == HTREE_LOCK_INVAL);
-++
-++	htree_node_release_all(lck);
-++
-++	htree_spin_lock(lhead, HTREE_DEP_ROOT);
-++	htree_unlock_internal(lck);
-++	lck->lk_mode = mode;
-++	rc = htree_lock_internal(lck, wait);
-++	if (rc != 0)
-++		htree_spin_unlock(lhead, HTREE_DEP_ROOT);
-++	return rc >= 0;
-++}
-++EXPORT_SYMBOL(htree_change_lock_try);
-++
-++/* create a htree_lock head with @depth levels (number of child-locks),
-++ * it is a per resoruce structure */
-++struct htree_lock_head *
-++htree_lock_head_alloc(unsigned depth, unsigned hbits, unsigned priv)
-++{
-++	struct htree_lock_head *lhead;
-++	int  i;
-++
-++	if (depth > HTREE_LOCK_DEP_MAX) {
-++		printk(KERN_ERR "%d is larger than max htree_lock depth %d\n",
-++			depth, HTREE_LOCK_DEP_MAX);
-++		return NULL;
-++	}
-++
-++	lhead = kzalloc(offsetof(struct htree_lock_head,
-++				 lh_children[depth]) + priv, GFP_NOFS);
-++	if (lhead == NULL)
-++		return NULL;
-++
-++	if (hbits < HTREE_HBITS_MIN)
-++		lhead->lh_hbits = HTREE_HBITS_MIN;
-++	else if (hbits > HTREE_HBITS_MAX)
-++		lhead->lh_hbits = HTREE_HBITS_MAX;
-++
-++	lhead->lh_lock = 0;
-++	lhead->lh_depth = depth;
-++	INIT_LIST_HEAD(&lhead->lh_blocked_list);
-++	if (priv > 0) {
-++		lhead->lh_private = (void *)lhead +
-++			offsetof(struct htree_lock_head, lh_children[depth]);
-++	}
-++
-++	for (i = 0; i < depth; i++) {
-++		INIT_LIST_HEAD(&lhead->lh_children[i].lc_list);
-++		lhead->lh_children[i].lc_events = HTREE_EVENT_DISABLE;
-++	}
-++	return lhead;
-++}
-++EXPORT_SYMBOL(htree_lock_head_alloc);
-++
-++/* free the htree_lock head */
-++void
-++htree_lock_head_free(struct htree_lock_head *lhead)
-++{
-++	int     i;
-++
-++	BUG_ON(!list_empty(&lhead->lh_blocked_list));
-++	for (i = 0; i < lhead->lh_depth; i++)
-++		BUG_ON(!list_empty(&lhead->lh_children[i].lc_list));
-++	kfree(lhead);
-++}
-++EXPORT_SYMBOL(htree_lock_head_free);
-++
-++/* register event callback for @events of child-lock at level @dep */
-++void
-++htree_lock_event_attach(struct htree_lock_head *lhead, unsigned dep,
-++			unsigned events, htree_event_cb_t callback)
-++{
-++	BUG_ON(lhead->lh_depth <= dep);
-++	lhead->lh_children[dep].lc_events = events;
-++	lhead->lh_children[dep].lc_callback = callback;
-++}
-++EXPORT_SYMBOL(htree_lock_event_attach);
-++
-++/* allocate a htree_lock, which is per-thread structure, @pbytes is some
-++ * extra-bytes as private data for caller */
-++struct htree_lock *
-++htree_lock_alloc(unsigned depth, unsigned pbytes)
-++{
-++	struct htree_lock *lck;
-++	int i = offsetof(struct htree_lock, lk_nodes[depth]);
-++
-++	if (depth > HTREE_LOCK_DEP_MAX) {
-++		printk(KERN_ERR "%d is larger than max htree_lock depth %d\n",
-++			depth, HTREE_LOCK_DEP_MAX);
-++		return NULL;
-++	}
-++	lck = kzalloc(i + pbytes, GFP_NOFS);
-++	if (lck == NULL)
-++		return NULL;
-++
-++	if (pbytes != 0)
-++		lck->lk_private = (void *)lck + i;
-++	lck->lk_mode = HTREE_LOCK_INVAL;
-++	lck->lk_depth = depth;
-++	INIT_LIST_HEAD(&lck->lk_blocked_list);
-++
-++	for (i = 0; i < depth; i++) {
-++		struct htree_lock_node *node = &lck->lk_nodes[i];
-++
-++		node->ln_mode = HTREE_LOCK_INVAL;
-++		INIT_LIST_HEAD(&node->ln_major_list);
-++		INIT_LIST_HEAD(&node->ln_minor_list);
-++		INIT_LIST_HEAD(&node->ln_alive_list);
-++		INIT_LIST_HEAD(&node->ln_blocked_list);
-++		INIT_LIST_HEAD(&node->ln_granted_list);
-++	}
-++
-++	return lck;
-++}
-++EXPORT_SYMBOL(htree_lock_alloc);
-++
-++/* free htree_lock node */
-++void
-++htree_lock_free(struct htree_lock *lck)
-++{
-++	BUG_ON(lck->lk_mode != HTREE_LOCK_INVAL);
-++	kfree(lck);
-++}
-++EXPORT_SYMBOL(htree_lock_free);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/ext4.h
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/ext4.h
-+@@ -27,6 +27,7 @@
-+ #include <linux/mutex.h>
-+ #include <linux/timer.h>
-+ #include <linux/wait.h>
-++#include <linux/htree_lock.h>
-+ #include <linux/blockgroup_lock.h>
-+ #include <linux/percpu_counter.h>
-+ #include <crypto/hash.h>
-+@@ -1533,6 +1534,7 @@ static inline void ext4_clear_state_flag
-+ 					 EXT4_FEATURE_INCOMPAT_META_BG| \
-+ 					 EXT4_FEATURE_INCOMPAT_EXTENTS| \
-+ 					 EXT4_FEATURE_INCOMPAT_64BIT| \
-++					 EXT4_FEATURE_INCOMPAT_LARGEDIR|\
-+ 					 EXT4_FEATURE_INCOMPAT_FLEX_BG| \
-+ 					 EXT4_FEATURE_INCOMPAT_EA_INODE| \
-+ 					 EXT4_FEATURE_INCOMPAT_MMP |	\
-+@@ -1958,6 +1960,76 @@ struct mmpd_data {
-+ # define NORET_TYPE	/**/
-+ # define ATTRIB_NORET	__attribute__((noreturn))
-+ # define NORET_AND	noreturn,
-++/* htree levels for ext4 */
-++#define EXT4_HTREE_LEVEL_COMPAT 2
-++#define EXT4_HTREE_LEVEL	3
-++
-++static inline int
-++ext4_dir_htree_level(struct super_block *sb)
-++{
-++	return EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_LARGEDIR) ?
-++		EXT4_HTREE_LEVEL : EXT4_HTREE_LEVEL_COMPAT;
-++}
-++
-++/* assume name-hash is protected by upper layer */
-++#define EXT4_HTREE_LOCK_HASH	0
-++
-++enum ext4_pdo_lk_types {
-++#if EXT4_HTREE_LOCK_HASH
-++	EXT4_LK_HASH,
-++#endif
-++	EXT4_LK_DX,		/* index block */
-++	EXT4_LK_DE,		/* directory entry block */
-++	EXT4_LK_SPIN,		/* spinlock */
-++	EXT4_LK_MAX,
-++};
-++
-++/* read-only bit */
-++#define EXT4_LB_RO(b)		(1 << (b))
-++/* read + write, high bits for writer */
-++#define EXT4_LB_RW(b)		((1 << (b)) | (1 << (EXT4_LK_MAX + (b))))
-++
-++enum ext4_pdo_lock_bits {
-++	/* DX lock bits */
-++	EXT4_LB_DX_RO		= EXT4_LB_RO(EXT4_LK_DX),
-++	EXT4_LB_DX		= EXT4_LB_RW(EXT4_LK_DX),
-++	/* DE lock bits */
-++	EXT4_LB_DE_RO		= EXT4_LB_RO(EXT4_LK_DE),
-++	EXT4_LB_DE		= EXT4_LB_RW(EXT4_LK_DE),
-++	/* DX spinlock bits */
-++	EXT4_LB_SPIN_RO		= EXT4_LB_RO(EXT4_LK_SPIN),
-++	EXT4_LB_SPIN		= EXT4_LB_RW(EXT4_LK_SPIN),
-++	/* accurate searching */
-++	EXT4_LB_EXACT		= EXT4_LB_RO(EXT4_LK_MAX << 1),
-++};
-++
-++enum ext4_pdo_lock_opc {
-++	/* external */
-++	EXT4_HLOCK_READDIR	= (EXT4_LB_DE_RO | EXT4_LB_DX_RO),
-++	EXT4_HLOCK_LOOKUP	= (EXT4_LB_DE_RO | EXT4_LB_SPIN_RO |
-++				   EXT4_LB_EXACT),
-++	EXT4_HLOCK_DEL		= (EXT4_LB_DE | EXT4_LB_SPIN_RO |
-++				   EXT4_LB_EXACT),
-++	EXT4_HLOCK_ADD		= (EXT4_LB_DE | EXT4_LB_SPIN_RO),
-++
-++	/* internal */
-++	EXT4_HLOCK_LOOKUP_SAFE	= (EXT4_LB_DE_RO | EXT4_LB_DX_RO |
-++				   EXT4_LB_EXACT),
-++	EXT4_HLOCK_DEL_SAFE	= (EXT4_LB_DE | EXT4_LB_DX_RO | EXT4_LB_EXACT),
-++	EXT4_HLOCK_SPLIT	= (EXT4_LB_DE | EXT4_LB_DX | EXT4_LB_SPIN),
-++};
-++
-++extern struct htree_lock_head *ext4_htree_lock_head_alloc(unsigned hbits);
-++#define ext4_htree_lock_head_free(lhead)	htree_lock_head_free(lhead)
-++
-++extern struct htree_lock *ext4_htree_lock_alloc(void);
-++#define ext4_htree_lock_free(lck)		htree_lock_free(lck)
-++
-++extern void ext4_htree_lock(struct htree_lock *lck,
-++			    struct htree_lock_head *lhead,
-++			    struct inode *dir, unsigned flags);
-++#define ext4_htree_unlock(lck)                  htree_unlock(lck)
-++
-+ 
-+ /* bitmap.c */
-+ extern unsigned int ext4_count_free(char *bitmap, unsigned numchars);
-+@@ -2050,9 +2122,17 @@ void ext4_insert_dentry(struct inode *in
-+ 			const char *name, int namelen, void *data);
-+ static inline void ext4_update_dx_flag(struct inode *inode)
-+ {
-++	/* Disable it for ldiskfs, because going from a DX directory to
-++	 * a non-DX directory while it is in use will completely break
-++	 * the htree-locking.
-++	 * If we really want to support this operation in the future,
-++	 * we need to exclusively lock the directory at here which will
-++	 * increase complexity of code */
-++#if 0
-+ 	if (!EXT4_HAS_COMPAT_FEATURE(inode->i_sb,
-+ 				     EXT4_FEATURE_COMPAT_DIR_INDEX))
-+ 		ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
-++#endif
-+ }
-+ static unsigned char ext4_filetype_table[] = {
-+ 	DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
-+@@ -2215,15 +2295,16 @@ extern int ext4_htree_fill_tree(struct f
-+ extern struct inode *ext4_create_inode(handle_t *handle,
-+ 				       struct inode * dir, int mode);
-+ extern int ext4_add_entry(handle_t *handle, struct dentry *dentry,
-+-			  struct inode *inode);
-++			  struct inode *inode, struct htree_lock *lck);
-+ extern int ext4_delete_entry(handle_t *handle, struct inode * dir,
-+ 			     struct ext4_dir_entry_2 * de_del,
-+ 			     struct buffer_head * bh);
-+ extern struct buffer_head * ext4_find_entry(struct inode *dir,
-+ 					    const struct qstr *d_name,
-+ 					    struct ext4_dir_entry_2 ** res_dir,
-+-					    int *inlined);
-+-#define ll_ext4_find_entry(inode, dentry, res_dir) ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL)
-++					    int *inlined, struct htree_lock *lck);
-++#define ll_ext4_find_entry(inode, dentry, res_dir, lck) \
-++	ext4_find_entry(inode, &(dentry)->d_name, res_dir, NULL, lck)
-+ extern struct buffer_head *ext4_append(handle_t *handle,
-+ 				       struct inode *inode,
-+ 				       ext4_lblk_t *block);
-+@@ -2443,13 +2524,15 @@ static inline void ext4_r_blocks_count_s
-+ 	es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32);
-+ }
-+ 
-+-static inline loff_t ext4_isize(struct ext4_inode *raw_inode)
-++static inline loff_t ext4_isize(struct super_block *sb,
-++				struct ext4_inode *raw_inode)
-+ {
-+-	if (S_ISREG(le16_to_cpu(raw_inode->i_mode)))
-++	if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_LARGEDIR) ||
-++	    S_ISREG(le16_to_cpu(raw_inode->i_mode)))
-+ 		return ((loff_t)le32_to_cpu(raw_inode->i_size_high) << 32) |
-+ 			le32_to_cpu(raw_inode->i_size_lo);
-+-	else
-+-		return (loff_t) le32_to_cpu(raw_inode->i_size_lo);
-++
-++	return (loff_t) le32_to_cpu(raw_inode->i_size_lo);
-+ }
-+ 
-+ static inline void ext4_isize_set(struct ext4_inode *raw_inode, loff_t i_size)
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/namei.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/namei.c
-+@@ -254,7 +254,7 @@ static struct dx_frame *dx_probe(const s
-+ 				 struct inode *dir,
-+ 				 struct dx_hash_info *hinfo,
-+ 				 struct dx_frame *frame,
-+-				 int *err);
-++				 struct htree_lock *lck, int *err);
-+ static void dx_release(struct dx_frame *frames);
-+ static int dx_make_map(struct ext4_dir_entry_2 *de, unsigned blocksize,
-+ 		       struct dx_hash_info *hinfo, struct dx_map_entry map[]);
-+@@ -267,13 +267,13 @@ static void dx_insert_block(struct dx_fr
-+ static int ext4_htree_next_block(struct inode *dir, __u32 hash,
-+ 				 struct dx_frame *frame,
-+ 				 struct dx_frame *frames,
-+-				 __u32 *start_hash);
-++				 __u32 *start_hash, struct htree_lock *lck);
-+ static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
-+ 		const struct qstr *d_name,
-+ 		struct ext4_dir_entry_2 **res_dir,
-+-		int *err);
-++		struct htree_lock *lck, int *err);
-+ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+-			     struct inode *inode);
-++			     struct inode *inode, struct htree_lock *lck);
-+ 
-+ /* checksumming functions */
-+ void initialize_dirent_tail(struct ext4_dir_entry_tail *t,
-+@@ -525,7 +525,7 @@ struct dx_root_info * dx_get_dx_info(str
-+ 
-+ static inline ext4_lblk_t dx_get_block(struct dx_entry *entry)
-+ {
-+-	return le32_to_cpu(entry->block) & 0x00ffffff;
-++	return le32_to_cpu(entry->block) & 0x0fffffff;
-+ }
-+ 
-+ static inline void dx_set_block(struct dx_entry *entry, ext4_lblk_t value)
-+@@ -675,6 +675,223 @@ struct stats dx_show_entries(struct dx_h
-+ }
-+ #endif /* DX_DEBUG */
-+ 
-++/* private data for htree_lock */
-++struct ext4_dir_lock_data {
-++	unsigned		ld_flags;  /* bits-map for lock types */
-++	unsigned		ld_count;  /* # entries of the last DX block */
-++	struct dx_entry		ld_at_entry; /* copy of leaf dx_entry */
-++	struct dx_entry		*ld_at;	   /* position of leaf dx_entry */
-++};
-++
-++#define ext4_htree_lock_data(l)	((struct ext4_dir_lock_data *)(l)->lk_private)
-++
-++/* NB: ext4_lblk_t is 32 bits so we use high bits to identify invalid blk */
-++#define EXT4_HTREE_NODE_CHANGED	(0xcafeULL << 32)
-++
-++static void ext4_htree_event_cb(void *target, void *event)
-++{
-++	u64 *block = (u64 *)target;
-++
-++	if (*block == dx_get_block((struct dx_entry *)event))
-++		*block = EXT4_HTREE_NODE_CHANGED;
-++}
-++
-++struct htree_lock_head *ext4_htree_lock_head_alloc(unsigned hbits)
-++{
-++	struct htree_lock_head *lhead;
-++
-++	lhead = htree_lock_head_alloc(EXT4_LK_MAX, hbits, 0);
-++	if (lhead != NULL) {
-++		htree_lock_event_attach(lhead, EXT4_LK_SPIN, HTREE_EVENT_WR,
-++					ext4_htree_event_cb);
-++	}
-++	return lhead;
-++}
-++EXPORT_SYMBOL(ext4_htree_lock_head_alloc);
-++
-++struct htree_lock *ext4_htree_lock_alloc(void)
-++{
-++	return htree_lock_alloc(EXT4_LK_MAX,
-++				sizeof(struct ext4_dir_lock_data));
-++}
-++EXPORT_SYMBOL(ext4_htree_lock_alloc);
-++
-++static htree_lock_mode_t ext4_htree_mode(unsigned flags)
-++{
-++	switch (flags) {
-++	default: /* 0 or unknown flags require EX lock */
-++		return HTREE_LOCK_EX;
-++	case EXT4_HLOCK_READDIR:
-++		return HTREE_LOCK_PR;
-++	case EXT4_HLOCK_LOOKUP:
-++		return HTREE_LOCK_CR;
-++	case EXT4_HLOCK_DEL:
-++	case EXT4_HLOCK_ADD:
-++		return HTREE_LOCK_CW;
-++	}
-++}
-++
-++/* return PR for read-only operations, otherwise return EX */
-++static inline htree_lock_mode_t ext4_htree_safe_mode(unsigned flags)
-++{
-++	int writer = (flags & EXT4_LB_DE) == EXT4_LB_DE;
-++
-++	/* 0 requires EX lock */
-++	return (flags == 0 || writer) ? HTREE_LOCK_EX : HTREE_LOCK_PR;
-++}
-++
-++static int ext4_htree_safe_locked(struct htree_lock *lck)
-++{
-++	int writer;
-++
-++	if (lck == NULL || lck->lk_mode == HTREE_LOCK_EX)
-++		return 1;
-++
-++	writer = (ext4_htree_lock_data(lck)->ld_flags & EXT4_LB_DE) ==
-++		 EXT4_LB_DE;
-++	if (writer) /* all readers & writers are excluded? */
-++		return lck->lk_mode == HTREE_LOCK_EX;
-++
-++	/* all writers are excluded? */
-++	return lck->lk_mode == HTREE_LOCK_PR ||
-++	       lck->lk_mode == HTREE_LOCK_PW ||
-++	       lck->lk_mode == HTREE_LOCK_EX;
-++}
-++
-++/* relock htree_lock with EX mode if it's change operation, otherwise
-++ * relock it with PR mode. It's noop if PDO is disabled. */
-++static void ext4_htree_safe_relock(struct htree_lock *lck)
-++{
-++	if (!ext4_htree_safe_locked(lck)) {
-++		unsigned flags = ext4_htree_lock_data(lck)->ld_flags;
-++
-++		htree_change_lock(lck, ext4_htree_safe_mode(flags));
-++	}
-++}
-++
-++void ext4_htree_lock(struct htree_lock *lck, struct htree_lock_head *lhead,
-++		     struct inode *dir, unsigned flags)
-++{
-++	htree_lock_mode_t mode = is_dx(dir) ? ext4_htree_mode(flags) :
-++					      ext4_htree_safe_mode(flags);
-++
-++	ext4_htree_lock_data(lck)->ld_flags = flags;
-++	htree_lock(lck, lhead, mode);
-++	if (!is_dx(dir))
-++		ext4_htree_safe_relock(lck); /* make sure it's safe locked */
-++}
-++EXPORT_SYMBOL(ext4_htree_lock);
-++
-++static int ext4_htree_node_lock(struct htree_lock *lck, struct dx_entry *at,
-++				unsigned lmask, int wait, void *ev)
-++{
-++	u32	key = (at == NULL) ? 0 : dx_get_block(at);
-++	u32	mode;
-++
-++	/* NOOP if htree is well protected or caller doesn't require the lock */
-++	if (ext4_htree_safe_locked(lck) ||
-++	   !(ext4_htree_lock_data(lck)->ld_flags & lmask))
-++		return 1;
-++
-++	mode = (ext4_htree_lock_data(lck)->ld_flags & lmask) == lmask ?
-++		HTREE_LOCK_PW : HTREE_LOCK_PR;
-++	while (1) {
-++		if (htree_node_lock_try(lck, mode, key, ffz(~lmask), wait, ev))
-++			return 1;
-++		if (!(lmask & EXT4_LB_SPIN)) /* not a spinlock */
-++			return 0;
-++		cpu_relax(); /* spin until granted */
-++	}
-++}
-++
-++static int ext4_htree_node_locked(struct htree_lock *lck, unsigned lmask)
-++{
-++	return ext4_htree_safe_locked(lck) ||
-++	       htree_node_is_granted(lck, ffz(~lmask));
-++}
-++
-++static void ext4_htree_node_unlock(struct htree_lock *lck,
-++				   unsigned lmask, void *buf)
-++{
-++	/* NB: it's safe to call mutiple times or even it's not locked */
-++	if (!ext4_htree_safe_locked(lck) &&
-++	     htree_node_is_granted(lck, ffz(~lmask)))
-++		htree_node_unlock(lck, ffz(~lmask), buf);
-++}
-++
-++#define ext4_htree_dx_lock(lck, key)		\
-++	ext4_htree_node_lock(lck, key, EXT4_LB_DX, 1, NULL)
-++#define ext4_htree_dx_lock_try(lck, key)	\
-++	ext4_htree_node_lock(lck, key, EXT4_LB_DX, 0, NULL)
-++#define ext4_htree_dx_unlock(lck)		\
-++	ext4_htree_node_unlock(lck, EXT4_LB_DX, NULL)
-++#define ext4_htree_dx_locked(lck)		\
-++	ext4_htree_node_locked(lck, EXT4_LB_DX)
-++
-++static void ext4_htree_dx_need_lock(struct htree_lock *lck)
-++{
-++	struct ext4_dir_lock_data *ld;
-++
-++	if (ext4_htree_safe_locked(lck))
-++		return;
-++
-++	ld = ext4_htree_lock_data(lck);
-++	switch (ld->ld_flags) {
-++	default:
-++		return;
-++	case EXT4_HLOCK_LOOKUP:
-++		ld->ld_flags = EXT4_HLOCK_LOOKUP_SAFE;
-++		return;
-++	case EXT4_HLOCK_DEL:
-++		ld->ld_flags = EXT4_HLOCK_DEL_SAFE;
-++		return;
-++	case EXT4_HLOCK_ADD:
-++		ld->ld_flags = EXT4_HLOCK_SPLIT;
-++		return;
-++	}
-++}
-++
-++#define ext4_htree_de_lock(lck, key)		\
-++	ext4_htree_node_lock(lck, key, EXT4_LB_DE, 1, NULL)
-++#define ext4_htree_de_unlock(lck)		\
-++	ext4_htree_node_unlock(lck, EXT4_LB_DE, NULL)
-++
-++#define ext4_htree_spin_lock(lck, key, event)	\
-++	ext4_htree_node_lock(lck, key, EXT4_LB_SPIN, 0, event)
-++#define ext4_htree_spin_unlock(lck)		\
-++	ext4_htree_node_unlock(lck, EXT4_LB_SPIN, NULL)
-++#define ext4_htree_spin_unlock_listen(lck, p)	\
-++	ext4_htree_node_unlock(lck, EXT4_LB_SPIN, p)
-++
-++static void ext4_htree_spin_stop_listen(struct htree_lock *lck)
-++{
-++	if (!ext4_htree_safe_locked(lck) &&
-++	    htree_node_is_listening(lck, ffz(~EXT4_LB_SPIN)))
-++		htree_node_stop_listen(lck, ffz(~EXT4_LB_SPIN));
-++}
-++
-++enum {
-++	DX_HASH_COL_IGNORE,	/* ignore collision while probing frames */
-++	DX_HASH_COL_YES,	/* there is collision and it does matter */
-++	DX_HASH_COL_NO,		/* there is no collision */
-++};
-++
-++static int dx_probe_hash_collision(struct htree_lock *lck,
-++				   struct dx_entry *entries,
-++				   struct dx_entry *at, u32 hash)
-++{
-++	if (!(ext4_htree_lock_data(lck)->ld_flags & EXT4_LB_EXACT)) {
-++		return DX_HASH_COL_IGNORE; /* don't care about collision */
-++
-++	} else if (at == entries + dx_get_count(entries) - 1) {
-++		return DX_HASH_COL_IGNORE; /* not in any leaf of this DX */
-++
-++	} else { /* hash collision? */
-++		return ((dx_get_hash(at + 1) & ~1) == hash) ?
-++			DX_HASH_COL_YES : DX_HASH_COL_NO;
-++	}
-++}
-++
-+ /*
-+  * Probe for a directory leaf block to search.
-+  *
-+@@ -686,16 +903,17 @@ struct stats dx_show_entries(struct dx_h
-+  */
-+ static struct dx_frame *
-+ dx_probe(const struct qstr *d_name, struct inode *dir,
-+-	 struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
-++	 struct dx_hash_info *hinfo, struct dx_frame *frame_in,
-++	 struct htree_lock *lck, int *err)
-+ {
-+ 	unsigned count, indirect;
-+-	struct dx_entry *at, *entries, *p, *q, *m;
-++	struct dx_entry *at, *entries, *p, *q, *m, *dx = NULL;
-+ 	struct dx_root_info * info;
-+ 	struct buffer_head *bh;
-+ 	struct dx_frame *frame = frame_in;
-+ 	u32 hash;
-+ 
-+-	frame->bh = NULL;
-++	memset(frame_in, 0, EXT4_HTREE_LEVEL * sizeof(frame_in[0]));
-+ 	bh = ext4_read_dirblock(dir, 0, INDEX);
-+ 	if (IS_ERR(bh)) {
-+ 		*err = PTR_ERR(bh);
-+@@ -728,9 +946,16 @@ dx_probe(const struct qstr *d_name, stru
-+ 		goto fail;
-+ 	}
-+ 
-+-	if ((indirect = info->indirect_levels) > 1) {
-+-		ext4_warning(dir->i_sb, "Unimplemented inode hash depth: %#06x",
-+-			     info->indirect_levels);
-++	indirect = info->indirect_levels;
-++	if (indirect >= ext4_dir_htree_level(dir->i_sb)) {
-++		ext4_warning(dir->i_sb,
-++			     "Directory (ino: %lu) htree depth %#06x exceed "
-++			     "supported value", dir->i_ino,
-++			     ext4_dir_htree_level(dir->i_sb));
-++		if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) {
-++			ext4_warning(dir->i_sb, "Enable large directory "
-++						"feature to access it");
-++		}
-+ 		brelse(bh);
-+ 		*err = ERR_BAD_DX_DIR;
-+ 		goto fail;
-+@@ -750,8 +975,15 @@ dx_probe(const struct qstr *d_name, stru
-+ 	dxtrace(printk("Look up %x", hash));
-+ 	while (1)
-+ 	{
-++		if (indirect == 0) { /* the last index level */
-++			/* NB: ext4_htree_dx_lock() could be noop if
-++			 * DX-lock flag is not set for current operation */
-++			ext4_htree_dx_lock(lck, dx);
-++			ext4_htree_spin_lock(lck, dx, NULL);
-++		}
-+ 		count = dx_get_count(entries);
-+-		if (!count || count > dx_get_limit(entries)) {
-++		if (count == 0 || count > dx_get_limit(entries)) {
-++			ext4_htree_spin_unlock(lck); /* release spin */
-+ 			ext4_warning(dir->i_sb,
-+ 				     "dx entry: no count or count > limit");
-+ 			brelse(bh);
-+@@ -792,7 +1024,70 @@ dx_probe(const struct qstr *d_name, stru
-+ 		frame->bh = bh;
-+ 		frame->entries = entries;
-+ 		frame->at = at;
-+-		if (!indirect--) return frame;
-++
-++		if (indirect == 0) { /* the last index level */
-++			struct ext4_dir_lock_data *ld;
-++			u64 myblock;
-++
-++			/* By default we only lock DE-block, however, we will
-++			 * also lock the last level DX-block if:
-++			 * a) there is hash collision
-++			 *    we will set DX-lock flag (a few lines below)
-++			 *    and redo to lock DX-block
-++			 *    see detail in dx_probe_hash_collision()
-++			 * b) it's a retry from splitting
-++			 *    we need to lock the last level DX-block so nobody
-++			 *    else can split any leaf blocks under the same
-++			 *    DX-block, see detail in ext4_dx_add_entry()
-++			 */
-++			if (ext4_htree_dx_locked(lck)) {
-++				/* DX-block is locked, just lock DE-block
-++				 * and return */
-++				ext4_htree_spin_unlock(lck);
-++				if (!ext4_htree_safe_locked(lck))
-++					ext4_htree_de_lock(lck, frame->at);
-++				return frame;
-++			}
-++			/* it's pdirop and no DX lock */
-++			if (dx_probe_hash_collision(lck, entries, at, hash) ==
-++			    DX_HASH_COL_YES) {
-++				/* found hash collision, set DX-lock flag
-++				 * and retry to abtain DX-lock */
-++				ext4_htree_spin_unlock(lck);
-++				ext4_htree_dx_need_lock(lck);
-++				continue;
-++			}
-++			ld = ext4_htree_lock_data(lck);
-++			/* because I don't lock DX, so @at can't be trusted
-++			 * after I release spinlock so I have to save it */
-++			ld->ld_at = at;
-++			ld->ld_at_entry = *at;
-++			ld->ld_count = dx_get_count(entries);
-++
-++			frame->at = &ld->ld_at_entry;
-++			myblock = dx_get_block(at);
-++
-++			/* NB: ordering locking */
-++			ext4_htree_spin_unlock_listen(lck, &myblock);
-++			/* other thread can split this DE-block because:
-++			 * a) I don't have lock for the DE-block yet
-++			 * b) I released spinlock on DX-block
-++			 * if it happened I can detect it by listening
-++			 * splitting event on this DE-block */
-++			ext4_htree_de_lock(lck, frame->at);
-++			ext4_htree_spin_stop_listen(lck);
-++
-++			if (myblock == EXT4_HTREE_NODE_CHANGED) {
-++				/* someone split this DE-block before
-++				 * I locked it, I need to retry and lock
-++				 * valid DE-block */
-++				ext4_htree_de_unlock(lck);
-++				continue;
-++			}
-++			return frame;
-++		}
-++		dx = at;
-++		indirect--;
-+ 		bh = ext4_read_dirblock(dir, dx_get_block(at), INDEX);
-+ 		if (IS_ERR(bh)) {
-+ 			*err = PTR_ERR(bh);
-+@@ -826,13 +1121,18 @@ fail:
-+ static void dx_release (struct dx_frame *frames)
-+ {
-+ 	struct dx_root_info *info;
-++	int i;
-++
-+ 	if (frames[0].bh == NULL)
-+ 		return;
-+ 
-+ 	info = dx_get_dx_info((struct ext4_dir_entry_2*)frames[0].bh->b_data);
-+-	if (info->indirect_levels)
-+-		brelse(frames[1].bh);
-+-	brelse(frames[0].bh);
-++	for (i = 0; i <= info->indirect_levels; i++) {
-++		if (frames[i].bh == NULL)
-++			break;
-++		brelse(frames[i].bh);
-++		frames[i].bh = NULL;
-++	}
-+ }
-+ 
-+ /*
-+@@ -855,7 +1155,7 @@ static void dx_release (struct dx_frame
-+ static int ext4_htree_next_block(struct inode *dir, __u32 hash,
-+ 				 struct dx_frame *frame,
-+ 				 struct dx_frame *frames,
-+-				 __u32 *start_hash)
-++				 __u32 *start_hash, struct htree_lock *lck)
-+ {
-+ 	struct dx_frame *p;
-+ 	struct buffer_head *bh;
-+@@ -870,12 +1170,22 @@ static int ext4_htree_next_block(struct
-+ 	 * this loop, num_frames indicates the number of interior
-+ 	 * nodes need to be read.
-+ 	 */
-++	ext4_htree_de_unlock(lck);
-+ 	while (1) {
-+-		if (++(p->at) < p->entries + dx_get_count(p->entries))
-+-			break;
-++		if (num_frames > 0 || ext4_htree_dx_locked(lck)) {
-++			/* num_frames > 0 :
-++			 *   DX block
-++			 * ext4_htree_dx_locked:
-++			 *   frame->at is reliable pointer returned by dx_probe,
-++			 *   otherwise dx_probe already knew no collision */
-++			if (++(p->at) < p->entries + dx_get_count(p->entries))
-++				break;
-++		}
-+ 		if (p == frames)
-+ 			return 0;
-+ 		num_frames++;
-++		if (num_frames == 1)
-++			ext4_htree_dx_unlock(lck);
-+ 		p--;
-+ 	}
-+ 
-+@@ -898,6 +1208,13 @@ static int ext4_htree_next_block(struct
-+ 	 * block so no check is necessary
-+ 	 */
-+ 	while (num_frames--) {
-++		if (num_frames == 0) {
-++			/* it's not always necessary, we just don't want to
-++			 * detect hash collision again */
-++			ext4_htree_dx_need_lock(lck);
-++			ext4_htree_dx_lock(lck, p->at);
-++		}
-++
-+ 		bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX);
-+ 		if (IS_ERR(bh))
-+ 			return PTR_ERR(bh);
-+@@ -906,6 +1223,7 @@ static int ext4_htree_next_block(struct
-+ 		p->bh = bh;
-+ 		p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
-+ 	}
-++	ext4_htree_de_lock(lck, p->at);
-+ 	return 1;
-+ }
-+ 
-+@@ -974,7 +1292,7 @@ int ext4_htree_fill_tree(struct file *di
-+ {
-+ 	struct dx_hash_info hinfo;
-+ 	struct ext4_dir_entry_2 *de;
-+-	struct dx_frame frames[2], *frame;
-++	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
-+ 	struct inode *dir;
-+ 	ext4_lblk_t block;
-+ 	int count = 0;
-+@@ -1008,10 +1326,10 @@ int ext4_htree_fill_tree(struct file *di
-+ 	}
-+ 	hinfo.hash = start_hash;
-+ 	hinfo.minor_hash = 0;
-+-	frame = dx_probe(NULL, dir, &hinfo, frames, &err);
-++	/* assume it's PR locked */
-++	frame = dx_probe(NULL, dir, &hinfo, frames, NULL, &err);
-+ 	if (!frame)
-+ 		return err;
-+-
-+ 	/* Add '.' and '..' from the htree header */
-+ 	if (!start_hash && !start_minor_hash) {
-+ 		de = (struct ext4_dir_entry_2 *) frames[0].bh->b_data;
-+@@ -1038,7 +1356,7 @@ int ext4_htree_fill_tree(struct file *di
-+ 		count += ret;
-+ 		hashval = ~0;
-+ 		ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS,
-+-					    frame, frames, &hashval);
-++					    frame, frames, &hashval, NULL);
-+ 		*next_hash = hashval;
-+ 		if (ret < 0) {
-+ 			err = ret;
-+@@ -1234,7 +1552,7 @@ static int is_dx_internal_node(struct in
-+ struct buffer_head * ext4_find_entry(struct inode *dir,
-+ 					const struct qstr *d_name,
-+ 					struct ext4_dir_entry_2 **res_dir,
-+-					int *inlined)
-++					int *inlined, struct htree_lock *lck)
-+ {
-+ 	struct super_block *sb;
-+ 	struct buffer_head *bh_use[NAMEI_RA_SIZE];
-+@@ -1278,7 +1596,7 @@ struct buffer_head * ext4_find_entry(str
-+ 		goto restart;
-+ 	}
-+ 	if (is_dx(dir)) {
-+-		bh = ext4_dx_find_entry(dir, d_name, res_dir, &err);
-++		bh = ext4_dx_find_entry(dir, d_name, res_dir, lck, &err);
-+ 		/*
-+ 		 * On success, or if the error was file not found,
-+ 		 * return.  Otherwise, fall back to doing a search the
-+@@ -1288,6 +1606,7 @@ struct buffer_head * ext4_find_entry(str
-+ 			return bh;
-+ 		dxtrace(printk(KERN_DEBUG "ext4_find_entry: dx failed, "
-+ 			       "falling back\n"));
-++		ext4_htree_safe_relock(lck);
-+ 	}
-+ 	nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
-+ 	start = EXT4_I(dir)->i_dir_start_lookup;
-+@@ -1377,17 +1696,19 @@ cleanup_and_exit:
-+ }
-+ EXPORT_SYMBOL(ext4_find_entry);
-+ 
-+-static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name,
-+-		       struct ext4_dir_entry_2 **res_dir, int *err)
-++static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
-++				const struct qstr *d_name,
-++				struct ext4_dir_entry_2 **res_dir,
-++				struct htree_lock *lck, int *err)
-+ {
-+ 	struct super_block * sb = dir->i_sb;
-+ 	struct dx_hash_info	hinfo;
-+-	struct dx_frame frames[2], *frame;
-++	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
-+ 	struct buffer_head *bh;
-+ 	ext4_lblk_t block;
-+ 	int retval;
-+ 
-+-	if (!(frame = dx_probe(d_name, dir, &hinfo, frames, err)))
-++	if (!(frame = dx_probe(d_name, dir, &hinfo, frames, lck, err)))
-+ 		return NULL;
-+ 	do {
-+ 		block = dx_get_block(frame->at);
-+@@ -1411,7 +1732,7 @@ static struct buffer_head * ext4_dx_find
-+ 
-+ 		/* Check to see if we should continue to search */
-+ 		retval = ext4_htree_next_block(dir, hinfo.hash, frame,
-+-					       frames, NULL);
-++					       frames, NULL, lck);
-+ 		if (retval < 0) {
-+ 			ext4_warning(sb,
-+ 			     "error reading index page in directory #%lu",
-+@@ -1437,7 +1758,7 @@ static struct dentry *ext4_lookup(struct
-+ 	if (dentry->d_name.len > EXT4_NAME_LEN)
-+ 		return ERR_PTR(-ENAMETOOLONG);
-+ 
-+-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
-++	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
-+ 	inode = NULL;
-+ 	if (bh) {
-+ 		__u32 ino = le32_to_cpu(de->inode);
-+@@ -1497,7 +1818,7 @@ struct dentry *ext4_get_parent(struct de
-+ 	struct ext4_dir_entry_2 * de;
-+ 	struct buffer_head *bh;
-+ 
-+-	bh = ext4_find_entry(child->d_inode, &dotdot, &de, NULL);
-++	bh = ext4_find_entry(child->d_inode, &dotdot, &de, NULL, NULL);
-+ 	if (!bh)
-+ 		return ERR_PTR(-ENOENT);
-+ 	ino = le32_to_cpu(de->inode);
-+@@ -1567,8 +1888,9 @@ static struct ext4_dir_entry_2* dx_pack_
-+  * Returns pointer to de in block into which the new entry will be inserted.
-+  */
-+ static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
-+-			struct buffer_head **bh,struct dx_frame *frame,
-+-			struct dx_hash_info *hinfo, int *error)
-++			struct buffer_head **bh, struct dx_frame *frames,
-++			struct dx_frame *frame, struct dx_hash_info *hinfo,
-++			struct htree_lock *lck, int *error)
-+ {
-+ 	unsigned blocksize = dir->i_sb->s_blocksize;
-+ 	unsigned count, continued;
-+@@ -1632,7 +1954,14 @@ static struct ext4_dir_entry_2 *do_split
-+ 					hash2, split, count-split));
-+ 
-+ 	/* Fancy dance to stay within two buffers */
-+-	de2 = dx_move_dirents(data1, data2, map + split, count - split, blocksize);
-++	if (hinfo->hash < hash2) {
-++		de2 = dx_move_dirents(data1, data2, map + split,
-++				      count - split, blocksize);
-++	} else {
-++		/* make sure we will add entry to the same block which
-++		 * we have already locked */
-++		de2 = dx_move_dirents(data1, data2, map, split, blocksize);
-++	}
-+ 	de = dx_pack_dirents(data1, blocksize);
-+ 	de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) -
-+ 					   (char *) de,
-+@@ -1651,13 +1980,21 @@ static struct ext4_dir_entry_2 *do_split
-+ 	dxtrace(dx_show_leaf (hinfo, (struct ext4_dir_entry_2 *) data1, blocksize, 1));
-+ 	dxtrace(dx_show_leaf (hinfo, (struct ext4_dir_entry_2 *) data2, blocksize, 1));
-+ 
-+-	/* Which block gets the new entry? */
-+-	if (hinfo->hash >= hash2)
-+-	{
-+-		swap(*bh, bh2);
-+-		de = de2;
-++	ext4_htree_spin_lock(lck, frame > frames ? (frame - 1)->at : NULL,
-++			     frame->at); /* notify block is being split */
-++	if (hinfo->hash < hash2) {
-++		dx_insert_block(frame, hash2 + continued, newblock);
-++
-++	} else {
-++		/* switch block number */
-++		dx_insert_block(frame, hash2 + continued,
-++				dx_get_block(frame->at));
-++		dx_set_block(frame->at, newblock);
-++		(frame->at)++;
-+ 	}
-+-	dx_insert_block(frame, hash2 + continued, newblock);
-++	ext4_htree_spin_unlock(lck);
-++	ext4_htree_dx_unlock(lck);
-++
-+ 	err = ext4_handle_dirty_dirent_node(handle, dir, bh2);
-+ 	if (err)
-+ 		goto journal_error;
-+@@ -1800,7 +2137,7 @@ static int add_dirent_to_buf(handle_t *h
-+ 	if (!IS_NOCMTIME(dir))
-+ 		dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
-+ 	ext4_update_dx_flag(dir);
-+-	dir->i_version++;
-++	inode_inc_iversion(dir);
-+ 	ext4_mark_inode_dirty(handle, dir);
-+ 	BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
-+ 	err = ext4_handle_dirty_dirent_node(handle, dir, bh);
-+@@ -1820,7 +2157,7 @@ static int make_indexed_dir(handle_t *ha
-+ 	const char	*name = dentry->d_name.name;
-+ 	int		namelen = dentry->d_name.len;
-+ 	struct buffer_head *bh2;
-+-	struct dx_frame	frames[2], *frame;
-++	struct dx_frame	frames[EXT4_HTREE_LEVEL], *frame;
-+ 	struct dx_entry *entries;
-+ 	struct ext4_dir_entry_2 *de, *de2, *dot_de, *dotdot_de;
-+ 	struct ext4_dir_entry_tail *t;
-+@@ -1914,7 +2251,7 @@ static int make_indexed_dir(handle_t *ha
-+ 	ext4_handle_dirty_dx_node(handle, dir, frame->bh);
-+ 	ext4_handle_dirty_dirent_node(handle, dir, bh);
-+ 
-+-	de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
-++	de = do_split(handle,dir, &bh, frames, frame, &hinfo, NULL, &retval);
-+ 	if (!de) {
-+ 		/*
-+ 		 * Even if the block split failed, we have to properly write
-+@@ -2021,7 +2358,7 @@ out:
-+  * the entry, as someone else might have used it while you slept.
-+  */
-+ int ext4_add_entry(handle_t *handle, struct dentry *dentry,
-+-		   struct inode *inode)
-++		   struct inode *inode, struct htree_lock *lck)
-+ {
-+ 	struct inode *dir = dentry->d_parent->d_inode;
-+ 	struct buffer_head *bh;
-+@@ -2057,9 +2394,10 @@ int ext4_add_entry(handle_t *handle, str
-+ 		if (dentry->d_name.len == 2 &&
-+ 		    memcmp(dentry->d_name.name, "..", 2) == 0)
-+ 			return ext4_update_dotdot(handle, dentry, inode);
-+-		retval = ext4_dx_add_entry(handle, dentry, inode);
-++		retval = ext4_dx_add_entry(handle, dentry, inode, lck);
-+ 		if (!retval || (retval != ERR_BAD_DX_DIR))
-+ 			return retval;
-++		ext4_htree_safe_relock(lck);
-+ 		ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
-+ 		dx_fallback++;
-+ 		ext4_mark_inode_dirty(handle, dir);
-+@@ -2105,18 +2443,21 @@ EXPORT_SYMBOL(ext4_add_entry);
-+  * Returns 0 for success, or a negative error value
-+  */
-+ static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
-+-			     struct inode *inode)
-++			     struct inode *inode, struct htree_lock *lck)
-+ {
-+-	struct dx_frame frames[2], *frame;
-++	struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
-+ 	struct dx_entry *entries, *at;
-+ 	struct dx_hash_info hinfo;
-+ 	struct buffer_head *bh;
-+ 	struct inode *dir = dentry->d_parent->d_inode;
-+ 	struct super_block *sb = dir->i_sb;
-+ 	struct ext4_dir_entry_2 *de;
-++	int restart;
-+ 	int err;
-+ 
-+-	frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err);
-++again:
-++	restart = 0;
-++	frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, lck, &err);
-+ 	if (!frame)
-+ 		return err;
-+ 	entries = frame->entries;
-+@@ -2128,33 +2469,53 @@ static int ext4_dx_add_entry(handle_t *h
-+ 		goto cleanup;
-+ 	}
-+ 
-+-	BUFFER_TRACE(bh, "get_write_access");
-+-	err = ext4_journal_get_write_access(handle, bh);
-+-	if (err)
-+-		goto journal_error;
-+-
-+ 	err = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
-+ 	if (err != -ENOSPC)
-+ 		goto cleanup;
-+ 
-++	err = 0;
-+ 	/* Block full, should compress but for now just split */
-+ 	dxtrace(printk(KERN_DEBUG "using %u of %u node entries\n",
-+ 		       dx_get_count(entries), dx_get_limit(entries)));
-+ 	/* Need to split index? */
-+ 	if (dx_get_count(entries) == dx_get_limit(entries)) {
-+ 		ext4_lblk_t newblock;
-+-		unsigned icount = dx_get_count(entries);
-+-		int levels = frame - frames;
-++		int levels = frame - frames + 1;
-++		unsigned icount;
-++		int add_level = 1;
-+ 		struct dx_entry *entries2;
-+ 		struct dx_node *node2;
-+ 		struct buffer_head *bh2;
-+ 
-+-		if (levels && (dx_get_count(frames->entries) ==
-+-			       dx_get_limit(frames->entries))) {
-+-			ext4_warning(sb, "Directory index full!");
-++		if (!ext4_htree_safe_locked(lck)) { /* retry with EX lock */
-++			ext4_htree_safe_relock(lck);
-++			restart = 1;
-++			goto cleanup;
-++		}
-++		while (frame > frames) {
-++			if (dx_get_count((frame - 1)->entries) <
-++			    dx_get_limit((frame - 1)->entries)) {
-++				add_level = 0;
-++				break;
-++			}
-++			frame--; /* split higher index block */
-++			at = frame->at;
-++			entries = frame->entries;
-++			restart = 1;
-++		}
-++		if (add_level && levels == ext4_dir_htree_level(sb)) {
-++			ext4_warning(sb, "Directory (ino: %lu) index full, "
-++					 "reach max htree level :%d",
-++					 dir->i_ino, levels);
-++			if (ext4_dir_htree_level(sb) < EXT4_HTREE_LEVEL) {
-++				ext4_warning(sb, "Large directory feature is"
-++						 "not enabled on this "
-++						 "filesystem");
-++			}
-+ 			err = -ENOSPC;
-+ 			goto cleanup;
-+ 		}
-++		icount = dx_get_count(entries);
-+ 		bh2 = ext4_append(handle, dir, &newblock);
-+ 		if (IS_ERR(bh2)) {
-+ 			err = PTR_ERR(bh2);
-+@@ -2169,7 +2530,7 @@ static int ext4_dx_add_entry(handle_t *h
-+ 		err = ext4_journal_get_write_access(handle, frame->bh);
-+ 		if (err)
-+ 			goto journal_error;
-+-		if (levels) {
-++		if (!add_level) {
-+ 			unsigned icount1 = icount/2, icount2 = icount - icount1;
-+ 			unsigned hash2 = dx_get_hash(entries + icount1);
-+ 			dxtrace(printk(KERN_DEBUG "Split index %i/%i\n",
-+@@ -2177,7 +2538,7 @@ static int ext4_dx_add_entry(handle_t *h
-+ 
-+ 			BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
-+ 			err = ext4_journal_get_write_access(handle,
-+-							     frames[0].bh);
-++							    (frame - 1)->bh);
-+ 			if (err)
-+ 				goto journal_error;
-+ 
-+@@ -2193,18 +2554,24 @@ static int ext4_dx_add_entry(handle_t *h
-+ 				frame->entries = entries = entries2;
-+ 				swap(frame->bh, bh2);
-+ 			}
-+-			dx_insert_block(frames + 0, hash2, newblock);
-+-			dxtrace(dx_show_index("node", frames[1].entries));
-++			dx_insert_block((frame - 1), hash2, newblock);
-++			dxtrace(dx_show_index("node", frame->entries));
-+ 			dxtrace(dx_show_index("node",
-+ 			       ((struct dx_node *) bh2->b_data)->entries));
-+ 			err = ext4_handle_dirty_dx_node(handle, dir, bh2);
-+ 			if (err)
-+ 				goto journal_error;
-+ 			brelse (bh2);
-++			ext4_handle_dirty_metadata(handle, inode,
-++						   (frame - 1)->bh);
-++			if (restart) {
-++				ext4_handle_dirty_metadata(handle, inode,
-++							   frame->bh);
-++				goto cleanup;
-++			}
-+ 		} else {
-+ 			struct dx_root_info * info;
-+-			dxtrace(printk(KERN_DEBUG
-+-				       "Creating second level index...\n"));
-++
-+ 			memcpy((char *) entries2, (char *) entries,
-+ 			       icount * sizeof(struct dx_entry));
-+ 			dx_set_limit(entries2, dx_node_limit(dir));
-+@@ -2214,35 +2581,63 @@ static int ext4_dx_add_entry(handle_t *h
-+ 			dx_set_block(entries + 0, newblock);
-+ 			info = dx_get_dx_info((struct ext4_dir_entry_2*)
-+ 					frames[0].bh->b_data);
-+-			info->indirect_levels = 1;
-++			info->indirect_levels += 1;
-++			dxtrace(printk(KERN_DEBUG
-++				       "Creating %d level index...\n",
-++				       info->indirect_levels));
-++			ext4_handle_dirty_metadata(handle, inode, frame->bh);
-++			ext4_handle_dirty_metadata(handle, inode, bh2);
-++			brelse(bh2);
-++			restart = 1;
-++			goto cleanup;
-++		}
-++	} else if (!ext4_htree_dx_locked(lck)) {
-++		struct ext4_dir_lock_data *ld = ext4_htree_lock_data(lck);
-+ 
-+-			/* Add new access path frame */
-+-			frame = frames + 1;
-+-			frame->at = at = at - entries + entries2;
-+-			frame->entries = entries = entries2;
-+-			frame->bh = bh2;
-+-			err = ext4_journal_get_write_access(handle,
-+-							     frame->bh);
-+-			if (err)
-+-				goto journal_error;
-++		/* not well protected, require DX lock */
-++		ext4_htree_dx_need_lock(lck);
-++		at = frame > frames ? (frame - 1)->at : NULL;
-++
-++		/* NB: no risk of deadlock because it's just a try.
-++		 *
-++		 * NB: we check ld_count for twice, the first time before
-++		 * having DX lock, the second time after holding DX lock.
-++		 *
-++		 * NB: We never free blocks for directory so far, which
-++		 * means value returned by dx_get_count() should equal to
-++		 * ld->ld_count if nobody split any DE-block under @at,
-++		 * and ld->ld_at still points to valid dx_entry. */
-++		if ((ld->ld_count != dx_get_count(entries)) ||
-++		    !ext4_htree_dx_lock_try(lck, at) ||
-++		    (ld->ld_count != dx_get_count(entries))) {
-++			restart = 1;
-++			goto cleanup;
-+ 		}
-+-		err = ext4_handle_dirty_dx_node(handle, dir, frames[0].bh);
-++		/* OK, I've got DX lock and nothing changed */
-++		frame->at = ld->ld_at;
-+ 		if (err) {
-+ 			ext4_std_error(inode->i_sb, err);
-+ 			goto cleanup;
-+ 		}
-+ 	}
-+-	de = do_split(handle, dir, &bh, frame, &hinfo, &err);
-++	de = do_split(handle, dir, &bh, frames, frame, &hinfo, lck, &err);
-+ 	if (!de)
-+ 		goto cleanup;
-++
-+ 	err = add_dirent_to_buf(handle, dentry, inode, de, bh);
-+ 	goto cleanup;
-+ 
-+ journal_error:
-+ 	ext4_std_error(dir->i_sb, err);
-+ cleanup:
-++	ext4_htree_dx_unlock(lck);
-++	ext4_htree_de_unlock(lck);
-+ 	brelse(bh);
-+ 	dx_release(frames);
-++	/* @restart is true means htree-path has been changed, we need to
-++	 * repeat dx_probe() to find out valid htree-path */
-++	if (restart && err == 0)
-++		goto again;
-+ 	return err;
-+ }
-+ 
-+@@ -2279,7 +2674,7 @@ int ext4_generic_delete_entry(handle_t *
-+ 					blocksize);
-+ 			else
-+ 				de->inode = 0;
-+-			dir->i_version++;
-++			inode_inc_iversion(dir);
-+ 			return 0;
-+ 		}
-+ 		i += ext4_rec_len_from_disk(de->rec_len, blocksize);
-+@@ -2364,7 +2759,7 @@ EXPORT_SYMBOL(ext4_dec_count);
-+ static int ext4_add_nondir(handle_t *handle,
-+ 		struct dentry *dentry, struct inode *inode)
-+ {
-+-	int err = ext4_add_entry(handle, dentry, inode);
-++	int err = ext4_add_entry(handle, dentry, inode, NULL);
-+ 	if (!err) {
-+ 		ext4_mark_inode_dirty(handle, inode);
-+ 		unlock_new_inode(inode);
-+@@ -2670,7 +3065,7 @@ retry:
-+ 		goto out_clear_inode;
-+ 	err = ext4_mark_inode_dirty(handle, inode);
-+ 	if (!err)
-+-		err = ext4_add_entry(handle, dentry, inode);
-++		err = ext4_add_entry(handle, dentry, inode, NULL);
-+ 	if (err) {
-+ out_clear_inode:
-+ 		clear_nlink(inode);
-+@@ -2936,7 +3331,7 @@ static int ext4_rmdir(struct inode *dir,
-+ 	dquot_initialize(dentry->d_inode);
-+ 
-+ 	retval = -ENOENT;
-+-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
-++	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
-+ 	if (!bh)
-+ 		goto end_rmdir;
-+ 
-+@@ -3003,7 +3398,7 @@ static int ext4_unlink(struct inode *dir
-+ 	dquot_initialize(dentry->d_inode);
-+ 
-+ 	retval = -ENOENT;
-+-	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
-++	bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL, NULL);
-+ 	if (!bh)
-+ 		goto end_unlink;
-+ 
-+@@ -3182,7 +3577,7 @@ retry:
-+ 	ext4_inc_count(handle, inode);
-+ 	ihold(inode);
-+ 
-+-	err = ext4_add_entry(handle, dentry, inode);
-++	err = ext4_add_entry(handle, dentry, inode, NULL);
-+ 	if (!err) {
-+ 		ext4_mark_inode_dirty(handle, inode);
-+ 		/* this can happen only for tmpfile being
-+@@ -3264,7 +3659,7 @@ static int ext4_rename(struct inode *old
-+ 	if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
-+ 		ext4_handle_sync(handle);
-+ 
-+-	old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de, NULL);
-++	old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de, NULL, NULL);
-+ 	/*
-+ 	 *  Check for inode number is _not_ due to possible IO errors.
-+ 	 *  We might rmdir the source, keep it as pwd of some process
-+@@ -3278,7 +3673,7 @@ static int ext4_rename(struct inode *old
-+ 
-+ 	new_inode = new_dentry->d_inode;
-+ 	new_bh = ext4_find_entry(new_dir, &new_dentry->d_name,
-+-				 &new_de, &new_inlined);
-++				 &new_de, &new_inlined, NULL);
-+ 	if (new_bh) {
-+ 		if (!new_inode) {
-+ 			brelse(new_bh);
-+@@ -3309,7 +3704,7 @@ static int ext4_rename(struct inode *old
-+ 			goto end_rename;
-+ 	}
-+ 	if (!new_bh) {
-+-		retval = ext4_add_entry(handle, new_dentry, old_inode);
-++		retval = ext4_add_entry(handle, new_dentry, old_inode, NULL);
-+ 		if (retval)
-+ 			goto end_rename;
-+ 	} else {
-+@@ -3361,7 +3756,7 @@ static int ext4_rename(struct inode *old
-+ 		struct ext4_dir_entry_2 *old_de2;
-+ 
-+ 		old_bh2 = ext4_find_entry(old_dir, &old_dentry->d_name,
-+-					  &old_de2, NULL);
-++					  &old_de2, NULL, NULL);
-+ 		if (old_bh2) {
-+ 			retval = ext4_delete_entry(handle, old_dir,
-+ 						   old_de2, old_bh2);
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/inode.c
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/inode.c
-+@@ -4091,7 +4091,7 @@ struct inode *ext4_iget(struct super_blo
-+ 	if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT))
-+ 		ei->i_file_acl |=
-+ 			((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32;
-+-	inode->i_size = ext4_isize(raw_inode);
-++	inode->i_size = ext4_isize(sb, raw_inode);
-+ 	ei->i_disksize = inode->i_size;
-+ #ifdef CONFIG_QUOTA
-+ 	ei->i_reserved_quota = 0;
-+@@ -4329,7 +4329,7 @@ static int ext4_do_update_inode(handle_t
-+ 		raw_inode->i_file_acl_high =
-+ 			cpu_to_le16(ei->i_file_acl >> 32);
-+ 	raw_inode->i_file_acl_lo = cpu_to_le32(ei->i_file_acl);
-+-	if (ei->i_disksize != ext4_isize(raw_inode)) {
-++	if (ei->i_disksize != ext4_isize(inode->i_sb, raw_inode)) {
-+ 		ext4_isize_set(raw_inode, ei->i_disksize);
-+ 		need_datasync = 1;
-+ 	}
-+Index: linux-3.11.1-200.fc19.x86_64/fs/ext4/Makefile
-+===================================================================
-+--- linux-3.11.1-200.fc19.x86_64.orig/fs/ext4/Makefile
-++++ linux-3.11.1-200.fc19.x86_64/fs/ext4/Makefile
-+@@ -8,7 +8,7 @@ ext4-y	:= balloc.o bitmap.o dir.o file.o
-+ 		ioctl.o namei.o super.o symlink.o hash.o resize.o extents.o \
-+ 		ext4_jbd2.o migrate.o mballoc.o block_validity.o move_extent.o \
-+ 		mmp.o indirect.o extents_status.o xattr.o xattr_user.o \
-+-		xattr_trusted.o inline.o
-++		xattr_trusted.o inline.o htree_lock.o
-+ 
-+ ext4-$(CONFIG_EXT4_FS_POSIX_ACL)	+= acl.o
-+ ext4-$(CONFIG_EXT4_FS_SECURITY)		+= xattr_security.o
-diff --git a/ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series b/ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series
-new file mode 100644
-index 0000000..5d0d7b0
---- /dev/null
-+++ b/ldiskfs/kernel_patches/series/ldiskfs-3.x-fc19.series
-@@ -0,0 +1,22 @@
-+fc19/ext4-inode-version.patch
-+fc19/ext4-lookup-dotdot.patch
-+rhel6.3/ext4-print-inum-in-htree-warning.patch
-+fc19/ext4-prealloc.patch
-+fc19/ext4-mballoc-extra-checks.patch
-+fc19/ext4-misc.patch
-+fc19/ext4-force_over_128tb.patch
-+fc19/ext4-pdir-fix.patch
-+fc19/ext4-osd-iop-common.patch
-+fc19/ext4-osd-iam-exports.patch
-+rhel6.3/ext4-hash-indexed-dir-dotdot-update.patch
-+fc19/ext4-kill-dx_root.patch
-+fc19/ext4-fiemap.patch
-+fc19/ext4-mballoc-pa_free-mismatch.patch
-+fc19/ext4_data_in_dirent.patch
-+fc19/ext4-large-eas.patch
-+fc19/ext4-disable-mb-cache.patch
-+fc19/ext4-nocmtime.patch
-+fc19/ext4_pdirop.patch
-+rhel6.3/ext4-not-discard-preallocation-umount.patch
-+fc19/ext4-change-entry-avoid-conflict.patch
-+fc19/ext4-max-dir-size.patch
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0003-LU-3319-procfs-fix-symlink-handling.patch b/sys-cluster/lustre/files/0003-LU-3319-procfs-fix-symlink-handling.patch
new file mode 100644
index 0000000..8d1a0df
--- /dev/null
+++ b/sys-cluster/lustre/files/0003-LU-3319-procfs-fix-symlink-handling.patch
@@ -0,0 +1,358 @@
+From ce693d2759e274a114a668e477264d1af8181159 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Fri, 31 Jan 2014 11:37:53 -0500
+Subject: [PATCH 03/13] LU-3319 procfs: fix symlink handling
+
+While working on symlink handling for seq files I noticed a
+long outstanding bug. Code was developed to link osc obds
+to target_obds of the lov layer. The target_obds directory
+was never created for the symlinks. This patches enables
+this long forgotten feature. Also addressed is the race
+condition experinced with server side code ported to
+seq_files that used symlinks. To avoid the race the handle
+obd_proc_private was moved from struct obd_device to
+struct obd_type which now allows earlier registeration that
+only happens once.
+
+Change-Id: Ib158ec4444ed7abc0f3c3e820ee4a333631a58d1
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+---
+ lustre/include/obd.h     |  17 ++++----
+ lustre/lmv/lmv_obd.c     |  49 +++++++++--------------
+ lustre/lov/lov_obd.c     | 100 +++++++++++++++++++++++++++--------------------
+ lustre/obdclass/genops.c |   3 ++
+ 4 files changed, 87 insertions(+), 82 deletions(-)
+
+diff --git a/lustre/include/obd.h b/lustre/include/obd.h
+index c18052b..8fd2ce7 100644
+--- a/lustre/include/obd.h
++++ b/lustre/include/obd.h
+@@ -183,13 +183,15 @@ struct obd_info {
+ };
+ 
+ struct obd_type {
+-        cfs_list_t typ_chain;
+-        struct obd_ops *typ_dt_ops;
+-        struct md_ops *typ_md_ops;
+-        cfs_proc_dir_entry_t *typ_procroot;
+-        char *typ_name;
+-        int  typ_refcnt;
+-        struct lu_device_type *typ_lu;
++	struct list_head typ_chain;
++	struct obd_ops *typ_dt_ops;
++	struct md_ops *typ_md_ops;
++	cfs_proc_dir_entry_t *typ_procroot;
++	cfs_proc_dir_entry_t *typ_procsym;
++	__u32 typ_sym_filter;
++	char *typ_name;
++	int  typ_refcnt;
++	struct lu_device_type *typ_lu;
+ 	spinlock_t obd_type_lock;
+ };
+ 
+@@ -825,7 +827,6 @@ struct obd_device {
+ 
+ 	struct proc_dir_entry	*obd_proc_entry;
+ 	struct proc_dir_entry	*obd_proc_exports_entry;
+-	void			*obd_proc_private;	/* type private PDEs */
+ 	struct proc_dir_entry	*obd_svc_procroot;
+ 	struct lprocfs_stats	*obd_svc_stats;
+ 	struct lprocfs_seq_vars	*obd_vars;
+diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
+index e0941c9..7e1738e 100644
+--- a/lustre/lmv/lmv_obd.c
++++ b/lustre/lmv/lmv_obd.c
+@@ -242,9 +242,6 @@ static int lmv_connect(const struct lu_env *env,
+                        struct obd_uuid *cluuid, struct obd_connect_data *data,
+                        void *localdata)
+ {
+-#ifdef __KERNEL__
+-        struct proc_dir_entry *lmv_proc_dir;
+-#endif
+         struct lmv_obd        *lmv = &obd->u.lmv;
+         struct lustre_handle  conn = { 0 };
+         int                    rc = 0;
+@@ -277,18 +274,15 @@ static int lmv_connect(const struct lu_env *env,
+                 lmv->conn_data = *data;
+ 
+ #ifdef __KERNEL__
+-	if (obd->obd_proc_private != NULL) {
+-		lmv_proc_dir = obd->obd_proc_private;
+-	} else {
+-		lmv_proc_dir = lprocfs_seq_register("target_obds",
+-						    obd->obd_proc_entry,
+-						    NULL, NULL);
+-		if (IS_ERR(lmv_proc_dir)) {
++	if (obd->obd_type->typ_procsym == NULL) {
++		obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
++							 obd->obd_proc_entry,
++							 NULL, NULL);
++		if (IS_ERR(obd->obd_type->typ_procsym)) {
+ 			CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
+ 			       obd->obd_type->typ_name, obd->obd_name);
+-			lmv_proc_dir = NULL;
++			obd->obd_type->typ_procsym = NULL;
+ 		}
+-		obd->obd_proc_private = lmv_proc_dir;
+ 	}
+ #endif
+ 
+@@ -302,9 +296,9 @@ static int lmv_connect(const struct lu_env *env,
+                 rc = lmv_check_connect(obd);
+ 
+ #ifdef __KERNEL__
+-	if (rc && lmv_proc_dir) {
+-		lprocfs_remove(&lmv_proc_dir);
+-		obd->obd_proc_private = NULL;
++	if (rc && obd->obd_type->typ_procsym != NULL) {
++		lprocfs_remove(&obd->obd_type->typ_procsym);
++		obd->obd_type->typ_procsym = NULL;
+ 	}
+ #endif
+         RETURN(rc);
+@@ -384,9 +378,6 @@ static int lmv_init_ea_size(struct obd_export *exp, int easize,
+ 
+ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ {
+-#ifdef __KERNEL__
+-        struct proc_dir_entry   *lmv_proc_dir;
+-#endif
+         struct lmv_obd          *lmv = &obd->u.lmv;
+         struct obd_uuid         *cluuid = &lmv->cluuid;
+         struct obd_uuid          lmv_mdc_uuid = { "LMV_MDC_UUID" };
+@@ -466,14 +457,13 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+                 cfs_atomic_read(&obd->obd_refcount));
+ 
+ #ifdef __KERNEL__
+-	lmv_proc_dir = obd->obd_proc_private;
+-	if (lmv_proc_dir) {
++	if (obd->obd_type->typ_procsym != NULL) {
+ 		struct proc_dir_entry *mdc_symlink;
+ 
+ 		LASSERT(mdc_obd->obd_type != NULL);
+ 		LASSERT(mdc_obd->obd_type->typ_name != NULL);
+ 		mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
+-						  lmv_proc_dir,
++						  obd->obd_type->typ_procsym,
+ 						  "../../../%s/%s",
+ 						  mdc_obd->obd_type->typ_name,
+ 						  mdc_obd->obd_name);
+@@ -482,8 +472,8 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ 			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
+ 			       obd->obd_type->typ_name, obd->obd_name,
+ 			       mdc_obd->obd_name);
+-			lprocfs_remove(&lmv_proc_dir);
+-			obd->obd_proc_private = NULL;
++			lprocfs_remove(&obd->obd_type->typ_procsym);
++			obd->obd_type->typ_procsym = NULL;
+ 		}
+ 	}
+ #endif
+@@ -675,9 +665,6 @@ int lmv_check_connect(struct obd_device *obd)
+ 
+ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ {
+-#ifdef __KERNEL__
+-        struct proc_dir_entry  *lmv_proc_dir;
+-#endif
+         struct lmv_obd         *lmv = &obd->u.lmv;
+         struct obd_device      *mdc_obd;
+         int                     rc;
+@@ -695,9 +682,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+         }
+ 
+ #ifdef __KERNEL__
+-	lmv_proc_dir = obd->obd_proc_private;
+-	if (lmv_proc_dir)
+-		lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
++	if (obd->obd_type->typ_procsym != NULL)
++		lprocfs_remove_proc_entry(mdc_obd->obd_name,
++					  obd->obd_type->typ_procsym);
+ #endif
+ 	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
+ 	if (rc)
+@@ -747,8 +734,8 @@ static int lmv_disconnect(struct obd_export *exp)
+         }
+ 
+ #ifdef __KERNEL__
+-	if (obd->obd_proc_private)
+-		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
++	if (obd->obd_type->typ_procsym != NULL)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
+ 	else
+ 		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
+ 		       obd->obd_type->typ_name, obd->obd_name);
+diff --git a/lustre/lov/lov_obd.c b/lustre/lov/lov_obd.c
+index 286cd15..b52a263 100644
+--- a/lustre/lov/lov_obd.c
++++ b/lustre/lov/lov_obd.c
+@@ -127,19 +127,16 @@ static int lov_notify(struct obd_device *obd, struct obd_device *watched,
+ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
+                     struct obd_connect_data *data)
+ {
+-        struct lov_obd *lov = &obd->u.lov;
+-        struct obd_uuid *tgt_uuid;
+-        struct obd_device *tgt_obd;
+-        static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
+-        struct obd_import *imp;
+-#ifdef __KERNEL__
+-	struct proc_dir_entry *lov_proc_dir;
+-#endif
+-        int rc;
+-        ENTRY;
++	struct lov_obd *lov = &obd->u.lov;
++	struct obd_uuid *tgt_uuid;
++	struct obd_device *tgt_obd;
++	static struct obd_uuid lov_osc_uuid = { "LOV_OSC_UUID" };
++	struct obd_import *imp;
++	int rc;
++	ENTRY;
+ 
+-        if (!lov->lov_tgts[index])
+-                RETURN(-EINVAL);
++	if (lov->lov_tgts[index] == NULL)
++		RETURN(-EINVAL);
+ 
+         tgt_uuid = &lov->lov_tgts[index]->ltd_uuid;
+         tgt_obd = lov->lov_tgts[index]->ltd_obd;
+@@ -195,27 +192,26 @@ int lov_connect_obd(struct obd_device *obd, __u32 index, int activate,
+                obd_uuid2str(tgt_uuid), tgt_obd->obd_name, activate ? "":"in");
+ 
+ #ifdef __KERNEL__
+-	lov_proc_dir = obd->obd_proc_private;
+-        if (lov_proc_dir) {
+-                struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
++	if (obd->obd_type->typ_procsym != NULL) {
++		struct obd_device *osc_obd = lov->lov_tgts[index]->ltd_exp->exp_obd;
+ 		struct proc_dir_entry *osc_symlink;
+ 
+-                LASSERT(osc_obd != NULL);
+-                LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
+-                LASSERT(osc_obd->obd_type->typ_name != NULL);
+-
+-                osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
+-                                                  lov_proc_dir,
+-                                                  "../../../%s/%s",
+-                                                  osc_obd->obd_type->typ_name,
+-                                                  osc_obd->obd_name);
+-                if (osc_symlink == NULL) {
+-                        CERROR("could not register LOV target "
+-                                "/proc/fs/lustre/%s/%s/target_obds/%s.",
+-                                obd->obd_type->typ_name, obd->obd_name,
+-                                osc_obd->obd_name);
+-                        lprocfs_remove(&lov_proc_dir);
+-			obd->obd_proc_private = NULL;
++		LASSERT(osc_obd != NULL);
++		LASSERT(osc_obd->obd_magic == OBD_DEVICE_MAGIC);
++		LASSERT(osc_obd->obd_type->typ_name != NULL);
++
++		osc_symlink = lprocfs_add_symlink(osc_obd->obd_name,
++						  obd->obd_type->typ_procsym,
++						  "../../../%s/%s",
++						  osc_obd->obd_type->typ_name,
++						  osc_obd->obd_name);
++		if (osc_symlink == NULL) {
++			CERROR("could not register LOV target "
++			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
++			       obd->obd_type->typ_name, obd->obd_name,
++			       osc_obd->obd_name);
++			lprocfs_remove(&obd->obd_type->typ_procsym);
++			obd->obd_type->typ_procsym = NULL;
+                 }
+         }
+ #endif
+@@ -250,6 +246,17 @@ static int lov_connect(const struct lu_env *env,
+         if (data)
+                 lov->lov_ocd = *data;
+ 
++#ifdef __KERNEL__
++	obd->obd_type->typ_procsym = lprocfs_seq_register("target_obds",
++						 obd->obd_proc_entry,
++						 NULL, NULL);
++	if (IS_ERR(obd->obd_type->typ_procsym)) {
++		CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
++		       obd->obd_type->typ_name, obd->obd_name);
++		obd->obd_type->typ_procsym = NULL;
++	}
++#endif
++
+         obd_getref(obd);
+         for (i = 0; i < lov->desc.ld_tgt_count; i++) {
+                 tgt = lov->lov_tgts[i];
+@@ -280,7 +287,6 @@ static int lov_connect(const struct lu_env *env,
+ 
+ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
+ {
+-	struct proc_dir_entry *lov_proc_dir;
+         struct lov_obd *lov = &obd->u.lov;
+         struct obd_device *osc_obd;
+         int rc;
+@@ -296,18 +302,18 @@ static int lov_disconnect_obd(struct obd_device *obd, struct lov_tgt_desc *tgt)
+                 tgt->ltd_exp->exp_obd->obd_inactive = 1;
+         }
+ 
+-	lov_proc_dir = obd->obd_proc_private;
+-	if (lov_proc_dir)
+-		lprocfs_remove_proc_entry(osc_obd->obd_name, lov_proc_dir);
++	if (obd->obd_type->typ_procsym)
++		lprocfs_remove_proc_entry(osc_obd->obd_name,
++					  obd->obd_type->typ_procsym);
+ 
+-        if (osc_obd) {
+-                /* Pass it on to our clients.
+-                 * XXX This should be an argument to disconnect,
+-                 * XXX not a back-door flag on the OBD.  Ah well.
+-                 */
+-                osc_obd->obd_force = obd->obd_force;
+-                osc_obd->obd_fail = obd->obd_fail;
+-                osc_obd->obd_no_recov = obd->obd_no_recov;
++	if (osc_obd) {
++		/* Pass it on to our clients.
++		 * XXX This should be an argument to disconnect,
++		 * XXX not a back-door flag on the OBD.  Ah well.
++		 */
++		osc_obd->obd_force = obd->obd_force;
++		osc_obd->obd_fail = obd->obd_fail;
++		osc_obd->obd_no_recov = obd->obd_no_recov;
+         }
+ 
+         obd_register_observer(osc_obd, NULL);
+@@ -353,6 +359,14 @@ static int lov_disconnect(struct obd_export *exp)
+         }
+         obd_putref(obd);
+ 
++#ifdef __KERNEL__
++	if (obd->obd_type->typ_procsym)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
++	else
++		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
++		       obd->obd_type->typ_name, obd->obd_name);
++#endif
++
+ out:
+         rc = class_disconnect(exp); /* bz 9811 */
+         RETURN(rc);
+diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
+index c9d8a4e..b9606bb 100644
+--- a/lustre/obdclass/genops.c
++++ b/lustre/obdclass/genops.c
+@@ -220,6 +220,7 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
+ 		type->typ_procroot = NULL;
+ 		GOTO (failed, rc);
+ 	}
++	type->typ_procsym = NULL;
+ #endif
+         if (ldt != NULL) {
+                 type->typ_lu = ldt;
+@@ -242,6 +243,8 @@ int class_register_type(struct obd_ops *dt_ops, struct md_ops *md_ops,
+         if (type->typ_dt_ops != NULL)
+                 OBD_FREE_PTR(type->typ_dt_ops);
+ #ifdef LPROCFS
++	if (type->typ_procsym != NULL)
++		lprocfs_remove(&type->typ_procsym);
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ 	lprocfs_try_remove_proc_entry(type->typ_name, proc_lustre_root);
+ #else
+-- 
+1.8.5.3
+

diff --git a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
deleted file mode 100644
index 6873a22..0000000
--- a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
+++ /dev/null
@@ -1,132 +0,0 @@
-From 18cfd561fae3b2eac663b51f8e5147b59c711af7 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Wed, 11 Dec 2013 10:29:41 -0500
-Subject: [PATCH 03/18] LU-3974 llite: dentry d_compare changes in 3.11
-
-In the linux 3.11 kernel the d_compare function has
-removed passing in any struct inode arguments. This
-patch provides support to handle this case.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I363057e4d0a119ad43a9907ec26e7e0079f7c305
----
- lustre/autoconf/lustre-core.m4 | 19 +++++++++++++++++++
- lustre/llite/dcache.c          | 27 +++++++++++----------------
- lustre/llite/llite_internal.h  |  7 -------
- 3 files changed, 30 insertions(+), 23 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index f47bc5f..7f9bb45 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1287,6 +1287,24 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.11 dentry_operations.d_compare() taken 5 arguments.
-+#
-+AC_DEFUN([LC_D_COMPARE_5ARGS],
-+[AC_MSG_CHECKING([if d_compare taken 5 arguments])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/dcache.h>
-+],[
-+	((struct dentry_operations*)0)->d_compare(NULL,NULL,0,NULL,NULL);
-+],[
-+	AC_DEFINE(HAVE_D_COMPARE_5ARGS, 1,
-+		[d_compare need 5 arguments])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # 3.11 need to access d_count to get dentry reference count
- #
- AC_DEFUN([LC_HAVE_DCOUNT],
-@@ -1405,6 +1423,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_BLKDEV_RELEASE_RETURN_INT
- 
- 	 # 3.11
-+	 LC_D_COMPARE_5ARGS
- 	 LC_HAVE_DCOUNT
- 
- 	 #
-diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c
-index 6fca4cb..8a8c100 100644
---- a/lustre/llite/dcache.c
-+++ b/lustre/llite/dcache.c
-@@ -89,11 +89,19 @@ static void ll_release(struct dentry *de)
- int ll_dcompare(const struct dentry *parent, const struct inode *pinode,
- 		const struct dentry *dentry, const struct inode *inode,
- 		unsigned int len, const char *str, const struct qstr *name)
-+#elif defined(HAVE_D_COMPARE_5ARGS)
-+int ll_dcompare(const struct dentry *parent, const struct dentry *dentry,
-+		unsigned int len, const char *str, const struct qstr *name)
- #else
- int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name)
- #endif
- {
--#ifdef HAVE_D_COMPARE_7ARGS
-+#if !defined(HAVE_D_COMPARE_7ARGS) && !defined(HAVE_D_COMPARE_5ARGS)
-+	/* XXX: (ugh !) d_name must be in-dentry structure */
-+	struct dentry *dentry = container_of(d_name, struct dentry, d_name);
-+	unsigned int len = d_name->len;
-+	const char *str = d_name->name;
-+#endif
- 	ENTRY;
- 
- 	if (len != name->len)
-@@ -101,19 +109,6 @@ int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name)
- 
- 	if (memcmp(str, name->name, len))
- 		RETURN(1);
--#else
--	struct dentry *dentry;
--	ENTRY;
--
--	if (d_name->len != name->len)
--		RETURN(1);
--
--	if (memcmp(d_name->name, name->name, name->len))
--		RETURN(1);
--
--	/* XXX: d_name must be in-dentry structure */
--	dentry = container_of(d_name, struct dentry, d_name); /* ugh */
--#endif
- 
- 	CDEBUG(D_DENTRY, "found name %.*s(%p) flags %#x refc %d\n",
- 	       name->len, name->name, dentry, dentry->d_flags,
-@@ -124,9 +119,9 @@ int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name)
- 		RETURN(0);
- 
- 	if (d_lustre_invalid(dentry))
--                RETURN(1);
-+		RETURN(1);
- 
--        RETURN(0);
-+	RETURN(0);
- }
- 
- static inline int return_if_equal(struct ldlm_lock *lock, void *data)
-diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index daeac51..9da81ca 100644
---- a/lustre/llite/llite_internal.h
-+++ b/lustre/llite/llite_internal.h
-@@ -857,13 +857,6 @@ void ll_intent_release(struct lookup_intent *);
- void ll_invalidate_aliases(struct inode *);
- void ll_frob_intent(struct lookup_intent **itp, struct lookup_intent *deft);
- void ll_lookup_finish_locks(struct lookup_intent *it, struct dentry *dentry);
--#ifdef HAVE_D_COMPARE_7ARGS
--int ll_dcompare(const struct dentry *parent, const struct inode *pinode,
--		const struct dentry *dentry, const struct inode *inode,
--		unsigned int len, const char *str, const struct qstr *d_name);
--#else
--int ll_dcompare(struct dentry *parent, struct qstr *d_name, struct qstr *name);
--#endif
- int ll_revalidate_it_finish(struct ptlrpc_request *request,
-                             struct lookup_intent *it, struct dentry *de);
- 
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
similarity index 89%
rename from sys-cluster/lustre/files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
index bc0b223..dd5e377 100644
--- a/sys-cluster/lustre/files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From fa5fde4522b64dfc2e5695d88dca0ae99910cb1f Mon Sep 17 00:00:00 2001
+From 223f07785cbb8d28ef563bfba382b101a064a928 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 17 Dec 2013 12:24:40 -0500
-Subject: [PATCH 12/18] LU-3319 procfs: move mgs proc handling to seq_files
+Date: Fri, 3 Jan 2014 09:58:53 -0500
+Subject: [PATCH 04/13] LU-3319 procfs: move mgs proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mgs
@@ -10,17 +10,17 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I1a12dd9b1fc8f139116a8f3a684956a5ba88f055
 ---
- lustre/mgs/lproc_mgs.c    | 197 ++++++++++++++++++++++------------------------
+ lustre/mgs/lproc_mgs.c    | 202 +++++++++++++++++++++++-----------------------
  lustre/mgs/mgs_handler.c  |   5 +-
  lustre/mgs/mgs_internal.h |  13 +--
  lustre/mgs/mgs_nids.c     |  11 ++-
- 4 files changed, 105 insertions(+), 121 deletions(-)
+ 4 files changed, 110 insertions(+), 121 deletions(-)
 
 diff --git a/lustre/mgs/lproc_mgs.c b/lustre/mgs/lproc_mgs.c
-index ffa2d0d..746d1c1 100644
+index ffa2d0d..f0ea956 100644
 --- a/lustre/mgs/lproc_mgs.c
 +++ b/lustre/mgs/lproc_mgs.c
-@@ -126,19 +126,105 @@ static int mgsself_srpc_seq_show(struct seq_file *seq, void *v)
+@@ -126,19 +126,110 @@ static int mgsself_srpc_seq_show(struct seq_file *seq, void *v)
  
          return 0;
  }
@@ -107,11 +107,16 @@ index ffa2d0d..746d1c1 100644
 +LPROC_SEQ_FOPS_RW_TYPE(mgs, ir_timeout);
 +
 +struct lprocfs_seq_vars lprocfs_mgs_obd_vars[] = {
-+	{ "uuid",		&mgs_uuid_fops		},
-+	{ "num_exports",	&mgs_num_exports_fops	},
-+	{ "hash_stats",		&mgs_hash_fops		},
-+	{ "evict_client",	&mgs_evict_client_fops	},
-+	{ "ir_timeout",		&mgs_ir_timeout_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&mgs_uuid_fops		},
++	{ .name	=	"num_exports",
++	  .fops	=	&mgs_num_exports_fops	},
++	{ .name	=	"hash_stats",
++	  .fops	=	&mgs_hash_fops		},
++	{ .name	=	"evict_client",
++	  .fops	=	&mgs_evict_client_fops	},
++	{ .name	=	"ir_timeout",
++	  .fops	=	&mgs_ir_timeout_fops	},
 +	{ 0 }
 +};
 +
@@ -130,7 +135,7 @@ index ffa2d0d..746d1c1 100644
  	if (rc != 0)
  		GOTO(out, rc);
  
-@@ -152,17 +238,17 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
+@@ -152,17 +243,17 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
  	if (rc != 0)
  		GOTO(out, rc);
  
@@ -153,7 +158,7 @@ index ffa2d0d..746d1c1 100644
          if (IS_ERR(obd->obd_proc_exports_entry)) {
                  rc = PTR_ERR(obd->obd_proc_exports_entry);
                  obd->obd_proc_exports_entry = NULL;
-@@ -215,7 +301,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
+@@ -215,7 +306,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
  
  	if (mgs->mgs_proc_live != NULL) {
  		/* Should be no live entries */
@@ -161,7 +166,7 @@ index ffa2d0d..746d1c1 100644
  		lprocfs_remove(&mgs->mgs_proc_live);
  		mgs->mgs_proc_live = NULL;
  	}
-@@ -226,92 +311,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
+@@ -226,92 +316,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
          lprocfs_free_md_stats(obd);
  }
  
@@ -254,7 +259,7 @@ index ffa2d0d..746d1c1 100644
  void mgs_counter_incr(struct obd_export *exp, int opcode)
  {
          lprocfs_counter_incr(exp->exp_obd->obd_stats, opcode);
-@@ -329,10 +328,4 @@ void mgs_stats_counter_init(struct lprocfs_stats *stats)
+@@ -329,10 +333,4 @@ void mgs_stats_counter_init(struct lprocfs_stats *stats)
          lprocfs_counter_init(stats, LPROC_MGS_TARGET_REG, 0, "tgtreg", "reqs");
          lprocfs_counter_init(stats, LPROC_MGS_TARGET_DEL, 0, "tgtdel", "reqs");
  }
@@ -266,10 +271,10 @@ index ffa2d0d..746d1c1 100644
 -}
  #endif
 diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
-index 560dd19..a294237 100644
+index 5be9040..4bb842c 100644
 --- a/lustre/mgs/mgs_handler.c
 +++ b/lustre/mgs/mgs_handler.c
-@@ -1376,12 +1376,9 @@ static struct obd_ops mgs_obd_device_ops = {
+@@ -1434,12 +1434,9 @@ static struct obd_ops mgs_obd_device_ops = {
  
  static int __init mgs_init(void)
  {
@@ -284,10 +289,10 @@ index 560dd19..a294237 100644
  					LUSTRE_MGS_NAME, &mgs_device_type);
  }
 diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h
-index 514dc23..497ad9d 100644
+index ca2846e..d3baacd 100644
 --- a/lustre/mgs/mgs_internal.h
 +++ b/lustre/mgs/mgs_internal.h
-@@ -225,10 +225,10 @@ int  mgs_get_ir_logs(struct ptlrpc_request *req);
+@@ -229,10 +229,10 @@ int  mgs_get_ir_logs(struct ptlrpc_request *req);
  int  lprocfs_wr_ir_state(struct file *file, const char *buffer,
                             unsigned long count, void *data);
  int  lprocfs_rd_ir_state(struct seq_file *seq, void *data);
@@ -302,7 +307,7 @@ index 514dc23..497ad9d 100644
  void mgs_fsc_cleanup(struct obd_export *exp);
  void mgs_fsc_cleanup_by_fsdb(struct fs_db *fsdb);
  int  mgs_fsc_attach(const struct lu_env *env, struct obd_export *exp,
-@@ -246,7 +246,6 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name);
+@@ -250,7 +250,6 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name);
  void lproc_mgs_cleanup(struct mgs_device *mgs);
  int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb);
  int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb);
@@ -310,7 +315,7 @@ index 514dc23..497ad9d 100644
  #else
  static inline int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
  {return 0;}
-@@ -256,10 +255,6 @@ static inline int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
+@@ -260,10 +259,6 @@ static inline int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
  {return 0;}
  static inline int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
  {return 0;}
@@ -322,7 +327,7 @@ index 514dc23..497ad9d 100644
  
  /* mgs/lproc_mgs.c */
 diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
-index 4d53969..73a4576 100644
+index a2bae59..3248387 100644
 --- a/lustre/mgs/mgs_nids.c
 +++ b/lustre/mgs/mgs_nids.c
 @@ -838,15 +838,14 @@ int lprocfs_rd_ir_state(struct seq_file *seq, void *data)
@@ -347,5 +352,5 @@ index 4d53969..73a4576 100644
          return lprocfs_wr_uint(file, buffer, count, &ir_timeout);
  }
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
deleted file mode 100644
index f79a30e..0000000
--- a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
+++ /dev/null
@@ -1,276 +0,0 @@
-From 82f692de87cb6c7db8f050b3201d23f4852a404c Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Mon, 2 Dec 2013 12:05:14 -0500
-Subject: [PATCH 04/18] LU-3974 llite: use new struct dir_context
-
-The readdir and nfs code over time has added more
-parameters to be passed to be processed. For the 3.11
-kernel a new struct dir_context was introduced to
-minimize the impact of future expansion. This patch
-addresses this change.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Ib42bf8cb06635a2a64e63b294d79e66ac82a1a5b
----
- lustre/autoconf/lustre-core.m4 | 20 ++++++++++
- lustre/llite/dir.c             | 86 +++++++++++++++++++++++++++++-------------
- lustre/llite/llite_internal.h  |  7 ++++
- lustre/llite/llite_nfs.c       | 33 ++++++++++------
- 4 files changed, 107 insertions(+), 39 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 7f9bb45..3ac55d6 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1287,6 +1287,25 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.11 readdir now takes the new struct dir_context
-+#
-+AC_DEFUN([LC_HAVE_DIR_CONTEXT],
-+[AC_MSG_CHECKING([if dir_context exist])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct dir_context ctx;
-+
-+	ctx.pos = 0;
-+],[
-+	AC_DEFINE(HAVE_DIR_CONTEXT, 1, [dir_context exist])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # 3.11 dentry_operations.d_compare() taken 5 arguments.
- #
- AC_DEFUN([LC_D_COMPARE_5ARGS],
-@@ -1423,6 +1442,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_BLKDEV_RELEASE_RETURN_INT
- 
- 	 # 3.11
-+	 LC_HAVE_DIR_CONTEXT
- 	 LC_D_COMPARE_5ARGS
- 	 LC_HAVE_DCOUNT
- 
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 2021897..e2546cc 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -477,19 +477,25 @@ fail:
-         goto out_unlock;
- }
- 
-+#ifdef HAVE_DIR_CONTEXT
-+int ll_dir_read(struct inode *inode, struct dir_context *ctx)
-+{
-+	__u64			pos	= ctx->pos;
-+#else
- int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
- 		filldir_t filldir)
- {
--        struct ll_inode_info *info       = ll_i2info(inode);
--        struct ll_sb_info    *sbi        = ll_i2sbi(inode);
--	__u64                 pos        = *_pos;
--        int                   api32      = ll_need_32bit_api(sbi);
--        int                   hash64     = sbi->ll_flags & LL_SBI_64BIT_HASH;
--        struct page          *page;
--        struct ll_dir_chain   chain;
--	int                   done = 0;
--	int                   rc = 0;
--        ENTRY;
-+	__u64			pos	= *_pos;
-+#endif
-+	struct ll_inode_info	*info	= ll_i2info(inode);
-+	struct ll_sb_info	*sbi	= ll_i2sbi(inode);
-+	int			api32	= ll_need_32bit_api(sbi);
-+	int			hash64	= sbi->ll_flags & LL_SBI_64BIT_HASH;
-+	struct page		*page;
-+	struct ll_dir_chain	chain;
-+	int			done = 0;
-+	int			rc = 0;
-+	ENTRY;
- 
-         ll_dir_chain_init(&chain);
- 
-@@ -542,12 +548,18 @@ int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
-                                 fid_le_to_cpu(&fid, &ent->lde_fid);
-                                 ino = cl_fid_build_ino(&fid, api32);
-                                 type = ll_dirent_type_get(ent);
--                                /* For 'll_nfs_get_name_filldir()', it will try
--                                 * to access the 'ent' through its 'lde_name',
--                                 * so the parameter 'name' for 'filldir()' must
--                                 * be part of the 'ent'. */
--                                done = filldir(cookie, ent->lde_name, namelen,
--                                               lhash, ino, type);
-+#ifdef HAVE_DIR_CONTEXT
-+				ctx->pos = lhash;
-+				/* For 'll_nfs_get_name_filldir()', it will try
-+				 * to access the 'ent' through its 'lde_name',
-+				 * so the parameter 'name' for 'filldir()' must
-+				 * be part of the 'ent'. */
-+				done = !dir_emit(ctx, ent->lde_name,
-+							namelen, ino, type);
-+#else
-+				done = filldir(cookie, ent->lde_name, namelen,
-+						lhash, ino, type);
-+#endif
-                         }
-                         next = le64_to_cpu(dp->ldp_hash_end);
-                         if (!done) {
-@@ -588,12 +600,20 @@ int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
-                 }
-         }
- 
-+#ifdef HAVE_DIR_CONTEXT
-+	ctx->pos = pos;
-+#else
- 	*_pos = pos;
-+#endif
- 	ll_dir_chain_fini(&chain);
- 	RETURN(rc);
- }
- 
-+#ifdef HAVE_DIR_CONTEXT
-+static int ll_iterate(struct file *filp, struct dir_context *ctx)
-+#else
- static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
-+#endif
- {
- 	struct inode		*inode	= filp->f_dentry->d_inode;
- 	struct ll_file_data	*lfd	= LUSTRE_FPRIVATE(filp);
-@@ -622,20 +642,28 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
- 		 */
- 		GOTO(out, rc = 0);
- 
-+#ifdef HAVE_DIR_CONTEXT
-+	ctx->pos = pos;
-+	rc = ll_dir_read(inode, ctx);
-+	pos = ctx->pos;
-+#else
- 	rc = ll_dir_read(inode, &pos, cookie, filldir);
-+#endif
- 	if (lfd != NULL)
- 		lfd->lfd_pos = pos;
--        if (pos == MDS_DIR_END_OFF) {
--                if (api32)
--                        filp->f_pos = LL_DIR_END_OFF_32BIT;
--                else
--                        filp->f_pos = LL_DIR_END_OFF;
--        } else {
--                if (api32 && hash64)
--                        filp->f_pos = pos >> 32;
--                else
--                        filp->f_pos = pos;
-+	if (pos == MDS_DIR_END_OFF) {
-+		if (api32)
-+			pos = LL_DIR_END_OFF_32BIT;
-+		else
-+			pos = LL_DIR_END_OFF;
-+	} else if (api32 && hash64) {
-+		pos >>= 32;
-         }
-+#ifdef HAVE_DIR_CONTEXT
-+	ctx->pos = pos;
-+#else
-+	filp->f_pos = pos;
-+#endif
- 	filp->f_version = inode->i_version;
- #ifdef HAVE_TOUCH_ATIME_1ARG
- #ifdef HAVE_F_PATH_MNT
-@@ -2020,7 +2048,11 @@ struct file_operations ll_dir_operations = {
-         .open     = ll_dir_open,
-         .release  = ll_dir_release,
-         .read     = generic_read_dir,
--        .readdir  = ll_readdir,
-+#ifdef HAVE_DIR_CONTEXT
-+	.iterate	= ll_iterate,
-+#else
-+	.readdir	= ll_readdir,
-+#endif
-         .unlocked_ioctl   = ll_dir_ioctl,
-         .fsync    = ll_fsync,
- };
-diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 9da81ca..283e106 100644
---- a/lustre/llite/llite_internal.h
-+++ b/lustre/llite/llite_internal.h
-@@ -91,6 +91,9 @@ extern struct file_operations ll_pgcache_seq_fops;
- #define REMOTE_PERM_HASHSIZE 16
- 
- struct ll_getname_data {
-+#ifdef HAVE_DIR_CONTEXT
-+	struct dir_context	ctx;
-+#endif
-         char            *lgd_name;      /* points to a buffer with NAME_MAX+1 size */
-         struct lu_fid    lgd_fid;       /* target fid we are looking for */
-         int              lgd_found;     /* inode matched? */
-@@ -722,8 +725,12 @@ extern struct file_operations ll_dir_operations;
- extern struct inode_operations ll_dir_inode_operations;
- struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
-                              struct ll_dir_chain *chain);
-+#ifdef HAVE_DIR_CONTEXT
-+int ll_dir_read(struct inode *inode, struct dir_context *ctx);
-+#else
- int ll_dir_read(struct inode *inode, __u64 *_pos, void *cookie,
- 		filldir_t filldir);
-+#endif
- 
- int ll_get_mdt_idx(struct inode *inode);
- /* llite/namei.c */
-diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
-index 2926caf..25b16e8 100644
---- a/lustre/llite/llite_nfs.c
-+++ b/lustre/llite/llite_nfs.c
-@@ -235,24 +235,33 @@ static int ll_nfs_get_name_filldir(void *cookie, const char *name, int namelen,
- static int ll_get_name(struct dentry *dentry, char *name,
-                        struct dentry *child)
- {
--        struct inode *dir = dentry->d_inode;
--        struct ll_getname_data lgd;
-+	struct inode *dir = dentry->d_inode;
-+	struct ll_getname_data lgd = {
-+		.lgd_name = name,
-+		.lgd_fid = ll_i2info(child->d_inode)->lli_fid,
-+#ifdef HAVE_DIR_CONTEXT
-+		.ctx.actor = ll_nfs_get_name_filldir,
-+	};
-+#else
-+		.lgd_found = 0,
-+	};
- 	__u64 offset = 0;
--        int rc;
--        ENTRY;
--
--        if (!dir || !S_ISDIR(dir->i_mode))
--                GOTO(out, rc = -ENOTDIR);
-+#endif
-+	int rc;
-+	ENTRY;
- 
--        if (!dir->i_fop)
--                GOTO(out, rc = -EINVAL);
-+	if (!dir || !S_ISDIR(dir->i_mode))
-+		GOTO(out, rc = -ENOTDIR);
- 
--        lgd.lgd_name = name;
--        lgd.lgd_fid = ll_i2info(child->d_inode)->lli_fid;
--        lgd.lgd_found = 0;
-+	if (!dir->i_fop)
-+		GOTO(out, rc = -EINVAL);
- 
- 	mutex_lock(&dir->i_mutex);
-+#ifdef HAVE_DIR_CONTEXT
-+	rc = ll_dir_read(dir, &lgd.ctx);
-+#else
- 	rc = ll_dir_read(dir, &offset, &lgd, ll_nfs_get_name_filldir);
-+#endif
- 	mutex_unlock(&dir->i_mutex);
-         if (!rc && !lgd.lgd_found)
-                 rc = -ENOENT;
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
similarity index 70%
rename from sys-cluster/lustre/files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
index b3964cc..4d11be8 100644
--- a/sys-cluster/lustre/files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -1,23 +1,49 @@
-From 45e9fffb84c0c272992232ed229586003ab99e5e Mon Sep 17 00:00:00 2001
+From 3c08f9d074a2f89f71f41c8a99272706ad4450ea Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 19:11:20 -0500
-Subject: [PATCH 11/18] LU-3319 procfs: update zfs proc handling to seq_files
+Date: Fri, 3 Jan 2014 09:55:26 -0500
+Subject: [PATCH 05/13] LU-3319 procfs: update zfs proc handling to seq_files
 
 Migrate all zfs proc handling to using strictly seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
 ---
- lustre/osd-zfs/osd_handler.c  |  2 +-
+ lustre/osd-zfs/osd_handler.c  | 13 ++++---
  lustre/osd-zfs/osd_internal.h |  3 --
- lustre/osd-zfs/osd_lproc.c    | 78 ++++++++++++++++++++++---------------------
- 3 files changed, 41 insertions(+), 42 deletions(-)
+ lustre/osd-zfs/osd_lproc.c    | 88 ++++++++++++++++++++++++-------------------
+ 3 files changed, 57 insertions(+), 47 deletions(-)
 
 diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
-index 77f4799..b40d03d 100644
+index d4193cd..36bf6a4 100644
 --- a/lustre/osd-zfs/osd_handler.c
 +++ b/lustre/osd-zfs/osd_handler.c
-@@ -900,7 +900,7 @@ int __init osd_init(void)
+@@ -745,6 +745,7 @@ static int osd_device_init(const struct lu_env *env, struct lu_device *d,
+ static int osd_process_config(const struct lu_env *env,
+ 			      struct lu_device *d, struct lustre_cfg *cfg)
+ {
++	struct obd_device	*obd = d->ld_obd;
+ 	struct osd_device	*o = osd_dev(d);
+ 	int			rc;
+ 	ENTRY;
+@@ -758,12 +759,12 @@ static int osd_process_config(const struct lu_env *env,
+ 		break;
+ 	case LCFG_PARAM: {
+ 		LASSERT(&o->od_dt_dev);
+-		rc = class_process_proc_param(PARAM_OSD, lprocfs_osd_obd_vars,
+-					      cfg, &o->od_dt_dev);
++		rc = class_process_proc_seq_param(PARAM_OSD, obd->obd_vars,
++						  cfg, &o->od_dt_dev);
+ 		if (rc > 0 || rc == -ENOSYS)
+-			rc = class_process_proc_param(PARAM_OST,
+-						      lprocfs_osd_obd_vars,
+-						      cfg, &o->od_dt_dev);
++			rc = class_process_proc_seq_param(PARAM_OST,
++							  obd->obd_vars, cfg,
++							  &o->od_dt_dev);
+ 		break;
+ 	}
+ 	default:
+@@ -911,7 +912,7 @@ int __init osd_init(void)
  
  	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
  #ifndef HAVE_ONLY_PROCFS_SEQ
@@ -27,7 +53,7 @@ index 77f4799..b40d03d 100644
  				LUSTRE_OSD_ZFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h
-index 0e202d2..fbad073 100644
+index bc51cb1..77b118f 100644
 --- a/lustre/osd-zfs/osd_internal.h
 +++ b/lustre/osd-zfs/osd_internal.h
 @@ -402,9 +402,6 @@ enum {
@@ -41,7 +67,7 @@ index 0e202d2..fbad073 100644
  int osd_procfs_fini(struct osd_device *osd);
  
 diff --git a/lustre/osd-zfs/osd_lproc.c b/lustre/osd-zfs/osd_lproc.c
-index 0854ce6..5a2bbac 100644
+index 0854ce6..a7ce60d 100644
 --- a/lustre/osd-zfs/osd_lproc.c
 +++ b/lustre/osd-zfs/osd_lproc.c
 @@ -107,27 +107,26 @@ out:
@@ -112,7 +138,7 @@ index 0854ce6..5a2bbac 100644
  	int                rc, val;
  
  	LASSERT(osd != NULL);
-@@ -165,24 +165,26 @@ static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
+@@ -165,24 +165,36 @@ static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
  
  	return count;
  }
@@ -144,20 +170,30 @@ index 0854ce6..5a2bbac 100644
 +LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_filesfree);
 +
 +struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
-+	{ "blocksize",		&zfs_dt_blksize_fops		},
-+	{ "kbytestotal",	&zfs_dt_kbytestotal_fops	},
-+	{ "kbytesfree",		&zfs_dt_kbytesfree_fops		},
-+	{ "kbytesavail",	&zfs_dt_kbytesavail_fops	},
-+	{ "filestotal",		&zfs_dt_filestotal_fops		},
-+	{ "filesfree",		&zfs_dt_filesfree_fops		},
-+	{ "fstype",		&zfs_osd_fstype_fops		},
-+	{ "mntdev",		&zfs_osd_mntdev_fops		},
-+	{ "force_sync",		&zfs_osd_force_sync_fops	},
-+	{ "quota_iused_estimate",&zfs_osd_iused_est_fops	},
++	{ .name	=	"blocksize",
++	  .fops	=	&zfs_dt_blksize_fops		},
++	{ .name	=	"kbytestotal",
++	  .fops	=	&zfs_dt_kbytestotal_fops	},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&zfs_dt_kbytesfree_fops		},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&zfs_dt_kbytesavail_fops	},
++	{ .name	=	"filestotal",
++	  .fops	=	&zfs_dt_filestotal_fops		},
++	{ .name	=	"filesfree",
++	  .fops	=	&zfs_dt_filesfree_fops		},
++	{ .name	=	"fstype",
++	  .fops	=	&zfs_osd_fstype_fops		},
++	{ .name	=	"mntdev",
++	  .fops	=	&zfs_osd_mntdev_fops		},
++	{ .name	=	"force_sync",
++	  .fops	=	&zfs_osd_force_sync_fops	},
++	{ .name	=	"quota_iused_estimate",
++	  .fops	=	&zfs_osd_iused_est_fops		},
  	{ 0 }
  };
  
-@@ -202,7 +204,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
+@@ -202,7 +214,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
  	LASSERT(name != NULL);
  	LASSERT(type != NULL);
  
@@ -167,5 +203,5 @@ index 0854ce6..5a2bbac 100644
  	if (IS_ERR(osd->od_proc_entry)) {
  		rc = PTR_ERR(osd->od_proc_entry);
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
deleted file mode 100644
index e56376a..0000000
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
+++ /dev/null
@@ -1,1334 +0,0 @@
-From 01ce737ef8bba37c904d79f3aabe88a4ead20b74 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 5 Dec 2013 13:53:37 -0500
-Subject: [PATCH 06/18] LU-3319 procfs: move llite proc handling over to
- seq_file
-
-For lustre clients a special abstract layer so a lustre
-client can be mounted. In order to support 3.10+ kernels
-this client code being the llite,vvp,and clio layers proc
-proc handling has been ported to using seq_files only.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Id2ac0956dbdf586ab1200e2edb00d489c15c5d50
----
- lustre/include/cl_object.h    |   4 +-
- lustre/include/lu_object.h    |   1 +
- lustre/llite/llite_internal.h |   7 +-
- lustre/llite/llite_lib.c      |  40 ++-
- lustre/llite/lproc_llite.c    | 611 +++++++++++++++++++++---------------------
- lustre/llite/super25.c        |   2 +-
- lustre/llite/vvp_dev.c        |   7 +-
- lustre/obdclass/cl_object.c   |  93 +++----
- lustre/obdclass/lu_object.c   |  22 ++
- 9 files changed, 402 insertions(+), 385 deletions(-)
-
-diff --git a/lustre/include/cl_object.h b/lustre/include/cl_object.h
-index 0aedd62..9735671 100644
---- a/lustre/include/cl_object.h
-+++ b/lustre/include/cl_object.h
-@@ -2553,8 +2553,6 @@ struct cache_stats {
- 
- /** These are not exported so far */
- void cache_stats_init (struct cache_stats *cs, const char *name);
--int  cache_stats_print(const struct cache_stats *cs,
--                       char *page, int count, int header);
- 
- /**
-  * Client-side site. This represents particular client stack. "Global"
-@@ -2586,7 +2584,7 @@ void cl_stack_fini(const struct lu_env *env, struct cl_device *cl);
-  * Output client site statistical counters into a buffer. Suitable for
-  * ll_rd_*()-style functions.
-  */
--int cl_site_stats_print(const struct cl_site *s, char *page, int count);
-+int cl_site_stats_print(const struct cl_site *site, struct seq_file *m);
- 
- /**
-  * \name helpers
-diff --git a/lustre/include/lu_object.h b/lustre/include/lu_object.h
-index 94c0b47..103debd 100644
---- a/lustre/include/lu_object.h
-+++ b/lustre/include/lu_object.h
-@@ -1279,6 +1279,7 @@ int  lu_env_refill_by_tags(struct lu_env *env, __u32 ctags, __u32 stags);
-  * Output site statistical counters into a buffer. Suitable for
-  * ll_rd_*()-style functions.
-  */
-+int lu_site_stats_seq_print(const struct lu_site *s, struct seq_file *m);
- int lu_site_stats_print(const struct lu_site *s, char *page, int count);
- 
- /**
-diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 283e106..44f6522 100644
---- a/lustre/llite/llite_internal.h
-+++ b/lustre/llite/llite_internal.h
-@@ -706,15 +706,16 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-                                 struct super_block *sb, char *osc, char *mdc);
- void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi);
- void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count);
--void lprocfs_llite_init_vars(struct lprocfs_static_vars *lvars);
-+int ll_process_proc_param(struct lustre_cfg *lcfg, unsigned long *sb);
- #else
- static inline int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-                         struct super_block *sb, char *osc, char *mdc){return 0;}
- static inline void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi) {}
- static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
--static void lprocfs_llite_init_vars(struct lprocfs_static_vars *lvars)
-+
-+static int ll_process_proc_param(struct lustre_cfg *lcfg, unsigned long *sb)
- {
--        memset(lvars, 0, sizeof(*lvars));
-+	return 0;
- }
- #endif
- 
-diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
-index 9d9e432..86f07c9 100644
---- a/lustre/llite/llite_lib.c
-+++ b/lustre/llite/llite_lib.c
-@@ -2277,31 +2277,23 @@ out_statfs:
- 
- int ll_process_config(struct lustre_cfg *lcfg)
- {
--        char *ptr;
--        void *sb;
--        struct lprocfs_static_vars lvars;
--        unsigned long x;
--        int rc = 0;
-+	struct super_block *sb;
-+	unsigned long x;
-+	char *ptr;
- 
--        lprocfs_llite_init_vars(&lvars);
--
--        /* The instance name contains the sb: lustre-client-aacfe000 */
--        ptr = strrchr(lustre_cfg_string(lcfg, 0), '-');
--        if (!ptr || !*(++ptr))
--                return -EINVAL;
--        if (sscanf(ptr, "%lx", &x) != 1)
--                return -EINVAL;
--        sb = (void *)x;
--        /* This better be a real Lustre superblock! */
--        LASSERT(s2lsi((struct super_block *)sb)->lsi_lmd->lmd_magic == LMD_MAGIC);
--
--        /* Note we have not called client_common_fill_super yet, so
--           proc fns must be able to handle that! */
--        rc = class_process_proc_param(PARAM_LLITE, lvars.obd_vars,
--                                      lcfg, sb);
--        if (rc > 0)
--                rc = 0;
--        return(rc);
-+	/* The instance name contains the sb: lustre-client-aacfe000 */
-+	ptr = strrchr(lustre_cfg_string(lcfg, 0), '-');
-+	if (!ptr || !*(++ptr))
-+		return -EINVAL;
-+	if (sscanf(ptr, "%lx", &x) != 1)
-+		return -EINVAL;
-+	sb = (struct super_block *)x;
-+	/* This better be a real Lustre superblock! */
-+	LASSERT(s2lsi(sb)->lsi_lmd->lmd_magic == LMD_MAGIC);
-+
-+	/* Note we have not called client_common_fill_super yet, so
-+	   proc fns must be able to handle that! */
-+	return ll_process_proc_param(lcfg, &x);
- }
- 
- /* this function prepares md_op_data hint for passing ot down to MD stack. */
-diff --git a/lustre/llite/lproc_llite.c b/lustre/llite/lproc_llite.c
-index 2686924..7793a63 100644
---- a/lustre/llite/lproc_llite.c
-+++ b/lustre/llite/lproc_llite.c
-@@ -37,8 +37,8 @@
- 
- #include <linux/version.h>
- #include <lustre_lite.h>
-+#include <lustre_param.h>
- #include <lprocfs_status.h>
--#include <linux/seq_file.h>
- #include <obd_support.h>
- 
- #include "llite_internal.h"
-@@ -52,10 +52,9 @@ struct file_operations ll_rw_extents_stats_fops;
- struct file_operations ll_rw_extents_stats_pp_fops;
- struct file_operations ll_rw_offset_stats_fops;
- 
--static int ll_rd_blksize(char *page, char **start, off_t off, int count,
--                         int *eof, void *data)
-+static int ll_blksize_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
-+	struct super_block *sb = m->private;
-         struct obd_statfs osfs;
-         int rc;
- 
-@@ -63,18 +62,15 @@ static int ll_rd_blksize(char *page, char **start, off_t off, int count,
-         rc = ll_statfs_internal(sb, &osfs,
-                                 cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
-                                 OBD_STATFS_NODELAY);
--        if (!rc) {
--              *eof = 1;
--              rc = snprintf(page, count, "%u\n", osfs.os_bsize);
--        }
--
-+	if (!rc)
-+		rc = seq_printf(m, "%u\n", osfs.os_bsize);
-         return rc;
- }
-+LPROC_SEQ_FOPS_RO(ll_blksize);
- 
--static int ll_rd_kbytestotal(char *page, char **start, off_t off, int count,
--                             int *eof, void *data)
-+static int ll_kbytestotal_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
-+	struct super_block *sb = m->private;
-         struct obd_statfs osfs;
-         int rc;
- 
-@@ -89,17 +85,15 @@ static int ll_rd_kbytestotal(char *page, char **start, off_t off, int count,
-                 while (blk_size >>= 1)
-                         result <<= 1;
- 
--                *eof = 1;
--                rc = snprintf(page, count, LPU64"\n", result);
-+		rc = seq_printf(m, LPU64"\n", result);
-         }
-         return rc;
--
- }
-+LPROC_SEQ_FOPS_RO(ll_kbytestotal);
- 
--static int ll_rd_kbytesfree(char *page, char **start, off_t off, int count,
--                            int *eof, void *data)
-+static int ll_kbytesfree_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
-+	struct super_block *sb = m->private;
-         struct obd_statfs osfs;
-         int rc;
- 
-@@ -114,16 +108,15 @@ static int ll_rd_kbytesfree(char *page, char **start, off_t off, int count,
-                 while (blk_size >>= 1)
-                         result <<= 1;
- 
--                *eof = 1;
--                rc = snprintf(page, count, LPU64"\n", result);
-+		rc = seq_printf(m, LPU64"\n", result);
-         }
-         return rc;
- }
-+LPROC_SEQ_FOPS_RO(ll_kbytesfree);
- 
--static int ll_rd_kbytesavail(char *page, char **start, off_t off, int count,
--                             int *eof, void *data)
-+static int ll_kbytesavail_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
-+	struct super_block *sb = m->private;
-         struct obd_statfs osfs;
-         int rc;
- 
-@@ -138,16 +131,15 @@ static int ll_rd_kbytesavail(char *page, char **start, off_t off, int count,
-                 while (blk_size >>= 1)
-                         result <<= 1;
- 
--                *eof = 1;
--                rc = snprintf(page, count, LPU64"\n", result);
-+		rc = seq_printf(m, LPU64"\n", result);
-         }
-         return rc;
- }
-+LPROC_SEQ_FOPS_RO(ll_kbytesavail);
- 
--static int ll_rd_filestotal(char *page, char **start, off_t off, int count,
--                            int *eof, void *data)
-+static int ll_filestotal_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
-+	struct super_block *sb = m->private;
-         struct obd_statfs osfs;
-         int rc;
- 
-@@ -155,86 +147,73 @@ static int ll_rd_filestotal(char *page, char **start, off_t off, int count,
-         rc = ll_statfs_internal(sb, &osfs,
-                                 cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
-                                 OBD_STATFS_NODELAY);
--        if (!rc) {
--                 *eof = 1;
--                 rc = snprintf(page, count, LPU64"\n", osfs.os_files);
--        }
--        return rc;
-+	if (!rc)
-+		rc = seq_printf(m, LPU64"\n", osfs.os_files);
-+	return rc;
- }
-+LPROC_SEQ_FOPS_RO(ll_filestotal);
- 
--static int ll_rd_filesfree(char *page, char **start, off_t off, int count,
--                           int *eof, void *data)
-+static int ll_filesfree_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
--        struct obd_statfs osfs;
--        int rc;
--
--        LASSERT(sb != NULL);
--        rc = ll_statfs_internal(sb, &osfs,
--                                cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
--                                OBD_STATFS_NODELAY);
--        if (!rc) {
--                 *eof = 1;
--                 rc = snprintf(page, count, LPU64"\n", osfs.os_ffree);
--        }
--        return rc;
-+	struct super_block *sb = m->private;
-+	struct obd_statfs osfs;
-+	int rc;
- 
-+	LASSERT(sb != NULL);
-+	rc = ll_statfs_internal(sb, &osfs,
-+				cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
-+				OBD_STATFS_NODELAY);
-+	if (!rc)
-+		rc = seq_printf(m, LPU64"\n", osfs.os_ffree);
-+	return rc;
- }
-+LPROC_SEQ_FOPS_RO(ll_filesfree);
- 
--static int ll_rd_client_type(char *page, char **start, off_t off, int count,
--                            int *eof, void *data)
-+static int ll_client_type_seq_show(struct seq_file *m, void *v)
- {
--        struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)data);
--        int rc;
--
--        LASSERT(sbi != NULL);
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
-+	int rc;
- 
--        *eof = 1;
--        if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
--                rc = snprintf(page, count, "remote client\n");
--        else
--                rc = snprintf(page, count, "local client\n");
-+	LASSERT(sbi != NULL);
- 
--        return rc;
-+	if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
-+		rc = seq_printf(m, "remote client\n");
-+	else
-+		rc = seq_printf(m, "local client\n");
-+	return rc;
- }
-+LPROC_SEQ_FOPS_RO(ll_client_type);
- 
--static int ll_rd_fstype(char *page, char **start, off_t off, int count,
--                        int *eof, void *data)
-+static int ll_fstype_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block*)data;
-+	struct super_block *sb = m->private;
- 
--        LASSERT(sb != NULL);
--        *eof = 1;
--        return snprintf(page, count, "%s\n", sb->s_type->name);
-+	LASSERT(sb != NULL);
-+	return seq_printf(m, "%s\n", sb->s_type->name);
- }
-+LPROC_SEQ_FOPS_RO(ll_fstype);
- 
--static int ll_rd_sb_uuid(char *page, char **start, off_t off, int count,
--                         int *eof, void *data)
-+static int ll_sb_uuid_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = (struct super_block *)data;
-+	struct super_block *sb = m->private;
- 
--        LASSERT(sb != NULL);
--        *eof = 1;
--        return snprintf(page, count, "%s\n", ll_s2sbi(sb)->ll_sb_uuid.uuid);
-+	LASSERT(sb != NULL);
-+	return seq_printf(m, "%s\n", ll_s2sbi(sb)->ll_sb_uuid.uuid);
- }
-+LPROC_SEQ_FOPS_RO(ll_sb_uuid);
- 
--static int ll_rd_xattr_cache(char *page, char **start, off_t off,
--				int count, int *eof, void *data)
-+static int ll_xattr_cache_seq_show(struct seq_file *m, void *v)
- {
--	struct super_block *sb = (struct super_block *)data;
--	struct ll_sb_info *sbi = ll_s2sbi(sb);
--	int rc;
--
--	rc = snprintf(page, count, "%u\n", sbi->ll_xattr_cache_enabled);
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
- 
--	return rc;
-+	return seq_printf(m, "%u\n", sbi->ll_xattr_cache_enabled);
- }
- 
--static int ll_wr_xattr_cache(struct file *file, const char *buffer,
--				unsigned long count, void *data)
-+static ssize_t ll_xattr_cache_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--	struct super_block *sb = (struct super_block *)data;
--	struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
- 	int val, rc;
- 
- 	rc = lprocfs_write_helper(buffer, count, &val);
-@@ -251,24 +230,23 @@ static int ll_wr_xattr_cache(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(ll_xattr_cache);
- 
--static int ll_rd_site_stats(char *page, char **start, off_t off,
--                            int count, int *eof, void *data)
-+static int ll_site_stats_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--
--        /*
--         * See description of statistical counters in struct cl_site, and
--         * struct lu_site.
--         */
--        return cl_site_stats_print(lu2cl_site(ll_s2sbi(sb)->ll_site),
--                                   page, count);
-+	struct super_block *sb = m->private;
-+
-+	/*
-+	 * See description of statistical counters in struct cl_site, and
-+	 * struct lu_site.
-+	 */
-+	return cl_site_stats_print(lu2cl_site(ll_s2sbi(sb)->ll_site), m);
- }
-+LPROC_SEQ_FOPS_RO(ll_site_stats);
- 
--static int ll_rd_max_readahead_mb(char *page, char **start, off_t off,
--                                   int count, int *eof, void *data)
-+static int ll_max_readahead_mb_seq_show(struct seq_file *m, void *v)
- {
--	struct super_block *sb = data;
-+	struct super_block *sb = m->private;
- 	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 	long pages_number;
- 	int mult;
-@@ -278,14 +256,15 @@ static int ll_rd_max_readahead_mb(char *page, char **start, off_t off,
- 	spin_unlock(&sbi->ll_lock);
- 
- 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
--	return lprocfs_read_frac_helper(page, count, pages_number, mult);
-+	return lprocfs_seq_read_frac_helper(m, pages_number, mult);
- }
- 
--static int ll_wr_max_readahead_mb(struct file *file, const char *buffer,
--				  unsigned long count, void *data)
-+static ssize_t
-+ll_max_readahead_mb_seq_write(struct file *file, const char *buffer,
-+			      size_t count, loff_t *off)
- {
--	struct super_block *sb = data;
--	struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
- 	int mult, rc, pages_number;
- 
- 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
-@@ -303,14 +282,13 @@ static int ll_wr_max_readahead_mb(struct file *file, const char *buffer,
- 	spin_lock(&sbi->ll_lock);
- 	sbi->ll_ra_info.ra_max_pages = pages_number;
- 	spin_unlock(&sbi->ll_lock);
--
- 	return count;
- }
-+LPROC_SEQ_FOPS(ll_max_readahead_mb);
- 
--static int ll_rd_max_readahead_per_file_mb(char *page, char **start, off_t off,
--                                           int count, int *eof, void *data)
-+static int ll_max_readahead_per_file_mb_seq_show(struct seq_file *m, void *v)
- {
--	struct super_block *sb = data;
-+	struct super_block *sb = m->private;
- 	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 	long pages_number;
- 	int mult;
-@@ -320,15 +298,16 @@ static int ll_rd_max_readahead_per_file_mb(char *page, char **start, off_t off,
- 	spin_unlock(&sbi->ll_lock);
- 
- 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
--	return lprocfs_read_frac_helper(page, count, pages_number, mult);
-+	return lprocfs_seq_read_frac_helper(m, pages_number, mult);
- }
- 
--static int ll_wr_max_readahead_per_file_mb(struct file *file, const char *buffer,
--                                          unsigned long count, void *data)
-+static ssize_t
-+ll_max_readahead_per_file_mb_seq_write(struct file *file, const char *buffer,
-+				       size_t count, loff_t *off)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
--        int mult, rc, pages_number;
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
-+	int mult, rc, pages_number;
- 
- 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
-         rc = lprocfs_write_frac_helper(buffer, count, &pages_number, mult);
-@@ -346,14 +325,13 @@ static int ll_wr_max_readahead_per_file_mb(struct file *file, const char *buffer
- 	spin_lock(&sbi->ll_lock);
- 	sbi->ll_ra_info.ra_max_pages_per_file = pages_number;
- 	spin_unlock(&sbi->ll_lock);
--
- 	return count;
- }
-+LPROC_SEQ_FOPS(ll_max_readahead_per_file_mb);
- 
--static int ll_rd_max_read_ahead_whole_mb(char *page, char **start, off_t off,
--                                         int count, int *eof, void *data)
-+static int ll_max_read_ahead_whole_mb_seq_show(struct seq_file *m, void *v)
- {
--	struct super_block *sb = data;
-+	struct super_block *sb = m->private;
- 	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 	long pages_number;
- 	int mult;
-@@ -363,14 +341,15 @@ static int ll_rd_max_read_ahead_whole_mb(char *page, char **start, off_t off,
- 	spin_unlock(&sbi->ll_lock);
- 
- 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
--	return lprocfs_read_frac_helper(page, count, pages_number, mult);
-+	return lprocfs_seq_read_frac_helper(m, pages_number, mult);
- }
- 
--static int ll_wr_max_read_ahead_whole_mb(struct file *file, const char *buffer,
--					 unsigned long count, void *data)
-+static ssize_t
-+ll_max_read_ahead_whole_mb_seq_write(struct file *file, const char *buffer,
-+				     size_t count, loff_t *off)
- {
--	struct super_block *sb = data;
--	struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
- 	int mult, rc, pages_number;
- 
- 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
-@@ -392,24 +371,22 @@ static int ll_wr_max_read_ahead_whole_mb(struct file *file, const char *buffer,
- 	spin_lock(&sbi->ll_lock);
- 	sbi->ll_ra_info.ra_max_read_ahead_whole_pages = pages_number;
- 	spin_unlock(&sbi->ll_lock);
--
- 	return count;
- }
-+LPROC_SEQ_FOPS(ll_max_read_ahead_whole_mb);
- 
--static int ll_rd_max_cached_mb(char *page, char **start, off_t off,
--                               int count, int *eof, void *data)
-+static int ll_max_cached_mb_seq_show(struct seq_file *m, void *v)
- {
--	struct super_block     *sb    = data;
-+	struct super_block     *sb    = m->private;
- 	struct ll_sb_info      *sbi   = ll_s2sbi(sb);
- 	struct cl_client_cache *cache = &sbi->ll_cache;
- 	int shift = 20 - PAGE_CACHE_SHIFT;
- 	int max_cached_mb;
- 	int unused_mb;
- 
--	*eof = 1;
- 	max_cached_mb = cache->ccc_lru_max >> shift;
- 	unused_mb = cfs_atomic_read(&cache->ccc_lru_left) >> shift;
--	return snprintf(page, count,
-+	return seq_printf(m,
- 			"users: %d\n"
- 			"max_cached_mb: %d\n"
- 			"used_mb: %d\n"
-@@ -422,16 +399,17 @@ static int ll_rd_max_cached_mb(char *page, char **start, off_t off,
- 			cache->ccc_lru_shrinkers);
- }
- 
--static int ll_wr_max_cached_mb(struct file *file, const char *buffer,
--				unsigned long nob, void *data)
-+static ssize_t
-+ll_max_cached_mb_seq_write(struct file *file, const char *buffer,
-+			   size_t count, loff_t *off)
- {
--	struct super_block *sb = data;
-+	struct seq_file *m = file->private_data;
-+	struct super_block *sb = m->private;
- 	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 	struct cl_client_cache *cache = &sbi->ll_cache;
- 	struct lu_env *env;
- 	int refcheck;
- 	int mult, rc, pages_number;
--	size_t count = nob;
- 	int diff = 0;
- 	int nrpages = 0;
- 	ENTRY;
-@@ -512,22 +490,21 @@ out:
- 	}
- 	return rc;
- }
-+LPROC_SEQ_FOPS(ll_max_cached_mb);
- 
--static int ll_rd_checksum(char *page, char **start, off_t off,
--                          int count, int *eof, void *data)
-+static int ll_checksum_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct super_block *sb = m->private;
-+	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 
--        return snprintf(page, count, "%u\n",
--                        (sbi->ll_flags & LL_SBI_CHECKSUM) ? 1 : 0);
-+	return seq_printf(m, "%u\n", (sbi->ll_flags & LL_SBI_CHECKSUM) ? 1 : 0);
- }
- 
--static int ll_wr_checksum(struct file *file, const char *buffer,
--                          unsigned long count, void *data)
-+static ssize_t ll_checksum_seq_write(struct file *file, const char *buffer,
-+				     size_t count, loff_t *off)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
-         int val, rc;
- 
-         if (!sbi->ll_dt_exp)
-@@ -549,19 +526,20 @@ static int ll_wr_checksum(struct file *file, const char *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(ll_checksum);
- 
--static int ll_rd_max_rw_chunk(char *page, char **start, off_t off,
--                          int count, int *eof, void *data)
-+static int ll_max_rw_chunk_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
-+	struct super_block *sb = m->private;
- 
--        return snprintf(page, count, "%lu\n", ll_s2sbi(sb)->ll_max_rw_chunk);
-+	return seq_printf(m, "%lu\n", ll_s2sbi(sb)->ll_max_rw_chunk);
- }
- 
--static int ll_wr_max_rw_chunk(struct file *file, const char *buffer,
--                          unsigned long count, void *data)
-+static ssize_t ll_max_rw_chunk_seq_write(struct file *file, const char *buffer,
-+					 size_t count, loff_t *off)
- {
--        struct super_block *sb = data;
-+	struct seq_file *m = file->private_data;
-+	struct super_block *sb = m->private;
-         int rc, val;
- 
-         rc = lprocfs_write_helper(buffer, count, &val);
-@@ -570,27 +548,26 @@ static int ll_wr_max_rw_chunk(struct file *file, const char *buffer,
-         ll_s2sbi(sb)->ll_max_rw_chunk = val;
-         return count;
- }
-+LPROC_SEQ_FOPS(ll_max_rw_chunk);
- 
--static int ll_rd_track_id(char *page, int count, void *data,
--                          enum stats_track_type type)
-+static int ll_rd_track_id(struct seq_file *m, enum stats_track_type type)
- {
--        struct super_block *sb = data;
--
--        if (ll_s2sbi(sb)->ll_stats_track_type == type) {
--                return snprintf(page, count, "%d\n",
--                                ll_s2sbi(sb)->ll_stats_track_id);
-+	struct super_block *sb = m->private;
- 
--        } else if (ll_s2sbi(sb)->ll_stats_track_type == STATS_TRACK_ALL) {
--                return snprintf(page, count, "0 (all)\n");
--        } else {
--                return snprintf(page, count, "untracked\n");
--        }
-+	if (ll_s2sbi(sb)->ll_stats_track_type == type) {
-+		return seq_printf(m, "%d\n",
-+				  ll_s2sbi(sb)->ll_stats_track_id);
-+	} else if (ll_s2sbi(sb)->ll_stats_track_type == STATS_TRACK_ALL) {
-+		return seq_printf(m, "0 (all)\n");
-+	} else {
-+		return seq_printf(m, "untracked\n");
-+	}
- }
- 
- static int ll_wr_track_id(const char *buffer, unsigned long count, void *data,
--                          enum stats_track_type type)
-+			  enum stats_track_type type)
- {
--        struct super_block *sb = data;
-+	struct super_block *sb = data;
-         int rc, pid;
- 
-         rc = lprocfs_write_helper(buffer, count, &pid);
-@@ -605,57 +582,59 @@ static int ll_wr_track_id(const char *buffer, unsigned long count, void *data,
-         return count;
- }
- 
--static int ll_rd_track_pid(char *page, char **start, off_t off,
--                          int count, int *eof, void *data)
-+static int ll_track_pid_seq_show(struct seq_file *m, void *v)
- {
--        return (ll_rd_track_id(page, count, data, STATS_TRACK_PID));
-+	return ll_rd_track_id(m, STATS_TRACK_PID);
- }
- 
--static int ll_wr_track_pid(struct file *file, const char *buffer,
--                          unsigned long count, void *data)
-+static ssize_t ll_track_pid_seq_write(struct file *file, const char *buffer,
-+				      size_t count, loff_t *off)
- {
--        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_PID));
-+	struct seq_file *seq = file->private_data;
-+	return ll_wr_track_id(buffer, count, seq->private, STATS_TRACK_PID);
- }
-+LPROC_SEQ_FOPS(ll_track_pid);
- 
--static int ll_rd_track_ppid(char *page, char **start, off_t off,
--                          int count, int *eof, void *data)
-+static int ll_track_ppid_seq_show(struct seq_file *m, void *v)
- {
--        return (ll_rd_track_id(page, count, data, STATS_TRACK_PPID));
-+	return ll_rd_track_id(m, STATS_TRACK_PPID);
- }
- 
--static int ll_wr_track_ppid(struct file *file, const char *buffer,
--                          unsigned long count, void *data)
-+static ssize_t ll_track_ppid_seq_write(struct file *file, const char *buffer,
-+				       size_t count, loff_t *off)
- {
--        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_PPID));
-+	struct seq_file *seq = file->private_data;
-+	return ll_wr_track_id(buffer, count, seq->private, STATS_TRACK_PPID);
- }
-+LPROC_SEQ_FOPS(ll_track_ppid);
- 
--static int ll_rd_track_gid(char *page, char **start, off_t off,
--                          int count, int *eof, void *data)
-+static int ll_track_gid_seq_show(struct seq_file *m, void *v)
- {
--        return (ll_rd_track_id(page, count, data, STATS_TRACK_GID));
-+	return ll_rd_track_id(m, STATS_TRACK_GID);
- }
- 
--static int ll_wr_track_gid(struct file *file, const char *buffer,
--                          unsigned long count, void *data)
-+static ssize_t ll_track_gid_seq_write(struct file *file, const char *buffer,
-+				      size_t count, loff_t *off)
- {
--        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_GID));
-+	struct seq_file *seq = file->private_data;
-+	return ll_wr_track_id(buffer, count, seq->private, STATS_TRACK_GID);
- }
-+LPROC_SEQ_FOPS(ll_track_gid);
- 
--static int ll_rd_statahead_max(char *page, char **start, off_t off,
--                               int count, int *eof, void *data)
-+static int ll_statahead_max_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct super_block *sb = m->private;
-+	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 
--        return snprintf(page, count, "%u\n", sbi->ll_sa_max);
-+	return seq_printf(m, "%u\n", sbi->ll_sa_max);
- }
- 
--static int ll_wr_statahead_max(struct file *file, const char *buffer,
--                               unsigned long count, void *data)
-+static ssize_t ll_statahead_max_seq_write(struct file *file, const char *buffer,
-+					  size_t count, loff_t *off)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
--        int val, rc;
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
-+	int val, rc;
- 
-         rc = lprocfs_write_helper(buffer, count, &val);
-         if (rc)
-@@ -669,23 +648,23 @@ static int ll_wr_statahead_max(struct file *file, const char *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(ll_statahead_max);
- 
--static int ll_rd_statahead_agl(char *page, char **start, off_t off,
--                               int count, int *eof, void *data)
-+static int ll_statahead_agl_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct super_block *sb = m->private;
-+	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 
--        return snprintf(page, count, "%u\n",
--                        sbi->ll_flags & LL_SBI_AGL_ENABLED ? 1 : 0);
-+	return seq_printf(m, "%u\n",
-+			  sbi->ll_flags & LL_SBI_AGL_ENABLED ? 1 : 0);
- }
- 
--static int ll_wr_statahead_agl(struct file *file, const char *buffer,
--                               unsigned long count, void *data)
-+static ssize_t ll_statahead_agl_seq_write(struct file *file, const char *buffer,
-+					  size_t count, loff_t *off)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
--        int val, rc;
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
-+	int val, rc;
- 
-         rc = lprocfs_write_helper(buffer, count, &val);
-         if (rc)
-@@ -698,14 +677,14 @@ static int ll_wr_statahead_agl(struct file *file, const char *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(ll_statahead_agl);
- 
--static int ll_rd_statahead_stats(char *page, char **start, off_t off,
--                                 int count, int *eof, void *data)
-+static int ll_statahead_stats_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct super_block *sb = m->private;
-+	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 
--        return snprintf(page, count,
-+	return seq_printf(m,
-                         "statahead total: %u\n"
-                         "statahead wrong: %u\n"
-                         "agl total: %u\n",
-@@ -713,23 +692,23 @@ static int ll_rd_statahead_stats(char *page, char **start, off_t off,
-                         atomic_read(&sbi->ll_sa_wrong),
-                         atomic_read(&sbi->ll_agl_total));
- }
-+LPROC_SEQ_FOPS_RO(ll_statahead_stats);
- 
--static int ll_rd_lazystatfs(char *page, char **start, off_t off,
--                            int count, int *eof, void *data)
-+static int ll_lazystatfs_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	struct super_block *sb = m->private;
-+	struct ll_sb_info *sbi = ll_s2sbi(sb);
- 
--        return snprintf(page, count, "%u\n",
--                        (sbi->ll_flags & LL_SBI_LAZYSTATFS) ? 1 : 0);
-+	return seq_printf(m, "%u\n",
-+			  (sbi->ll_flags & LL_SBI_LAZYSTATFS) ? 1 : 0);
- }
- 
--static int ll_wr_lazystatfs(struct file *file, const char *buffer,
--                            unsigned long count, void *data)
-+static ssize_t ll_lazystatfs_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
--        int val, rc;
-+	struct seq_file *m = file->private_data;
-+	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
-+	int val, rc;
- 
-         rc = lprocfs_write_helper(buffer, count, &val);
-         if (rc)
-@@ -742,30 +721,29 @@ static int ll_wr_lazystatfs(struct file *file, const char *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(ll_lazystatfs);
- 
--static int ll_rd_maxea_size(char *page, char **start, off_t off,
--                            int count, int *eof, void *data)
-+static int ll_maxea_size_seq_show(struct seq_file *m, void *v)
- {
--        struct super_block *sb = data;
--        struct ll_sb_info *sbi = ll_s2sbi(sb);
--        unsigned int ealen;
--        int rc;
-+	struct super_block *sb = m->private;
-+	struct ll_sb_info *sbi = ll_s2sbi(sb);
-+	unsigned int ealen;
-+	int rc;
- 
-         rc = ll_get_max_mdsize(sbi, &ealen);
-         if (rc)
-                 return rc;
- 
--        return snprintf(page, count, "%u\n", ealen);
-+	return seq_printf(m, "%u\n", ealen);
- }
-+LPROC_SEQ_FOPS_RO(ll_maxea_size);
- 
--static int ll_rd_sbi_flags(char *page, char **start, off_t off,
--				int count, int *eof, void *data)
-+static int ll_sbi_flags_seq_show(struct seq_file *m, void *v)
- {
- 	const char *str[] = LL_SBI_FLAGS;
--	struct super_block *sb = data;
-+	struct super_block *sb = m->private;
- 	int flags = ll_s2sbi(sb)->ll_flags;
- 	int i = 0;
--	int rc = 0;
- 
- 	while (flags != 0) {
- 		if (ARRAY_SIZE(str) <= i) {
-@@ -775,66 +753,86 @@ static int ll_rd_sbi_flags(char *page, char **start, off_t off,
- 		}
- 
- 		if (flags & 0x1)
--			rc += snprintf(page + rc, count - rc, "%s ", str[i]);
-+			seq_printf(m, "%s ", str[i]);
- 		flags >>= 1;
- 		++i;
- 	}
--	if (rc > 0)
--		rc += snprintf(page + rc, count - rc, "\b\n");
--	return rc;
-+	seq_printf(m, "\b\n");
-+	return 0;
- }
-+LPROC_SEQ_FOPS_RO(ll_sbi_flags);
- 
--static int ll_rd_unstable_stats(char *page, char **start, off_t off,
--			      int count, int *eof, void *data)
-+static int ll_unstable_stats_seq_show(struct seq_file *m, void *v)
- {
--	struct super_block	*sb    = data;
-+	struct super_block	*sb    = m->private;
- 	struct ll_sb_info	*sbi   = ll_s2sbi(sb);
- 	struct cl_client_cache	*cache = &sbi->ll_cache;
--	int pages, mb, rc;
-+	int pages, mb;
- 
- 	pages = cfs_atomic_read(&cache->ccc_unstable_nr);
- 	mb    = (pages * PAGE_CACHE_SIZE) >> 20;
- 
--	rc = snprintf(page, count, "unstable_pages: %8d\n"
--				   "unstable_mb:    %8d\n", pages, mb);
--
--	return rc;
-+	return seq_printf(m, "unstable_pages: %8d\n"
-+				"unstable_mb:    %8d\n", pages, mb);
- }
--
--static struct lprocfs_vars lprocfs_llite_obd_vars[] = {
--        { "uuid",         ll_rd_sb_uuid,          0, 0 },
--        //{ "mntpt_path",   ll_rd_path,             0, 0 },
--        { "fstype",       ll_rd_fstype,           0, 0 },
--        { "site",         ll_rd_site_stats,       0, 0 },
--        { "blocksize",    ll_rd_blksize,          0, 0 },
--        { "kbytestotal",  ll_rd_kbytestotal,      0, 0 },
--        { "kbytesfree",   ll_rd_kbytesfree,       0, 0 },
--        { "kbytesavail",  ll_rd_kbytesavail,      0, 0 },
--        { "filestotal",   ll_rd_filestotal,       0, 0 },
--        { "filesfree",    ll_rd_filesfree,        0, 0 },
--        { "client_type",  ll_rd_client_type,      0, 0 },
--        //{ "filegroups",   lprocfs_rd_filegroups,  0, 0 },
--        { "max_read_ahead_mb", ll_rd_max_readahead_mb,
--                               ll_wr_max_readahead_mb, 0 },
--        { "max_read_ahead_per_file_mb", ll_rd_max_readahead_per_file_mb,
--                                        ll_wr_max_readahead_per_file_mb, 0 },
--        { "max_read_ahead_whole_mb", ll_rd_max_read_ahead_whole_mb,
--                                     ll_wr_max_read_ahead_whole_mb, 0 },
--        { "max_cached_mb",    ll_rd_max_cached_mb, ll_wr_max_cached_mb, 0 },
--        { "checksum_pages",   ll_rd_checksum, ll_wr_checksum, 0 },
--        { "max_rw_chunk",     ll_rd_max_rw_chunk, ll_wr_max_rw_chunk, 0 },
--        { "stats_track_pid",  ll_rd_track_pid, ll_wr_track_pid, 0 },
--        { "stats_track_ppid", ll_rd_track_ppid, ll_wr_track_ppid, 0 },
--        { "stats_track_gid",  ll_rd_track_gid, ll_wr_track_gid, 0 },
--        { "statahead_max",    ll_rd_statahead_max, ll_wr_statahead_max, 0 },
--        { "statahead_agl",    ll_rd_statahead_agl, ll_wr_statahead_agl, 0 },
--        { "statahead_stats",  ll_rd_statahead_stats, 0, 0 },
--        { "lazystatfs",       ll_rd_lazystatfs, ll_wr_lazystatfs, 0 },
--        { "max_easize",       ll_rd_maxea_size, 0, 0 },
--	{ "sbi_flags",        ll_rd_sbi_flags, 0, 0 },
--	{ "xattr_cache",      ll_rd_xattr_cache, ll_wr_xattr_cache, 0 },
--	{ "unstable_stats",   ll_rd_unstable_stats, 0, 0},
--        { 0 }
-+LPROC_SEQ_FOPS_RO(ll_unstable_stats);
-+
-+static struct lprocfs_seq_vars lprocfs_llite_obd_vars[] = {
-+	{ .name	=	"uuid",
-+	  .fops	=	&ll_sb_uuid_fops			},
-+	{ .name	=	"fstype",
-+	  .fops	=	&ll_fstype_fops				},
-+	{ .name	=	"site",
-+	  .fops	=	&ll_site_stats_fops			},
-+	{ .name	=	"blocksize",
-+	  .fops	=	&ll_blksize_fops			},
-+	{ .name	=	"kbytestotal",
-+	  .fops =	&ll_kbytestotal_fops			},
-+	{ .name	=	"kbytesfree",
-+	  .fops	=	&ll_kbytesfree_fops			},
-+	{ .name	=	"kbytesavail",
-+	  .fops	=	&ll_kbytesavail_fops			},
-+	{ .name	=	"filestotal",
-+	  .fops	=	&ll_filestotal_fops			},
-+	{ .name	=	"filesfree",
-+	  .fops	=	&ll_filesfree_fops			},
-+	{ .name	=	"client_type",
-+	  .fops	=	&ll_client_type_fops			},
-+	{ .name	=	"max_read_ahead_mb",
-+	  .fops	=	&ll_max_readahead_mb_fops		},
-+	{ .name	=	"max_read_ahead_per_file_mb",
-+	  .fops	=	&ll_max_readahead_per_file_mb_fops	},
-+	{ .name	=	"max_read_ahead_whole_mb",
-+	  .fops	=	&ll_max_read_ahead_whole_mb_fops	},
-+	{ .name	=	"max_cached_mb",
-+	  .fops	=	&ll_max_cached_mb_fops			},
-+	{ .name	=	"checksum_pages",
-+	  .fops	=	&ll_checksum_fops			},
-+	{ .name	=	"max_rw_chunk",
-+	  .fops	=	&ll_max_rw_chunk_fops			},
-+	{ .name	=	"stats_track_pid",
-+	  .fops	=	&ll_track_pid_fops			},
-+	{ .name	=	"stats_track_ppid",
-+	  .fops	=	&ll_track_ppid_fops			},
-+	{ .name	=	"stats_track_gid",
-+	  .fops	=	&ll_track_gid_fops			},
-+	{ .name	=	"statahead_max",
-+	  .fops	=	&ll_statahead_max_fops			},
-+	{ .name	=	"statahead_agl",
-+	  .fops	=	&ll_statahead_agl_fops			},
-+	{ .name	=	"statahead_stats",
-+	  .fops	=	&ll_statahead_stats_fops		},
-+	{ .name	=	"lazystatfs",
-+	  .fops =	&ll_lazystatfs_fops			},
-+	{ .name	=	"max_easize",
-+	  .fops =	&ll_maxea_size_fops			},
-+	{ .name	=	"sbi_flags",
-+	  .fops =	&ll_sbi_flags_fops			},
-+	{ .name	=	"xattr_cache",
-+	  .fops	=	&ll_xattr_cache_fops			},
-+	{ .name	=	"unstable_stats",
-+	  .fops	=	&ll_unstable_stats_fops			},
-+	{ 0 }
- };
- 
- #define MAX_STRING_SIZE 128
-@@ -924,14 +922,17 @@ static const char *ra_stat_string[] = {
-         [RA_STAT_WRONG_GRAB_PAGE] = "wrong page from grab_cache_page",
- };
- 
-+LPROC_SEQ_FOPS_RO_TYPE(llite, name);
-+LPROC_SEQ_FOPS_RO_TYPE(llite, uuid);
- 
- int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-                                 struct super_block *sb, char *osc, char *mdc)
- {
--        struct lprocfs_vars lvars[2];
-+	struct lprocfs_seq_vars lvars[2];
-         struct lustre_sb_info *lsi = s2lsi(sb);
-         struct ll_sb_info *sbi = ll_s2sbi(sb);
-         struct obd_device *obd;
-+	struct proc_dir_entry *dir;
-         char name[MAX_STRING_SIZE + 1], *ptr;
-         int err, id, len, rc;
-         ENTRY;
-@@ -955,7 +956,7 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-         snprintf(name, MAX_STRING_SIZE, "%.*s-%p", len,
-                  lsi->lsi_lmd->lmd_profile, sb);
- 
--        sbi->ll_proc_root = lprocfs_register(name, parent, NULL, NULL);
-+	sbi->ll_proc_root = lprocfs_seq_register(name, parent, NULL, NULL);
-         if (IS_ERR(sbi->ll_proc_root)) {
-                 err = PTR_ERR(sbi->ll_proc_root);
-                 sbi->ll_proc_root = NULL;
-@@ -1020,7 +1021,7 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-                 GOTO(out, err);
- 
- 
--        err = lprocfs_add_vars(sbi->ll_proc_root, lprocfs_llite_obd_vars, sb);
-+	err = lprocfs_seq_add_vars(sbi->ll_proc_root, lprocfs_llite_obd_vars, sb);
-         if (err)
-                 GOTO(out, err);
- 
-@@ -1031,18 +1032,21 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-         LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
-         LASSERT(obd->obd_type->typ_name != NULL);
- 
--        snprintf(name, MAX_STRING_SIZE, "%s/common_name",
--                 obd->obd_type->typ_name);
--        lvars[0].read_fptr = lprocfs_rd_name;
--        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
--        if (err)
--                GOTO(out, err);
-+	dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root);
-+	if (dir == NULL)
-+		GOTO(out, err = -ENOMEM);
- 
--        snprintf(name, MAX_STRING_SIZE, "%s/uuid", obd->obd_type->typ_name);
--        lvars[0].read_fptr = lprocfs_rd_uuid;
--        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
--        if (err)
--                GOTO(out, err);
-+	snprintf(name, MAX_STRING_SIZE, "common_name");
-+	lvars[0].fops = &llite_name_fops;
-+	err = lprocfs_seq_add_vars(dir, lvars, obd);
-+	if (err)
-+		GOTO(out, err);
-+
-+	snprintf(name, MAX_STRING_SIZE, "uuid");
-+	lvars[0].fops = &llite_uuid_fops;
-+	err = lprocfs_seq_add_vars(dir, lvars, obd);
-+	if (err)
-+		GOTO(out, err);
- 
-         /* OSC */
-         obd = class_name2obd(osc);
-@@ -1051,16 +1055,19 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
-         LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
-         LASSERT(obd->obd_type->typ_name != NULL);
- 
--        snprintf(name, MAX_STRING_SIZE, "%s/common_name",
--                 obd->obd_type->typ_name);
--        lvars[0].read_fptr = lprocfs_rd_name;
--        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
--        if (err)
--                GOTO(out, err);
-+	dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root);
-+	if (dir == NULL)
-+		GOTO(out, err = -ENOMEM);
-+
-+	snprintf(name, MAX_STRING_SIZE, "common_name");
-+	lvars[0].fops = &llite_name_fops;
-+	err = lprocfs_seq_add_vars(dir, lvars, obd);
-+	if (err)
-+		GOTO(out, err);
- 
--        snprintf(name, MAX_STRING_SIZE, "%s/uuid", obd->obd_type->typ_name);
--        lvars[0].read_fptr = lprocfs_rd_uuid;
--        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
-+	snprintf(name, MAX_STRING_SIZE, "uuid");
-+	lvars[0].fops = &llite_uuid_fops;
-+	err = lprocfs_seq_add_vars(dir, lvars, obd);
- out:
-         if (err) {
-                 lprocfs_remove(&sbi->ll_proc_root);
-@@ -1439,9 +1446,11 @@ static ssize_t ll_rw_offset_stats_seq_write(struct file *file, const char *buf,
- 
- LPROC_SEQ_FOPS(ll_rw_offset_stats);
- 
--void lprocfs_llite_init_vars(struct lprocfs_static_vars *lvars)
-+int ll_process_proc_param(struct lustre_cfg *lcfg, unsigned long *sb)
- {
--    lvars->module_vars  = NULL;
--    lvars->obd_vars     = lprocfs_llite_obd_vars;
-+	int rc = class_process_proc_seq_param(PARAM_LLITE,
-+					      lprocfs_llite_obd_vars,
-+					      lcfg, (void *)sb);
-+	return (rc > 0 ? 0 : rc);
- }
- #endif /* LPROCFS */
-diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
-index 06b55fe..4692f6e 100644
---- a/lustre/llite/super25.c
-+++ b/lustre/llite/super25.c
-@@ -169,7 +169,7 @@ static int __init init_lustre_lite(void)
- 	}
- 
-         proc_lustre_fs_root = proc_lustre_root ?
--                              lprocfs_register("llite", proc_lustre_root, NULL, NULL) : NULL;
-+			      lprocfs_seq_register("llite", proc_lustre_root, NULL, NULL) : NULL;
- 
-         lustre_register_client_fill_super(ll_fill_super);
-         lustre_register_kill_super_cb(ll_kill_super);
-diff --git a/lustre/llite/vvp_dev.c b/lustre/llite/vvp_dev.c
-index 2fdb613..fa124e2 100644
---- a/lustre/llite/vvp_dev.c
-+++ b/lustre/llite/vvp_dev.c
-@@ -530,10 +530,9 @@ static struct seq_operations vvp_pgcache_ops = {
- 
- static int vvp_dump_pgcache_seq_open(struct inode *inode, struct file *filp)
- {
--        struct proc_dir_entry *dp  = PDE(inode);
--        struct ll_sb_info     *sbi = dp->data;
--        struct seq_file       *seq;
--        int                    result;
-+	struct ll_sb_info	*sbi = PDE_DATA(inode);
-+	struct seq_file		*seq;
-+	int			result;
- 
-         result = seq_open(filp, &vvp_pgcache_ops);
-         if (result == 0) {
-diff --git a/lustre/obdclass/cl_object.c b/lustre/obdclass/cl_object.c
-index 1984836..985cf0b 100644
---- a/lustre/obdclass/cl_object.c
-+++ b/lustre/obdclass/cl_object.c
-@@ -400,11 +400,10 @@ void cache_stats_init(struct cache_stats *cs, const char *name)
- 		cfs_atomic_set(&cs->cs_stats[i], 0);
- }
- 
--int cache_stats_print(const struct cache_stats *cs,
--                      char *page, int count, int h)
-+int cache_stats_print(const struct cache_stats *cs, struct seq_file *m, int h)
- {
--	int nob = 0;
- 	int i;
-+
- 	/*
- 	 *   lookup    hit    total  cached create
- 	 * env: ...... ...... ...... ...... ......
-@@ -412,18 +411,16 @@ int cache_stats_print(const struct cache_stats *cs,
- 	if (h) {
- 		const char *names[CS_NR] = CS_NAMES;
- 
--		nob += snprintf(page + nob, count - nob, "%6s", " ");
-+		seq_printf(m, "%6s", " ");
- 		for (i = 0; i < CS_NR; i++)
--			nob += snprintf(page + nob, count - nob,
--					"%8s", names[i]);
--		nob += snprintf(page + nob, count - nob, "\n");
-+			seq_printf(m, "%8s", names[i]);
-+		seq_printf(m, "\n");
- 	}
- 
--	nob += snprintf(page + nob, count - nob, "%5.5s:", cs->cs_name);
-+	seq_printf(m, "%5.5s:", cs->cs_name);
- 	for (i = 0; i < CS_NR; i++)
--		nob += snprintf(page + nob, count - nob, "%8u",
--				cfs_atomic_read(&cs->cs_stats[i]));
--	return nob;
-+		seq_printf(m, "%8u", cfs_atomic_read(&cs->cs_stats[i]));
-+	return 0;
- }
- 
- static void cl_env_percpu_refill(void);
-@@ -471,50 +468,48 @@ static struct cache_stats cl_env_stats = {
-  * Outputs client site statistical counters into a buffer. Suitable for
-  * ll_rd_*()-style functions.
-  */
--int cl_site_stats_print(const struct cl_site *site, char *page, int count)
--{
--        int nob;
--        int i;
--        static const char *pstate[] = {
--                [CPS_CACHED]  = "c",
--                [CPS_OWNED]   = "o",
--                [CPS_PAGEOUT] = "w",
--                [CPS_PAGEIN]  = "r",
--                [CPS_FREEING] = "f"
--        };
--        static const char *lstate[] = {
--                [CLS_NEW]       = "n",
--                [CLS_QUEUING]   = "q",
--                [CLS_ENQUEUED]  = "e",
--                [CLS_HELD]      = "h",
--                [CLS_INTRANSIT] = "t",
--                [CLS_CACHED]    = "c",
--                [CLS_FREEING]   = "f"
--        };
-+int cl_site_stats_print(const struct cl_site *site, struct seq_file *m)
-+{
-+	static const char *pstate[] = {
-+		[CPS_CACHED]  = "c",
-+		[CPS_OWNED]   = "o",
-+		[CPS_PAGEOUT] = "w",
-+		[CPS_PAGEIN]  = "r",
-+		[CPS_FREEING] = "f"
-+	};
-+	static const char *lstate[] = {
-+		[CLS_NEW]       = "n",
-+		[CLS_QUEUING]   = "q",
-+		[CLS_ENQUEUED]  = "e",
-+		[CLS_HELD]      = "h",
-+		[CLS_INTRANSIT] = "t",
-+		[CLS_CACHED]    = "c",
-+		[CLS_FREEING]   = "f"
-+	};
-+	int i;
-+
- /*
-        lookup    hit  total   busy create
- pages: ...... ...... ...... ...... ...... [...... ...... ...... ......]
- locks: ...... ...... ...... ...... ...... [...... ...... ...... ...... ......]
-   env: ...... ...... ...... ...... ......
-  */
--        nob = lu_site_stats_print(&site->cs_lu, page, count);
--        nob += cache_stats_print(&site->cs_pages, page + nob, count - nob, 1);
--        nob += snprintf(page + nob, count - nob, " [");
--        for (i = 0; i < ARRAY_SIZE(site->cs_pages_state); ++i)
--                nob += snprintf(page + nob, count - nob, "%s: %u ",
--                                pstate[i],
--                                cfs_atomic_read(&site->cs_pages_state[i]));
--        nob += snprintf(page + nob, count - nob, "]\n");
--        nob += cache_stats_print(&site->cs_locks, page + nob, count - nob, 0);
--        nob += snprintf(page + nob, count - nob, " [");
--        for (i = 0; i < ARRAY_SIZE(site->cs_locks_state); ++i)
--                nob += snprintf(page + nob, count - nob, "%s: %u ",
--                                lstate[i],
--                                cfs_atomic_read(&site->cs_locks_state[i]));
--        nob += snprintf(page + nob, count - nob, "]\n");
--        nob += cache_stats_print(&cl_env_stats, page + nob, count - nob, 0);
--        nob += snprintf(page + nob, count - nob, "\n");
--        return nob;
-+	lu_site_stats_seq_print(&site->cs_lu, m);
-+	cache_stats_print(&site->cs_pages, m, 1);
-+	seq_printf(m, " [");
-+	for (i = 0; i < ARRAY_SIZE(site->cs_pages_state); ++i)
-+		seq_printf(m, "%s: %u ", pstate[i],
-+			   cfs_atomic_read(&site->cs_pages_state[i]));
-+	seq_printf(m, "]\n");
-+	cache_stats_print(&site->cs_locks, m, 0);
-+	seq_printf(m, " [");
-+	for (i = 0; i < ARRAY_SIZE(site->cs_locks_state); ++i)
-+		seq_printf(m, "%s: %u ", lstate[i],
-+			   cfs_atomic_read(&site->cs_locks_state[i]));
-+	seq_printf(m, "]\n");
-+	cache_stats_print(&cl_env_stats, m, 0);
-+	seq_printf(m, "\n");
-+	return 0;
- }
- EXPORT_SYMBOL(cl_site_stats_print);
- 
-diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c
-index 28a18ef..cca2ec0 100644
---- a/lustre/obdclass/lu_object.c
-+++ b/lustre/obdclass/lu_object.c
-@@ -2090,6 +2090,28 @@ static __u32 ls_stats_read(struct lprocfs_stats *stats, int idx)
-  * Output site statistical counters into a buffer. Suitable for
-  * lprocfs_rd_*()-style functions.
-  */
-+int lu_site_stats_seq_print(const struct lu_site *s, struct seq_file *m)
-+{
-+	lu_site_stats_t stats;
-+
-+	memset(&stats, 0, sizeof(stats));
-+	lu_site_stats_get(s->ls_obj_hash, &stats, 1);
-+
-+	return seq_printf(m, "%d/%d %d/%d %d %d %d %d %d %d %d\n",
-+			  stats.lss_busy,
-+			  stats.lss_total,
-+			  stats.lss_populated,
-+			  CFS_HASH_NHLIST(s->ls_obj_hash),
-+			  stats.lss_max_search,
-+			  ls_stats_read(s->ls_stats, LU_SS_CREATED),
-+			  ls_stats_read(s->ls_stats, LU_SS_CACHE_HIT),
-+			  ls_stats_read(s->ls_stats, LU_SS_CACHE_MISS),
-+			  ls_stats_read(s->ls_stats, LU_SS_CACHE_RACE),
-+			  ls_stats_read(s->ls_stats, LU_SS_CACHE_DEATH_RACE),
-+			  ls_stats_read(s->ls_stats, LU_SS_LRU_PURGED));
-+}
-+EXPORT_SYMBOL(lu_site_stats_seq_print);
-+
- int lu_site_stats_print(const struct lu_site *s, char *page, int count)
- {
-         lu_site_stats_t stats;
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
similarity index 81%
rename from sys-cluster/lustre/files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
index 8d25476..4189564 100644
--- a/sys-cluster/lustre/files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -1,23 +1,23 @@
-From 1537f22b9b2bc9250006805774fc300e5240c2bc Mon Sep 17 00:00:00 2001
+From 0af5f0dce053b1623b18bec48731d20c0a80b7b5 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 19:23:09 -0500
-Subject: [PATCH 15/18] LU-3319 procfs: move osp proc handling to seq_files
+Date: Fri, 31 Jan 2014 12:50:59 -0500
+Subject: [PATCH 06/13] LU-3319 procfs: move osp proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the osp
 layer proc entries over to using seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: If58826e11524a5fffd2e491c1386e3795015bc7e
+Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
 ---
- lustre/osp/lproc_osp.c    | 363 ++++++++++++++++++++++++----------------------
+ lustre/osp/lproc_osp.c    | 374 ++++++++++++++++++++++++----------------------
  lustre/osp/lwp_dev.c      |  18 +--
- lustre/osp/osp_dev.c      |  38 ++---
+ lustre/osp/osp_dev.c      |  48 +++---
  lustre/osp/osp_internal.h |   2 -
- 4 files changed, 203 insertions(+), 218 deletions(-)
+ 4 files changed, 223 insertions(+), 219 deletions(-)
 
 diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c
-index 22e3372..24f2f4c 100644
+index 75ebeb1..3dc5ec7 100644
 --- a/lustre/osp/lproc_osp.c
 +++ b/lustre/osp/lproc_osp.c
 @@ -45,24 +45,23 @@
@@ -189,7 +189,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, "%d\n", osp->opd_pre_grow_count);
@@ -221,7 +221,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, "%d\n", osp->opd_pre_max_grow_count);
@@ -253,7 +253,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, "%u\n",
@@ -270,7 +270,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, "%u\n",
@@ -287,7 +287,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, LPX64"\n",
@@ -304,7 +304,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, LPX64"\n",
@@ -321,7 +321,7 @@ index 22e3372..24f2f4c 100644
 +	struct obd_device *obd = m->private;
  	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return 0;
  
 -	return snprintf(page, count, LPU64"\n", osp->opd_pre_reserved);
@@ -372,7 +372,7 @@ index 22e3372..24f2f4c 100644
  	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
 -	int			 rc;
  
- 	if (osp == NULL)
+ 	if (osp == NULL || osp->opd_pre == NULL)
  		return -EINVAL;
  
 -	rc = snprintf(page, count, "%d\n", osp->opd_pre_status);
@@ -390,7 +390,7 @@ index 22e3372..24f2f4c 100644
  	struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev);
  
  	if (osp == NULL)
-@@ -411,87 +398,94 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
+@@ -411,87 +398,126 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
  	 * - sync changes are zero - no llog records
  	 * - sync in progress are zero - no RPCs in flight
  	 */
@@ -468,30 +468,55 @@ index 22e3372..24f2f4c 100644
 +LPROC_SEQ_FOPS_RO_TYPE(osp, state);
 +
 +static struct lprocfs_seq_vars lprocfs_osp_obd_vars[] = {
-+	{ "uuid",		&osp_uuid_fops			},
-+	{ "ping",		&osp_ping_fops,	0,	0222	},
-+	{ "connect_flags",	&osp_connect_flags_fops		},
-+	{ "ost_server_uuid",	&osp_server_uuid_fops		},
-+	{ "ost_conn_uuid",	&osp_conn_uuid_fops		},
-+	{ "active",		&osp_active_fops		},
-+	{ "max_rpcs_in_flight",	&osp_max_rpcs_in_flight_fops	},
-+	{ "max_rpcs_in_progress", &osp_max_rpcs_in_prog_fops	},
-+	{ "create_count",	&osp_create_count_fops		},
-+	{ "max_create_count",	&osp_max_create_count_fops	},
-+	{ "prealloc_next_id",	&osp_prealloc_next_id_fops	},
-+	{ "prealloc_next_seq",  &osp_prealloc_next_seq_fops	},
-+	{ "prealloc_last_id",	&osp_prealloc_last_id_fops	},
-+	{ "prealloc_last_seq",	&osp_prealloc_last_seq_fops	},
-+	{ "prealloc_reserved",	&osp_prealloc_reserved_fops	},
-+	{ "timeouts",		&osp_timeouts_fops		},
-+	{ "import",		&osp_import_fops		},
-+	{ "state",		&osp_state_fops			},
-+	{ "maxage",		&osp_maxage_fops		},
-+	{ "prealloc_status",	&osp_pre_status_fops		},
-+	{ "sync_changes",	&osp_syn_changes_fops		},
-+	{ "sync_in_flight",	&osp_syn_in_flight_fops		},
-+	{ "sync_in_progress",	&osp_syn_in_prog_fops		},
-+	{ "old_sync_processed",	&osp_old_sync_processed_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&osp_uuid_fops			},
++	{ .name	=	"ping",
++	  .fops	=	&osp_ping_fops,
++	  .proc_mode =	0222				},
++	{ .name	=	"connect_flags",
++	  .fops	=	&osp_connect_flags_fops		},
++	{ .name	=	"ost_server_uuid",
++	  .fops	=	&osp_server_uuid_fops		},
++	{ .name	=	"ost_conn_uuid",
++	  .fops	=	&osp_conn_uuid_fops		},
++	{ .name	=	"active",
++	  .fops	=	&osp_active_fops		},
++	{ .name	=	"max_rpcs_in_flight",
++	  .fops	=	&osp_max_rpcs_in_flight_fops	},
++	{ .name	=	"max_rpcs_in_progress",
++	  .fops	=	&osp_max_rpcs_in_prog_fops	},
++	{ .name	=	"create_count",
++	  .fops	=	&osp_create_count_fops		},
++	{ .name	=	"max_create_count",
++	  .fops	=	&osp_max_create_count_fops	},
++	{ .name	=	"prealloc_next_id",
++	  .fops	=	&osp_prealloc_next_id_fops	},
++	{ .name	=	"prealloc_next_seq",
++	  .fops	=	&osp_prealloc_next_seq_fops	},
++	{ .name	=	"prealloc_last_id",
++	  .fops	=	&osp_prealloc_last_id_fops	},
++	{ .name	=	"prealloc_last_seq",
++	  .fops	=	&osp_prealloc_last_seq_fops	},
++	{ .name	=	"prealloc_reserved",
++	  .fops	=	&osp_prealloc_reserved_fops	},
++	{ .name	=	"timeouts",
++	  .fops	=	&osp_timeouts_fops		},
++	{ .name	=	"import",
++	  .fops	=	&osp_import_fops		},
++	{ .name	=	"state",
++	  .fops	=	&osp_state_fops			},
++	{ .name	=	"maxage",
++	  .fops	=	&osp_maxage_fops		},
++	{ .name	=	"prealloc_status",
++	  .fops	=	&osp_pre_status_fops		},
++	{ .name	=	"sync_changes",
++	  .fops	=	&osp_syn_changes_fops		},
++	{ .name	=	"sync_in_flight",
++	  .fops	=	&osp_syn_in_flight_fops		},
++	{ .name	=	"sync_in_progress",
++	  .fops	=	&osp_syn_in_prog_fops		},
++	{ .name	=	"old_sync_processed",
++	  .fops	=	&osp_old_sync_processed_fops	},
  
 -static struct lprocfs_vars lprocfs_osp_osd_vars[] = {
 -	{ "blocksize",		lprocfs_dt_rd_blksize, 0, 0 },
@@ -501,7 +526,8 @@ index 22e3372..24f2f4c 100644
 -	{ "filestotal",		lprocfs_dt_rd_filestotal, 0, 0 },
 -	{ "filesfree",		lprocfs_dt_rd_filesfree, 0, 0 },
 +	/* for compatibility reasons */
-+	{ "destroys_in_flight",	&osp_destroys_in_flight_fops	},
++	{ .name	=	"destroys_in_flight",
++	  .fops	=	&osp_destroys_in_flight_fops	},
  	{ 0 }
  };
  
@@ -515,12 +541,18 @@ index 22e3372..24f2f4c 100644
 +LPROC_SEQ_FOPS_RO_TYPE(osp, dt_filesfree);
 +
 +static struct lprocfs_seq_vars lprocfs_osp_osd_vars[] = {
-+	{ "blocksize",		&osp_dt_blksize_fops		},
-+	{ "kbytestotal",	&osp_dt_kbytestotal_fops	},
-+	{ "kbytesfree",		&osp_dt_kbytesfree_fops		},
-+	{ "kbytesavail",	&osp_dt_kbytesavail_fops	},
-+	{ "filestotal",		&osp_dt_filestotal_fops		},
-+	{ "filesfree",		&osp_dt_filesfree_fops		},
++	{ .name	=	"blocksize",
++	  .fops	=	&osp_dt_blksize_fops		},
++	{ .name	=	"kbytestotal",
++	  .fops	=	&osp_dt_kbytestotal_fops	},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&osp_dt_kbytesfree_fops		},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&osp_dt_kbytesavail_fops	},
++	{ .name	=	"filestotal",
++	  .fops	=	&osp_dt_filestotal_fops		},
++	{ .name	=	"filesfree",
++	  .fops	=	&osp_dt_filesfree_fops		},
  	{ 0 }
  };
  
@@ -533,7 +565,8 @@ index 22e3372..24f2f4c 100644
  void osp_lprocfs_init(struct osp_device *osp)
  {
  	struct obd_device	*obd = osp->opd_obd;
- 	struct proc_dir_entry	*osc_proc_dir;
+-	struct proc_dir_entry	*osc_proc_dir;
++	struct proc_dir_entry	*symlink = NULL;
  	int			 rc;
  
 -	obd->obd_proc_entry = lprocfs_register(obd->obd_name,
@@ -541,7 +574,7 @@ index 22e3372..24f2f4c 100644
  					       obd->obd_type->typ_procroot,
  					       lprocfs_osp_osd_vars,
  					       &osp->opd_dt_dev);
-@@ -502,7 +496,7 @@ void osp_lprocfs_init(struct osp_device *osp)
+@@ -502,34 +528,30 @@ void osp_lprocfs_init(struct osp_device *osp)
  		return;
  	}
  
@@ -550,11 +583,14 @@ index 22e3372..24f2f4c 100644
  	if (rc) {
  		CERROR("%s: can't register in lprocfs: %ld\n",
  		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
-@@ -511,24 +505,47 @@ void osp_lprocfs_init(struct osp_device *osp)
+ 		return;
+ 	}
++	obd->obd_vars = lprocfs_osp_obd_vars;
  
  	ptlrpc_lprocfs_register_obd(obd);
  
-+	if (osp->opd_connect_mdt)
++	if (osp->opd_connect_mdt || obd->obd_type->typ_procsym == NULL ||
++	    !strstr(obd->obd_name, "osc"))
 +		return;
 +
  	/* for compatibility we link old procfs's OSC entries to osp ones */
@@ -573,52 +609,26 @@ index 22e3372..24f2f4c 100644
 -				symlink = lprocfs_add_symlink(name,
 -						osc_proc_dir, "../osp/%s",
 -						obd->obd_name);
-+	osc_proc_dir = obd->obd_proc_private;
-+	if (osc_proc_dir == NULL) {
-+		cfs_proc_dir_entry_t	*symlink = NULL;
-+		struct obd_type		*type;
-+		char			*name;
-+
-+		type = class_search_type(LUSTRE_OSC_NAME);
-+		if (type == NULL) {
-+			osc_proc_dir = lprocfs_seq_register("osc",
-+							proc_lustre_root,
-+							NULL, NULL);
-+			if (IS_ERR(osc_proc_dir))
-+				CERROR("osp: can't create compat entry \"osc\": %d\n",
-+					(int) PTR_ERR(osc_proc_dir));
-+		} else {
-+			osc_proc_dir = type->typ_procroot;
-+		}
-+
-+		OBD_ALLOC(name, strlen(obd->obd_name) + 1);
-+		if (name == NULL)
-+			return;
-+
-+		strcpy(name, obd->obd_name);
-+		if (strstr(name, "osc")) {
-+			symlink = lprocfs_add_symlink(name, osc_proc_dir,
-+							"../osp/%s",
-+							obd->obd_name);
- 			OBD_FREE(name, strlen(obd->obd_name) + 1);
+-			OBD_FREE(name, strlen(obd->obd_name) + 1);
 -			osp->opd_symlink = symlink;
-+			if (symlink == NULL) {
-+				CERROR("could not register OSC symlink for "
-+					"/proc/fs/lustre/osp/%s.",
-+					obd->obd_name);
-+				lprocfs_remove(&osc_proc_dir);
-+			} else {
-+				osp->opd_symlink = symlink;
-+				obd->obd_proc_private = osc_proc_dir;
-+			}
- 		}
+-		}
++	symlink = lprocfs_add_symlink(obd->obd_name, obd->obd_type->typ_procsym,
++				      "../osp/%s", obd->obd_name);
++	if (symlink == NULL) {
++		CERROR("could not register OSC symlink for "
++			"/proc/fs/lustre/osp/%s.", obd->obd_name);
++		lprocfs_remove(&obd->obd_type->typ_procsym);
++		obd->obd_type->typ_procsym = NULL;
++	} else {
++		osp->opd_symlink = symlink;
  	}
  }
+ 
 diff --git a/lustre/osp/lwp_dev.c b/lustre/osp/lwp_dev.c
-index fce82a2..755c096 100644
+index 9560504..d6ae965 100644
 --- a/lustre/osp/lwp_dev.c
 +++ b/lustre/osp/lwp_dev.c
-@@ -210,25 +210,13 @@ const struct lu_device_operations lwp_lu_ops = {
+@@ -186,25 +186,13 @@ const struct lu_device_operations lwp_lu_ops = {
  	.ldo_process_config	= lwp_process_config,
  };
  
@@ -645,7 +655,7 @@ index fce82a2..755c096 100644
  	int			   rc;
  	ENTRY;
  
-@@ -257,8 +245,8 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
+@@ -233,8 +221,8 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
  		RETURN(rc);
  	}
  
@@ -657,7 +667,7 @@ index fce82a2..755c096 100644
  
  	RETURN(0);
 diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
-index 096de6a..780276d 100644
+index 5828d88..7d45fa1 100644
 --- a/lustre/osp/osp_dev.c
 +++ b/lustre/osp/osp_dev.c
 @@ -371,7 +371,7 @@ static int osp_process_config(const struct lu_env *env,
@@ -684,23 +694,24 @@ index 096de6a..780276d 100644
  		if (rc > 0)
  			rc = 0;
  		if (rc == -ENOSYS) {
-@@ -837,6 +835,9 @@ static struct lu_device *osp_device_fini(const struct lu_env *env,
+@@ -842,6 +840,9 @@ static struct lu_device *osp_device_fini(const struct lu_env *env,
  			OBD_FREE_PTR(cli->cl_rpc_lock);
  			cli->cl_rpc_lock = NULL;
  		}
 +	} else {
-+		if (m->opd_obd->obd_proc_private != NULL)
-+			lprocfs_remove((struct proc_dir_entry **)&m->opd_obd->obd_proc_private);
++		if (m->opd_obd->obd_type->typ_procsym != NULL)
++			lprocfs_remove(&m->opd_obd->obd_type->typ_procsym);
  	}
  
  	rc = client_obd_cleanup(m->opd_obd);
-@@ -1188,33 +1189,25 @@ struct llog_operations osp_mds_ost_orig_logops;
+@@ -1220,33 +1221,26 @@ struct llog_operations osp_mds_ost_orig_logops;
  
  static int __init osp_mod_init(void)
  {
 -	struct lprocfs_static_vars	 lvars;
 -	cfs_proc_dir_entry_t		*osc_proc_dir;
 -	int				 rc;
++	struct obd_type *type;
 +	int rc;
  
  	rc = lu_kmem_init(osp_caches);
@@ -731,11 +742,10 @@ index 096de6a..780276d 100644
  #endif
  				LUSTRE_LWP_NAME, &lwp_device_type);
  	if (rc != 0) {
-@@ -1227,22 +1220,11 @@ static int __init osp_mod_init(void)
- 	osp_mds_ost_orig_logops = llog_osd_ops;
+@@ -1260,21 +1254,23 @@ static int __init osp_mod_init(void)
  	osp_mds_ost_orig_logops.lop_add = llog_cat_add_rec;
  	osp_mds_ost_orig_logops.lop_declare_add = llog_cat_declare_add_rec;
--
+ 
 -	osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
 -	if (osc_proc_dir == NULL) {
 -		osc_proc_dir = lprocfs_register("osc", proc_lustre_root, NULL,
@@ -743,7 +753,18 @@ index 096de6a..780276d 100644
 -		if (IS_ERR(osc_proc_dir))
 -			CERROR("osp: can't create compat entry \"osc\": %d\n",
 -			       (int) PTR_ERR(osc_proc_dir));
--	}
++	type = class_search_type(LUSTRE_OSC_NAME);
++	if (type)
++		return rc;
++
++	type = class_search_type(LUSTRE_OSP_NAME);
++	type->typ_procsym = lprocfs_seq_register("osc", proc_lustre_root,
++						 NULL, NULL);
++	if (IS_ERR(type->typ_procsym)) {
++		CERROR("osp: can't create compat entry \"osc\": %d\n",
++		       (int) PTR_ERR(type->typ_procsym));
++		type->typ_procsym = NULL;
+ 	}
  	return rc;
  }
  
@@ -755,18 +776,18 @@ index 096de6a..780276d 100644
  	class_unregister_type(LUSTRE_OSP_NAME);
  	lu_kmem_fini(osp_caches);
 diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
-index 92c7b72..fe8b57e 100644
+index 0871d8d..0cc608b 100644
 --- a/lustre/osp/osp_internal.h
 +++ b/lustre/osp/osp_internal.h
-@@ -415,7 +415,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
- 				 struct lu_fid *fid, int sync);
+@@ -433,7 +433,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
+ int osp_init_pre_fid(struct osp_device *osp);
  
  /* lproc_osp.c */
 -void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars);
  void osp_lprocfs_init(struct osp_device *osp);
  
  /* osp_sync.c */
-@@ -429,7 +428,6 @@ int osp_sync_fini(struct osp_device *d);
+@@ -447,7 +446,6 @@ int osp_sync_fini(struct osp_device *d);
  void __osp_sync_check_for_work(struct osp_device *d);
  
  /* lwp_dev.c */
@@ -775,5 +796,5 @@ index 92c7b72..fe8b57e 100644
  extern struct lu_device_type lwp_device_type;
  
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
deleted file mode 100644
index 0fee4ee..0000000
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
+++ /dev/null
@@ -1,409 +0,0 @@
-From 4169735b41f2452d884e24c92581af0c4fbf6121 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 09:32:29 -0500
-Subject: [PATCH 07/18] LU-3319 procfs: move lmv proc handling over to seq_file
-
-In order to support 3.10+ kernels for clients we adapt
-the lmv proc handling to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I34f58c3a484ee79b41b59d4a60f6a21726373152
----
- lustre/lmv/lmv_internal.h |   7 +--
- lustre/lmv/lmv_obd.c      | 138 ++++++++++++++++++++--------------------------
- lustre/lmv/lproc_lmv.c    |  78 ++++++++++----------------
- 3 files changed, 91 insertions(+), 132 deletions(-)
-
-diff --git a/lustre/lmv/lmv_internal.h b/lustre/lmv/lmv_internal.h
-index 15692c5..1d027d7 100644
---- a/lustre/lmv/lmv_internal.h
-+++ b/lustre/lmv/lmv_internal.h
-@@ -147,12 +147,7 @@ struct lmv_tgt_desc
- 		struct lu_fid *fid);
- /* lproc_lmv.c */
- #ifdef LPROCFS
--void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars);
--#else
--static inline void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars)
--{
--        memset(lvars, 0, sizeof(*lvars));
--}
-+extern struct lprocfs_seq_vars lprocfs_lmv_obd_vars[];
- #endif
- extern struct file_operations lmv_proc_target_fops;
- 
-diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
-index 56d6e20..888a86f 100644
---- a/lustre/lmv/lmv_obd.c
-+++ b/lustre/lmv/lmv_obd.c
-@@ -239,13 +239,19 @@ static int lmv_connect(const struct lu_env *env,
-                 lmv->conn_data = *data;
- 
- #ifdef __KERNEL__
--        lmv_proc_dir = lprocfs_register("target_obds", obd->obd_proc_entry,
--                                        NULL, NULL);
--        if (IS_ERR(lmv_proc_dir)) {
--                CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
--                       obd->obd_type->typ_name, obd->obd_name);
--                lmv_proc_dir = NULL;
--        }
-+	if (obd->obd_proc_private != NULL) {
-+		lmv_proc_dir = obd->obd_proc_private;
-+	} else {
-+		lmv_proc_dir = lprocfs_seq_register("target_obds",
-+						    obd->obd_proc_entry,
-+						    NULL, NULL);
-+		if (IS_ERR(lmv_proc_dir)) {
-+			CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
-+			       obd->obd_type->typ_name, obd->obd_name);
-+			lmv_proc_dir = NULL;
-+		}
-+		obd->obd_proc_private = lmv_proc_dir;
-+	}
- #endif
- 
-         /*
-@@ -258,12 +264,11 @@ static int lmv_connect(const struct lu_env *env,
-                 rc = lmv_check_connect(obd);
- 
- #ifdef __KERNEL__
--        if (rc) {
--                if (lmv_proc_dir)
--                        lprocfs_remove(&lmv_proc_dir);
--        }
-+	if (rc && lmv_proc_dir) {
-+		lprocfs_remove(&lmv_proc_dir);
-+		obd->obd_proc_private = NULL;
-+	}
- #endif
--
-         RETURN(rc);
- }
- 
-@@ -423,28 +428,28 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
-                 cfs_atomic_read(&obd->obd_refcount));
- 
- #ifdef __KERNEL__
--        lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds");
--        if (lmv_proc_dir) {
--                struct proc_dir_entry *mdc_symlink;
--
--                LASSERT(mdc_obd->obd_type != NULL);
--                LASSERT(mdc_obd->obd_type->typ_name != NULL);
--                mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
--                                                  lmv_proc_dir,
--                                                  "../../../%s/%s",
--                                                  mdc_obd->obd_type->typ_name,
--                                                  mdc_obd->obd_name);
--                if (mdc_symlink == NULL) {
--                        CERROR("Could not register LMV target "
--                               "/proc/fs/lustre/%s/%s/target_obds/%s.",
--                               obd->obd_type->typ_name, obd->obd_name,
--                               mdc_obd->obd_name);
--                        lprocfs_remove(&lmv_proc_dir);
--                        lmv_proc_dir = NULL;
--                }
--        }
-+	lmv_proc_dir = obd->obd_proc_private;
-+	if (lmv_proc_dir) {
-+		struct proc_dir_entry *mdc_symlink;
-+
-+		LASSERT(mdc_obd->obd_type != NULL);
-+		LASSERT(mdc_obd->obd_type->typ_name != NULL);
-+		mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
-+						  lmv_proc_dir,
-+						  "../../../%s/%s",
-+						  mdc_obd->obd_type->typ_name,
-+						  mdc_obd->obd_name);
-+		if (mdc_symlink == NULL) {
-+			CERROR("Could not register LMV target "
-+			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
-+			       obd->obd_type->typ_name, obd->obd_name,
-+			       mdc_obd->obd_name);
-+			lprocfs_remove(&lmv_proc_dir);
-+			obd->obd_proc_private = NULL;
-+		}
-+	}
- #endif
--        RETURN(0);
-+	RETURN(0);
- }
- 
- static void lmv_del_target(struct lmv_obd *lmv, int index)
-@@ -652,19 +657,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
-         }
- 
- #ifdef __KERNEL__
--        lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds");
--        if (lmv_proc_dir) {
--                struct proc_dir_entry *mdc_symlink;
--
--                mdc_symlink = lprocfs_srch(lmv_proc_dir, mdc_obd->obd_name);
--                if (mdc_symlink) {
--                        lprocfs_remove(&mdc_symlink);
--                } else {
--                        CERROR("/proc/fs/lustre/%s/%s/target_obds/%s missing\n",
--                               obd->obd_type->typ_name, obd->obd_name,
--                               mdc_obd->obd_name);
--                }
--        }
-+	lmv_proc_dir = obd->obd_proc_private;
-+	if (lmv_proc_dir)
-+		lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
- #endif
- 	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
- 	if (rc)
-@@ -691,9 +686,6 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
- static int lmv_disconnect(struct obd_export *exp)
- {
- 	struct obd_device	*obd = class_exp2obd(exp);
--#ifdef __KERNEL__
--	struct proc_dir_entry	*lmv_proc_dir;
--#endif
- 	struct lmv_obd		*lmv = &obd->u.lmv;
- 	int			 rc;
- 	__u32			 i;
-@@ -717,13 +709,11 @@ static int lmv_disconnect(struct obd_export *exp)
-         }
- 
- #ifdef __KERNEL__
--        lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds");
--        if (lmv_proc_dir) {
--                lprocfs_remove(&lmv_proc_dir);
--        } else {
--                CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
--                       obd->obd_type->typ_name, obd->obd_name);
--        }
-+	if (obd->obd_proc_private)
-+		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
-+	else
-+		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
-+		       obd->obd_type->typ_name, obd->obd_name);
- #endif
- 
- out_local:
-@@ -1383,11 +1373,10 @@ int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
- 
- static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- {
--        struct lmv_obd             *lmv = &obd->u.lmv;
--        struct lprocfs_static_vars  lvars;
--        struct lmv_desc            *desc;
--        int                         rc;
--        ENTRY;
-+	struct lmv_obd	*lmv = &obd->u.lmv;
-+	struct lmv_desc	*desc;
-+	int		rc;
-+	ENTRY;
- 
-         if (LUSTRE_CFG_BUFLEN(lcfg, 1) < 1) {
-                 CERROR("LMV setup requires a descriptor\n");
-@@ -1417,18 +1406,15 @@ static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
- 	spin_lock_init(&lmv->lmv_lock);
- 	mutex_init(&lmv->init_mutex);
- 
--	lprocfs_lmv_init_vars(&lvars);
--
--	lprocfs_obd_setup(obd, lvars.obd_vars);
--	lprocfs_alloc_md_stats(obd, 0);
- #ifdef LPROCFS
--	{
--		rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
--					0444, &lmv_proc_target_fops, obd);
--		if (rc)
--			CWARN("%s: error adding LMV target_obd file: rc = %d\n",
--			      obd->obd_name, rc);
--	}
-+	obd->obd_vars = lprocfs_lmv_obd_vars;
-+	lprocfs_seq_obd_setup(obd);
-+	lprocfs_alloc_md_stats(obd, 0);
-+	rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
-+				0444, &lmv_proc_target_fops, obd);
-+	if (rc)
-+		CWARN("%s: error adding LMV target_obd file: rc = %d\n",
-+		      obd->obd_name, rc);
- #endif
- 	rc = fld_client_init(&lmv->lmv_fld, obd->obd_name,
- 			     LUSTRE_CLI_FLD_HASH_DHT);
-@@ -2477,7 +2463,7 @@ int lmv_set_info_async(const struct lu_env *env, struct obd_export *exp,
-                        obd_count keylen, void *key, obd_count vallen,
-                        void *val, struct ptlrpc_request_set *set)
- {
--        struct lmv_tgt_desc    *tgt;
-+	struct lmv_tgt_desc    *tgt = NULL;
-         struct obd_device      *obd;
-         struct lmv_obd         *lmv;
-         int rc = 0;
-@@ -2982,13 +2968,9 @@ struct md_ops lmv_md_ops = {
- 
- int __init lmv_init(void)
- {
--        struct lprocfs_static_vars lvars;
--
--        lprocfs_lmv_init_vars(&lvars);
--
- 	return class_register_type(&lmv_obd_ops, &lmv_md_ops, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--					lvars.module_vars,
-+					NULL,
- #endif
- 					LUSTRE_LMV_NAME, NULL);
- }
-diff --git a/lustre/lmv/lproc_lmv.c b/lustre/lmv/lproc_lmv.c
-index 6a3b128..eea5927 100644
---- a/lustre/lmv/lproc_lmv.c
-+++ b/lustre/lmv/lproc_lmv.c
-@@ -46,18 +46,16 @@
- static struct lprocfs_vars lprocfs_module_vars[] = { {0} };
- static struct lprocfs_vars lprocfs_obd_vars[] = { {0} };
- #else
--static int lmv_rd_numobd(char *page, char **start, off_t off, int count,
--                         int *eof, void *data)
-+static int lmv_numobd_seq_show(struct seq_file *m, void *v)
- {
--        struct obd_device       *dev = (struct obd_device*)data;
-+	struct obd_device	*dev = (struct obd_device *)m->private;
-         struct lmv_desc         *desc;
- 
-         LASSERT(dev != NULL);
-         desc = &dev->u.lmv.desc;
--        *eof = 1;
--        return snprintf(page, count, "%u\n", desc->ld_tgt_count);
--
-+	return seq_printf(m, "%u\n", desc->ld_tgt_count);
- }
-+LPROC_SEQ_FOPS_RO(lmv_numobd);
- 
- static const char *placement_name[] = {
-         [PLACEMENT_CHAR_POLICY] = "CHAR",
-@@ -82,26 +80,22 @@ static const char *placement_policy2name(placement_policy_t placement)
-         return placement_name[placement];
- }
- 
--static int lmv_rd_placement(char *page, char **start, off_t off, int count,
--                            int *eof, void *data)
-+static int lmv_placement_seq_show(struct seq_file *m, void *v)
- {
--        struct obd_device       *dev = (struct obd_device*)data;
-+	struct obd_device	*dev = (struct obd_device *)m->private;
-         struct lmv_obd          *lmv;
- 
-         LASSERT(dev != NULL);
-         lmv = &dev->u.lmv;
--        *eof = 1;
--        return snprintf(page, count, "%s\n",
--                        placement_policy2name(lmv->lmv_placement));
--
-+	return seq_printf(m, "%s\n", placement_policy2name(lmv->lmv_placement));
- }
- 
- #define MAX_POLICY_STRING_SIZE 64
- 
--static int lmv_wr_placement(struct file *file, const char *buffer,
--                            unsigned long count, void *data)
-+static ssize_t lmv_placement_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--        struct obd_device       *dev = (struct obd_device *)data;
-+	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
-         char                     dummy[MAX_POLICY_STRING_SIZE + 1];
-         int                      len = count;
-         placement_policy_t       policy;
-@@ -131,30 +125,29 @@ static int lmv_wr_placement(struct file *file, const char *buffer,
-         }
-         return count;
- }
-+LPROC_SEQ_FOPS(lmv_placement);
- 
--static int lmv_rd_activeobd(char *page, char **start, off_t off, int count,
--                            int *eof, void *data)
-+static int lmv_activeobd_seq_show(struct seq_file *m, void *v)
- {
--        struct obd_device       *dev = (struct obd_device*)data;
-+	struct obd_device	*dev = (struct obd_device *)m->private;
-         struct lmv_desc         *desc;
- 
-         LASSERT(dev != NULL);
-         desc = &dev->u.lmv.desc;
--        *eof = 1;
--        return snprintf(page, count, "%u\n", desc->ld_active_tgt_count);
-+	return seq_printf(m, "%u\n", desc->ld_active_tgt_count);
- }
-+LPROC_SEQ_FOPS_RO(lmv_activeobd);
- 
--static int lmv_rd_desc_uuid(char *page, char **start, off_t off, int count,
--                            int *eof, void *data)
-+static int lmv_desc_uuid_seq_show(struct seq_file *m, void *v)
- {
--        struct obd_device       *dev = (struct obd_device*) data;
-+	struct obd_device	*dev = (struct obd_device*)m->private;
-         struct lmv_obd          *lmv;
- 
-         LASSERT(dev != NULL);
-         lmv = &dev->u.lmv;
--        *eof = 1;
--        return snprintf(page, count, "%s\n", lmv->desc.ld_uuid.uuid);
-+	return seq_printf(m, "%s\n", lmv->desc.ld_uuid.uuid);
- }
-+LPROC_SEQ_FOPS_RO(lmv_desc_uuid);
- 
- static void *lmv_tgt_seq_start(struct seq_file *p, loff_t *pos)
- {
-@@ -195,7 +188,6 @@ struct seq_operations lmv_tgt_sops = {
- 
- static int lmv_target_seq_open(struct inode *inode, struct file *file)
- {
--        struct proc_dir_entry   *dp = PDE(inode);
-         struct seq_file         *seq;
-         int                     rc;
- 
-@@ -203,24 +195,20 @@ static int lmv_target_seq_open(struct inode *inode, struct file *file)
-         if (rc)
-                 return rc;
- 
--        seq = file->private_data;
--        seq->private = dp->data;
--
--        return 0;
-+	seq = file->private_data;
-+	seq->private = PDE_DATA(inode);
-+	return 0;
- }
- 
--struct lprocfs_vars lprocfs_lmv_obd_vars[] = {
--        { "numobd",             lmv_rd_numobd,          0, 0 },
--        { "placement",          lmv_rd_placement,       lmv_wr_placement, 0 },
--        { "activeobd",          lmv_rd_activeobd,       0, 0 },
--        { "uuid",               lprocfs_rd_uuid,        0, 0 },
--        { "desc_uuid",          lmv_rd_desc_uuid,       0, 0 },
--        { 0 }
--};
-+LPROC_SEQ_FOPS_RO_TYPE(lmv, uuid);
- 
--static struct lprocfs_vars lprocfs_lmv_module_vars[] = {
--        { "num_refs",           lprocfs_rd_numrefs,     0, 0 },
--        { 0 }
-+struct lprocfs_seq_vars lprocfs_lmv_obd_vars[] = {
-+	{ "numobd",	&lmv_numobd_fops	},
-+	{ "placement",	&lmv_placement_fops	},
-+	{ "activeobd",	&lmv_activeobd_fops	},
-+	{ "uuid",	&lmv_uuid_fops		},
-+	{ "desc_uuid",	&lmv_desc_uuid_fops	},
-+	{ 0 }
- };
- 
- struct file_operations lmv_proc_target_fops = {
-@@ -230,10 +218,4 @@ struct file_operations lmv_proc_target_fops = {
-         .llseek               = seq_lseek,
-         .release              = seq_release,
- };
--
- #endif /* LPROCFS */
--void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars)
--{
--        lvars->module_vars    = lprocfs_lmv_module_vars;
--        lvars->obd_vars       = lprocfs_lmv_obd_vars;
--}
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
similarity index 86%
rename from sys-cluster/lustre/files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
rename to sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
index 4bbea03..3aad32c 100644
--- a/sys-cluster/lustre/files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -1,7 +1,7 @@
-From eb1406399522d52e51c3dd7e8a73813c0179d12a Mon Sep 17 00:00:00 2001
+From 9260e5e777af25ebc1a94113ede31667c5f10e97 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 19:20:50 -0500
-Subject: [PATCH 14/18] LU-3319 procfs: move lod proc handling to seq_files
+Date: Fri, 31 Jan 2014 12:46:28 -0500
+Subject: [PATCH 07/13] LU-3319 procfs: move lod proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the lod
@@ -10,14 +10,14 @@ layer proc entries over to using seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
 ---
- lustre/lod/lod_dev.c      |  28 +----
+ lustre/lod/lod_dev.c      |  39 ++++---
  lustre/lod/lod_internal.h |   1 -
  lustre/lod/lod_pool.c     |   7 +-
- lustre/lod/lproc_lod.c    | 255 ++++++++++++++++++++++++----------------------
- 4 files changed, 143 insertions(+), 148 deletions(-)
+ lustre/lod/lproc_lod.c    | 252 ++++++++++++++++++++++++----------------------
+ 4 files changed, 153 insertions(+), 146 deletions(-)
 
 diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
-index e36aee1..8a0be26 100644
+index 02a1e1e..b0ad1fd 100644
 --- a/lustre/lod/lod_dev.c
 +++ b/lustre/lod/lod_dev.c
 @@ -297,12 +297,10 @@ static int lod_process_config(const struct lu_env *env,
@@ -36,13 +36,15 @@ index e36aee1..8a0be26 100644
  		if (rc > 0)
  			rc = 0;
  		GOTO(out, rc);
-@@ -916,44 +914,26 @@ static struct obd_ops lod_obd_device_ops = {
+@@ -916,19 +914,16 @@ static struct obd_ops lod_obd_device_ops = {
  
  static int __init lod_mod_init(void)
  {
 -	struct lprocfs_static_vars  lvars = { 0 };
 -	cfs_proc_dir_entry_t       *lov_proc_dir;
- 	int			    rc;
+-	int			    rc;
++	struct obd_type *lod, *lov;
++	int rc;
  
  	rc = lu_kmem_init(lod_caches);
  	if (rc)
@@ -57,19 +59,30 @@ index e36aee1..8a0be26 100644
  #endif
  				LUSTRE_LOD_NAME, &lod_device_type);
  	if (rc) {
- 		lu_kmem_fini(lod_caches);
- 		return rc;
+@@ -937,23 +932,25 @@ static int __init lod_mod_init(void)
  	}
--
--	/* create "lov" entry in procfs for compatibility purposes */
+ 
+ 	/* create "lov" entry in procfs for compatibility purposes */
 -	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
 -	if (lov_proc_dir == NULL) {
 -		lov_proc_dir = lprocfs_register("lov", proc_lustre_root,
 -						NULL, NULL);
 -		if (IS_ERR(lov_proc_dir))
--			CERROR("lod: can't create compat entry \"lov\": %d\n",
++	lod = class_search_type(LUSTRE_LOD_NAME);
++	lov = class_search_type(LUSTRE_LOV_NAME);
++	if (lov == NULL) {
++		lod->typ_procsym = lprocfs_seq_register("lov", proc_lustre_root,
++							NULL, NULL);
++		if (IS_ERR(lod->typ_procsym)) {
+ 			CERROR("lod: can't create compat entry \"lov\": %d\n",
 -			       (int)PTR_ERR(lov_proc_dir));
--	}
++			       (int)PTR_ERR(lod->typ_procsym));
++			lod->typ_procsym = NULL;
++		}
++	} else {
++		/* Map lov proc root to lod symlink */
++		lod->typ_procsym = lov->typ_procroot;
+ 	}
 -
  	return rc;
  }
@@ -83,10 +96,10 @@ index e36aee1..8a0be26 100644
  	lu_kmem_fini(lod_caches);
  }
 diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h
-index 0dd077b..bb6fbfb 100644
+index 6d99ad5..9299a91 100644
 --- a/lustre/lod/lod_internal.h
 +++ b/lustre/lod/lod_internal.h
-@@ -317,7 +317,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
+@@ -376,7 +376,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
  int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *);
  
  /* lproc_lod.c */
@@ -95,7 +108,7 @@ index 0dd077b..bb6fbfb 100644
  void lod_procfs_fini(struct lod_device *lod);
  
 diff --git a/lustre/lod/lod_pool.c b/lustre/lod/lod_pool.c
-index e33ae4d..77d04a7 100644
+index 98b2416..1849e5d 100644
 --- a/lustre/lod/lod_pool.c
 +++ b/lustre/lod/lod_pool.c
 @@ -283,7 +283,7 @@ static int pool_proc_open(struct inode *inode, struct file *file)
@@ -120,7 +133,7 @@ index e33ae4d..77d04a7 100644
  						       &pool_proc_operations);
  	if (IS_ERR(new_pool->pool_proc_entry)) {
 diff --git a/lustre/lod/lproc_lod.c b/lustre/lod/lproc_lod.c
-index e976063..b0d4e17 100644
+index e976063..6e20b36 100644
 --- a/lustre/lod/lproc_lod.c
 +++ b/lustre/lod/lproc_lod.c
 @@ -42,23 +42,22 @@
@@ -408,7 +421,7 @@ index e976063..b0d4e17 100644
  
  static void *lod_osts_seq_start(struct seq_file *p, loff_t *pos)
  {
-@@ -414,56 +409,52 @@ static const struct seq_operations lod_osts_sops = {
+@@ -414,56 +409,63 @@ static const struct seq_operations lod_osts_sops = {
  
  static int lod_osts_seq_open(struct inode *inode, struct file *file)
  {
@@ -439,16 +452,6 @@ index e976063..b0d4e17 100644
 -	{ "qos_prio_free",lod_rd_qos_priofree,    lod_wr_qos_priofree, 0 },
 -	{ "qos_threshold_rr",  lod_rd_qos_thresholdrr, lod_wr_qos_thresholdrr, 0 },
 -	{ "qos_maxage",   lod_rd_qos_maxage,      lod_wr_qos_maxage, 0 },
--	{ 0 }
--};
--
--static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
--	{ "blocksize",    lprocfs_dt_rd_blksize, 0, 0 },
--	{ "kbytestotal",  lprocfs_dt_rd_kbytestotal, 0, 0 },
--	{ "kbytesfree",   lprocfs_dt_rd_kbytesfree, 0, 0 },
--	{ "kbytesavail",  lprocfs_dt_rd_kbytesavail, 0, 0 },
--	{ "filestotal",   lprocfs_dt_rd_filestotal, 0, 0 },
--	{ "filesfree",    lprocfs_dt_rd_filesfree, 0, 0 },
 +LPROC_SEQ_FOPS_RO_TYPE(lod, uuid);
 +
 +LPROC_SEQ_FOPS_RO_TYPE(lod, dt_blksize);
@@ -459,22 +462,38 @@ index e976063..b0d4e17 100644
 +LPROC_SEQ_FOPS_RO_TYPE(lod, dt_filesfree);
 +
 +static struct lprocfs_seq_vars lprocfs_lod_obd_vars[] = {
-+	{ "uuid",		&lod_uuid_fops		},
-+	{ "stripesize",		&lod_stripesize_fops	},
-+	{ "stripeoffset",	&lod_stripeoffset_fops	},
-+	{ "stripecount",	&lod_stripecount_fops	},
-+	{ "stripetype",		&lod_stripetype_fops	},
-+	{ "numobd",		&lod_numobd_fops	},
-+	{ "activeobd",		&lod_activeobd_fops	},
-+	{ "desc_uuid",		&lod_desc_uuid_fops	},
-+	{ "qos_prio_free",	&lod_qos_priofree_fops	},
-+	{ "qos_threshold_rr",	&lod_qos_thresholdrr_fops },
-+	{ "qos_maxage",		&lod_qos_maxage_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&lod_uuid_fops		},
++	{ .name	=	"stripesize",
++	  .fops	=	&lod_stripesize_fops	},
++	{ .name	=	"stripeoffset",
++	  .fops	=	&lod_stripeoffset_fops	},
++	{ .name	=	"stripecount",
++	  .fops	=	&lod_stripecount_fops	},
++	{ .name	=	"stripetype",
++	  .fops	=	&lod_stripetype_fops	},
++	{ .name	=	"numobd",
++	  .fops	=	&lod_numobd_fops	},
++	{ .name	=	"activeobd",
++	  .fops	=	&lod_activeobd_fops	},
++	{ .name	=	"desc_uuid",
++	  .fops	=	&lod_desc_uuid_fops	},
++	{ .name	=	"qos_prio_free",
++	  .fops	=	&lod_qos_priofree_fops	},
++	{ .name	=	"qos_threshold_rr",
++	  .fops	=	&lod_qos_thresholdrr_fops },
++	{ .name	=	"qos_maxage",
++	  .fops	=	&lod_qos_maxage_fops	},
  	{ 0 }
  };
  
--static struct lprocfs_vars lprocfs_lod_module_vars[] = {
--	{ "num_refs",     lprocfs_rd_numrefs,     0, 0 },
+-static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
+-	{ "blocksize",    lprocfs_dt_rd_blksize, 0, 0 },
+-	{ "kbytestotal",  lprocfs_dt_rd_kbytestotal, 0, 0 },
+-	{ "kbytesfree",   lprocfs_dt_rd_kbytesfree, 0, 0 },
+-	{ "kbytesavail",  lprocfs_dt_rd_kbytesavail, 0, 0 },
+-	{ "filestotal",   lprocfs_dt_rd_filestotal, 0, 0 },
+-	{ "filesfree",    lprocfs_dt_rd_filesfree, 0, 0 },
 +static struct lprocfs_seq_vars lprocfs_lod_osd_vars[] = {
 +	{ "blocksize",		&lod_dt_blksize_fops		},
 +	{ "kbytestotal",	&lod_dt_kbytestotal_fops	},
@@ -485,6 +504,11 @@ index e976063..b0d4e17 100644
  	{ 0 }
  };
  
+-static struct lprocfs_vars lprocfs_lod_module_vars[] = {
+-	{ "num_refs",     lprocfs_rd_numrefs,     0, 0 },
+-	{ 0 }
+-};
+-
 -void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars)
 -{
 -	lvars->module_vars	= lprocfs_lod_module_vars;
@@ -494,12 +518,12 @@ index e976063..b0d4e17 100644
  static const struct file_operations lod_proc_target_fops = {
  	.owner   = THIS_MODULE,
  	.open    = lod_osts_seq_open,
-@@ -475,20 +466,19 @@ static const struct file_operations lod_proc_target_fops = {
+@@ -475,20 +477,18 @@ static const struct file_operations lod_proc_target_fops = {
  int lod_procfs_init(struct lod_device *lod)
  {
  	struct obd_device *obd = lod2obd(lod);
 -	struct lprocfs_static_vars lvars;
- 	cfs_proc_dir_entry_t *lov_proc_dir;
+-	cfs_proc_dir_entry_t *lov_proc_dir;
  	int rc;
  
 -	lprocfs_lod_init_vars(&lvars);
@@ -519,7 +543,7 @@ index e976063..b0d4e17 100644
  	if (rc) {
  		CERROR("%s: cannot setup procfs entry: %d\n",
  		       obd->obd_name, rc);
-@@ -503,9 +493,9 @@ int lod_procfs_init(struct lod_device *lod)
+@@ -503,9 +503,9 @@ int lod_procfs_init(struct lod_device *lod)
  		GOTO(out, rc);
  	}
  
@@ -532,58 +556,43 @@ index e976063..b0d4e17 100644
  	if (IS_ERR(lod->lod_pool_proc_entry)) {
  		rc = PTR_ERR(lod->lod_pool_proc_entry);
  		lod->lod_pool_proc_entry = NULL;
-@@ -514,14 +504,34 @@ int lod_procfs_init(struct lod_device *lod)
+@@ -514,14 +514,19 @@ int lod_procfs_init(struct lod_device *lod)
  		GOTO(out, rc);
  	}
  
 -	/* for compatibility we link old procfs's OSC entries to osp ones */
 -	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
 -	if (lov_proc_dir != NULL && strstr(obd->obd_name, "lov") != NULL)
--		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
++	/* for compatibility we link old procfs's LOV entries to lod ones */
++	if (obd->obd_type->typ_procsym != NULL) {
+ 		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
 -						       lov_proc_dir,
 -						       "../lod/%s",
 -						       obd->obd_name);
-+	/* for compatibility we link old procfs's LOV entries to lod ones */
-+	lov_proc_dir = obd->obd_proc_private;
-+	if (lov_proc_dir == NULL) {
-+		struct obd_type *type = class_search_type(LUSTRE_LOV_NAME);
-+
-+		/* create "lov" entry in procfs for compatibility purposes */
-+		if (type == NULL) {
-+			lov_proc_dir = lprocfs_seq_register("lov",
-+							    proc_lustre_root,
-+							    NULL, NULL);
-+			if (IS_ERR(lov_proc_dir))
-+				CERROR("lod: can't create compat entry \"lov\""
-+					": %d\n",(int)PTR_ERR(lov_proc_dir));
-+		} else {
-+			lov_proc_dir = type->typ_procroot;
-+		}
- 
-+		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
-+							lov_proc_dir,
+-
++							obd->obd_type->typ_procsym,
 +							"../lod/%s",
 +							obd->obd_name);
 +		if (lod->lod_symlink == NULL) {
 +			CERROR("could not register LOV symlink for "
 +				"/proc/fs/lustre/lod/%s.", obd->obd_name);
-+			lprocfs_remove(&lov_proc_dir);
-+		} else
-+			obd->obd_proc_private = lov_proc_dir;
++			lprocfs_remove(&obd->obd_type->typ_procsym);
++			obd->obd_type->typ_procsym = NULL;
++		}
 +	}
  	RETURN(0);
  
  out:
-@@ -542,6 +552,9 @@ void lod_procfs_fini(struct lod_device *lod)
+@@ -542,6 +547,9 @@ void lod_procfs_fini(struct lod_device *lod)
  		lod->lod_pool_proc_entry = NULL;
  	}
  
-+	if (obd->obd_proc_private != NULL)
-+		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
++	if (obd->obd_type->typ_procsym != NULL)
++		lprocfs_remove(&obd->obd_type->typ_procsym);
 +
  	lprocfs_obd_cleanup(obd);
  }
  
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
deleted file mode 100644
index d3768d5..0000000
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
+++ /dev/null
@@ -1,789 +0,0 @@
-From a464fd862a7876e1c4f679b32956904eee88d45e Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 17 Dec 2013 19:11:15 -0500
-Subject: [PATCH 08/18] LU-3319 procfs: move ldlm proc handling over to
- seq_file
-
-In order to support 3.10+ kernels for clients we adapt
-the ldlm proc handling to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Iaedae5fe1e1cd2985a6240314810db9bba3cd747
----
- lustre/include/lustre_dlm.h |   5 +-
- lustre/ldlm/ldlm_internal.h |  85 ++++++------
- lustre/ldlm/ldlm_pool.c     | 197 +++++++++++++---------------
- lustre/ldlm/ldlm_resource.c | 306 +++++++++++++++++++-------------------------
- 4 files changed, 270 insertions(+), 323 deletions(-)
-
-diff --git a/lustre/include/lustre_dlm.h b/lustre/include/lustre_dlm.h
-index 30b70b5..d01b7e9 100644
---- a/lustre/include/lustre_dlm.h
-+++ b/lustre/include/lustre_dlm.h
-@@ -243,7 +243,7 @@ struct ldlm_pool_ops {
-  */
- struct ldlm_pool {
- 	/** Pool proc directory. */
--	cfs_proc_dir_entry_t	*pl_proc_dir;
-+	struct proc_dir_entry	*pl_proc_dir;
- 	/** Pool name, must be long enough to hold compound proc entry name. */
- 	char			pl_name[100];
- 	/** Lock for protecting SLV/CLV updates. */
-@@ -400,6 +400,9 @@ struct ldlm_namespace {
- 	/** Client side original connect flags supported by server. */
- 	__u64			ns_orig_connect_flags;
- 
-+	/* namespace proc dir entry */
-+	struct proc_dir_entry	*ns_proc_dir_entry;
-+
- 	/**
- 	 * Position in global namespace list linking all namespaces on
- 	 * the node.
-diff --git a/lustre/ldlm/ldlm_internal.h b/lustre/ldlm/ldlm_internal.h
-index 5077072..ffc528b 100644
---- a/lustre/ldlm/ldlm_internal.h
-+++ b/lustre/ldlm/ldlm_internal.h
-@@ -212,8 +212,8 @@ void ldlm_destroy_flock_export(struct obd_export *exp);
- void l_check_ns_lock(struct ldlm_namespace *ns);
- void l_check_no_ns_lock(struct ldlm_namespace *ns);
- 
--extern cfs_proc_dir_entry_t *ldlm_svc_proc_dir;
--extern cfs_proc_dir_entry_t *ldlm_type_proc_dir;
-+extern struct proc_dir_entry *ldlm_svc_proc_dir;
-+extern struct proc_dir_entry *ldlm_type_proc_dir;
- 
- struct ldlm_state {
-         struct ptlrpc_service *ldlm_cb_service;
-@@ -252,42 +252,51 @@ enum ldlm_policy_res {
- 
- typedef enum ldlm_policy_res ldlm_policy_res_t;
- 
--#define LDLM_POOL_PROC_READER(var, type)                                    \
--        static int lprocfs_rd_##var(char *page, char **start, off_t off,    \
--                                    int count, int *eof, void *data)        \
--        {                                                                   \
--                struct ldlm_pool *pl = data;                                \
--                type tmp;                                                   \
--                                                                            \
--		spin_lock(&pl->pl_lock);				    \
--		tmp = pl->pl_##var;					    \
--		spin_unlock(&pl->pl_lock);				    \
--                                                                            \
--                return lprocfs_rd_uint(page, start, off, count, eof, &tmp); \
--        }                                                                   \
--        struct __##var##__dummy_read {;} /* semicolon catcher */
--
--#define LDLM_POOL_PROC_WRITER(var, type)                                    \
--        int lprocfs_wr_##var(struct file *file, const char *buffer,         \
--                             unsigned long count, void *data)               \
--        {                                                                   \
--                struct ldlm_pool *pl = data;                                \
--                type tmp;                                                   \
--                int rc;                                                     \
--                                                                            \
--                rc = lprocfs_wr_uint(file, buffer, count, &tmp);            \
--                if (rc < 0) {                                               \
--                        CERROR("Can't parse user input, rc = %d\n", rc);    \
--                        return rc;                                          \
--                }                                                           \
--                                                                            \
--		spin_lock(&pl->pl_lock);				    \
--		pl->pl_##var = tmp;					    \
--		spin_unlock(&pl->pl_lock);				    \
--                                                                            \
--                return rc;                                                  \
--        }                                                                   \
--        struct __##var##__dummy_write {;} /* semicolon catcher */
-+#define LDLM_POOL_PROC_READER_SEQ_SHOW(var, type)			\
-+	static int lprocfs_##var##_seq_show(struct seq_file *m, void *v)\
-+	{								\
-+		struct ldlm_pool *pl = m->private;			\
-+		type tmp;						\
-+									\
-+		spin_lock(&pl->pl_lock);				\
-+		tmp = pl->pl_##var;					\
-+		spin_unlock(&pl->pl_lock);				\
-+									\
-+		return lprocfs_uint_seq_show(m, &tmp);			\
-+	}								\
-+	struct __##var##__dummy_read {;} /* semicolon catcher */
-+
-+#define LDLM_POOL_PROC_WRITER(var, type)				\
-+	int lprocfs_wr_##var(struct file *file, const char *buffer,	\
-+			     unsigned long count, void *data)		\
-+	{								\
-+		struct ldlm_pool *pl = data;				\
-+		type tmp;						\
-+		int rc;							\
-+									\
-+		rc = lprocfs_wr_uint(file, buffer, count, &tmp);	\
-+		if (rc < 0) {						\
-+			CERROR("Can't parse user input, rc = %d\n", rc);\
-+			return rc;					\
-+		}							\
-+									\
-+		spin_lock(&pl->pl_lock);				\
-+		pl->pl_##var = tmp;					\
-+		spin_unlock(&pl->pl_lock);				\
-+									\
-+		return rc;						\
-+	}								\
-+	struct __##var##__dummy_write {;} /* semicolon catcher */
-+
-+static inline void
-+ldlm_add_var(struct lprocfs_seq_vars *vars, struct proc_dir_entry *proc_dir,
-+	     const char *name, void *data, const struct file_operations *ops)
-+{
-+	snprintf((char *)vars->name, MAX_STRING_SIZE, "%s", name);
-+	vars->data = data;
-+	vars->fops = ops;
-+	lprocfs_seq_add_vars(proc_dir, vars, 0);
-+}
- 
- static inline int is_granted_or_cancelled(struct ldlm_lock *lock)
- {
-diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
-index 734b330..c1b7ac6 100644
---- a/lustre/ldlm/ldlm_pool.c
-+++ b/lustre/ldlm/ldlm_pool.c
-@@ -148,7 +148,7 @@
- #define LDLM_POOL_SLV_SHIFT (10)
- 
- #ifdef __KERNEL__
--extern cfs_proc_dir_entry_t *ldlm_ns_proc_dir;
-+extern struct proc_dir_entry *ldlm_ns_proc_dir;
- #endif
- 
- static inline __u64 dru(__u64 val, __u32 shift, int round_up)
-@@ -656,14 +656,13 @@ int ldlm_pool_setup(struct ldlm_pool *pl, int limit)
- EXPORT_SYMBOL(ldlm_pool_setup);
- 
- #ifdef __KERNEL__
--static int lprocfs_rd_pool_state(char *page, char **start, off_t off,
--                                 int count, int *eof, void *data)
-+static int lprocfs_pool_state_seq_show(struct seq_file *m, void *unused)
- {
--        int granted, grant_rate, cancel_rate, grant_step;
--        int nr = 0, grant_speed, grant_plan, lvf;
--        struct ldlm_pool *pl = data;
--        __u64 slv, clv;
--        __u32 limit;
-+	int granted, grant_rate, cancel_rate, grant_step;
-+	int grant_speed, grant_plan, lvf;
-+	struct ldlm_pool *pl = m->private;
-+	__u64 slv, clv;
-+	__u32 limit;
- 
- 	spin_lock(&pl->pl_lock);
-         slv = pl->pl_server_lock_volume;
-@@ -678,35 +677,28 @@ static int lprocfs_rd_pool_state(char *page, char **start, off_t off,
-         grant_step = ldlm_pool_t2gsp(pl->pl_recalc_period);
- 	spin_unlock(&pl->pl_lock);
- 
--        nr += snprintf(page + nr, count - nr, "LDLM pool state (%s):\n",
--                       pl->pl_name);
--        nr += snprintf(page + nr, count - nr, "  SLV: "LPU64"\n", slv);
--        nr += snprintf(page + nr, count - nr, "  CLV: "LPU64"\n", clv);
--        nr += snprintf(page + nr, count - nr, "  LVF: %d\n", lvf);
--
--        if (ns_is_server(ldlm_pl2ns(pl))) {
--                nr += snprintf(page + nr, count - nr, "  GSP: %d%%\n",
--                               grant_step);
--                nr += snprintf(page + nr, count - nr, "  GP:  %d\n",
--                               grant_plan);
--        }
--        nr += snprintf(page + nr, count - nr, "  GR:  %d\n",
--                       grant_rate);
--        nr += snprintf(page + nr, count - nr, "  CR:  %d\n",
--                       cancel_rate);
--        nr += snprintf(page + nr, count - nr, "  GS:  %d\n",
--                       grant_speed);
--        nr += snprintf(page + nr, count - nr, "  G:   %d\n",
--                       granted);
--        nr += snprintf(page + nr, count - nr, "  L:   %d\n",
--                       limit);
--        return nr;
-+	seq_printf(m, "LDLM pool state (%s):\n"
-+		      "  SLV: "LPU64"\n"
-+		      "  CLV: "LPU64"\n"
-+		      "  LVF: %d\n",
-+		      pl->pl_name, slv, clv, lvf);
-+
-+	if (ns_is_server(ldlm_pl2ns(pl))) {
-+		seq_printf(m, "  GSP: %d%%\n"
-+			      "  GP:  %d\n",
-+			      grant_step, grant_plan);
-+	}
-+	seq_printf(m, "  GR:  %d\n" "  CR:  %d\n" "  GS:  %d\n"
-+		      "  G:   %d\n" "  L:   %d\n",
-+		      grant_rate, cancel_rate, grant_speed,
-+		      granted, limit);
-+	return 0;
- }
-+LPROC_SEQ_FOPS_RO(lprocfs_pool_state);
- 
--static int lprocfs_rd_grant_speed(char *page, char **start, off_t off,
--				  int count, int *eof, void *data)
-+static int lprocfs_grant_speed_seq_show(struct seq_file *m, void *unused)
- {
--	struct ldlm_pool *pl = data;
-+	struct ldlm_pool *pl = m->private;
- 	int               grant_speed;
- 
- 	spin_lock(&pl->pl_lock);
-@@ -714,35 +706,50 @@ static int lprocfs_rd_grant_speed(char *page, char **start, off_t off,
- 	grant_speed = cfs_atomic_read(&pl->pl_grant_rate) -
- 			cfs_atomic_read(&pl->pl_cancel_rate);
- 	spin_unlock(&pl->pl_lock);
--	return lprocfs_rd_uint(page, start, off, count, eof, &grant_speed);
-+	return lprocfs_uint_seq_show(m, &grant_speed);
- }
- 
--LDLM_POOL_PROC_READER(grant_plan, int);
--LDLM_POOL_PROC_READER(recalc_period, int);
-+LDLM_POOL_PROC_READER_SEQ_SHOW(grant_plan, int);
-+LPROC_SEQ_FOPS_RO(lprocfs_grant_plan);
-+
-+LDLM_POOL_PROC_READER_SEQ_SHOW(recalc_period, int);
- LDLM_POOL_PROC_WRITER(recalc_period, int);
-+static ssize_t lprocfs_recalc_period_seq_write(struct file *file, const char *buf,
-+					       size_t len, loff_t *off)
-+{
-+	struct seq_file *seq = file->private_data;
-+
-+	return lprocfs_wr_recalc_period(file, buf, len, seq->private);
-+}
-+LPROC_SEQ_FOPS(lprocfs_recalc_period);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(ldlm_pool, u64);
-+LPROC_SEQ_FOPS_RO_TYPE(ldlm_pool, atomic);
-+LPROC_SEQ_FOPS_RW_TYPE(ldlm_pool_rw, atomic);
-+
-+LPROC_SEQ_FOPS_RO(lprocfs_grant_speed);
- 
- static int ldlm_pool_proc_init(struct ldlm_pool *pl)
- {
--        struct ldlm_namespace *ns = ldlm_pl2ns(pl);
--        struct proc_dir_entry *parent_ns_proc;
--        struct lprocfs_vars pool_vars[2];
--        char *var_name = NULL;
--        int rc = 0;
--        ENTRY;
-+	struct ldlm_namespace *ns = ldlm_pl2ns(pl);
-+	struct proc_dir_entry *parent_ns_proc;
-+	struct lprocfs_seq_vars pool_vars[2];
-+	char *var_name = NULL;
-+	int rc = 0;
-+	ENTRY;
- 
--        OBD_ALLOC(var_name, MAX_STRING_SIZE + 1);
--        if (!var_name)
--                RETURN(-ENOMEM);
-+	OBD_ALLOC(var_name, MAX_STRING_SIZE + 1);
-+	if (!var_name)
-+		RETURN(-ENOMEM);
- 
--        parent_ns_proc = lprocfs_srch(ldlm_ns_proc_dir,
--                                      ldlm_ns_name(ns));
--        if (parent_ns_proc == NULL) {
--                CERROR("%s: proc entry is not initialized\n",
--                       ldlm_ns_name(ns));
--                GOTO(out_free_name, rc = -EINVAL);
--        }
--        pl->pl_proc_dir = lprocfs_register("pool", parent_ns_proc,
--                                           NULL, NULL);
-+	parent_ns_proc = ns->ns_proc_dir_entry;
-+	if (parent_ns_proc == NULL) {
-+		CERROR("%s: proc entry is not initialized\n",
-+		       ldlm_ns_name(ns));
-+		GOTO(out_free_name, rc = -EINVAL);
-+	}
-+	pl->pl_proc_dir = lprocfs_seq_register("pool", parent_ns_proc,
-+						NULL, NULL);
- 	if (IS_ERR(pl->pl_proc_dir)) {
- 		rc = PTR_ERR(pl->pl_proc_dir);
- 		pl->pl_proc_dir = NULL;
-@@ -751,62 +758,30 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl)
- 		GOTO(out_free_name, rc);
- 	}
- 
--        var_name[MAX_STRING_SIZE] = '\0';
--        memset(pool_vars, 0, sizeof(pool_vars));
--        pool_vars[0].name = var_name;
--
--        snprintf(var_name, MAX_STRING_SIZE, "server_lock_volume");
--        pool_vars[0].data = &pl->pl_server_lock_volume;
--        pool_vars[0].read_fptr = lprocfs_rd_u64;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "limit");
--        pool_vars[0].data = &pl->pl_limit;
--        pool_vars[0].read_fptr = lprocfs_rd_atomic;
--        pool_vars[0].write_fptr = lprocfs_wr_atomic;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "granted");
--        pool_vars[0].data = &pl->pl_granted;
--        pool_vars[0].read_fptr = lprocfs_rd_atomic;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "grant_speed");
--        pool_vars[0].data = pl;
--        pool_vars[0].read_fptr = lprocfs_rd_grant_speed;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "cancel_rate");
--        pool_vars[0].data = &pl->pl_cancel_rate;
--        pool_vars[0].read_fptr = lprocfs_rd_atomic;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "grant_rate");
--        pool_vars[0].data = &pl->pl_grant_rate;
--        pool_vars[0].read_fptr = lprocfs_rd_atomic;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "grant_plan");
--        pool_vars[0].data = pl;
--        pool_vars[0].read_fptr = lprocfs_rd_grant_plan;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "recalc_period");
--        pool_vars[0].data = pl;
--        pool_vars[0].read_fptr = lprocfs_rd_recalc_period;
--        pool_vars[0].write_fptr = lprocfs_wr_recalc_period;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "lock_volume_factor");
--        pool_vars[0].data = &pl->pl_lock_volume_factor;
--        pool_vars[0].read_fptr = lprocfs_rd_atomic;
--        pool_vars[0].write_fptr = lprocfs_wr_atomic;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
--
--        snprintf(var_name, MAX_STRING_SIZE, "state");
--        pool_vars[0].data = pl;
--        pool_vars[0].read_fptr = lprocfs_rd_pool_state;
--        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
-+	var_name[MAX_STRING_SIZE] = '\0';
-+	memset(pool_vars, 0, sizeof(pool_vars));
-+	pool_vars[0].name = var_name;
-+
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "server_lock_volume",
-+		     &pl->pl_server_lock_volume, &ldlm_pool_u64_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "limit", &pl->pl_limit,
-+		     &ldlm_pool_rw_atomic_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "granted",
-+		     &pl->pl_granted, &ldlm_pool_atomic_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "grant_speed", pl,
-+		     &lprocfs_grant_speed_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "cancel_rate",
-+		     &pl->pl_cancel_rate, &ldlm_pool_atomic_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "grant_rate",
-+		     &pl->pl_grant_rate, &ldlm_pool_atomic_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "grant_plan", pl,
-+		     &lprocfs_grant_plan_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "recalc_period",
-+		     pl, &lprocfs_recalc_period_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "lock_volume_factor",
-+		     &pl->pl_lock_volume_factor, &ldlm_pool_rw_atomic_fops);
-+	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "state", pl,
-+		     &lprocfs_pool_state_fops);
- 
-         pl->pl_stats = lprocfs_alloc_stats(LDLM_POOL_LAST_STAT -
-                                            LDLM_POOL_FIRST_STAT, 0);
-diff --git a/lustre/ldlm/ldlm_resource.c b/lustre/ldlm/ldlm_resource.c
-index e1b8787..e504cff 100644
---- a/lustre/ldlm/ldlm_resource.c
-+++ b/lustre/ldlm/ldlm_resource.c
-@@ -66,9 +66,9 @@ CFS_LIST_HEAD(ldlm_cli_active_namespace_list);
- /* Client namespaces that don't have any locks in them */
- CFS_LIST_HEAD(ldlm_cli_inactive_namespace_list);
- 
--cfs_proc_dir_entry_t *ldlm_type_proc_dir = NULL;
--cfs_proc_dir_entry_t *ldlm_ns_proc_dir = NULL;
--cfs_proc_dir_entry_t *ldlm_svc_proc_dir = NULL;
-+struct proc_dir_entry *ldlm_type_proc_dir = NULL;
-+struct proc_dir_entry *ldlm_ns_proc_dir = NULL;
-+struct proc_dir_entry *ldlm_svc_proc_dir = NULL;
- 
- extern unsigned int ldlm_cancel_unused_locks_before_replay;
- 
-@@ -77,57 +77,64 @@ extern unsigned int ldlm_cancel_unused_locks_before_replay;
- unsigned int ldlm_dump_granted_max = 256;
- 
- #ifdef LPROCFS
--static int ldlm_proc_dump_ns(struct file *file, const char *buffer,
--                             unsigned long count, void *data)
-+static ssize_t
-+lprocfs_dump_ns_seq_write(struct file *file, const char *buffer,
-+			  size_t count, loff_t *off)
- {
--        ldlm_dump_all_namespaces(LDLM_NAMESPACE_SERVER, D_DLMTRACE);
--        ldlm_dump_all_namespaces(LDLM_NAMESPACE_CLIENT, D_DLMTRACE);
--        RETURN(count);
-+	ldlm_dump_all_namespaces(LDLM_NAMESPACE_SERVER, D_DLMTRACE);
-+	ldlm_dump_all_namespaces(LDLM_NAMESPACE_CLIENT, D_DLMTRACE);
-+	RETURN(count);
- }
-+LPROC_SEQ_FOPS_WO_TYPE(ldlm, dump_ns);
-+
-+LPROC_SEQ_FOPS_RW_TYPE(ldlm_rw, uint);
-+LPROC_SEQ_FOPS_RO_TYPE(ldlm, uint);
- 
- int ldlm_proc_setup(void)
- {
--        int rc;
--        struct lprocfs_vars list[] = {
--                { "dump_namespaces", NULL, ldlm_proc_dump_ns, NULL },
--                { "dump_granted_max",
--                  lprocfs_rd_uint, lprocfs_wr_uint,
--                  &ldlm_dump_granted_max, NULL },
--                { "cancel_unused_locks_before_replay",
--                  lprocfs_rd_uint, lprocfs_wr_uint,
--                  &ldlm_cancel_unused_locks_before_replay, NULL },
--                { NULL }};
--        ENTRY;
--        LASSERT(ldlm_ns_proc_dir == NULL);
--
--        ldlm_type_proc_dir = lprocfs_register(OBD_LDLM_DEVICENAME,
--                                              proc_lustre_root,
--                                              NULL, NULL);
--        if (IS_ERR(ldlm_type_proc_dir)) {
--                CERROR("LProcFS failed in ldlm-init\n");
--                rc = PTR_ERR(ldlm_type_proc_dir);
--                GOTO(err, rc);
--        }
-+	int rc;
-+	struct lprocfs_seq_vars list[] = {
-+		{ .name	=	"dump_namespaces",
-+		  .fops	=	&ldlm_dump_ns_fops,
-+		  .proc_mode =	0222 },
-+		{ .name	=	"dump_granted_max",
-+		  .fops	=	&ldlm_rw_uint_fops,
-+		  .data	=	&ldlm_dump_granted_max },
-+		{ .name	=	"cancel_unused_locks_before_replay",
-+		  .fops	=	&ldlm_rw_uint_fops,
-+		  .data	=	&ldlm_cancel_unused_locks_before_replay },
-+		{ NULL }};
-+	ENTRY;
-+	LASSERT(ldlm_ns_proc_dir == NULL);
-+
-+	ldlm_type_proc_dir = lprocfs_seq_register(OBD_LDLM_DEVICENAME,
-+							proc_lustre_root,
-+							NULL, NULL);
-+	if (IS_ERR(ldlm_type_proc_dir)) {
-+		CERROR("LProcFS failed in ldlm-init\n");
-+		rc = PTR_ERR(ldlm_type_proc_dir);
-+		GOTO(err, rc);
-+	}
- 
--        ldlm_ns_proc_dir = lprocfs_register("namespaces",
--                                            ldlm_type_proc_dir,
--                                            NULL, NULL);
--        if (IS_ERR(ldlm_ns_proc_dir)) {
--                CERROR("LProcFS failed in ldlm-init\n");
--                rc = PTR_ERR(ldlm_ns_proc_dir);
--                GOTO(err_type, rc);
--        }
-+	ldlm_ns_proc_dir = lprocfs_seq_register("namespaces",
-+						ldlm_type_proc_dir,
-+						NULL, NULL);
-+	if (IS_ERR(ldlm_ns_proc_dir)) {
-+		CERROR("LProcFS failed in ldlm-init\n");
-+		rc = PTR_ERR(ldlm_ns_proc_dir);
-+		GOTO(err_type, rc);
-+	}
- 
--        ldlm_svc_proc_dir = lprocfs_register("services",
--                                            ldlm_type_proc_dir,
--                                            NULL, NULL);
--        if (IS_ERR(ldlm_svc_proc_dir)) {
--                CERROR("LProcFS failed in ldlm-init\n");
--                rc = PTR_ERR(ldlm_svc_proc_dir);
--                GOTO(err_ns, rc);
--        }
-+	ldlm_svc_proc_dir = lprocfs_seq_register("services",
-+						ldlm_type_proc_dir,
-+						NULL, NULL);
-+	if (IS_ERR(ldlm_svc_proc_dir)) {
-+		CERROR("LProcFS failed in ldlm-init\n");
-+		rc = PTR_ERR(ldlm_svc_proc_dir);
-+		GOTO(err_ns, rc);
-+	}
- 
--	rc = lprocfs_add_vars(ldlm_type_proc_dir, list, NULL);
-+	rc = lprocfs_seq_add_vars(ldlm_type_proc_dir, list, NULL);
- 	if (rc != 0) {
- 		CERROR("LProcFS failed in ldlm-init\n");
- 		GOTO(err_svc, rc);
-@@ -158,46 +165,45 @@ void ldlm_proc_cleanup(void)
-                 lprocfs_remove(&ldlm_type_proc_dir);
- }
- 
--static int lprocfs_rd_ns_resources(char *page, char **start, off_t off,
--                                   int count, int *eof, void *data)
-+static int lprocfs_ns_resources_seq_show(struct seq_file *m, void *v)
- {
--        struct ldlm_namespace *ns  = data;
--        __u64                  res = 0;
--        cfs_hash_bd_t          bd;
--        int                    i;
--
--        /* result is not strictly consistant */
--        cfs_hash_for_each_bucket(ns->ns_rs_hash, &bd, i)
--                res += cfs_hash_bd_count_get(&bd);
--        return lprocfs_rd_u64(page, start, off, count, eof, &res);
-+	struct ldlm_namespace	*ns  = m->private;
-+	__u64			res = 0;
-+	cfs_hash_bd_t		bd;
-+	int			i;
-+
-+	/* result is not strictly consistant */
-+	cfs_hash_for_each_bucket(ns->ns_rs_hash, &bd, i)
-+		res += cfs_hash_bd_count_get(&bd);
-+	return lprocfs_u64_seq_show(m, &res);
- }
-+LPROC_SEQ_FOPS_RO(lprocfs_ns_resources);
- 
--static int lprocfs_rd_ns_locks(char *page, char **start, off_t off,
--                               int count, int *eof, void *data)
-+static int lprocfs_ns_locks_seq_show(struct seq_file *m, void *v)
- {
--        struct ldlm_namespace *ns = data;
--        __u64                  locks;
-+	struct ldlm_namespace	*ns = m->private;
-+	__u64			locks;
- 
--        locks = lprocfs_stats_collector(ns->ns_stats, LDLM_NSS_LOCKS,
--                                        LPROCFS_FIELDS_FLAGS_SUM);
--        return lprocfs_rd_u64(page, start, off, count, eof, &locks);
-+	locks = lprocfs_stats_collector(ns->ns_stats, LDLM_NSS_LOCKS,
-+					LPROCFS_FIELDS_FLAGS_SUM);
-+	return lprocfs_u64_seq_show(m, &locks);
- }
-+LPROC_SEQ_FOPS_RO(lprocfs_ns_locks);
- 
--static int lprocfs_rd_lru_size(char *page, char **start, off_t off,
--                               int count, int *eof, void *data)
-+static int lprocfs_lru_size_seq_show(struct seq_file *m, void *v)
- {
--        struct ldlm_namespace *ns = data;
--        __u32 *nr = &ns->ns_max_unused;
-+	struct ldlm_namespace *ns = m->private;
-+	__u32 *nr = &ns->ns_max_unused;
- 
--        if (ns_connect_lru_resize(ns))
--                nr = &ns->ns_nr_unused;
--        return lprocfs_rd_uint(page, start, off, count, eof, nr);
-+	if (ns_connect_lru_resize(ns))
-+		nr = &ns->ns_nr_unused;
-+	return lprocfs_uint_seq_show(m, nr);
- }
- 
--static int lprocfs_wr_lru_size(struct file *file, const char *buffer,
--                               unsigned long count, void *data)
-+static ssize_t lprocfs_lru_size_seq_write(struct file *file, const char *buffer,
-+					  size_t count, loff_t *off)
- {
--        struct ldlm_namespace *ns = data;
-+	struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private;
-         char dummy[MAX_STRING_SIZE + 1], *end;
-         unsigned long tmp;
-         int lru_resize;
-@@ -280,20 +286,20 @@ static int lprocfs_wr_lru_size(struct file *file, const char *buffer,
- 
-         return count;
- }
-+LPROC_SEQ_FOPS(lprocfs_lru_size);
- 
--static int lprocfs_rd_elc(char *page, char **start, off_t off,
--			  int count, int *eof, void *data)
-+static int lprocfs_elc_seq_show(struct seq_file *m, void *v)
- {
--	struct ldlm_namespace *ns = data;
-+	struct ldlm_namespace *ns = m->private;
- 	unsigned int supp = ns_connect_cancelset(ns);
- 
--	return lprocfs_rd_uint(page, start, off, count, eof, &supp);
-+	return lprocfs_uint_seq_show(m, &supp);
- }
- 
--static int lprocfs_wr_elc(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+static ssize_t lprocfs_elc_seq_write(struct file *file, const char *buffer,
-+				     size_t count, loff_t *off)
- {
--	struct ldlm_namespace *ns = data;
-+	struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private;
- 	unsigned int supp = -1;
- 	int rc;
- 
-@@ -307,31 +313,38 @@ static int lprocfs_wr_elc(struct file *file, const char *buffer,
- 		ns->ns_connect_flags |= OBD_CONNECT_CANCELSET;
- 	return count;
- }
-+LPROC_SEQ_FOPS(lprocfs_elc);
- 
- void ldlm_namespace_proc_unregister(struct ldlm_namespace *ns)
- {
--        struct proc_dir_entry *dir;
--
--        dir = lprocfs_srch(ldlm_ns_proc_dir, ldlm_ns_name(ns));
--        if (dir == NULL) {
-+	if (ns->ns_proc_dir_entry == NULL)
-                 CERROR("dlm namespace %s has no procfs dir?\n",
-                        ldlm_ns_name(ns));
--        } else {
--                lprocfs_remove(&dir);
--        }
-+	else
-+		lprocfs_remove(&ns->ns_proc_dir_entry);
- 
--        if (ns->ns_stats != NULL)
--                lprocfs_free_stats(&ns->ns_stats);
-+	if (ns->ns_stats != NULL)
-+		lprocfs_free_stats(&ns->ns_stats);
- }
- 
- int ldlm_namespace_proc_register(struct ldlm_namespace *ns)
- {
--        struct lprocfs_vars lock_vars[2];
-+	struct lprocfs_seq_vars lock_vars[2];
-         char lock_name[MAX_STRING_SIZE + 1];
-+	struct proc_dir_entry *ns_pde;
- 
-         LASSERT(ns != NULL);
-         LASSERT(ns->ns_rs_hash != NULL);
- 
-+	if (ns->ns_proc_dir_entry != NULL) {
-+		ns_pde = ns->ns_proc_dir_entry;
-+	} else {
-+		ns_pde = proc_mkdir(ldlm_ns_name(ns), ldlm_ns_proc_dir);
-+		if (ns_pde == NULL)
-+			return -ENOMEM;
-+		ns->ns_proc_dir_entry = ns_pde;
-+	}
-+
-         ns->ns_stats = lprocfs_alloc_stats(LDLM_NSS_LAST, 0);
-         if (ns->ns_stats == NULL)
-                 return -ENOMEM;
-@@ -344,88 +357,35 @@ int ldlm_namespace_proc_register(struct ldlm_namespace *ns)
-         memset(lock_vars, 0, sizeof(lock_vars));
-         lock_vars[0].name = lock_name;
- 
--        snprintf(lock_name, MAX_STRING_SIZE, "%s/resource_count",
--                 ldlm_ns_name(ns));
--        lock_vars[0].data = ns;
--        lock_vars[0].read_fptr = lprocfs_rd_ns_resources;
--        lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--        snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_count",
--                 ldlm_ns_name(ns));
--        lock_vars[0].data = ns;
--        lock_vars[0].read_fptr = lprocfs_rd_ns_locks;
--        lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--        if (ns_is_client(ns)) {
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_unused_count",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_nr_unused;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_size",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = ns;
--                lock_vars[0].read_fptr = lprocfs_rd_lru_size;
--                lock_vars[0].write_fptr = lprocfs_wr_lru_size;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_max_age",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_max_age;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lock_vars[0].write_fptr = lprocfs_wr_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--		snprintf(lock_name, MAX_STRING_SIZE, "%s/early_lock_cancel",
--			 ldlm_ns_name(ns));
--		lock_vars[0].data = ns;
--		lock_vars[0].read_fptr = lprocfs_rd_elc;
--		lock_vars[0].write_fptr = lprocfs_wr_elc;
--		lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--        } else {
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/ctime_age_limit",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_ctime_age_limit;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lock_vars[0].write_fptr = lprocfs_wr_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_timeouts",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_timeouts;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/max_nolock_bytes",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_max_nolock_size;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lock_vars[0].write_fptr = lprocfs_wr_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/contention_seconds",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_contention_time;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lock_vars[0].write_fptr = lprocfs_wr_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/contended_locks",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_contended_locks;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lock_vars[0].write_fptr = lprocfs_wr_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--
--                snprintf(lock_name, MAX_STRING_SIZE, "%s/max_parallel_ast",
--                         ldlm_ns_name(ns));
--                lock_vars[0].data = &ns->ns_max_parallel_ast;
--                lock_vars[0].read_fptr = lprocfs_rd_uint;
--                lock_vars[0].write_fptr = lprocfs_wr_uint;
--                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
--        }
--        return 0;
-+	ldlm_add_var(&lock_vars[0], ns_pde, "resource_count", ns,
-+		     &lprocfs_ns_resources_fops);
-+	ldlm_add_var(&lock_vars[0], ns_pde, "lock_count", ns,
-+		     &lprocfs_ns_locks_fops);
-+
-+	if (ns_is_client(ns)) {
-+		ldlm_add_var(&lock_vars[0], ns_pde, "lock_unused_count",
-+			     &ns->ns_nr_unused, &ldlm_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "lru_size", ns,
-+			     &lprocfs_lru_size_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "lru_max_age",
-+			     &ns->ns_max_age, &ldlm_rw_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "early_lock_cancel",
-+			     ns, &lprocfs_elc_fops);
-+	} else {
-+		ldlm_add_var(&lock_vars[0], ns_pde, "ctime_age_limit",
-+			     &ns->ns_ctime_age_limit, &ldlm_rw_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "lock_timeouts",
-+			     &ns->ns_timeouts, &ldlm_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "max_nolock_bytes",
-+			     &ns->ns_max_nolock_size, &ldlm_rw_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "contention_seconds",
-+			     &ns->ns_contention_time, &ldlm_rw_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "contended_locks",
-+			     &ns->ns_contended_locks, &ldlm_rw_uint_fops);
-+		ldlm_add_var(&lock_vars[0], ns_pde, "max_parallel_ast",
-+			     &ns->ns_max_parallel_ast, &ldlm_rw_uint_fops);
-+	}
-+	return 0;
- }
- #undef MAX_STRING_SIZE
- #else /* LPROCFS */
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
similarity index 90%
rename from sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
rename to sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index 3bc1eb5..efaca78 100644
--- a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,7 +1,7 @@
-From 2110d1028da0bab44e1b3494ba4642155195a735 Mon Sep 17 00:00:00 2001
+From 44996aad332f6a30634b651c6e5fe92c01923090 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Mon, 2 Dec 2013 12:36:06 -0500
-Subject: [PATCH 16/18] LU-3319 procfs: move mdt/mds proc handling to seq_files
+Date: Fri, 31 Jan 2014 10:47:37 -0500
+Subject: [PATCH 08/13] LU-3319 procfs: move mdt/mds proc handling to seq_files
 
 With 3.10 linux kernel and above proc handling now only
 uses struct seq_files. This patch migrates the mdt/mds
@@ -9,20 +9,19 @@ layer proc entries over to using seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Icbafdcd2c2fe3959a51dda3f9c715b0ff8d95742
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- lustre/mdt/mdt_coordinator.c      | 246 +++++++---------
+ lustre/mdt/mdt_coordinator.c      | 259 +++++++--------
  lustre/mdt/mdt_handler.c          |  16 +-
  lustre/mdt/mdt_hsm_cdt_actions.c  |   5 +-
  lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
  lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
  lustre/mdt/mdt_internal.h         |  14 +-
- lustre/mdt/mdt_lproc.c            | 603 ++++++++++++++++++--------------------
+ lustre/mdt/mdt_lproc.c            | 639 ++++++++++++++++++--------------------
  lustre/mdt/mdt_mds.c              |  12 +-
- 8 files changed, 401 insertions(+), 505 deletions(-)
+ 8 files changed, 442 insertions(+), 513 deletions(-)
 
 diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
-index 3915e21..eb05bdf 100644
+index 037bcbd..9bbcbd4 100644
 --- a/lustre/mdt/mdt_coordinator.c
 +++ b/lustre/mdt/mdt_coordinator.c
 @@ -46,7 +46,7 @@
@@ -52,7 +51,7 @@ index 3915e21..eb05bdf 100644
  {
  	return lprocfs_mdt_hsm_vars;
  }
-@@ -1769,22 +1769,17 @@ static __u64 hsm_policy_str2bit(const char *name)
+@@ -1786,22 +1786,17 @@ static __u64 hsm_policy_str2bit(const char *name)
   * \param hexa [IN] print mask before bit names
   * \param buffer [OUT] string
   * \param count [IN] size of buffer
@@ -81,7 +80,7 @@ index 3915e21..eb05bdf 100644
  	for (i = 0; i < CDT_POLICY_SHIFT_COUNT; i++) {
  		bit = (1ULL << i);
  
-@@ -1793,48 +1788,34 @@ static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
+@@ -1810,48 +1805,34 @@ static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
  				break;
  		}
  		if (bit & mask)
@@ -141,7 +140,7 @@ index 3915e21..eb05bdf 100644
  	int			 rc;
  	ENTRY;
  
-@@ -1867,18 +1848,10 @@ static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
+@@ -1884,18 +1865,10 @@ static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
  
  		policy = hsm_policy_str2bit(token);
  		if (policy == 0) {
@@ -163,7 +162,7 @@ index 3915e21..eb05bdf 100644
  			GOTO(out, rc = -EINVAL);
  		}
  		switch (sign) {
-@@ -1917,25 +1890,24 @@ out:
+@@ -1934,25 +1907,24 @@ out:
  	OBD_FREE(buf, count + 1);
  	RETURN(rc);
  }
@@ -198,7 +197,7 @@ index 3915e21..eb05bdf 100644
  	struct coordinator	*cdt = &mdt->mdt_coordinator;		\
  	int			 val;					\
  	int			 rc;					\
-@@ -1949,7 +1921,7 @@ static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
+@@ -1966,7 +1938,7 @@ static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
  		RETURN(count);						\
  	}								\
  	RETURN(-EINVAL);						\
@@ -207,7 +206,7 @@ index 3915e21..eb05bdf 100644
  
  GENERATE_PROC_METHOD(cdt_loop_period)
  GENERATE_PROC_METHOD(cdt_grace_delay)
-@@ -1967,10 +1939,11 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
+@@ -1984,10 +1956,11 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
  #define CDT_PURGE_CMD    "purge"
  #define CDT_HELP_CMD     "help"
  
@@ -222,7 +221,7 @@ index 3915e21..eb05bdf 100644
  	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
  	struct coordinator	*cdt = &(mdt->mdt_coordinator);
  	int			 rc, usage = 0;
-@@ -2024,83 +1997,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+@@ -2041,83 +2014,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
  	RETURN(count);
  }
  
@@ -328,7 +327,7 @@ index 3915e21..eb05bdf 100644
  }
  
  static inline enum hsm_copytool_action
-@@ -2120,9 +2081,9 @@ hsm_copytool_name2action(const char *name)
+@@ -2137,9 +2098,9 @@ hsm_copytool_name2action(const char *name)
  		return -1;
  }
  
@@ -341,7 +340,7 @@ index 3915e21..eb05bdf 100644
  {
  	char *buf, *pos, *name;
  	size_t buf_size;
-@@ -2166,69 +2127,60 @@ out:
+@@ -2183,69 +2144,73 @@ out:
  	RETURN(rc);
  }
  
@@ -434,25 +433,38 @@ index 3915e21..eb05bdf 100644
 +LPROC_SEQ_FOPS(mdt_hsm_other_request_mask);
 +
 +static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[] = {
-+	{ "agents",		&mdt_hsm_agent_fops			},
-+	{ "actions",		&mdt_hsm_actions_fops, NULL,	0444	},
-+	{ "default_archive_id",	&mdt_hsm_cdt_default_archive_id_fops	},
-+	{ "grace_delay",	&mdt_hsm_cdt_grace_delay_fops		},
-+	{ "loop_period",	&mdt_hsm_cdt_loop_period_fops		},
-+	{ "max_requests",	&mdt_hsm_cdt_max_requests_fops		},
-+	{ "policy",		&mdt_hsm_policy_fops			},
-+	{ "active_request_timeout",&mdt_hsm_cdt_active_req_timeout_fops	},
-+	{ "active_requests",	&mdt_hsm_active_requests_fops		},
-+	{ "user_request_mask",	&mdt_hsm_user_request_mask_fops,	},
-+	{ "group_request_mask",	&mdt_hsm_group_request_mask_fops,	},
-+	{ "other_request_mask",	&mdt_hsm_other_request_mask_fops,	},
++	{ .name	=	"agents",
++	  .fops	=	&mdt_hsm_agent_fops			},
++	{ .name	=	"actions",
++	  .fops	=	&mdt_hsm_actions_fops,
++	  .proc_mode =	0444					},
++	{ .name	=	"default_archive_id",
++	  .fops	=	&mdt_hsm_cdt_default_archive_id_fops	},
++	{ .name	=	"grace_delay",
++	  .fops	=	&mdt_hsm_cdt_grace_delay_fops		},
++	{ .name	=	"loop_period",
++	  .fops	=	&mdt_hsm_cdt_loop_period_fops		},
++	{ .name	=	"max_requests",
++	  .fops	=	&mdt_hsm_cdt_max_requests_fops		},
++	{ .name	=	"policy",
++	  .fops	=	&mdt_hsm_policy_fops			},
++	{ .name	=	"active_request_timeout",
++	  .fops	=	&mdt_hsm_cdt_active_req_timeout_fops	},
++	{ .name	=	"active_requests",
++	  .fops	=	&mdt_hsm_active_requests_fops		},
++	{ .name	=	"user_request_mask",
++	  .fops	=	&mdt_hsm_user_request_mask_fops,	},
++	{ .name	=	"group_request_mask",
++	  .fops	=	&mdt_hsm_group_request_mask_fops,	},
++	{ .name	=	"other_request_mask",
++	  .fops	=	&mdt_hsm_other_request_mask_fops,	},
  	{ 0 }
  };
 diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 8daf7e1..9f7d4ba 100644
+index 4c386b1..273cb80 100644
 --- a/lustre/mdt/mdt_handler.c
 +++ b/lustre/mdt/mdt_handler.c
-@@ -4508,7 +4508,6 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4538,7 +4538,6 @@ static int mdt_process_config(const struct lu_env *env,
  
  	switch (cfg->lcfg_command) {
  	case LCFG_PARAM: {
@@ -460,7 +472,7 @@ index 8daf7e1..9f7d4ba 100644
  		struct obd_device	   *obd = d->ld_obd;
  
  		/* For interoperability */
-@@ -4543,14 +4542,13 @@ static int mdt_process_config(const struct lu_env *env,
+@@ -4573,14 +4572,13 @@ static int mdt_process_config(const struct lu_env *env,
  			}
  		}
  
@@ -480,7 +492,7 @@ index 8daf7e1..9f7d4ba 100644
  			if (rc > 0 || rc == -ENOSYS)
  				/* we don't understand; pass it on */
  				rc = next->ld_ops->ldo_process_config(env, next,
-@@ -5725,7 +5723,6 @@ static struct lu_device_type mdt_device_type = {
+@@ -5759,7 +5757,6 @@ static struct lu_device_type mdt_device_type = {
  
  static int __init mdt_mod_init(void)
  {
@@ -488,7 +500,7 @@ index 8daf7e1..9f7d4ba 100644
  	int rc;
  
  	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
-@@ -5740,10 +5737,9 @@ static int __init mdt_mod_init(void)
+@@ -5774,10 +5771,9 @@ static int __init mdt_mod_init(void)
  	if (rc)
  		GOTO(lu_fini, rc);
  
@@ -566,10 +578,10 @@ index 796cbea..7bbc771 100644
  	RETURN(rc);
  }
 diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
-index dd36201..43cf9eb 100644
+index d548988..e30d78d 100644
 --- a/lustre/mdt/mdt_internal.h
 +++ b/lustre/mdt/mdt_internal.h
-@@ -778,9 +778,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
+@@ -784,9 +784,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
  void mdt_thread_info_fini(struct mdt_thread_info *mti);
  struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
  
@@ -579,7 +591,7 @@ index dd36201..43cf9eb 100644
  int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
  		     const struct md_hsm *mh);
  
-@@ -913,13 +910,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
+@@ -919,13 +916,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
  int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
  
  /* coordinator control /proc interface */
@@ -597,7 +609,7 @@ index dd36201..43cf9eb 100644
  /* md_hsm helpers */
  struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
  				      const struct lu_fid *fid,
-@@ -1087,8 +1083,6 @@ enum {
+@@ -1065,8 +1061,6 @@ enum {
  };
  void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
  void mdt_stats_counter_init(struct lprocfs_stats *stats);
@@ -605,9 +617,9 @@ index dd36201..43cf9eb 100644
 -void lprocfs_mds_init_vars(struct lprocfs_static_vars *lvars);
  int mdt_procfs_init(struct mdt_device *mdt, const char *name);
  void mdt_procfs_fini(struct mdt_device *mdt);
- void mdt_rename_counter_tally(struct mdt_thread_info *info,
+ 
 diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c
-index 4abb532..236b6c2 100644
+index 0ee5148..658f00d 100644
 --- a/lustre/mdt/mdt_lproc.c
 +++ b/lustre/mdt/mdt_lproc.c
 @@ -156,7 +156,6 @@ static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
@@ -623,7 +635,8 @@ index 4abb532..236b6c2 100644
  }
  
 -int mdt_procfs_init(struct mdt_device *mdt, const char *name)
--{
++static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
+ {
 -	struct obd_device		*obd = mdt2obd_dev(mdt);
 -	struct lprocfs_static_vars	 lvars;
 -	int				 rc;
@@ -687,8 +700,7 @@ index 4abb532..236b6c2 100644
 -
 -static int lprocfs_rd_identity_expire(char *page, char **start, off_t off,
 -                                      int count, int *eof, void *data)
-+static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
- {
+-{
 -        struct obd_device *obd = data;
 -        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
 +	struct obd_device *obd = m->private;
@@ -838,6 +850,15 @@ index 4abb532..236b6c2 100644
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	struct identity_downcall_data *param;
  	int size = sizeof(*param), rc, checked = 0;
+@@ -415,7 +348,7 @@ static int lprocfs_wr_identity_info(struct file *file, const char *buffer,
+ again:
+ 	if (count < size) {
+ 		CERROR("%s: invalid data count = %lu, size = %d\n",
+-		       mdt_obd_name(mdt), count, size);
++		       mdt_obd_name(mdt), (unsigned long) count, size);
+ 		return -EINVAL;
+ 	}
+ 
 @@ -468,23 +401,24 @@ out:
  
  	return rc ? rc : count;
@@ -1235,7 +1256,7 @@ index 4abb532..236b6c2 100644
  	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
  	__u32 val;
  	int rc;
-@@ -957,97 +899,46 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
+@@ -957,97 +899,72 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
  	mdt->mdt_enable_remote_dir_gid = val;
  	return count;
  }
@@ -1344,36 +1365,85 @@ index 4abb532..236b6c2 100644
 +LPROC_SEQ_FOPS(mdt_hsm_cdt_control);
 +
 +static struct lprocfs_seq_vars lprocfs_mdt_obd_vars[] = {
-+	{ "uuid",			&mdt_uuid_fops			},
-+	{ "recovery_status",		&mdt_recovery_status_fops	},
-+	{ "num_exports",		&mdt_num_exports_fops		},
-+	{ "identity_expire",		&mdt_identity_expire_fops	},
-+	{ "identity_acquire_expire",	&mdt_identity_acquire_expire_fops },
-+	{ "identity_upcall",		&mdt_identity_upcall_fops	},
-+	{ "identity_flush",		&mdt_identity_flush_fops	},
-+	{ "identity_info",		&mdt_identity_info_fops		},
-+	{ "capa",			&mdt_capa_fops			},
-+	{ "capa_timeout",		&mdt_capa_timeout_fops		},
-+	{ "capa_key_timeout",		&mdt_ck_timeout_fops		},
-+	{ "capa_count",			&mdt_capa_count_fops		},
-+	{ "site_stats",			&mdt_site_stats_fops		},
-+	{ "evict_client",		&mdt_mds_evict_client_fops	},
-+	{ "hash_stats",			&mdt_hash_fops			},
-+	{ "sec_level",			&mdt_sec_level_fops		},
-+	{ "commit_on_sharing",		&mdt_cos_fops			},
-+	{ "root_squash",		&mdt_root_squash_fops		},
-+	{ "nosquash_nids",		&mdt_nosquash_nids_fops		},
-+	{ "som",			&mdt_som_fops			},
-+	{ "instance",			&mdt_target_instance_fops	},
-+	{ "ir_factor",			&mdt_ir_factor_fops		},
-+	{ "job_cleanup_interval",	&mdt_job_interval_fops		},
-+	{ "enable_remote_dir",		&mdt_enable_remote_dir_fops	},
-+	{ "enable_remote_dir_gid",	&mdt_enable_remote_dir_gid_fops	},
-+	{ "hsm_control",		&mdt_hsm_cdt_control_fops	},
++	{ .name	=	"uuid",
++	  .fops	=	&mdt_uuid_fops				},
++	{ .name	=	"recovery_status",
++	  .fops	=	&mdt_recovery_status_fops		},
++	{ .name	=	"num_exports",
++	  .fops	=	&mdt_num_exports_fops			},
++	{ .name	=	"identity_expire",
++	  .fops	=	&mdt_identity_expire_fops		},
++	{ .name	=	"identity_acquire_expire",
++	  .fops	=	&mdt_identity_acquire_expire_fops	},
++	{ .name	=	"identity_upcall",
++	  .fops	=	&mdt_identity_upcall_fops		},
++	{ .name	=	"identity_flush",
++	  .fops	=	&mdt_identity_flush_fops		},
++	{ .name	=	"identity_info",
++	  .fops	=	&mdt_identity_info_fops			},
++	{ .name	=	"capa",
++	  .fops	=	&mdt_capa_fops				},
++	{ .name	=	"capa_timeout",
++	  .fops	=	&mdt_capa_timeout_fops			},
++	{ .name	=	"capa_key_timeout",
++	  .fops	=	&mdt_ck_timeout_fops			},
++	{ .name	=	"capa_count",
++	  .fops	=	&mdt_capa_count_fops			},
++	{ .name	=	"site_stats",
++	  .fops	=	&mdt_site_stats_fops			},
++	{ .name	=	"evict_client",
++	  .fops	=	&mdt_mds_evict_client_fops		},
++	{ .name	=	"hash_stats",
++	  .fops	=	&mdt_hash_fops				},
++	{ .name	=	"sec_level",
++	  .fops	=	&mdt_sec_level_fops			},
++	{ .name	=	"commit_on_sharing",
++	  .fops	=	&mdt_cos_fops				},
++	{ .name	=	"root_squash",
++	  .fops	=	&mdt_root_squash_fops			},
++	{ .name	=	"nosquash_nids",
++	  .fops	=	&mdt_nosquash_nids_fops			},
++	{ .name	=	"som",
++	  .fops	=	&mdt_som_fops				},
++	{ .name	=	"instance",
++	  .fops	=	&mdt_target_instance_fops		},
++	{ .name	=	"ir_factor",
++	  .fops	=	&mdt_ir_factor_fops			},
++	{ .name	=	"job_cleanup_interval",
++	  .fops	=	&mdt_job_interval_fops			},
++	{ .name	=	"enable_remote_dir",
++	  .fops	=	&mdt_enable_remote_dir_fops		},
++	{ .name	=	"enable_remote_dir_gid",
++	  .fops	=	&mdt_enable_remote_dir_gid_fops		},
++	{ .name	=	"hsm_control",
++	  .fops	=	&mdt_hsm_cdt_control_fops		},
  	{ 0 }
  };
  
-@@ -1087,3 +978,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
+@@ -1085,21 +1002,15 @@ int lprocfs_mdt_open_files_seq_show(struct seq_file *seq, void *v)
+ 
+ int lprocfs_mdt_open_files_seq_open(struct inode *inode, struct file *file)
+ {
+-	struct proc_dir_entry	*dp = PDE(inode);
+ 	struct seq_file		*seq;
+-	struct nid_stat		*tmp;
+ 	int			rc;
+ 
+-	if (LPROCFS_ENTRY_CHECK(dp))
+-		return -ENOENT;
+-
+-	tmp = dp->data;
+ 	rc = single_open(file, &lprocfs_mdt_open_files_seq_show, NULL);
+ 	if (rc != 0)
+ 		return rc;
+ 
+ 	seq = file->private_data;
+-	seq->private = tmp;
++	seq->private = PDE_DATA(inode);
+ 
+ 	return 0;
+ }
+@@ -1140,3 +1051,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
          lprocfs_counter_init(stats, LPROC_MDT_CROSSDIR_RENAME, 0,
                               "crossdir_rename", "reqs");
  }
@@ -1479,5 +1549,5 @@ index 367f659..4fa66c3 100644
  					LUSTRE_MDS_NAME, &mds_device_type);
  }
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
new file mode 100644
index 0000000..e289134
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch
@@ -0,0 +1,1928 @@
+From 075cf04c212e2bf0f38c94433a80bca2e5bb051e Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Fri, 31 Jan 2014 14:00:32 -0500
+Subject: [PATCH 09/13] LU-3319 procfs: move mdd/ofd proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the mdd/ofd
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
+---
+ lustre/include/lustre_lfsck.h    |   6 +-
+ lustre/lfsck/lfsck_internal.h    |   9 +-
+ lustre/lfsck/lfsck_layout.c      |  66 ++----
+ lustre/lfsck/lfsck_lib.c         |  77 +++----
+ lustre/lfsck/lfsck_namespace.c   |  75 ++-----
+ lustre/mdd/mdd_device.c          |  25 +--
+ lustre/mdd/mdd_internal.h        |   1 -
+ lustre/mdd/mdd_lproc.c           | 293 ++++++++++++--------------
+ lustre/obdclass/lprocfs_status.c |   9 +-
+ lustre/ofd/lproc_ofd.c           | 436 ++++++++++++++++++++-------------------
+ lustre/ofd/ofd_dev.c             |  48 ++---
+ lustre/ofd/ofd_internal.h        |   6 +-
+ lustre/osd-ldiskfs/osd_handler.c |   1 +
+ lustre/osd-zfs/osd_handler.c     |   1 +
+ 14 files changed, 463 insertions(+), 590 deletions(-)
+
+diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
+index 2e93420..0e578ac 100644
+--- a/lustre/include/lustre_lfsck.h
++++ b/lustre/include/lustre_lfsck.h
+@@ -156,11 +156,11 @@ int lfsck_in_notify(const struct lu_env *env, struct dt_device *key,
+ int lfsck_query(const struct lu_env *env, struct dt_device *key,
+ 		struct lfsck_request *lr);
+ 
+-int lfsck_get_speed(struct dt_device *key, void *buf, int len);
++int lfsck_get_speed(struct seq_file *m, struct dt_device *key);
+ int lfsck_set_speed(struct dt_device *key, int val);
+-int lfsck_get_windows(struct dt_device *key, void *buf, int len);
++int lfsck_get_windows(struct seq_file *m, struct dt_device *key);
+ int lfsck_set_windows(struct dt_device *key, int val);
+ 
+-int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type);
++int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type);
+ 
+ #endif /* _LUSTRE_LFSCK_H */
+diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
+index 698fb5f..1893ccc 100644
+--- a/lustre/lfsck/lfsck_internal.h
++++ b/lustre/lfsck/lfsck_internal.h
+@@ -288,8 +288,7 @@ struct lfsck_operations {
+ 
+ 	int (*lfsck_dump)(const struct lu_env *env,
+ 			  struct lfsck_component *com,
+-			  char *buf,
+-			  int len);
++			  struct seq_file *m);
+ 
+ 	int (*lfsck_double_scan)(const struct lu_env *env,
+ 				 struct lfsck_component *com);
+@@ -539,10 +538,10 @@ void lfsck_component_cleanup(const struct lu_env *env,
+ 			     struct lfsck_component *com);
+ void lfsck_instance_cleanup(const struct lu_env *env,
+ 			    struct lfsck_instance *lfsck);
+-int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
++int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
+ 		    const char *prefix);
+-int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix);
+-int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
++int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
++int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
+ 		   const char *prefix);
+ void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
+ 		    struct lfsck_position *pos, bool init);
+diff --git a/lustre/lfsck/lfsck_layout.c b/lustre/lfsck/lfsck_layout.c
+index e7c12d2..8b9c43e 100644
+--- a/lustre/lfsck/lfsck_layout.c
++++ b/lustre/lfsck/lfsck_layout.c
+@@ -2024,69 +2024,53 @@ static int lfsck_layout_slave_post(const struct lu_env *env,
+ }
+ 
+ static int lfsck_layout_dump(const struct lu_env *env,
+-			     struct lfsck_component *com, char *buf, int len)
++			     struct lfsck_component *com, struct seq_file *m)
+ {
+ 	struct lfsck_instance	*lfsck = com->lc_lfsck;
+ 	struct lfsck_bookmark	*bk    = &lfsck->li_bookmark_ram;
+ 	struct lfsck_layout	*lo    = com->lc_file_ram;
+-	int			 save  = len;
+-	int			 ret   = -ENOSPC;
+ 	int			 rc;
+ 
+ 	down_read(&com->lc_sem);
+-	rc = snprintf(buf, len,
+-		      "name: lfsck_layout\n"
++	seq_printf(m, "name: lfsck_layout\n"
+ 		      "magic: %#x\n"
+ 		      "version: %d\n"
+ 		      "status: %s\n",
+ 		      lo->ll_magic,
+ 		      bk->lb_version,
+ 		      lfsck_status2names(lo->ll_status));
+-	if (rc <= 0)
+-		goto out;
+ 
+-	buf += rc;
+-	len -= rc;
+-	rc = lfsck_bits_dump(&buf, &len, lo->ll_flags, lfsck_flags_names,
+-			     "flags");
++	rc = lfsck_bits_dump(m, lo->ll_flags, lfsck_flags_names, "flags");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
+-			     "param");
++	rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_complete,
++	rc = lfsck_time_dump(m, lo->ll_time_last_complete,
+ 			     "time_since_last_completed");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, lo->ll_time_latest_start,
++	rc = lfsck_time_dump(m, lo->ll_time_latest_start,
+ 			     "time_since_latest_start");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, lo->ll_time_last_checkpoint,
++	rc = lfsck_time_dump(m, lo->ll_time_last_checkpoint,
+ 			     "time_since_last_checkpoint");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = snprintf(buf, len,
+-		      "latest_start_position: "LPU64"\n"
++	seq_printf(m, "latest_start_position: "LPU64"\n"
+ 		      "last_checkpoint_position: "LPU64"\n"
+ 		      "first_failure_position: "LPU64"\n",
+ 		      lo->ll_pos_latest_start,
+ 		      lo->ll_pos_last_checkpoint,
+ 		      lo->ll_pos_first_inconsistent);
+-	if (rc <= 0)
+-		goto out;
+-
+-	buf += rc;
+-	len -= rc;
+ 
+-	rc = snprintf(buf, len,
+-		      "success_count: %u\n"
++	seq_printf(m, "success_count: %u\n"
+ 		      "repaired_dangling: "LPU64"\n"
+ 		      "repaired_unmatched_pair: "LPU64"\n"
+ 		      "repaired_multiple_referenced: "LPU64"\n"
+@@ -2106,11 +2090,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 		      lo->ll_objs_skipped,
+ 		      lo->ll_objs_failed_phase1,
+ 		      lo->ll_objs_failed_phase2);
+-	if (rc <= 0)
+-		goto out;
+-
+-	buf += rc;
+-	len -= rc;
+ 
+ 	if (lo->ll_status == LS_SCANNING_PHASE1) {
+ 		__u64 pos;
+@@ -2127,8 +2106,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 			do_div(new_checked, duration);
+ 		if (rtime != 0)
+ 			do_div(speed, rtime);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "run_time_phase1: %u seconds\n"
+ 			      "run_time_phase2: %u seconds\n"
+@@ -2142,11 +2120,6 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 			      lo->ll_run_time_phase2,
+ 			      speed,
+ 			      new_checked);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 
+ 		LASSERT(lfsck->li_di_oit != NULL);
+ 
+@@ -2159,12 +2132,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 		pos = iops->store(env, lfsck->li_di_oit);
+ 		if (!lfsck->li_current_oit_processed)
+ 			pos--;
+-		rc = snprintf(buf, len, "current_position: "LPU64"\n", pos);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
++		seq_printf(m, "current_position: "LPU64"\n", pos);
+ 	} else {
+ 		/* XXX: LS_SCANNING_PHASE2 will be handled in the future. */
+ 		__u64 speed1 = lo->ll_objs_checked_phase1;
+@@ -2174,8 +2142,7 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 			do_div(speed1, lo->ll_run_time_phase1);
+ 		if (lo->ll_run_time_phase2 != 0)
+ 			do_div(speed2, lo->ll_run_time_phase2);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "run_time_phase1: %u seconds\n"
+ 			      "run_time_phase2: %u seconds\n"
+@@ -2190,18 +2157,11 @@ static int lfsck_layout_dump(const struct lu_env *env,
+ 			      lo->ll_run_time_phase2,
+ 			      speed1,
+ 			      speed2);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 	}
+-	ret = save - len;
+-
+ out:
+ 	up_read(&com->lc_sem);
+ 
+-	return ret;
++	return rc;
+ }
+ 
+ static int lfsck_layout_master_double_scan(const struct lu_env *env,
+diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
+index ad92e32..747e376 100644
+--- a/lustre/lfsck/lfsck_lib.c
++++ b/lustre/lfsck/lfsck_lib.c
+@@ -424,77 +424,52 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
+ 	return 0;
+ }
+ 
+-int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
++int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
+ 		    const char *prefix)
+ {
+-	int save = *len;
+ 	int flag;
+-	int rc;
+ 	int i;
+ 
+-	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+-	if (rc <= 0)
+-		return -ENOSPC;
++	seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ 
+-	*buf += rc;
+-	*len -= rc;
+ 	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
+ 		if (flag & bits) {
+ 			bits &= ~flag;
+ 			if (names[i] != NULL) {
+-				rc = snprintf(*buf, *len, "%s%c", names[i],
+-					      bits != 0 ? ',' : '\n');
+-				if (rc <= 0)
+-					return -ENOSPC;
+-
+-				*buf += rc;
+-				*len -= rc;
++				seq_printf(m, "%s%c", names[i],
++					   bits != 0 ? ',' : '\n');
+ 			}
+ 		}
+ 	}
+-	return save - *len;
++	return 0;
+ }
+ 
+-int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix)
++int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
+ {
+-	int rc;
+-
+ 	if (time != 0)
+-		rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
+-			      cfs_time_current_sec() - time);
++		seq_printf(m, "%s: "LPU64" seconds\n", prefix,
++			   cfs_time_current_sec() - time);
+ 	else
+-		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
+-	if (rc <= 0)
+-		return -ENOSPC;
+-
+-	*buf += rc;
+-	*len -= rc;
+-	return rc;
++		seq_printf(m, "%s: N/A\n", prefix);
++	return 0;
+ }
+ 
+-int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
++int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
+ 		   const char *prefix)
+ {
+-	int rc;
+-
+ 	if (fid_is_zero(&pos->lp_dir_parent)) {
+ 		if (pos->lp_oit_cookie == 0)
+-			rc = snprintf(*buf, *len, "%s: N/A, N/A, N/A\n",
+-				      prefix);
++			seq_printf(m, "%s: N/A, N/A, N/A\n",
++				   prefix);
+ 		else
+-			rc = snprintf(*buf, *len, "%s: "LPU64", N/A, N/A\n",
+-				      prefix, pos->lp_oit_cookie);
++			seq_printf(m, "%s: "LPU64", N/A, N/A\n",
++				   prefix, pos->lp_oit_cookie);
+ 	} else {
+-		rc = snprintf(*buf, *len, "%s: "LPU64", "DFID", "LPU64"\n",
+-			      prefix, pos->lp_oit_cookie,
+-			      PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
++		seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n",
++			   prefix, pos->lp_oit_cookie,
++			   PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
+ 	}
+-	if (rc <= 0)
+-		return -ENOSPC;
+-
+-	*buf += rc;
+-	*len -= rc;
+-	return rc;
++	return 0;
+ }
+ 
+ void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
+@@ -1102,7 +1077,7 @@ int lfsck_async_request(const struct lu_env *env, struct obd_export *exp,
+ 
+ /* external interfaces */
+ 
+-int lfsck_get_speed(struct dt_device *key, void *buf, int len)
++int lfsck_get_speed(struct seq_file *m, struct dt_device *key)
+ {
+ 	struct lu_env		env;
+ 	struct lfsck_instance  *lfsck;
+@@ -1115,8 +1090,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+ 
+ 	lfsck = lfsck_instance_find(key, true, false);
+ 	if (likely(lfsck != NULL)) {
+-		rc = snprintf(buf, len, "%u\n",
+-			      lfsck->li_bookmark_ram.lb_speed_limit);
++		seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
+ 		lfsck_instance_put(&env, lfsck);
+ 	} else {
+ 		rc = -ENODEV;
+@@ -1156,7 +1130,7 @@ int lfsck_set_speed(struct dt_device *key, int val)
+ }
+ EXPORT_SYMBOL(lfsck_set_speed);
+ 
+-int lfsck_get_windows(struct dt_device *key, void *buf, int len)
++int lfsck_get_windows(struct seq_file *m, struct dt_device *key)
+ {
+ 	struct lu_env		env;
+ 	struct lfsck_instance  *lfsck;
+@@ -1169,8 +1143,7 @@ int lfsck_get_windows(struct dt_device *key, void *buf, int len)
+ 
+ 	lfsck = lfsck_instance_find(key, true, false);
+ 	if (likely(lfsck != NULL)) {
+-		rc = snprintf(buf, len, "%u\n",
+-			      lfsck->li_bookmark_ram.lb_async_windows);
++		seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_async_windows);
+ 		lfsck_instance_put(&env, lfsck);
+ 	} else {
+ 		rc = -ENODEV;
+@@ -1220,7 +1193,7 @@ int lfsck_set_windows(struct dt_device *key, int val)
+ }
+ EXPORT_SYMBOL(lfsck_set_windows);
+ 
+-int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
++int lfsck_dump(struct seq_file *m, struct dt_device *key, enum lfsck_type type)
+ {
+ 	struct lu_env		env;
+ 	struct lfsck_instance  *lfsck;
+@@ -1236,7 +1209,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, enum lfsck_type type)
+ 	if (likely(lfsck != NULL)) {
+ 		com = lfsck_component_find(lfsck, type);
+ 		if (likely(com != NULL)) {
+-			rc = com->lc_ops->lfsck_dump(&env, com, buf, len);
++			rc = com->lc_ops->lfsck_dump(&env, com, m);
+ 			lfsck_component_put(&env, com);
+ 		} else {
+ 			rc = -ENOTSUPP;
+diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
+index 6fc08fb..2abad67 100644
+--- a/lustre/lfsck/lfsck_namespace.c
++++ b/lustre/lfsck/lfsck_namespace.c
+@@ -1088,65 +1088,56 @@ static int lfsck_namespace_post(const struct lu_env *env,
+ 
+ static int
+ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+-		     char *buf, int len)
++		     struct seq_file *m)
+ {
+ 	struct lfsck_instance	*lfsck = com->lc_lfsck;
+ 	struct lfsck_bookmark	*bk    = &lfsck->li_bookmark_ram;
+ 	struct lfsck_namespace	*ns    = com->lc_file_ram;
+-	int			 save  = len;
+-	int			 ret   = -ENOSPC;
+ 	int			 rc;
+ 
+ 	down_read(&com->lc_sem);
+-	rc = snprintf(buf, len,
+-		      "name: lfsck_namespace\n"
+-		      "magic: %#x\n"
+-		      "version: %d\n"
+-		      "status: %s\n",
+-		      ns->ln_magic,
+-		      bk->lb_version,
+-		      lfsck_status2names(ns->ln_status));
+-	if (rc <= 0)
+-		goto out;
+-
+-	buf += rc;
+-	len -= rc;
+-	rc = lfsck_bits_dump(&buf, &len, ns->ln_flags, lfsck_flags_names,
+-			     "flags");
++	seq_printf(m, "name: lfsck_namespace\n"
++		   "magic: %#x\n"
++		   "version: %d\n"
++		   "status: %s\n",
++		   ns->ln_magic,
++		   bk->lb_version,
++		   lfsck_status2names(ns->ln_status));
++
++	rc = lfsck_bits_dump(m, ns->ln_flags, lfsck_flags_names, "flags");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
+-			     "param");
++	rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_complete,
++	rc = lfsck_time_dump(m, ns->ln_time_last_complete,
+ 			     "time_since_last_completed");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, ns->ln_time_latest_start,
++	rc = lfsck_time_dump(m, ns->ln_time_latest_start,
+ 			     "time_since_latest_start");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_checkpoint,
++	rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
+ 			     "time_since_last_checkpoint");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_latest_start,
++	rc = lfsck_pos_dump(m, &ns->ln_pos_latest_start,
+ 			    "latest_start_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_last_checkpoint,
++	rc = lfsck_pos_dump(m, &ns->ln_pos_last_checkpoint,
+ 			    "last_checkpoint_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_first_inconsistent,
++	rc = lfsck_pos_dump(m, &ns->ln_pos_first_inconsistent,
+ 			    "first_failure_position");
+ 	if (rc < 0)
+ 		goto out;
+@@ -1166,8 +1157,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			do_div(new_checked, duration);
+ 		if (rtime != 0)
+ 			do_div(speed, rtime);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "updated_phase1: "LPU64"\n"
+ 			      "updated_phase2: "LPU64"\n"
+@@ -1199,11 +1189,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			      ns->ln_run_time_phase2,
+ 			      speed,
+ 			      new_checked);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 
+ 		LASSERT(lfsck->li_di_oit != NULL);
+ 
+@@ -1232,9 +1217,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			pos.lp_dir_cookie = 0;
+ 		}
+ 		spin_unlock(&lfsck->li_lock);
+-		rc = lfsck_pos_dump(&buf, &len, &pos, "current_position");
+-		if (rc <= 0)
+-			goto out;
++		lfsck_pos_dump(m, &pos, "current_position");
+ 	} else if (ns->ln_status == LS_SCANNING_PHASE2) {
+ 		cfs_duration_t duration = cfs_time_current() -
+ 					  lfsck->li_time_last_checkpoint;
+@@ -1252,8 +1235,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			do_div(speed1, ns->ln_run_time_phase1);
+ 		if (rtime != 0)
+ 			do_div(speed2, rtime);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "updated_phase1: "LPU64"\n"
+ 			      "updated_phase2: "LPU64"\n"
+@@ -1288,11 +1270,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			      speed2,
+ 			      new_checked,
+ 			      PFID(&ns->ln_fid_latest_scanned_phase2));
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 	} else {
+ 		__u64 speed1 = ns->ln_items_checked;
+ 		__u64 speed2 = ns->ln_objs_checked_phase2;
+@@ -1301,8 +1278,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			do_div(speed1, ns->ln_run_time_phase1);
+ 		if (ns->ln_run_time_phase2 != 0)
+ 			do_div(speed2, ns->ln_run_time_phase2);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "updated_phase1: "LPU64"\n"
+ 			      "updated_phase2: "LPU64"\n"
+@@ -1335,17 +1311,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			      ns->ln_run_time_phase2,
+ 			      speed1,
+ 			      speed2);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 	}
+-	ret = save - len;
+-
+ out:
+ 	up_read(&com->lc_sem);
+-	return ret;
++	return 0;
+ }
+ 
+ static int lfsck_namespace_double_scan_main(void *args)
+diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
+index 40a4ee3..b0acecb 100644
+--- a/lustre/mdd/mdd_device.c
++++ b/lustre/mdd/mdd_device.c
+@@ -812,16 +812,16 @@ static int mdd_process_config(const struct lu_env *env,
+         ENTRY;
+ 
+         switch (cfg->lcfg_command) {
+-        case LCFG_PARAM: {
+-                struct lprocfs_static_vars lvars;
+-
+-                lprocfs_mdd_init_vars(&lvars);
+-                rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m);
+-                if (rc > 0 || rc == -ENOSYS)
+-                        /* we don't understand; pass it on */
+-                        rc = next->ld_ops->ldo_process_config(env, next, cfg);
+-                break;
+-        }
++	case LCFG_PARAM: {
++		struct obd_device *obd = mdd2obd_dev(m);
++
++		rc = class_process_proc_seq_param(PARAM_MDD, obd->obd_vars,
++						  cfg, m);
++		if (rc > 0 || rc == -ENOSYS)
++			/* we don't understand; pass it on */
++			rc = next->ld_ops->ldo_process_config(env, next, cfg);
++		break;
++	}
+         case LCFG_SETUP:
+                 rc = next->ld_ops->ldo_process_config(env, next, cfg);
+                 if (rc)
+@@ -1497,11 +1497,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
+ 
+ static int __init mdd_mod_init(void)
+ {
+-	struct lprocfs_static_vars lvars;
+ 	int rc;
+ 
+-	lprocfs_mdd_init_vars(&lvars);
+-
+ 	rc = lu_kmem_init(mdd_caches);
+ 	if (rc)
+ 		return rc;
+@@ -1517,7 +1514,7 @@ static int __init mdd_mod_init(void)
+ 
+ 	rc = class_register_type(&mdd_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_MDD_NAME, &mdd_device_type);
+ 	if (rc)
+diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
+index daa1dcb..5332b2c 100644
+--- a/lustre/mdd/mdd_internal.h
++++ b/lustre/mdd/mdd_internal.h
+@@ -340,7 +340,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
+                               struct thandle *);
+ 
+ /* mdd_lproc.c */
+-void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars);
+ int mdd_procfs_init(struct mdd_device *mdd, const char *name);
+ int mdd_procfs_fini(struct mdd_device *mdd);
+ 
+diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
+index 2573e33..e20324c 100644
+--- a/lustre/mdd/mdd_lproc.c
++++ b/lustre/mdd/mdd_lproc.c
+@@ -49,56 +49,14 @@
+ #include <libcfs/libcfs_string.h>
+ #include "mdd_internal.h"
+ 
+-int mdd_procfs_init(struct mdd_device *mdd, const char *name)
++static ssize_t
++mdd_atime_diff_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
+-        struct lprocfs_static_vars lvars;
+-        struct obd_type     *type;
+-        int                  rc;
+-        ENTRY;
+-
+-	/* at the moment there is no linkage between lu_type
+-	 * and obd_type, so we lookup obd_type this way */
+-	type = class_search_type(LUSTRE_MDD_NAME);
+-
+-        LASSERT(name != NULL);
+-        LASSERT(type != NULL);
+-
+-        /* Find the type procroot and add the proc entry for this device */
+-        lprocfs_mdd_init_vars(&lvars);
+-        mdd->mdd_proc_entry = lprocfs_register(name, type->typ_procroot,
+-                                               lvars.obd_vars, mdd);
+-        if (IS_ERR(mdd->mdd_proc_entry)) {
+-                rc = PTR_ERR(mdd->mdd_proc_entry);
+-                CERROR("Error %d setting up lprocfs for %s\n",
+-                       rc, name);
+-                mdd->mdd_proc_entry = NULL;
+-                GOTO(out, rc);
+-        }
+-
+-	rc = 0;
+-
+-        EXIT;
+-out:
+-        if (rc)
+-               mdd_procfs_fini(mdd);
+-        return rc;
+-}
+-
+-int mdd_procfs_fini(struct mdd_device *mdd)
+-{
+-        if (mdd->mdd_proc_entry) {
+-                 lprocfs_remove(&mdd->mdd_proc_entry);
+-                 mdd->mdd_proc_entry = NULL;
+-        }
+-        RETURN(0);
+-}
+-
+-static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
+-                                 unsigned long count, void *data)
+-{
+-        struct mdd_device *mdd = data;
+-        char kernbuf[20], *end;
+-        unsigned long diff = 0;
++	struct seq_file *m = file->private_data;
++	struct mdd_device *mdd = m->private;
++	char kernbuf[20], *end;
++	unsigned long diff = 0;
+ 
+         if (count > (sizeof(kernbuf) - 1))
+                 return -EINVAL;
+@@ -116,37 +74,35 @@ static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
+         return count;
+ }
+ 
+-static int lprocfs_rd_atime_diff(char *page, char **start, off_t off,
+-                                 int count, int *eof, void *data)
++static int mdd_atime_diff_seq_show(struct seq_file *m, void *data)
+ {
+-        struct mdd_device *mdd = data;
++	struct mdd_device *mdd = m->private;
+ 
+-        *eof = 1;
+-        return snprintf(page, count, "%lu\n", mdd->mdd_atime_diff);
++	return seq_printf(m, "%lu\n", mdd->mdd_atime_diff);
+ }
+-
++LPROC_SEQ_FOPS(mdd_atime_diff);
+ 
+ /**** changelogs ****/
+-static int lprocfs_rd_changelog_mask(char *page, char **start, off_t off,
+-                                     int count, int *eof, void *data)
++static int mdd_changelog_mask_seq_show(struct seq_file *m, void *data)
+ {
+-        struct mdd_device *mdd = data;
+-        int i = 0, rc = 0;
+-
+-        *eof = 1;
+-        while (i < CL_LAST) {
+-                if (mdd->mdd_cl.mc_mask & (1 << i))
+-                        rc += snprintf(page + rc, count - rc, "%s ",
+-                                       changelog_type2str(i));
+-                i++;
+-        }
+-        return rc;
++	struct mdd_device *mdd = m->private;
++	int i = 0;
++
++	while (i < CL_LAST) {
++		if (mdd->mdd_cl.mc_mask & (1 << i))
++			seq_printf(m, "%s ", changelog_type2str(i));
++		i++;
++	}
++	seq_printf(m, "\n");
++	return 0;
+ }
+ 
+-static int lprocfs_wr_changelog_mask(struct file *file, const char *buffer,
+-				     unsigned long count, void *data)
++static ssize_t
++mdd_changelog_mask_seq_write(struct file *file, const char *buffer,
++			     size_t count, loff_t *off)
+ {
+-	struct mdd_device *mdd = data;
++	struct seq_file *m = file->private_data;
++	struct mdd_device *mdd = m->private;
+ 	char *kernbuf;
+ 	int rc;
+ 	ENTRY;
+@@ -168,45 +124,32 @@ out:
+ 	OBD_FREE(kernbuf, PAGE_CACHE_SIZE);
+ 	return rc;
+ }
+-
+-struct cucb_data {
+-        char *page;
+-        int count;
+-        int idx;
+-};
++LPROC_SEQ_FOPS(mdd_changelog_mask);
+ 
+ static int lprocfs_changelog_users_cb(const struct lu_env *env,
+ 				      struct llog_handle *llh,
+ 				      struct llog_rec_hdr *hdr, void *data)
+ {
+-        struct llog_changelog_user_rec *rec;
+-        struct cucb_data *cucb = (struct cucb_data *)data;
+-
+-        LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
++	struct llog_changelog_user_rec *rec;
++	struct seq_file *m = data;
+ 
+-        rec = (struct llog_changelog_user_rec *)hdr;
++	LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
+ 
+-        cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx,
+-                              CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
+-                              rec->cur_id, rec->cur_endrec);
+-        if (cucb->idx >= cucb->count)
+-                return -ENOSPC;
++	rec = (struct llog_changelog_user_rec *)hdr;
+ 
+-        return 0;
++	seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
++		   rec->cur_id, rec->cur_endrec);
++	return 0;
+ }
+ 
+-static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
+-                                      int count, int *eof, void *data)
++static int mdd_changelog_users_seq_show(struct seq_file *m, void *data)
+ {
+ 	struct lu_env		 env;
+-	struct mdd_device	*mdd = data;
++	struct mdd_device	*mdd = m->private;
+ 	struct llog_ctxt	*ctxt;
+-	struct cucb_data	 cucb;
+ 	__u64			 cur;
+ 	int			 rc;
+ 
+-        *eof = 1;
+-
+         ctxt = llog_get_context(mdd2obd_dev(mdd),
+ 				LLOG_CHANGELOG_USER_ORIG_CTXT);
+         if (ctxt == NULL)
+@@ -223,37 +166,32 @@ static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
+ 	cur = mdd->mdd_cl.mc_index;
+ 	spin_unlock(&mdd->mdd_cl.mc_lock);
+ 
+-        cucb.count = count;
+-        cucb.page = page;
+-        cucb.idx = 0;
+-
+-        cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
+-                              "current index: "LPU64"\n", cur);
+-
+-        cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
+-                              "%-5s %s\n", "ID", "index");
++	seq_printf(m, "current index: "LPU64"\n", cur);
++	seq_printf(m, "%-5s %s\n", "ID", "index");
+ 
+ 	llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb,
+-			 &cucb, 0, 0);
++			 &m, 0, 0);
+ 
+ 	lu_env_fini(&env);
+ 	llog_ctxt_put(ctxt);
+-	return cucb.idx;
++	return 0;
+ }
++LPROC_SEQ_FOPS_RO(mdd_changelog_users);
+ 
+-static int lprocfs_rd_sync_perm(char *page, char **start, off_t off,
+-                                int count, int *eof, void *data)
++static int mdd_sync_perm_seq_show(struct seq_file *m, void *data)
+ {
+-        struct mdd_device *mdd = data;
++	struct mdd_device *mdd = m->private;
+ 
+-        LASSERT(mdd != NULL);
+-        return snprintf(page, count, "%d\n", mdd->mdd_sync_permission);
++	LASSERT(mdd != NULL);
++	return seq_printf(m, "%d\n", mdd->mdd_sync_permission);
+ }
+ 
+-static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
+-                                unsigned long count, void *data)
++static ssize_t
++mdd_sync_perm_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-        struct mdd_device *mdd = data;
++	struct seq_file *m = file->private_data;
++	struct mdd_device *mdd = m->private;
+         int val, rc;
+ 
+         LASSERT(mdd != NULL);
+@@ -264,24 +202,22 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
+         mdd->mdd_sync_permission = !!val;
+         return count;
+ }
++LPROC_SEQ_FOPS(mdd_sync_perm);
+ 
+-static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdd_device *mdd = data;
+-	int rc;
++	struct mdd_device *mdd = m->private;
+ 
+ 	LASSERT(mdd != NULL);
+-	*eof = 1;
+-
+-	rc = lfsck_get_speed(mdd->mdd_bottom, page, count);
+-	return rc != 0 ? rc : count;
++	return lfsck_get_speed(m, mdd->mdd_bottom);
+ }
+ 
+-static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct mdd_device *mdd = data;
++	struct seq_file *m = file->private_data;
++	struct mdd_device *mdd = m->private;
+ 	__u32 val;
+ 	int rc;
+ 
+@@ -293,25 +229,22 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+ 	rc = lfsck_set_speed(mdd->mdd_bottom, val);
+ 	return rc != 0 ? rc : count;
+ }
++LPROC_SEQ_FOPS(mdd_lfsck_speed_limit);
+ 
+-static int lprocfs_rd_lfsck_async_windows(char *page, char **start, off_t off,
+-					  int count, int *eof, void *data)
++static int mdd_lfsck_async_windows_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdd_device *mdd = data;
+-	int		   rc;
++	struct mdd_device *mdd = m->private;
+ 
+ 	LASSERT(mdd != NULL);
+-	*eof = 1;
+-
+-	rc = lfsck_get_windows(mdd->mdd_bottom, page, count);
+-
+-	return rc != 0 ? rc : count;
++	return lfsck_get_windows(m, mdd->mdd_bottom);
+ }
+ 
+-static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
+-					  unsigned long count, void *data)
++static ssize_t
++mdd_lfsck_async_windows_seq_write(struct file *file, const char *buffer,
++				  size_t count, loff_t *off)
+ {
+-	struct mdd_device *mdd = data;
++	struct seq_file   *m = file->private_data;
++	struct mdd_device *mdd = m->private;
+ 	__u32		   val;
+ 	int		   rc;
+ 
+@@ -322,42 +255,76 @@ static int lprocfs_wr_lfsck_async_windows(struct file *file, const char *buffer,
+ 
+ 	return rc != 0 ? rc : count;
+ }
++LPROC_SEQ_FOPS(mdd_lfsck_async_windows);
+ 
+-static int lprocfs_rd_lfsck_namespace(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int mdd_lfsck_namespace_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdd_device *mdd = data;
+-	int rc;
++	struct mdd_device *mdd = m->private;
+ 
+ 	LASSERT(mdd != NULL);
+-	*eof = 1;
+ 
+-	rc = lfsck_dump(mdd->mdd_bottom, page, count, LT_NAMESPACE);
+-	return rc;
++	return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
+ }
+-
+-static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
+-        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
+-        { "changelog_mask",  lprocfs_rd_changelog_mask,
+-                             lprocfs_wr_changelog_mask, 0 },
+-        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
+-        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
+-	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
+-			       lprocfs_wr_lfsck_speed_limit, 0 },
+-	{ "lfsck_async_windows", lprocfs_rd_lfsck_async_windows,
+-				 lprocfs_wr_lfsck_async_windows, 0 },
+-	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
++LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
++
++static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
++	{ .name =	"atime_diff",
++	  .fops =	&mdd_atime_diff_fops		},
++	{ .name =	"changelog_mask",
++	  .fops =	&mdd_changelog_mask_fops	},
++	{ .name =	"changelog_users",
++	  .fops =	&mdd_changelog_users_fops	},
++	{ .name =	"sync_permission",
++	  .fops =	&mdd_sync_perm_fops		},
++	{ .name =	"lfsck_speed_limit",
++	  .fops =	&mdd_lfsck_speed_limit_fops	},
++	{ .name	=	"lfsck_async_windows",
++	  .fops	=	&mdd_lfsck_async_windows_fops	},
++	{ .name =       "lfsck_namespace",
++	  .fops =       &mdd_lfsck_namespace_fops       },
+ 	{ 0 }
+ };
+ 
+-static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
+-        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
+-        { 0 }
+-};
+-
+-void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
++int mdd_procfs_init(struct mdd_device *mdd, const char *name)
+ {
+-        lvars->module_vars  = lprocfs_mdd_module_vars;
+-        lvars->obd_vars     = lprocfs_mdd_obd_vars;
++	struct obd_device *obd = class_name2obd(name);
++	struct obd_type   *type;
++	int		   rc;
++	ENTRY;
++
++	/* at the moment there is no linkage between lu_type
++	 * and obd_type, so we lookup obd_type this way */
++	type = class_search_type(LUSTRE_MDD_NAME);
++
++	LASSERT(name != NULL);
++	LASSERT(type != NULL);
++	LASSERT(obd  != NULL);
++
++	/* Find the type procroot and add the proc entry for this device */
++	obd->obd_vars = lprocfs_mdd_obd_vars;
++	mdd->mdd_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
++						   obd->obd_vars, mdd);
++	if (IS_ERR(mdd->mdd_proc_entry)) {
++		rc = PTR_ERR(mdd->mdd_proc_entry);
++		CERROR("Error %d setting up lprocfs for %s\n",
++		       rc, name);
++		mdd->mdd_proc_entry = NULL;
++		GOTO(out, rc);
++	}
++	rc = 0;
++
++	EXIT;
++out:
++	if (rc)
++		mdd_procfs_fini(mdd);
++	return rc;
+ }
+ 
++int mdd_procfs_fini(struct mdd_device *mdd)
++{
++	if (mdd->mdd_proc_entry) {
++		lprocfs_remove(&mdd->mdd_proc_entry);
++		mdd->mdd_proc_entry = NULL;
++	}
++	RETURN(0);
++}
+diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
+index 63d01cc..abe5d71 100644
+--- a/lustre/obdclass/lprocfs_status.c
++++ b/lustre/obdclass/lprocfs_status.c
+@@ -388,11 +388,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
+ #undef BUFLEN
+ 
+ struct file_operations lprocfs_evict_client_fops = {
+-        .owner = THIS_MODULE,
+-        .read = lprocfs_fops_read,
+-        .write = lprocfs_fops_write,
+-        .open = lprocfs_evict_client_open,
+-        .release = lprocfs_evict_client_release,
++	.owner		= THIS_MODULE,
++	.open		= lprocfs_evict_client_open,
++	.release	= lprocfs_evict_client_release,
++	.write		= lprocfs_evict_client_seq_write,
+ };
+ EXPORT_SYMBOL(lprocfs_evict_client_fops);
+ #endif
+diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
+index e303fd6..1759a7d 100644
+--- a/lustre/ofd/lproc_ofd.c
++++ b/lustre/ofd/lproc_ofd.c
+@@ -47,80 +47,75 @@
+ 
+ #ifdef LPROCFS
+ 
+-static int lprocfs_ofd_rd_seqs(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int ofd_seqs_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	*eof = 1;
+-	return snprintf(page, count, "%u\n", ofd->ofd_seq_count);
++	return seq_printf(m, "%u\n", ofd->ofd_seq_count);
+ }
++LPROC_SEQ_FOPS_RO(ofd_seqs);
+ 
+-static int lprocfs_ofd_rd_tot_dirty(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_dirty);
++	return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty);
+ }
++LPROC_SEQ_FOPS_RO(ofd_tot_dirty);
+ 
+-static int lprocfs_ofd_rd_tot_granted(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int ofd_tot_granted_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_granted);
++	return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted);
+ }
++LPROC_SEQ_FOPS_RO(ofd_tot_granted);
+ 
+-static int lprocfs_ofd_rd_tot_pending(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int ofd_tot_pending_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_pending);
++	return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending);
+ }
++LPROC_SEQ_FOPS_RO(ofd_tot_pending);
+ 
+-static int lprocfs_ofd_rd_grant_precreate(char *page, char **start, off_t off,
+-					  int count, int *eof, void *data)
++static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 
+ 	LASSERT(obd != NULL);
+-	*eof = 1;
+-	return snprintf(page, count, "%ld\n",
++	return seq_printf(m, "%ld\n",
+ 			obd->obd_self_export->exp_filter_data.fed_grant);
+ }
++LPROC_SEQ_FOPS_RO(ofd_grant_precreate);
+ 
+-static int lprocfs_ofd_rd_grant_ratio(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%d%%\n",
++	return seq_printf(m, "%d%%\n",
+ 			(int) ofd_grant_reserved(ofd, 100));
+ }
+ 
+-static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
+-				      unsigned long count, void *data)
++static ssize_t
++ofd_grant_ratio_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = (struct obd_device *)data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -144,23 +139,24 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
+ 	spin_unlock(&ofd->ofd_grant_lock);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_grant_ratio);
+ 
+-static int lprocfs_ofd_rd_precreate_batch(char *page, char **start, off_t off,
+-					  int count, int *eof, void *data)
++static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%d\n", ofd->ofd_precreate_batch);
++	return seq_printf(m, "%d\n", ofd->ofd_precreate_batch);
+ }
+ 
+-static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
+-					  unsigned long count, void *data)
++static ssize_t
++ofd_precreate_batch_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 	int val;
+ 	int rc;
+@@ -177,11 +173,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
+ 	spin_unlock(&ofd->ofd_batch_lock);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_precreate_batch);
+ 
+-static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
+-				  int count, int *eof, void *data)
++static int ofd_last_id_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd;
+ 	struct ofd_seq		*oseq = NULL;
+ 	int			retval = 0, rc;
+@@ -199,35 +195,32 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
+ 		      fid_idif_seq(ostid_id(&oseq->os_oi),
+ 				   ofd->ofd_lut.lut_lsd.lsd_osd_index) :
+ 		      ostid_seq(&oseq->os_oi);
+-		rc = snprintf(page, count, DOSTID"\n", seq,
+-			      ostid_id(&oseq->os_oi));
++		rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi));
+ 		if (rc < 0) {
+ 			retval = rc;
+ 			break;
+ 		}
+-		page += rc;
+-		count -= rc;
+ 		retval += rc;
+ 	}
+ 	read_unlock(&ofd->ofd_seq_list_lock);
+ 	return retval;
+ }
++LPROC_SEQ_FOPS_RO(ofd_last_id);
+ 
+-int lprocfs_ofd_rd_fmd_max_num(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++static int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num);
+-	return rc;
++	return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num);
+ }
+ 
+-int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++ofd_fmd_max_num_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -242,22 +235,22 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
+ 	ofd->ofd_fmd_max_num = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_fmd_max_num);
+ 
+-int lprocfs_ofd_rd_fmd_max_age(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++static int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ);
+-	return rc;
++	return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ);
+ }
+ 
+-int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++ofd_fmd_max_age_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -272,22 +265,22 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
+ 	ofd->ofd_fmd_max_age = val * HZ;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_fmd_max_age);
+ 
+-static int lprocfs_ofd_rd_capa(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++static int ofd_capa_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
+-	int			 rc;
++	struct obd_device	*obd = m->private;
+ 
+-	rc = snprintf(page, count, "capability on: %s\n",
+-		      obd->u.filter.fo_fl_oss_capa ? "oss" : "");
+-	return rc;
++	return seq_printf(m, "capability on: %s\n",
++			  obd->u.filter.fo_fl_oss_capa ? "oss" : "");
+ }
+ 
+-static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++ofd_capa_seq_write(struct file *file, const char *buffer, size_t count,
++		   loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	int			 val, rc;
+ 
+ 	rc = lprocfs_write_helper(buffer, count, &val);
+@@ -306,28 +299,30 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
+ 		      val ? "enabled" : "disabled");
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_capa);
+ 
+-static int lprocfs_ofd_rd_capa_count(char *page, char **start, off_t off,
+-				     int count, int *eof, void *data)
++static int ofd_capa_count_seq_show(struct seq_file *m, void *data)
+ {
+-	return snprintf(page, count, "%d %d\n",
++	return seq_printf(m, "%d %d\n",
+ 			capa_count[CAPA_SITE_CLIENT],
+ 			capa_count[CAPA_SITE_SERVER]);
+ }
++LPROC_SEQ_FOPS_RO(ofd_capa_count);
+ 
+-int lprocfs_ofd_rd_degraded(char *page, char **start, off_t off,
+-			    int count, int *eof, void *data)
++static int ofd_degraded_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count, "%u\n", ofd->ofd_raid_degraded);
++	return seq_printf(m, "%u\n", ofd->ofd_raid_degraded);
+ }
+ 
+-int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
+-			    unsigned long count, void *data)
++static ssize_t
++ofd_degraded_seq_write(struct file *file, const char *buffer,
++		       size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val, rc;
+ 
+@@ -338,38 +333,37 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
+ 	spin_lock(&ofd->ofd_flags_lock);
+ 	ofd->ofd_raid_degraded = !!val;
+ 	spin_unlock(&ofd->ofd_flags_lock);
+-
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_degraded);
+ 
+-int lprocfs_ofd_rd_fstype(char *page, char **start, off_t off, int count,
+-			  int *eof, void *data)
++static int ofd_fstype_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 	struct lu_device  *d;
+ 
+ 	LASSERT(ofd->ofd_osd);
+ 	d = &ofd->ofd_osd->dd_lu_dev;
+ 	LASSERT(d->ld_type);
+-	return snprintf(page, count, "%s\n", d->ld_type->ldt_name);
++	return seq_printf(m, "%s\n", d->ld_type->ldt_name);
+ }
++LPROC_SEQ_FOPS_RO(ofd_fstype);
+ 
+-int lprocfs_ofd_rd_syncjournal(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++static int ofd_syncjournal_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%u\n", ofd->ofd_syncjournal);
+-	return rc;
++	return seq_printf(m, "%u\n", ofd->ofd_syncjournal);
+ }
+ 
+-int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++ofd_syncjournal_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -388,27 +382,27 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_syncjournal);
+ 
+ static char *sync_on_cancel_states[] = {"never",
+ 					"blocking",
+ 					"always" };
+ 
+-int lprocfs_ofd_rd_sync_lock_cancel(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++static int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct lu_target	*tgt = obd->u.obt.obt_lut;
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%s\n",
+-		      sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
+-	return rc;
++	return seq_printf(m, "%s\n",
++			sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
+ }
+ 
+-int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
+-				    unsigned long count, void *data)
++static ssize_t
++ofd_sync_lock_cancel_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct lu_target	*tgt = obd->u.obt.obt_lut;
+ 	int			 val = -1;
+ 	int			 i;
+@@ -436,22 +430,22 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
+ 	spin_unlock(&tgt->lut_flags_lock);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_sync_lock_cancel);
+ 
+-int lprocfs_ofd_rd_grant_compat_disable(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++static int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable);
+-	return rc;
++	return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable);
+ }
+ 
+-int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++ofd_grant_compat_disable_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -469,41 +463,43 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_grant_compat_disable);
+ 
+-int lprocfs_ofd_rd_soft_sync_limit(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int ofd_soft_sync_limit_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	return lprocfs_rd_uint(page, start, off, count, eof,
+-			       &ofd->ofd_soft_sync_limit);
++	return lprocfs_uint_seq_show(m, &ofd->ofd_soft_sync_limit);
+ }
+ 
+-int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char *buffer,
+-				   unsigned long count, void *data)
++static ssize_t
++ofd_soft_sync_limit_seq_write(struct file *file, const char *buffer,
++			      size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit);
++	return lprocfs_uint_seq_write(file, buffer, count,
++				      (loff_t *) &ofd->ofd_soft_sync_limit);
+ }
++LPROC_SEQ_FOPS(ofd_soft_sync_limit);
+ 
+-static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++static int ofd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	*eof = 1;
+-
+-	return lfsck_get_speed(ofd->ofd_osd, page, count);
++	return lfsck_get_speed(m, ofd->ofd_osd);
+ }
+ 
+-static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++ofd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct seq_file		*m = file->private_data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	__u32			 val;
+ 	int			 rc;
+@@ -516,84 +512,108 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+ 
+ 	return rc != 0 ? rc : count;
+ }
++LPROC_SEQ_FOPS(ofd_lfsck_speed_limit);
+ 
+-static int lprocfs_rd_lfsck_layout(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int ofd_lfsck_layout_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	*eof = 1;
+-
+-	return lfsck_dump(ofd->ofd_osd, page, count, LT_LAYOUT);
+-}
+-
+-static struct lprocfs_vars lprocfs_ofd_obd_vars[] = {
+-	{ "uuid",		 lprocfs_rd_uuid, 0, 0 },
+-	{ "blocksize",		 lprocfs_rd_blksize, 0, 0 },
+-	{ "kbytestotal",	 lprocfs_rd_kbytestotal, 0, 0 },
+-	{ "kbytesfree",		 lprocfs_rd_kbytesfree, 0, 0 },
+-	{ "kbytesavail",	 lprocfs_rd_kbytesavail, 0, 0 },
+-	{ "filestotal",		 lprocfs_rd_filestotal, 0, 0 },
+-	{ "filesfree",		 lprocfs_rd_filesfree, 0, 0 },
+-	{ "seqs_allocated",	 lprocfs_ofd_rd_seqs, 0, 0 },
+-	{ "fstype",		 lprocfs_ofd_rd_fstype, 0, 0 },
+-	{ "last_id",		 lprocfs_ofd_rd_last_id, 0, 0 },
+-	{ "tot_dirty",		 lprocfs_ofd_rd_tot_dirty,   0, 0 },
+-	{ "tot_pending",	 lprocfs_ofd_rd_tot_pending, 0, 0 },
+-	{ "tot_granted",	 lprocfs_ofd_rd_tot_granted, 0, 0 },
+-	{ "grant_precreate",	 lprocfs_ofd_rd_grant_precreate, 0, 0 },
+-	{ "grant_ratio",	 lprocfs_ofd_rd_grant_ratio,
+-				 lprocfs_ofd_wr_grant_ratio, 0, 0 },
+-	{ "precreate_batch",	 lprocfs_ofd_rd_precreate_batch,
+-				 lprocfs_ofd_wr_precreate_batch, 0 },
+-	{ "recovery_status",	 lprocfs_obd_rd_recovery_status, 0, 0 },
+-	{ "recovery_time_soft",	 lprocfs_obd_rd_recovery_time_soft,
+-				 lprocfs_obd_wr_recovery_time_soft, 0},
+-	{ "recovery_time_hard",  lprocfs_obd_rd_recovery_time_hard,
+-				 lprocfs_obd_wr_recovery_time_hard, 0},
+-	{ "evict_client",	 0, lprocfs_wr_evict_client, 0,
+-				 &lprocfs_evict_client_fops},
+-	{ "num_exports",	 lprocfs_rd_num_exports,   0, 0 },
+-	{ "degraded",		 lprocfs_ofd_rd_degraded,
+-				 lprocfs_ofd_wr_degraded, 0},
+-	{ "sync_journal",	 lprocfs_ofd_rd_syncjournal,
+-				 lprocfs_ofd_wr_syncjournal, 0 },
+-	{ "sync_on_lock_cancel", lprocfs_ofd_rd_sync_lock_cancel,
+-				 lprocfs_ofd_wr_sync_lock_cancel, 0 },
+-	{ "instance",		 lprocfs_target_rd_instance, 0 },
+-	{ "ir_factor",		 lprocfs_obd_rd_ir_factor,
+-				 lprocfs_obd_wr_ir_factor, 0},
+-	{ "grant_compat_disable", lprocfs_ofd_rd_grant_compat_disable,
+-				  lprocfs_ofd_wr_grant_compat_disable, 0 },
+-	{ "client_cache_count",	 lprocfs_ofd_rd_fmd_max_num,
+-				 lprocfs_ofd_wr_fmd_max_num, 0 },
+-	{ "client_cache_seconds", lprocfs_ofd_rd_fmd_max_age,
+-				  lprocfs_ofd_wr_fmd_max_age, 0 },
+-	{ "capa",		 lprocfs_ofd_rd_capa,
+-				 lprocfs_ofd_wr_capa, 0 },
+-	{ "capa_count",		 lprocfs_ofd_rd_capa_count, 0, 0 },
+-	{ "job_cleanup_interval", lprocfs_rd_job_interval,
+-				  lprocfs_wr_job_interval, 0},
+-	{ "soft_sync_limit",	 lprocfs_ofd_rd_soft_sync_limit,
+-				 lprocfs_ofd_wr_soft_sync_limit, 0},
+-	{ "lfsck_speed_limit",	lprocfs_rd_lfsck_speed_limit,
+-				lprocfs_wr_lfsck_speed_limit, 0 },
+-	{ "lfsck_layout",	lprocfs_rd_lfsck_layout, 0, 0 },
+-	{ 0 }
+-};
+-
+-static struct lprocfs_vars lprocfs_ofd_module_vars[] = {
+-	{ "num_refs",	  lprocfs_rd_numrefs,	0, 0 },
++	return lfsck_dump(m, ofd->ofd_osd, LT_LAYOUT);
++}
++LPROC_SEQ_FOPS_RO(ofd_lfsck_layout);
++
++LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesfree);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesavail);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, filestotal);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, filesfree);
++
++LPROC_SEQ_FOPS_RO_TYPE(ofd, recovery_status);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_soft);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_hard);
++LPROC_SEQ_FOPS_WO_TYPE(ofd, evict_client);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, num_exports);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, target_instance);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, ir_factor);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, job_interval);
++
++struct lprocfs_seq_vars lprocfs_ofd_obd_vars[] = {
++	{ .name =	"uuid",
++	  .fops =	&ofd_uuid_fops			},
++	{ .name =	"blocksize",
++	  .fops =	&ofd_blksize_fops		},
++	{ .name =	"kbytestotal",
++	  .fops =	&ofd_kbytestotal_fops		},
++	{ .name =	"kbytesfree",
++	  .fops =	&ofd_kbytesfree_fops		},
++	{ .name =	"kbytesavail",
++	  .fops =	&ofd_kbytesavail_fops		},
++	{ .name =	"filestotal",
++	  .fops =	&ofd_filestotal_fops		},
++	{ .name =	"filesfree",
++	  .fops =	&ofd_filesfree_fops		},
++	{ .name =	"seqs_allocated",
++	  .fops =	&ofd_seqs_fops			},
++	{ .name =	"fstype",
++	  .fops =	&ofd_fstype_fops		},
++	{ .name =	"last_id",
++	  .fops =	&ofd_last_id_fops		},
++	{ .name =	"tot_dirty",
++	  .fops =	&ofd_tot_dirty_fops		},
++	{ .name =	"tot_pending",
++	  .fops =	&ofd_tot_pending_fops		},
++	{ .name =	"tot_granted",
++	  .fops =	&ofd_tot_granted_fops		},
++	{ .name =	"grant_precreate",
++	  .fops =	&ofd_grant_precreate_fops	},
++	{ .name =	"grant_ratio",
++	  .fops =	&ofd_grant_ratio_fops		},
++	{ .name =	"precreate_batch",
++	  .fops =	&ofd_precreate_batch_fops	},
++	{ .name =	"recovery_status",
++	  .fops =	&ofd_recovery_status_fops	},
++	{ .name =	"recovery_time_soft",
++	  .fops =	&ofd_recovery_time_soft_fops	},
++	{ .name =	"recovery_time_hard",
++	  .fops =	&ofd_recovery_time_hard_fops	},
++	{ .name =	"evict_client",
++	  .fops =	&ofd_evict_client_fops		},
++	{ .name =	"num_exports",
++	  .fops =	&ofd_num_exports_fops		},
++	{ .name =	"degraded",
++	  .fops =	&ofd_degraded_fops		},
++	{ .name =	"sync_journal",
++	  .fops =	&ofd_syncjournal_fops		},
++	{ .name =	"sync_on_lock_cancel",
++	  .fops =	&ofd_sync_lock_cancel_fops	},
++	{ .name =	"instance",
++	  .fops =	&ofd_target_instance_fops	},
++	{ .name =	"ir_factor",
++	  .fops =	&ofd_ir_factor_fops		},
++	{ .name =	"grant_compat_disable",
++	  .fops =	&ofd_grant_compat_disable_fops	},
++	{ .name =	"client_cache_count",
++	  .fops =	&ofd_fmd_max_num_fops		},
++	{ .name =	"client_cache_seconds",
++	  .fops =	&ofd_fmd_max_age_fops		},
++	{ .name =	"capa",
++	  .fops =	&ofd_capa_fops			},
++	{ .name =	"capa_count",
++	  .fops =	&ofd_capa_count_fops		},
++	{ .name =	"job_cleanup_interval",
++	  .fops =	&ofd_job_interval_fops		},
++	{ .name =	"soft_sync_limit",
++	  .fops =	&ofd_soft_sync_limit_fops	},
++	{ .name	=	"lfsck_speed_limit",
++	  .fops	=	&ofd_lfsck_speed_limit_fops	},
++	{ .name	=	"lfsck_layout",
++	  .fops	=	&ofd_lfsck_layout_fops		},
+ 	{ 0 }
+ };
+ 
+-void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	lvars->module_vars  = lprocfs_ofd_module_vars;
+-	lvars->obd_vars     = lprocfs_ofd_obd_vars;
+-}
+-
+ void ofd_stats_counter_init(struct lprocfs_stats *stats)
+ {
+ 	LASSERT(stats && stats->ls_num >= LPROC_OFD_STATS_LAST);
+diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
+index 3559991..f59f843 100644
+--- a/lustre/ofd/ofd_dev.c
++++ b/lustre/ofd/ofd_dev.c
+@@ -240,8 +240,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
+ 
+ 	switch (cfg->lcfg_command) {
+ 	case LCFG_PARAM: {
+-		struct lprocfs_static_vars lvars;
+-
++		struct obd_device	*obd = ofd_obd(m);
+ 		/* For interoperability */
+ 		struct cfg_interop_param   *ptr = NULL;
+ 		struct lustre_cfg	   *old_cfg = NULL;
+@@ -279,8 +278,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
+ 			break;
+ 		}
+ 
+-		lprocfs_ofd_init_vars(&lvars);
+-		rc = class_process_proc_param(PARAM_OST, lvars.obd_vars, cfg,
++		rc = class_process_proc_seq_param(PARAM_OST, obd->obd_vars, cfg,
+ 					      d->ld_obd);
+ 		if (rc > 0 || rc == -ENOSYS) {
+ 			CDEBUG(D_CONFIG, "pass param %s down the stack.\n",
+@@ -492,9 +490,10 @@ static struct lu_device_operations ofd_lu_ops = {
+ 	.ldo_prepare		= ofd_prepare,
+ };
+ 
++LPROC_SEQ_FOPS(lprocfs_nid_stats_clear);
++
+ static int ofd_procfs_init(struct ofd_device *ofd)
+ {
+-	struct lprocfs_static_vars	 lvars;
+ 	struct obd_device		*obd = ofd_obd(ofd);
+ 	cfs_proc_dir_entry_t		*entry;
+ 	int				 rc = 0;
+@@ -503,8 +502,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 
+ 	/* lprocfs must be setup before the ofd so state can be safely added
+ 	 * to /proc incrementally as the ofd is setup */
+-	lprocfs_ofd_init_vars(&lvars);
+-	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
++	obd->obd_vars = lprocfs_ofd_obd_vars;
++	rc = lprocfs_seq_obd_setup(obd);
+ 	if (rc) {
+ 		CERROR("%s: lprocfs_obd_setup failed: %d.\n",
+ 		       obd->obd_name, rc);
+@@ -520,7 +519,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 
+ 	obd->obd_uses_nid_stats = 1;
+ 
+-	entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL);
++	entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL, NULL);
+ 	if (IS_ERR(entry)) {
+ 		rc = PTR_ERR(entry);
+ 		CERROR("%s: error %d setting up lprocfs for %s\n",
+@@ -530,8 +529,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 	obd->obd_proc_exports_entry = entry;
+ 
+ 	entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
+-				   lprocfs_nid_stats_clear_read,
+-				   lprocfs_nid_stats_clear_write, obd, NULL);
++#ifndef HAVE_ONLY_PROCFS_SEQ
++				   NULL, NULL,
++#endif
++				   obd, &lprocfs_nid_stats_clear_fops);
+ 	if (IS_ERR(entry)) {
+ 		rc = PTR_ERR(entry);
+ 		CERROR("%s: add proc entry 'clear' failed: %d.\n",
+@@ -547,7 +548,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 		GOTO(remove_entry_clear, rc);
+ 	RETURN(0);
+ remove_entry_clear:
+-	lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
++	lprocfs_remove(&obd->obd_proc_exports_entry);
+ obd_cleanup:
+ 	lprocfs_obd_cleanup(obd);
+ 	lprocfs_free_obd_stats(obd);
+@@ -560,29 +561,28 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+ 	struct obd_device	*obd = ofd_obd(ofd);
+ 	struct obd_device	*osd_obd = ofd->ofd_osd_exp->exp_obd;
+ 	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
+-	cfs_proc_dir_entry_t	*osd_dir;
++	cfs_proc_dir_entry_t	*osd_dir = osd_obd->obd_type->typ_procsym;
+ 
+-	osd_dir = lprocfs_srch(osd_root, obd->obd_name);
+ 	if (osd_dir == NULL)
+ 		return;
+ 
+-	if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
++	//if (lprocfs_srch(osd_dir, "brw_stats") != NULL)
+ 		lprocfs_add_symlink("brw_stats", obd->obd_proc_entry,
+ 				    "../../%s/%s/brw_stats",
+ 				    osd_root->name, osd_dir->name);
+ 
+-	if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL)
++	//if (lprocfs_srch(osd_dir, "read_cache_enable") != NULL)
+ 		lprocfs_add_symlink("read_cache_enable", obd->obd_proc_entry,
+ 				    "../../%s/%s/read_cache_enable",
+ 				    osd_root->name, osd_dir->name);
+ 
+-	if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL)
++	//if (lprocfs_srch(osd_dir, "readcache_max_filesize") != NULL)
+ 		lprocfs_add_symlink("readcache_max_filesize",
+ 				    obd->obd_proc_entry,
+ 				    "../../%s/%s/readcache_max_filesize",
+ 				    osd_root->name, osd_dir->name);
+ 
+-	if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL)
++	//if (lprocfs_srch(osd_dir, "writethrough_cache_enable") != NULL)
+ 		lprocfs_add_symlink("writethrough_cache_enable",
+ 				    obd->obd_proc_entry,
+ 				    "../../%s/%s/writethrough_cache_enable",
+@@ -593,13 +593,8 @@ static void ofd_procfs_fini(struct ofd_device *ofd)
+ {
+ 	struct obd_device *obd = ofd_obd(ofd);
+ 
+-	lprocfs_remove_proc_entry("writethrough_cache_enable",
+-				  obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("readcache_max_filesize",
+-				  obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("read_cache_enable", obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("brw_stats", obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
++	lprocfs_remove(&obd->obd_proc_exports_entry);
++	lprocfs_remove(&obd->obd_proc_entry);
+ 	lprocfs_free_per_client_stats(obd);
+ 	lprocfs_obd_cleanup(obd);
+ 	lprocfs_free_obd_stats(obd);
+@@ -2363,7 +2358,6 @@ static struct lu_device_type ofd_device_type = {
+ 
+ int __init ofd_init(void)
+ {
+-	struct lprocfs_static_vars	lvars;
+ 	int				rc;
+ 
+ 	rc = lu_kmem_init(ofd_caches);
+@@ -2376,11 +2370,9 @@ int __init ofd_init(void)
+ 		return(rc);
+ 	}
+ 
+-	lprocfs_ofd_init_vars(&lvars);
+-
+ 	rc = class_register_type(&ofd_obd_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_OST_NAME, &ofd_device_type);
+ 	return rc;
+diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
+index b22ceec..79dfaa9 100644
+--- a/lustre/ofd/ofd_internal.h
++++ b/lustre/ofd/ofd_internal.h
+@@ -390,13 +390,9 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
+ 
+ /* lproc_ofd.c */
+ #ifdef LPROCFS
+-void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars);
++extern struct lprocfs_seq_vars lprocfs_ofd_obd_vars[];
+ void ofd_stats_counter_init(struct lprocfs_stats *stats);
+ #else
+-static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	memset(lvars, 0, sizeof(*lvars));
+-}
+ static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
+ #endif
+ 
+diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
+index 6f369d0..9027533 100644
+--- a/lustre/osd-ldiskfs/osd_handler.c
++++ b/lustre/osd-ldiskfs/osd_handler.c
+@@ -5882,6 +5882,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+ 	osd->od_connects++;
+ 	spin_unlock(&osd->od_osfs_lock);
+ 
++	obd->obd_type->typ_procsym = osd->od_proc_entry;
+ 	RETURN(0);
+ }
+ 
+diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
+index 36bf6a4..40d2c67 100644
+--- a/lustre/osd-zfs/osd_handler.c
++++ b/lustre/osd-zfs/osd_handler.c
+@@ -813,6 +813,7 @@ static int osd_obd_connect(const struct lu_env *env, struct obd_export **exp,
+ 	osd->od_connects++;
+ 	spin_unlock(&osd->od_objset.lock);
+ 
++	obd->obd_type->typ_procsym = osd->od_proc_entry;
+ 	RETURN(0);
+ }
+ 
+-- 
+1.8.5.3
+

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
deleted file mode 100644
index 59eeb06..0000000
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
+++ /dev/null
@@ -1,174 +0,0 @@
-From 917c26236db7d3684733f693ccc579c3dd41f26c Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 09:48:08 -0500
-Subject: [PATCH 09/18] LU-3319 procfs: move ost proc handling over to seq_file
-
-Most of the current proc handling of the OST is already
-based on seq_file handling except for the reporting of
-the UUID of the OST. This patch moves this last piece
-so that the OST layer will use strictly proc files with
-seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Idf2bc014ada9292d545f761aa27c777412a66671
----
- lustre/ost/Makefile.in    |  2 +-
- lustre/ost/lproc_ost.c    | 58 -----------------------------------------------
- lustre/ost/ost_handler.c  | 21 +++++++++++------
- lustre/ost/ost_internal.h |  9 --------
- 4 files changed, 15 insertions(+), 75 deletions(-)
- delete mode 100644 lustre/ost/lproc_ost.c
-
-diff --git a/lustre/ost/Makefile.in b/lustre/ost/Makefile.in
-index 6bd8be3..bae023e 100644
---- a/lustre/ost/Makefile.in
-+++ b/lustre/ost/Makefile.in
-@@ -1,5 +1,5 @@
- MODULES := ost
--ost-objs := ost_handler.o lproc_ost.o
-+ost-objs := ost_handler.o
- 
- EXTRA_DIST = $(ost-objs:%.o=%.c) ost_internal.h
- 
-diff --git a/lustre/ost/lproc_ost.c b/lustre/ost/lproc_ost.c
-deleted file mode 100644
-index a978c51..0000000
---- a/lustre/ost/lproc_ost.c
-+++ /dev/null
-@@ -1,58 +0,0 @@
--/*
-- * GPL HEADER START
-- *
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 only,
-- * as published by the Free Software Foundation.
-- *
-- * 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 version 2 for more details (a copy is included
-- * in the LICENSE file that accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License
-- * version 2 along with this program; If not, see
-- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
-- *
-- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-- * CA 95054 USA or visit www.sun.com if you need additional information or
-- * have any questions.
-- *
-- * GPL HEADER END
-- */
--/*
-- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
-- * Use is subject to license terms.
-- */
--/*
-- * This file is part of Lustre, http://www.lustre.org/
-- * Lustre is a trademark of Sun Microsystems, Inc.
-- */
--#define DEBUG_SUBSYSTEM S_OST
--
--#include <obd_class.h>
--#include <lprocfs_status.h>
--#include <linux/seq_file.h>
--#include "ost_internal.h"
--
--#ifdef LPROCFS
--static struct lprocfs_vars lprocfs_ost_obd_vars[] = {
--        { "uuid",            lprocfs_rd_uuid,   0, 0 },
--        { 0 }
--};
--
--static struct lprocfs_vars lprocfs_ost_module_vars[] = {
--        { "num_refs",       lprocfs_rd_numrefs, 0, 0 },
--        { 0 }
--};
--
--void lprocfs_ost_init_vars(struct lprocfs_static_vars *lvars)
--{
--    lvars->module_vars  = lprocfs_ost_module_vars;
--    lvars->obd_vars     = lprocfs_ost_obd_vars;
--}
--
--#endif /* LPROCFS */
-diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
-index 662a489..7567acf 100644
---- a/lustre/ost/ost_handler.c
-+++ b/lustre/ost/ost_handler.c
-@@ -538,12 +538,20 @@ static int ost_io_hpreq_handler(struct ptlrpc_request *req)
- 
- static struct cfs_cpt_table	*ost_io_cptable;
- 
-+#ifdef LPROCFS
-+LPROC_SEQ_FOPS_RO_TYPE(ost, uuid);
-+
-+static struct lprocfs_seq_vars lprocfs_ost_obd_vars[] = {
-+	{ "uuid",	&ost_uuid_fops	},
-+	{ 0 }
-+};
-+#endif /* LPROCFS */
-+
- /* Sigh - really, this is an OSS, the _server_, not the _target_ */
- static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
- {
- 	static struct ptlrpc_service_conf	svc_conf;
- 	struct ost_obd *ost = &obd->u.ost;
--	struct lprocfs_static_vars lvars;
- 	nodemask_t		*mask;
- 	int rc;
- 	ENTRY;
-@@ -552,9 +560,10 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
-         if (rc)
-                 RETURN(rc);
- 
--        lprocfs_ost_init_vars(&lvars);
--        lprocfs_obd_setup(obd, lvars.obd_vars);
--
-+#ifdef LPROCFS
-+	obd->obd_vars = lprocfs_ost_obd_vars;
-+	lprocfs_seq_obd_setup(obd);
-+#endif
- 	mutex_init(&ost->ost_health_mutex);
- 
- 	svc_conf = (typeof(svc_conf)) {
-@@ -877,15 +886,13 @@ static struct obd_ops ost_obd_ops = {
- 
- static int __init ost_init(void)
- {
--	struct lprocfs_static_vars lvars;
- 	int rc;
- 
- 	ENTRY;
- 
--        lprocfs_ost_init_vars(&lvars);
- 	rc = class_register_type(&ost_obd_ops, NULL, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
- #endif
- 				LUSTRE_OSS_NAME, NULL);
- 
-diff --git a/lustre/ost/ost_internal.h b/lustre/ost/ost_internal.h
-index 8b475a1..63c8415 100644
---- a/lustre/ost/ost_internal.h
-+++ b/lustre/ost/ost_internal.h
-@@ -39,13 +39,4 @@
- 
- #define OSS_SERVICE_WATCHDOG_FACTOR 2
- 
--#ifdef LPROCFS
--void lprocfs_ost_init_vars(struct lprocfs_static_vars *lvars);
--#else
--static void lprocfs_ost_init_vars(struct lprocfs_static_vars *lvars)
--{
--        memset(lvars, 0, sizeof(*lvars));
--}
--#endif
--
- #endif /* OST_INTERNAL_H */
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
similarity index 79%
rename from sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
rename to sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index c74a18b..acfa04f 100644
--- a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,7 +1,7 @@
-From 40b657155058d824c3ef8e4f22955eacca5eeb79 Mon Sep 17 00:00:00 2001
+From 5a0b800373ce5e05f6ac64686e6381f7d2706044 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 19:41:12 -0500
-Subject: [PATCH 18/18] LU-3319 procfs: update ldiskfs proc handling to
+Date: Fri, 31 Jan 2014 10:38:14 -0500
+Subject: [PATCH 10/13] LU-3319 procfs: update ldiskfs proc handling to
  seq_files
 
 Migrate all ldiskfs proc handling to using strictly
@@ -10,58 +10,103 @@ seq_files.
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
 ---
- lustre/osd-ldiskfs/osd_handler.c  |   7 +-
+ lustre/osd-ldiskfs/osd_compat.c   |   6 +-
+ lustre/osd-ldiskfs/osd_handler.c  |  16 +-
  lustre/osd-ldiskfs/osd_internal.h |   6 +-
- lustre/osd-ldiskfs/osd_lproc.c    | 321 +++++++++++++++++++-------------------
- lustre/osd-ldiskfs/osd_scrub.c    |  73 +++------
- 4 files changed, 192 insertions(+), 215 deletions(-)
+ lustre/osd-ldiskfs/osd_lproc.c    | 338 ++++++++++++++++++++------------------
+ lustre/osd-ldiskfs/osd_scrub.c    |  73 +++-----
+ 5 files changed, 222 insertions(+), 217 deletions(-)
 
+diff --git a/lustre/osd-ldiskfs/osd_compat.c b/lustre/osd-ldiskfs/osd_compat.c
+index b4a018c..6ca1304 100644
+--- a/lustre/osd-ldiskfs/osd_compat.c
++++ b/lustre/osd-ldiskfs/osd_compat.c
+@@ -1168,7 +1168,7 @@ int osd_obj_spec_update(struct osd_thread_info *info, struct osd_device *osd,
+ 			handle_t *th)
+ {
+ 	struct dentry	*root;
+-	char		*name;
++	char		*name = NULL;
+ 	int		 rc;
+ 	ENTRY;
+ 
+@@ -1189,7 +1189,7 @@ int osd_obj_spec_insert(struct osd_thread_info *info, struct osd_device *osd,
+ 			handle_t *th)
+ {
+ 	struct dentry	*root;
+-	char		*name;
++	char		*name = NULL;
+ 	int		 rc;
+ 	ENTRY;
+ 
+@@ -1211,7 +1211,7 @@ int osd_obj_spec_lookup(struct osd_thread_info *info, struct osd_device *osd,
+ 	struct dentry	*root;
+ 	struct dentry	*dentry;
+ 	struct inode	*inode;
+-	char		*name;
++	char		*name = NULL;
+ 	int		rc = -ENOENT;
+ 	ENTRY;
+ 
 diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
-index c13c682..7f8748d 100644
+index 9027533..dfaa542 100644
 --- a/lustre/osd-ldiskfs/osd_handler.c
 +++ b/lustre/osd-ldiskfs/osd_handler.c
-@@ -5820,19 +5820,18 @@ static struct obd_ops osd_obd_device_ops = {
- 
- static int __init osd_mod_init(void)
+@@ -5814,6 +5814,7 @@ static struct lu_device *osd_device_free(const struct lu_env *env,
+ static int osd_process_config(const struct lu_env *env,
+                               struct lu_device *d, struct lustre_cfg *cfg)
  {
--        struct lprocfs_static_vars lvars;
- 	int rc;
- 
- 	osd_oi_mod_init();
--	lprocfs_osd_init_vars(&lvars);
- 
- 	rc = lu_kmem_init(ldiskfs_caches);
++	struct obd_device		*obd = d->ld_obd;
+ 	struct osd_device		*o = osd_dev(d);
+ 	int				rc;
+ 	ENTRY;
+@@ -5828,12 +5829,12 @@ static int osd_process_config(const struct lu_env *env,
+ 		break;
+ 	case LCFG_PARAM:
+ 		LASSERT(&o->od_dt_dev);
+-		rc = class_process_proc_param(PARAM_OSD, lprocfs_osd_obd_vars,
+-					      cfg, &o->od_dt_dev);
++		rc = class_process_proc_seq_param(PARAM_OSD, obd->obd_vars,
++						  cfg, &o->od_dt_dev);
+ 		if (rc > 0 || rc == -ENOSYS)
+-			rc = class_process_proc_param(PARAM_OST,
+-						      lprocfs_osd_obd_vars,
+-						      cfg, &o->od_dt_dev);
++			rc = class_process_proc_seq_param(PARAM_OST,
++							  obd->obd_vars, cfg,
++							  &o->od_dt_dev);
+ 		break;
+ 	default:
+ 		rc = -ENOSYS;
+@@ -5981,9 +5982,10 @@ static int __init osd_mod_init(void)
  	if (rc)
  		return rc;
  
 -	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
+-#ifndef HAVE_ONLY_PROCFS_SEQ
 +	rc = class_register_type(&osd_obd_device_ops, NULL,
-+				lprocfs_osd_module_vars,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
+ 				lprocfs_osd_module_vars,
++#ifndef HAVE_ONLY_PROCFS_SEQ
 +				NULL,
  #endif
  				LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
  	if (rc)
 diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h
-index 8d5ca40..35d1b10 100644
+index 8436d1f..c90147f 100644
 --- a/lustre/osd-ldiskfs/osd_internal.h
 +++ b/lustre/osd-ldiskfs/osd_internal.h
-@@ -623,11 +623,11 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
+@@ -623,8 +623,8 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
  
  #ifdef LPROCFS
  /* osd_lproc.c */
--void lprocfs_osd_init_vars(struct lprocfs_static_vars *lvars);
+-extern struct lprocfs_vars lprocfs_osd_obd_vars[];
+-extern struct lprocfs_vars lprocfs_osd_module_vars[];
++extern struct lprocfs_seq_vars lprocfs_osd_obd_vars[];
 +extern struct lprocfs_seq_vars lprocfs_osd_module_vars[];
-+
  int osd_procfs_init(struct osd_device *osd, const char *name);
  int osd_procfs_fini(struct osd_device *osd);
  void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf);
--
- #endif
- int osd_statfs(const struct lu_env *env, struct dt_device *dev,
-                struct obd_statfs *sfs);
-@@ -678,7 +678,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
+@@ -679,7 +679,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
  		   int insert);
  int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid,
  		   struct osd_inode_id *id);
@@ -71,16 +116,15 @@ index 8d5ca40..35d1b10 100644
  int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd,
  		   obd_seq seq, struct lu_seq_range *range);
 diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c
-index 83bb586..528f60e 100644
+index b9b4e3d..67f3423 100644
 --- a/lustre/osd-ldiskfs/osd_lproc.c
 +++ b/lustre/osd-ldiskfs/osd_lproc.c
-@@ -237,93 +237,45 @@ out:
+@@ -237,92 +237,46 @@ out:
          RETURN(result);
  }
  
 -int osd_procfs_init(struct osd_device *osd, const char *name)
 -{
--        struct lprocfs_static_vars lvars;
 -        struct obd_type     *type;
 -        int                  rc;
 -        ENTRY;
@@ -93,9 +137,9 @@ index 83bb586..528f60e 100644
 -        LASSERT(type != NULL);
 -
 -        /* Find the type procroot and add the proc entry for this device */
--        lprocfs_osd_init_vars(&lvars);
 -        osd->od_proc_entry = lprocfs_register(name, type->typ_procroot,
--                                              lvars.obd_vars, &osd->od_dt_dev);
+-					      lprocfs_osd_obd_vars,
+-					      &osd->od_dt_dev);
 -        if (IS_ERR(osd->od_proc_entry)) {
 -                rc = PTR_ERR(osd->od_proc_entry);
 -                CERROR("Error %d setting up lprocfs for %s\n",
@@ -155,7 +199,7 @@ index 83bb586..528f60e 100644
 +		return -EINPROGRESS;
  
 -	return snprintf(page, count, "%s\n", osd->od_mntdev);
-+	return seq_printf(m, "%s\n", osd->od_mntdev);
++	return seq_printf(m, "%u\n", osd->od_read_cache);
  }
 +LPROC_SEQ_FOPS_RO(ldiskfs_osd_mntdev);
  
@@ -178,17 +222,18 @@ index 83bb586..528f60e 100644
 -				unsigned long count, void *data)
 +static ssize_t
 +ldiskfs_osd_cache_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
++			    size_t count, loff_t *off)
  {
 -	struct osd_device	*osd = osd_dt_dev(data);
 -	int			 val, rc;
-+	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct seq_file *m = file->private_data;
++	struct dt_device  *dt = m->private;
 +	struct osd_device *osd = osd_dt_dev(dt);
 +	int		   val, rc;
  
  	LASSERT(osd != NULL);
  	if (unlikely(osd->od_mnt == NULL))
-@@ -336,24 +288,26 @@ static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
+@@ -335,24 +289,26 @@ static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
  	osd->od_read_cache = !!val;
  	return count;
  }
@@ -223,7 +268,7 @@ index 83bb586..528f60e 100644
  
  	LASSERT(osd != NULL);
  	if (unlikely(osd->od_mnt == NULL))
-@@ -366,14 +320,16 @@ static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
+@@ -365,14 +321,16 @@ static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
  	osd->od_writethrough_cache = !!val;
  	return count;
  }
@@ -246,7 +291,7 @@ index 83bb586..528f60e 100644
  
  	LASSERT(osd != NULL);
  	if (unlikely(osd->od_mnt == NULL))
-@@ -387,20 +343,18 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+@@ -386,20 +344,18 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
  
  	return rc == 0 ? count : rc;
  }
@@ -274,7 +319,7 @@ index 83bb586..528f60e 100644
  
          rc = lprocfs_write_helper(buffer, count, &pdo);
          if (rc != 0)
-@@ -410,24 +364,25 @@ static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
+@@ -409,24 +365,25 @@ static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
  
          return count;
  }
@@ -308,7 +353,7 @@ index 83bb586..528f60e 100644
  	int val, rc;
  
  	LASSERT(dev != NULL);
-@@ -441,19 +396,18 @@ static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
+@@ -440,19 +397,18 @@ static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
  	dev->od_noscrub = !val;
  	return count;
  }
@@ -335,7 +380,7 @@ index 83bb586..528f60e 100644
  {
  	int     track_declares_assert;
  	int     rc;
-@@ -466,38 +420,39 @@ static int lprocfs_osd_wr_track_declares_assert(struct file *file,
+@@ -465,38 +421,39 @@ static int lprocfs_osd_wr_track_declares_assert(struct file *file,
  
  	return count;
  }
@@ -389,7 +434,7 @@ index 83bb586..528f60e 100644
  	__u64			 val;
  	int			 rc;
  
-@@ -513,24 +468,25 @@ int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
+@@ -512,24 +469,25 @@ int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
  					 OSD_MAX_CACHE_SIZE : val;
  	return count;
  }
@@ -423,7 +468,7 @@ index 83bb586..528f60e 100644
  	int		   val;
  	int		   rc;
  
-@@ -545,43 +501,86 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
+@@ -544,38 +502,104 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
  	dev->od_lma_self_repair = !!val;
  	return count;
  }
@@ -459,23 +504,39 @@ index 83bb586..528f60e 100644
 +LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filestotal);
 +LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filesfree);
 +
-+static struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
-+	{ "blocksize",			&ldiskfs_dt_blksize_fops	},
-+	{ "kbytestotal",		&ldiskfs_dt_kbytestotal_fops	},
-+	{ "kbytesfree",			&ldiskfs_dt_kbytesfree_fops	},
-+	{ "kbytesavail",		&ldiskfs_dt_kbytesavail_fops	},
-+	{ "filestotal",			&ldiskfs_dt_filestotal_fops	},
-+	{ "filesfree",			&ldiskfs_dt_filesfree_fops	},
-+	{ "fstype",			&ldiskfs_osd_fstype_fops	},
-+	{ "mntdev",			&ldiskfs_osd_mntdev_fops	},
-+	{ "force_sync",			&ldiskfs_osd_force_sync_fops	},
-+	{ "pdo",			&ldiskfs_osd_pdo_fops		},
-+	{ "auto_scrub",			&ldiskfs_osd_auto_scrub_fops	},
-+	{ "oi_scrub",			&ldiskfs_osd_oi_scrub_fops	},
-+	{ "read_cache_enable",		&ldiskfs_osd_cache_fops		},
-+	{ "writethrough_cache_enable",	&ldiskfs_osd_wcache_fops	},
-+	{ "readcache_max_filesize",	&ldiskfs_osd_readcache_fops	},
-+	{ "lma_self_repair",		&ldiskfs_osd_lma_self_repair_fops },
++struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
++	{ .name	=	"blocksize",
++	  .fops	=	&ldiskfs_dt_blksize_fops	},
++	{ .name	=	"kbytestotal",
++	  .fops	=	&ldiskfs_dt_kbytestotal_fops	},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&ldiskfs_dt_kbytesfree_fops	},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&ldiskfs_dt_kbytesavail_fops	},
++	{ .name	=	"filestotal",
++	  .fops	=	&ldiskfs_dt_filestotal_fops	},
++	{ .name	=	"filesfree",
++	  .fops	=	&ldiskfs_dt_filesfree_fops	},
++	{ .name	=	"fstype",
++	  .fops	=	&ldiskfs_osd_fstype_fops	},
++	{ .name	=	"mntdev",
++	  .fops	=	&ldiskfs_osd_mntdev_fops	},
++	{ .name	=	"force_sync",
++	  .fops	=	&ldiskfs_osd_force_sync_fops	},
++	{ .name	=	"pdo",
++	  .fops	=	&ldiskfs_osd_pdo_fops		},
++	{ .name	=	"auto_scrub",
++	  .fops	=	&ldiskfs_osd_auto_scrub_fops	},
++	{ .name	=	"oi_scrub",
++	  .fops	=	&ldiskfs_osd_oi_scrub_fops	},
++	{ .name	=	"read_cache_enable",
++	  .fops	=	&ldiskfs_osd_cache_fops		},
++	{ .name	=	"writethrough_cache_enable",
++	  .fops	=	&ldiskfs_osd_wcache_fops	},
++	{ .name	=	"readcache_max_filesize",
++	  .fops	=	&ldiskfs_osd_readcache_fops	},
++	{ .name	=	"lma_self_repair",
++	  .fops	=	&ldiskfs_osd_lma_self_repair_fops	},
  	{ 0 }
  };
  
@@ -486,11 +547,12 @@ index 83bb586..528f60e 100644
 -					0 },
 -        { 0 }
 +struct lprocfs_seq_vars lprocfs_osd_module_vars[] = {
-+	{ "track_declares_assert", &ldiskfs_osd_track_declares_assert_fops },
++	{ .name	=	"track_declares_assert",
++	  .fops	=	&ldiskfs_osd_track_declares_assert_fops		},
 +	{ 0 }
  };
  
--void lprocfs_osd_init_vars(struct lprocfs_static_vars *lvars)
++
 +int osd_procfs_init(struct osd_device *osd, const char *name)
 +{
 +	struct obd_type	*type;
@@ -509,12 +571,12 @@ index 83bb586..528f60e 100644
 +
 +	/* Find the type procroot and add the proc entry for this device */
 +	osd->od_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
-+						lprocfs_osd_obd_vars,
-+						&osd->od_dt_dev);
++						  lprocfs_osd_obd_vars,
++						  &osd->od_dt_dev);
 +	if (IS_ERR(osd->od_proc_entry)) {
 +		rc = PTR_ERR(osd->od_proc_entry);
 +		CERROR("Error %d setting up lprocfs for %s\n",
-+			rc, name);
++		       rc, name);
 +		osd->od_proc_entry = NULL;
 +		GOTO(out, rc);
 +	}
@@ -529,9 +591,7 @@ index 83bb586..528f60e 100644
 +}
 +
 +int osd_procfs_fini(struct osd_device *osd)
- {
--        lvars->module_vars = lprocfs_osd_module_vars;
--        lvars->obd_vars = lprocfs_osd_obd_vars;
++{
 +	if (osd->od_stats)
 +		lprocfs_free_stats(&osd->od_stats);
 +
@@ -540,13 +600,13 @@ index 83bb586..528f60e 100644
 +		osd->od_proc_entry = NULL;
 +	}
 +	RETURN(0);
- }
++}
  #endif
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 18a0a2a..38f5d29 100644
+index cce33af..1002913 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -2508,80 +2508,69 @@ static const char *scrub_param_names[] = {
+@@ -2578,80 +2578,69 @@ static const char *scrub_param_names[] = {
  	NULL
  };
  
@@ -641,7 +701,7 @@ index 18a0a2a..38f5d29 100644
  		      "name: OI_scrub\n"
  		      "magic: 0x%x\n"
  		      "oi_files: %d\n"
-@@ -2591,51 +2580,48 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2661,51 +2650,48 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	if (rc <= 0)
  		goto out;
  
@@ -702,7 +762,7 @@ index 18a0a2a..38f5d29 100644
  		      "updated: "LPU64"\n"
  		      "failed: "LPU64"\n"
  		      "prior_updated: "LPU64"\n"
-@@ -2648,8 +2634,6 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2718,8 +2704,6 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	if (rc <= 0)
  		goto out;
  
@@ -711,7 +771,7 @@ index 18a0a2a..38f5d29 100644
  	speed = checked;
  	if (thread_is_running(&scrub->os_thread)) {
  		cfs_duration_t duration = cfs_time_current() -
-@@ -2662,8 +2646,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2732,8 +2716,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  			do_div(new_checked, duration);
  		if (rtime != 0)
  			do_div(speed, rtime);
@@ -721,7 +781,7 @@ index 18a0a2a..38f5d29 100644
  			      "average_speed: "LPU64" objects/sec\n"
  			      "real-time_speed: "LPU64" objects/sec\n"
  			      "current_position: %u\n"
-@@ -2676,8 +2659,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2746,8 +2729,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	} else {
  		if (sf->sf_run_time != 0)
  			do_div(speed, sf->sf_run_time);
@@ -731,7 +791,7 @@ index 18a0a2a..38f5d29 100644
  			      "average_speed: "LPU64" objects/sec\n"
  			      "real-time_speed: N/A\n"
  			      "current_position: N/A\n"
-@@ -2689,10 +2671,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+@@ -2759,10 +2741,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
  	}
  	if (rc <= 0)
  		goto out;
@@ -744,5 +804,5 @@ index 18a0a2a..38f5d29 100644
  out:
  	up_read(&scrub->os_rwsem);
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch
deleted file mode 100644
index 01afb45..0000000
--- a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch
+++ /dev/null
@@ -1,1260 +0,0 @@
-From 7ae65a1edcb16232d34ead46860f6390ce93f583 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 3 Dec 2013 16:30:21 -0500
-Subject: [PATCH 10/18] LU-3319 procfs: update shared server side core proc
- handling to seq_files
-
-Several of the server side abstact layers such as mdt,mgs
-etc share several common proc handling routines. This patch
-adds the seq_file version so that the stack can gradually
-be ported over to these new methods.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I2dd64046fdd4d2bb6f7550bb49cf1c9ef703c157
----
- libcfs/include/libcfs/libcfs_hash.h |   5 +
- libcfs/libcfs/hash.c                |  80 ++++++
- lustre/include/dt_object.h          |   8 +
- lustre/include/lprocfs_status.h     | 101 ++++++--
- lustre/obdclass/dt_object.c         |  96 +++++++-
- lustre/obdclass/lprocfs_jobstats.c  |  47 +++-
- lustre/obdclass/lprocfs_status.c    | 467 ++++++++++++++++++++++++++++++++----
- lustre/ptlrpc/lproc_ptlrpc.c        |  43 ----
- 8 files changed, 724 insertions(+), 123 deletions(-)
-
-diff --git a/libcfs/include/libcfs/libcfs_hash.h b/libcfs/include/libcfs/libcfs_hash.h
-index e7d2dc8..07a12f6 100644
---- a/libcfs/include/libcfs/libcfs_hash.h
-+++ b/libcfs/include/libcfs/libcfs_hash.h
-@@ -840,8 +840,13 @@ static inline void __cfs_hash_set_theta(cfs_hash_t *hs, int min, int max)
- }
- 
- /* Generic debug formatting routines mainly for proc handler */
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int cfs_hash_debug_header(char *str, int size);
- int cfs_hash_debug_str(cfs_hash_t *hs, char *str, int size);
-+#endif
-+struct seq_file;
-+int cfs_hash_debug_header_seq(struct seq_file *m);
-+int cfs_hash_debug_str_seq(cfs_hash_t *hs, struct seq_file *m);
- 
- /*
-  * Generic djb2 hash algorithm for character arrays.
-diff --git a/libcfs/libcfs/hash.c b/libcfs/libcfs/hash.c
-index 35c64a0..0c4faf8 100644
---- a/libcfs/libcfs/hash.c
-+++ b/libcfs/libcfs/hash.c
-@@ -2026,6 +2026,7 @@ void cfs_hash_rehash_key(cfs_hash_t *hs, const void *old_key,
- }
- EXPORT_SYMBOL(cfs_hash_rehash_key);
- 
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int cfs_hash_debug_header(char *str, int size)
- {
-         return snprintf(str, size, "%-*s%6s%6s%6s%6s%6s%6s%6s%7s%8s%8s%8s%s\n",
-@@ -2035,6 +2036,17 @@ int cfs_hash_debug_header(char *str, int size)
-                  " distribution");
- }
- EXPORT_SYMBOL(cfs_hash_debug_header);
-+#endif
-+
-+int cfs_hash_debug_header_seq(struct seq_file *m)
-+{
-+	return seq_printf(m, "%-*s%6s%6s%6s%6s%6s%6s%6s%7s%8s%8s%8s%s\n",
-+			CFS_HASH_BIGNAME_LEN,
-+			"name", "cur", "min", "max", "theta", "t-min", "t-max",
-+			"flags", "rehash", "count", "maxdep", "maxdepb",
-+			" distribution");
-+}
-+EXPORT_SYMBOL(cfs_hash_debug_header_seq);
- 
- static cfs_hash_bucket_t **
- cfs_hash_full_bkts(cfs_hash_t *hs)
-@@ -2060,6 +2072,7 @@ cfs_hash_full_nbkt(cfs_hash_t *hs)
-                CFS_HASH_RH_NBKT(hs) : CFS_HASH_NBKT(hs);
- }
- 
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int cfs_hash_debug_str(cfs_hash_t *hs, char *str, int size)
- {
-         int                    dist[8] = { 0, };
-@@ -2134,3 +2147,70 @@ int cfs_hash_debug_str(cfs_hash_t *hs, char *str, int size)
-         return c;
- }
- EXPORT_SYMBOL(cfs_hash_debug_str);
-+#endif
-+
-+int cfs_hash_debug_str_seq(cfs_hash_t *hs, struct seq_file *m)
-+{
-+	int	dist[8]	= { 0, };
-+	int	maxdep	= -1;
-+	int	maxdepb	= -1;
-+	int	total	= 0;
-+	int	c	= 0;
-+	int	theta;
-+	int	i;
-+
-+	cfs_hash_lock(hs, 0);
-+	theta = __cfs_hash_theta(hs);
-+
-+	c += seq_printf(m, "%-*s ", CFS_HASH_BIGNAME_LEN, hs->hs_name);
-+	c += seq_printf(m, "%5d ",  1 << hs->hs_cur_bits);
-+	c += seq_printf(m, "%5d ",  1 << hs->hs_min_bits);
-+	c += seq_printf(m, "%5d ",  1 << hs->hs_max_bits);
-+	c += seq_printf(m, "%d.%03d ", __cfs_hash_theta_int(theta),
-+			__cfs_hash_theta_frac(theta));
-+	c += seq_printf(m, "%d.%03d ", __cfs_hash_theta_int(hs->hs_min_theta),
-+			__cfs_hash_theta_frac(hs->hs_min_theta));
-+	c += seq_printf(m, "%d.%03d ", __cfs_hash_theta_int(hs->hs_max_theta),
-+			__cfs_hash_theta_frac(hs->hs_max_theta));
-+	c += seq_printf(m, " 0x%02x ", hs->hs_flags);
-+	c += seq_printf(m, "%6d ", hs->hs_rehash_count);
-+
-+	/*
-+	 * The distribution is a summary of the chained hash depth in
-+	 * each of the libcfs hash buckets.  Each buckets hsb_count is
-+	 * divided by the hash theta value and used to generate a
-+	 * histogram of the hash distribution.  A uniform hash will
-+	 * result in all hash buckets being close to the average thus
-+	 * only the first few entries in the histogram will be non-zero.
-+	 * If you hash function results in a non-uniform hash the will
-+	 * be observable by outlier bucks in the distribution histogram.
-+	 *
-+	 * Uniform hash distribution:		128/128/0/0/0/0/0/0
-+	 * Non-Uniform hash distribution:	128/125/0/0/0/0/2/1
-+	 */
-+	for (i = 0; i < cfs_hash_full_nbkt(hs); i++) {
-+		cfs_hash_bd_t bd;
-+
-+		bd.bd_bucket = cfs_hash_full_bkts(hs)[i];
-+		cfs_hash_bd_lock(hs, &bd, 0);
-+		if (maxdep < bd.bd_bucket->hsb_depmax) {
-+			maxdep  = bd.bd_bucket->hsb_depmax;
-+#ifdef __KERNEL__
-+			maxdepb = ffz(~maxdep);
-+#endif
-+		}
-+		total += bd.bd_bucket->hsb_count;
-+		dist[min(fls(bd.bd_bucket->hsb_count/max(theta,1)),7)]++;
-+		cfs_hash_bd_unlock(hs, &bd, 0);
-+	}
-+
-+	c += seq_printf(m, "%7d ", total);
-+	c += seq_printf(m, "%7d ", maxdep);
-+	c += seq_printf(m, "%7d ", maxdepb);
-+	for (i = 0; i < 8; i++)
-+		c += seq_printf(m, "%d%c",  dist[i], (i == 7) ? '\n' : '/');
-+
-+	cfs_hash_unlock(hs, 0);
-+	return c;
-+}
-+EXPORT_SYMBOL(cfs_hash_debug_str_seq);
-diff --git a/lustre/include/dt_object.h b/lustre/include/dt_object.h
-index bdf559d..ba88a80 100644
---- a/lustre/include/dt_object.h
-+++ b/lustre/include/dt_object.h
-@@ -1489,6 +1489,7 @@ int dt_global_init(void);
- void dt_global_fini(void);
- 
- # ifdef LPROCFS
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_dt_rd_blksize(char *page, char **start, off_t off,
- 			  int count, int *eof, void *data);
- int lprocfs_dt_rd_kbytestotal(char *page, char **start, off_t off,
-@@ -1501,6 +1502,13 @@ int lprocfs_dt_rd_filestotal(char *page, char **start, off_t off,
- 			     int count, int *eof, void *data);
- int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off,
- 			    int count, int *eof, void *data);
-+#endif
-+int lprocfs_dt_blksize_seq_show(struct seq_file *m, void *v);
-+int lprocfs_dt_kbytestotal_seq_show(struct seq_file *m, void *v);
-+int lprocfs_dt_kbytesfree_seq_show(struct seq_file *m, void *v);
-+int lprocfs_dt_kbytesavail_seq_show(struct seq_file *m, void *v);
-+int lprocfs_dt_filestotal_seq_show(struct seq_file *m, void *v);
-+int lprocfs_dt_filesfree_seq_show(struct seq_file *m, void *v);
- # endif /* LPROCFS */
- 
- #endif /* __LUSTRE_DT_OBJECT_H */
-diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h
-index 2080592..70f10a9 100644
---- a/lustre/include/lprocfs_status.h
-+++ b/lustre/include/lprocfs_status.h
-@@ -603,12 +603,19 @@ extern struct proc_dir_entry *
- lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent,
-                     const char *format, ...);
- extern void lprocfs_free_per_client_stats(struct obd_device *obd);
-+#ifdef HAVE_SERVER_SUPPORT
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- extern int
- lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
-                               unsigned long count, void *data);
- extern int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
-                                         int count, int *eof,  void *data);
--
-+#endif
-+extern ssize_t
-+lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off);
-+extern int lprocfs_nid_stats_clear_seq_show(struct seq_file *file, void *data);
-+#endif
- extern int lprocfs_register_stats(cfs_proc_dir_entry_t *root, const char *name,
-                                   struct lprocfs_stats *stats);
- 
-@@ -700,6 +707,9 @@ extern int lprocfs_conn_uuid_seq_show(struct seq_file *m, void *data);
- extern int lprocfs_import_seq_show(struct seq_file *m, void *data);
- extern int lprocfs_state_seq_show(struct seq_file *m, void *data);
- extern int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data);
-+#ifdef HAVE_SERVER_SUPPORT
-+extern int lprocfs_num_exports_seq_show(struct seq_file *m, void *data);
-+#endif
- struct adaptive_timeout;
- #ifndef HAVE_ONLY_PROCFS_SEQ
- extern int lprocfs_at_hist_helper(char *page, int count, int rc,
-@@ -715,9 +725,11 @@ extern int lprocfs_timeouts_seq_show(struct seq_file *m, void *data);
- extern ssize_t
- lprocfs_timeouts_seq_write(struct file *file, const char *buffer,
- 			   size_t count, loff_t *off);
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+#ifdef HAVE_SERVER_SUPPORT
- extern int lprocfs_wr_evict_client(struct file *file, const char *buffer,
-                                    unsigned long count, void *data);
--#ifndef HAVE_ONLY_PROCFS_SEQ
-+#endif
- extern int lprocfs_wr_ping(struct file *file, const char *buffer,
-                            unsigned long count, void *data);
- extern int lprocfs_wr_import(struct file *file, const char *buffer,
-@@ -727,6 +739,11 @@ extern int lprocfs_rd_pinger_recov(char *page, char **start, off_t off,
- extern int lprocfs_wr_pinger_recov(struct file *file, const char *buffer,
-                                    unsigned long count, void *data);
- #endif
-+#ifdef HAVE_SERVER_SUPPORT
-+extern ssize_t
-+lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off);
-+#endif
- extern ssize_t
- lprocfs_ping_seq_write(struct file *file, const char *buffer,
- 		       size_t count, loff_t *off);
-@@ -785,10 +802,10 @@ void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx,
-                            struct lprocfs_counter *cnt);
- 
- #ifdef HAVE_SERVER_SUPPORT
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- /* lprocfs_status.c: recovery status */
- int lprocfs_obd_rd_recovery_status(char *page, char **start, off_t off,
-                                    int count, int *eof, void *data);
--#endif
- /* lprocfs_statuc.c: hash statistics */
- int lprocfs_obd_rd_hash(char *page, char **start, off_t off,
-                         int count, int *eof, void *data);
-@@ -798,7 +815,19 @@ int lprocfs_obd_rd_ir_factor(char *page, char **start, off_t off,
-                              int count, int *eof, void *data);
- int lprocfs_obd_wr_ir_factor(struct file *file, const char *buffer,
-                              unsigned long count, void *data);
-+#endif
-+/* lprocfs_status.c: recovery status */
-+int lprocfs_recovery_status_seq_show(struct seq_file *m, void *data);
- 
-+/* lprocfs_status.c: hash statistics */
-+int lprocfs_hash_seq_show(struct seq_file *m, void *data);
-+
-+/* lprocfs_status.c: IR factor */
-+int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data);
-+ssize_t
-+lprocfs_ir_factor_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off);
-+#endif
- extern int lprocfs_single_release(cfs_inode_t *, struct file *);
- extern int lprocfs_seq_release(cfs_inode_t *, struct file *);
- 
-@@ -874,21 +903,23 @@ struct file_operations name##_fops = {					\
- 		.release = lprocfs_single_release,			\
- 	};
- 
-+/* lproc_ptlrpc.c */
-+struct ptlrpc_request;
-+extern void target_print_req(void *seq_file, struct ptlrpc_request *req);
-+
-+#ifdef HAVE_SERVER_SUPPORT
- /* lprocfs_jobstats.c */
- int lprocfs_job_stats_log(struct obd_device *obd, char *jobid,
- 			  int event, long amount);
- void lprocfs_job_stats_fini(struct obd_device *obd);
- int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num,
- 			   cntr_init_callback fn);
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_rd_job_interval(char *page, char **start, off_t off,
- 			    int count, int *eof, void *data);
- int lprocfs_wr_job_interval(struct file *file, const char *buffer,
- 			    unsigned long count, void *data);
- 
--/* lproc_ptlrpc.c */
--struct ptlrpc_request;
--extern void target_print_req(void *seq_file, struct ptlrpc_request *req);
--
- /* lproc_status.c */
- int lprocfs_obd_rd_recovery_time_soft(char *page, char **start, off_t off,
-                                       int count, int *eof, void *data);
-@@ -900,6 +931,24 @@ int lprocfs_obd_rd_recovery_time_hard(char *page, char **start, off_t off,
- int lprocfs_obd_wr_recovery_time_hard(struct file *file,
-                                       const char *buffer,
-                                       unsigned long count, void *data);
-+int lprocfs_target_rd_instance(char *page, char **start, off_t off,
-+			       int count, int *eof, void *data);
-+#endif
-+int lprocfs_job_interval_seq_show(struct seq_file *m, void *data);
-+ssize_t
-+lprocfs_job_interval_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off);
-+/* lproc_status.c */
-+int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data);
-+ssize_t lprocfs_recovery_time_soft_seq_write(struct file *file,
-+						const char *buffer,
-+						size_t count, loff_t *off);
-+int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data);
-+ssize_t
-+lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off);
-+int lprocfs_target_instance_seq_show(struct seq_file *m, void *data);
-+#endif
- #ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_obd_rd_max_pages_per_rpc(char *page, char **start, off_t off,
-                                      int count, int *eof, void *data);
-@@ -910,8 +959,6 @@ int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data);
- ssize_t
- lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file, const char *buffer,
- 				       size_t count, loff_t *off);
--int lprocfs_target_rd_instance(char *page, char **start, off_t off,
--                               int count, int *eof, void *data);
- 
- /* all quota proc functions */
- extern int lprocfs_quota_rd_bunit(char *page, char **start,
-@@ -1032,7 +1079,26 @@ static inline void lprocfs_free_md_stats(struct obd_device *obddev)
- struct obd_export;
- static inline int lprocfs_add_clear_entry(struct obd_export *exp)
- { return 0; }
-+static inline void lprocfs_free_per_client_stats(struct obd_device *obd)
-+{ return; }
- #ifdef HAVE_SERVER_SUPPORT
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+static inline
-+int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
-+				  unsigned long count, void *data)
-+{return count;}
-+static inline
-+int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
-+				 int count, int *eof,  void *data)
-+{return count;}
-+#endif
-+static inline
-+ssize_t lprocfs_nid_stats_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
-+{return 0;}
-+static inline
-+int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data)
-+{return 0;}
- static inline int lprocfs_exp_setup(struct obd_export *exp,lnet_nid_t *peer_nid,
-                                     int *newnid)
- { return 0; }
-@@ -1050,17 +1116,6 @@ static inline struct proc_dir_entry *
- lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent,
-                     const char *format, ...)
- {return NULL; }
--static inline void lprocfs_free_per_client_stats(struct obd_device *obd)
--{ return; }
--static inline
--int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
--                                  unsigned long count, void *data)
--{return count;}
--static inline
--int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
--                                 int count, int *eof,  void *data)
--{return count;}
--
- #ifndef HAVE_ONLY_PROCFS_SEQ
- static inline cfs_proc_dir_entry_t *
- lprocfs_register(const char *name, cfs_proc_dir_entry_t *parent,
-@@ -1145,10 +1200,12 @@ static inline int lprocfs_wr_timeouts(struct file *file,
-                                       const char *buffer,
-                                       unsigned long count, void *data)
- { return 0; }
-+#ifdef HAVE_SERVER_SUPPORT
- static inline int lprocfs_wr_evict_client(struct file *file,
-                                           const char *buffer,
-                                           unsigned long count, void *data)
- { return 0; }
-+#endif
- static inline int lprocfs_wr_ping(struct file *file, const char *buffer,
-                                   unsigned long count, void *data)
- { return 0; }
-@@ -1173,8 +1230,10 @@ static inline int lprocfs_state_seq_show(struct seq_file *m, void *data)
- { return 0; }
- static inline int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data)
- { return 0; }
-+#ifdef HAVE_SERVER_SUPPORT
- static inline int lprocfs_num_exports_seq_show(struct seq_file *m, void *data)
- { return 0; }
-+#endif
- struct adaptive_timeout;
- static inline int lprocfs_seq_at_hist_helper(struct seq_file *m,
- 					     struct adaptive_timeout *at)
-@@ -1185,10 +1244,12 @@ static inline ssize_t
- lprocfs_timeouts_seq_write(struct file *file, const char *buffer,
- 			   size_t count, loff_t *off)
- { return 0; }
-+#ifdef HAVE_SERVER_SUPPORT
- static inline ssize_t
- lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
- 			       size_t count, loff_t *off)
- { return 0; }
-+#endif
- static inline ssize_t
- lprocfs_ping_seq_write(struct file *file, const char *buffer,
- 		       size_t count, loff_t *off)
-diff --git a/lustre/obdclass/dt_object.c b/lustre/obdclass/dt_object.c
-index deb5863..242a45d 100644
---- a/lustre/obdclass/dt_object.c
-+++ b/lustre/obdclass/dt_object.c
-@@ -936,7 +936,7 @@ out:
- EXPORT_SYMBOL(dt_index_read);
- 
- #ifdef LPROCFS
--
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_dt_rd_blksize(char *page, char **start, off_t off,
- 			  int count, int *eof, void *data)
- {
-@@ -1051,5 +1051,99 @@ int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off,
- 	return rc;
- }
- EXPORT_SYMBOL(lprocfs_dt_rd_filesfree);
-+#endif
-+
-+int lprocfs_dt_blksize_seq_show(struct seq_file *m, void *v)
-+{
-+	struct dt_device *dt = m->private;
-+	struct obd_statfs osfs;
-+
-+	int rc = dt_statfs(NULL, dt, &osfs);
-+	if (rc == 0)
-+		seq_printf(m, "%u\n", (unsigned) osfs.os_bsize);
-+	return rc;
-+}
-+EXPORT_SYMBOL(lprocfs_dt_blksize_seq_show);
-+
-+int lprocfs_dt_kbytestotal_seq_show(struct seq_file *m, void *v)
-+{
-+	struct dt_device *dt = m->private;
-+	struct obd_statfs osfs;
-+
-+	int rc = dt_statfs(NULL, dt, &osfs);
-+	if (rc == 0) {
-+		__u32 blk_size = osfs.os_bsize >> 10;
-+		__u64 result = osfs.os_blocks;
-+
-+		while (blk_size >>= 1)
-+			result <<= 1;
-+
-+		seq_printf(m, LPU64"\n", result);
-+	}
-+	return rc;
-+}
-+EXPORT_SYMBOL(lprocfs_dt_kbytestotal_seq_show);
-+
-+int lprocfs_dt_kbytesfree_seq_show(struct seq_file *m, void *v)
-+{
-+	struct dt_device *dt = m->private;
-+	struct obd_statfs osfs;
-+
-+	int rc = dt_statfs(NULL, dt, &osfs);
-+	if (rc == 0) {
-+		__u32 blk_size = osfs.os_bsize >> 10;
-+		__u64 result = osfs.os_bfree;
-+
-+		while (blk_size >>= 1)
-+			result <<= 1;
-+
-+		seq_printf(m, LPU64"\n", result);
-+	}
-+	return rc;
-+}
-+EXPORT_SYMBOL(lprocfs_dt_kbytesfree_seq_show);
-+
-+int lprocfs_dt_kbytesavail_seq_show(struct seq_file *m, void *v)
-+{
-+	struct dt_device *dt = m->private;
-+	struct obd_statfs osfs;
-+
-+	int rc = dt_statfs(NULL, dt, &osfs);
-+	if (rc == 0) {
-+		__u32 blk_size = osfs.os_bsize >> 10;
-+		__u64 result = osfs.os_bavail;
-+
-+		while (blk_size >>= 1)
-+			result <<= 1;
-+
-+		seq_printf(m, LPU64"\n", result);
-+	}
-+	return rc;
-+}
-+EXPORT_SYMBOL(lprocfs_dt_kbytesavail_seq_show);
-+
-+int lprocfs_dt_filestotal_seq_show(struct seq_file *m, void *v)
-+{
-+	struct dt_device *dt = m->private;
-+	struct obd_statfs osfs;
-+
-+	int rc = dt_statfs(NULL, dt, &osfs);
-+	if (rc == 0)
-+		seq_printf(m, LPU64"\n", osfs.os_files);
-+	return rc;
-+}
-+EXPORT_SYMBOL(lprocfs_dt_filestotal_seq_show);
-+
-+int lprocfs_dt_filesfree_seq_show(struct seq_file *m, void *v)
-+{
-+	struct dt_device *dt = m->private;
-+	struct obd_statfs osfs;
-+
-+	int rc = dt_statfs(NULL, dt, &osfs);
-+	if (rc == 0)
-+		seq_printf(m, LPU64"\n", osfs.os_ffree);
-+	return rc;
-+}
-+EXPORT_SYMBOL(lprocfs_dt_filesfree_seq_show);
- 
- #endif /* LPROCFS */
-diff --git a/lustre/obdclass/lprocfs_jobstats.c b/lustre/obdclass/lprocfs_jobstats.c
-index f67e426..4e16a17 100644
---- a/lustre/obdclass/lprocfs_jobstats.c
-+++ b/lustre/obdclass/lprocfs_jobstats.c
-@@ -416,18 +416,17 @@ struct seq_operations lprocfs_jobstats_seq_sops = {
- 
- static int lprocfs_jobstats_seq_open(struct inode *inode, struct file *file)
- {
--	struct proc_dir_entry *dp = PDE(inode);
- 	struct seq_file *seq;
- 	int rc;
- 
--	if (LPROCFS_ENTRY_CHECK(dp))
-+	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
- 		return -ENOENT;
- 
- 	rc = seq_open(file, &lprocfs_jobstats_seq_sops);
- 	if (rc)
- 		return rc;
- 	seq = file->private_data;
--	seq->private = dp->data;
-+	seq->private = PDE_DATA(inode);
- 	return 0;
- }
- 
-@@ -520,19 +519,18 @@ int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num,
- 	stats->ojs_last_cleanup = cfs_time_current_sec();
- 
- 	LPROCFS_WRITE_ENTRY();
--	entry = create_proc_entry("job_stats", 0644, obd->obd_proc_entry);
-+	entry = proc_create_data("job_stats", 0644, obd->obd_proc_entry,
-+				&lprocfs_jobstats_seq_fops, stats);
- 	LPROCFS_WRITE_EXIT();
--	if (entry) {
--		entry->proc_fops = &lprocfs_jobstats_seq_fops;
--		entry->data = stats;
--		RETURN(0);
--	} else {
-+	if (entry == NULL) {
- 		lprocfs_job_stats_fini(obd);
- 		RETURN(-ENOMEM);
- 	}
-+	RETURN(0);
- }
- EXPORT_SYMBOL(lprocfs_job_stats_init);
- 
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_rd_job_interval(char *page, char **start, off_t off,
- 			    int count, int *eof, void *data)
- {
-@@ -567,5 +565,36 @@ int lprocfs_wr_job_interval(struct file *file, const char *buffer,
- 
- }
- EXPORT_SYMBOL(lprocfs_wr_job_interval);
-+#endif
-+int lprocfs_job_interval_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+	struct obd_job_stats *stats;
-+
-+	LASSERT(obd != NULL);
-+	stats = &obd->u.obt.obt_jobstats;
-+	return seq_printf(m, "%d\n", stats->ojs_cleanup_interval);
-+}
-+EXPORT_SYMBOL(lprocfs_job_interval_seq_show);
-+
-+ssize_t
-+lprocfs_job_interval_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
-+{
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	struct obd_job_stats *stats;
-+	int val, rc;
-+
-+	LASSERT(obd != NULL);
-+	stats = &obd->u.obt.obt_jobstats;
-+
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
- 
-+	stats->ojs_cleanup_interval = val;
-+	lprocfs_job_cleanup(stats, true);
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_job_interval_seq_write);
- #endif /* LPROCFS*/
-diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index 0c805be..a33cbf2 100644
---- a/lustre/obdclass/lprocfs_status.c
-+++ b/lustre/obdclass/lprocfs_status.c
-@@ -288,25 +288,104 @@ static struct file_operations lprocfs_generic_fops = { };
- #ifdef HAVE_SERVER_SUPPORT
- int lprocfs_evict_client_open(struct inode *inode, struct file *f)
- {
--        struct proc_dir_entry *dp = PDE(f->f_dentry->d_inode);
--        struct obd_device *obd = dp->data;
--
--        cfs_atomic_inc(&obd->obd_evict_inprogress);
-+	struct obd_device *obd = PDE_DATA(f->f_dentry->d_inode);
- 
--        return 0;
-+	cfs_atomic_inc(&obd->obd_evict_inprogress);
-+	return 0;
- }
- 
- int lprocfs_evict_client_release(struct inode *inode, struct file *f)
- {
--	struct proc_dir_entry *dp = PDE(f->f_dentry->d_inode);
--	struct obd_device *obd = dp->data;
-+	struct obd_device *obd = PDE_DATA(f->f_dentry->d_inode);
- 
- 	cfs_atomic_dec(&obd->obd_evict_inprogress);
- 	wake_up(&obd->obd_evict_inprogress_waitq);
--
- 	return 0;
- }
- 
-+#define BUFLEN (UUID_MAX + 5)
-+
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+int lprocfs_wr_evict_client(struct file *file, const char *buffer,
-+			    unsigned long count, void *data)
-+{
-+	struct obd_device *obd = data;
-+	char		  *kbuf;
-+	char		  *tmpbuf;
-+
-+	OBD_ALLOC(kbuf, BUFLEN);
-+	if (kbuf == NULL)
-+		return -ENOMEM;
-+
-+	/*
-+	 * OBD_ALLOC() will zero kbuf, but we only copy BUFLEN - 1
-+	 * bytes into kbuf, to ensure that the string is NUL-terminated.
-+	 * UUID_MAX should include a trailing NUL already.
-+	 */
-+	if (copy_from_user(kbuf, buffer,
-+				min_t(unsigned long, BUFLEN - 1, count))) {
-+		count = -EFAULT;
-+		goto out;
-+	}
-+	tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
-+	class_incref(obd, __FUNCTION__, current);
-+
-+	if (strncmp(tmpbuf, "nid:", 4) == 0)
-+		obd_export_evict_by_nid(obd, tmpbuf + 4);
-+	else if (strncmp(tmpbuf, "uuid:", 5) == 0)
-+		obd_export_evict_by_uuid(obd, tmpbuf + 5);
-+	else
-+		obd_export_evict_by_uuid(obd, tmpbuf);
-+
-+	class_decref(obd, __FUNCTION__, current);
-+out:
-+	OBD_FREE(kbuf, BUFLEN);
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_wr_evict_client);
-+#endif
-+
-+ssize_t
-+lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
-+{
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	char *tmpbuf, *kbuf;
-+
-+	OBD_ALLOC(kbuf, BUFLEN);
-+	if (kbuf == NULL)
-+		return -ENOMEM;
-+
-+	/*
-+	 * OBD_ALLOC() will zero kbuf, but we only copy BUFLEN - 1
-+	 * bytes into kbuf, to ensure that the string is NUL-terminated.
-+	 * UUID_MAX should include a trailing NUL already.
-+	 */
-+	if (copy_from_user(kbuf, buffer,
-+				min_t(unsigned long, BUFLEN - 1, count))) {
-+		count = -EFAULT;
-+		goto out;
-+	}
-+	tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
-+	class_incref(obd, __FUNCTION__, current);
-+
-+	if (strncmp(tmpbuf, "nid:", 4) == 0)
-+		obd_export_evict_by_nid(obd, tmpbuf + 4);
-+	else if (strncmp(tmpbuf, "uuid:", 5) == 0)
-+		obd_export_evict_by_uuid(obd, tmpbuf + 5);
-+	else
-+		obd_export_evict_by_uuid(obd, tmpbuf);
-+
-+	class_decref(obd, __FUNCTION__, current);
-+
-+out:
-+	OBD_FREE(kbuf, BUFLEN);
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
-+
-+#undef BUFLEN
-+
- struct file_operations lprocfs_evict_client_fops = {
-         .owner = THIS_MODULE,
-         .read = lprocfs_fops_read,
-@@ -1228,6 +1307,17 @@ int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data)
- }
- EXPORT_SYMBOL(lprocfs_connect_flags_seq_show);
- 
-+#ifdef HAVE_SERVER_SUPPORT
-+int lprocfs_num_exports_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = data;
-+
-+	LASSERT(obd != NULL);
-+	return seq_printf(m, "%u\n", obd->obd_num_exports);
-+}
-+EXPORT_SYMBOL(lprocfs_num_exports_seq_show);
-+#endif
-+
- #ifndef HAVE_ONLY_PROCFS_SEQ
- 
- int lprocfs_rd_uint(char *page, char **start, off_t off,
-@@ -1743,6 +1833,7 @@ int lprocfs_rd_connect_flags(char *page, char **start, off_t off,
- }
- EXPORT_SYMBOL(lprocfs_rd_connect_flags);
- 
-+#ifdef HAVE_SERVER_SUPPORT
- int lprocfs_rd_num_exports(char *page, char **start, off_t off, int count,
-                            int *eof,  void *data)
- {
-@@ -1753,6 +1844,7 @@ int lprocfs_rd_num_exports(char *page, char **start, off_t off, int count,
-         return snprintf(page, count, "%u\n", obd->obd_num_exports);
- }
- EXPORT_SYMBOL(lprocfs_rd_num_exports);
-+#endif
- 
- int lprocfs_rd_numrefs(char *page, char **start, off_t off, int count,
-                        int *eof, void *data)
-@@ -2436,6 +2528,112 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
- }
- EXPORT_SYMBOL(lprocfs_init_ldlm_stats);
- 
-+#ifdef HAVE_SERVER_SUPPORT
-+/* No one appears to be using this ?? */
-+int lprocfs_exp_nid_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_export *exp = m->private;
-+	LASSERT(exp != NULL);
-+	return seq_printf(m, "%s\n", obd_export_nid2str(exp));
-+}
-+
-+int lprocfs_exp_print_uuid_seq(cfs_hash_t *hs, cfs_hash_bd_t *bd,
-+				cfs_hlist_node_t *hnode, void *cb_data)
-+
-+{
-+	struct obd_export *exp = cfs_hash_object(hs, hnode);
-+	struct seq_file *m = cb_data;
-+
-+	if (exp->exp_nid_stats)
-+		seq_printf(m, "%s\n", obd_uuid2str(&exp->exp_client_uuid));
-+	return 0;
-+}
-+
-+int lprocfs_exp_uuid_seq_show(struct seq_file *m, void *data)
-+{
-+	struct nid_stat *stats = m->private;
-+	struct obd_device *obd = stats->nid_obd;
-+
-+	cfs_hash_for_each_key(obd->obd_nid_hash, &stats->nid,
-+				lprocfs_exp_print_uuid_seq, m);
-+	return 0;
-+}
-+LPROC_SEQ_FOPS_RO(lprocfs_exp_uuid);
-+
-+int lprocfs_exp_print_hash_seq(cfs_hash_t *hs, cfs_hash_bd_t *bd,
-+				cfs_hlist_node_t *hnode, void *cb_data)
-+
-+{
-+	struct seq_file *m = cb_data;
-+	struct obd_export *exp = cfs_hash_object(hs, hnode);
-+
-+	if (exp->exp_lock_hash != NULL) {
-+		cfs_hash_debug_header_seq(m);
-+		cfs_hash_debug_str_seq(hs, m);
-+	}
-+	return 0;
-+}
-+
-+int lprocfs_exp_hash_seq_show(struct seq_file *m, void *data)
-+{
-+	struct nid_stat *stats = m->private;
-+	struct obd_device *obd = stats->nid_obd;
-+
-+	cfs_hash_for_each_key(obd->obd_nid_hash, &stats->nid,
-+				lprocfs_exp_print_hash_seq, m);
-+	return 0;
-+}
-+LPROC_SEQ_FOPS_RO(lprocfs_exp_hash);
-+
-+int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data)
-+{
-+	return seq_printf(m, "%s\n", "Write into this file to clear all nid "
-+				"stats and stale nid entries");
-+}
-+EXPORT_SYMBOL(lprocfs_nid_stats_clear_seq_show);
-+
-+static int lprocfs_nid_stats_clear_write_cb(void *obj, void *data)
-+{
-+	struct nid_stat *stat = obj;
-+	ENTRY;
-+
-+	CDEBUG(D_INFO,"refcnt %d\n", cfs_atomic_read(&stat->nid_exp_ref_count));
-+	if (cfs_atomic_read(&stat->nid_exp_ref_count) == 1) {
-+		/* object has only hash references. */
-+		spin_lock(&stat->nid_obd->obd_nid_lock);
-+		cfs_list_move(&stat->nid_list, data);
-+		spin_unlock(&stat->nid_obd->obd_nid_lock);
-+		RETURN(1);
-+	}
-+	/* we has reference to object - only clear data*/
-+	if (stat->nid_stats)
-+		lprocfs_clear_stats(stat->nid_stats);
-+
-+	RETURN(0);
-+}
-+
-+ssize_t
-+lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
-+{
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	struct nid_stat *client_stat;
-+	CFS_LIST_HEAD(free_list);
-+
-+	cfs_hash_cond_del(obd->obd_nid_stats_hash,
-+				lprocfs_nid_stats_clear_write_cb, &free_list);
-+
-+	while (!cfs_list_empty(&free_list)) {
-+		client_stat = cfs_list_entry(free_list.next, struct nid_stat,
-+						nid_list);
-+		cfs_list_del_init(&client_stat->nid_list);
-+		lprocfs_free_client_stats(client_stat);
-+	}
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_nid_stats_clear_seq_write);
-+
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_exp_rd_nid(char *page, char **start, off_t off, int count,
-                          int *eof,  void *data)
- {
-@@ -2538,26 +2736,6 @@ int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
- }
- EXPORT_SYMBOL(lprocfs_nid_stats_clear_read);
- 
--static int lprocfs_nid_stats_clear_write_cb(void *obj, void *data)
--{
--        struct nid_stat *stat = obj;
--        ENTRY;
--
--        CDEBUG(D_INFO,"refcnt %d\n", cfs_atomic_read(&stat->nid_exp_ref_count));
--        if (cfs_atomic_read(&stat->nid_exp_ref_count) == 1) {
--                /* object has only hash references. */
--		spin_lock(&stat->nid_obd->obd_nid_lock);
--		cfs_list_move(&stat->nid_list, data);
--		spin_unlock(&stat->nid_obd->obd_nid_lock);
--                RETURN(1);
--        }
--        /* we has reference to object - only clear data*/
--        if (stat->nid_stats)
--                lprocfs_clear_stats(stat->nid_stats);
--
--        RETURN(0);
--}
--
- int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
-                                   unsigned long count, void *data)
- {
-@@ -2578,8 +2756,8 @@ int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
-         return count;
- }
- EXPORT_SYMBOL(lprocfs_nid_stats_clear_write);
-+#endif
- 
--#ifdef HAVE_SERVER_SUPPORT
- int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
- {
-         struct nid_stat *new_stat, *old_stat;
-@@ -2638,11 +2816,17 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
-         if (buffer == NULL)
-                 GOTO(destroy_new, rc = -ENOMEM);
- 
--        memcpy(buffer, libcfs_nid2str(*nid), LNET_NIDSTR_SIZE);
-+	memcpy(buffer, libcfs_nid2str(*nid), LNET_NIDSTR_SIZE);
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-         new_stat->nid_proc = lprocfs_register(buffer,
--                                              obd->obd_proc_exports_entry,
--                                              NULL, NULL);
--        OBD_FREE(buffer, LNET_NIDSTR_SIZE);
-+						obd->obd_proc_exports_entry,
-+						NULL, NULL);
-+#else
-+	new_stat->nid_proc = lprocfs_seq_register(buffer,
-+						obd->obd_proc_exports_entry,
-+						NULL, NULL);
-+#endif
-+	OBD_FREE(buffer, LNET_NIDSTR_SIZE);
- 
- 	if (IS_ERR(new_stat->nid_proc)) {
- 		rc = PTR_ERR(new_stat->nid_proc);
-@@ -2652,16 +2836,26 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
- 		GOTO(destroy_new_ns, rc);
- 	}
- 
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-         entry = lprocfs_add_simple(new_stat->nid_proc, "uuid",
-                                    lprocfs_exp_rd_uuid, NULL, new_stat, NULL);
-+#else
-+	entry = lprocfs_add_simple(new_stat->nid_proc, "uuid",
-+					new_stat, &lprocfs_exp_uuid_fops);
-+#endif
-         if (IS_ERR(entry)) {
-                 CWARN("Error adding the NID stats file\n");
-                 rc = PTR_ERR(entry);
-                 GOTO(destroy_new_ns, rc);
-         }
- 
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-         entry = lprocfs_add_simple(new_stat->nid_proc, "hash",
-                                    lprocfs_exp_rd_hash, NULL, new_stat, NULL);
-+#else
-+	entry = lprocfs_add_simple(new_stat->nid_proc, "hash",
-+					new_stat, &lprocfs_exp_hash_fops);
-+#endif
-         if (IS_ERR(entry)) {
-                 CWARN("Error adding the hash file\n");
-                 rc = PTR_ERR(entry);
-@@ -3066,6 +3260,181 @@ void lprocfs_oh_clear(struct obd_histogram *oh)
- }
- EXPORT_SYMBOL(lprocfs_oh_clear);
- 
-+#ifdef HAVE_SERVER_SUPPORT
-+int lprocfs_hash_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+	int c = 0;
-+
-+	if (obd == NULL)
-+		return 0;
-+
-+	c += cfs_hash_debug_header_seq(m);
-+	c += cfs_hash_debug_str_seq(obd->obd_uuid_hash, m);
-+	c += cfs_hash_debug_str_seq(obd->obd_nid_hash, m);
-+	c += cfs_hash_debug_str_seq(obd->obd_nid_stats_hash, m);
-+	return c;
-+}
-+EXPORT_SYMBOL(lprocfs_hash_seq_show);
-+
-+int lprocfs_recovery_status_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+
-+	LASSERT(obd != NULL);
-+
-+	seq_printf(m, "status: \n");
-+	if (obd->obd_max_recoverable_clients == 0) {
-+		seq_printf(m, "INACTIVE\n");
-+		goto out;
-+	}
-+
-+	/* sampled unlocked, but really... */
-+	if (obd->obd_recovering == 0) {
-+		seq_printf(m, "COMPLETE\n");
-+		seq_printf(m, "recovery_start: %lu\n", obd->obd_recovery_start);
-+		seq_printf(m, "recovery_duration: %lu\n",
-+				obd->obd_recovery_end - obd->obd_recovery_start);
-+		/* Number of clients that have completed recovery */
-+		seq_printf(m, "completed_clients: %d/%d\n",
-+				obd->obd_max_recoverable_clients -
-+				obd->obd_stale_clients,
-+				obd->obd_max_recoverable_clients);
-+		seq_printf(m, "replayed_requests: %d\n",
-+				obd->obd_replayed_requests);
-+		seq_printf(m, "last_transno: "LPD64"\n",
-+				obd->obd_next_recovery_transno - 1);
-+		seq_printf(m, "VBR: %s\n", obd->obd_version_recov ?
-+				"ENABLED" : "DISABLED");
-+		seq_printf(m, "IR: %s\n", obd->obd_no_ir ?
-+				"DISABLED" : "ENABLED");
-+		goto out;
-+	}
-+
-+	seq_printf(m, "RECOVERING\n");
-+	seq_printf(m, "recovery_start: %lu\n", obd->obd_recovery_start);
-+	seq_printf(m, "time_remaining: %lu\n",
-+			cfs_time_current_sec() >=
-+			obd->obd_recovery_start +
-+			obd->obd_recovery_timeout ? 0 :
-+			obd->obd_recovery_start +
-+			obd->obd_recovery_timeout -
-+			cfs_time_current_sec());
-+	seq_printf(m, "connected_clients: %d/%d\n",
-+			cfs_atomic_read(&obd->obd_connected_clients),
-+			obd->obd_max_recoverable_clients);
-+	/* Number of clients that have completed recovery */
-+	seq_printf(m, "req_replay_clients: %d\n",
-+			cfs_atomic_read(&obd->obd_req_replay_clients));
-+	seq_printf(m, "lock_repay_clients: %d\n",
-+			cfs_atomic_read(&obd->obd_lock_replay_clients));
-+	seq_printf(m, "completed_clients: %d\n",
-+			cfs_atomic_read(&obd->obd_connected_clients) -
-+			cfs_atomic_read(&obd->obd_lock_replay_clients));
-+	seq_printf(m, "evicted_clients: %d\n", obd->obd_stale_clients);
-+	seq_printf(m, "replayed_requests: %d\n", obd->obd_replayed_requests);
-+	seq_printf(m, "queued_requests: %d\n",
-+			obd->obd_requests_queued_for_recovery);
-+	seq_printf(m, "next_transno: "LPD64"\n",
-+			obd->obd_next_recovery_transno);
-+out:
-+	return 0;
-+}
-+EXPORT_SYMBOL(lprocfs_recovery_status_seq_show);
-+
-+int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+
-+	LASSERT(obd != NULL);
-+	return seq_printf(m, "%d\n", obd->obd_recovery_ir_factor);
-+}
-+EXPORT_SYMBOL(lprocfs_ir_factor_seq_show);
-+
-+ssize_t
-+lprocfs_ir_factor_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
-+{
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	int val, rc;
-+
-+	LASSERT(obd != NULL);
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
-+
-+	if (val < OBD_IR_FACTOR_MIN || val > OBD_IR_FACTOR_MAX)
-+		return -EINVAL;
-+
-+	obd->obd_recovery_ir_factor = val;
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_ir_factor_seq_write);
-+
-+int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+
-+	LASSERT(obd != NULL);
-+	return seq_printf(m, "%d\n", obd->obd_recovery_timeout);
-+}
-+EXPORT_SYMBOL(lprocfs_recovery_time_soft_seq_show);
-+
-+ssize_t
-+lprocfs_recovery_time_soft_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
-+{
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	int val, rc;
-+
-+	LASSERT(obd != NULL);
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
-+
-+	obd->obd_recovery_timeout = val;
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_recovery_time_soft_seq_write);
-+
-+int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+
-+	LASSERT(obd != NULL);
-+	return seq_printf(m, "%u\n", obd->obd_recovery_time_hard);
-+}
-+EXPORT_SYMBOL(lprocfs_recovery_time_hard_seq_show);
-+
-+ssize_t
-+lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
-+{
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
-+	int val, rc;
-+
-+	LASSERT(obd != NULL);
-+	rc = lprocfs_write_helper(buffer, count, &val);
-+	if (rc)
-+		return rc;
-+
-+	obd->obd_recovery_time_hard = val;
-+	return count;
-+}
-+EXPORT_SYMBOL(lprocfs_recovery_time_hard_seq_write);
-+
-+int lprocfs_target_instance_seq_show(struct seq_file *m, void *data)
-+{
-+	struct obd_device *obd = m->private;
-+	struct obd_device_target *target = &obd->u.obt;
-+
-+	LASSERT(obd != NULL);
-+	LASSERT(target->obt_magic == OBT_MAGIC);
-+	return seq_printf(m, "%u\n", obd->u.obt.obt_instance);
-+}
-+EXPORT_SYMBOL(lprocfs_target_instance_seq_show);
-+
-+#ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_obd_rd_hash(char *page, char **start, off_t off,
-                         int count, int *eof, void *data)
- {
-@@ -3084,7 +3453,6 @@ int lprocfs_obd_rd_hash(char *page, char **start, off_t off,
- }
- EXPORT_SYMBOL(lprocfs_obd_rd_hash);
- 
--#ifdef HAVE_SERVER_SUPPORT
- int lprocfs_obd_rd_recovery_status(char *page, char **start, off_t off,
-                                    int count, int *eof, void *data)
- {
-@@ -3210,7 +3578,6 @@ out:
-         return min(count, len - (int)off);
- }
- EXPORT_SYMBOL(lprocfs_obd_rd_recovery_status);
--#endif
- 
- int lprocfs_obd_rd_ir_factor(char *page, char **start, off_t off,
-                              int count, int *eof, void *data)
-@@ -3295,6 +3662,21 @@ int lprocfs_obd_wr_recovery_time_hard(struct file *file, const char *buffer,
- }
- EXPORT_SYMBOL(lprocfs_obd_wr_recovery_time_hard);
- 
-+int lprocfs_target_rd_instance(char *page, char **start, off_t off,
-+			       int count, int *eof, void *data)
-+{
-+	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device_target *target = &obd->u.obt;
-+
-+	LASSERT(obd != NULL);
-+	LASSERT(target->obt_magic == OBT_MAGIC);
-+	*eof = 1;
-+	return snprintf(page, count, "%u\n", obd->u.obt.obt_instance);
-+}
-+EXPORT_SYMBOL(lprocfs_target_rd_instance);
-+#endif /* HAVE_ONLY_PROCFS_SEQ */
-+#endif /* HAVE_SERVER_SUPPORT */
-+
- int lprocfs_obd_rd_max_pages_per_rpc(char *page, char **start, off_t off,
-                                      int count, int *eof, void *data)
- {
-@@ -3321,19 +3703,4 @@ int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data)
- 	return rc;
- }
- EXPORT_SYMBOL(lprocfs_obd_max_pages_per_rpc_seq_show);
--
--#ifdef HAVE_SERVER_SUPPORT
--int lprocfs_target_rd_instance(char *page, char **start, off_t off,
--                               int count, int *eof, void *data)
--{
--        struct obd_device *obd = (struct obd_device *)data;
--        struct obd_device_target *target = &obd->u.obt;
--
--        LASSERT(obd != NULL);
--        LASSERT(target->obt_magic == OBT_MAGIC);
--        *eof = 1;
--        return snprintf(page, count, "%u\n", obd->u.obt.obt_instance);
--}
--EXPORT_SYMBOL(lprocfs_target_rd_instance);
--#endif
- #endif /* LPROCFS*/
-diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c
-index 024169e..076b5e2 100644
---- a/lustre/ptlrpc/lproc_ptlrpc.c
-+++ b/lustre/ptlrpc/lproc_ptlrpc.c
-@@ -1170,49 +1170,6 @@ void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd)
- }
- EXPORT_SYMBOL(ptlrpc_lprocfs_unregister_obd);
- 
--#define BUFLEN (UUID_MAX + 5)
--
--int lprocfs_wr_evict_client(struct file *file, const char *buffer,
--                            unsigned long count, void *data)
--{
--        struct obd_device *obd = data;
--        char              *kbuf;
--        char              *tmpbuf;
--
--        OBD_ALLOC(kbuf, BUFLEN);
--        if (kbuf == NULL)
--                return -ENOMEM;
--
--        /*
--         * OBD_ALLOC() will zero kbuf, but we only copy BUFLEN - 1
--         * bytes into kbuf, to ensure that the string is NUL-terminated.
--         * UUID_MAX should include a trailing NUL already.
--         */
--	if (copy_from_user(kbuf, buffer,
--                               min_t(unsigned long, BUFLEN - 1, count))) {
--                count = -EFAULT;
--                goto out;
--        }
--        tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
--	class_incref(obd, __FUNCTION__, current);
--
--        if (strncmp(tmpbuf, "nid:", 4) == 0)
--                obd_export_evict_by_nid(obd, tmpbuf + 4);
--        else if (strncmp(tmpbuf, "uuid:", 5) == 0)
--                obd_export_evict_by_uuid(obd, tmpbuf + 5);
--        else
--                obd_export_evict_by_uuid(obd, tmpbuf);
--
--	class_decref(obd, __FUNCTION__, current);
--
--out:
--        OBD_FREE(kbuf, BUFLEN);
--        return count;
--}
--EXPORT_SYMBOL(lprocfs_wr_evict_client);
--
--#undef BUFLEN
--
- #ifndef HAVE_ONLY_PROCFS_SEQ
- int lprocfs_wr_ping(struct file *file, const char *buffer,
-                     unsigned long count, void *data)
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch b/sys-cluster/lustre/files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch
new file mode 100644
index 0000000..3b1a7e5
--- /dev/null
+++ b/sys-cluster/lustre/files/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch
@@ -0,0 +1,140 @@
+From 508cde3f8347e7d6a6d299cbdfce537ebc29650c Mon Sep 17 00:00:00 2001
+From: yangsheng <yang.sheng@intel.com>
+Date: Fri, 8 Nov 2013 22:31:36 +0800
+Subject: [PATCH 11/13] LU-3373 osd-ldiskfs: readdir replace by iterate
+
+Use iterate instead of readdir callback in iop.
+
+Signed-off-by: yang sheng <yang.sheng@intel.com>
+Change-Id: Icb08292009c965ca693814e854ae2e77b3e7a4f0
+---
+ lustre/osd-ldiskfs/osd_handler.c | 32 +++++++++++++++++++++++++-------
+ lustre/osd-ldiskfs/osd_scrub.c   | 18 +++++++++++++++++-
+ 2 files changed, 42 insertions(+), 8 deletions(-)
+
+diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
+index dfaa542..f635394 100644
+--- a/lustre/osd-ldiskfs/osd_handler.c
++++ b/lustre/osd-ldiskfs/osd_handler.c
+@@ -4733,6 +4733,12 @@ static void osd_it_ea_put(const struct lu_env *env, struct dt_it *di)
+ {
+ }
+ 
++struct osd_filldir_cbs {
++#ifdef HAVE_DIR_CONTEXT
++	struct dir_context ctx;
++#endif
++	struct osd_it_ea  *it;
++};
+ /**
+  * It is called internally by ->readdir(). It fills the
+  * iterator's in-memory data structure with required
+@@ -4744,11 +4750,11 @@ static void osd_it_ea_put(const struct lu_env *env, struct dt_it *di)
+  * \retval 0 on success
+  * \retval 1 on buffer full
+  */
+-static int osd_ldiskfs_filldir(char *buf, const char *name, int namelen,
++static int osd_ldiskfs_filldir(void *buf, const char *name, int namelen,
+                                loff_t offset, __u64 ino,
+                                unsigned d_type)
+ {
+-        struct osd_it_ea        *it   = (struct osd_it_ea *)buf;
++	struct osd_it_ea	*it   = ((struct osd_filldir_cbs *)buf)->it;
+ 	struct osd_object	*obj  = it->oie_obj;
+         struct osd_it_ea_dirent *ent  = it->oie_dirent;
+         struct lu_fid           *fid  = &ent->oied_fid;
+@@ -4811,7 +4817,14 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
+         struct osd_object  *obj   = it->oie_obj;
+         struct inode       *inode = obj->oo_inode;
+         struct htree_lock  *hlock = NULL;
+-        int                 result = 0;
++	struct file	   *filp  = &it->oie_file;
++	int                 rc = 0;
++	struct osd_filldir_cbs buf = {
++#ifdef HAVE_DIR_CONTEXT
++		.ctx.actor = osd_ldiskfs_filldir,
++#endif
++		.it = it
++	};
+ 
+         ENTRY;
+         it->oie_dirent = it->oie_buf;
+@@ -4825,8 +4838,13 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
+ 		down_read(&obj->oo_ext_idx_sem);
+         }
+ 
+-        result = inode->i_fop->readdir(&it->oie_file, it,
+-                                       (filldir_t) osd_ldiskfs_filldir);
++#ifdef HAVE_DIR_CONTEXT
++	buf.ctx.pos = filp->f_pos;
++	rc = inode->i_fop->iterate(filp, &buf.ctx);
++	filp->f_pos = buf.ctx.pos;
++#else
++	rc = inode->i_fop->readdir(filp, &buf, osd_ldiskfs_filldir);
++#endif
+ 
+         if (hlock != NULL)
+                 ldiskfs_htree_unlock(hlock);
+@@ -4834,13 +4852,13 @@ static int osd_ldiskfs_it_fill(const struct lu_env *env,
+ 		up_read(&obj->oo_ext_idx_sem);
+ 
+         if (it->oie_rd_dirent == 0) {
+-                result = -EIO;
++		rc = -EIO;
+         } else {
+                 it->oie_dirent = it->oie_buf;
+                 it->oie_it_dirent = 1;
+         }
+ 
+-        RETURN(result);
++	RETURN(rc);
+ }
+ 
+ /**
+diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
+index 1002913..8d19c1e 100644
+--- a/lustre/osd-ldiskfs/osd_scrub.c
++++ b/lustre/osd-ldiskfs/osd_scrub.c
+@@ -1465,6 +1465,10 @@ struct osd_ios_item {
+ };
+ 
+ struct osd_ios_filldir_buf {
++#ifdef HAVE_DIR_CONTEXT
++	/* please keep it as first member */
++	struct dir_context	 ctx;
++#endif
+ 	struct osd_thread_info	*oifb_info;
+ 	struct osd_device	*oifb_dev;
+ 	struct dentry		*oifb_dentry;
+@@ -1760,7 +1764,13 @@ static int
+ osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev,
+ 		     struct dentry *dentry, filldir_t filldir)
+ {
+-	struct osd_ios_filldir_buf    buf   = { info, dev, dentry };
++	struct osd_ios_filldir_buf    buf   = {
++#ifdef HAVE_DIR_CONTEXT
++						.ctx.actor = filldir,
++#endif
++						.oifb_info = info,
++						.oifb_dev = dev,
++						.oifb_dentry = dentry };
+ 	struct file		     *filp  = &info->oti_it_ea.oie_file;
+ 	struct inode		     *inode = dentry->d_inode;
+ 	const struct file_operations *fops  = inode->i_fop;
+@@ -1777,7 +1787,13 @@ osd_ios_general_scan(struct osd_thread_info *info, struct osd_device *dev,
+ 	filp->private_data = NULL;
+ 	set_file_inode(filp, inode);
+ 
++#ifdef HAVE_DIR_CONTEXT
++	buf.ctx.pos = filp->f_pos;
++	rc = fops->iterate(filp, &buf.ctx);
++	filp->f_pos = buf.ctx.pos;
++#else
+ 	rc = fops->readdir(filp, &buf, filldir);
++#endif
+ 	fops->release(inode, filp);
+ 
+ 	RETURN(rc);
+-- 
+1.8.5.3
+

diff --git a/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
new file mode 100644
index 0000000..29696dd
--- /dev/null
+++ b/sys-cluster/lustre/files/0012-LU-3974-llite-use-new-struct-dir_context.patch
@@ -0,0 +1,262 @@
+From a93c1a0d6dfaa1a17e0806c5a3f71996af15fb20 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Mon, 20 Jan 2014 21:23:00 -0500
+Subject: [PATCH 12/13] LU-3974 llite: use new struct dir_context
+
+The readdir and nfs code over time has added more
+parameters to be passed to be processed. For the 3.11
+kernel a new struct dir_context was introduced to
+minimize the impact of future expansion. This patch
+addresses this change.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Ib42bf8cb06635a2a64e63b294d79e66ac82a1a5b
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+---
+ lustre/autoconf/lustre-core.m4 | 20 +++++++++++++
+ lustre/llite/dir.c             | 65 ++++++++++++++++++++++++++++++++++--------
+ lustre/llite/llite_internal.h  | 14 +++++++--
+ lustre/llite/llite_nfs.c       | 17 +++++++----
+ 4 files changed, 96 insertions(+), 20 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index e6207c9..f44a277 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1349,6 +1349,25 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.11 readdir now takes the new struct dir_context
++#
++AC_DEFUN([LC_HAVE_DIR_CONTEXT],
++[AC_MSG_CHECKING([if dir_context exist])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct dir_context ctx;
++
++	ctx.pos = 0;
++],[
++	AC_DEFINE(HAVE_DIR_CONTEXT, 1, [dir_context exist])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # 3.11 dentry_operations.d_compare() taken 5 arguments.
+ #
+ AC_DEFUN([LC_D_COMPARE_5ARGS],
+@@ -1523,6 +1542,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_BLKDEV_RELEASE_RETURN_INT
+ 
+ 	 # 3.11
++	 LC_HAVE_DIR_CONTEXT
+ 	 LC_D_COMPARE_5ARGS
+ 	 LC_HAVE_DCOUNT
+ 
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index dc5d623..5009934 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -195,9 +195,27 @@ struct lu_dirent *ll_dir_entry_next(struct inode *dir,
+ 	return entry;
+ }
+ 
++void ll_dir_entry_end(struct inode *dir, struct md_op_data *op_data,
++		      struct lu_dirent *ent)
++{
++	struct lu_dirent *entry;
++	struct md_callback cb_op;
++
++	cb_op.md_blocking_ast = ll_md_blocking_ast;
++	op_data->op_cli_flags = CLI_READENT_END;
++	md_read_entry(ll_i2mdexp(dir), op_data, &cb_op, &entry);
++	return;
++}
++
++#ifdef HAVE_DIR_CONTEXT
++int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
++		struct dir_context *ctx)
++{
++#else
+ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
+ 		void *cookie, filldir_t filldir)
+ {
++#endif
+ 	struct ll_sb_info	*sbi = ll_i2sbi(inode);
+ 	struct ll_dir_chain	chain;
+ 	struct lu_dirent	*ent;
+@@ -241,12 +259,17 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
+ 		fid_le_to_cpu(&fid, &ent->lde_fid);
+ 		ino = cl_fid_build_ino(&fid, api32);
+ 		type = ll_dirent_type_get(ent);
++
++#ifdef HAVE_DIR_CONTEXT
+ 		/* For 'll_nfs_get_name_filldir()', it will try
+ 		 * to access the 'ent' through its 'lde_name',
+ 		 * so the parameter 'name' for 'filldir()' must
+ 		 * be part of the 'ent'. */
++		done = !dir_emit(ctx, ent->lde_name, namelen, ino, type);
++#else
+ 		done = filldir(cookie, ent->lde_name, namelen, lhash,
+ 			       ino, type);
++#endif
+ 		if (done) {
+ 			if (op_data->op_hash_offset != MDS_DIR_END_OFF)
+ 				op_data->op_hash_offset = last_hash;
+@@ -268,7 +291,11 @@ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
+ 	RETURN(rc);
+ }
+ 
++#ifdef HAVE_DIR_CONTEXT
++static int ll_iterate(struct file *filp, struct dir_context *ctx)
++#else
+ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
++#endif
+ {
+ 	struct inode		*inode	= filp->f_dentry->d_inode;
+ 	struct ll_file_data	*lfd	= LUSTRE_FPRIVATE(filp);
+@@ -305,22 +332,32 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+ 
+ 	op_data->op_hash_offset = pos;
+ 	op_data->op_max_pages = sbi->ll_md_brw_size >> PAGE_CACHE_SHIFT;
++#ifdef HAVE_DIR_CONTEXT
++	ctx->pos = pos;
++	rc = ll_dir_read(inode, op_data, ctx);
++	pos = ctx->pos;
++#else
+ 	rc = ll_dir_read(inode, op_data, cookie, filldir);
++#endif
+ 	if (lfd != NULL)
+ 		lfd->lfd_pos = op_data->op_hash_offset;
+ 
+ 	if (pos == MDS_DIR_END_OFF) {
+ 		if (api32)
+-			filp->f_pos = LL_DIR_END_OFF_32BIT;
++			pos = LL_DIR_END_OFF_32BIT;
+ 		else
+-			filp->f_pos = LL_DIR_END_OFF;
++			pos = LL_DIR_END_OFF;
+ 	} else {
+ 		if (api32 && hash64)
+-			filp->f_pos = op_data->op_hash_offset >> 32;
++			pos = op_data->op_hash_offset >> 32;
+ 		else
+-			filp->f_pos = op_data->op_hash_offset;
++			pos = op_data->op_hash_offset;
+ 	}
+-
++#ifdef HAVE_DIR_CONTEXT
++	ctx->pos = pos;
++#else
++	filp->f_pos = pos;
++#endif
+ 	ll_finish_md_op_data(op_data);
+ 	filp->f_version = inode->i_version;
+ #ifdef HAVE_TOUCH_ATIME_1ARG
+@@ -1702,11 +1739,15 @@ int ll_dir_release(struct inode *inode, struct file *file)
+ }
+ 
+ struct file_operations ll_dir_operations = {
+-        .llseek   = ll_dir_seek,
+-        .open     = ll_dir_open,
+-        .release  = ll_dir_release,
+-        .read     = generic_read_dir,
+-        .readdir  = ll_readdir,
+-        .unlocked_ioctl   = ll_dir_ioctl,
+-        .fsync    = ll_fsync,
++	.llseek		= ll_dir_seek,
++	.open		= ll_dir_open,
++	.release	= ll_dir_release,
++	.read		= generic_read_dir,
++#ifdef HAVE_DIR_CONTEXT
++	.iterate	= ll_iterate,
++#else
++	.readdir	= ll_readdir,
++#endif
++	.unlocked_ioctl	= ll_dir_ioctl,
++	.fsync		= ll_fsync,
+ };
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index 5c22795..251a218 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -91,9 +91,12 @@ extern struct file_operations ll_pgcache_seq_fops;
+ #define REMOTE_PERM_HASHSIZE 16
+ 
+ struct ll_getname_data {
+-        char            *lgd_name;      /* points to a buffer with NAME_MAX+1 size */
+-        struct lu_fid    lgd_fid;       /* target fid we are looking for */
+-        int              lgd_found;     /* inode matched? */
++#ifdef HAVE_DIR_CONTEXT
++	struct dir_context	ctx;
++#endif
++	char		*lgd_name;	/* points to a buffer with NAME_MAX+1 size */
++	struct lu_fid	lgd_fid;	/* target fid we are looking for */
++	int		lgd_found;	/* inode matched? */
+ };
+ 
+ /* llite setxid/access permission for user on remote client */
+@@ -718,8 +721,13 @@ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
+ /* llite/dir.c */
+ extern struct file_operations ll_dir_operations;
+ extern struct inode_operations ll_dir_inode_operations;
++#ifdef HAVE_DIR_CONTEXT
++int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
++		struct dir_context *ctx);
++#else
+ int ll_dir_read(struct inode *inode, struct md_op_data *op_data,
+ 		void *cookie, filldir_t filldir);
++#endif
+ int ll_get_mdt_idx(struct inode *inode);
+ 
+ struct lu_dirent *ll_dir_entry_start(struct inode *dir,
+diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
+index 68616e9..faad453 100644
+--- a/lustre/llite/llite_nfs.c
++++ b/lustre/llite/llite_nfs.c
+@@ -236,7 +236,14 @@ static int ll_get_name(struct dentry *dentry, char *name,
+                        struct dentry *child)
+ {
+ 	struct inode *dir = dentry->d_inode;
+-	struct ll_getname_data lgd;
++	struct ll_getname_data lgd = {
++		.lgd_name	= name,
++		.lgd_fid	= ll_i2info(child->d_inode)->lli_fid,
++#ifdef HAVE_DIR_CONTEXT
++		.ctx.actor	= ll_nfs_get_name_filldir,
++#endif
++		.lgd_found = 0,
++	};
+ 	struct md_op_data *op_data;
+ 	int rc;
+ 	ENTRY;
+@@ -247,10 +254,6 @@ static int ll_get_name(struct dentry *dentry, char *name,
+         if (!dir->i_fop)
+                 GOTO(out, rc = -EINVAL);
+ 
+-        lgd.lgd_name = name;
+-        lgd.lgd_fid = ll_i2info(child->d_inode)->lli_fid;
+-        lgd.lgd_found = 0;
+-
+ 	op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
+ 				     LUSTRE_OPC_ANY, dir);
+ 	if (IS_ERR(op_data))
+@@ -260,7 +263,11 @@ static int ll_get_name(struct dentry *dentry, char *name,
+ 	op_data->op_max_pages =
+ 		ll_i2sbi(dir)->ll_md_brw_size >> PAGE_CACHE_SHIFT;
+ 	mutex_lock(&dir->i_mutex);
++#ifdef HAVE_DIR_CONTEXT
++	rc = ll_dir_read(dir, op_data, &lgd.ctx);
++#else
+ 	rc = ll_dir_read(dir, op_data, &lgd, ll_nfs_get_name_filldir);
++#endif
+ 	mutex_unlock(&dir->i_mutex);
+ 	ll_finish_md_op_data(op_data);
+ 	if (!rc && !lgd.lgd_found)
+-- 
+1.8.5.3
+

diff --git a/sys-cluster/lustre/files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch
deleted file mode 100644
index cb8fd79..0000000
--- a/sys-cluster/lustre/files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch
+++ /dev/null
@@ -1,759 +0,0 @@
-From 8fa5fb0ecac2a7b0279e0010bfe74acb107c37d8 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 14 Nov 2013 19:47:36 -0500
-Subject: [PATCH 13/18] LU-3319 procfs: move ofd proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the ofd
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
----
- lustre/obdclass/lprocfs_status.c |   9 +-
- lustre/ofd/lproc_ofd.c           | 352 +++++++++++++++++----------------------
- lustre/ofd/ofd_dev.c             |  41 ++---
- lustre/ofd/ofd_internal.h        |   7 +-
- 4 files changed, 180 insertions(+), 229 deletions(-)
-
-diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
-index a33cbf2..bd6741e 100644
---- a/lustre/obdclass/lprocfs_status.c
-+++ b/lustre/obdclass/lprocfs_status.c
-@@ -387,11 +387,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
- #undef BUFLEN
- 
- struct file_operations lprocfs_evict_client_fops = {
--        .owner = THIS_MODULE,
--        .read = lprocfs_fops_read,
--        .write = lprocfs_fops_write,
--        .open = lprocfs_evict_client_open,
--        .release = lprocfs_evict_client_release,
-+	.owner		= THIS_MODULE,
-+	.open		= lprocfs_evict_client_open,
-+	.release	= lprocfs_evict_client_release,
-+	.write		= lprocfs_evict_client_seq_write,
- };
- EXPORT_SYMBOL(lprocfs_evict_client_fops);
- #endif
-diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
-index 4354497..f462d63 100644
---- a/lustre/ofd/lproc_ofd.c
-+++ b/lustre/ofd/lproc_ofd.c
-@@ -46,80 +46,74 @@
- 
- #ifdef LPROCFS
- 
--static int lprocfs_ofd_rd_seqs(char *page, char **start, off_t off,
--				int count, int *eof, void *data)
-+static int ofd_seqs_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- 
--	*eof = 1;
--	return snprintf(page, count, "%u\n", ofd->ofd_seq_count);
-+	return seq_printf(m, "%u\n", ofd->ofd_seq_count);
- }
-+LPROC_SEQ_FOPS_RO(ofd_seqs);
- 
--static int lprocfs_ofd_rd_tot_dirty(char *page, char **start, off_t off,
--				    int count, int *eof, void *data)
-+static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd;
- 
- 	LASSERT(obd != NULL);
- 	ofd = ofd_dev(obd->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_dirty);
-+	return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty);
- }
-+LPROC_SEQ_FOPS_RO(ofd_tot_dirty);
- 
--static int lprocfs_ofd_rd_tot_granted(char *page, char **start, off_t off,
--				      int count, int *eof, void *data)
-+static int ofd_tot_granted_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd;
- 
- 	LASSERT(obd != NULL);
- 	ofd = ofd_dev(obd->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_granted);
-+	return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted);
- }
-+LPROC_SEQ_FOPS_RO(ofd_tot_granted);
- 
--static int lprocfs_ofd_rd_tot_pending(char *page, char **start, off_t off,
--				      int count, int *eof, void *data)
-+static int ofd_tot_pending_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd;
- 
- 	LASSERT(obd != NULL);
- 	ofd = ofd_dev(obd->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_pending);
-+	return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending);
- }
-+LPROC_SEQ_FOPS_RO(ofd_tot_pending);
- 
--static int lprocfs_ofd_rd_grant_precreate(char *page, char **start, off_t off,
--					  int count, int *eof, void *data)
-+static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 
- 	LASSERT(obd != NULL);
--	*eof = 1;
--	return snprintf(page, count, "%ld\n",
-+	return seq_printf(m, "%ld\n",
- 			obd->obd_self_export->exp_filter_data.fed_grant);
- }
-+LPROC_SEQ_FOPS_RO(ofd_grant_precreate);
- 
--static int lprocfs_ofd_rd_grant_ratio(char *page, char **start, off_t off,
--				      int count, int *eof, void *data)
-+static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd;
- 
- 	LASSERT(obd != NULL);
- 	ofd = ofd_dev(obd->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%d%%\n",
-+	return seq_printf(m, "%d%%\n",
- 			(int) ofd_grant_reserved(ofd, 100));
- }
- 
--static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
--				      unsigned long count, void *data)
-+static ssize_t
-+ofd_grant_ratio_seq_write(struct file *file, const char *buffer,
-+			  size_t count, loff_t *off)
- {
--	struct obd_device	*obd = (struct obd_device *)data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
- 	int			 val;
- 	int			 rc;
-@@ -143,23 +137,23 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
- 	spin_unlock(&ofd->ofd_grant_lock);
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_grant_ratio);
- 
--static int lprocfs_ofd_rd_precreate_batch(char *page, char **start, off_t off,
--					  int count, int *eof, void *data)
-+static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd;
- 
- 	LASSERT(obd != NULL);
- 	ofd = ofd_dev(obd->obd_lu_dev);
--	*eof = 1;
--	return snprintf(page, count, "%d\n", ofd->ofd_precreate_batch);
-+	return seq_printf(m, "%d\n", ofd->ofd_precreate_batch);
- }
- 
--static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
--					  unsigned long count, void *data)
-+static ssize_t
-+ofd_precreate_batch_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device *obd = (struct obd_device *)data;
-+	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- 	int val;
- 	int rc;
-@@ -176,11 +170,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
- 	spin_unlock(&ofd->ofd_batch_lock);
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_precreate_batch);
- 
--static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
--				  int count, int *eof, void *data)
-+static int ofd_last_id_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd;
- 	struct ofd_seq		*oseq = NULL;
- 	int			retval = 0, rc;
-@@ -198,35 +192,31 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
- 		      fid_idif_seq(ostid_id(&oseq->os_oi),
- 				   ofd->ofd_lut.lut_lsd.lsd_osd_index) :
- 		      ostid_seq(&oseq->os_oi);
--		rc = snprintf(page, count, DOSTID"\n", seq,
--			      ostid_id(&oseq->os_oi));
-+		rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi));
- 		if (rc < 0) {
- 			retval = rc;
- 			break;
- 		}
--		page += rc;
--		count -= rc;
- 		retval += rc;
- 	}
- 	read_unlock(&ofd->ofd_seq_list_lock);
- 	return retval;
- }
-+LPROC_SEQ_FOPS_RO(ofd_last_id);
- 
--int lprocfs_ofd_rd_fmd_max_num(char *page, char **start, off_t off,
--			       int count, int *eof, void *data)
-+int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
--	int			 rc;
- 
--	rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num);
--	return rc;
-+	return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num);
- }
- 
--int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+ssize_t
-+ofd_fmd_max_num_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
- 	int			 val;
- 	int			 rc;
-@@ -241,22 +231,21 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
- 	ofd->ofd_fmd_max_num = val;
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_fmd_max_num);
- 
--int lprocfs_ofd_rd_fmd_max_age(char *page, char **start, off_t off,
--			       int count, int *eof, void *data)
-+int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
--	int			 rc;
- 
--	rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ);
--	return rc;
-+	return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ);
- }
- 
--int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+ssize_t
-+ofd_fmd_max_age_seq_write(struct file *file, const char *buffer,
-+			  size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
- 	int			 val;
- 	int			 rc;
-@@ -271,22 +260,21 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
- 	ofd->ofd_fmd_max_age = val * HZ;
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_fmd_max_age);
- 
--static int lprocfs_ofd_rd_capa(char *page, char **start, off_t off,
--			       int count, int *eof, void *data)
-+static int ofd_capa_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
--	int			 rc;
-+	struct obd_device	*obd = m->private;
- 
--	rc = snprintf(page, count, "capability on: %s\n",
--		      obd->u.filter.fo_fl_oss_capa ? "oss" : "");
--	return rc;
-+	return seq_printf(m, "capability on: %s\n",
-+			  obd->u.filter.fo_fl_oss_capa ? "oss" : "");
- }
- 
--static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+static ssize_t
-+ofd_capa_seq_write(struct file *file, const char *buffer, size_t count,
-+		   loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	int			 val, rc;
- 
- 	rc = lprocfs_write_helper(buffer, count, &val);
-@@ -305,28 +293,29 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
- 		      val ? "enabled" : "disabled");
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_capa);
- 
--static int lprocfs_ofd_rd_capa_count(char *page, char **start, off_t off,
--				     int count, int *eof, void *data)
-+static int ofd_capa_count_seq_show(struct seq_file *m, void *data)
- {
--	return snprintf(page, count, "%d %d\n",
-+	return seq_printf(m, "%d %d\n",
- 			capa_count[CAPA_SITE_CLIENT],
- 			capa_count[CAPA_SITE_SERVER]);
- }
-+LPROC_SEQ_FOPS_RO(ofd_capa_count);
- 
--int lprocfs_ofd_rd_degraded(char *page, char **start, off_t off,
--			    int count, int *eof, void *data)
-+int ofd_degraded_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- 
--	return snprintf(page, count, "%u\n", ofd->ofd_raid_degraded);
-+	return seq_printf(m, "%u\n", ofd->ofd_raid_degraded);
- }
- 
--int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
--			    unsigned long count, void *data)
-+ssize_t
-+ofd_degraded_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
- 	int			 val, rc;
- 
-@@ -337,38 +326,35 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
- 	spin_lock(&ofd->ofd_flags_lock);
- 	ofd->ofd_raid_degraded = !!val;
- 	spin_unlock(&ofd->ofd_flags_lock);
--
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_degraded);
- 
--int lprocfs_ofd_rd_fstype(char *page, char **start, off_t off, int count,
--			  int *eof, void *data)
-+int ofd_fstype_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device *obd = data;
-+	struct obd_device *obd = m->private;
- 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
- 	struct lu_device  *d;
- 
- 	LASSERT(ofd->ofd_osd);
- 	d = &ofd->ofd_osd->dd_lu_dev;
- 	LASSERT(d->ld_type);
--	return snprintf(page, count, "%s\n", d->ld_type->ldt_name);
-+	return seq_printf(m, "%s\n", d->ld_type->ldt_name);
- }
-+LPROC_SEQ_FOPS_RO(ofd_fstype);
- 
--int lprocfs_ofd_rd_syncjournal(char *page, char **start, off_t off,
--			       int count, int *eof, void *data)
-+int ofd_syncjournal_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
--	int			 rc;
- 
--	rc = snprintf(page, count, "%u\n", ofd->ofd_syncjournal);
--	return rc;
-+	return seq_printf(m, "%u\n", ofd->ofd_syncjournal);
- }
- 
--int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
--			       unsigned long count, void *data)
-+ssize_t ofd_syncjournal_seq_write(struct file *file, const char *buffer,
-+				  size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
- 	int			 val;
- 	int			 rc;
-@@ -387,27 +373,26 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
- 
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_syncjournal);
- 
- static char *sync_on_cancel_states[] = {"never",
- 					"blocking",
- 					"always" };
- 
--int lprocfs_ofd_rd_sync_lock_cancel(char *page, char **start, off_t off,
--				    int count, int *eof, void *data)
-+int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct lu_target	*tgt = obd->u.obt.obt_lut;
--	int			 rc;
- 
--	rc = snprintf(page, count, "%s\n",
--		      sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
--	return rc;
-+	return seq_printf(m, "%s\n",
-+			sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
- }
- 
--int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
--				    unsigned long count, void *data)
-+ssize_t
-+ofd_sync_lock_cancel_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct lu_target	*tgt = obd->u.obt.obt_lut;
- 	int			 val = -1;
- 	int			 i;
-@@ -435,22 +420,21 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
- 	spin_unlock(&tgt->lut_flags_lock);
- 	return count;
- }
-+LPROC_SEQ_FOPS(ofd_sync_lock_cancel);
- 
--int lprocfs_ofd_rd_grant_compat_disable(char *page, char **start, off_t off,
--					int count, int *eof, void *data)
-+int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = m->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
--	int			 rc;
- 
--	rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable);
--	return rc;
-+	return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable);
- }
- 
--int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
--					unsigned long count, void *data)
-+ssize_t
-+ofd_grant_compat_disable_seq_write(struct file *file, const char *buffer,
-+					size_t count, loff_t *off)
- {
--	struct obd_device	*obd = data;
-+	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
- 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
- 	int			 val;
- 	int			 rc;
-@@ -469,86 +453,64 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
- 	return count;
- }
- 
--int lprocfs_ofd_rd_soft_sync_limit(char *page, char **start, off_t off,
--				   int count, int *eof, void *data)
--{
--	struct obd_device	*obd = data;
--	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
--
--	return lprocfs_rd_uint(page, start, off, count, eof,
--			       &ofd->ofd_soft_sync_limit);
--}
--
--int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char *buffer,
--				   unsigned long count, void *data)
--{
--	struct obd_device	*obd = data;
--	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
--
--	return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit);
--}
--
--static struct lprocfs_vars lprocfs_ofd_obd_vars[] = {
--	{ "uuid",		 lprocfs_rd_uuid, 0, 0 },
--	{ "blocksize",		 lprocfs_rd_blksize, 0, 0 },
--	{ "kbytestotal",	 lprocfs_rd_kbytestotal, 0, 0 },
--	{ "kbytesfree",		 lprocfs_rd_kbytesfree, 0, 0 },
--	{ "kbytesavail",	 lprocfs_rd_kbytesavail, 0, 0 },
--	{ "filestotal",		 lprocfs_rd_filestotal, 0, 0 },
--	{ "filesfree",		 lprocfs_rd_filesfree, 0, 0 },
--	{ "seqs_allocated",	 lprocfs_ofd_rd_seqs, 0, 0 },
--	{ "fstype",		 lprocfs_ofd_rd_fstype, 0, 0 },
--	{ "last_id",		 lprocfs_ofd_rd_last_id, 0, 0 },
--	{ "tot_dirty",		 lprocfs_ofd_rd_tot_dirty,   0, 0 },
--	{ "tot_pending",	 lprocfs_ofd_rd_tot_pending, 0, 0 },
--	{ "tot_granted",	 lprocfs_ofd_rd_tot_granted, 0, 0 },
--	{ "grant_precreate",	 lprocfs_ofd_rd_grant_precreate, 0, 0 },
--	{ "grant_ratio",	 lprocfs_ofd_rd_grant_ratio,
--				 lprocfs_ofd_wr_grant_ratio, 0, 0 },
--	{ "precreate_batch",	 lprocfs_ofd_rd_precreate_batch,
--				 lprocfs_ofd_wr_precreate_batch, 0 },
--	{ "recovery_status",	 lprocfs_obd_rd_recovery_status, 0, 0 },
--	{ "recovery_time_soft",	 lprocfs_obd_rd_recovery_time_soft,
--				 lprocfs_obd_wr_recovery_time_soft, 0},
--	{ "recovery_time_hard",  lprocfs_obd_rd_recovery_time_hard,
--				 lprocfs_obd_wr_recovery_time_hard, 0},
--	{ "evict_client",	 0, lprocfs_wr_evict_client, 0,
--				 &lprocfs_evict_client_fops},
--	{ "num_exports",	 lprocfs_rd_num_exports,   0, 0 },
--	{ "degraded",		 lprocfs_ofd_rd_degraded,
--				 lprocfs_ofd_wr_degraded, 0},
--	{ "sync_journal",	 lprocfs_ofd_rd_syncjournal,
--				 lprocfs_ofd_wr_syncjournal, 0 },
--	{ "sync_on_lock_cancel", lprocfs_ofd_rd_sync_lock_cancel,
--				 lprocfs_ofd_wr_sync_lock_cancel, 0 },
--	{ "instance",		 lprocfs_target_rd_instance, 0 },
--	{ "ir_factor",		 lprocfs_obd_rd_ir_factor,
--				 lprocfs_obd_wr_ir_factor, 0},
--	{ "grant_compat_disable", lprocfs_ofd_rd_grant_compat_disable,
--				  lprocfs_ofd_wr_grant_compat_disable, 0 },
--	{ "client_cache_count",	 lprocfs_ofd_rd_fmd_max_num,
--				 lprocfs_ofd_wr_fmd_max_num, 0 },
--	{ "client_cache_seconds", lprocfs_ofd_rd_fmd_max_age,
--				  lprocfs_ofd_wr_fmd_max_age, 0 },
--	{ "capa",		 lprocfs_ofd_rd_capa,
--				 lprocfs_ofd_wr_capa, 0 },
--	{ "capa_count",		 lprocfs_ofd_rd_capa_count, 0, 0 },
--	{ "job_cleanup_interval", lprocfs_rd_job_interval,
--				  lprocfs_wr_job_interval, 0},
--	{ "soft_sync_limit",	 lprocfs_ofd_rd_soft_sync_limit,
--				 lprocfs_ofd_wr_soft_sync_limit, 0},
--	{ 0 }
--};
--
--static struct lprocfs_vars lprocfs_ofd_module_vars[] = {
--	{ "num_refs",	  lprocfs_rd_numrefs,	0, 0 },
-+LPROC_SEQ_FOPS(ofd_grant_compat_disable);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesfree);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesavail);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, filestotal);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, filesfree);
-+
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, recovery_status);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_soft);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_hard);
-+LPROC_SEQ_FOPS_WO_TYPE(ofd, evict_client);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, num_exports);
-+LPROC_SEQ_FOPS_RO_TYPE(ofd, target_instance);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, ir_factor);
-+LPROC_SEQ_FOPS_RW_TYPE(ofd, job_interval);
-+
-+static struct lprocfs_seq_vars lprocfs_ofd_obd_vars[] = {
-+	{ "uuid",			&ofd_uuid_fops			},
-+	{ "blocksize",			&ofd_blksize_fops		},
-+	{ "kbytestotal",		&ofd_kbytestotal_fops		},
-+	{ "kbytesfree",			&ofd_kbytesfree_fops		},
-+	{ "kbytesavail",		&ofd_kbytesavail_fops		},
-+	{ "filestotal",			&ofd_filestotal_fops		},
-+	{ "filesfree",			&ofd_filesfree_fops		},
-+	{ "seqs_allocated",		&ofd_seqs_fops			},
-+	{ "fstype",			&ofd_fstype_fops		},
-+	{ "last_id",			&ofd_last_id_fops		},
-+	{ "tot_dirty",			&ofd_tot_dirty_fops		},
-+	{ "tot_pending",		&ofd_tot_pending_fops		},
-+	{ "tot_granted",		&ofd_tot_granted_fops		},
-+	{ "grant_precreate",		&ofd_grant_precreate_fops	},
-+	{ "grant_ratio",		&ofd_grant_ratio_fops		},
-+	{ "precreate_batch",		&ofd_precreate_batch_fops	},
-+	{ "recovery_status",		&ofd_recovery_status_fops	},
-+	{ "recovery_time_soft",		&ofd_recovery_time_soft_fops	},
-+	{ "recovery_time_hard",		&ofd_recovery_time_hard_fops	},
-+	{ "evict_client",		&ofd_evict_client_fops		},
-+	{ "num_exports",		&ofd_num_exports_fops		},
-+	{ "degraded",			&ofd_degraded_fops		},
-+	{ "sync_journal",		&ofd_syncjournal_fops		},
-+	{ "sync_on_lock_cancel",	&ofd_sync_lock_cancel_fops	},
-+	{ "instance",			&ofd_target_instance_fops	},
-+	{ "ir_factor",			&ofd_ir_factor_fops		},
-+	{ "grant_compat_disable",	&ofd_grant_compat_disable_fops	},
-+	{ "client_cache_count",		&ofd_fmd_max_num_fops		},
-+	{ "client_cache_seconds",	&ofd_fmd_max_age_fops		},
-+	{ "capa",			&ofd_capa_fops			},
-+	{ "capa_count",			&ofd_capa_count_fops		},
-+	{ "job_cleanup_interval",	&ofd_job_interval_fops		},
- 	{ 0 }
- };
- 
--void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
-+void lprocfs_ofd_init_vars(struct obd_device *obd)
- {
--	lvars->module_vars  = lprocfs_ofd_module_vars;
--	lvars->obd_vars     = lprocfs_ofd_obd_vars;
-+	obd->obd_vars = lprocfs_ofd_obd_vars;
- }
- 
- void ofd_stats_counter_init(struct lprocfs_stats *stats)
-diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
-index 2bdbde6..e3b8358 100644
---- a/lustre/ofd/ofd_dev.c
-+++ b/lustre/ofd/ofd_dev.c
-@@ -206,8 +206,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
- 
- 	switch (cfg->lcfg_command) {
- 	case LCFG_PARAM: {
--		struct lprocfs_static_vars lvars;
--
-+		struct obd_device	*obd = ofd_obd(m);
- 		/* For interoperability */
- 		struct cfg_interop_param   *ptr = NULL;
- 		struct lustre_cfg	   *old_cfg = NULL;
-@@ -240,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
- 			}
- 		}
- 
--		lprocfs_ofd_init_vars(&lvars);
--		rc = class_process_proc_param(PARAM_OST, lvars.obd_vars, cfg,
-+		rc = class_process_proc_seq_param(PARAM_OST, obd->obd_vars, cfg,
- 					      d->ld_obd);
- 		if (rc > 0 || rc == -ENOSYS)
- 			/* we don't understand; pass it on */
-@@ -422,9 +420,10 @@ static struct lu_device_operations ofd_lu_ops = {
- 	.ldo_prepare		= ofd_prepare,
- };
- 
-+LPROC_SEQ_FOPS(lprocfs_nid_stats_clear);
-+
- static int ofd_procfs_init(struct ofd_device *ofd)
- {
--	struct lprocfs_static_vars	 lvars;
- 	struct obd_device		*obd = ofd_obd(ofd);
- 	cfs_proc_dir_entry_t		*entry;
- 	int				 rc = 0;
-@@ -433,8 +432,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
- 
- 	/* lprocfs must be setup before the ofd so state can be safely added
- 	 * to /proc incrementally as the ofd is setup */
--	lprocfs_ofd_init_vars(&lvars);
--	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
-+	lprocfs_ofd_init_vars(obd);
-+	rc = lprocfs_seq_obd_setup(obd);
- 	if (rc) {
- 		CERROR("%s: lprocfs_obd_setup failed: %d.\n",
- 		       obd->obd_name, rc);
-@@ -450,7 +449,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
- 
- 	obd->obd_uses_nid_stats = 1;
- 
--	entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL);
-+	entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL, NULL);
- 	if (IS_ERR(entry)) {
- 		rc = PTR_ERR(entry);
- 		CERROR("%s: error %d setting up lprocfs for %s\n",
-@@ -460,8 +459,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
- 	obd->obd_proc_exports_entry = entry;
- 
- 	entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
--				   lprocfs_nid_stats_clear_read,
--				   lprocfs_nid_stats_clear_write, obd, NULL);
-+#ifndef HAVE_ONLY_PROCFS_SEQ
-+				   NULL, NULL,
-+#endif
-+				   obd, &lprocfs_nid_stats_clear_fops);
- 	if (IS_ERR(entry)) {
- 		rc = PTR_ERR(entry);
- 		CERROR("%s: add proc entry 'clear' failed: %d.\n",
-@@ -477,7 +478,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
- 		GOTO(remove_entry_clear, rc);
- 	RETURN(0);
- remove_entry_clear:
--	lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
-+	lprocfs_remove(&obd->obd_proc_exports_entry);
- obd_cleanup:
- 	lprocfs_obd_cleanup(obd);
- 	lprocfs_free_obd_stats(obd);
-@@ -487,7 +488,7 @@ obd_cleanup:
- 
- static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
- {
--	struct obd_device	*obd = ofd_obd(ofd);
-+	/*struct obd_device	*obd = ofd_obd(ofd);
- 	struct obd_device	*osd_obd = ofd->ofd_osd_exp->exp_obd;
- 	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
- 	cfs_proc_dir_entry_t	*osd_dir;
-@@ -516,20 +517,15 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
- 		lprocfs_add_symlink("writethrough_cache_enable",
- 				    obd->obd_proc_entry,
- 				    "../../%s/%s/writethrough_cache_enable",
--				    osd_root->name, osd_dir->name);
-+				    osd_root->name, osd_dir->name);*/
- }
- 
- static void ofd_procfs_fini(struct ofd_device *ofd)
- {
- 	struct obd_device *obd = ofd_obd(ofd);
- 
--	lprocfs_remove_proc_entry("writethrough_cache_enable",
--				  obd->obd_proc_entry);
--	lprocfs_remove_proc_entry("readcache_max_filesize",
--				  obd->obd_proc_entry);
--	lprocfs_remove_proc_entry("read_cache_enable", obd->obd_proc_entry);
--	lprocfs_remove_proc_entry("brw_stats", obd->obd_proc_entry);
--	lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
-+	lprocfs_remove(&obd->obd_proc_exports_entry);
-+	lprocfs_remove(&obd->obd_proc_entry);
- 	lprocfs_free_per_client_stats(obd);
- 	lprocfs_obd_cleanup(obd);
- 	lprocfs_free_obd_stats(obd);
-@@ -1889,7 +1885,6 @@ static struct lu_device_type ofd_device_type = {
- 
- int __init ofd_init(void)
- {
--	struct lprocfs_static_vars	lvars;
- 	int				rc;
- 
- 	rc = lu_kmem_init(ofd_caches);
-@@ -1902,11 +1897,9 @@ int __init ofd_init(void)
- 		return(rc);
- 	}
- 
--	lprocfs_ofd_init_vars(&lvars);
--
- 	rc = class_register_type(&ofd_obd_ops, NULL, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
- #endif
- 				LUSTRE_OST_NAME, &ofd_device_type);
- 	return rc;
-diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
-index 9285a1f..6acae49 100644
---- a/lustre/ofd/ofd_internal.h
-+++ b/lustre/ofd/ofd_internal.h
-@@ -383,13 +383,10 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
- 
- /* lproc_ofd.c */
- #ifdef LPROCFS
--void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars);
-+void lprocfs_ofd_init_vars(struct obd_device *obd);
- void ofd_stats_counter_init(struct lprocfs_stats *stats);
- #else
--static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
--{
--	memset(lvars, 0, sizeof(*lvars));
--}
-+static void lprocfs_ofd_init_vars(struct obd_device *obd) {}
- static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
- #endif
- 
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
similarity index 94%
rename from sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
rename to sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
index 63efe17..2886b55 100644
--- a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0013-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,7 +1,7 @@
-From 2725bc0f3bc5fa7706b9a475ccb0c191f21ca884 Mon Sep 17 00:00:00 2001
+From 48a712836dff9f15b8d17b9e34caa6acfebf22ce Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
-Subject: [PATCH 05/18] LU-3974 llite: invalidatepage api changed
+Subject: [PATCH 13/13] LU-3974 llite: invalidatepage api changed
 
 Until recently invalidating pages from the buffer cache
 was dependent only on the page passed in and the start
@@ -19,10 +19,10 @@ Change-Id: Iedf458b20b2604bc3099d5ae38bf0ad07df83bd3
  3 files changed, 48 insertions(+), 15 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3ac55d6..ab94acd 100644
+index f44a277..5409fde 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -1287,6 +1287,25 @@ LB_LINUX_TRY_COMPILE([
+@@ -1349,6 +1349,25 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -48,7 +48,7 @@ index 3ac55d6..ab94acd 100644
  # 3.11 readdir now takes the new struct dir_context
  #
  AC_DEFUN([LC_HAVE_DIR_CONTEXT],
-@@ -1442,6 +1461,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -1542,6 +1561,7 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_BLKDEV_RELEASE_RETURN_INT
  
  	 # 3.11
@@ -130,5 +130,5 @@ index 9365c74..bee7996 100644
                  if (!IS_ERR(env)) {
                          inode = vmpage->mapping->host;
 -- 
-1.8.5.1
+1.8.5.3
 

diff --git a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
deleted file mode 100644
index aff2b85..0000000
--- a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
+++ /dev/null
@@ -1,788 +0,0 @@
-From d32db1df1792f96fa9aa88ca949b403946a92eef Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Mon, 2 Dec 2013 12:40:35 -0500
-Subject: [PATCH 17/18] LU-3319 procfs: move mdd proc handling to seq_files
-
-With 3.10 linux kernel and above proc handling now only
-uses struct seq_files. This patch migrates the mdd
-layer proc entries over to using seq_files.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
----
- lustre/include/lustre_lfsck.h  |   4 +-
- lustre/lfsck/lfsck_internal.h  |   9 +-
- lustre/lfsck/lfsck_lib.c       |  68 ++++-------
- lustre/lfsck/lfsck_namespace.c |  61 +++-------
- lustre/mdd/mdd_device.c        |  25 ++--
- lustre/mdd/mdd_internal.h      |   1 -
- lustre/mdd/mdd_lproc.c         | 259 +++++++++++++++++------------------------
- 7 files changed, 162 insertions(+), 265 deletions(-)
-
-diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
-index f75d507..e491933 100644
---- a/lustre/include/lustre_lfsck.h
-+++ b/lustre/include/lustre_lfsck.h
-@@ -52,9 +52,9 @@ int lfsck_start(const struct lu_env *env, struct dt_device *key,
- int lfsck_stop(const struct lu_env *env, struct dt_device *key,
- 	       bool pause);
- 
--int lfsck_get_speed(struct dt_device *key, void *buf, int len);
-+int lfsck_get_speed(struct seq_file *m, struct dt_device *key);
- int lfsck_set_speed(struct dt_device *key, int val);
- 
--int lfsck_dump(struct dt_device *key, void *buf, int len, __u16 type);
-+int lfsck_dump(struct seq_file *m, struct dt_device *key, __u16 type);
- 
- #endif /* _LUSTRE_LFSCK_H */
-diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
-index 56cdff0..50eb341 100644
---- a/lustre/lfsck/lfsck_internal.h
-+++ b/lustre/lfsck/lfsck_internal.h
-@@ -229,8 +229,7 @@ struct lfsck_operations {
- 
- 	int (*lfsck_dump)(const struct lu_env *env,
- 			  struct lfsck_component *com,
--			  char *buf,
--			  int len);
-+			  struct seq_file *m);
- 
- 	int (*lfsck_double_scan)(const struct lu_env *env,
- 				 struct lfsck_component *com);
-@@ -361,10 +360,10 @@ struct lfsck_thread_info {
- /* lfsck_lib.c */
- void lfsck_component_cleanup(const struct lu_env *env,
- 			     struct lfsck_component *com);
--int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
-+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
- 		    const char *prefix);
--int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix);
--int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
-+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
-+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
- 		   const char *prefix);
- void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
- 		    struct lfsck_position *pos, bool init);
-diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
-index 0da2614..da68358 100644
---- a/lustre/lfsck/lfsck_lib.c
-+++ b/lustre/lfsck/lfsck_lib.c
-@@ -258,75 +258,49 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
- 	return 0;
- }
- 
--int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
-+int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
- 		    const char *prefix)
- {
--	int save = *len;
- 	int flag;
--	int rc;
- 	int i;
- 
--	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
--	if (rc <= 0)
--		return -ENOSPC;
-+	seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
- 
--	*buf += rc;
--	*len -= rc;
- 	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
- 		if (flag & bits) {
- 			bits &= ~flag;
--			rc = snprintf(*buf, *len, "%s%c", names[i],
-+			seq_printf(m, "%s%c", names[i],
- 				      bits != 0 ? ',' : '\n');
--			if (rc <= 0)
--				return -ENOSPC;
--
--			*buf += rc;
--			*len -= rc;
- 		}
- 	}
--	return save - *len;
-+	return 0;
- }
- 
--int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix)
-+int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
- {
--	int rc;
--
- 	if (time != 0)
--		rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
--			      cfs_time_current_sec() - time);
-+		seq_printf(m, "%s: "LPU64" seconds\n", prefix,
-+			   cfs_time_current_sec() - time);
- 	else
--		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
--	if (rc <= 0)
--		return -ENOSPC;
--
--	*buf += rc;
--	*len -= rc;
--	return rc;
-+		seq_printf(m, "%s: N/A\n", prefix);
-+	return 0;
- }
- 
--int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
-+int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
- 		   const char *prefix)
- {
--	int rc;
--
- 	if (fid_is_zero(&pos->lp_dir_parent)) {
- 		if (pos->lp_oit_cookie == 0)
--			rc = snprintf(*buf, *len, "%s: N/A, N/A, N/A\n",
--				      prefix);
-+			seq_printf(m, "%s: N/A, N/A, N/A\n", prefix);
- 		else
--			rc = snprintf(*buf, *len, "%s: "LPU64", N/A, N/A\n",
--				      prefix, pos->lp_oit_cookie);
-+			seq_printf(m, "%s: "LPU64", N/A, N/A\n",
-+				   prefix, pos->lp_oit_cookie);
- 	} else {
--		rc = snprintf(*buf, *len, "%s: "LPU64", "DFID", "LPU64"\n",
--			      prefix, pos->lp_oit_cookie,
--			      PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
-+		seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n",
-+			   prefix, pos->lp_oit_cookie,
-+			   PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
- 	}
--	if (rc <= 0)
--		return -ENOSPC;
--
--	*buf += rc;
--	*len -= rc;
--	return rc;
-+	return 0;
- }
- 
- void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
-@@ -765,7 +739,7 @@ int lfsck_double_scan(const struct lu_env *env, struct lfsck_instance *lfsck)
- 
- /* external interfaces */
- 
--int lfsck_get_speed(struct dt_device *key, void *buf, int len)
-+int lfsck_get_speed(struct seq_file *m, struct dt_device *key)
- {
- 	struct lu_env		env;
- 	struct lfsck_instance  *lfsck;
-@@ -780,7 +754,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
- 	if (rc != 0)
- 		GOTO(out, rc);
- 
--	rc = snprintf(buf, len, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
-+	seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
- 	lu_env_fini(&env);
- 
- 	GOTO(out, rc);
-@@ -820,7 +794,7 @@ out:
- }
- EXPORT_SYMBOL(lfsck_set_speed);
- 
--int lfsck_dump(struct dt_device *key, void *buf, int len, __u16 type)
-+int lfsck_dump(struct seq_file *m, struct dt_device *key, __u16 type)
- {
- 	struct lu_env		env;
- 	struct lfsck_instance  *lfsck;
-@@ -840,7 +814,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, __u16 type)
- 	if (rc != 0)
- 		GOTO(out, rc);
- 
--	rc = com->lc_ops->lfsck_dump(&env, com, buf, len);
-+	rc = com->lc_ops->lfsck_dump(&env, com, m);
- 	lu_env_fini(&env);
- 
- 	GOTO(out, rc);
-diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
-index 3cc043d..225351f 100644
---- a/lustre/lfsck/lfsck_namespace.c
-+++ b/lustre/lfsck/lfsck_namespace.c
-@@ -1092,66 +1092,57 @@ static int lfsck_namespace_post(const struct lu_env *env,
- 
- static int
- lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
--		     char *buf, int len)
-+		     struct seq_file *m)
- {
- 	struct lfsck_instance	*lfsck = com->lc_lfsck;
- 	struct lfsck_bookmark	*bk    = &lfsck->li_bookmark_ram;
- 	struct lfsck_namespace	*ns    =
- 				(struct lfsck_namespace *)com->lc_file_ram;
--	int			 save  = len;
--	int			 ret   = -ENOSPC;
- 	int			 rc;
- 
- 	down_read(&com->lc_sem);
--	rc = snprintf(buf, len,
--		      "name: lfsck_namespace\n"
-+	seq_printf(m, "name: lfsck_namespace\n"
- 		      "magic: 0x%x\n"
- 		      "version: %d\n"
- 		      "status: %s\n",
- 		      ns->ln_magic,
- 		      bk->lb_version,
- 		      lfsck_status_names[ns->ln_status]);
--	if (rc <= 0)
--		goto out;
- 
--	buf += rc;
--	len -= rc;
--	rc = lfsck_bits_dump(&buf, &len, ns->ln_flags, lfsck_flags_names,
--			     "flags");
-+	rc = lfsck_bits_dump(m, ns->ln_flags, lfsck_flags_names, "flags");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
--			     "param");
-+	rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_complete,
-+	rc = lfsck_time_dump(m, ns->ln_time_last_complete,
- 			     "time_since_last_completed");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_time_dump(&buf, &len, ns->ln_time_latest_start,
-+	rc = lfsck_time_dump(m, ns->ln_time_latest_start,
- 			     "time_since_latest_start");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_checkpoint,
-+	rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
- 			     "time_since_last_checkpoint");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_latest_start,
-+	rc = lfsck_pos_dump(m, &ns->ln_pos_latest_start,
- 			    "latest_start_position");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_last_checkpoint,
-+	rc = lfsck_pos_dump(m, &ns->ln_pos_last_checkpoint,
- 			    "last_checkpoint_position");
- 	if (rc < 0)
- 		goto out;
- 
--	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_first_inconsistent,
-+	rc = lfsck_pos_dump(m, &ns->ln_pos_first_inconsistent,
- 			    "first_failure_position");
- 	if (rc < 0)
- 		goto out;
-@@ -1171,8 +1162,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			do_div(new_checked, duration);
- 		if (rtime != 0)
- 			do_div(speed, rtime);
--		rc = snprintf(buf, len,
--			      "checked_phase1: "LPU64"\n"
-+		seq_printf(m, "checked_phase1: "LPU64"\n"
- 			      "checked_phase2: "LPU64"\n"
- 			      "updated_phase1: "LPU64"\n"
- 			      "updated_phase2: "LPU64"\n"
-@@ -1204,11 +1194,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			      ns->ln_run_time_phase2,
- 			      speed,
- 			      new_checked);
--		if (rc <= 0)
--			goto out;
--
--		buf += rc;
--		len -= rc;
- 
- 		LASSERT(lfsck->li_di_oit != NULL);
- 
-@@ -1237,9 +1222,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			pos.lp_dir_cookie = 0;
- 		}
- 		spin_unlock(&lfsck->li_lock);
--		rc = lfsck_pos_dump(&buf, &len, &pos, "current_position");
--		if (rc <= 0)
--			goto out;
-+		lfsck_pos_dump(m, &pos, "current_position");
- 	} else if (ns->ln_status == LS_SCANNING_PHASE2) {
- 		cfs_duration_t duration = cfs_time_current() -
- 					  lfsck->li_time_last_checkpoint;
-@@ -1257,8 +1240,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			do_div(speed1, ns->ln_run_time_phase1);
- 		if (rtime != 0)
- 			do_div(speed2, rtime);
--		rc = snprintf(buf, len,
--			      "checked_phase1: "LPU64"\n"
-+		seq_printf(m, "checked_phase1: "LPU64"\n"
- 			      "checked_phase2: "LPU64"\n"
- 			      "updated_phase1: "LPU64"\n"
- 			      "updated_phase2: "LPU64"\n"
-@@ -1293,11 +1275,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			      speed2,
- 			      new_checked,
- 			      PFID(&ns->ln_fid_latest_scanned_phase2));
--		if (rc <= 0)
--			goto out;
--
--		buf += rc;
--		len -= rc;
- 	} else {
- 		__u64 speed1 = ns->ln_items_checked;
- 		__u64 speed2 = ns->ln_objs_checked_phase2;
-@@ -1306,8 +1283,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			do_div(speed1, ns->ln_run_time_phase1);
- 		if (ns->ln_run_time_phase2 != 0)
- 			do_div(speed2, ns->ln_run_time_phase2);
--		rc = snprintf(buf, len,
--			      "checked_phase1: "LPU64"\n"
-+		seq_printf(m, "checked_phase1: "LPU64"\n"
- 			      "checked_phase2: "LPU64"\n"
- 			      "updated_phase1: "LPU64"\n"
- 			      "updated_phase2: "LPU64"\n"
-@@ -1340,17 +1316,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
- 			      ns->ln_run_time_phase2,
- 			      speed1,
- 			      speed2);
--		if (rc <= 0)
--			goto out;
--
--		buf += rc;
--		len -= rc;
- 	}
--	ret = save - len;
--
- out:
- 	up_read(&com->lc_sem);
--	return ret;
-+	return 0;
- }
- 
- static int lfsck_namespace_double_scan(const struct lu_env *env,
-diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
-index 750281a..ee82f71 100644
---- a/lustre/mdd/mdd_device.c
-+++ b/lustre/mdd/mdd_device.c
-@@ -812,16 +812,16 @@ static int mdd_process_config(const struct lu_env *env,
-         ENTRY;
- 
-         switch (cfg->lcfg_command) {
--        case LCFG_PARAM: {
--                struct lprocfs_static_vars lvars;
--
--                lprocfs_mdd_init_vars(&lvars);
--                rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m);
--                if (rc > 0 || rc == -ENOSYS)
--                        /* we don't understand; pass it on */
--                        rc = next->ld_ops->ldo_process_config(env, next, cfg);
--                break;
--        }
-+	case LCFG_PARAM: {
-+		struct obd_device *obd = mdd2obd_dev(m);
-+
-+		rc = class_process_proc_seq_param(PARAM_MDD, obd->obd_vars,
-+						  cfg, m);
-+		if (rc > 0 || rc == -ENOSYS)
-+			/* we don't understand; pass it on */
-+			rc = next->ld_ops->ldo_process_config(env, next, cfg);
-+		break;
-+	}
-         case LCFG_SETUP:
-                 rc = next->ld_ops->ldo_process_config(env, next, cfg);
-                 if (rc)
-@@ -1492,11 +1492,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
- 
- static int __init mdd_mod_init(void)
- {
--	struct lprocfs_static_vars lvars;
- 	int rc;
- 
--	lprocfs_mdd_init_vars(&lvars);
--
- 	rc = lu_kmem_init(mdd_caches);
- 	if (rc)
- 		return rc;
-@@ -1512,7 +1509,7 @@ static int __init mdd_mod_init(void)
- 
- 	rc = class_register_type(&mdd_obd_device_ops, NULL, NULL,
- #ifndef HAVE_ONLY_PROCFS_SEQ
--				lvars.module_vars,
-+				NULL,
- #endif
- 				LUSTRE_MDD_NAME, &mdd_device_type);
- 	if (rc)
-diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
-index daa1dcb..5332b2c 100644
---- a/lustre/mdd/mdd_internal.h
-+++ b/lustre/mdd/mdd_internal.h
-@@ -340,7 +340,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
-                               struct thandle *);
- 
- /* mdd_lproc.c */
--void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars);
- int mdd_procfs_init(struct mdd_device *mdd, const char *name);
- int mdd_procfs_fini(struct mdd_device *mdd);
- 
-diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
-index bd23302..6ddacf7 100644
---- a/lustre/mdd/mdd_lproc.c
-+++ b/lustre/mdd/mdd_lproc.c
-@@ -49,56 +49,13 @@
- #include <libcfs/libcfs_string.h>
- #include "mdd_internal.h"
- 
--int mdd_procfs_init(struct mdd_device *mdd, const char *name)
-+static ssize_t
-+mdd_atime_diff_seq_write(struct file *file, const char *buffer,
-+			 size_t count, loff_t *off)
- {
--        struct lprocfs_static_vars lvars;
--        struct obd_type     *type;
--        int                  rc;
--        ENTRY;
--
--	/* at the moment there is no linkage between lu_type
--	 * and obd_type, so we lookup obd_type this way */
--	type = class_search_type(LUSTRE_MDD_NAME);
--
--        LASSERT(name != NULL);
--        LASSERT(type != NULL);
--
--        /* Find the type procroot and add the proc entry for this device */
--        lprocfs_mdd_init_vars(&lvars);
--        mdd->mdd_proc_entry = lprocfs_register(name, type->typ_procroot,
--                                               lvars.obd_vars, mdd);
--        if (IS_ERR(mdd->mdd_proc_entry)) {
--                rc = PTR_ERR(mdd->mdd_proc_entry);
--                CERROR("Error %d setting up lprocfs for %s\n",
--                       rc, name);
--                mdd->mdd_proc_entry = NULL;
--                GOTO(out, rc);
--        }
--
--	rc = 0;
--
--        EXIT;
--out:
--        if (rc)
--               mdd_procfs_fini(mdd);
--        return rc;
--}
--
--int mdd_procfs_fini(struct mdd_device *mdd)
--{
--        if (mdd->mdd_proc_entry) {
--                 lprocfs_remove(&mdd->mdd_proc_entry);
--                 mdd->mdd_proc_entry = NULL;
--        }
--        RETURN(0);
--}
--
--static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
--                                 unsigned long count, void *data)
--{
--        struct mdd_device *mdd = data;
--        char kernbuf[20], *end;
--        unsigned long diff = 0;
-+	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
-+	char kernbuf[20], *end;
-+	unsigned long diff = 0;
- 
-         if (count > (sizeof(kernbuf) - 1))
-                 return -EINVAL;
-@@ -116,37 +73,34 @@ static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
-         return count;
- }
- 
--static int lprocfs_rd_atime_diff(char *page, char **start, off_t off,
--                                 int count, int *eof, void *data)
-+static int mdd_atime_diff_seq_show(struct seq_file *m, void *data)
- {
--        struct mdd_device *mdd = data;
-+	struct mdd_device *mdd = m->private;
- 
--        *eof = 1;
--        return snprintf(page, count, "%lu\n", mdd->mdd_atime_diff);
-+	return seq_printf(m, "%lu\n", mdd->mdd_atime_diff);
- }
--
-+LPROC_SEQ_FOPS(mdd_atime_diff);
- 
- /**** changelogs ****/
--static int lprocfs_rd_changelog_mask(char *page, char **start, off_t off,
--                                     int count, int *eof, void *data)
-+static int mdd_changelog_mask_seq_show(struct seq_file *m, void *data)
- {
--        struct mdd_device *mdd = data;
--        int i = 0, rc = 0;
--
--        *eof = 1;
--        while (i < CL_LAST) {
--                if (mdd->mdd_cl.mc_mask & (1 << i))
--                        rc += snprintf(page + rc, count - rc, "%s ",
--                                       changelog_type2str(i));
--                i++;
--        }
--        return rc;
-+	struct mdd_device *mdd = m->private;
-+	int i = 0;
-+
-+	while (i < CL_LAST) {
-+		if (mdd->mdd_cl.mc_mask & (1 << i))
-+			seq_printf(m, "%s ", changelog_type2str(i));
-+		i++;
-+	}
-+	seq_printf(m, "\n");
-+	return 0;
- }
- 
--static int lprocfs_wr_changelog_mask(struct file *file, const char *buffer,
--				     unsigned long count, void *data)
-+static ssize_t
-+mdd_changelog_mask_seq_write(struct file *file, const char *buffer,
-+			     size_t count, loff_t *off)
- {
--	struct mdd_device *mdd = data;
-+	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
- 	char *kernbuf;
- 	int rc;
- 	ENTRY;
-@@ -168,45 +122,32 @@ out:
- 	OBD_FREE(kernbuf, PAGE_CACHE_SIZE);
- 	return rc;
- }
--
--struct cucb_data {
--        char *page;
--        int count;
--        int idx;
--};
-+LPROC_SEQ_FOPS(mdd_changelog_mask);
- 
- static int lprocfs_changelog_users_cb(const struct lu_env *env,
- 				      struct llog_handle *llh,
- 				      struct llog_rec_hdr *hdr, void *data)
- {
--        struct llog_changelog_user_rec *rec;
--        struct cucb_data *cucb = (struct cucb_data *)data;
--
--        LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
-+	struct llog_changelog_user_rec *rec;
-+	struct seq_file *m = data;
- 
--        rec = (struct llog_changelog_user_rec *)hdr;
-+	LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
- 
--        cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx,
--                              CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
--                              rec->cur_id, rec->cur_endrec);
--        if (cucb->idx >= cucb->count)
--                return -ENOSPC;
-+	rec = (struct llog_changelog_user_rec *)hdr;
- 
--        return 0;
-+	seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
-+		   rec->cur_id, rec->cur_endrec);
-+	return 0;
- }
- 
--static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
--                                      int count, int *eof, void *data)
-+static int mdd_changelog_users_seq_show(struct seq_file *m, void *data)
- {
- 	struct lu_env		 env;
--	struct mdd_device	*mdd = data;
-+	struct mdd_device	*mdd = m->private;
- 	struct llog_ctxt	*ctxt;
--	struct cucb_data	 cucb;
- 	__u64			 cur;
- 	int			 rc;
- 
--        *eof = 1;
--
-         ctxt = llog_get_context(mdd2obd_dev(mdd),
- 				LLOG_CHANGELOG_USER_ORIG_CTXT);
-         if (ctxt == NULL)
-@@ -223,37 +164,31 @@ static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
- 	cur = mdd->mdd_cl.mc_index;
- 	spin_unlock(&mdd->mdd_cl.mc_lock);
- 
--        cucb.count = count;
--        cucb.page = page;
--        cucb.idx = 0;
--
--        cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
--                              "current index: "LPU64"\n", cur);
--
--        cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
--                              "%-5s %s\n", "ID", "index");
-+	seq_printf(m, "current index: "LPU64"\n", cur);
-+	seq_printf(m, "%-5s %s\n", "ID", "index");
- 
- 	llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb,
--			 &cucb, 0, 0);
-+			 &m, 0, 0);
- 
- 	lu_env_fini(&env);
- 	llog_ctxt_put(ctxt);
--	return cucb.idx;
-+	return 0;
- }
-+LPROC_SEQ_FOPS_RO(mdd_changelog_users);
- 
--static int lprocfs_rd_sync_perm(char *page, char **start, off_t off,
--                                int count, int *eof, void *data)
-+static int mdd_sync_perm_seq_show(struct seq_file *m, void *data)
- {
--        struct mdd_device *mdd = data;
-+	struct mdd_device *mdd = m->private;
- 
--        LASSERT(mdd != NULL);
--        return snprintf(page, count, "%d\n", mdd->mdd_sync_permission);
-+	LASSERT(mdd != NULL);
-+	return seq_printf(m, "%d\n", mdd->mdd_sync_permission);
- }
- 
--static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
--                                unsigned long count, void *data)
-+static ssize_t
-+mdd_sync_perm_seq_write(struct file *file, const char *buffer,
-+			size_t count, loff_t *off)
- {
--        struct mdd_device *mdd = data;
-+	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
-         int val, rc;
- 
-         LASSERT(mdd != NULL);
-@@ -264,24 +199,21 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
-         mdd->mdd_sync_permission = !!val;
-         return count;
- }
-+LPROC_SEQ_FOPS(mdd_sync_perm);
- 
--static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
--					int count, int *eof, void *data)
-+static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
- {
--	struct mdd_device *mdd = data;
--	int rc;
-+	struct mdd_device *mdd = m->private;
- 
- 	LASSERT(mdd != NULL);
--	*eof = 1;
--
--	rc = lfsck_get_speed(mdd->mdd_bottom, page, count);
--	return rc != 0 ? rc : count;
-+	return lfsck_get_speed(m, mdd->mdd_bottom);
- }
- 
--static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
--					unsigned long count, void *data)
-+static ssize_t
-+mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
-+				size_t count, loff_t *off)
- {
--	struct mdd_device *mdd = data;
-+	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
- 	__u32 val;
- 	int rc;
- 
-@@ -293,40 +225,67 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
- 	rc = lfsck_set_speed(mdd->mdd_bottom, val);
- 	return rc != 0 ? rc : count;
- }
-+LPROC_SEQ_FOPS(mdd_lfsck_speed_limit);
- 
--static int lprocfs_rd_lfsck_namespace(char *page, char **start, off_t off,
--				      int count, int *eof, void *data)
-+static int mdd_lfsck_namespace_seq_show(struct seq_file *m, void *data)
- {
--	struct mdd_device *mdd = data;
--	int rc;
-+	struct mdd_device *mdd = m->private;
- 
- 	LASSERT(mdd != NULL);
--	*eof = 1;
--
--	rc = lfsck_dump(mdd->mdd_bottom, page, count, LT_NAMESPACE);
--	return rc;
-+	return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
- }
--
--static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
--        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
--        { "changelog_mask",  lprocfs_rd_changelog_mask,
--                             lprocfs_wr_changelog_mask, 0 },
--        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
--        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
--	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
--			       lprocfs_wr_lfsck_speed_limit, 0 },
--	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
-+LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
-+
-+static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
-+	{ "atime_diff",		&mdd_atime_diff_fops		},
-+	{ "changelog_mask",	&mdd_changelog_mask_fops	},
-+	{ "changelog_users",	&mdd_changelog_users_fops	},
-+	{ "sync_permission",	&mdd_sync_perm_fops		},
-+	{ "lfsck_speed_limit",	&mdd_lfsck_speed_limit_fops	},
-+	{ "lfsck_namespace",	&mdd_lfsck_namespace_fops	},
- 	{ 0 }
- };
- 
--static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
--        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
--        { 0 }
--};
--
--void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
-+int mdd_procfs_init(struct mdd_device *mdd, const char *name)
- {
--        lvars->module_vars  = lprocfs_mdd_module_vars;
--        lvars->obd_vars     = lprocfs_mdd_obd_vars;
-+	struct obd_device *obd = class_name2obd(name);
-+	struct obd_type	  *type;
-+	int		  rc;
-+	ENTRY;
-+
-+	/* at the moment there is no linkage between lu_type
-+	 * and obd_type, so we lookup obd_type this way */
-+	type = class_search_type(LUSTRE_MDD_NAME);
-+
-+	LASSERT(name != NULL);
-+	LASSERT(type != NULL);
-+	LASSERT(obd  != NULL);
-+
-+	/* Find the type procroot and add the proc entry for this device */
-+	obd->obd_vars = lprocfs_mdd_obd_vars;
-+	mdd->mdd_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
-+						   obd->obd_vars, mdd);
-+	if (IS_ERR(mdd->mdd_proc_entry)) {
-+		rc = PTR_ERR(mdd->mdd_proc_entry);
-+		CERROR("Error %d setting up lprocfs for %s\n",
-+			rc, name);
-+		mdd->mdd_proc_entry = NULL;
-+		GOTO(out, rc);
-+	}
-+	rc = 0;
-+
-+	EXIT;
-+out:
-+	if (rc)
-+		mdd_procfs_fini(mdd);
-+	return rc;
- }
- 
-+int mdd_procfs_fini(struct mdd_device *mdd)
-+{
-+	if (mdd->mdd_proc_entry) {
-+		lprocfs_remove(&mdd->mdd_proc_entry);
-+		mdd->mdd_proc_entry = NULL;
-+	}
-+	RETURN(0);
-+}
--- 
-1.8.5.1
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index a7fbbed..959fb1f 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -34,23 +34,18 @@ DEPEND="${RDEPEND}
 
 PATCHES=(
 	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch"
-	"${FILESDIR}/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch"
-	"${FILESDIR}/0004-LU-3974-llite-use-new-struct-dir_context.patch"
-	"${FILESDIR}/0005-LU-3974-llite-invalidatepage-api-changed.patch"
-	"${FILESDIR}/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch"
-	"${FILESDIR}/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch"
-	"${FILESDIR}/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch"
-	"${FILESDIR}/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch"
-	"${FILESDIR}/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch"
-	"${FILESDIR}/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
-	"${FILESDIR}/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch"
-	"${FILESDIR}/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
+	"${FILESDIR}/0002-LU-3319-lprocfs-client-side-cleanups.patch"
+	"${FILESDIR}/0003-LU-3319-procfs-fix-symlink-handling.patch"
+	"${FILESDIR}/0004-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0005-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0006-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0007-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0008-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0009-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0010-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
+	"${FILESDIR}/0011-LU-3373-osd-ldiskfs-readdir-replace-by-iterate.patch"
+	"${FILESDIR}/0012-LU-3974-llite-use-new-struct-dir_context.patch"
+	"${FILESDIR}/0013-LU-3974-llite-invalidatepage-api-changed.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-12-19 14:21 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-12-19 14:21 UTC (permalink / raw
  To: gentoo-commits

commit:     47524e1e3842eac8c60584f1393a9ea25c0ffc3a
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 19 14:21:16 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 19 14:21:16 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=47524e1e

It moves..

Package-Manager: portage-2.2.7
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                        | 21 +++++++++++++++++++++
 ...ocfs-move-mdt-mds-proc-handling-to-seq_fil.patch | 17 +++++++++++++----
 ...procfs-move-mdd-proc-handling-to-seq_files.patch |  2 +-
 ...ocfs-update-ldiskfs-proc-handling-to-seq_f.patch |  2 +-
 4 files changed, 36 insertions(+), 6 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index e2a6f7f..37ee2bd 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,27 @@
 # $Header: $
 
   19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,
+  files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch,
+  files/0004-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0005-LU-3974-llite-invalidatepage-api-changed.patch,
+  files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch,
+  files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch,
+  files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch,
+  files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch,
+  files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch,
+  files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch,
+  files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch,
+  files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch:
+  It moves..
+
+  19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
   files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
   files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch,
   files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch:

diff --git a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index 8900d6c..3bc1eb5 100644
--- a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,4 +1,4 @@
-From 1d427d5090964e00cda5f3f1318cb84ec0376752 Mon Sep 17 00:00:00 2001
+From 2110d1028da0bab44e1b3494ba4642155195a735 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:36:06 -0500
 Subject: [PATCH 16/18] LU-3319 procfs: move mdt/mds proc handling to seq_files
@@ -13,13 +13,13 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
  lustre/mdt/mdt_coordinator.c      | 246 +++++++---------
  lustre/mdt/mdt_handler.c          |  16 +-
- lustre/mdt/mdt_hsm_cdt_actions.c  |   3 -
+ lustre/mdt/mdt_hsm_cdt_actions.c  |   5 +-
  lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
  lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
  lustre/mdt/mdt_internal.h         |  14 +-
  lustre/mdt/mdt_lproc.c            | 603 ++++++++++++++++++--------------------
  lustre/mdt/mdt_mds.c              |  12 +-
- 8 files changed, 400 insertions(+), 504 deletions(-)
+ 8 files changed, 401 insertions(+), 505 deletions(-)
 
 diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
 index 3915e21..eb05bdf 100644
@@ -501,7 +501,7 @@ index 8daf7e1..9f7d4ba 100644
  				LUSTRE_MDT_NAME, &mdt_device_type);
  	if (rc)
 diff --git a/lustre/mdt/mdt_hsm_cdt_actions.c b/lustre/mdt/mdt_hsm_cdt_actions.c
-index da7f5a9..3d88141 100644
+index da7f5a9..49c6b8b 100644
 --- a/lustre/mdt/mdt_hsm_cdt_actions.c
 +++ b/lustre/mdt/mdt_hsm_cdt_actions.c
 @@ -513,9 +513,6 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
@@ -514,6 +514,15 @@ index da7f5a9..3d88141 100644
  	rc = seq_open(file, &mdt_hsm_actions_proc_ops);
  	if (rc)
  		RETURN(rc);
+@@ -532,7 +529,7 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
+ 	/* mdt is saved in proc_dir_entry->data by
+ 	 * mdt_coordinator_procfs_init() calling lprocfs_register()
+ 	 */
+-	mdt = (struct mdt_device *)PDE(inode)->data;
++	mdt = (struct mdt_device *)PDE_DATA(inode);
+ 	aai->aai_mdt = mdt;
+ 	s = file->private_data;
+ 	s->private = aai;
 diff --git a/lustre/mdt/mdt_hsm_cdt_agent.c b/lustre/mdt/mdt_hsm_cdt_agent.c
 index 9a9ce6d..158cced 100644
 --- a/lustre/mdt/mdt_hsm_cdt_agent.c

diff --git a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
index 7f8ae67..aff2b85 100644
--- a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From f45e2a9cb1c481b8c8e91d6bdf6c5d1028ed0a47 Mon Sep 17 00:00:00 2001
+From d32db1df1792f96fa9aa88ca949b403946a92eef Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:40:35 -0500
 Subject: [PATCH 17/18] LU-3319 procfs: move mdd proc handling to seq_files

diff --git a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index 67c9862..c74a18b 100644
--- a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,4 +1,4 @@
-From 20a49f022922cde18f4969151b7255032228f970 Mon Sep 17 00:00:00 2001
+From 40b657155058d824c3ef8e4f22955eacca5eeb79 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 14 Nov 2013 19:41:12 -0500
 Subject: [PATCH 18/18] LU-3319 procfs: update ldiskfs proc handling to


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-12-19 14:13 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-12-19 14:13 UTC (permalink / raw
  To: gentoo-commits

commit:     7ad4a450a83ea8c9d41ec04b625dc97859cbb2ff
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 19 14:13:05 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 19 14:13:05 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=7ad4a450

More... More.. Go^W patches

Package-Manager: portage-2.2.7
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                         |  6 ++++++
 ...rocfs-move-mdt-mds-proc-handling-to-seq_fil.patch | 20 +++++---------------
 ...-procfs-move-mdd-proc-handling-to-seq_files.patch |  2 +-
 ...rocfs-update-ldiskfs-proc-handling-to-seq_f.patch |  2 +-
 4 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 1a47118..e2a6f7f 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,12 @@
 # $Header: $
 
   19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch,
+  files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch:
+  More... More.. Go^W patches
+
+  19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch,
   +files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
   +files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,

diff --git a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
index d1ebc8c..8900d6c 100644
--- a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
+++ b/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -1,4 +1,4 @@
-From 6bc2e0318f464ba5b946c97031e63dc354bfc87e Mon Sep 17 00:00:00 2001
+From 1d427d5090964e00cda5f3f1318cb84ec0376752 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:36:06 -0500
 Subject: [PATCH 16/18] LU-3319 procfs: move mdt/mds proc handling to seq_files
@@ -9,16 +9,17 @@ layer proc entries over to using seq_files.
 
 Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Icbafdcd2c2fe3959a51dda3f9c715b0ff8d95742
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
  lustre/mdt/mdt_coordinator.c      | 246 +++++++---------
  lustre/mdt/mdt_handler.c          |  16 +-
- lustre/mdt/mdt_hsm_cdt_actions.c  |   7 +-
+ lustre/mdt/mdt_hsm_cdt_actions.c  |   3 -
  lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
  lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
  lustre/mdt/mdt_internal.h         |  14 +-
  lustre/mdt/mdt_lproc.c            | 603 ++++++++++++++++++--------------------
  lustre/mdt/mdt_mds.c              |  12 +-
- 8 files changed, 402 insertions(+), 506 deletions(-)
+ 8 files changed, 400 insertions(+), 504 deletions(-)
 
 diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
 index 3915e21..eb05bdf 100644
@@ -500,7 +501,7 @@ index 8daf7e1..9f7d4ba 100644
  				LUSTRE_MDT_NAME, &mdt_device_type);
  	if (rc)
 diff --git a/lustre/mdt/mdt_hsm_cdt_actions.c b/lustre/mdt/mdt_hsm_cdt_actions.c
-index da7f5a9..c4c5bbf 100644
+index da7f5a9..3d88141 100644
 --- a/lustre/mdt/mdt_hsm_cdt_actions.c
 +++ b/lustre/mdt/mdt_hsm_cdt_actions.c
 @@ -513,9 +513,6 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
@@ -513,17 +514,6 @@ index da7f5a9..c4c5bbf 100644
  	rc = seq_open(file, &mdt_hsm_actions_proc_ops);
  	if (rc)
  		RETURN(rc);
-@@ -532,8 +529,8 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
- 	/* mdt is saved in proc_dir_entry->data by
- 	 * mdt_coordinator_procfs_init() calling lprocfs_register()
- 	 */
--	mdt = (struct mdt_device *)PDE(inode)->data;
--	aai->aai_mdt = mdt;
-+	mdt = (struct mdt_device *)PDE_DATA(inode);
-+	aai->aai_obd = mdt2obd_dev(mdt);
- 	s = file->private_data;
- 	s->private = aai;
- 
 diff --git a/lustre/mdt/mdt_hsm_cdt_agent.c b/lustre/mdt/mdt_hsm_cdt_agent.c
 index 9a9ce6d..158cced 100644
 --- a/lustre/mdt/mdt_hsm_cdt_agent.c

diff --git a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
index 0d10047..7f8ae67 100644
--- a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
+++ b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
@@ -1,4 +1,4 @@
-From df4a9172881e4eac4f7ef511079c2f306d515bf7 Mon Sep 17 00:00:00 2001
+From f45e2a9cb1c481b8c8e91d6bdf6c5d1028ed0a47 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:40:35 -0500
 Subject: [PATCH 17/18] LU-3319 procfs: move mdd proc handling to seq_files

diff --git a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
index 9d9976a..67c9862 100644
--- a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -1,4 +1,4 @@
-From 92589047bca132101a9106f018b2ed9ad1efdfd0 Mon Sep 17 00:00:00 2001
+From 20a49f022922cde18f4969151b7255032228f970 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 14 Nov 2013 19:41:12 -0500
 Subject: [PATCH 18/18] LU-3319 procfs: update ldiskfs proc handling to


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-12-19 13:45 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-12-19 13:45 UTC (permalink / raw
  To: gentoo-commits

commit:     ed3fe3aa23eae829c2bbaeb29115cba0889f1a68
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 19 13:44:55 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 19 13:44:55 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=ed3fe3aa

More...

Package-Manager: portage-2.2.7
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   22 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    2 +-
 ...3-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch |    2 +-
 ...74-llite-dentry-d_compare-changes-in-3.11.patch |    2 +-
 ...-LU-3974-llite-use-new-struct-dir_context.patch |    2 +-
 ...-LU-3974-llite-invalidatepage-api-changed.patch |    2 +-
 ...cfs-move-llite-proc-handling-over-to-seq_.patch |    2 +-
 ...cfs-move-lmv-proc-handling-over-to-seq_fi.patch |    2 +-
 ...cfs-move-ldlm-proc-handling-over-to-seq_f.patch |    2 +-
 ...cfs-move-ost-proc-handling-over-to-seq_fi.patch |    2 +-
 ...cfs-update-shared-server-side-core-proc-h.patch | 1260 +++++++++++++++++
 ...cfs-update-zfs-proc-handling-to-seq_files.patch |  171 +++
 ...rocfs-move-mgs-proc-handling-to-seq_files.patch |  351 +++++
 ...rocfs-move-ofd-proc-handling-to-seq_files.patch |  759 ++++++++++
 ...rocfs-move-lod-proc-handling-to-seq_files.patch |  589 ++++++++
 ...rocfs-move-osp-proc-handling-to-seq_files.patch |  779 ++++++++++
 ...cfs-move-mdt-mds-proc-handling-to-seq_fil.patch | 1484 ++++++++++++++++++++
 ...rocfs-move-mdd-proc-handling-to-seq_files.patch |  788 +++++++++++
 ...cfs-update-ldiskfs-proc-handling-to-seq_f.patch |  748 ++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    9 +
 20 files changed, 6969 insertions(+), 9 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 33ff78c..1a47118 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,28 @@
 # $Header: $
 
   19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch,
+  +files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch,
+  +files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch,
+  +files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch,
+  +files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch,
+  +files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch,
+  +files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch,
+  +files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch,
+  +files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,
+  files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch,
+  files/0004-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0005-LU-3974-llite-invalidatepage-api-changed.patch,
+  files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch,
+  files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch,
+  files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch,
+  files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch,
+  lustre-9999.ebuild:
+  More...
+
+  19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch,
   +files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch,
   +files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index b1123cc..e489733 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From a607b37a64f797b766825ccb6f41176685cd843f Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/10] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/18] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
index d231dd4..8f3258a 100644
--- a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
+++ b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
@@ -1,7 +1,7 @@
 From e53207df22261a635315a62f1405eb8c7b700963 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 5 Dec 2013 09:05:22 -0500
-Subject: [PATCH 02/10] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
+Subject: [PATCH 02/18] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
 
 ldiskfs patches
 

diff --git a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
index 09fccee..6873a22 100644
--- a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
+++ b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
@@ -1,7 +1,7 @@
 From 18cfd561fae3b2eac663b51f8e5147b59c711af7 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 11 Dec 2013 10:29:41 -0500
-Subject: [PATCH 03/10] LU-3974 llite: dentry d_compare changes in 3.11
+Subject: [PATCH 03/18] LU-3974 llite: dentry d_compare changes in 3.11
 
 In the linux 3.11 kernel the d_compare function has
 removed passing in any struct inode arguments. This

diff --git a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
index d60c144..f79a30e 100644
--- a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,7 +1,7 @@
 From 82f692de87cb6c7db8f050b3201d23f4852a404c Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:05:14 -0500
-Subject: [PATCH 04/10] LU-3974 llite: use new struct dir_context
+Subject: [PATCH 04/18] LU-3974 llite: use new struct dir_context
 
 The readdir and nfs code over time has added more
 parameters to be passed to be processed. For the 3.11

diff --git a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
index ea5eea5..63efe17 100644
--- a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,7 +1,7 @@
 From 2725bc0f3bc5fa7706b9a475ccb0c191f21ca884 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
-Subject: [PATCH 05/10] LU-3974 llite: invalidatepage api changed
+Subject: [PATCH 05/18] LU-3974 llite: invalidatepage api changed
 
 Until recently invalidating pages from the buffer cache
 was dependent only on the page passed in and the start

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
index 1df7373..e56376a 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
@@ -1,7 +1,7 @@
 From 01ce737ef8bba37c904d79f3aabe88a4ead20b74 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 5 Dec 2013 13:53:37 -0500
-Subject: [PATCH 06/10] LU-3319 procfs: move llite proc handling over to
+Subject: [PATCH 06/18] LU-3319 procfs: move llite proc handling over to
  seq_file
 
 For lustre clients a special abstract layer so a lustre

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
index c710c5c..0fee4ee 100644
--- a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
@@ -1,7 +1,7 @@
 From 4169735b41f2452d884e24c92581af0c4fbf6121 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 14 Nov 2013 09:32:29 -0500
-Subject: [PATCH 07/10] LU-3319 procfs: move lmv proc handling over to seq_file
+Subject: [PATCH 07/18] LU-3319 procfs: move lmv proc handling over to seq_file
 
 In order to support 3.10+ kernels for clients we adapt
 the lmv proc handling to using seq_files.

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
index 5d2cd20..d3768d5 100644
--- a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
@@ -1,7 +1,7 @@
 From a464fd862a7876e1c4f679b32956904eee88d45e Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 17 Dec 2013 19:11:15 -0500
-Subject: [PATCH 08/10] LU-3319 procfs: move ldlm proc handling over to
+Subject: [PATCH 08/18] LU-3319 procfs: move ldlm proc handling over to
  seq_file
 
 In order to support 3.10+ kernels for clients we adapt

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
index 0f01c97..59eeb06 100644
--- a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
@@ -1,7 +1,7 @@
 From 917c26236db7d3684733f693ccc579c3dd41f26c Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 14 Nov 2013 09:48:08 -0500
-Subject: [PATCH 09/10] LU-3319 procfs: move ost proc handling over to seq_file
+Subject: [PATCH 09/18] LU-3319 procfs: move ost proc handling over to seq_file
 
 Most of the current proc handling of the OST is already
 based on seq_file handling except for the reporting of

diff --git a/sys-cluster/lustre/files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch
new file mode 100644
index 0000000..01afb45
--- /dev/null
+++ b/sys-cluster/lustre/files/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch
@@ -0,0 +1,1260 @@
+From 7ae65a1edcb16232d34ead46860f6390ce93f583 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 3 Dec 2013 16:30:21 -0500
+Subject: [PATCH 10/18] LU-3319 procfs: update shared server side core proc
+ handling to seq_files
+
+Several of the server side abstact layers such as mdt,mgs
+etc share several common proc handling routines. This patch
+adds the seq_file version so that the stack can gradually
+be ported over to these new methods.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I2dd64046fdd4d2bb6f7550bb49cf1c9ef703c157
+---
+ libcfs/include/libcfs/libcfs_hash.h |   5 +
+ libcfs/libcfs/hash.c                |  80 ++++++
+ lustre/include/dt_object.h          |   8 +
+ lustre/include/lprocfs_status.h     | 101 ++++++--
+ lustre/obdclass/dt_object.c         |  96 +++++++-
+ lustre/obdclass/lprocfs_jobstats.c  |  47 +++-
+ lustre/obdclass/lprocfs_status.c    | 467 ++++++++++++++++++++++++++++++++----
+ lustre/ptlrpc/lproc_ptlrpc.c        |  43 ----
+ 8 files changed, 724 insertions(+), 123 deletions(-)
+
+diff --git a/libcfs/include/libcfs/libcfs_hash.h b/libcfs/include/libcfs/libcfs_hash.h
+index e7d2dc8..07a12f6 100644
+--- a/libcfs/include/libcfs/libcfs_hash.h
++++ b/libcfs/include/libcfs/libcfs_hash.h
+@@ -840,8 +840,13 @@ static inline void __cfs_hash_set_theta(cfs_hash_t *hs, int min, int max)
+ }
+ 
+ /* Generic debug formatting routines mainly for proc handler */
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int cfs_hash_debug_header(char *str, int size);
+ int cfs_hash_debug_str(cfs_hash_t *hs, char *str, int size);
++#endif
++struct seq_file;
++int cfs_hash_debug_header_seq(struct seq_file *m);
++int cfs_hash_debug_str_seq(cfs_hash_t *hs, struct seq_file *m);
+ 
+ /*
+  * Generic djb2 hash algorithm for character arrays.
+diff --git a/libcfs/libcfs/hash.c b/libcfs/libcfs/hash.c
+index 35c64a0..0c4faf8 100644
+--- a/libcfs/libcfs/hash.c
++++ b/libcfs/libcfs/hash.c
+@@ -2026,6 +2026,7 @@ void cfs_hash_rehash_key(cfs_hash_t *hs, const void *old_key,
+ }
+ EXPORT_SYMBOL(cfs_hash_rehash_key);
+ 
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int cfs_hash_debug_header(char *str, int size)
+ {
+         return snprintf(str, size, "%-*s%6s%6s%6s%6s%6s%6s%6s%7s%8s%8s%8s%s\n",
+@@ -2035,6 +2036,17 @@ int cfs_hash_debug_header(char *str, int size)
+                  " distribution");
+ }
+ EXPORT_SYMBOL(cfs_hash_debug_header);
++#endif
++
++int cfs_hash_debug_header_seq(struct seq_file *m)
++{
++	return seq_printf(m, "%-*s%6s%6s%6s%6s%6s%6s%6s%7s%8s%8s%8s%s\n",
++			CFS_HASH_BIGNAME_LEN,
++			"name", "cur", "min", "max", "theta", "t-min", "t-max",
++			"flags", "rehash", "count", "maxdep", "maxdepb",
++			" distribution");
++}
++EXPORT_SYMBOL(cfs_hash_debug_header_seq);
+ 
+ static cfs_hash_bucket_t **
+ cfs_hash_full_bkts(cfs_hash_t *hs)
+@@ -2060,6 +2072,7 @@ cfs_hash_full_nbkt(cfs_hash_t *hs)
+                CFS_HASH_RH_NBKT(hs) : CFS_HASH_NBKT(hs);
+ }
+ 
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int cfs_hash_debug_str(cfs_hash_t *hs, char *str, int size)
+ {
+         int                    dist[8] = { 0, };
+@@ -2134,3 +2147,70 @@ int cfs_hash_debug_str(cfs_hash_t *hs, char *str, int size)
+         return c;
+ }
+ EXPORT_SYMBOL(cfs_hash_debug_str);
++#endif
++
++int cfs_hash_debug_str_seq(cfs_hash_t *hs, struct seq_file *m)
++{
++	int	dist[8]	= { 0, };
++	int	maxdep	= -1;
++	int	maxdepb	= -1;
++	int	total	= 0;
++	int	c	= 0;
++	int	theta;
++	int	i;
++
++	cfs_hash_lock(hs, 0);
++	theta = __cfs_hash_theta(hs);
++
++	c += seq_printf(m, "%-*s ", CFS_HASH_BIGNAME_LEN, hs->hs_name);
++	c += seq_printf(m, "%5d ",  1 << hs->hs_cur_bits);
++	c += seq_printf(m, "%5d ",  1 << hs->hs_min_bits);
++	c += seq_printf(m, "%5d ",  1 << hs->hs_max_bits);
++	c += seq_printf(m, "%d.%03d ", __cfs_hash_theta_int(theta),
++			__cfs_hash_theta_frac(theta));
++	c += seq_printf(m, "%d.%03d ", __cfs_hash_theta_int(hs->hs_min_theta),
++			__cfs_hash_theta_frac(hs->hs_min_theta));
++	c += seq_printf(m, "%d.%03d ", __cfs_hash_theta_int(hs->hs_max_theta),
++			__cfs_hash_theta_frac(hs->hs_max_theta));
++	c += seq_printf(m, " 0x%02x ", hs->hs_flags);
++	c += seq_printf(m, "%6d ", hs->hs_rehash_count);
++
++	/*
++	 * The distribution is a summary of the chained hash depth in
++	 * each of the libcfs hash buckets.  Each buckets hsb_count is
++	 * divided by the hash theta value and used to generate a
++	 * histogram of the hash distribution.  A uniform hash will
++	 * result in all hash buckets being close to the average thus
++	 * only the first few entries in the histogram will be non-zero.
++	 * If you hash function results in a non-uniform hash the will
++	 * be observable by outlier bucks in the distribution histogram.
++	 *
++	 * Uniform hash distribution:		128/128/0/0/0/0/0/0
++	 * Non-Uniform hash distribution:	128/125/0/0/0/0/2/1
++	 */
++	for (i = 0; i < cfs_hash_full_nbkt(hs); i++) {
++		cfs_hash_bd_t bd;
++
++		bd.bd_bucket = cfs_hash_full_bkts(hs)[i];
++		cfs_hash_bd_lock(hs, &bd, 0);
++		if (maxdep < bd.bd_bucket->hsb_depmax) {
++			maxdep  = bd.bd_bucket->hsb_depmax;
++#ifdef __KERNEL__
++			maxdepb = ffz(~maxdep);
++#endif
++		}
++		total += bd.bd_bucket->hsb_count;
++		dist[min(fls(bd.bd_bucket->hsb_count/max(theta,1)),7)]++;
++		cfs_hash_bd_unlock(hs, &bd, 0);
++	}
++
++	c += seq_printf(m, "%7d ", total);
++	c += seq_printf(m, "%7d ", maxdep);
++	c += seq_printf(m, "%7d ", maxdepb);
++	for (i = 0; i < 8; i++)
++		c += seq_printf(m, "%d%c",  dist[i], (i == 7) ? '\n' : '/');
++
++	cfs_hash_unlock(hs, 0);
++	return c;
++}
++EXPORT_SYMBOL(cfs_hash_debug_str_seq);
+diff --git a/lustre/include/dt_object.h b/lustre/include/dt_object.h
+index bdf559d..ba88a80 100644
+--- a/lustre/include/dt_object.h
++++ b/lustre/include/dt_object.h
+@@ -1489,6 +1489,7 @@ int dt_global_init(void);
+ void dt_global_fini(void);
+ 
+ # ifdef LPROCFS
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_dt_rd_blksize(char *page, char **start, off_t off,
+ 			  int count, int *eof, void *data);
+ int lprocfs_dt_rd_kbytestotal(char *page, char **start, off_t off,
+@@ -1501,6 +1502,13 @@ int lprocfs_dt_rd_filestotal(char *page, char **start, off_t off,
+ 			     int count, int *eof, void *data);
+ int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off,
+ 			    int count, int *eof, void *data);
++#endif
++int lprocfs_dt_blksize_seq_show(struct seq_file *m, void *v);
++int lprocfs_dt_kbytestotal_seq_show(struct seq_file *m, void *v);
++int lprocfs_dt_kbytesfree_seq_show(struct seq_file *m, void *v);
++int lprocfs_dt_kbytesavail_seq_show(struct seq_file *m, void *v);
++int lprocfs_dt_filestotal_seq_show(struct seq_file *m, void *v);
++int lprocfs_dt_filesfree_seq_show(struct seq_file *m, void *v);
+ # endif /* LPROCFS */
+ 
+ #endif /* __LUSTRE_DT_OBJECT_H */
+diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h
+index 2080592..70f10a9 100644
+--- a/lustre/include/lprocfs_status.h
++++ b/lustre/include/lprocfs_status.h
+@@ -603,12 +603,19 @@ extern struct proc_dir_entry *
+ lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent,
+                     const char *format, ...);
+ extern void lprocfs_free_per_client_stats(struct obd_device *obd);
++#ifdef HAVE_SERVER_SUPPORT
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ extern int
+ lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
+                               unsigned long count, void *data);
+ extern int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
+                                         int count, int *eof,  void *data);
+-
++#endif
++extern ssize_t
++lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off);
++extern int lprocfs_nid_stats_clear_seq_show(struct seq_file *file, void *data);
++#endif
+ extern int lprocfs_register_stats(cfs_proc_dir_entry_t *root, const char *name,
+                                   struct lprocfs_stats *stats);
+ 
+@@ -700,6 +707,9 @@ extern int lprocfs_conn_uuid_seq_show(struct seq_file *m, void *data);
+ extern int lprocfs_import_seq_show(struct seq_file *m, void *data);
+ extern int lprocfs_state_seq_show(struct seq_file *m, void *data);
+ extern int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data);
++#ifdef HAVE_SERVER_SUPPORT
++extern int lprocfs_num_exports_seq_show(struct seq_file *m, void *data);
++#endif
+ struct adaptive_timeout;
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ extern int lprocfs_at_hist_helper(char *page, int count, int rc,
+@@ -715,9 +725,11 @@ extern int lprocfs_timeouts_seq_show(struct seq_file *m, void *data);
+ extern ssize_t
+ lprocfs_timeouts_seq_write(struct file *file, const char *buffer,
+ 			   size_t count, loff_t *off);
++#ifndef HAVE_ONLY_PROCFS_SEQ
++#ifdef HAVE_SERVER_SUPPORT
+ extern int lprocfs_wr_evict_client(struct file *file, const char *buffer,
+                                    unsigned long count, void *data);
+-#ifndef HAVE_ONLY_PROCFS_SEQ
++#endif
+ extern int lprocfs_wr_ping(struct file *file, const char *buffer,
+                            unsigned long count, void *data);
+ extern int lprocfs_wr_import(struct file *file, const char *buffer,
+@@ -727,6 +739,11 @@ extern int lprocfs_rd_pinger_recov(char *page, char **start, off_t off,
+ extern int lprocfs_wr_pinger_recov(struct file *file, const char *buffer,
+                                    unsigned long count, void *data);
+ #endif
++#ifdef HAVE_SERVER_SUPPORT
++extern ssize_t
++lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off);
++#endif
+ extern ssize_t
+ lprocfs_ping_seq_write(struct file *file, const char *buffer,
+ 		       size_t count, loff_t *off);
+@@ -785,10 +802,10 @@ void lprocfs_stats_collect(struct lprocfs_stats *stats, int idx,
+                            struct lprocfs_counter *cnt);
+ 
+ #ifdef HAVE_SERVER_SUPPORT
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ /* lprocfs_status.c: recovery status */
+ int lprocfs_obd_rd_recovery_status(char *page, char **start, off_t off,
+                                    int count, int *eof, void *data);
+-#endif
+ /* lprocfs_statuc.c: hash statistics */
+ int lprocfs_obd_rd_hash(char *page, char **start, off_t off,
+                         int count, int *eof, void *data);
+@@ -798,7 +815,19 @@ int lprocfs_obd_rd_ir_factor(char *page, char **start, off_t off,
+                              int count, int *eof, void *data);
+ int lprocfs_obd_wr_ir_factor(struct file *file, const char *buffer,
+                              unsigned long count, void *data);
++#endif
++/* lprocfs_status.c: recovery status */
++int lprocfs_recovery_status_seq_show(struct seq_file *m, void *data);
+ 
++/* lprocfs_status.c: hash statistics */
++int lprocfs_hash_seq_show(struct seq_file *m, void *data);
++
++/* lprocfs_status.c: IR factor */
++int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data);
++ssize_t
++lprocfs_ir_factor_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off);
++#endif
+ extern int lprocfs_single_release(cfs_inode_t *, struct file *);
+ extern int lprocfs_seq_release(cfs_inode_t *, struct file *);
+ 
+@@ -874,21 +903,23 @@ struct file_operations name##_fops = {					\
+ 		.release = lprocfs_single_release,			\
+ 	};
+ 
++/* lproc_ptlrpc.c */
++struct ptlrpc_request;
++extern void target_print_req(void *seq_file, struct ptlrpc_request *req);
++
++#ifdef HAVE_SERVER_SUPPORT
+ /* lprocfs_jobstats.c */
+ int lprocfs_job_stats_log(struct obd_device *obd, char *jobid,
+ 			  int event, long amount);
+ void lprocfs_job_stats_fini(struct obd_device *obd);
+ int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num,
+ 			   cntr_init_callback fn);
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_rd_job_interval(char *page, char **start, off_t off,
+ 			    int count, int *eof, void *data);
+ int lprocfs_wr_job_interval(struct file *file, const char *buffer,
+ 			    unsigned long count, void *data);
+ 
+-/* lproc_ptlrpc.c */
+-struct ptlrpc_request;
+-extern void target_print_req(void *seq_file, struct ptlrpc_request *req);
+-
+ /* lproc_status.c */
+ int lprocfs_obd_rd_recovery_time_soft(char *page, char **start, off_t off,
+                                       int count, int *eof, void *data);
+@@ -900,6 +931,24 @@ int lprocfs_obd_rd_recovery_time_hard(char *page, char **start, off_t off,
+ int lprocfs_obd_wr_recovery_time_hard(struct file *file,
+                                       const char *buffer,
+                                       unsigned long count, void *data);
++int lprocfs_target_rd_instance(char *page, char **start, off_t off,
++			       int count, int *eof, void *data);
++#endif
++int lprocfs_job_interval_seq_show(struct seq_file *m, void *data);
++ssize_t
++lprocfs_job_interval_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off);
++/* lproc_status.c */
++int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data);
++ssize_t lprocfs_recovery_time_soft_seq_write(struct file *file,
++						const char *buffer,
++						size_t count, loff_t *off);
++int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data);
++ssize_t
++lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off);
++int lprocfs_target_instance_seq_show(struct seq_file *m, void *data);
++#endif
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_obd_rd_max_pages_per_rpc(char *page, char **start, off_t off,
+                                      int count, int *eof, void *data);
+@@ -910,8 +959,6 @@ int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data);
+ ssize_t
+ lprocfs_obd_max_pages_per_rpc_seq_write(struct file *file, const char *buffer,
+ 				       size_t count, loff_t *off);
+-int lprocfs_target_rd_instance(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data);
+ 
+ /* all quota proc functions */
+ extern int lprocfs_quota_rd_bunit(char *page, char **start,
+@@ -1032,7 +1079,26 @@ static inline void lprocfs_free_md_stats(struct obd_device *obddev)
+ struct obd_export;
+ static inline int lprocfs_add_clear_entry(struct obd_export *exp)
+ { return 0; }
++static inline void lprocfs_free_per_client_stats(struct obd_device *obd)
++{ return; }
+ #ifdef HAVE_SERVER_SUPPORT
++#ifndef HAVE_ONLY_PROCFS_SEQ
++static inline
++int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
++				  unsigned long count, void *data)
++{return count;}
++static inline
++int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
++				 int count, int *eof,  void *data)
++{return count;}
++#endif
++static inline
++ssize_t lprocfs_nid_stats_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
++{return 0;}
++static inline
++int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data)
++{return 0;}
+ static inline int lprocfs_exp_setup(struct obd_export *exp,lnet_nid_t *peer_nid,
+                                     int *newnid)
+ { return 0; }
+@@ -1050,17 +1116,6 @@ static inline struct proc_dir_entry *
+ lprocfs_add_symlink(const char *name, struct proc_dir_entry *parent,
+                     const char *format, ...)
+ {return NULL; }
+-static inline void lprocfs_free_per_client_stats(struct obd_device *obd)
+-{ return; }
+-static inline
+-int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
+-                                  unsigned long count, void *data)
+-{return count;}
+-static inline
+-int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
+-                                 int count, int *eof,  void *data)
+-{return count;}
+-
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ static inline cfs_proc_dir_entry_t *
+ lprocfs_register(const char *name, cfs_proc_dir_entry_t *parent,
+@@ -1145,10 +1200,12 @@ static inline int lprocfs_wr_timeouts(struct file *file,
+                                       const char *buffer,
+                                       unsigned long count, void *data)
+ { return 0; }
++#ifdef HAVE_SERVER_SUPPORT
+ static inline int lprocfs_wr_evict_client(struct file *file,
+                                           const char *buffer,
+                                           unsigned long count, void *data)
+ { return 0; }
++#endif
+ static inline int lprocfs_wr_ping(struct file *file, const char *buffer,
+                                   unsigned long count, void *data)
+ { return 0; }
+@@ -1173,8 +1230,10 @@ static inline int lprocfs_state_seq_show(struct seq_file *m, void *data)
+ { return 0; }
+ static inline int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data)
+ { return 0; }
++#ifdef HAVE_SERVER_SUPPORT
+ static inline int lprocfs_num_exports_seq_show(struct seq_file *m, void *data)
+ { return 0; }
++#endif
+ struct adaptive_timeout;
+ static inline int lprocfs_seq_at_hist_helper(struct seq_file *m,
+ 					     struct adaptive_timeout *at)
+@@ -1185,10 +1244,12 @@ static inline ssize_t
+ lprocfs_timeouts_seq_write(struct file *file, const char *buffer,
+ 			   size_t count, loff_t *off)
+ { return 0; }
++#ifdef HAVE_SERVER_SUPPORT
+ static inline ssize_t
+ lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
+ 			       size_t count, loff_t *off)
+ { return 0; }
++#endif
+ static inline ssize_t
+ lprocfs_ping_seq_write(struct file *file, const char *buffer,
+ 		       size_t count, loff_t *off)
+diff --git a/lustre/obdclass/dt_object.c b/lustre/obdclass/dt_object.c
+index deb5863..242a45d 100644
+--- a/lustre/obdclass/dt_object.c
++++ b/lustre/obdclass/dt_object.c
+@@ -936,7 +936,7 @@ out:
+ EXPORT_SYMBOL(dt_index_read);
+ 
+ #ifdef LPROCFS
+-
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_dt_rd_blksize(char *page, char **start, off_t off,
+ 			  int count, int *eof, void *data)
+ {
+@@ -1051,5 +1051,99 @@ int lprocfs_dt_rd_filesfree(char *page, char **start, off_t off,
+ 	return rc;
+ }
+ EXPORT_SYMBOL(lprocfs_dt_rd_filesfree);
++#endif
++
++int lprocfs_dt_blksize_seq_show(struct seq_file *m, void *v)
++{
++	struct dt_device *dt = m->private;
++	struct obd_statfs osfs;
++
++	int rc = dt_statfs(NULL, dt, &osfs);
++	if (rc == 0)
++		seq_printf(m, "%u\n", (unsigned) osfs.os_bsize);
++	return rc;
++}
++EXPORT_SYMBOL(lprocfs_dt_blksize_seq_show);
++
++int lprocfs_dt_kbytestotal_seq_show(struct seq_file *m, void *v)
++{
++	struct dt_device *dt = m->private;
++	struct obd_statfs osfs;
++
++	int rc = dt_statfs(NULL, dt, &osfs);
++	if (rc == 0) {
++		__u32 blk_size = osfs.os_bsize >> 10;
++		__u64 result = osfs.os_blocks;
++
++		while (blk_size >>= 1)
++			result <<= 1;
++
++		seq_printf(m, LPU64"\n", result);
++	}
++	return rc;
++}
++EXPORT_SYMBOL(lprocfs_dt_kbytestotal_seq_show);
++
++int lprocfs_dt_kbytesfree_seq_show(struct seq_file *m, void *v)
++{
++	struct dt_device *dt = m->private;
++	struct obd_statfs osfs;
++
++	int rc = dt_statfs(NULL, dt, &osfs);
++	if (rc == 0) {
++		__u32 blk_size = osfs.os_bsize >> 10;
++		__u64 result = osfs.os_bfree;
++
++		while (blk_size >>= 1)
++			result <<= 1;
++
++		seq_printf(m, LPU64"\n", result);
++	}
++	return rc;
++}
++EXPORT_SYMBOL(lprocfs_dt_kbytesfree_seq_show);
++
++int lprocfs_dt_kbytesavail_seq_show(struct seq_file *m, void *v)
++{
++	struct dt_device *dt = m->private;
++	struct obd_statfs osfs;
++
++	int rc = dt_statfs(NULL, dt, &osfs);
++	if (rc == 0) {
++		__u32 blk_size = osfs.os_bsize >> 10;
++		__u64 result = osfs.os_bavail;
++
++		while (blk_size >>= 1)
++			result <<= 1;
++
++		seq_printf(m, LPU64"\n", result);
++	}
++	return rc;
++}
++EXPORT_SYMBOL(lprocfs_dt_kbytesavail_seq_show);
++
++int lprocfs_dt_filestotal_seq_show(struct seq_file *m, void *v)
++{
++	struct dt_device *dt = m->private;
++	struct obd_statfs osfs;
++
++	int rc = dt_statfs(NULL, dt, &osfs);
++	if (rc == 0)
++		seq_printf(m, LPU64"\n", osfs.os_files);
++	return rc;
++}
++EXPORT_SYMBOL(lprocfs_dt_filestotal_seq_show);
++
++int lprocfs_dt_filesfree_seq_show(struct seq_file *m, void *v)
++{
++	struct dt_device *dt = m->private;
++	struct obd_statfs osfs;
++
++	int rc = dt_statfs(NULL, dt, &osfs);
++	if (rc == 0)
++		seq_printf(m, LPU64"\n", osfs.os_ffree);
++	return rc;
++}
++EXPORT_SYMBOL(lprocfs_dt_filesfree_seq_show);
+ 
+ #endif /* LPROCFS */
+diff --git a/lustre/obdclass/lprocfs_jobstats.c b/lustre/obdclass/lprocfs_jobstats.c
+index f67e426..4e16a17 100644
+--- a/lustre/obdclass/lprocfs_jobstats.c
++++ b/lustre/obdclass/lprocfs_jobstats.c
+@@ -416,18 +416,17 @@ struct seq_operations lprocfs_jobstats_seq_sops = {
+ 
+ static int lprocfs_jobstats_seq_open(struct inode *inode, struct file *file)
+ {
+-	struct proc_dir_entry *dp = PDE(inode);
+ 	struct seq_file *seq;
+ 	int rc;
+ 
+-	if (LPROCFS_ENTRY_CHECK(dp))
++	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
+ 		return -ENOENT;
+ 
+ 	rc = seq_open(file, &lprocfs_jobstats_seq_sops);
+ 	if (rc)
+ 		return rc;
+ 	seq = file->private_data;
+-	seq->private = dp->data;
++	seq->private = PDE_DATA(inode);
+ 	return 0;
+ }
+ 
+@@ -520,19 +519,18 @@ int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num,
+ 	stats->ojs_last_cleanup = cfs_time_current_sec();
+ 
+ 	LPROCFS_WRITE_ENTRY();
+-	entry = create_proc_entry("job_stats", 0644, obd->obd_proc_entry);
++	entry = proc_create_data("job_stats", 0644, obd->obd_proc_entry,
++				&lprocfs_jobstats_seq_fops, stats);
+ 	LPROCFS_WRITE_EXIT();
+-	if (entry) {
+-		entry->proc_fops = &lprocfs_jobstats_seq_fops;
+-		entry->data = stats;
+-		RETURN(0);
+-	} else {
++	if (entry == NULL) {
+ 		lprocfs_job_stats_fini(obd);
+ 		RETURN(-ENOMEM);
+ 	}
++	RETURN(0);
+ }
+ EXPORT_SYMBOL(lprocfs_job_stats_init);
+ 
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_rd_job_interval(char *page, char **start, off_t off,
+ 			    int count, int *eof, void *data)
+ {
+@@ -567,5 +565,36 @@ int lprocfs_wr_job_interval(struct file *file, const char *buffer,
+ 
+ }
+ EXPORT_SYMBOL(lprocfs_wr_job_interval);
++#endif
++int lprocfs_job_interval_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++	struct obd_job_stats *stats;
++
++	LASSERT(obd != NULL);
++	stats = &obd->u.obt.obt_jobstats;
++	return seq_printf(m, "%d\n", stats->ojs_cleanup_interval);
++}
++EXPORT_SYMBOL(lprocfs_job_interval_seq_show);
++
++ssize_t
++lprocfs_job_interval_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
++{
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct obd_job_stats *stats;
++	int val, rc;
++
++	LASSERT(obd != NULL);
++	stats = &obd->u.obt.obt_jobstats;
++
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
+ 
++	stats->ojs_cleanup_interval = val;
++	lprocfs_job_cleanup(stats, true);
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_job_interval_seq_write);
+ #endif /* LPROCFS*/
+diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
+index 0c805be..a33cbf2 100644
+--- a/lustre/obdclass/lprocfs_status.c
++++ b/lustre/obdclass/lprocfs_status.c
+@@ -288,25 +288,104 @@ static struct file_operations lprocfs_generic_fops = { };
+ #ifdef HAVE_SERVER_SUPPORT
+ int lprocfs_evict_client_open(struct inode *inode, struct file *f)
+ {
+-        struct proc_dir_entry *dp = PDE(f->f_dentry->d_inode);
+-        struct obd_device *obd = dp->data;
+-
+-        cfs_atomic_inc(&obd->obd_evict_inprogress);
++	struct obd_device *obd = PDE_DATA(f->f_dentry->d_inode);
+ 
+-        return 0;
++	cfs_atomic_inc(&obd->obd_evict_inprogress);
++	return 0;
+ }
+ 
+ int lprocfs_evict_client_release(struct inode *inode, struct file *f)
+ {
+-	struct proc_dir_entry *dp = PDE(f->f_dentry->d_inode);
+-	struct obd_device *obd = dp->data;
++	struct obd_device *obd = PDE_DATA(f->f_dentry->d_inode);
+ 
+ 	cfs_atomic_dec(&obd->obd_evict_inprogress);
+ 	wake_up(&obd->obd_evict_inprogress_waitq);
+-
+ 	return 0;
+ }
+ 
++#define BUFLEN (UUID_MAX + 5)
++
++#ifndef HAVE_ONLY_PROCFS_SEQ
++int lprocfs_wr_evict_client(struct file *file, const char *buffer,
++			    unsigned long count, void *data)
++{
++	struct obd_device *obd = data;
++	char		  *kbuf;
++	char		  *tmpbuf;
++
++	OBD_ALLOC(kbuf, BUFLEN);
++	if (kbuf == NULL)
++		return -ENOMEM;
++
++	/*
++	 * OBD_ALLOC() will zero kbuf, but we only copy BUFLEN - 1
++	 * bytes into kbuf, to ensure that the string is NUL-terminated.
++	 * UUID_MAX should include a trailing NUL already.
++	 */
++	if (copy_from_user(kbuf, buffer,
++				min_t(unsigned long, BUFLEN - 1, count))) {
++		count = -EFAULT;
++		goto out;
++	}
++	tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
++	class_incref(obd, __FUNCTION__, current);
++
++	if (strncmp(tmpbuf, "nid:", 4) == 0)
++		obd_export_evict_by_nid(obd, tmpbuf + 4);
++	else if (strncmp(tmpbuf, "uuid:", 5) == 0)
++		obd_export_evict_by_uuid(obd, tmpbuf + 5);
++	else
++		obd_export_evict_by_uuid(obd, tmpbuf);
++
++	class_decref(obd, __FUNCTION__, current);
++out:
++	OBD_FREE(kbuf, BUFLEN);
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_wr_evict_client);
++#endif
++
++ssize_t
++lprocfs_evict_client_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
++{
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	char *tmpbuf, *kbuf;
++
++	OBD_ALLOC(kbuf, BUFLEN);
++	if (kbuf == NULL)
++		return -ENOMEM;
++
++	/*
++	 * OBD_ALLOC() will zero kbuf, but we only copy BUFLEN - 1
++	 * bytes into kbuf, to ensure that the string is NUL-terminated.
++	 * UUID_MAX should include a trailing NUL already.
++	 */
++	if (copy_from_user(kbuf, buffer,
++				min_t(unsigned long, BUFLEN - 1, count))) {
++		count = -EFAULT;
++		goto out;
++	}
++	tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
++	class_incref(obd, __FUNCTION__, current);
++
++	if (strncmp(tmpbuf, "nid:", 4) == 0)
++		obd_export_evict_by_nid(obd, tmpbuf + 4);
++	else if (strncmp(tmpbuf, "uuid:", 5) == 0)
++		obd_export_evict_by_uuid(obd, tmpbuf + 5);
++	else
++		obd_export_evict_by_uuid(obd, tmpbuf);
++
++	class_decref(obd, __FUNCTION__, current);
++
++out:
++	OBD_FREE(kbuf, BUFLEN);
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
++
++#undef BUFLEN
++
+ struct file_operations lprocfs_evict_client_fops = {
+         .owner = THIS_MODULE,
+         .read = lprocfs_fops_read,
+@@ -1228,6 +1307,17 @@ int lprocfs_connect_flags_seq_show(struct seq_file *m, void *data)
+ }
+ EXPORT_SYMBOL(lprocfs_connect_flags_seq_show);
+ 
++#ifdef HAVE_SERVER_SUPPORT
++int lprocfs_num_exports_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = data;
++
++	LASSERT(obd != NULL);
++	return seq_printf(m, "%u\n", obd->obd_num_exports);
++}
++EXPORT_SYMBOL(lprocfs_num_exports_seq_show);
++#endif
++
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ 
+ int lprocfs_rd_uint(char *page, char **start, off_t off,
+@@ -1743,6 +1833,7 @@ int lprocfs_rd_connect_flags(char *page, char **start, off_t off,
+ }
+ EXPORT_SYMBOL(lprocfs_rd_connect_flags);
+ 
++#ifdef HAVE_SERVER_SUPPORT
+ int lprocfs_rd_num_exports(char *page, char **start, off_t off, int count,
+                            int *eof,  void *data)
+ {
+@@ -1753,6 +1844,7 @@ int lprocfs_rd_num_exports(char *page, char **start, off_t off, int count,
+         return snprintf(page, count, "%u\n", obd->obd_num_exports);
+ }
+ EXPORT_SYMBOL(lprocfs_rd_num_exports);
++#endif
+ 
+ int lprocfs_rd_numrefs(char *page, char **start, off_t off, int count,
+                        int *eof, void *data)
+@@ -2436,6 +2528,112 @@ void lprocfs_init_ldlm_stats(struct lprocfs_stats *ldlm_stats)
+ }
+ EXPORT_SYMBOL(lprocfs_init_ldlm_stats);
+ 
++#ifdef HAVE_SERVER_SUPPORT
++/* No one appears to be using this ?? */
++int lprocfs_exp_nid_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_export *exp = m->private;
++	LASSERT(exp != NULL);
++	return seq_printf(m, "%s\n", obd_export_nid2str(exp));
++}
++
++int lprocfs_exp_print_uuid_seq(cfs_hash_t *hs, cfs_hash_bd_t *bd,
++				cfs_hlist_node_t *hnode, void *cb_data)
++
++{
++	struct obd_export *exp = cfs_hash_object(hs, hnode);
++	struct seq_file *m = cb_data;
++
++	if (exp->exp_nid_stats)
++		seq_printf(m, "%s\n", obd_uuid2str(&exp->exp_client_uuid));
++	return 0;
++}
++
++int lprocfs_exp_uuid_seq_show(struct seq_file *m, void *data)
++{
++	struct nid_stat *stats = m->private;
++	struct obd_device *obd = stats->nid_obd;
++
++	cfs_hash_for_each_key(obd->obd_nid_hash, &stats->nid,
++				lprocfs_exp_print_uuid_seq, m);
++	return 0;
++}
++LPROC_SEQ_FOPS_RO(lprocfs_exp_uuid);
++
++int lprocfs_exp_print_hash_seq(cfs_hash_t *hs, cfs_hash_bd_t *bd,
++				cfs_hlist_node_t *hnode, void *cb_data)
++
++{
++	struct seq_file *m = cb_data;
++	struct obd_export *exp = cfs_hash_object(hs, hnode);
++
++	if (exp->exp_lock_hash != NULL) {
++		cfs_hash_debug_header_seq(m);
++		cfs_hash_debug_str_seq(hs, m);
++	}
++	return 0;
++}
++
++int lprocfs_exp_hash_seq_show(struct seq_file *m, void *data)
++{
++	struct nid_stat *stats = m->private;
++	struct obd_device *obd = stats->nid_obd;
++
++	cfs_hash_for_each_key(obd->obd_nid_hash, &stats->nid,
++				lprocfs_exp_print_hash_seq, m);
++	return 0;
++}
++LPROC_SEQ_FOPS_RO(lprocfs_exp_hash);
++
++int lprocfs_nid_stats_clear_seq_show(struct seq_file *m, void *data)
++{
++	return seq_printf(m, "%s\n", "Write into this file to clear all nid "
++				"stats and stale nid entries");
++}
++EXPORT_SYMBOL(lprocfs_nid_stats_clear_seq_show);
++
++static int lprocfs_nid_stats_clear_write_cb(void *obj, void *data)
++{
++	struct nid_stat *stat = obj;
++	ENTRY;
++
++	CDEBUG(D_INFO,"refcnt %d\n", cfs_atomic_read(&stat->nid_exp_ref_count));
++	if (cfs_atomic_read(&stat->nid_exp_ref_count) == 1) {
++		/* object has only hash references. */
++		spin_lock(&stat->nid_obd->obd_nid_lock);
++		cfs_list_move(&stat->nid_list, data);
++		spin_unlock(&stat->nid_obd->obd_nid_lock);
++		RETURN(1);
++	}
++	/* we has reference to object - only clear data*/
++	if (stat->nid_stats)
++		lprocfs_clear_stats(stat->nid_stats);
++
++	RETURN(0);
++}
++
++ssize_t
++lprocfs_nid_stats_clear_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
++{
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct nid_stat *client_stat;
++	CFS_LIST_HEAD(free_list);
++
++	cfs_hash_cond_del(obd->obd_nid_stats_hash,
++				lprocfs_nid_stats_clear_write_cb, &free_list);
++
++	while (!cfs_list_empty(&free_list)) {
++		client_stat = cfs_list_entry(free_list.next, struct nid_stat,
++						nid_list);
++		cfs_list_del_init(&client_stat->nid_list);
++		lprocfs_free_client_stats(client_stat);
++	}
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_nid_stats_clear_seq_write);
++
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_exp_rd_nid(char *page, char **start, off_t off, int count,
+                          int *eof,  void *data)
+ {
+@@ -2538,26 +2736,6 @@ int lprocfs_nid_stats_clear_read(char *page, char **start, off_t off,
+ }
+ EXPORT_SYMBOL(lprocfs_nid_stats_clear_read);
+ 
+-static int lprocfs_nid_stats_clear_write_cb(void *obj, void *data)
+-{
+-        struct nid_stat *stat = obj;
+-        ENTRY;
+-
+-        CDEBUG(D_INFO,"refcnt %d\n", cfs_atomic_read(&stat->nid_exp_ref_count));
+-        if (cfs_atomic_read(&stat->nid_exp_ref_count) == 1) {
+-                /* object has only hash references. */
+-		spin_lock(&stat->nid_obd->obd_nid_lock);
+-		cfs_list_move(&stat->nid_list, data);
+-		spin_unlock(&stat->nid_obd->obd_nid_lock);
+-                RETURN(1);
+-        }
+-        /* we has reference to object - only clear data*/
+-        if (stat->nid_stats)
+-                lprocfs_clear_stats(stat->nid_stats);
+-
+-        RETURN(0);
+-}
+-
+ int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
+                                   unsigned long count, void *data)
+ {
+@@ -2578,8 +2756,8 @@ int lprocfs_nid_stats_clear_write(struct file *file, const char *buffer,
+         return count;
+ }
+ EXPORT_SYMBOL(lprocfs_nid_stats_clear_write);
++#endif
+ 
+-#ifdef HAVE_SERVER_SUPPORT
+ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
+ {
+         struct nid_stat *new_stat, *old_stat;
+@@ -2638,11 +2816,17 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
+         if (buffer == NULL)
+                 GOTO(destroy_new, rc = -ENOMEM);
+ 
+-        memcpy(buffer, libcfs_nid2str(*nid), LNET_NIDSTR_SIZE);
++	memcpy(buffer, libcfs_nid2str(*nid), LNET_NIDSTR_SIZE);
++#ifndef HAVE_ONLY_PROCFS_SEQ
+         new_stat->nid_proc = lprocfs_register(buffer,
+-                                              obd->obd_proc_exports_entry,
+-                                              NULL, NULL);
+-        OBD_FREE(buffer, LNET_NIDSTR_SIZE);
++						obd->obd_proc_exports_entry,
++						NULL, NULL);
++#else
++	new_stat->nid_proc = lprocfs_seq_register(buffer,
++						obd->obd_proc_exports_entry,
++						NULL, NULL);
++#endif
++	OBD_FREE(buffer, LNET_NIDSTR_SIZE);
+ 
+ 	if (IS_ERR(new_stat->nid_proc)) {
+ 		rc = PTR_ERR(new_stat->nid_proc);
+@@ -2652,16 +2836,26 @@ int lprocfs_exp_setup(struct obd_export *exp, lnet_nid_t *nid, int *newnid)
+ 		GOTO(destroy_new_ns, rc);
+ 	}
+ 
++#ifndef HAVE_ONLY_PROCFS_SEQ
+         entry = lprocfs_add_simple(new_stat->nid_proc, "uuid",
+                                    lprocfs_exp_rd_uuid, NULL, new_stat, NULL);
++#else
++	entry = lprocfs_add_simple(new_stat->nid_proc, "uuid",
++					new_stat, &lprocfs_exp_uuid_fops);
++#endif
+         if (IS_ERR(entry)) {
+                 CWARN("Error adding the NID stats file\n");
+                 rc = PTR_ERR(entry);
+                 GOTO(destroy_new_ns, rc);
+         }
+ 
++#ifndef HAVE_ONLY_PROCFS_SEQ
+         entry = lprocfs_add_simple(new_stat->nid_proc, "hash",
+                                    lprocfs_exp_rd_hash, NULL, new_stat, NULL);
++#else
++	entry = lprocfs_add_simple(new_stat->nid_proc, "hash",
++					new_stat, &lprocfs_exp_hash_fops);
++#endif
+         if (IS_ERR(entry)) {
+                 CWARN("Error adding the hash file\n");
+                 rc = PTR_ERR(entry);
+@@ -3066,6 +3260,181 @@ void lprocfs_oh_clear(struct obd_histogram *oh)
+ }
+ EXPORT_SYMBOL(lprocfs_oh_clear);
+ 
++#ifdef HAVE_SERVER_SUPPORT
++int lprocfs_hash_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++	int c = 0;
++
++	if (obd == NULL)
++		return 0;
++
++	c += cfs_hash_debug_header_seq(m);
++	c += cfs_hash_debug_str_seq(obd->obd_uuid_hash, m);
++	c += cfs_hash_debug_str_seq(obd->obd_nid_hash, m);
++	c += cfs_hash_debug_str_seq(obd->obd_nid_stats_hash, m);
++	return c;
++}
++EXPORT_SYMBOL(lprocfs_hash_seq_show);
++
++int lprocfs_recovery_status_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++
++	LASSERT(obd != NULL);
++
++	seq_printf(m, "status: \n");
++	if (obd->obd_max_recoverable_clients == 0) {
++		seq_printf(m, "INACTIVE\n");
++		goto out;
++	}
++
++	/* sampled unlocked, but really... */
++	if (obd->obd_recovering == 0) {
++		seq_printf(m, "COMPLETE\n");
++		seq_printf(m, "recovery_start: %lu\n", obd->obd_recovery_start);
++		seq_printf(m, "recovery_duration: %lu\n",
++				obd->obd_recovery_end - obd->obd_recovery_start);
++		/* Number of clients that have completed recovery */
++		seq_printf(m, "completed_clients: %d/%d\n",
++				obd->obd_max_recoverable_clients -
++				obd->obd_stale_clients,
++				obd->obd_max_recoverable_clients);
++		seq_printf(m, "replayed_requests: %d\n",
++				obd->obd_replayed_requests);
++		seq_printf(m, "last_transno: "LPD64"\n",
++				obd->obd_next_recovery_transno - 1);
++		seq_printf(m, "VBR: %s\n", obd->obd_version_recov ?
++				"ENABLED" : "DISABLED");
++		seq_printf(m, "IR: %s\n", obd->obd_no_ir ?
++				"DISABLED" : "ENABLED");
++		goto out;
++	}
++
++	seq_printf(m, "RECOVERING\n");
++	seq_printf(m, "recovery_start: %lu\n", obd->obd_recovery_start);
++	seq_printf(m, "time_remaining: %lu\n",
++			cfs_time_current_sec() >=
++			obd->obd_recovery_start +
++			obd->obd_recovery_timeout ? 0 :
++			obd->obd_recovery_start +
++			obd->obd_recovery_timeout -
++			cfs_time_current_sec());
++	seq_printf(m, "connected_clients: %d/%d\n",
++			cfs_atomic_read(&obd->obd_connected_clients),
++			obd->obd_max_recoverable_clients);
++	/* Number of clients that have completed recovery */
++	seq_printf(m, "req_replay_clients: %d\n",
++			cfs_atomic_read(&obd->obd_req_replay_clients));
++	seq_printf(m, "lock_repay_clients: %d\n",
++			cfs_atomic_read(&obd->obd_lock_replay_clients));
++	seq_printf(m, "completed_clients: %d\n",
++			cfs_atomic_read(&obd->obd_connected_clients) -
++			cfs_atomic_read(&obd->obd_lock_replay_clients));
++	seq_printf(m, "evicted_clients: %d\n", obd->obd_stale_clients);
++	seq_printf(m, "replayed_requests: %d\n", obd->obd_replayed_requests);
++	seq_printf(m, "queued_requests: %d\n",
++			obd->obd_requests_queued_for_recovery);
++	seq_printf(m, "next_transno: "LPD64"\n",
++			obd->obd_next_recovery_transno);
++out:
++	return 0;
++}
++EXPORT_SYMBOL(lprocfs_recovery_status_seq_show);
++
++int lprocfs_ir_factor_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++
++	LASSERT(obd != NULL);
++	return seq_printf(m, "%d\n", obd->obd_recovery_ir_factor);
++}
++EXPORT_SYMBOL(lprocfs_ir_factor_seq_show);
++
++ssize_t
++lprocfs_ir_factor_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
++{
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	int val, rc;
++
++	LASSERT(obd != NULL);
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
++
++	if (val < OBD_IR_FACTOR_MIN || val > OBD_IR_FACTOR_MAX)
++		return -EINVAL;
++
++	obd->obd_recovery_ir_factor = val;
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_ir_factor_seq_write);
++
++int lprocfs_recovery_time_soft_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++
++	LASSERT(obd != NULL);
++	return seq_printf(m, "%d\n", obd->obd_recovery_timeout);
++}
++EXPORT_SYMBOL(lprocfs_recovery_time_soft_seq_show);
++
++ssize_t
++lprocfs_recovery_time_soft_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
++{
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	int val, rc;
++
++	LASSERT(obd != NULL);
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
++
++	obd->obd_recovery_timeout = val;
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_recovery_time_soft_seq_write);
++
++int lprocfs_recovery_time_hard_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++
++	LASSERT(obd != NULL);
++	return seq_printf(m, "%u\n", obd->obd_recovery_time_hard);
++}
++EXPORT_SYMBOL(lprocfs_recovery_time_hard_seq_show);
++
++ssize_t
++lprocfs_recovery_time_hard_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
++{
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	int val, rc;
++
++	LASSERT(obd != NULL);
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
++
++	obd->obd_recovery_time_hard = val;
++	return count;
++}
++EXPORT_SYMBOL(lprocfs_recovery_time_hard_seq_write);
++
++int lprocfs_target_instance_seq_show(struct seq_file *m, void *data)
++{
++	struct obd_device *obd = m->private;
++	struct obd_device_target *target = &obd->u.obt;
++
++	LASSERT(obd != NULL);
++	LASSERT(target->obt_magic == OBT_MAGIC);
++	return seq_printf(m, "%u\n", obd->u.obt.obt_instance);
++}
++EXPORT_SYMBOL(lprocfs_target_instance_seq_show);
++
++#ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_obd_rd_hash(char *page, char **start, off_t off,
+                         int count, int *eof, void *data)
+ {
+@@ -3084,7 +3453,6 @@ int lprocfs_obd_rd_hash(char *page, char **start, off_t off,
+ }
+ EXPORT_SYMBOL(lprocfs_obd_rd_hash);
+ 
+-#ifdef HAVE_SERVER_SUPPORT
+ int lprocfs_obd_rd_recovery_status(char *page, char **start, off_t off,
+                                    int count, int *eof, void *data)
+ {
+@@ -3210,7 +3578,6 @@ out:
+         return min(count, len - (int)off);
+ }
+ EXPORT_SYMBOL(lprocfs_obd_rd_recovery_status);
+-#endif
+ 
+ int lprocfs_obd_rd_ir_factor(char *page, char **start, off_t off,
+                              int count, int *eof, void *data)
+@@ -3295,6 +3662,21 @@ int lprocfs_obd_wr_recovery_time_hard(struct file *file, const char *buffer,
+ }
+ EXPORT_SYMBOL(lprocfs_obd_wr_recovery_time_hard);
+ 
++int lprocfs_target_rd_instance(char *page, char **start, off_t off,
++			       int count, int *eof, void *data)
++{
++	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device_target *target = &obd->u.obt;
++
++	LASSERT(obd != NULL);
++	LASSERT(target->obt_magic == OBT_MAGIC);
++	*eof = 1;
++	return snprintf(page, count, "%u\n", obd->u.obt.obt_instance);
++}
++EXPORT_SYMBOL(lprocfs_target_rd_instance);
++#endif /* HAVE_ONLY_PROCFS_SEQ */
++#endif /* HAVE_SERVER_SUPPORT */
++
+ int lprocfs_obd_rd_max_pages_per_rpc(char *page, char **start, off_t off,
+                                      int count, int *eof, void *data)
+ {
+@@ -3321,19 +3703,4 @@ int lprocfs_obd_max_pages_per_rpc_seq_show(struct seq_file *m, void *data)
+ 	return rc;
+ }
+ EXPORT_SYMBOL(lprocfs_obd_max_pages_per_rpc_seq_show);
+-
+-#ifdef HAVE_SERVER_SUPPORT
+-int lprocfs_target_rd_instance(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data)
+-{
+-        struct obd_device *obd = (struct obd_device *)data;
+-        struct obd_device_target *target = &obd->u.obt;
+-
+-        LASSERT(obd != NULL);
+-        LASSERT(target->obt_magic == OBT_MAGIC);
+-        *eof = 1;
+-        return snprintf(page, count, "%u\n", obd->u.obt.obt_instance);
+-}
+-EXPORT_SYMBOL(lprocfs_target_rd_instance);
+-#endif
+ #endif /* LPROCFS*/
+diff --git a/lustre/ptlrpc/lproc_ptlrpc.c b/lustre/ptlrpc/lproc_ptlrpc.c
+index 024169e..076b5e2 100644
+--- a/lustre/ptlrpc/lproc_ptlrpc.c
++++ b/lustre/ptlrpc/lproc_ptlrpc.c
+@@ -1170,49 +1170,6 @@ void ptlrpc_lprocfs_unregister_obd(struct obd_device *obd)
+ }
+ EXPORT_SYMBOL(ptlrpc_lprocfs_unregister_obd);
+ 
+-#define BUFLEN (UUID_MAX + 5)
+-
+-int lprocfs_wr_evict_client(struct file *file, const char *buffer,
+-                            unsigned long count, void *data)
+-{
+-        struct obd_device *obd = data;
+-        char              *kbuf;
+-        char              *tmpbuf;
+-
+-        OBD_ALLOC(kbuf, BUFLEN);
+-        if (kbuf == NULL)
+-                return -ENOMEM;
+-
+-        /*
+-         * OBD_ALLOC() will zero kbuf, but we only copy BUFLEN - 1
+-         * bytes into kbuf, to ensure that the string is NUL-terminated.
+-         * UUID_MAX should include a trailing NUL already.
+-         */
+-	if (copy_from_user(kbuf, buffer,
+-                               min_t(unsigned long, BUFLEN - 1, count))) {
+-                count = -EFAULT;
+-                goto out;
+-        }
+-        tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
+-	class_incref(obd, __FUNCTION__, current);
+-
+-        if (strncmp(tmpbuf, "nid:", 4) == 0)
+-                obd_export_evict_by_nid(obd, tmpbuf + 4);
+-        else if (strncmp(tmpbuf, "uuid:", 5) == 0)
+-                obd_export_evict_by_uuid(obd, tmpbuf + 5);
+-        else
+-                obd_export_evict_by_uuid(obd, tmpbuf);
+-
+-	class_decref(obd, __FUNCTION__, current);
+-
+-out:
+-        OBD_FREE(kbuf, BUFLEN);
+-        return count;
+-}
+-EXPORT_SYMBOL(lprocfs_wr_evict_client);
+-
+-#undef BUFLEN
+-
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+ int lprocfs_wr_ping(struct file *file, const char *buffer,
+                     unsigned long count, void *data)
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
new file mode 100644
index 0000000..b3964cc
--- /dev/null
+++ b/sys-cluster/lustre/files/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch
@@ -0,0 +1,171 @@
+From 45e9fffb84c0c272992232ed229586003ab99e5e Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 19:11:20 -0500
+Subject: [PATCH 11/18] LU-3319 procfs: update zfs proc handling to seq_files
+
+Migrate all zfs proc handling to using strictly seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I6dc7e65c3e74e7934a17939815ec3c334fac58c7
+---
+ lustre/osd-zfs/osd_handler.c  |  2 +-
+ lustre/osd-zfs/osd_internal.h |  3 --
+ lustre/osd-zfs/osd_lproc.c    | 78 ++++++++++++++++++++++---------------------
+ 3 files changed, 41 insertions(+), 42 deletions(-)
+
+diff --git a/lustre/osd-zfs/osd_handler.c b/lustre/osd-zfs/osd_handler.c
+index 77f4799..b40d03d 100644
+--- a/lustre/osd-zfs/osd_handler.c
++++ b/lustre/osd-zfs/osd_handler.c
+@@ -900,7 +900,7 @@ int __init osd_init(void)
+ 
+ 	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lprocfs_osd_module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_OSD_ZFS_NAME, &osd_device_type);
+ 	if (rc)
+diff --git a/lustre/osd-zfs/osd_internal.h b/lustre/osd-zfs/osd_internal.h
+index 0e202d2..fbad073 100644
+--- a/lustre/osd-zfs/osd_internal.h
++++ b/lustre/osd-zfs/osd_internal.h
+@@ -402,9 +402,6 @@ enum {
+ };
+ 
+ /* osd_lproc.c */
+-extern struct lprocfs_vars lprocfs_osd_obd_vars[];
+-extern struct lprocfs_vars lprocfs_osd_module_vars[];
+-
+ int osd_procfs_init(struct osd_device *osd, const char *name);
+ int osd_procfs_fini(struct osd_device *osd);
+ 
+diff --git a/lustre/osd-zfs/osd_lproc.c b/lustre/osd-zfs/osd_lproc.c
+index 0854ce6..5a2bbac 100644
+--- a/lustre/osd-zfs/osd_lproc.c
++++ b/lustre/osd-zfs/osd_lproc.c
+@@ -107,27 +107,26 @@ out:
+ 	RETURN(result);
+ }
+ 
+-static int lprocfs_osd_rd_fstype(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int zfs_osd_fstype_seq_show(struct seq_file *m, void *data)
+ {
+-	return snprintf(page, count, "zfs\n");
++	return seq_printf(m, "zfs\n");
+ }
++LPROC_SEQ_FOPS_RO(zfs_osd_fstype);
+ 
+-static int lprocfs_osd_rd_mntdev(char *page, char **start, off_t off, int count,
+-				int *eof, void *data)
++static int zfs_osd_mntdev_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(osd != NULL);
+-	*eof = 1;
+-
+-	return snprintf(page, count, "%s\n", osd->od_mntdev);
++	return seq_printf(m, "%s\n", osd->od_mntdev);
+ }
++LPROC_SEQ_FOPS_RO(zfs_osd_mntdev);
+ 
+-static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++lprocfs_osd_force_sync_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct dt_device  *dt = data;
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
+ 	struct lu_env      env;
+ 	int rc;
+ 
+@@ -139,20 +138,21 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+ 
+ 	return rc == 0 ? count : rc;
+ }
++LPROC_SEQ_FOPS_WO_TYPE(zfs, osd_force_sync);
+ 
+-static int lprocfs_osd_rd_iused_est(char *page, char **start, off_t off, int count,
+-					int *eof, void *data)
++static int zfs_osd_iused_est_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 	LASSERT(osd != NULL);
+ 
+-	return snprintf(page, count, "%d\n", osd->od_quota_iused_est);
++	return seq_printf(m, "%d\n", osd->od_quota_iused_est);
+ }
+ 
+-static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t zfs_osd_iused_est_seq_write(struct file *file, const char *buffer,
++						size_t count, loff_t *off)
+ {
+-	struct osd_device *osd = osd_dt_dev((struct dt_device *)data);
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device *osd = osd_dt_dev(dt);
+ 	int                rc, val;
+ 
+ 	LASSERT(osd != NULL);
+@@ -165,24 +165,26 @@ static int lprocfs_osd_wr_iused_est(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
+-
+-struct lprocfs_vars lprocfs_osd_obd_vars[] = {
+-	{ "blocksize",		lprocfs_dt_rd_blksize,	0, 0 },
+-	{ "kbytestotal",	lprocfs_dt_rd_kbytestotal,	0, 0 },
+-	{ "kbytesfree",		lprocfs_dt_rd_kbytesfree,	0, 0 },
+-	{ "kbytesavail",	lprocfs_dt_rd_kbytesavail,	0, 0 },
+-	{ "filestotal",		lprocfs_dt_rd_filestotal,	0, 0 },
+-	{ "filesfree",		lprocfs_dt_rd_filesfree,	0, 0 },
+-	{ "fstype",          lprocfs_osd_rd_fstype,      0, 0 },
+-	{ "mntdev",          lprocfs_osd_rd_mntdev,      0, 0 },
+-	{ "force_sync",      0, lprocfs_osd_wr_force_sync     },
+-	{ "quota_iused_estimate",  lprocfs_osd_rd_iused_est,
+-		lprocfs_osd_wr_iused_est,   0, 0 },
+-	{ 0 }
+-};
+-
+-struct lprocfs_vars lprocfs_osd_module_vars[] = {
+-	{ "num_refs",        lprocfs_rd_numrefs,         0, 0 },
++LPROC_SEQ_FOPS(zfs_osd_iused_est);
++
++LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_blksize);
++LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_kbytestotal);
++LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_kbytesfree);
++LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_kbytesavail);
++LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_filestotal);
++LPROC_SEQ_FOPS_RO_TYPE(zfs, dt_filesfree);
++
++struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
++	{ "blocksize",		&zfs_dt_blksize_fops		},
++	{ "kbytestotal",	&zfs_dt_kbytestotal_fops	},
++	{ "kbytesfree",		&zfs_dt_kbytesfree_fops		},
++	{ "kbytesavail",	&zfs_dt_kbytesavail_fops	},
++	{ "filestotal",		&zfs_dt_filestotal_fops		},
++	{ "filesfree",		&zfs_dt_filesfree_fops		},
++	{ "fstype",		&zfs_osd_fstype_fops		},
++	{ "mntdev",		&zfs_osd_mntdev_fops		},
++	{ "force_sync",		&zfs_osd_force_sync_fops	},
++	{ "quota_iused_estimate",&zfs_osd_iused_est_fops	},
+ 	{ 0 }
+ };
+ 
+@@ -202,7 +204,7 @@ int osd_procfs_init(struct osd_device *osd, const char *name)
+ 	LASSERT(name != NULL);
+ 	LASSERT(type != NULL);
+ 
+-	osd->od_proc_entry = lprocfs_register(name, type->typ_procroot,
++	osd->od_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
+ 			lprocfs_osd_obd_vars, &osd->od_dt_dev);
+ 	if (IS_ERR(osd->od_proc_entry)) {
+ 		rc = PTR_ERR(osd->od_proc_entry);
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
new file mode 100644
index 0000000..bc0b223
--- /dev/null
+++ b/sys-cluster/lustre/files/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch
@@ -0,0 +1,351 @@
+From fa5fde4522b64dfc2e5695d88dca0ae99910cb1f Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 17 Dec 2013 12:24:40 -0500
+Subject: [PATCH 12/18] LU-3319 procfs: move mgs proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the mgs
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I1a12dd9b1fc8f139116a8f3a684956a5ba88f055
+---
+ lustre/mgs/lproc_mgs.c    | 197 ++++++++++++++++++++++------------------------
+ lustre/mgs/mgs_handler.c  |   5 +-
+ lustre/mgs/mgs_internal.h |  13 +--
+ lustre/mgs/mgs_nids.c     |  11 ++-
+ 4 files changed, 105 insertions(+), 121 deletions(-)
+
+diff --git a/lustre/mgs/lproc_mgs.c b/lustre/mgs/lproc_mgs.c
+index ffa2d0d..746d1c1 100644
+--- a/lustre/mgs/lproc_mgs.c
++++ b/lustre/mgs/lproc_mgs.c
+@@ -126,19 +126,105 @@ static int mgsself_srpc_seq_show(struct seq_file *seq, void *v)
+ 
+         return 0;
+ }
+-
+ LPROC_SEQ_FOPS_RO(mgsself_srpc);
+ 
++static int mgs_live_seq_show(struct seq_file *seq, void *v)
++{
++	struct fs_db             *fsdb = seq->private;
++	struct mgs_tgt_srpc_conf *srpc_tgt;
++	int i;
++
++	mutex_lock(&fsdb->fsdb_mutex);
++
++	seq_printf(seq, "fsname: %s\n", fsdb->fsdb_name);
++	seq_printf(seq, "flags: %#lx     gen: %d\n",
++		   fsdb->fsdb_flags, fsdb->fsdb_gen);
++	for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
++		if (test_bit(i, fsdb->fsdb_mdt_index_map))
++			 seq_printf(seq, "%s-MDT%04x\n", fsdb->fsdb_name, i);
++	for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
++		if (test_bit(i, fsdb->fsdb_ost_index_map))
++			 seq_printf(seq, "%s-OST%04x\n", fsdb->fsdb_name, i);
++
++	seq_printf(seq, "\nSecure RPC Config Rules:\n");
++#if 0
++	seq_printf(seq, "%s.%s=%s\n", fsdb->fsdb_name,
++		   PARAM_SRPC_UDESC, fsdb->fsdb_srpc_fl_udesc ? "yes" : "no");
++#endif
++	for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt;
++	     srpc_tgt = srpc_tgt->mtsc_next) {
++		seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt,
++				    &srpc_tgt->mtsc_rset);
++	}
++	seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
++
++	lprocfs_rd_ir_state(seq, fsdb);
++
++	mutex_unlock(&fsdb->fsdb_mutex);
++	return 0;
++}
++
++static ssize_t mgs_live_seq_write(struct file *file, const char *buf,
++				  size_t len, loff_t *off)
++{
++	struct seq_file *seq  = file->private_data;
++	struct fs_db    *fsdb = seq->private;
++	ssize_t rc;
++
++	rc = lprocfs_wr_ir_state(file, buf, len, fsdb);
++	if (rc >= 0)
++		rc = len;
++	return rc;
++}
++LPROC_SEQ_FOPS(mgs_live);
++
++int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
++{
++	int rc;
++
++	if (!mgs->mgs_proc_live)
++		return 0;
++	rc = lprocfs_seq_create(mgs->mgs_proc_live, fsdb->fsdb_name, 0644,
++				&mgs_live_fops, fsdb);
++
++	return 0;
++}
++
++int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
++{
++	if (!mgs->mgs_proc_live)
++		return 0;
++
++	/* didn't create the proc file for MGSSELF_NAME */
++	if (!test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags))
++		lprocfs_remove_proc_entry(fsdb->fsdb_name, mgs->mgs_proc_live);
++	return 0;
++}
++
++LPROC_SEQ_FOPS_RO_TYPE(mgs, uuid);
++LPROC_SEQ_FOPS_RO_TYPE(mgs, num_exports);
++LPROC_SEQ_FOPS_RO_TYPE(mgs, hash);
++LPROC_SEQ_FOPS_WO_TYPE(mgs, evict_client);
++LPROC_SEQ_FOPS_RW_TYPE(mgs, ir_timeout);
++
++struct lprocfs_seq_vars lprocfs_mgs_obd_vars[] = {
++	{ "uuid",		&mgs_uuid_fops		},
++	{ "num_exports",	&mgs_num_exports_fops	},
++	{ "hash_stats",		&mgs_hash_fops		},
++	{ "evict_client",	&mgs_evict_client_fops	},
++	{ "ir_timeout",		&mgs_ir_timeout_fops	},
++	{ 0 }
++};
++
+ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
+ {
+ 	struct obd_device *obd = mgs->mgs_obd;
+ 	struct obd_device *osd_obd = mgs->mgs_bottom->dd_lu_dev.ld_obd;
+ 	int		   osd_len = strlen(osd_name) - strlen("-osd");
+ 	int		   rc;
+-	struct lprocfs_static_vars lvars;
+ 
+-	lprocfs_mgs_init_vars(&lvars);
+-	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
++	obd->obd_vars = lprocfs_mgs_obd_vars;
++	rc = lprocfs_seq_obd_setup(obd);
+ 	if (rc != 0)
+ 		GOTO(out, rc);
+ 
+@@ -152,17 +238,17 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
+ 	if (rc != 0)
+ 		GOTO(out, rc);
+ 
+-        mgs->mgs_proc_live = lprocfs_register("live", obd->obd_proc_entry,
+-                                              NULL, NULL);
++	mgs->mgs_proc_live = lprocfs_seq_register("live", obd->obd_proc_entry,
++						  NULL, NULL);
+         if (IS_ERR(mgs->mgs_proc_live)) {
+                 rc = PTR_ERR(mgs->mgs_proc_live);
+                 mgs->mgs_proc_live = NULL;
+ 		GOTO(out, rc);
+         }
+ 
+-        obd->obd_proc_exports_entry = lprocfs_register("exports",
+-                                                       obd->obd_proc_entry,
+-                                                       NULL, NULL);
++	obd->obd_proc_exports_entry = lprocfs_seq_register("exports",
++							   obd->obd_proc_entry,
++							   NULL, NULL);
+         if (IS_ERR(obd->obd_proc_exports_entry)) {
+                 rc = PTR_ERR(obd->obd_proc_exports_entry);
+                 obd->obd_proc_exports_entry = NULL;
+@@ -215,7 +301,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
+ 
+ 	if (mgs->mgs_proc_live != NULL) {
+ 		/* Should be no live entries */
+-		LASSERT(mgs->mgs_proc_live->subdir == NULL);
+ 		lprocfs_remove(&mgs->mgs_proc_live);
+ 		mgs->mgs_proc_live = NULL;
+ 	}
+@@ -226,92 +311,6 @@ void lproc_mgs_cleanup(struct mgs_device *mgs)
+         lprocfs_free_md_stats(obd);
+ }
+ 
+-static int mgs_live_seq_show(struct seq_file *seq, void *v)
+-{
+-        struct fs_db             *fsdb = seq->private;
+-        struct mgs_tgt_srpc_conf *srpc_tgt;
+-        int i;
+-
+-	mutex_lock(&fsdb->fsdb_mutex);
+-
+-        seq_printf(seq, "fsname: %s\n", fsdb->fsdb_name);
+-        seq_printf(seq, "flags: %#lx     gen: %d\n",
+-                   fsdb->fsdb_flags, fsdb->fsdb_gen);
+-        for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
+-		if (test_bit(i, fsdb->fsdb_mdt_index_map))
+-                         seq_printf(seq, "%s-MDT%04x\n", fsdb->fsdb_name, i);
+-        for (i = 0; i < INDEX_MAP_SIZE * 8; i++)
+-		if (test_bit(i, fsdb->fsdb_ost_index_map))
+-                         seq_printf(seq, "%s-OST%04x\n", fsdb->fsdb_name, i);
+-
+-        seq_printf(seq, "\nSecure RPC Config Rules:\n");
+-#if 0
+-        seq_printf(seq, "%s.%s=%s\n", fsdb->fsdb_name,
+-                   PARAM_SRPC_UDESC, fsdb->fsdb_srpc_fl_udesc ? "yes" : "no");
+-#endif
+-        for (srpc_tgt = fsdb->fsdb_srpc_tgt; srpc_tgt;
+-             srpc_tgt = srpc_tgt->mtsc_next) {
+-                seq_show_srpc_rules(seq, srpc_tgt->mtsc_tgt,
+-                                    &srpc_tgt->mtsc_rset);
+-        }
+-        seq_show_srpc_rules(seq, fsdb->fsdb_name, &fsdb->fsdb_srpc_gen);
+-
+-        lprocfs_rd_ir_state(seq, fsdb);
+-
+-	mutex_unlock(&fsdb->fsdb_mutex);
+-        return 0;
+-}
+-
+-static ssize_t mgs_live_seq_write(struct file *file, const char *buf,
+-                                  size_t len, loff_t *off)
+-{
+-        struct seq_file *seq  = file->private_data;
+-        struct fs_db    *fsdb = seq->private;
+-        ssize_t rc;
+-
+-        rc = lprocfs_wr_ir_state(file, buf, len, fsdb);
+-        if (rc >= 0)
+-                rc = len;
+-        return rc;
+-}
+-LPROC_SEQ_FOPS(mgs_live);
+-
+-int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
+-{
+-        int rc;
+-
+-        if (!mgs->mgs_proc_live)
+-                return 0;
+-	rc = lprocfs_seq_create(mgs->mgs_proc_live, fsdb->fsdb_name, 0644,
+-				&mgs_live_fops, fsdb);
+-
+-        return 0;
+-}
+-
+-int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
+-{
+-        if (!mgs->mgs_proc_live)
+-                return 0;
+-
+-	/* didn't create the proc file for MGSSELF_NAME */
+-	if (!test_bit(FSDB_MGS_SELF, &fsdb->fsdb_flags))
+-		lprocfs_remove_proc_entry(fsdb->fsdb_name, mgs->mgs_proc_live);
+-        return 0;
+-}
+-
+-struct lprocfs_vars lprocfs_mgs_obd_vars[] = {
+-        { "uuid",            lprocfs_rd_uuid,        0, 0 },
+-        { "num_exports",     lprocfs_rd_num_exports, 0, 0 },
+-        { "hash_stats",      lprocfs_obd_rd_hash,    0, 0 },
+-        { "evict_client",    0, lprocfs_wr_evict_client, 0 },
+-        { "ir_timeout",      lprocfs_rd_ir_timeout, lprocfs_wr_ir_timeout, 0 },
+-        { 0 }
+-};
+-
+-struct lprocfs_vars lprocfs_mgs_module_vars[] = {
+-        { 0 }
+-};
+-
+ void mgs_counter_incr(struct obd_export *exp, int opcode)
+ {
+         lprocfs_counter_incr(exp->exp_obd->obd_stats, opcode);
+@@ -329,10 +328,4 @@ void mgs_stats_counter_init(struct lprocfs_stats *stats)
+         lprocfs_counter_init(stats, LPROC_MGS_TARGET_REG, 0, "tgtreg", "reqs");
+         lprocfs_counter_init(stats, LPROC_MGS_TARGET_DEL, 0, "tgtdel", "reqs");
+ }
+-
+-void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-    lvars->module_vars  = lprocfs_mgs_module_vars;
+-    lvars->obd_vars     = lprocfs_mgs_obd_vars;
+-}
+ #endif
+diff --git a/lustre/mgs/mgs_handler.c b/lustre/mgs/mgs_handler.c
+index 560dd19..a294237 100644
+--- a/lustre/mgs/mgs_handler.c
++++ b/lustre/mgs/mgs_handler.c
+@@ -1376,12 +1376,9 @@ static struct obd_ops mgs_obd_device_ops = {
+ 
+ static int __init mgs_init(void)
+ {
+-	struct lprocfs_static_vars lvars;
+-
+-	lprocfs_mgs_init_vars(&lvars);
+ 	return class_register_type(&mgs_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					lvars.module_vars,
++					NULL,
+ #endif
+ 					LUSTRE_MGS_NAME, &mgs_device_type);
+ }
+diff --git a/lustre/mgs/mgs_internal.h b/lustre/mgs/mgs_internal.h
+index 514dc23..497ad9d 100644
+--- a/lustre/mgs/mgs_internal.h
++++ b/lustre/mgs/mgs_internal.h
+@@ -225,10 +225,10 @@ int  mgs_get_ir_logs(struct ptlrpc_request *req);
+ int  lprocfs_wr_ir_state(struct file *file, const char *buffer,
+                            unsigned long count, void *data);
+ int  lprocfs_rd_ir_state(struct seq_file *seq, void *data);
+-int  lprocfs_wr_ir_timeout(struct file *file, const char *buffer,
+-                           unsigned long count, void *data);
+-int  lprocfs_rd_ir_timeout(char *page, char **start, off_t off, int count,
+-                           int *eof, void *data);
++ssize_t
++lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer,
++			     size_t count, loff_t *off);
++int  lprocfs_ir_timeout_seq_show(struct seq_file *seq, void *data);
+ void mgs_fsc_cleanup(struct obd_export *exp);
+ void mgs_fsc_cleanup_by_fsdb(struct fs_db *fsdb);
+ int  mgs_fsc_attach(const struct lu_env *env, struct obd_export *exp,
+@@ -246,7 +246,6 @@ int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name);
+ void lproc_mgs_cleanup(struct mgs_device *mgs);
+ int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb);
+ int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb);
+-void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars);
+ #else
+ static inline int lproc_mgs_setup(struct mgs_device *mgs, const char *osd_name)
+ {return 0;}
+@@ -256,10 +255,6 @@ static inline int lproc_mgs_add_live(struct mgs_device *mgs, struct fs_db *fsdb)
+ {return 0;}
+ static inline int lproc_mgs_del_live(struct mgs_device *mgs, struct fs_db *fsdb)
+ {return 0;}
+-static void lprocfs_mgs_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-        memset(lvars, 0, sizeof(*lvars));
+-}
+ #endif
+ 
+ /* mgs/lproc_mgs.c */
+diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
+index 4d53969..73a4576 100644
+--- a/lustre/mgs/mgs_nids.c
++++ b/lustre/mgs/mgs_nids.c
+@@ -838,15 +838,14 @@ int lprocfs_rd_ir_state(struct seq_file *seq, void *data)
+         return 0;
+ }
+ 
+-int lprocfs_rd_ir_timeout(char *page, char **start, off_t off, int count,
+-                          int *eof, void *data)
++int lprocfs_ir_timeout_seq_show(struct seq_file *m, void *data)
+ {
+-        *eof = 1;
+-        return snprintf(page, count, "%d\n", ir_timeout);
++	return lprocfs_uint_seq_show(m, &ir_timeout);
+ }
+ 
+-int lprocfs_wr_ir_timeout(struct file *file, const char *buffer,
+-                          unsigned long count, void *data)
++ssize_t
++lprocfs_ir_timeout_seq_write(struct file *file, const char *buffer,
++			     size_t count, loff_t *off)
+ {
+         return lprocfs_wr_uint(file, buffer, count, &ir_timeout);
+ }
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch
new file mode 100644
index 0000000..cb8fd79
--- /dev/null
+++ b/sys-cluster/lustre/files/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch
@@ -0,0 +1,759 @@
+From 8fa5fb0ecac2a7b0279e0010bfe74acb107c37d8 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 19:47:36 -0500
+Subject: [PATCH 13/18] LU-3319 procfs: move ofd proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the ofd
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Id8f77d72fd35755f1b7b1c17fcf27e0731bd5ac1
+---
+ lustre/obdclass/lprocfs_status.c |   9 +-
+ lustre/ofd/lproc_ofd.c           | 352 +++++++++++++++++----------------------
+ lustre/ofd/ofd_dev.c             |  41 ++---
+ lustre/ofd/ofd_internal.h        |   7 +-
+ 4 files changed, 180 insertions(+), 229 deletions(-)
+
+diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c
+index a33cbf2..bd6741e 100644
+--- a/lustre/obdclass/lprocfs_status.c
++++ b/lustre/obdclass/lprocfs_status.c
+@@ -387,11 +387,10 @@ EXPORT_SYMBOL(lprocfs_evict_client_seq_write);
+ #undef BUFLEN
+ 
+ struct file_operations lprocfs_evict_client_fops = {
+-        .owner = THIS_MODULE,
+-        .read = lprocfs_fops_read,
+-        .write = lprocfs_fops_write,
+-        .open = lprocfs_evict_client_open,
+-        .release = lprocfs_evict_client_release,
++	.owner		= THIS_MODULE,
++	.open		= lprocfs_evict_client_open,
++	.release	= lprocfs_evict_client_release,
++	.write		= lprocfs_evict_client_seq_write,
+ };
+ EXPORT_SYMBOL(lprocfs_evict_client_fops);
+ #endif
+diff --git a/lustre/ofd/lproc_ofd.c b/lustre/ofd/lproc_ofd.c
+index 4354497..f462d63 100644
+--- a/lustre/ofd/lproc_ofd.c
++++ b/lustre/ofd/lproc_ofd.c
+@@ -46,80 +46,74 @@
+ 
+ #ifdef LPROCFS
+ 
+-static int lprocfs_ofd_rd_seqs(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int ofd_seqs_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	*eof = 1;
+-	return snprintf(page, count, "%u\n", ofd->ofd_seq_count);
++	return seq_printf(m, "%u\n", ofd->ofd_seq_count);
+ }
++LPROC_SEQ_FOPS_RO(ofd_seqs);
+ 
+-static int lprocfs_ofd_rd_tot_dirty(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++static int ofd_tot_dirty_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_dirty);
++	return seq_printf(m, LPU64"\n", ofd->ofd_tot_dirty);
+ }
++LPROC_SEQ_FOPS_RO(ofd_tot_dirty);
+ 
+-static int lprocfs_ofd_rd_tot_granted(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int ofd_tot_granted_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_granted);
++	return seq_printf(m, LPU64"\n", ofd->ofd_tot_granted);
+ }
++LPROC_SEQ_FOPS_RO(ofd_tot_granted);
+ 
+-static int lprocfs_ofd_rd_tot_pending(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int ofd_tot_pending_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n", ofd->ofd_tot_pending);
++	return seq_printf(m, LPU64"\n", ofd->ofd_tot_pending);
+ }
++LPROC_SEQ_FOPS_RO(ofd_tot_pending);
+ 
+-static int lprocfs_ofd_rd_grant_precreate(char *page, char **start, off_t off,
+-					  int count, int *eof, void *data)
++static int ofd_grant_precreate_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 
+ 	LASSERT(obd != NULL);
+-	*eof = 1;
+-	return snprintf(page, count, "%ld\n",
++	return seq_printf(m, "%ld\n",
+ 			obd->obd_self_export->exp_filter_data.fed_grant);
+ }
++LPROC_SEQ_FOPS_RO(ofd_grant_precreate);
+ 
+-static int lprocfs_ofd_rd_grant_ratio(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int ofd_grant_ratio_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%d%%\n",
++	return seq_printf(m, "%d%%\n",
+ 			(int) ofd_grant_reserved(ofd, 100));
+ }
+ 
+-static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
+-				      unsigned long count, void *data)
++static ssize_t
++ofd_grant_ratio_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = (struct obd_device *)data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -143,23 +137,23 @@ static int lprocfs_ofd_wr_grant_ratio(struct file *file, const char *buffer,
+ 	spin_unlock(&ofd->ofd_grant_lock);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_grant_ratio);
+ 
+-static int lprocfs_ofd_rd_precreate_batch(char *page, char **start, off_t off,
+-					  int count, int *eof, void *data)
++static int ofd_precreate_batch_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd;
+ 
+ 	LASSERT(obd != NULL);
+ 	ofd = ofd_dev(obd->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%d\n", ofd->ofd_precreate_batch);
++	return seq_printf(m, "%d\n", ofd->ofd_precreate_batch);
+ }
+ 
+-static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
+-					  unsigned long count, void *data)
++static ssize_t
++ofd_precreate_batch_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = (struct obd_device *)data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 	int val;
+ 	int rc;
+@@ -176,11 +170,11 @@ static int lprocfs_ofd_wr_precreate_batch(struct file *file, const char *buffer,
+ 	spin_unlock(&ofd->ofd_batch_lock);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_precreate_batch);
+ 
+-static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
+-				  int count, int *eof, void *data)
++static int ofd_last_id_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd;
+ 	struct ofd_seq		*oseq = NULL;
+ 	int			retval = 0, rc;
+@@ -198,35 +192,31 @@ static int lprocfs_ofd_rd_last_id(char *page, char **start, off_t off,
+ 		      fid_idif_seq(ostid_id(&oseq->os_oi),
+ 				   ofd->ofd_lut.lut_lsd.lsd_osd_index) :
+ 		      ostid_seq(&oseq->os_oi);
+-		rc = snprintf(page, count, DOSTID"\n", seq,
+-			      ostid_id(&oseq->os_oi));
++		rc = seq_printf(m, DOSTID"\n", seq, ostid_id(&oseq->os_oi));
+ 		if (rc < 0) {
+ 			retval = rc;
+ 			break;
+ 		}
+-		page += rc;
+-		count -= rc;
+ 		retval += rc;
+ 	}
+ 	read_unlock(&ofd->ofd_seq_list_lock);
+ 	return retval;
+ }
++LPROC_SEQ_FOPS_RO(ofd_last_id);
+ 
+-int lprocfs_ofd_rd_fmd_max_num(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++int ofd_fmd_max_num_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%u\n", ofd->ofd_fmd_max_num);
+-	return rc;
++	return seq_printf(m, "%u\n", ofd->ofd_fmd_max_num);
+ }
+ 
+-int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++ssize_t
++ofd_fmd_max_num_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -241,22 +231,21 @@ int lprocfs_ofd_wr_fmd_max_num(struct file *file, const char *buffer,
+ 	ofd->ofd_fmd_max_num = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_fmd_max_num);
+ 
+-int lprocfs_ofd_rd_fmd_max_age(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++int ofd_fmd_max_age_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%ld\n", ofd->ofd_fmd_max_age / HZ);
+-	return rc;
++	return seq_printf(m, "%ld\n", ofd->ofd_fmd_max_age / HZ);
+ }
+ 
+-int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++ssize_t
++ofd_fmd_max_age_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -271,22 +260,21 @@ int lprocfs_ofd_wr_fmd_max_age(struct file *file, const char *buffer,
+ 	ofd->ofd_fmd_max_age = val * HZ;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_fmd_max_age);
+ 
+-static int lprocfs_ofd_rd_capa(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++static int ofd_capa_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
+-	int			 rc;
++	struct obd_device	*obd = m->private;
+ 
+-	rc = snprintf(page, count, "capability on: %s\n",
+-		      obd->u.filter.fo_fl_oss_capa ? "oss" : "");
+-	return rc;
++	return seq_printf(m, "capability on: %s\n",
++			  obd->u.filter.fo_fl_oss_capa ? "oss" : "");
+ }
+ 
+-static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++ofd_capa_seq_write(struct file *file, const char *buffer, size_t count,
++		   loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	int			 val, rc;
+ 
+ 	rc = lprocfs_write_helper(buffer, count, &val);
+@@ -305,28 +293,29 @@ static int lprocfs_ofd_wr_capa(struct file *file, const char *buffer,
+ 		      val ? "enabled" : "disabled");
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_capa);
+ 
+-static int lprocfs_ofd_rd_capa_count(char *page, char **start, off_t off,
+-				     int count, int *eof, void *data)
++static int ofd_capa_count_seq_show(struct seq_file *m, void *data)
+ {
+-	return snprintf(page, count, "%d %d\n",
++	return seq_printf(m, "%d %d\n",
+ 			capa_count[CAPA_SITE_CLIENT],
+ 			capa_count[CAPA_SITE_SERVER]);
+ }
++LPROC_SEQ_FOPS_RO(ofd_capa_count);
+ 
+-int lprocfs_ofd_rd_degraded(char *page, char **start, off_t off,
+-			    int count, int *eof, void *data)
++int ofd_degraded_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count, "%u\n", ofd->ofd_raid_degraded);
++	return seq_printf(m, "%u\n", ofd->ofd_raid_degraded);
+ }
+ 
+-int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
+-			    unsigned long count, void *data)
++ssize_t
++ofd_degraded_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val, rc;
+ 
+@@ -337,38 +326,35 @@ int lprocfs_ofd_wr_degraded(struct file *file, const char *buffer,
+ 	spin_lock(&ofd->ofd_flags_lock);
+ 	ofd->ofd_raid_degraded = !!val;
+ 	spin_unlock(&ofd->ofd_flags_lock);
+-
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_degraded);
+ 
+-int lprocfs_ofd_rd_fstype(char *page, char **start, off_t off, int count,
+-			  int *eof, void *data)
++int ofd_fstype_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct ofd_device *ofd = ofd_dev(obd->obd_lu_dev);
+ 	struct lu_device  *d;
+ 
+ 	LASSERT(ofd->ofd_osd);
+ 	d = &ofd->ofd_osd->dd_lu_dev;
+ 	LASSERT(d->ld_type);
+-	return snprintf(page, count, "%s\n", d->ld_type->ldt_name);
++	return seq_printf(m, "%s\n", d->ld_type->ldt_name);
+ }
++LPROC_SEQ_FOPS_RO(ofd_fstype);
+ 
+-int lprocfs_ofd_rd_syncjournal(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++int ofd_syncjournal_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%u\n", ofd->ofd_syncjournal);
+-	return rc;
++	return seq_printf(m, "%u\n", ofd->ofd_syncjournal);
+ }
+ 
+-int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++ssize_t ofd_syncjournal_seq_write(struct file *file, const char *buffer,
++				  size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -387,27 +373,26 @@ int lprocfs_ofd_wr_syncjournal(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_syncjournal);
+ 
+ static char *sync_on_cancel_states[] = {"never",
+ 					"blocking",
+ 					"always" };
+ 
+-int lprocfs_ofd_rd_sync_lock_cancel(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++int ofd_sync_lock_cancel_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct lu_target	*tgt = obd->u.obt.obt_lut;
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%s\n",
+-		      sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
+-	return rc;
++	return seq_printf(m, "%s\n",
++			sync_on_cancel_states[tgt->lut_sync_lock_cancel]);
+ }
+ 
+-int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
+-				    unsigned long count, void *data)
++ssize_t
++ofd_sync_lock_cancel_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct lu_target	*tgt = obd->u.obt.obt_lut;
+ 	int			 val = -1;
+ 	int			 i;
+@@ -435,22 +420,21 @@ int lprocfs_ofd_wr_sync_lock_cancel(struct file *file, const char *buffer,
+ 	spin_unlock(&tgt->lut_flags_lock);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ofd_sync_lock_cancel);
+ 
+-int lprocfs_ofd_rd_grant_compat_disable(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++int ofd_grant_compat_disable_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-	int			 rc;
+ 
+-	rc = snprintf(page, count, "%u\n", ofd->ofd_grant_compat_disable);
+-	return rc;
++	return seq_printf(m, "%u\n", ofd->ofd_grant_compat_disable);
+ }
+ 
+-int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++ssize_t
++ofd_grant_compat_disable_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+ 	int			 val;
+ 	int			 rc;
+@@ -469,86 +453,64 @@ int lprocfs_ofd_wr_grant_compat_disable(struct file *file, const char *buffer,
+ 	return count;
+ }
+ 
+-int lprocfs_ofd_rd_soft_sync_limit(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
+-{
+-	struct obd_device	*obd = data;
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-
+-	return lprocfs_rd_uint(page, start, off, count, eof,
+-			       &ofd->ofd_soft_sync_limit);
+-}
+-
+-int lprocfs_ofd_wr_soft_sync_limit(struct file *file, const char *buffer,
+-				   unsigned long count, void *data)
+-{
+-	struct obd_device	*obd = data;
+-	struct ofd_device	*ofd = ofd_dev(obd->obd_lu_dev);
+-
+-	return lprocfs_wr_uint(file, buffer, count, &ofd->ofd_soft_sync_limit);
+-}
+-
+-static struct lprocfs_vars lprocfs_ofd_obd_vars[] = {
+-	{ "uuid",		 lprocfs_rd_uuid, 0, 0 },
+-	{ "blocksize",		 lprocfs_rd_blksize, 0, 0 },
+-	{ "kbytestotal",	 lprocfs_rd_kbytestotal, 0, 0 },
+-	{ "kbytesfree",		 lprocfs_rd_kbytesfree, 0, 0 },
+-	{ "kbytesavail",	 lprocfs_rd_kbytesavail, 0, 0 },
+-	{ "filestotal",		 lprocfs_rd_filestotal, 0, 0 },
+-	{ "filesfree",		 lprocfs_rd_filesfree, 0, 0 },
+-	{ "seqs_allocated",	 lprocfs_ofd_rd_seqs, 0, 0 },
+-	{ "fstype",		 lprocfs_ofd_rd_fstype, 0, 0 },
+-	{ "last_id",		 lprocfs_ofd_rd_last_id, 0, 0 },
+-	{ "tot_dirty",		 lprocfs_ofd_rd_tot_dirty,   0, 0 },
+-	{ "tot_pending",	 lprocfs_ofd_rd_tot_pending, 0, 0 },
+-	{ "tot_granted",	 lprocfs_ofd_rd_tot_granted, 0, 0 },
+-	{ "grant_precreate",	 lprocfs_ofd_rd_grant_precreate, 0, 0 },
+-	{ "grant_ratio",	 lprocfs_ofd_rd_grant_ratio,
+-				 lprocfs_ofd_wr_grant_ratio, 0, 0 },
+-	{ "precreate_batch",	 lprocfs_ofd_rd_precreate_batch,
+-				 lprocfs_ofd_wr_precreate_batch, 0 },
+-	{ "recovery_status",	 lprocfs_obd_rd_recovery_status, 0, 0 },
+-	{ "recovery_time_soft",	 lprocfs_obd_rd_recovery_time_soft,
+-				 lprocfs_obd_wr_recovery_time_soft, 0},
+-	{ "recovery_time_hard",  lprocfs_obd_rd_recovery_time_hard,
+-				 lprocfs_obd_wr_recovery_time_hard, 0},
+-	{ "evict_client",	 0, lprocfs_wr_evict_client, 0,
+-				 &lprocfs_evict_client_fops},
+-	{ "num_exports",	 lprocfs_rd_num_exports,   0, 0 },
+-	{ "degraded",		 lprocfs_ofd_rd_degraded,
+-				 lprocfs_ofd_wr_degraded, 0},
+-	{ "sync_journal",	 lprocfs_ofd_rd_syncjournal,
+-				 lprocfs_ofd_wr_syncjournal, 0 },
+-	{ "sync_on_lock_cancel", lprocfs_ofd_rd_sync_lock_cancel,
+-				 lprocfs_ofd_wr_sync_lock_cancel, 0 },
+-	{ "instance",		 lprocfs_target_rd_instance, 0 },
+-	{ "ir_factor",		 lprocfs_obd_rd_ir_factor,
+-				 lprocfs_obd_wr_ir_factor, 0},
+-	{ "grant_compat_disable", lprocfs_ofd_rd_grant_compat_disable,
+-				  lprocfs_ofd_wr_grant_compat_disable, 0 },
+-	{ "client_cache_count",	 lprocfs_ofd_rd_fmd_max_num,
+-				 lprocfs_ofd_wr_fmd_max_num, 0 },
+-	{ "client_cache_seconds", lprocfs_ofd_rd_fmd_max_age,
+-				  lprocfs_ofd_wr_fmd_max_age, 0 },
+-	{ "capa",		 lprocfs_ofd_rd_capa,
+-				 lprocfs_ofd_wr_capa, 0 },
+-	{ "capa_count",		 lprocfs_ofd_rd_capa_count, 0, 0 },
+-	{ "job_cleanup_interval", lprocfs_rd_job_interval,
+-				  lprocfs_wr_job_interval, 0},
+-	{ "soft_sync_limit",	 lprocfs_ofd_rd_soft_sync_limit,
+-				 lprocfs_ofd_wr_soft_sync_limit, 0},
+-	{ 0 }
+-};
+-
+-static struct lprocfs_vars lprocfs_ofd_module_vars[] = {
+-	{ "num_refs",	  lprocfs_rd_numrefs,	0, 0 },
++LPROC_SEQ_FOPS(ofd_grant_compat_disable);
++
++LPROC_SEQ_FOPS_RO_TYPE(ofd, uuid);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, blksize);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytestotal);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesfree);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, kbytesavail);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, filestotal);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, filesfree);
++
++LPROC_SEQ_FOPS_RO_TYPE(ofd, recovery_status);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_soft);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, recovery_time_hard);
++LPROC_SEQ_FOPS_WO_TYPE(ofd, evict_client);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, num_exports);
++LPROC_SEQ_FOPS_RO_TYPE(ofd, target_instance);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, ir_factor);
++LPROC_SEQ_FOPS_RW_TYPE(ofd, job_interval);
++
++static struct lprocfs_seq_vars lprocfs_ofd_obd_vars[] = {
++	{ "uuid",			&ofd_uuid_fops			},
++	{ "blocksize",			&ofd_blksize_fops		},
++	{ "kbytestotal",		&ofd_kbytestotal_fops		},
++	{ "kbytesfree",			&ofd_kbytesfree_fops		},
++	{ "kbytesavail",		&ofd_kbytesavail_fops		},
++	{ "filestotal",			&ofd_filestotal_fops		},
++	{ "filesfree",			&ofd_filesfree_fops		},
++	{ "seqs_allocated",		&ofd_seqs_fops			},
++	{ "fstype",			&ofd_fstype_fops		},
++	{ "last_id",			&ofd_last_id_fops		},
++	{ "tot_dirty",			&ofd_tot_dirty_fops		},
++	{ "tot_pending",		&ofd_tot_pending_fops		},
++	{ "tot_granted",		&ofd_tot_granted_fops		},
++	{ "grant_precreate",		&ofd_grant_precreate_fops	},
++	{ "grant_ratio",		&ofd_grant_ratio_fops		},
++	{ "precreate_batch",		&ofd_precreate_batch_fops	},
++	{ "recovery_status",		&ofd_recovery_status_fops	},
++	{ "recovery_time_soft",		&ofd_recovery_time_soft_fops	},
++	{ "recovery_time_hard",		&ofd_recovery_time_hard_fops	},
++	{ "evict_client",		&ofd_evict_client_fops		},
++	{ "num_exports",		&ofd_num_exports_fops		},
++	{ "degraded",			&ofd_degraded_fops		},
++	{ "sync_journal",		&ofd_syncjournal_fops		},
++	{ "sync_on_lock_cancel",	&ofd_sync_lock_cancel_fops	},
++	{ "instance",			&ofd_target_instance_fops	},
++	{ "ir_factor",			&ofd_ir_factor_fops		},
++	{ "grant_compat_disable",	&ofd_grant_compat_disable_fops	},
++	{ "client_cache_count",		&ofd_fmd_max_num_fops		},
++	{ "client_cache_seconds",	&ofd_fmd_max_age_fops		},
++	{ "capa",			&ofd_capa_fops			},
++	{ "capa_count",			&ofd_capa_count_fops		},
++	{ "job_cleanup_interval",	&ofd_job_interval_fops		},
+ 	{ 0 }
+ };
+ 
+-void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
++void lprocfs_ofd_init_vars(struct obd_device *obd)
+ {
+-	lvars->module_vars  = lprocfs_ofd_module_vars;
+-	lvars->obd_vars     = lprocfs_ofd_obd_vars;
++	obd->obd_vars = lprocfs_ofd_obd_vars;
+ }
+ 
+ void ofd_stats_counter_init(struct lprocfs_stats *stats)
+diff --git a/lustre/ofd/ofd_dev.c b/lustre/ofd/ofd_dev.c
+index 2bdbde6..e3b8358 100644
+--- a/lustre/ofd/ofd_dev.c
++++ b/lustre/ofd/ofd_dev.c
+@@ -206,8 +206,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
+ 
+ 	switch (cfg->lcfg_command) {
+ 	case LCFG_PARAM: {
+-		struct lprocfs_static_vars lvars;
+-
++		struct obd_device	*obd = ofd_obd(m);
+ 		/* For interoperability */
+ 		struct cfg_interop_param   *ptr = NULL;
+ 		struct lustre_cfg	   *old_cfg = NULL;
+@@ -240,8 +239,7 @@ static int ofd_process_config(const struct lu_env *env, struct lu_device *d,
+ 			}
+ 		}
+ 
+-		lprocfs_ofd_init_vars(&lvars);
+-		rc = class_process_proc_param(PARAM_OST, lvars.obd_vars, cfg,
++		rc = class_process_proc_seq_param(PARAM_OST, obd->obd_vars, cfg,
+ 					      d->ld_obd);
+ 		if (rc > 0 || rc == -ENOSYS)
+ 			/* we don't understand; pass it on */
+@@ -422,9 +420,10 @@ static struct lu_device_operations ofd_lu_ops = {
+ 	.ldo_prepare		= ofd_prepare,
+ };
+ 
++LPROC_SEQ_FOPS(lprocfs_nid_stats_clear);
++
+ static int ofd_procfs_init(struct ofd_device *ofd)
+ {
+-	struct lprocfs_static_vars	 lvars;
+ 	struct obd_device		*obd = ofd_obd(ofd);
+ 	cfs_proc_dir_entry_t		*entry;
+ 	int				 rc = 0;
+@@ -433,8 +432,8 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 
+ 	/* lprocfs must be setup before the ofd so state can be safely added
+ 	 * to /proc incrementally as the ofd is setup */
+-	lprocfs_ofd_init_vars(&lvars);
+-	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
++	lprocfs_ofd_init_vars(obd);
++	rc = lprocfs_seq_obd_setup(obd);
+ 	if (rc) {
+ 		CERROR("%s: lprocfs_obd_setup failed: %d.\n",
+ 		       obd->obd_name, rc);
+@@ -450,7 +449,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 
+ 	obd->obd_uses_nid_stats = 1;
+ 
+-	entry = lprocfs_register("exports", obd->obd_proc_entry, NULL, NULL);
++	entry = lprocfs_seq_register("exports", obd->obd_proc_entry, NULL, NULL);
+ 	if (IS_ERR(entry)) {
+ 		rc = PTR_ERR(entry);
+ 		CERROR("%s: error %d setting up lprocfs for %s\n",
+@@ -460,8 +459,10 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 	obd->obd_proc_exports_entry = entry;
+ 
+ 	entry = lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
+-				   lprocfs_nid_stats_clear_read,
+-				   lprocfs_nid_stats_clear_write, obd, NULL);
++#ifndef HAVE_ONLY_PROCFS_SEQ
++				   NULL, NULL,
++#endif
++				   obd, &lprocfs_nid_stats_clear_fops);
+ 	if (IS_ERR(entry)) {
+ 		rc = PTR_ERR(entry);
+ 		CERROR("%s: add proc entry 'clear' failed: %d.\n",
+@@ -477,7 +478,7 @@ static int ofd_procfs_init(struct ofd_device *ofd)
+ 		GOTO(remove_entry_clear, rc);
+ 	RETURN(0);
+ remove_entry_clear:
+-	lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
++	lprocfs_remove(&obd->obd_proc_exports_entry);
+ obd_cleanup:
+ 	lprocfs_obd_cleanup(obd);
+ 	lprocfs_free_obd_stats(obd);
+@@ -487,7 +488,7 @@ obd_cleanup:
+ 
+ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+ {
+-	struct obd_device	*obd = ofd_obd(ofd);
++	/*struct obd_device	*obd = ofd_obd(ofd);
+ 	struct obd_device	*osd_obd = ofd->ofd_osd_exp->exp_obd;
+ 	cfs_proc_dir_entry_t	*osd_root = osd_obd->obd_type->typ_procroot;
+ 	cfs_proc_dir_entry_t	*osd_dir;
+@@ -516,20 +517,15 @@ static void ofd_procfs_add_brw_stats_symlink(struct ofd_device *ofd)
+ 		lprocfs_add_symlink("writethrough_cache_enable",
+ 				    obd->obd_proc_entry,
+ 				    "../../%s/%s/writethrough_cache_enable",
+-				    osd_root->name, osd_dir->name);
++				    osd_root->name, osd_dir->name);*/
+ }
+ 
+ static void ofd_procfs_fini(struct ofd_device *ofd)
+ {
+ 	struct obd_device *obd = ofd_obd(ofd);
+ 
+-	lprocfs_remove_proc_entry("writethrough_cache_enable",
+-				  obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("readcache_max_filesize",
+-				  obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("read_cache_enable", obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("brw_stats", obd->obd_proc_entry);
+-	lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
++	lprocfs_remove(&obd->obd_proc_exports_entry);
++	lprocfs_remove(&obd->obd_proc_entry);
+ 	lprocfs_free_per_client_stats(obd);
+ 	lprocfs_obd_cleanup(obd);
+ 	lprocfs_free_obd_stats(obd);
+@@ -1889,7 +1885,6 @@ static struct lu_device_type ofd_device_type = {
+ 
+ int __init ofd_init(void)
+ {
+-	struct lprocfs_static_vars	lvars;
+ 	int				rc;
+ 
+ 	rc = lu_kmem_init(ofd_caches);
+@@ -1902,11 +1897,9 @@ int __init ofd_init(void)
+ 		return(rc);
+ 	}
+ 
+-	lprocfs_ofd_init_vars(&lvars);
+-
+ 	rc = class_register_type(&ofd_obd_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_OST_NAME, &ofd_device_type);
+ 	return rc;
+diff --git a/lustre/ofd/ofd_internal.h b/lustre/ofd/ofd_internal.h
+index 9285a1f..6acae49 100644
+--- a/lustre/ofd/ofd_internal.h
++++ b/lustre/ofd/ofd_internal.h
+@@ -383,13 +383,10 @@ int ofd_txn_stop_cb(const struct lu_env *env, struct thandle *txn,
+ 
+ /* lproc_ofd.c */
+ #ifdef LPROCFS
+-void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars);
++void lprocfs_ofd_init_vars(struct obd_device *obd);
+ void ofd_stats_counter_init(struct lprocfs_stats *stats);
+ #else
+-static void lprocfs_ofd_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	memset(lvars, 0, sizeof(*lvars));
+-}
++static void lprocfs_ofd_init_vars(struct obd_device *obd) {}
+ static inline void ofd_stats_counter_init(struct lprocfs_stats *stats) {}
+ #endif
+ 
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
new file mode 100644
index 0000000..4bbea03
--- /dev/null
+++ b/sys-cluster/lustre/files/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch
@@ -0,0 +1,589 @@
+From eb1406399522d52e51c3dd7e8a73813c0179d12a Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 19:20:50 -0500
+Subject: [PATCH 14/18] LU-3319 procfs: move lod proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the lod
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Iaa0f617fcd430e91f12afbc0faf6906fd275a7a5
+---
+ lustre/lod/lod_dev.c      |  28 +----
+ lustre/lod/lod_internal.h |   1 -
+ lustre/lod/lod_pool.c     |   7 +-
+ lustre/lod/lproc_lod.c    | 255 ++++++++++++++++++++++++----------------------
+ 4 files changed, 143 insertions(+), 148 deletions(-)
+
+diff --git a/lustre/lod/lod_dev.c b/lustre/lod/lod_dev.c
+index e36aee1..8a0be26 100644
+--- a/lustre/lod/lod_dev.c
++++ b/lustre/lod/lod_dev.c
+@@ -297,12 +297,10 @@ static int lod_process_config(const struct lu_env *env,
+ 	}
+ 
+ 	case LCFG_PARAM: {
+-		struct lprocfs_static_vars  v = { 0 };
+-		struct obd_device	  *obd = lod2obd(lod);
++		struct obd_device *obd = lod2obd(lod);
+ 
+-		lprocfs_lod_init_vars(&v);
+-
+-		rc = class_process_proc_param(PARAM_LOV, v.obd_vars, lcfg, obd);
++		rc = class_process_proc_seq_param(PARAM_LOV, obd->obd_vars,
++						  lcfg, obd);
+ 		if (rc > 0)
+ 			rc = 0;
+ 		GOTO(out, rc);
+@@ -916,44 +914,26 @@ static struct obd_ops lod_obd_device_ops = {
+ 
+ static int __init lod_mod_init(void)
+ {
+-	struct lprocfs_static_vars  lvars = { 0 };
+-	cfs_proc_dir_entry_t       *lov_proc_dir;
+ 	int			    rc;
+ 
+ 	rc = lu_kmem_init(lod_caches);
+ 	if (rc)
+ 		return rc;
+ 
+-	lprocfs_lod_init_vars(&lvars);
+-
+ 	rc = class_register_type(&lod_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_LOD_NAME, &lod_device_type);
+ 	if (rc) {
+ 		lu_kmem_fini(lod_caches);
+ 		return rc;
+ 	}
+-
+-	/* create "lov" entry in procfs for compatibility purposes */
+-	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
+-	if (lov_proc_dir == NULL) {
+-		lov_proc_dir = lprocfs_register("lov", proc_lustre_root,
+-						NULL, NULL);
+-		if (IS_ERR(lov_proc_dir))
+-			CERROR("lod: can't create compat entry \"lov\": %d\n",
+-			       (int)PTR_ERR(lov_proc_dir));
+-	}
+-
+ 	return rc;
+ }
+ 
+ static void __exit lod_mod_exit(void)
+ {
+-
+-	lprocfs_try_remove_proc_entry("lov", proc_lustre_root);
+-
+ 	class_unregister_type(LUSTRE_LOD_NAME);
+ 	lu_kmem_fini(lod_caches);
+ }
+diff --git a/lustre/lod/lod_internal.h b/lustre/lod/lod_internal.h
+index 0dd077b..bb6fbfb 100644
+--- a/lustre/lod/lod_internal.h
++++ b/lustre/lod/lod_internal.h
+@@ -317,7 +317,6 @@ int qos_add_tgt(struct lod_device*, struct lod_tgt_desc *);
+ int qos_del_tgt(struct lod_device *, struct lod_tgt_desc *);
+ 
+ /* lproc_lod.c */
+-void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars);
+ int lod_procfs_init(struct lod_device *lod);
+ void lod_procfs_fini(struct lod_device *lod);
+ 
+diff --git a/lustre/lod/lod_pool.c b/lustre/lod/lod_pool.c
+index e33ae4d..77d04a7 100644
+--- a/lustre/lod/lod_pool.c
++++ b/lustre/lod/lod_pool.c
+@@ -283,7 +283,7 @@ static int pool_proc_open(struct inode *inode, struct file *file)
+ 	rc = seq_open(file, &pool_proc_ops);
+ 	if (!rc) {
+ 		struct seq_file *s = file->private_data;
+-		s->private = PROC_I(inode)->pde->data;
++		s->private = PDE_DATA(inode);
+ 	}
+ 	return rc;
+ }
+@@ -462,7 +462,10 @@ int lod_pool_new(struct obd_device *obd, char *poolname)
+ #ifdef LPROCFS
+ 	lod_pool_getref(new_pool);
+ 	new_pool->pool_proc_entry = lprocfs_add_simple(lod->lod_pool_proc_entry,
+-						       poolname, NULL, NULL,
++						       poolname,
++#ifndef HAVE_ONLY_PROCFS_SEQ
++						       NULL, NULL,
++#endif
+ 						       new_pool,
+ 						       &pool_proc_operations);
+ 	if (IS_ERR(new_pool->pool_proc_entry)) {
+diff --git a/lustre/lod/lproc_lod.c b/lustre/lod/lproc_lod.c
+index e976063..b0d4e17 100644
+--- a/lustre/lod/lproc_lod.c
++++ b/lustre/lod/lproc_lod.c
+@@ -42,23 +42,22 @@
+ #include <lustre_param.h>
+ 
+ #ifdef LPROCFS
+-static int lod_rd_stripesize(char *page, char **start, off_t off, int count,
+-			     int *eof, void *data)
++static int lod_stripesize_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev  = (struct obd_device *)data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n",
++	return seq_printf(m, LPU64"\n",
+ 			lod->lod_desc.ld_default_stripe_size);
+ }
+ 
+-static int lod_wr_stripesize(struct file *file, const char *buffer,
+-			     unsigned long count, void *data)
++static ssize_t
++lod_stripesize_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lod_device *lod;
+ 	__u64 val;
+ 	int rc;
+@@ -73,24 +72,24 @@ static int lod_wr_stripesize(struct file *file, const char *buffer,
+ 	lod->lod_desc.ld_default_stripe_size = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_stripesize);
+ 
+-static int lod_rd_stripeoffset(char *page, char **start, off_t off, int count,
+-			       int *eof, void *data)
++static int lod_stripeoffset_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, LPU64"\n",
++	return seq_printf(m, LPU64"\n",
+ 			lod->lod_desc.ld_default_stripe_offset);
+ }
+ 
+-static int lod_wr_stripeoffset(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++lod_stripeoffset_seq_write(struct file *file, const char *buffer,
++			   size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lod_device *lod;
+ 	__u64 val;
+ 	int rc;
+@@ -104,23 +103,23 @@ static int lod_wr_stripeoffset(struct file *file, const char *buffer,
+ 	lod->lod_desc.ld_default_stripe_offset = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_stripeoffset);
+ 
+-static int lod_rd_stripetype(char *page, char **start, off_t off, int count,
+-			     int *eof, void *data)
++static int lod_stripetype_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%u\n", lod->lod_desc.ld_pattern);
++	return seq_printf(m, "%u\n", lod->lod_desc.ld_pattern);
+ }
+ 
+-static int lod_wr_stripetype(struct file *file, const char *buffer,
+-			     unsigned long count, void *data)
++static ssize_t
++lod_stripetype_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lod_device *lod;
+ 	int val, rc;
+ 
+@@ -134,24 +133,24 @@ static int lod_wr_stripetype(struct file *file, const char *buffer,
+ 	lod->lod_desc.ld_pattern = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_stripetype);
+ 
+-static int lod_rd_stripecount(char *page, char **start, off_t off, int count,
+-			      int *eof, void *data)
++static int lod_stripecount_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%d\n",
++	return seq_printf(m, "%d\n",
+ 			(__s16)(lod->lod_desc.ld_default_stripe_count + 1) - 1);
+ }
+ 
+-static int lod_wr_stripecount(struct file *file, const char *buffer,
+-			      unsigned long count, void *data)
++static ssize_t
++lod_stripecount_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lod_device *lod;
+ 	int val, rc;
+ 
+@@ -165,62 +164,57 @@ static int lod_wr_stripecount(struct file *file, const char *buffer,
+ 	lod->lod_desc.ld_default_stripe_count = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_stripecount);
+ 
+-static int lod_rd_numobd(char *page, char **start, off_t off, int count,
+-			 int *eof, void *data)
++static int lod_numobd_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device*)data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%u\n", lod->lod_desc.ld_tgt_count);
+-
++	return seq_printf(m, "%u\n", lod->lod_desc.ld_tgt_count);
+ }
++LPROC_SEQ_FOPS_RO(lod_numobd);
+ 
+-static int lod_rd_activeobd(char *page, char **start, off_t off, int count,
+-			    int *eof, void *data)
++static int lod_activeobd_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device* dev = (struct obd_device*)data;
++	struct obd_device* dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%u\n",
+-			lod->lod_desc.ld_active_tgt_count);
++	return seq_printf(m, "%u\n", lod->lod_desc.ld_active_tgt_count);
+ }
++LPROC_SEQ_FOPS_RO(lod_activeobd);
+ 
+-static int lod_rd_desc_uuid(char *page, char **start, off_t off, int count,
+-			    int *eof, void *data)
++static int lod_desc_uuid_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device*) data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod  = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%s\n", lod->lod_desc.ld_uuid.uuid);
++	return seq_printf(m, "%s\n", lod->lod_desc.ld_uuid.uuid);
+ }
++LPROC_SEQ_FOPS_RO(lod_desc_uuid);
+ 
+ /* free priority (0-255): how badly user wants to choose empty osts */
+-static int lod_rd_qos_priofree(char *page, char **start, off_t off, int count,
+-			       int *eof, void *data)
++static int lod_qos_priofree_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device*) data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod = lu2lod_dev(dev->obd_lu_dev);
+ 
+ 	LASSERT(lod != NULL);
+-	*eof = 1;
+-	return snprintf(page, count, "%d%%\n",
++	return seq_printf(m, "%d%%\n",
+ 			(lod->lod_qos.lq_prio_free * 100 + 255) >> 8);
+ }
+ 
+-static int lod_wr_qos_priofree(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++lod_qos_priofree_seq_write(struct file *file, const char *buffer,
++			   size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lod_device *lod;
+ 	int val, rc;
+ 
+@@ -238,24 +232,24 @@ static int lod_wr_qos_priofree(struct file *file, const char *buffer,
+ 	lod->lod_qos.lq_reset = 1;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_qos_priofree);
+ 
+-static int lod_rd_qos_thresholdrr(char *page, char **start, off_t off,
+-				  int count, int *eof, void *data)
++static int lod_qos_thresholdrr_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device*) data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%d%%\n",
++	return seq_printf(m, "%d%%\n",
+ 			(lod->lod_qos.lq_threshold_rr * 100 + 255) >> 8);
+ }
+ 
+-static int lod_wr_qos_thresholdrr(struct file *file, const char *buffer,
+-				  unsigned long count, void *data)
++static ssize_t
++lod_qos_thresholdrr_seq_write(struct file *file, const char *buffer,
++			      size_t count, loff_t *off)
+ {
+-	struct obd_device *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lod_device *lod;
+ 	int val, rc;
+ 
+@@ -273,23 +267,23 @@ static int lod_wr_qos_thresholdrr(struct file *file, const char *buffer,
+ 	lod->lod_qos.lq_dirty = 1;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_qos_thresholdrr);
+ 
+-static int lod_rd_qos_maxage(char *page, char **start, off_t off, int count,
+-			     int *eof, void *data)
++static int lod_qos_maxage_seq_show(struct seq_file *m, void *v)
+ {
+-	struct obd_device *dev = (struct obd_device*) data;
++	struct obd_device *dev = m->private;
+ 	struct lod_device *lod;
+ 
+ 	LASSERT(dev != NULL);
+ 	lod = lu2lod_dev(dev->obd_lu_dev);
+-	*eof = 1;
+-	return snprintf(page, count, "%u Sec\n", lod->lod_desc.ld_qos_maxage);
++	return seq_printf(m, "%u Sec\n", lod->lod_desc.ld_qos_maxage);
+ }
+ 
+-static int lod_wr_qos_maxage(struct file *file, const char *buffer,
+-			     unsigned long count, void *data)
++static ssize_t
++lod_qos_maxage_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
+-	struct obd_device	*dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+ 	struct lustre_cfg_bufs	 bufs;
+ 	struct lod_device	*lod;
+ 	struct lu_device	*next;
+@@ -327,6 +321,7 @@ static int lod_wr_qos_maxage(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lod_qos_maxage);
+ 
+ static void *lod_osts_seq_start(struct seq_file *p, loff_t *pos)
+ {
+@@ -414,56 +409,52 @@ static const struct seq_operations lod_osts_sops = {
+ 
+ static int lod_osts_seq_open(struct inode *inode, struct file *file)
+ {
+-	struct proc_dir_entry *dp = PDE(inode);
+ 	struct seq_file *seq;
+ 	int rc;
+ 
+-	LPROCFS_ENTRY_CHECK(dp);
+ 	rc = seq_open(file, &lod_osts_sops);
+ 	if (rc)
+ 		return rc;
+ 
+ 	seq = file->private_data;
+-	seq->private = dp->data;
++	seq->private = PDE_DATA(inode);
+ 	return 0;
+ }
+ 
+-static struct lprocfs_vars lprocfs_lod_obd_vars[] = {
+-	{ "uuid",         lprocfs_rd_uuid,        0, 0 },
+-	{ "stripesize",   lod_rd_stripesize,      lod_wr_stripesize, 0 },
+-	{ "stripeoffset", lod_rd_stripeoffset,    lod_wr_stripeoffset, 0 },
+-	{ "stripecount",  lod_rd_stripecount,     lod_wr_stripecount, 0 },
+-	{ "stripetype",   lod_rd_stripetype,      lod_wr_stripetype, 0 },
+-	{ "numobd",       lod_rd_numobd,          0, 0 },
+-	{ "activeobd",    lod_rd_activeobd,       0, 0 },
+-	{ "desc_uuid",    lod_rd_desc_uuid,       0, 0 },
+-	{ "qos_prio_free",lod_rd_qos_priofree,    lod_wr_qos_priofree, 0 },
+-	{ "qos_threshold_rr",  lod_rd_qos_thresholdrr, lod_wr_qos_thresholdrr, 0 },
+-	{ "qos_maxage",   lod_rd_qos_maxage,      lod_wr_qos_maxage, 0 },
+-	{ 0 }
+-};
+-
+-static struct lprocfs_vars lprocfs_lod_osd_vars[] = {
+-	{ "blocksize",    lprocfs_dt_rd_blksize, 0, 0 },
+-	{ "kbytestotal",  lprocfs_dt_rd_kbytestotal, 0, 0 },
+-	{ "kbytesfree",   lprocfs_dt_rd_kbytesfree, 0, 0 },
+-	{ "kbytesavail",  lprocfs_dt_rd_kbytesavail, 0, 0 },
+-	{ "filestotal",   lprocfs_dt_rd_filestotal, 0, 0 },
+-	{ "filesfree",    lprocfs_dt_rd_filesfree, 0, 0 },
++LPROC_SEQ_FOPS_RO_TYPE(lod, uuid);
++
++LPROC_SEQ_FOPS_RO_TYPE(lod, dt_blksize);
++LPROC_SEQ_FOPS_RO_TYPE(lod, dt_kbytestotal);
++LPROC_SEQ_FOPS_RO_TYPE(lod, dt_kbytesfree);
++LPROC_SEQ_FOPS_RO_TYPE(lod, dt_kbytesavail);
++LPROC_SEQ_FOPS_RO_TYPE(lod, dt_filestotal);
++LPROC_SEQ_FOPS_RO_TYPE(lod, dt_filesfree);
++
++static struct lprocfs_seq_vars lprocfs_lod_obd_vars[] = {
++	{ "uuid",		&lod_uuid_fops		},
++	{ "stripesize",		&lod_stripesize_fops	},
++	{ "stripeoffset",	&lod_stripeoffset_fops	},
++	{ "stripecount",	&lod_stripecount_fops	},
++	{ "stripetype",		&lod_stripetype_fops	},
++	{ "numobd",		&lod_numobd_fops	},
++	{ "activeobd",		&lod_activeobd_fops	},
++	{ "desc_uuid",		&lod_desc_uuid_fops	},
++	{ "qos_prio_free",	&lod_qos_priofree_fops	},
++	{ "qos_threshold_rr",	&lod_qos_thresholdrr_fops },
++	{ "qos_maxage",		&lod_qos_maxage_fops	},
+ 	{ 0 }
+ };
+ 
+-static struct lprocfs_vars lprocfs_lod_module_vars[] = {
+-	{ "num_refs",     lprocfs_rd_numrefs,     0, 0 },
++static struct lprocfs_seq_vars lprocfs_lod_osd_vars[] = {
++	{ "blocksize",		&lod_dt_blksize_fops		},
++	{ "kbytestotal",	&lod_dt_kbytestotal_fops	},
++	{ "kbytesfree",		&lod_dt_kbytesfree_fops		},
++	{ "kbytesavail",	&lod_dt_kbytesavail_fops	},
++	{ "filestotal",		&lod_dt_filestotal_fops		},
++	{ "filesfree",		&lod_dt_filesfree_fops		},
+ 	{ 0 }
+ };
+ 
+-void lprocfs_lod_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	lvars->module_vars	= lprocfs_lod_module_vars;
+-	lvars->obd_vars		= lprocfs_lod_obd_vars;
+-}
+-
+ static const struct file_operations lod_proc_target_fops = {
+ 	.owner   = THIS_MODULE,
+ 	.open    = lod_osts_seq_open,
+@@ -475,20 +466,19 @@ static const struct file_operations lod_proc_target_fops = {
+ int lod_procfs_init(struct lod_device *lod)
+ {
+ 	struct obd_device *obd = lod2obd(lod);
+-	struct lprocfs_static_vars lvars;
+ 	cfs_proc_dir_entry_t *lov_proc_dir;
+ 	int rc;
+ 
+-	lprocfs_lod_init_vars(&lvars);
+-	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
++	obd->obd_vars = lprocfs_lod_obd_vars;
++	rc = lprocfs_seq_obd_setup(obd);
+ 	if (rc) {
+ 		CERROR("%s: cannot setup procfs entry: %d\n",
+ 		       obd->obd_name, rc);
+ 		RETURN(rc);
+ 	}
+ 
+-	rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_lod_osd_vars,
+-			      &lod->lod_dt_dev);
++	rc = lprocfs_seq_add_vars(obd->obd_proc_entry, lprocfs_lod_osd_vars,
++				  &lod->lod_dt_dev);
+ 	if (rc) {
+ 		CERROR("%s: cannot setup procfs entry: %d\n",
+ 		       obd->obd_name, rc);
+@@ -503,9 +493,9 @@ int lod_procfs_init(struct lod_device *lod)
+ 		GOTO(out, rc);
+ 	}
+ 
+-	lod->lod_pool_proc_entry = lprocfs_register("pools",
+-						    obd->obd_proc_entry,
+-						    NULL, NULL);
++	lod->lod_pool_proc_entry = lprocfs_seq_register("pools",
++							obd->obd_proc_entry,
++							NULL, NULL);
+ 	if (IS_ERR(lod->lod_pool_proc_entry)) {
+ 		rc = PTR_ERR(lod->lod_pool_proc_entry);
+ 		lod->lod_pool_proc_entry = NULL;
+@@ -514,14 +504,34 @@ int lod_procfs_init(struct lod_device *lod)
+ 		GOTO(out, rc);
+ 	}
+ 
+-	/* for compatibility we link old procfs's OSC entries to osp ones */
+-	lov_proc_dir = lprocfs_srch(proc_lustre_root, "lov");
+-	if (lov_proc_dir != NULL && strstr(obd->obd_name, "lov") != NULL)
+-		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
+-						       lov_proc_dir,
+-						       "../lod/%s",
+-						       obd->obd_name);
++	/* for compatibility we link old procfs's LOV entries to lod ones */
++	lov_proc_dir = obd->obd_proc_private;
++	if (lov_proc_dir == NULL) {
++		struct obd_type *type = class_search_type(LUSTRE_LOV_NAME);
++
++		/* create "lov" entry in procfs for compatibility purposes */
++		if (type == NULL) {
++			lov_proc_dir = lprocfs_seq_register("lov",
++							    proc_lustre_root,
++							    NULL, NULL);
++			if (IS_ERR(lov_proc_dir))
++				CERROR("lod: can't create compat entry \"lov\""
++					": %d\n",(int)PTR_ERR(lov_proc_dir));
++		} else {
++			lov_proc_dir = type->typ_procroot;
++		}
+ 
++		lod->lod_symlink = lprocfs_add_symlink(obd->obd_name,
++							lov_proc_dir,
++							"../lod/%s",
++							obd->obd_name);
++		if (lod->lod_symlink == NULL) {
++			CERROR("could not register LOV symlink for "
++				"/proc/fs/lustre/lod/%s.", obd->obd_name);
++			lprocfs_remove(&lov_proc_dir);
++		} else
++			obd->obd_proc_private = lov_proc_dir;
++	}
+ 	RETURN(0);
+ 
+ out:
+@@ -542,6 +552,9 @@ void lod_procfs_fini(struct lod_device *lod)
+ 		lod->lod_pool_proc_entry = NULL;
+ 	}
+ 
++	if (obd->obd_proc_private != NULL)
++		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
++
+ 	lprocfs_obd_cleanup(obd);
+ }
+ 
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
new file mode 100644
index 0000000..8d25476
--- /dev/null
+++ b/sys-cluster/lustre/files/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch
@@ -0,0 +1,779 @@
+From 1537f22b9b2bc9250006805774fc300e5240c2bc Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 19:23:09 -0500
+Subject: [PATCH 15/18] LU-3319 procfs: move osp proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the osp
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: If58826e11524a5fffd2e491c1386e3795015bc7e
+---
+ lustre/osp/lproc_osp.c    | 363 ++++++++++++++++++++++++----------------------
+ lustre/osp/lwp_dev.c      |  18 +--
+ lustre/osp/osp_dev.c      |  38 ++---
+ lustre/osp/osp_internal.h |   2 -
+ 4 files changed, 203 insertions(+), 218 deletions(-)
+
+diff --git a/lustre/osp/lproc_osp.c b/lustre/osp/lproc_osp.c
+index 22e3372..24f2f4c 100644
+--- a/lustre/osp/lproc_osp.c
++++ b/lustre/osp/lproc_osp.c
+@@ -45,24 +45,23 @@
+ #include "osp_internal.h"
+ 
+ #ifdef LPROCFS
+-static int osp_rd_active(char *page, char **start, off_t off,
+-			 int count, int *eof, void *data)
++static int osp_active_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	int			 rc;
+ 
+ 	LPROCFS_CLIMP_CHECK(dev);
+-	rc = snprintf(page, count, "%d\n",
+-		      !dev->u.cli.cl_import->imp_deactive);
++	rc = seq_printf(m, "%d\n", !dev->u.cli.cl_import->imp_deactive);
+ 	LPROCFS_CLIMP_EXIT(dev);
+ 	return rc;
+ }
+ 
+-static int osp_wr_active(struct file *file, const char *buffer,
+-			 unsigned long count, void *data)
++static ssize_t
++osp_active_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-	struct obd_device	*dev = data;
+-	int			 val, rc;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
++	int		   val, rc;
+ 
+ 	rc = lprocfs_write_helper(buffer, count, &val);
+ 	if (rc)
+@@ -81,67 +80,60 @@ static int osp_wr_active(struct file *file, const char *buffer,
+ 	LPROCFS_CLIMP_EXIT(dev);
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_active);
+ 
+-static int osp_rd_syn_in_flight(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int osp_syn_in_flight_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%u\n", osp->opd_syn_rpc_in_flight);
+-	return rc;
++	return seq_printf(m, "%u\n", osp->opd_syn_rpc_in_flight);
+ }
++LPROC_SEQ_FOPS_RO(osp_syn_in_flight);
+ 
+-static int osp_rd_syn_in_prog(char *page, char **start, off_t off, int count,
+-			      int *eof, void *data)
++static int osp_syn_in_prog_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%u\n", osp->opd_syn_rpc_in_progress);
+-	return rc;
++	return seq_printf(m, "%u\n", osp->opd_syn_rpc_in_progress);
+ }
++LPROC_SEQ_FOPS_RO(osp_syn_in_prog);
+ 
+-static int osp_rd_syn_changes(char *page, char **start, off_t off,
+-			      int count, int *eof, void *data)
++static int osp_syn_changes_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%lu\n", osp->opd_syn_changes);
+-	return rc;
++	return seq_printf(m, "%lu\n", osp->opd_syn_changes);
+ }
++LPROC_SEQ_FOPS_RO(osp_syn_changes);
+ 
+-static int osp_rd_max_rpcs_in_flight(char *page, char **start, off_t off,
+-				     int count, int *eof, void *data)
++static int osp_max_rpcs_in_flight_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%u\n", osp->opd_syn_max_rpc_in_flight);
+-	return rc;
++	return seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_flight);
+ }
+ 
+-static int osp_wr_max_rpcs_in_flight(struct file *file, const char *buffer,
+-				     unsigned long count, void *data)
++static ssize_t
++osp_max_rpcs_in_flight_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = ((struct seq_file *)file->private_data)->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+ 	int			 val, rc;
+ 
+@@ -158,25 +150,24 @@ static int osp_wr_max_rpcs_in_flight(struct file *file, const char *buffer,
+ 	osp->opd_syn_max_rpc_in_flight = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_max_rpcs_in_flight);
+ 
+-static int osp_rd_max_rpcs_in_prog(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int osp_max_rpcs_in_prog_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%u\n", osp->opd_syn_max_rpc_in_progress);
+-	return rc;
++	return seq_printf(m, "%u\n", osp->opd_syn_max_rpc_in_progress);
+ }
+ 
+-static int osp_wr_max_rpcs_in_prog(struct file *file, const char *buffer,
+-				   unsigned long count, void *data)
++static ssize_t
++osp_max_rpcs_in_prog_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = ((struct seq_file *)file->private_data)->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+ 	int			 val, rc;
+ 
+@@ -194,23 +185,24 @@ static int osp_wr_max_rpcs_in_prog(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_max_rpcs_in_prog);
+ 
+-static int osp_rd_create_count(char *page, char **start, off_t off, int count,
+-			       int *eof, void *data)
++static int osp_create_count_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, "%d\n", osp->opd_pre_grow_count);
++	return seq_printf(m, "%d\n", osp->opd_pre_grow_count);
+ }
+ 
+-static int osp_wr_create_count(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t
++osp_create_count_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct osp_device	*osp = lu2osp_dev(obd->obd_lu_dev);
+ 	int			 val, rc, i;
+ 
+@@ -242,23 +234,24 @@ static int osp_wr_create_count(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_create_count);
+ 
+-static int osp_rd_max_create_count(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int osp_max_create_count_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, "%d\n", osp->opd_pre_max_grow_count);
++	return seq_printf(m, "%d\n", osp->opd_pre_max_grow_count);
+ }
+ 
+-static int osp_wr_max_create_count(struct file *file, const char *buffer,
+-				   unsigned long count, void *data)
++static ssize_t
++osp_max_create_count_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct osp_device	*osp = lu2osp_dev(obd->obd_lu_dev);
+ 	int			 val, rc;
+ 
+@@ -281,89 +274,85 @@ static int osp_wr_max_create_count(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_max_create_count);
+ 
+-static int osp_rd_prealloc_next_id(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int osp_prealloc_next_id_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, "%u\n",
+-			fid_oid(&osp->opd_pre_used_fid) + 1);
++	return seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_used_fid) + 1);
+ }
++LPROC_SEQ_FOPS_RO(osp_prealloc_next_id);
+ 
+-static int osp_rd_prealloc_last_id(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int osp_prealloc_last_id_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, "%u\n",
+-			fid_oid(&osp->opd_pre_last_created_fid));
++	return seq_printf(m, "%u\n", fid_oid(&osp->opd_pre_last_created_fid));
+ }
++LPROC_SEQ_FOPS_RO(osp_prealloc_last_id);
+ 
+-static int osp_rd_prealloc_next_seq(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++static int osp_prealloc_next_seq_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, LPX64"\n",
+-			fid_seq(&osp->opd_pre_used_fid));
++	return seq_printf(m, LPX64"\n", fid_seq(&osp->opd_pre_used_fid));
+ }
++LPROC_SEQ_FOPS_RO(osp_prealloc_next_seq);
+ 
+-static int osp_rd_prealloc_last_seq(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++static int osp_prealloc_last_seq_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, LPX64"\n",
++	return seq_printf(m, LPX64"\n",
+ 			fid_seq(&osp->opd_pre_last_created_fid));
+ }
++LPROC_SEQ_FOPS_RO(osp_prealloc_last_seq);
+ 
+-static int osp_rd_prealloc_reserved(char *page, char **start, off_t off,
+-				    int count, int *eof, void *data)
++static int osp_prealloc_reserved_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct osp_device *osp = lu2osp_dev(obd->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+ 		return 0;
+ 
+-	return snprintf(page, count, LPU64"\n", osp->opd_pre_reserved);
++	return seq_printf(m, LPU64"\n", osp->opd_pre_reserved);
+ }
++LPROC_SEQ_FOPS_RO(osp_prealloc_reserved);
+ 
+-static int osp_rd_maxage(char *page, char **start, off_t off,
+-			 int count, int *eof, void *data)
++static int osp_maxage_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%u\n", osp->opd_statfs_maxage);
+-	return rc;
++	return seq_printf(m, "%u\n", osp->opd_statfs_maxage);
+ }
+ 
+-static int osp_wr_maxage(struct file *file, const char *buffer,
+-			 unsigned long count, void *data)
++static ssize_t
++osp_maxage_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = ((struct seq_file *)file->private_data)->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+ 	int			 val, rc;
+ 
+@@ -381,25 +370,23 @@ static int osp_wr_maxage(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(osp_maxage);
+ 
+-static int osp_rd_pre_status(char *page, char **start, off_t off,
+-			     int count, int *eof, void *data)
++static int osp_pre_status_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%d\n", osp->opd_pre_status);
+-	return rc;
++	return seq_printf(m, "%d\n", osp->opd_pre_status);
+ }
++LPROC_SEQ_FOPS_RO(osp_pre_status);
+ 
+-static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
+-				     int count, int *eof, void *data)
++static int osp_destroys_in_flight_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *dev = data;
++	struct obd_device *dev = m->private;
+ 	struct osp_device *osp = lu2osp_dev(dev->obd_lu_dev);
+ 
+ 	if (osp == NULL)
+@@ -411,87 +398,94 @@ static int osp_rd_destroys_in_flight(char *page, char **start, off_t off,
+ 	 * - sync changes are zero - no llog records
+ 	 * - sync in progress are zero - no RPCs in flight
+ 	 */
+-	return snprintf(page, count, "%lu\n",
++	return seq_printf(m, "%lu\n",
+ 			osp->opd_syn_rpc_in_progress + osp->opd_syn_changes);
+ }
++LPROC_SEQ_FOPS_RO(osp_destroys_in_flight);
+ 
+-static int osp_rd_old_sync_processed(char *page, char **start, off_t off,
+-				     int count, int *eof, void *data)
++static int osp_old_sync_processed_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*dev = data;
++	struct obd_device	*dev = m->private;
+ 	struct osp_device	*osp = lu2osp_dev(dev->obd_lu_dev);
+-	int			 rc;
+ 
+ 	if (osp == NULL)
+ 		return -EINVAL;
+ 
+-	rc = snprintf(page, count, "%d\n", osp->opd_syn_prev_done);
+-	return rc;
++	return seq_printf(m, "%d\n", osp->opd_syn_prev_done);
+ }
++LPROC_SEQ_FOPS_RO(osp_old_sync_processed);
+ 
+-static struct lprocfs_vars lprocfs_osp_obd_vars[] = {
+-	{ "uuid",		lprocfs_rd_uuid, 0, 0 },
+-	{ "ping",		0, lprocfs_wr_ping, 0, 0, 0222 },
+-	{ "connect_flags",	lprocfs_rd_connect_flags, 0, 0 },
+-	{ "ost_server_uuid",	lprocfs_rd_server_uuid, 0, 0 },
+-	{ "ost_conn_uuid",	lprocfs_rd_conn_uuid, 0, 0 },
+-	{ "active",		osp_rd_active, osp_wr_active, 0 },
+-	{ "max_rpcs_in_flight",	osp_rd_max_rpcs_in_flight,
+-				osp_wr_max_rpcs_in_flight, 0 },
+-	{ "max_rpcs_in_progress", osp_rd_max_rpcs_in_prog,
+-				  osp_wr_max_rpcs_in_prog, 0 },
+-	{ "create_count",	osp_rd_create_count,
+-				osp_wr_create_count, 0 },
+-	{ "max_create_count",	osp_rd_max_create_count,
+-				osp_wr_max_create_count, 0 },
+-	{ "prealloc_next_id",	osp_rd_prealloc_next_id, 0, 0 },
+-	{ "prealloc_next_seq",  osp_rd_prealloc_next_seq, 0, 0 },
+-	{ "prealloc_last_id",   osp_rd_prealloc_last_id,  0, 0 },
+-	{ "prealloc_last_seq",  osp_rd_prealloc_last_seq, 0, 0 },
+-	{ "prealloc_reserved",	osp_rd_prealloc_reserved, 0, 0 },
+-	{ "timeouts",		lprocfs_rd_timeouts, 0, 0 },
+-	{ "import",		lprocfs_rd_import, lprocfs_wr_import, 0 },
+-	{ "state",		lprocfs_rd_state, 0, 0 },
+-	{ "maxage",		osp_rd_maxage, osp_wr_maxage, 0 },
+-	{ "prealloc_status",	osp_rd_pre_status, 0, 0 },
+-	{ "sync_changes",	osp_rd_syn_changes, 0, 0 },
+-	{ "sync_in_flight",	osp_rd_syn_in_flight, 0, 0 },
+-	{ "sync_in_progress",	osp_rd_syn_in_prog, 0, 0 },
+-	{ "old_sync_processed",	osp_rd_old_sync_processed, 0, 0 },
++LPROC_SEQ_FOPS_WO_TYPE(osp, ping);
++LPROC_SEQ_FOPS_RO_TYPE(osp, uuid);
++LPROC_SEQ_FOPS_RO_TYPE(osp, connect_flags);
++LPROC_SEQ_FOPS_RO_TYPE(osp, server_uuid);
++LPROC_SEQ_FOPS_RO_TYPE(osp, conn_uuid);
+ 
+-	/* for compatibility reasons */
+-	{ "destroys_in_flight",	osp_rd_destroys_in_flight, 0, 0 },
+-	{ 0 }
+-};
++static int osp_max_pages_per_rpc_seq_show(struct seq_file *m, void *v)
++{
++	return lprocfs_obd_max_pages_per_rpc_seq_show(m, m->private);
++}
++LPROC_SEQ_FOPS_RO(osp_max_pages_per_rpc);
++LPROC_SEQ_FOPS_RO_TYPE(osp, timeouts);
++
++LPROC_SEQ_FOPS_RW_TYPE(osp, import);
++LPROC_SEQ_FOPS_RO_TYPE(osp, state);
++
++static struct lprocfs_seq_vars lprocfs_osp_obd_vars[] = {
++	{ "uuid",		&osp_uuid_fops			},
++	{ "ping",		&osp_ping_fops,	0,	0222	},
++	{ "connect_flags",	&osp_connect_flags_fops		},
++	{ "ost_server_uuid",	&osp_server_uuid_fops		},
++	{ "ost_conn_uuid",	&osp_conn_uuid_fops		},
++	{ "active",		&osp_active_fops		},
++	{ "max_rpcs_in_flight",	&osp_max_rpcs_in_flight_fops	},
++	{ "max_rpcs_in_progress", &osp_max_rpcs_in_prog_fops	},
++	{ "create_count",	&osp_create_count_fops		},
++	{ "max_create_count",	&osp_max_create_count_fops	},
++	{ "prealloc_next_id",	&osp_prealloc_next_id_fops	},
++	{ "prealloc_next_seq",  &osp_prealloc_next_seq_fops	},
++	{ "prealloc_last_id",	&osp_prealloc_last_id_fops	},
++	{ "prealloc_last_seq",	&osp_prealloc_last_seq_fops	},
++	{ "prealloc_reserved",	&osp_prealloc_reserved_fops	},
++	{ "timeouts",		&osp_timeouts_fops		},
++	{ "import",		&osp_import_fops		},
++	{ "state",		&osp_state_fops			},
++	{ "maxage",		&osp_maxage_fops		},
++	{ "prealloc_status",	&osp_pre_status_fops		},
++	{ "sync_changes",	&osp_syn_changes_fops		},
++	{ "sync_in_flight",	&osp_syn_in_flight_fops		},
++	{ "sync_in_progress",	&osp_syn_in_prog_fops		},
++	{ "old_sync_processed",	&osp_old_sync_processed_fops	},
+ 
+-static struct lprocfs_vars lprocfs_osp_osd_vars[] = {
+-	{ "blocksize",		lprocfs_dt_rd_blksize, 0, 0 },
+-	{ "kbytestotal",	lprocfs_dt_rd_kbytestotal, 0, 0 },
+-	{ "kbytesfree",		lprocfs_dt_rd_kbytesfree, 0, 0 },
+-	{ "kbytesavail",	lprocfs_dt_rd_kbytesavail, 0, 0 },
+-	{ "filestotal",		lprocfs_dt_rd_filestotal, 0, 0 },
+-	{ "filesfree",		lprocfs_dt_rd_filesfree, 0, 0 },
++	/* for compatibility reasons */
++	{ "destroys_in_flight",	&osp_destroys_in_flight_fops	},
+ 	{ 0 }
+ };
+ 
+-static struct lprocfs_vars lprocfs_osp_module_vars[] = {
+-	{ "num_refs",		lprocfs_rd_numrefs, 0, 0 },
++LPROC_SEQ_FOPS_RO_TYPE(osp, dt_blksize);
++LPROC_SEQ_FOPS_RO_TYPE(osp, dt_kbytestotal);
++LPROC_SEQ_FOPS_RO_TYPE(osp, dt_kbytesfree);
++LPROC_SEQ_FOPS_RO_TYPE(osp, dt_kbytesavail);
++LPROC_SEQ_FOPS_RO_TYPE(osp, dt_filestotal);
++LPROC_SEQ_FOPS_RO_TYPE(osp, dt_filesfree);
++
++static struct lprocfs_seq_vars lprocfs_osp_osd_vars[] = {
++	{ "blocksize",		&osp_dt_blksize_fops		},
++	{ "kbytestotal",	&osp_dt_kbytestotal_fops	},
++	{ "kbytesfree",		&osp_dt_kbytesfree_fops		},
++	{ "kbytesavail",	&osp_dt_kbytesavail_fops	},
++	{ "filestotal",		&osp_dt_filestotal_fops		},
++	{ "filesfree",		&osp_dt_filesfree_fops		},
+ 	{ 0 }
+ };
+ 
+-void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	lvars->module_vars = lprocfs_osp_module_vars;
+-	lvars->obd_vars = lprocfs_osp_obd_vars;
+-}
+-
+ void osp_lprocfs_init(struct osp_device *osp)
+ {
+ 	struct obd_device	*obd = osp->opd_obd;
+ 	struct proc_dir_entry	*osc_proc_dir;
+ 	int			 rc;
+ 
+-	obd->obd_proc_entry = lprocfs_register(obd->obd_name,
++	obd->obd_proc_entry = lprocfs_seq_register(obd->obd_name,
+ 					       obd->obd_type->typ_procroot,
+ 					       lprocfs_osp_osd_vars,
+ 					       &osp->opd_dt_dev);
+@@ -502,7 +496,7 @@ void osp_lprocfs_init(struct osp_device *osp)
+ 		return;
+ 	}
+ 
+-	rc = lprocfs_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd);
++	rc = lprocfs_seq_add_vars(obd->obd_proc_entry, lprocfs_osp_obd_vars, obd);
+ 	if (rc) {
+ 		CERROR("%s: can't register in lprocfs: %ld\n",
+ 		       obd->obd_name, PTR_ERR(obd->obd_proc_entry));
+@@ -511,24 +505,47 @@ void osp_lprocfs_init(struct osp_device *osp)
+ 
+ 	ptlrpc_lprocfs_register_obd(obd);
+ 
++	if (osp->opd_connect_mdt)
++		return;
++
+ 	/* for compatibility we link old procfs's OSC entries to osp ones */
+-	if (!osp->opd_connect_mdt) {
+-		osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
+-		if (osc_proc_dir) {
+-			cfs_proc_dir_entry_t	*symlink = NULL;
+-			char			*name;
+-
+-			OBD_ALLOC(name, strlen(obd->obd_name) + 1);
+-			if (name == NULL)
+-				return;
+-
+-			strcpy(name, obd->obd_name);
+-			if (strstr(name, "osc"))
+-				symlink = lprocfs_add_symlink(name,
+-						osc_proc_dir, "../osp/%s",
+-						obd->obd_name);
++	osc_proc_dir = obd->obd_proc_private;
++	if (osc_proc_dir == NULL) {
++		cfs_proc_dir_entry_t	*symlink = NULL;
++		struct obd_type		*type;
++		char			*name;
++
++		type = class_search_type(LUSTRE_OSC_NAME);
++		if (type == NULL) {
++			osc_proc_dir = lprocfs_seq_register("osc",
++							proc_lustre_root,
++							NULL, NULL);
++			if (IS_ERR(osc_proc_dir))
++				CERROR("osp: can't create compat entry \"osc\": %d\n",
++					(int) PTR_ERR(osc_proc_dir));
++		} else {
++			osc_proc_dir = type->typ_procroot;
++		}
++
++		OBD_ALLOC(name, strlen(obd->obd_name) + 1);
++		if (name == NULL)
++			return;
++
++		strcpy(name, obd->obd_name);
++		if (strstr(name, "osc")) {
++			symlink = lprocfs_add_symlink(name, osc_proc_dir,
++							"../osp/%s",
++							obd->obd_name);
+ 			OBD_FREE(name, strlen(obd->obd_name) + 1);
+-			osp->opd_symlink = symlink;
++			if (symlink == NULL) {
++				CERROR("could not register OSC symlink for "
++					"/proc/fs/lustre/osp/%s.",
++					obd->obd_name);
++				lprocfs_remove(&osc_proc_dir);
++			} else {
++				osp->opd_symlink = symlink;
++				obd->obd_proc_private = osc_proc_dir;
++			}
+ 		}
+ 	}
+ }
+diff --git a/lustre/osp/lwp_dev.c b/lustre/osp/lwp_dev.c
+index fce82a2..755c096 100644
+--- a/lustre/osp/lwp_dev.c
++++ b/lustre/osp/lwp_dev.c
+@@ -210,25 +210,13 @@ const struct lu_device_operations lwp_lu_ops = {
+ 	.ldo_process_config	= lwp_process_config,
+ };
+ 
+-static struct lprocfs_vars lprocfs_lwp_module_vars[] = {
+-	{ "num_refs",		lprocfs_rd_numrefs, 0, 0 },
++static struct lprocfs_seq_vars lprocfs_lwp_obd_vars[] = {
+ 	{ 0 }
+ };
+ 
+-static struct lprocfs_vars lprocfs_lwp_obd_vars[] = {
+-	{ 0 }
+-};
+-
+-void lprocfs_lwp_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	lvars->module_vars = lprocfs_lwp_module_vars;
+-	lvars->obd_vars = lprocfs_lwp_obd_vars;
+-}
+-
+ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
+ 	      struct lu_device_type *ldt, struct lustre_cfg *cfg)
+ {
+-	struct lprocfs_static_vars lvars = { 0 };
+ 	int			   rc;
+ 	ENTRY;
+ 
+@@ -257,8 +245,8 @@ int lwp_init0(const struct lu_env *env, struct lwp_device *lwp,
+ 		RETURN(rc);
+ 	}
+ 
+-	lprocfs_lwp_init_vars(&lvars);
+-	if (lprocfs_obd_setup(lwp->lpd_obd, lvars.obd_vars) == 0)
++	lwp->lpd_obd->obd_vars = lprocfs_lwp_obd_vars;
++	if (lprocfs_seq_obd_setup(lwp->lpd_obd) == 0)
+ 		ptlrpc_lprocfs_register_obd(lwp->lpd_obd);
+ 
+ 	RETURN(0);
+diff --git a/lustre/osp/osp_dev.c b/lustre/osp/osp_dev.c
+index 096de6a..780276d 100644
+--- a/lustre/osp/osp_dev.c
++++ b/lustre/osp/osp_dev.c
+@@ -371,7 +371,7 @@ static int osp_process_config(const struct lu_env *env,
+ 			      struct lu_device *dev, struct lustre_cfg *lcfg)
+ {
+ 	struct osp_device		*d = lu2osp_dev(dev);
+-	struct lprocfs_static_vars	 lvars = { 0 };
++	struct obd_device		*obd = d->opd_obd;
+ 	int				 rc;
+ 
+ 	ENTRY;
+@@ -385,11 +385,9 @@ static int osp_process_config(const struct lu_env *env,
+ 		rc = osp_shutdown(env, d);
+ 		break;
+ 	case LCFG_PARAM:
+-		lprocfs_osp_init_vars(&lvars);
+-
+-		LASSERT(d->opd_obd);
+-		rc = class_process_proc_param(PARAM_OSC, lvars.obd_vars,
+-					      lcfg, d->opd_obd);
++		LASSERT(obd);
++		rc = class_process_proc_seq_param(PARAM_OSC, obd->obd_vars,
++						  lcfg, obd);
+ 		if (rc > 0)
+ 			rc = 0;
+ 		if (rc == -ENOSYS) {
+@@ -837,6 +835,9 @@ static struct lu_device *osp_device_fini(const struct lu_env *env,
+ 			OBD_FREE_PTR(cli->cl_rpc_lock);
+ 			cli->cl_rpc_lock = NULL;
+ 		}
++	} else {
++		if (m->opd_obd->obd_proc_private != NULL)
++			lprocfs_remove((struct proc_dir_entry **)&m->opd_obd->obd_proc_private);
+ 	}
+ 
+ 	rc = client_obd_cleanup(m->opd_obd);
+@@ -1188,33 +1189,25 @@ struct llog_operations osp_mds_ost_orig_logops;
+ 
+ static int __init osp_mod_init(void)
+ {
+-	struct lprocfs_static_vars	 lvars;
+-	cfs_proc_dir_entry_t		*osc_proc_dir;
+-	int				 rc;
++	int rc;
+ 
+ 	rc = lu_kmem_init(osp_caches);
+ 	if (rc)
+ 		return rc;
+ 
+-	lprocfs_osp_init_vars(&lvars);
+-
+ 	rc = class_register_type(&osp_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_OSP_NAME, &osp_device_type);
+-
+-	/* create "osc" entry in procfs for compatibility purposes */
+ 	if (rc != 0) {
+ 		lu_kmem_fini(osp_caches);
+ 		return rc;
+ 	}
+ 
+-	lprocfs_lwp_init_vars(&lvars);
+-
+ 	rc = class_register_type(&lwp_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_LWP_NAME, &lwp_device_type);
+ 	if (rc != 0) {
+@@ -1227,22 +1220,11 @@ static int __init osp_mod_init(void)
+ 	osp_mds_ost_orig_logops = llog_osd_ops;
+ 	osp_mds_ost_orig_logops.lop_add = llog_cat_add_rec;
+ 	osp_mds_ost_orig_logops.lop_declare_add = llog_cat_declare_add_rec;
+-
+-	osc_proc_dir = lprocfs_srch(proc_lustre_root, "osc");
+-	if (osc_proc_dir == NULL) {
+-		osc_proc_dir = lprocfs_register("osc", proc_lustre_root, NULL,
+-						NULL);
+-		if (IS_ERR(osc_proc_dir))
+-			CERROR("osp: can't create compat entry \"osc\": %d\n",
+-			       (int) PTR_ERR(osc_proc_dir));
+-	}
+ 	return rc;
+ }
+ 
+ static void __exit osp_mod_exit(void)
+ {
+-	lprocfs_try_remove_proc_entry("osc", proc_lustre_root);
+-
+ 	class_unregister_type(LUSTRE_LWP_NAME);
+ 	class_unregister_type(LUSTRE_OSP_NAME);
+ 	lu_kmem_fini(osp_caches);
+diff --git a/lustre/osp/osp_internal.h b/lustre/osp/osp_internal.h
+index 92c7b72..fe8b57e 100644
+--- a/lustre/osp/osp_internal.h
++++ b/lustre/osp/osp_internal.h
+@@ -415,7 +415,6 @@ int osp_write_last_oid_seq_files(struct lu_env *env, struct osp_device *osp,
+ 				 struct lu_fid *fid, int sync);
+ 
+ /* lproc_osp.c */
+-void lprocfs_osp_init_vars(struct lprocfs_static_vars *lvars);
+ void osp_lprocfs_init(struct osp_device *osp);
+ 
+ /* osp_sync.c */
+@@ -429,7 +428,6 @@ int osp_sync_fini(struct osp_device *d);
+ void __osp_sync_check_for_work(struct osp_device *d);
+ 
+ /* lwp_dev.c */
+-void lprocfs_lwp_init_vars(struct lprocfs_static_vars *lvars);
+ extern struct obd_ops lwp_obd_device_ops;
+ extern struct lu_device_type lwp_device_type;
+ 
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch b/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
new file mode 100644
index 0000000..d1ebc8c
--- /dev/null
+++ b/sys-cluster/lustre/files/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch
@@ -0,0 +1,1484 @@
+From 6bc2e0318f464ba5b946c97031e63dc354bfc87e Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Mon, 2 Dec 2013 12:36:06 -0500
+Subject: [PATCH 16/18] LU-3319 procfs: move mdt/mds proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the mdt/mds
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Icbafdcd2c2fe3959a51dda3f9c715b0ff8d95742
+---
+ lustre/mdt/mdt_coordinator.c      | 246 +++++++---------
+ lustre/mdt/mdt_handler.c          |  16 +-
+ lustre/mdt/mdt_hsm_cdt_actions.c  |   7 +-
+ lustre/mdt/mdt_hsm_cdt_agent.c    |   5 +-
+ lustre/mdt/mdt_hsm_cdt_requests.c |   5 +-
+ lustre/mdt/mdt_internal.h         |  14 +-
+ lustre/mdt/mdt_lproc.c            | 603 ++++++++++++++++++--------------------
+ lustre/mdt/mdt_mds.c              |  12 +-
+ 8 files changed, 402 insertions(+), 506 deletions(-)
+
+diff --git a/lustre/mdt/mdt_coordinator.c b/lustre/mdt/mdt_coordinator.c
+index 3915e21..eb05bdf 100644
+--- a/lustre/mdt/mdt_coordinator.c
++++ b/lustre/mdt/mdt_coordinator.c
+@@ -46,7 +46,7 @@
+ #include <lustre_log.h>
+ #include "mdt_internal.h"
+ 
+-static struct lprocfs_vars lprocfs_mdt_hsm_vars[];
++static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[];
+ 
+ /**
+  * get obj and HSM attributes on a fid
+@@ -393,7 +393,7 @@ int hsm_cdt_procfs_init(struct mdt_device *mdt)
+ 	ENTRY;
+ 
+ 	/* init /proc entries, failure is not critical */
+-	cdt->cdt_proc_dir = lprocfs_register("hsm",
++	cdt->cdt_proc_dir = lprocfs_seq_register("hsm",
+ 					     mdt2obd_dev(mdt)->obd_proc_entry,
+ 					     lprocfs_mdt_hsm_vars, mdt);
+ 	if (IS_ERR(cdt->cdt_proc_dir)) {
+@@ -425,7 +425,7 @@ void  hsm_cdt_procfs_fini(struct mdt_device *mdt)
+  * \param none
+  * \retval var vector
+  */
+-struct lprocfs_vars *hsm_cdt_get_proc_vars(void)
++struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void)
+ {
+ 	return lprocfs_mdt_hsm_vars;
+ }
+@@ -1769,22 +1769,17 @@ static __u64 hsm_policy_str2bit(const char *name)
+  * \param hexa [IN] print mask before bit names
+  * \param buffer [OUT] string
+  * \param count [IN] size of buffer
+- * \retval size filled in buffer
+  */
+-static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
+-			      int count)
++static void hsm_policy_bit2str(struct seq_file *m, const __u64 mask,
++				const bool hexa)
+ {
+-	int	 i, j, sz;
+-	char	*ptr;
++	int	 i, j;
+ 	__u64	 bit;
+ 	ENTRY;
+ 
+-	ptr = buffer;
+-	if (hexa) {
+-		sz = snprintf(buffer, count, "("LPX64") ", mask);
+-		ptr += sz;
+-		count -= sz;
+-	}
++	if (hexa)
++		seq_printf(m, "("LPX64") ", mask);
++
+ 	for (i = 0; i < CDT_POLICY_SHIFT_COUNT; i++) {
+ 		bit = (1ULL << i);
+ 
+@@ -1793,48 +1788,34 @@ static int hsm_policy_bit2str(const __u64 mask, const bool hexa, char *buffer,
+ 				break;
+ 		}
+ 		if (bit & mask)
+-			sz = snprintf(ptr, count, "[%s] ",
+-				      hsm_policy_names[j].name);
++			seq_printf(m, "[%s] ", hsm_policy_names[j].name);
+ 		else
+-			sz = snprintf(ptr, count, "%s ",
+-				      hsm_policy_names[j].name);
+-
+-		ptr += sz;
+-		count -= sz;
++			seq_printf(m, "%s ", hsm_policy_names[j].name);
+ 	}
+-	/* remove last ' ' */
+-	*ptr = '\0';
+-	ptr--;
+-	RETURN(ptr - buffer);
+ }
+ 
+ /* methods to read/write HSM policy flags */
+-static int lprocfs_rd_hsm_policy(char *page, char **start, off_t off,
+-				 int count, int *eof, void *data)
++static int mdt_hsm_policy_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdt_device	*mdt = data;
++	struct mdt_device	*mdt = m->private;
+ 	struct coordinator	*cdt = &mdt->mdt_coordinator;
+-	int			 sz;
+ 	ENTRY;
+ 
+-	sz = hsm_policy_bit2str(cdt->cdt_policy, false, page, count);
+-	page[sz] = '\n';
+-	sz++;
+-	page[sz] = '\0';
+-	*eof = 1;
+-	RETURN(sz);
++	hsm_policy_bit2str(m, cdt->cdt_policy, false);
++	RETURN(0);
+ }
+ 
+-static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
+-				 unsigned long count, void *data)
++static ssize_t
++mdt_hsm_policy_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct mdt_device	*mdt = data;
++	struct seq_file		*m = file->private_data;
++	struct mdt_device	*mdt = m->private;
+ 	struct coordinator	*cdt = &mdt->mdt_coordinator;
+ 	char			*start, *token, sign;
+ 	char			*buf;
+ 	__u64			 policy;
+ 	__u64			 add_mask, remove_mask, set_mask;
+-	int			 sz;
+ 	int			 rc;
+ 	ENTRY;
+ 
+@@ -1867,18 +1848,10 @@ static int lprocfs_wr_hsm_policy(struct file *file, const char *buffer,
+ 
+ 		policy = hsm_policy_str2bit(token);
+ 		if (policy == 0) {
+-			char *msg;
+-
+-			sz = PAGE_SIZE;
+-			OBD_ALLOC(msg, sz);
+-			if (!msg)
+-				GOTO(out, rc = -ENOMEM);
+-
+-			hsm_policy_bit2str(0, false, msg, sz);
+ 			CWARN("%s: '%s' is unknown, "
+-			      "supported policies are: %s\n", mdt_obd_name(mdt),
+-			      token, msg);
+-			OBD_FREE(msg, sz);
++				"supported policies are: \n", mdt_obd_name(mdt),
++				token);
++			hsm_policy_bit2str(m, 0, false);
+ 			GOTO(out, rc = -EINVAL);
+ 		}
+ 		switch (sign) {
+@@ -1917,25 +1890,24 @@ out:
+ 	OBD_FREE(buf, count + 1);
+ 	RETURN(rc);
+ }
++LPROC_SEQ_FOPS(mdt_hsm_policy);
+ 
+ #define GENERATE_PROC_METHOD(VAR)					\
+-static int lprocfs_rd_hsm_##VAR(char *page, char **start, off_t off,	\
+-				int count, int *eof, void *data)	\
++static int mdt_hsm_##VAR##_seq_show(struct seq_file *m, void *data)	\
+ {									\
+-	struct mdt_device	*mdt = data;				\
++	struct mdt_device	*mdt = m->private;			\
+ 	struct coordinator	*cdt = &mdt->mdt_coordinator;		\
+-	int			 sz;					\
+ 	ENTRY;								\
+ 									\
+-	sz = snprintf(page, count, LPU64"\n", (__u64)cdt->VAR);		\
+-	*eof = 1;							\
+-	RETURN(sz);							\
++	seq_printf(m, LPU64"\n", (__u64)cdt->VAR);			\
++	RETURN(0);							\
+ }									\
+-static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
+-				unsigned long count, void *data)	\
++static ssize_t								\
++mdt_hsm_##VAR##_seq_write(struct file *file, const char *buffer,	\
++			  size_t count, loff_t *off)			\
+ 									\
+ {									\
+-	struct mdt_device	*mdt = data;				\
++	struct mdt_device	*mdt = ((struct seq_file *)file->private_data)->private;\
+ 	struct coordinator	*cdt = &mdt->mdt_coordinator;		\
+ 	int			 val;					\
+ 	int			 rc;					\
+@@ -1949,7 +1921,7 @@ static int lprocfs_wr_hsm_##VAR(struct file *file, const char *buffer,	\
+ 		RETURN(count);						\
+ 	}								\
+ 	RETURN(-EINVAL);						\
+-}
++}									\
+ 
+ GENERATE_PROC_METHOD(cdt_loop_period)
+ GENERATE_PROC_METHOD(cdt_grace_delay)
+@@ -1967,10 +1939,11 @@ GENERATE_PROC_METHOD(cdt_default_archive_id)
+ #define CDT_PURGE_CMD    "purge"
+ #define CDT_HELP_CMD     "help"
+ 
+-int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++ssize_t
++mdt_hsm_cdt_control_seq_write(struct file *file, const char *buffer,
++			      size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct coordinator	*cdt = &(mdt->mdt_coordinator);
+ 	int			 rc, usage = 0;
+@@ -2024,83 +1997,71 @@ int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+ 	RETURN(count);
+ }
+ 
+-int lprocfs_rd_hsm_cdt_control(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data)
++int mdt_hsm_cdt_control_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device	*obd = m->private;
+ 	struct coordinator	*cdt;
+-	int			 sz;
+ 	ENTRY;
+ 
+ 	cdt = &(mdt_dev(obd->obd_lu_dev)->mdt_coordinator);
+-	*eof = 1;
+ 
+ 	if (cdt->cdt_state == CDT_INIT)
+-		sz = snprintf(page, count, "init\n");
++		seq_printf(m, "init\n");
+ 	else if (cdt->cdt_state == CDT_RUNNING)
+-		sz = snprintf(page, count, "enabled\n");
++		seq_printf(m, "enabled\n");
+ 	else if (cdt->cdt_state == CDT_STOPPING)
+-		sz = snprintf(page, count, "stopping\n");
++		seq_printf(m, "stopping\n");
+ 	else if (cdt->cdt_state == CDT_STOPPED)
+-		sz = snprintf(page, count, "stopped\n");
++		seq_printf(m, "stopped\n");
+ 	else if (cdt->cdt_state == CDT_DISABLE)
+-		sz = snprintf(page, count, "disabled\n");
++		seq_printf(m, "disabled\n");
+ 	else
+-		sz = snprintf(page, count, "unknown\n");
++		seq_printf(m, "unknown\n");
+ 
+-	RETURN(sz);
++	RETURN(0);
+ }
+ 
+ static int
+-lprocfs_rd_hsm_request_mask(char *page, char **start, off_t off,
+-			    int count, int *eof, __u64 mask)
++mdt_hsm_request_mask_show(struct seq_file *m, __u64 mask)
+ {
+ 	int i, rc = 0;
+ 	ENTRY;
+ 
+ 	for (i = 0; i < 8 * sizeof(mask); i++) {
+ 		if (mask & (1UL << i))
+-			rc += snprintf(page + rc, count - rc, "%s%s",
+-				       rc == 0 ? "" : " ",
+-				       hsm_copytool_action2name(i));
++			rc += seq_printf(m, "%s%s", rc == 0 ? "" : " ",
++					hsm_copytool_action2name(i));
+ 	}
+-
+-	rc += snprintf(page + rc, count - rc, "\n");
++	rc += seq_printf(m, "\n");
+ 
+ 	RETURN(rc);
+ }
+ 
+ static int
+-lprocfs_rd_hsm_user_request_mask(char *page, char **start, off_t off,
+-				 int count, int *eof, void *data)
++mdt_hsm_user_request_mask_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdt_device *mdt = data;
++	struct mdt_device *mdt = m->private;
+ 	struct coordinator *cdt = &mdt->mdt_coordinator;
+ 
+-	return lprocfs_rd_hsm_request_mask(page, start, off, count, eof,
+-					   cdt->cdt_user_request_mask);
++	return mdt_hsm_request_mask_show(m, cdt->cdt_user_request_mask);
+ }
+ 
+ static int
+-lprocfs_rd_hsm_group_request_mask(char *page, char **start, off_t off,
+-				  int count, int *eof, void *data)
++mdt_hsm_group_request_mask_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdt_device *mdt = data;
++	struct mdt_device *mdt = m->private;
+ 	struct coordinator *cdt = &mdt->mdt_coordinator;
+ 
+-	return lprocfs_rd_hsm_request_mask(page, start, off, count, eof,
+-					   cdt->cdt_group_request_mask);
++	return mdt_hsm_request_mask_show(m, cdt->cdt_group_request_mask);
+ }
+ 
+ static int
+-lprocfs_rd_hsm_other_request_mask(char *page, char **start, off_t off,
+-				  int count, int *eof, void *data)
++mdt_hsm_other_request_mask_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdt_device *mdt = data;
++	struct mdt_device *mdt = m->private;
+ 	struct coordinator *cdt = &mdt->mdt_coordinator;
+ 
+-	return lprocfs_rd_hsm_request_mask(page, start, off, count, eof,
+-					   cdt->cdt_other_request_mask);
++	return mdt_hsm_request_mask_show(m, cdt->cdt_other_request_mask);
+ }
+ 
+ static inline enum hsm_copytool_action
+@@ -2120,9 +2081,9 @@ hsm_copytool_name2action(const char *name)
+ 		return -1;
+ }
+ 
+-static int
+-lprocfs_wr_hsm_request_mask(struct file *file, const char __user *user_buf,
+-			    unsigned long user_count, __u64 *mask)
++static ssize_t
++mdt_write_hsm_request_mask(struct file *file, const char __user *user_buf,
++			    size_t user_count, __u64 *mask)
+ {
+ 	char *buf, *pos, *name;
+ 	size_t buf_size;
+@@ -2166,69 +2127,60 @@ out:
+ 	RETURN(rc);
+ }
+ 
+-static int
+-lprocfs_wr_hsm_user_request_mask(struct file *file, const char __user *buf,
+-				 unsigned long count, void *data)
++static ssize_t
++mdt_hsm_user_request_mask_seq_write(struct file *file, const char __user *buf,
++					size_t count, loff_t *off)
+ {
+-	struct mdt_device *mdt = data;
++	struct mdt_device *mdt = ((struct seq_file *)file->private_data)->private;
+ 	struct coordinator *cdt = &mdt->mdt_coordinator;
+ 
+-	return lprocfs_wr_hsm_request_mask(file, buf, count,
++	return mdt_write_hsm_request_mask(file, buf, count,
+ 					   &cdt->cdt_user_request_mask);
+ }
+ 
+-static int
+-lprocfs_wr_hsm_group_request_mask(struct file *file, const char __user *buf,
+-				  unsigned long count, void *data)
++static ssize_t
++mdt_hsm_group_request_mask_seq_write(struct file *file, const char __user *buf,
++					size_t count, loff_t *off)
+ {
+-	struct mdt_device *mdt = data;
++	struct mdt_device *mdt = ((struct seq_file *)file->private_data)->private;
+ 	struct coordinator *cdt = &mdt->mdt_coordinator;
+ 
+-	return lprocfs_wr_hsm_request_mask(file, buf, count,
++	return mdt_write_hsm_request_mask(file, buf, count,
+ 					   &cdt->cdt_group_request_mask);
+ }
+ 
+-static int
+-lprocfs_wr_hsm_other_request_mask(struct file *file, const char __user *buf,
+-				  unsigned long count, void *data)
++static ssize_t
++mdt_hsm_other_request_mask_seq_write(struct file *file, const char __user *buf,
++					size_t count, loff_t *off)
+ {
+-	struct mdt_device *mdt = data;
++	struct mdt_device *mdt = ((struct seq_file *)file->private_data)->private;
+ 	struct coordinator *cdt = &mdt->mdt_coordinator;
+ 
+-	return lprocfs_wr_hsm_request_mask(file, buf, count,
++	return mdt_write_hsm_request_mask(file, buf, count,
+ 					   &cdt->cdt_other_request_mask);
+ }
+ 
+-static struct lprocfs_vars lprocfs_mdt_hsm_vars[] = {
+-	{ "agents",			NULL, NULL, NULL, &mdt_hsm_agent_fops,
+-					0 },
+-	{ "actions",			NULL, NULL, NULL, &mdt_hsm_actions_fops,
+-					0444 },
+-	{ "default_archive_id",		lprocfs_rd_hsm_cdt_default_archive_id,
+-					lprocfs_wr_hsm_cdt_default_archive_id,
+-					NULL, NULL, 0 },
+-	{ "grace_delay",		lprocfs_rd_hsm_cdt_grace_delay,
+-					lprocfs_wr_hsm_cdt_grace_delay,
+-					NULL, NULL, 0 },
+-	{ "loop_period",		lprocfs_rd_hsm_cdt_loop_period,
+-					lprocfs_wr_hsm_cdt_loop_period,
+-					NULL, NULL, 0 },
+-	{ "max_requests",		lprocfs_rd_hsm_cdt_max_requests,
+-					lprocfs_wr_hsm_cdt_max_requests,
+-					NULL, NULL, 0 },
+-	{ "policy",			lprocfs_rd_hsm_policy,
+-					lprocfs_wr_hsm_policy,
+-					NULL, NULL, 0 },
+-	{ "active_request_timeout",	lprocfs_rd_hsm_cdt_active_req_timeout,
+-					lprocfs_wr_hsm_cdt_active_req_timeout,
+-					NULL, NULL, 0 },
+-	{ "active_requests",		NULL, NULL, NULL,
+-					&mdt_hsm_active_requests_fops, 0 },
+-	{ "user_request_mask",		lprocfs_rd_hsm_user_request_mask,
+-					lprocfs_wr_hsm_user_request_mask, },
+-	{ "group_request_mask", 	lprocfs_rd_hsm_group_request_mask,
+-					lprocfs_wr_hsm_group_request_mask, },
+-	{ "other_request_mask",		lprocfs_rd_hsm_other_request_mask,
+-					lprocfs_wr_hsm_other_request_mask, },
++LPROC_SEQ_FOPS(mdt_hsm_cdt_loop_period);
++LPROC_SEQ_FOPS(mdt_hsm_cdt_grace_delay);
++LPROC_SEQ_FOPS(mdt_hsm_cdt_active_req_timeout);
++LPROC_SEQ_FOPS(mdt_hsm_cdt_max_requests);
++LPROC_SEQ_FOPS(mdt_hsm_cdt_default_archive_id);
++LPROC_SEQ_FOPS(mdt_hsm_user_request_mask);
++LPROC_SEQ_FOPS(mdt_hsm_group_request_mask);
++LPROC_SEQ_FOPS(mdt_hsm_other_request_mask);
++
++static struct lprocfs_seq_vars lprocfs_mdt_hsm_vars[] = {
++	{ "agents",		&mdt_hsm_agent_fops			},
++	{ "actions",		&mdt_hsm_actions_fops, NULL,	0444	},
++	{ "default_archive_id",	&mdt_hsm_cdt_default_archive_id_fops	},
++	{ "grace_delay",	&mdt_hsm_cdt_grace_delay_fops		},
++	{ "loop_period",	&mdt_hsm_cdt_loop_period_fops		},
++	{ "max_requests",	&mdt_hsm_cdt_max_requests_fops		},
++	{ "policy",		&mdt_hsm_policy_fops			},
++	{ "active_request_timeout",&mdt_hsm_cdt_active_req_timeout_fops	},
++	{ "active_requests",	&mdt_hsm_active_requests_fops		},
++	{ "user_request_mask",	&mdt_hsm_user_request_mask_fops,	},
++	{ "group_request_mask",	&mdt_hsm_group_request_mask_fops,	},
++	{ "other_request_mask",	&mdt_hsm_other_request_mask_fops,	},
+ 	{ 0 }
+ };
+diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
+index 8daf7e1..9f7d4ba 100644
+--- a/lustre/mdt/mdt_handler.c
++++ b/lustre/mdt/mdt_handler.c
+@@ -4508,7 +4508,6 @@ static int mdt_process_config(const struct lu_env *env,
+ 
+ 	switch (cfg->lcfg_command) {
+ 	case LCFG_PARAM: {
+-		struct lprocfs_static_vars  lvars;
+ 		struct obd_device	   *obd = d->ld_obd;
+ 
+ 		/* For interoperability */
+@@ -4543,14 +4542,13 @@ static int mdt_process_config(const struct lu_env *env,
+ 			}
+ 		}
+ 
+-		lprocfs_mdt_init_vars(&lvars);
+-		rc = class_process_proc_param(PARAM_MDT, lvars.obd_vars,
+-					      cfg, obd);
++		rc = class_process_proc_seq_param(PARAM_MDT, obd->obd_vars,
++							cfg, obd);
+ 		if (rc > 0 || rc == -ENOSYS) {
+ 			/* is it an HSM var ? */
+-			rc = class_process_proc_param(PARAM_HSM,
+-						      hsm_cdt_get_proc_vars(),
+-						      cfg, obd);
++			rc = class_process_proc_seq_param(PARAM_HSM,
++							hsm_cdt_get_proc_vars(),
++							cfg, obd);
+ 			if (rc > 0 || rc == -ENOSYS)
+ 				/* we don't understand; pass it on */
+ 				rc = next->ld_ops->ldo_process_config(env, next,
+@@ -5725,7 +5723,6 @@ static struct lu_device_type mdt_device_type = {
+ 
+ static int __init mdt_mod_init(void)
+ {
+-	struct lprocfs_static_vars lvars;
+ 	int rc;
+ 
+ 	CLASSERT(sizeof("0x0123456789ABCDEF:0x01234567:0x01234567") ==
+@@ -5740,10 +5737,9 @@ static int __init mdt_mod_init(void)
+ 	if (rc)
+ 		GOTO(lu_fini, rc);
+ 
+-	lprocfs_mdt_init_vars(&lvars);
+ 	rc = class_register_type(&mdt_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_MDT_NAME, &mdt_device_type);
+ 	if (rc)
+diff --git a/lustre/mdt/mdt_hsm_cdt_actions.c b/lustre/mdt/mdt_hsm_cdt_actions.c
+index da7f5a9..c4c5bbf 100644
+--- a/lustre/mdt/mdt_hsm_cdt_actions.c
++++ b/lustre/mdt/mdt_hsm_cdt_actions.c
+@@ -513,9 +513,6 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
+ 	struct mdt_device		*mdt;
+ 	ENTRY;
+ 
+-	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
+-		RETURN(-ENOENT);
+-
+ 	rc = seq_open(file, &mdt_hsm_actions_proc_ops);
+ 	if (rc)
+ 		RETURN(rc);
+@@ -532,8 +529,8 @@ static int lprocfs_open_hsm_actions(struct inode *inode, struct file *file)
+ 	/* mdt is saved in proc_dir_entry->data by
+ 	 * mdt_coordinator_procfs_init() calling lprocfs_register()
+ 	 */
+-	mdt = (struct mdt_device *)PDE(inode)->data;
+-	aai->aai_mdt = mdt;
++	mdt = (struct mdt_device *)PDE_DATA(inode);
++	aai->aai_obd = mdt2obd_dev(mdt);
+ 	s = file->private_data;
+ 	s->private = aai;
+ 
+diff --git a/lustre/mdt/mdt_hsm_cdt_agent.c b/lustre/mdt/mdt_hsm_cdt_agent.c
+index 9a9ce6d..158cced 100644
+--- a/lustre/mdt/mdt_hsm_cdt_agent.c
++++ b/lustre/mdt/mdt_hsm_cdt_agent.c
+@@ -621,15 +621,12 @@ static int lprocfs_open_hsm_agent(struct inode *inode, struct file *file)
+ 	int		 rc;
+ 	ENTRY;
+ 
+-	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
+-		RETURN(-ENOENT);
+-
+ 	rc = seq_open(file, &mdt_hsm_agent_proc_ops);
+ 	if (rc)
+ 		RETURN(rc);
+ 
+ 	s = file->private_data;
+-	s->private = PDE(inode)->data;
++	s->private = PDE_DATA(inode);
+ 
+ 	RETURN(rc);
+ }
+diff --git a/lustre/mdt/mdt_hsm_cdt_requests.c b/lustre/mdt/mdt_hsm_cdt_requests.c
+index 796cbea..7bbc771 100644
+--- a/lustre/mdt/mdt_hsm_cdt_requests.c
++++ b/lustre/mdt/mdt_hsm_cdt_requests.c
+@@ -569,15 +569,12 @@ static int lprocfs_open_hsm_active_requests(struct inode *inode,
+ 	int		 rc;
+ 	ENTRY;
+ 
+-	if (LPROCFS_ENTRY_CHECK(PDE(inode)))
+-		RETURN(-ENOENT);
+-
+ 	rc = seq_open(file, &mdt_hsm_active_requests_proc_ops);
+ 	if (rc) {
+ 		RETURN(rc);
+ 	}
+ 	s = file->private_data;
+-	s->private = PDE(inode)->data;
++	s->private = PDE_DATA(inode);
+ 
+ 	RETURN(rc);
+ }
+diff --git a/lustre/mdt/mdt_internal.h b/lustre/mdt/mdt_internal.h
+index dd36201..43cf9eb 100644
+--- a/lustre/mdt/mdt_internal.h
++++ b/lustre/mdt/mdt_internal.h
+@@ -778,9 +778,6 @@ void mdt_thread_info_init(struct ptlrpc_request *req,
+ void mdt_thread_info_fini(struct mdt_thread_info *mti);
+ struct mdt_thread_info *tsi2mdt_info(struct tgt_session_info *tsi);
+ 
+-extern struct lprocfs_vars lprocfs_mds_module_vars[];
+-extern struct lprocfs_vars lprocfs_mds_obd_vars[];
+-
+ int mdt_hsm_attr_set(struct mdt_thread_info *info, struct mdt_object *obj,
+ 		     const struct md_hsm *mh);
+ 
+@@ -913,13 +910,12 @@ int mdt_hsm_cdt_fini(struct mdt_device *mdt);
+ int mdt_hsm_cdt_wakeup(struct mdt_device *mdt);
+ 
+ /* coordinator control /proc interface */
+-int lprocfs_wr_hsm_cdt_control(struct file *file, const char *buffer,
+-			       unsigned long count, void *data);
+-int lprocfs_rd_hsm_cdt_control(char *page, char **start, off_t off,
+-			       int count, int *eof, void *data);
++ssize_t mdt_hsm_cdt_control_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off);
++int mdt_hsm_cdt_control_seq_show(struct seq_file *m, void *data);
+ int hsm_cdt_procfs_init(struct mdt_device *mdt);
+ void hsm_cdt_procfs_fini(struct mdt_device *mdt);
+-struct lprocfs_vars *hsm_cdt_get_proc_vars(void);
++struct lprocfs_seq_vars *hsm_cdt_get_proc_vars(void);
+ /* md_hsm helpers */
+ struct mdt_object *mdt_hsm_get_md_hsm(struct mdt_thread_info *mti,
+ 				      const struct lu_fid *fid,
+@@ -1087,8 +1083,6 @@ enum {
+ };
+ void mdt_counter_incr(struct ptlrpc_request *req, int opcode);
+ void mdt_stats_counter_init(struct lprocfs_stats *stats);
+-void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars);
+-void lprocfs_mds_init_vars(struct lprocfs_static_vars *lvars);
+ int mdt_procfs_init(struct mdt_device *mdt, const char *name);
+ void mdt_procfs_fini(struct mdt_device *mdt);
+ void mdt_rename_counter_tally(struct mdt_thread_info *info,
+diff --git a/lustre/mdt/mdt_lproc.c b/lustre/mdt/mdt_lproc.c
+index 4abb532..236b6c2 100644
+--- a/lustre/mdt/mdt_lproc.c
++++ b/lustre/mdt/mdt_lproc.c
+@@ -156,7 +156,6 @@ static ssize_t mdt_rename_stats_seq_write(struct file *file, const char *buf,
+ 
+         return len;
+ }
+-
+ LPROC_SEQ_FOPS(mdt_rename_stats);
+ 
+ static int lproc_mdt_attach_rename_seqstat(struct mdt_device *mdt)
+@@ -213,143 +212,73 @@ void mdt_rename_counter_tally(struct mdt_thread_info *info,
+                               (unsigned int)ma->ma_attr.la_size);
+ }
+ 
+-int mdt_procfs_init(struct mdt_device *mdt, const char *name)
+-{
+-	struct obd_device		*obd = mdt2obd_dev(mdt);
+-	struct lprocfs_static_vars	 lvars;
+-	int				 rc;
+-	ENTRY;
+-
+-	LASSERT(name != NULL);
+-
+-	lprocfs_mdt_init_vars(&lvars);
+-	rc = lprocfs_obd_setup(obd, lvars.obd_vars);
+-	if (rc) {
+-		CERROR("%s: cannot create proc entries: rc = %d\n",
+-		       mdt_obd_name(mdt), rc);
+-		return rc;
+-	}
+-
+-	rc = hsm_cdt_procfs_init(mdt);
+-	if (rc) {
+-		CERROR("%s: cannot create hsm proc entries: rc = %d\n",
+-		       mdt_obd_name(mdt), rc);
+-		return rc;
+-	}
+-
+-	obd->obd_proc_exports_entry = proc_mkdir("exports",
+-						 obd->obd_proc_entry);
+-	if (obd->obd_proc_exports_entry)
+-		lprocfs_add_simple(obd->obd_proc_exports_entry,
+-				   "clear", lprocfs_nid_stats_clear_read,
+-				   lprocfs_nid_stats_clear_write, obd, NULL);
+-	rc = lprocfs_alloc_md_stats(obd, LPROC_MDT_LAST);
+-	if (rc)
+-		return rc;
+-	mdt_stats_counter_init(obd->obd_md_stats);
+-
+-	rc = lprocfs_job_stats_init(obd, LPROC_MDT_LAST,
+-				    mdt_stats_counter_init);
+-
+-	rc = lproc_mdt_attach_rename_seqstat(mdt);
+-	if (rc)
+-		CERROR("%s: MDT can not create rename stats rc = %d\n",
+-		       mdt_obd_name(mdt), rc);
+-
+-	RETURN(rc);
+-}
+-
+-void mdt_procfs_fini(struct mdt_device *mdt)
+-{
+-	struct obd_device *obd = mdt2obd_dev(mdt);
+-
+-	if (obd->obd_proc_exports_entry != NULL) {
+-		lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
+-		obd->obd_proc_exports_entry = NULL;
+-	}
+-
+-	lprocfs_free_per_client_stats(obd);
+-	hsm_cdt_procfs_fini(mdt);
+-	lprocfs_obd_cleanup(obd);
+-	lprocfs_free_md_stats(obd);
+-	lprocfs_free_obd_stats(obd);
+-	lprocfs_job_stats_fini(obd);
+-}
+-
+-static int lprocfs_rd_identity_expire(char *page, char **start, off_t off,
+-                                      int count, int *eof, void *data)
++static int mdt_identity_expire_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        *eof = 1;
+-        return snprintf(page, count, "%u\n",
+-                        mdt->mdt_identity_cache->uc_entry_expire);
++	return seq_printf(m, "%u\n", mdt->mdt_identity_cache->uc_entry_expire);
+ }
+ 
+-static int lprocfs_wr_identity_expire(struct file *file, const char *buffer,
+-                                      unsigned long count, void *data)
++static ssize_t
++mdt_identity_expire_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int rc, val;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int rc, val;
+ 
+-        rc = lprocfs_write_helper(buffer, count, &val);
+-        if (rc)
+-                return rc;
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
+ 
+-        mdt->mdt_identity_cache->uc_entry_expire = val;
+-        return count;
++	mdt->mdt_identity_cache->uc_entry_expire = val;
++	return count;
+ }
++LPROC_SEQ_FOPS(mdt_identity_expire);
+ 
+-static int lprocfs_rd_identity_acquire_expire(char *page, char **start,
+-                                              off_t off, int count, int *eof,
+-                                              void *data)
++static int mdt_identity_acquire_expire_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        *eof = 1;
+-        return snprintf(page, count, "%u\n",
+-                        mdt->mdt_identity_cache->uc_acquire_expire);
++	return seq_printf(m,"%u\n", mdt->mdt_identity_cache->uc_acquire_expire);
+ }
+ 
+-static int lprocfs_wr_identity_acquire_expire(struct file *file,
+-                                              const char *buffer,
+-                                              unsigned long count,
+-                                              void *data)
++static ssize_t
++mdt_identity_acquire_expire_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int rc, val;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int rc, val;
+ 
+-        rc = lprocfs_write_helper(buffer, count, &val);
+-        if (rc)
+-                return rc;
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
+ 
+-        mdt->mdt_identity_cache->uc_acquire_expire = val;
+-        return count;
++	mdt->mdt_identity_cache->uc_acquire_expire = val;
++	return count;
+ }
++LPROC_SEQ_FOPS(mdt_identity_acquire_expire);
+ 
+-static int lprocfs_rd_identity_upcall(char *page, char **start, off_t off,
+-                                      int count, int *eof, void *data)
++static int mdt_identity_upcall_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        struct upcall_cache *hash = mdt->mdt_identity_cache;
+-        int len;
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct upcall_cache *hash = mdt->mdt_identity_cache;
+ 
+-	*eof = 1;
+ 	read_lock(&hash->uc_upcall_rwlock);
+-	len = snprintf(page, count, "%s\n", hash->uc_upcall);
++	seq_printf(m, "%s\n", hash->uc_upcall);
+ 	read_unlock(&hash->uc_upcall_rwlock);
+-	return len;
++	return 0;
+ }
+ 
+-static int lprocfs_wr_identity_upcall(struct file *file, const char *buffer,
+-				      unsigned long count, void *data)
++static ssize_t
++mdt_identity_upcall_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device	*obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device	*mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct upcall_cache	*hash = mdt->mdt_identity_cache;
+ 	int			 rc;
+@@ -388,11 +317,13 @@ static int lprocfs_wr_identity_upcall(struct file *file, const char *buffer,
+ 		OBD_FREE(kernbuf, count + 1);
+ 	RETURN(rc);
+ }
++LPROC_SEQ_FOPS(mdt_identity_upcall);
+ 
+-static int lprocfs_wr_identity_flush(struct file *file, const char *buffer,
+-                                     unsigned long count, void *data)
++static ssize_t
++lprocfs_identity_flush_seq_write(struct file *file, const char *buffer,
++				 size_t count, void *data)
+ {
+-        struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+         struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+         int rc, uid;
+ 
+@@ -403,11 +334,13 @@ static int lprocfs_wr_identity_flush(struct file *file, const char *buffer,
+         mdt_flush_identity(mdt->mdt_identity_cache, uid);
+         return count;
+ }
++LPROC_SEQ_FOPS_WO_TYPE(mdt, identity_flush);
+ 
+-static int lprocfs_wr_identity_info(struct file *file, const char *buffer,
+-				    unsigned long count, void *data)
++static ssize_t
++lprocfs_identity_info_seq_write(struct file *file, const char *buffer,
++				size_t count, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	struct identity_downcall_data *param;
+ 	int size = sizeof(*param), rc, checked = 0;
+@@ -468,23 +401,24 @@ out:
+ 
+ 	return rc ? rc : count;
+ }
++LPROC_SEQ_FOPS_WO_TYPE(mdt, identity_info);
+ 
+ /* for debug only */
+-static int lprocfs_rd_capa(char *page, char **start, off_t off,
+-                           int count, int *eof, void *data)
++static int mdt_capa_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count, "capability on: %s %s\n",
++	return seq_printf(m, "capability on: %s %s\n",
+ 			mdt->mdt_lut.lut_oss_capa ? "oss" : "",
+ 			mdt->mdt_lut.lut_mds_capa ? "mds" : "");
+ }
+ 
+-static int lprocfs_wr_capa(struct file *file, const char *buffer,
+-			   unsigned long count, void *data)
++static ssize_t
++mdt_capa_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	int val, rc;
+ 
+@@ -521,64 +455,65 @@ static int lprocfs_wr_capa(struct file *file, const char *buffer,
+ 		      mdt->mdt_lut.lut_oss_capa ? "enabled" : "disabled");
+ 	return count;
+ }
++LPROC_SEQ_FOPS(mdt_capa);
+ 
+-static int lprocfs_rd_capa_count(char *page, char **start, off_t off,
+-                                 int count, int *eof, void *data)
++static int mdt_capa_count_seq_show(struct seq_file *m, void *data)
+ {
+-        return snprintf(page, count, "%d %d\n",
+-                        capa_count[CAPA_SITE_CLIENT],
+-                        capa_count[CAPA_SITE_SERVER]);
++	return seq_printf(m, "%d %d\n", capa_count[CAPA_SITE_CLIENT],
++			  capa_count[CAPA_SITE_SERVER]);
+ }
++LPROC_SEQ_FOPS_RO(mdt_capa_count);
+ 
+-static int lprocfs_rd_site_stats(char *page, char **start, off_t off,
+-                                 int count, int *eof, void *data)
++static int mdt_site_stats_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        return lu_site_stats_print(mdt_lu_site(mdt), page, count);
++	return lu_site_stats_seq_print(mdt_lu_site(mdt), m);
+ }
++LPROC_SEQ_FOPS_RO(mdt_site_stats);
+ 
+-static int lprocfs_rd_capa_timeout(char *page, char **start, off_t off,
+-                                   int count, int *eof, void *data)
++static int mdt_capa_timeout_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        return snprintf(page, count, "%lu\n", mdt->mdt_capa_timeout);
++	return seq_printf(m, "%lu\n", mdt->mdt_capa_timeout);
+ }
+ 
+-static int lprocfs_wr_capa_timeout(struct file *file, const char *buffer,
+-                                   unsigned long count, void *data)
++static ssize_t
++mdt_capa_timeout_seq_write(struct file *file, const char *buffer,
++			   size_t count, loff_t *off)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int val, rc;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int val, rc;
+ 
+-        rc = lprocfs_write_helper(buffer, count, &val);
+-        if (rc)
+-                return rc;
++	rc = lprocfs_write_helper(buffer, count, &val);
++	if (rc)
++		return rc;
+ 
+-        mdt->mdt_capa_timeout = (unsigned long)val;
+-        mdt->mdt_capa_conf = 1;
+-        return count;
++	mdt->mdt_capa_timeout = (unsigned long)val;
++	mdt->mdt_capa_conf = 1;
++	return count;
+ }
++LPROC_SEQ_FOPS(mdt_capa_timeout);
+ 
+-static int lprocfs_rd_ck_timeout(char *page, char **start, off_t off, int count,
+-                                 int *eof, void *data)
++static int mdt_ck_timeout_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        return snprintf(page, count, "%lu\n", mdt->mdt_ck_timeout);
++	return seq_printf(m, "%lu\n", mdt->mdt_ck_timeout);
+ }
+ 
+-static int lprocfs_wr_ck_timeout(struct file *file, const char *buffer,
+-                                 unsigned long count, void *data)
++static ssize_t
++mdt_ck_timeout_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int val, rc;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int val, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+         if (rc)
+@@ -588,11 +523,13 @@ static int lprocfs_wr_ck_timeout(struct file *file, const char *buffer,
+         mdt->mdt_capa_conf = 1;
+         return count;
+ }
++LPROC_SEQ_FOPS(mdt_ck_timeout);
+ 
+ #define BUFLEN (UUID_MAX + 4)
+ 
+-static int lprocfs_mdt_wr_evict_client(struct file *file, const char *buffer,
+-                                       unsigned long count, void *data)
++static ssize_t
++lprocfs_mds_evict_client_seq_write(struct file *file, const char *buffer,
++				   size_t count, loff_t *off)
+ {
+         char *kbuf;
+         char *tmpbuf;
+@@ -614,7 +551,7 @@ static int lprocfs_mdt_wr_evict_client(struct file *file, const char *buffer,
+         tmpbuf = cfs_firststr(kbuf, min_t(unsigned long, BUFLEN - 1, count));
+ 
+         if (strncmp(tmpbuf, "nid:", 4) != 0) {
+-                count = lprocfs_wr_evict_client(file, buffer, count, data);
++		count = lprocfs_evict_client_seq_write(file, buffer, count, off);
+                 goto out;
+         }
+ 
+@@ -627,21 +564,21 @@ out:
+ 
+ #undef BUFLEN
+ 
+-static int lprocfs_rd_sec_level(char *page, char **start, off_t off,
+-                                int count, int *eof, void *data)
++static int mdt_sec_level_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count, "%d\n", mdt->mdt_lut.lut_sec_level);
++	return seq_printf(m, "%d\n", mdt->mdt_lut.lut_sec_level);
+ }
+ 
+-static int lprocfs_wr_sec_level(struct file *file, const char *buffer,
+-                                unsigned long count, void *data)
++static ssize_t
++mdt_sec_level_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int val, rc;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int val, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+         if (rc)
+@@ -659,22 +596,23 @@ static int lprocfs_wr_sec_level(struct file *file, const char *buffer,
+ 	mdt->mdt_lut.lut_sec_level = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(mdt_sec_level);
+ 
+-static int lprocfs_rd_cos(char *page, char **start, off_t off,
+-                              int count, int *eof, void *data)
++static int mdt_cos_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        return snprintf(page, count, "%u\n", mdt_cos_is_enabled(mdt));
++	return seq_printf(m, "%u\n", mdt_cos_is_enabled(mdt));
+ }
+ 
+-static int lprocfs_wr_cos(struct file *file, const char *buffer,
+-                                  unsigned long count, void *data)
++static ssize_t
++mdt_cos_seq_write(struct file *file, const char *buffer,
++		  size_t count, loff_t *off)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        int val, rc;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	int val, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+         if (rc)
+@@ -682,15 +620,15 @@ static int lprocfs_wr_cos(struct file *file, const char *buffer,
+         mdt_enable_cos(mdt, val);
+         return count;
+ }
++LPROC_SEQ_FOPS(mdt_cos);
+ 
+-static int lprocfs_rd_root_squash(char *page, char **start, off_t off,
+-                                  int count, int *eof, void *data)
++static int mdt_root_squash_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        return snprintf(page, count, "%u:%u\n", mdt->mdt_squash_uid,
+-                        mdt->mdt_squash_gid);
++	return seq_printf(m, "%u:%u\n", mdt->mdt_squash_uid,
++			  mdt->mdt_squash_gid);
+ }
+ 
+ static int safe_strtoul(const char *str, char **endp, unsigned long *res)
+@@ -708,10 +646,11 @@ static int safe_strtoul(const char *str, char **endp, unsigned long *res)
+         return 0;
+ }
+ 
+-static int lprocfs_wr_root_squash(struct file *file, const char *buffer,
+-				  unsigned long count, void *data)
++static ssize_t
++mdt_root_squash_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	int rc;
+ 	char kernbuf[50], *tmp, *end, *errmsg;
+@@ -765,22 +704,23 @@ failed:
+ 	      mdt_obd_name(mdt), buffer, errmsg, rc);
+ 	RETURN(rc);
+ }
++LPROC_SEQ_FOPS(mdt_root_squash);
+ 
+-static int lprocfs_rd_nosquash_nids(char *page, char **start, off_t off,
+-                                    int count, int *eof, void *data)
++static int mdt_nosquash_nids_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        if (mdt->mdt_nosquash_str)
+-                return snprintf(page, count, "%s\n", mdt->mdt_nosquash_str);
+-        return snprintf(page, count, "NONE\n");
++	if (mdt->mdt_nosquash_str)
++		return seq_printf(m, "%s\n", mdt->mdt_nosquash_str);
++	return seq_printf(m, "NONE\n");
+ }
+ 
+-static int lprocfs_wr_nosquash_nids(struct file *file, const char *buffer,
+-				    unsigned long count, void *data)
++static ssize_t
++mdt_nosquash_nids_seq_write(struct file *file, const char *buffer,
++			    size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	int rc;
+ 	char *kernbuf, *errmsg;
+@@ -842,25 +782,26 @@ failed:
+ 		OBD_FREE(kernbuf, count + 1);
+ 	RETURN(rc);
+ }
++LPROC_SEQ_FOPS(mdt_nosquash_nids);
+ 
+-static int lprocfs_rd_mdt_som(char *page, char **start, off_t off,
+-                              int count, int *eof, void *data)
++static int mdt_som_seq_show(struct seq_file *m, void *data)
+ {
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_device *obd = m->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-        return snprintf(page, count, "%sabled\n",
+-                        mdt->mdt_som_conf ? "en" : "dis");
++	return seq_printf(m, "%sabled\n",
++			  mdt->mdt_som_conf ? "en" : "dis");
+ }
+ 
+-static int lprocfs_wr_mdt_som(struct file *file, const char *buffer,
+-                              unsigned long count, void *data)
++static ssize_t
++mdt_som_seq_write(struct file *file, const char *buffer,
++		  size_t count, loff_t *off)
+ {
+-        struct obd_export *exp;
+-        struct obd_device *obd = data;
+-        struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+-        char kernbuf[16];
+-        unsigned long val = 0;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
++	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
++	struct obd_export *exp;
++	char kernbuf[16];
++	unsigned long val = 0;
+ 
+         if (count > (sizeof(kernbuf) - 1))
+                 return -EINVAL;
+@@ -902,20 +843,21 @@ static int lprocfs_wr_mdt_som(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(mdt_som);
+ 
+-static int lprocfs_rd_enable_remote_dir(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++static int mdt_enable_remote_dir_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count, "%u\n", mdt->mdt_enable_remote_dir);
++	return seq_printf(m, "%u\n", mdt->mdt_enable_remote_dir);
+ }
+ 
+-static int lprocfs_wr_enable_remote_dir(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++mdt_enable_remote_dir_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	__u32 val;
+ 	int rc;
+@@ -930,22 +872,22 @@ static int lprocfs_wr_enable_remote_dir(struct file *file, const char *buffer,
+ 	mdt->mdt_enable_remote_dir = val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(mdt_enable_remote_dir);
+ 
+-static int lprocfs_rd_enable_remote_dir_gid(char *page, char **start, off_t off,
+-					    int count, int *eof, void *data)
++static int mdt_enable_remote_dir_gid_seq_show(struct seq_file *m, void *data)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = m->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 
+-	return snprintf(page, count, "%d\n",
+-			(int)mdt->mdt_enable_remote_dir_gid);
++	return seq_printf(m, "%d\n",
++			  (int)mdt->mdt_enable_remote_dir_gid);
+ }
+ 
+-static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
+-					    const char *buffer,
+-					    unsigned long count, void *data)
++static ssize_t
++mdt_enable_remote_dir_gid_seq_write(struct file *file, const char *buffer,
++				    size_t count, loff_t *off)
+ {
+-	struct obd_device *obd = data;
++	struct obd_device *obd = ((struct seq_file *)file->private_data)->private;
+ 	struct mdt_device *mdt = mdt_dev(obd->obd_lu_dev);
+ 	__u32 val;
+ 	int rc;
+@@ -957,97 +899,46 @@ static int lprocfs_wr_enable_remote_dir_gid(struct file *file,
+ 	mdt->mdt_enable_remote_dir_gid = val;
+ 	return count;
+ }
+-
+-static struct lprocfs_vars lprocfs_mdt_obd_vars[] = {
+-	{ "uuid",			lprocfs_rd_uuid, NULL,
+-					NULL, NULL, 0 },
+-	{ "recovery_status",		lprocfs_obd_rd_recovery_status, NULL,
+-					NULL, NULL, 0 },
+-	{ "num_exports",		lprocfs_rd_num_exports,	NULL,
+-					NULL, NULL, 0 },
+-	{ "identity_expire",		lprocfs_rd_identity_expire,
+-					lprocfs_wr_identity_expire,
+-					NULL, NULL, 0 },
+-	{ "identity_acquire_expire",    lprocfs_rd_identity_acquire_expire,
+-					lprocfs_wr_identity_acquire_expire,
+-					NULL, NULL, 0 },
+-	{ "identity_upcall",		lprocfs_rd_identity_upcall,
+-					lprocfs_wr_identity_upcall,
+-					NULL, NULL, 0 },
+-	{ "identity_flush",		NULL, lprocfs_wr_identity_flush,
+-					NULL, NULL, 0 },
+-	{ "identity_info",		NULL, lprocfs_wr_identity_info,
+-					NULL, NULL, 0 },
+-	{ "capa",			lprocfs_rd_capa,
+-					lprocfs_wr_capa,
+-					NULL, NULL, 0 },
+-	{ "capa_timeout",		lprocfs_rd_capa_timeout,
+-					lprocfs_wr_capa_timeout,
+-					NULL, NULL, 0 },
+-	{ "capa_key_timeout",		lprocfs_rd_ck_timeout,
+-					lprocfs_wr_ck_timeout,
+-					NULL, NULL, 0 },
+-	{ "capa_count",			lprocfs_rd_capa_count, NULL,
+-					NULL, NULL, 0 },
+-	{ "site_stats",			lprocfs_rd_site_stats, NULL,
+-					NULL, NULL, 0 },
+-	{ "evict_client",		NULL, lprocfs_mdt_wr_evict_client,
+-					NULL, NULL, 0 },
+-	{ "hash_stats",			lprocfs_obd_rd_hash, NULL,
+-					NULL, NULL, 0 },
+-	{ "sec_level",			lprocfs_rd_sec_level,
+-					lprocfs_wr_sec_level,
+-					NULL, NULL, 0 },
+-	{ "commit_on_sharing",		lprocfs_rd_cos, lprocfs_wr_cos,
+-					NULL, NULL, 0 },
+-	{ "root_squash",		lprocfs_rd_root_squash,
+-					lprocfs_wr_root_squash,
+-					NULL, NULL, 0 },
+-	{ "nosquash_nids",		lprocfs_rd_nosquash_nids,
+-					lprocfs_wr_nosquash_nids,
+-					NULL, NULL, 0 },
+-	{ "som",			lprocfs_rd_mdt_som,
+-					lprocfs_wr_mdt_som,
+-					NULL, NULL, 0 },
+-	{ "instance",			lprocfs_target_rd_instance, NULL,
+-					NULL, NULL, 0},
+-	{ "ir_factor",			lprocfs_obd_rd_ir_factor,
+-					lprocfs_obd_wr_ir_factor,
+-					NULL, NULL, 0 },
+-	{ "job_cleanup_interval",       lprocfs_rd_job_interval,
+-					lprocfs_wr_job_interval,
+-					NULL, NULL, 0 },
+-	{ "enable_remote_dir",		lprocfs_rd_enable_remote_dir,
+-					lprocfs_wr_enable_remote_dir,
+-					NULL, NULL, 0},
+-	{ "enable_remote_dir_gid",	lprocfs_rd_enable_remote_dir_gid,
+-					lprocfs_wr_enable_remote_dir_gid,
+-					NULL, NULL, 0},
+-	{ "hsm_control",		lprocfs_rd_hsm_cdt_control,
+-					lprocfs_wr_hsm_cdt_control,
+-					NULL, NULL, 0 },
+-	{ 0 }
+-};
+-
+-static struct lprocfs_vars lprocfs_mdt_module_vars[] = {
+-	{ "num_refs",			lprocfs_rd_numrefs, NULL,
+-					NULL, NULL, 0 },
+-        { 0 }
+-};
+-
+-void lprocfs_mdt_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-	lvars->module_vars  = lprocfs_mdt_module_vars;
+-	lvars->obd_vars     = lprocfs_mdt_obd_vars;
+-}
+-
+-struct lprocfs_vars lprocfs_mds_obd_vars[] = {
+-	{ "uuid",	lprocfs_rd_uuid, NULL, NULL, NULL, 0 },
+-	{ 0 }
+-};
+-
+-struct lprocfs_vars lprocfs_mds_module_vars[] = {
+-	{ "num_refs",	lprocfs_rd_numrefs, NULL, NULL, NULL, 0 },
++LPROC_SEQ_FOPS(mdt_enable_remote_dir_gid);
++
++LPROC_SEQ_FOPS_RO_TYPE(mdt, uuid);
++LPROC_SEQ_FOPS_RO_TYPE(mdt, recovery_status);
++LPROC_SEQ_FOPS_RO_TYPE(mdt, num_exports);
++LPROC_SEQ_FOPS_RO_TYPE(mdt, target_instance);
++LPROC_SEQ_FOPS_RO_TYPE(mdt, hash);
++LPROC_SEQ_FOPS_WO_TYPE(mdt, mds_evict_client);
++LPROC_SEQ_FOPS_RW_TYPE(mdt, job_interval);
++LPROC_SEQ_FOPS_RW_TYPE(mdt, ir_factor);
++LPROC_SEQ_FOPS_RW_TYPE(mdt, nid_stats_clear);
++LPROC_SEQ_FOPS(mdt_hsm_cdt_control);
++
++static struct lprocfs_seq_vars lprocfs_mdt_obd_vars[] = {
++	{ "uuid",			&mdt_uuid_fops			},
++	{ "recovery_status",		&mdt_recovery_status_fops	},
++	{ "num_exports",		&mdt_num_exports_fops		},
++	{ "identity_expire",		&mdt_identity_expire_fops	},
++	{ "identity_acquire_expire",	&mdt_identity_acquire_expire_fops },
++	{ "identity_upcall",		&mdt_identity_upcall_fops	},
++	{ "identity_flush",		&mdt_identity_flush_fops	},
++	{ "identity_info",		&mdt_identity_info_fops		},
++	{ "capa",			&mdt_capa_fops			},
++	{ "capa_timeout",		&mdt_capa_timeout_fops		},
++	{ "capa_key_timeout",		&mdt_ck_timeout_fops		},
++	{ "capa_count",			&mdt_capa_count_fops		},
++	{ "site_stats",			&mdt_site_stats_fops		},
++	{ "evict_client",		&mdt_mds_evict_client_fops	},
++	{ "hash_stats",			&mdt_hash_fops			},
++	{ "sec_level",			&mdt_sec_level_fops		},
++	{ "commit_on_sharing",		&mdt_cos_fops			},
++	{ "root_squash",		&mdt_root_squash_fops		},
++	{ "nosquash_nids",		&mdt_nosquash_nids_fops		},
++	{ "som",			&mdt_som_fops			},
++	{ "instance",			&mdt_target_instance_fops	},
++	{ "ir_factor",			&mdt_ir_factor_fops		},
++	{ "job_cleanup_interval",	&mdt_job_interval_fops		},
++	{ "enable_remote_dir",		&mdt_enable_remote_dir_fops	},
++	{ "enable_remote_dir_gid",	&mdt_enable_remote_dir_gid_fops	},
++	{ "hsm_control",		&mdt_hsm_cdt_control_fops	},
+ 	{ 0 }
+ };
+ 
+@@ -1087,3 +978,67 @@ void mdt_stats_counter_init(struct lprocfs_stats *stats)
+         lprocfs_counter_init(stats, LPROC_MDT_CROSSDIR_RENAME, 0,
+                              "crossdir_rename", "reqs");
+ }
++
++int mdt_procfs_init(struct mdt_device *mdt, const char *name)
++{
++	struct obd_device		*obd = mdt2obd_dev(mdt);
++	int				 rc;
++	ENTRY;
++
++	LASSERT(name != NULL);
++
++	obd->obd_vars = lprocfs_mdt_obd_vars;
++	rc = lprocfs_seq_obd_setup(obd);
++	if (rc) {
++		CERROR("%s: cannot create proc entries: rc = %d\n",
++			mdt_obd_name(mdt), rc);
++		return rc;
++	}
++
++	rc = hsm_cdt_procfs_init(mdt);
++	if (rc) {
++		CERROR("%s: cannot create hsm proc entries: rc = %d\n",
++			mdt_obd_name(mdt), rc);
++		return rc;
++	}
++
++	obd->obd_proc_exports_entry = proc_mkdir("exports",
++						 obd->obd_proc_entry);
++	if (obd->obd_proc_exports_entry)
++		lprocfs_add_simple(obd->obd_proc_exports_entry, "clear",
++#ifndef HAVE_ONLY_PROCFS_SEQ
++				   NULL, NULL,
++#endif
++				   obd, &mdt_nid_stats_clear_fops);
++	rc = lprocfs_alloc_md_stats(obd, LPROC_MDT_LAST);
++	if (rc)
++		return rc;
++	mdt_stats_counter_init(obd->obd_md_stats);
++
++	rc = lprocfs_job_stats_init(obd, LPROC_MDT_LAST,
++				    mdt_stats_counter_init);
++
++	rc = lproc_mdt_attach_rename_seqstat(mdt);
++	if (rc)
++		CERROR("%s: MDT can not create rename stats rc = %d\n",
++		       mdt_obd_name(mdt), rc);
++
++	RETURN(rc);
++}
++
++void mdt_procfs_fini(struct mdt_device *mdt)
++{
++	struct obd_device *obd = mdt2obd_dev(mdt);
++
++	if (obd->obd_proc_exports_entry != NULL) {
++		lprocfs_remove_proc_entry("clear", obd->obd_proc_exports_entry);
++		obd->obd_proc_exports_entry = NULL;
++	}
++
++	lprocfs_free_per_client_stats(obd);
++	hsm_cdt_procfs_fini(mdt);
++	lprocfs_obd_cleanup(obd);
++	lprocfs_free_md_stats(obd);
++	lprocfs_free_obd_stats(obd);
++	lprocfs_job_stats_fini(obd);
++}
+diff --git a/lustre/mdt/mdt_mds.c b/lustre/mdt/mdt_mds.c
+index 367f659..4fa66c3 100644
+--- a/lustre/mdt/mdt_mds.c
++++ b/lustre/mdt/mdt_mds.c
+@@ -464,6 +464,13 @@ static struct lu_device *mds_device_free(const struct lu_env *env,
+ 	RETURN(NULL);
+ }
+ 
++LPROC_SEQ_FOPS_RO_TYPE(mds, uuid);
++
++static struct lprocfs_seq_vars lprocfs_mds_obd_vars[] = {
++	{ "uuid",	&mds_uuid_fops  },
++	{ 0 }
++};
++
+ static struct lu_device *mds_device_alloc(const struct lu_env *env,
+ 					  struct lu_device_type *t,
+ 					  struct lustre_cfg *cfg)
+@@ -487,7 +494,8 @@ static struct lu_device *mds_device_alloc(const struct lu_env *env,
+ 	/* set this lu_device to obd, because error handling need it */
+ 	obd->obd_lu_dev = l;
+ 
+-	rc = lprocfs_obd_setup(obd, lprocfs_mds_obd_vars);
++	obd->obd_vars = lprocfs_mds_obd_vars;
++	rc = lprocfs_seq_obd_setup(obd);
+ 	if (rc != 0) {
+ 		mds_device_free(env, l);
+ 		l = ERR_PTR(rc);
+@@ -541,7 +549,7 @@ int mds_mod_init(void)
+ 
+ 	return class_register_type(&mds_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					lprocfs_mds_module_vars,
++					NULL,
+ #endif
+ 					LUSTRE_MDS_NAME, &mds_device_type);
+ }
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
new file mode 100644
index 0000000..0d10047
--- /dev/null
+++ b/sys-cluster/lustre/files/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch
@@ -0,0 +1,788 @@
+From df4a9172881e4eac4f7ef511079c2f306d515bf7 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Mon, 2 Dec 2013 12:40:35 -0500
+Subject: [PATCH 17/18] LU-3319 procfs: move mdd proc handling to seq_files
+
+With 3.10 linux kernel and above proc handling now only
+uses struct seq_files. This patch migrates the mdd
+layer proc entries over to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I61b7df6bfd5efd0f12e3ca1a1813b7b62d493168
+---
+ lustre/include/lustre_lfsck.h  |   4 +-
+ lustre/lfsck/lfsck_internal.h  |   9 +-
+ lustre/lfsck/lfsck_lib.c       |  68 ++++-------
+ lustre/lfsck/lfsck_namespace.c |  61 +++-------
+ lustre/mdd/mdd_device.c        |  25 ++--
+ lustre/mdd/mdd_internal.h      |   1 -
+ lustre/mdd/mdd_lproc.c         | 259 +++++++++++++++++------------------------
+ 7 files changed, 162 insertions(+), 265 deletions(-)
+
+diff --git a/lustre/include/lustre_lfsck.h b/lustre/include/lustre_lfsck.h
+index f75d507..e491933 100644
+--- a/lustre/include/lustre_lfsck.h
++++ b/lustre/include/lustre_lfsck.h
+@@ -52,9 +52,9 @@ int lfsck_start(const struct lu_env *env, struct dt_device *key,
+ int lfsck_stop(const struct lu_env *env, struct dt_device *key,
+ 	       bool pause);
+ 
+-int lfsck_get_speed(struct dt_device *key, void *buf, int len);
++int lfsck_get_speed(struct seq_file *m, struct dt_device *key);
+ int lfsck_set_speed(struct dt_device *key, int val);
+ 
+-int lfsck_dump(struct dt_device *key, void *buf, int len, __u16 type);
++int lfsck_dump(struct seq_file *m, struct dt_device *key, __u16 type);
+ 
+ #endif /* _LUSTRE_LFSCK_H */
+diff --git a/lustre/lfsck/lfsck_internal.h b/lustre/lfsck/lfsck_internal.h
+index 56cdff0..50eb341 100644
+--- a/lustre/lfsck/lfsck_internal.h
++++ b/lustre/lfsck/lfsck_internal.h
+@@ -229,8 +229,7 @@ struct lfsck_operations {
+ 
+ 	int (*lfsck_dump)(const struct lu_env *env,
+ 			  struct lfsck_component *com,
+-			  char *buf,
+-			  int len);
++			  struct seq_file *m);
+ 
+ 	int (*lfsck_double_scan)(const struct lu_env *env,
+ 				 struct lfsck_component *com);
+@@ -361,10 +360,10 @@ struct lfsck_thread_info {
+ /* lfsck_lib.c */
+ void lfsck_component_cleanup(const struct lu_env *env,
+ 			     struct lfsck_component *com);
+-int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
++int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
+ 		    const char *prefix);
+-int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix);
+-int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
++int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix);
++int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
+ 		   const char *prefix);
+ void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
+ 		    struct lfsck_position *pos, bool init);
+diff --git a/lustre/lfsck/lfsck_lib.c b/lustre/lfsck/lfsck_lib.c
+index 0da2614..da68358 100644
+--- a/lustre/lfsck/lfsck_lib.c
++++ b/lustre/lfsck/lfsck_lib.c
+@@ -258,75 +258,49 @@ static inline int lfsck_instance_add(struct lfsck_instance *lfsck)
+ 	return 0;
+ }
+ 
+-int lfsck_bits_dump(char **buf, int *len, int bits, const char *names[],
++int lfsck_bits_dump(struct seq_file *m, int bits, const char *names[],
+ 		    const char *prefix)
+ {
+-	int save = *len;
+ 	int flag;
+-	int rc;
+ 	int i;
+ 
+-	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+-	if (rc <= 0)
+-		return -ENOSPC;
++	seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ 
+-	*buf += rc;
+-	*len -= rc;
+ 	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
+ 		if (flag & bits) {
+ 			bits &= ~flag;
+-			rc = snprintf(*buf, *len, "%s%c", names[i],
++			seq_printf(m, "%s%c", names[i],
+ 				      bits != 0 ? ',' : '\n');
+-			if (rc <= 0)
+-				return -ENOSPC;
+-
+-			*buf += rc;
+-			*len -= rc;
+ 		}
+ 	}
+-	return save - *len;
++	return 0;
+ }
+ 
+-int lfsck_time_dump(char **buf, int *len, __u64 time, const char *prefix)
++int lfsck_time_dump(struct seq_file *m, __u64 time, const char *prefix)
+ {
+-	int rc;
+-
+ 	if (time != 0)
+-		rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
+-			      cfs_time_current_sec() - time);
++		seq_printf(m, "%s: "LPU64" seconds\n", prefix,
++			   cfs_time_current_sec() - time);
+ 	else
+-		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
+-	if (rc <= 0)
+-		return -ENOSPC;
+-
+-	*buf += rc;
+-	*len -= rc;
+-	return rc;
++		seq_printf(m, "%s: N/A\n", prefix);
++	return 0;
+ }
+ 
+-int lfsck_pos_dump(char **buf, int *len, struct lfsck_position *pos,
++int lfsck_pos_dump(struct seq_file *m, struct lfsck_position *pos,
+ 		   const char *prefix)
+ {
+-	int rc;
+-
+ 	if (fid_is_zero(&pos->lp_dir_parent)) {
+ 		if (pos->lp_oit_cookie == 0)
+-			rc = snprintf(*buf, *len, "%s: N/A, N/A, N/A\n",
+-				      prefix);
++			seq_printf(m, "%s: N/A, N/A, N/A\n", prefix);
+ 		else
+-			rc = snprintf(*buf, *len, "%s: "LPU64", N/A, N/A\n",
+-				      prefix, pos->lp_oit_cookie);
++			seq_printf(m, "%s: "LPU64", N/A, N/A\n",
++				   prefix, pos->lp_oit_cookie);
+ 	} else {
+-		rc = snprintf(*buf, *len, "%s: "LPU64", "DFID", "LPU64"\n",
+-			      prefix, pos->lp_oit_cookie,
+-			      PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
++		seq_printf(m, "%s: "LPU64", "DFID", "LPU64"\n",
++			   prefix, pos->lp_oit_cookie,
++			   PFID(&pos->lp_dir_parent), pos->lp_dir_cookie);
+ 	}
+-	if (rc <= 0)
+-		return -ENOSPC;
+-
+-	*buf += rc;
+-	*len -= rc;
+-	return rc;
++	return 0;
+ }
+ 
+ void lfsck_pos_fill(const struct lu_env *env, struct lfsck_instance *lfsck,
+@@ -765,7 +739,7 @@ int lfsck_double_scan(const struct lu_env *env, struct lfsck_instance *lfsck)
+ 
+ /* external interfaces */
+ 
+-int lfsck_get_speed(struct dt_device *key, void *buf, int len)
++int lfsck_get_speed(struct seq_file *m, struct dt_device *key)
+ {
+ 	struct lu_env		env;
+ 	struct lfsck_instance  *lfsck;
+@@ -780,7 +754,7 @@ int lfsck_get_speed(struct dt_device *key, void *buf, int len)
+ 	if (rc != 0)
+ 		GOTO(out, rc);
+ 
+-	rc = snprintf(buf, len, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
++	seq_printf(m, "%u\n", lfsck->li_bookmark_ram.lb_speed_limit);
+ 	lu_env_fini(&env);
+ 
+ 	GOTO(out, rc);
+@@ -820,7 +794,7 @@ out:
+ }
+ EXPORT_SYMBOL(lfsck_set_speed);
+ 
+-int lfsck_dump(struct dt_device *key, void *buf, int len, __u16 type)
++int lfsck_dump(struct seq_file *m, struct dt_device *key, __u16 type)
+ {
+ 	struct lu_env		env;
+ 	struct lfsck_instance  *lfsck;
+@@ -840,7 +814,7 @@ int lfsck_dump(struct dt_device *key, void *buf, int len, __u16 type)
+ 	if (rc != 0)
+ 		GOTO(out, rc);
+ 
+-	rc = com->lc_ops->lfsck_dump(&env, com, buf, len);
++	rc = com->lc_ops->lfsck_dump(&env, com, m);
+ 	lu_env_fini(&env);
+ 
+ 	GOTO(out, rc);
+diff --git a/lustre/lfsck/lfsck_namespace.c b/lustre/lfsck/lfsck_namespace.c
+index 3cc043d..225351f 100644
+--- a/lustre/lfsck/lfsck_namespace.c
++++ b/lustre/lfsck/lfsck_namespace.c
+@@ -1092,66 +1092,57 @@ static int lfsck_namespace_post(const struct lu_env *env,
+ 
+ static int
+ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+-		     char *buf, int len)
++		     struct seq_file *m)
+ {
+ 	struct lfsck_instance	*lfsck = com->lc_lfsck;
+ 	struct lfsck_bookmark	*bk    = &lfsck->li_bookmark_ram;
+ 	struct lfsck_namespace	*ns    =
+ 				(struct lfsck_namespace *)com->lc_file_ram;
+-	int			 save  = len;
+-	int			 ret   = -ENOSPC;
+ 	int			 rc;
+ 
+ 	down_read(&com->lc_sem);
+-	rc = snprintf(buf, len,
+-		      "name: lfsck_namespace\n"
++	seq_printf(m, "name: lfsck_namespace\n"
+ 		      "magic: 0x%x\n"
+ 		      "version: %d\n"
+ 		      "status: %s\n",
+ 		      ns->ln_magic,
+ 		      bk->lb_version,
+ 		      lfsck_status_names[ns->ln_status]);
+-	if (rc <= 0)
+-		goto out;
+ 
+-	buf += rc;
+-	len -= rc;
+-	rc = lfsck_bits_dump(&buf, &len, ns->ln_flags, lfsck_flags_names,
+-			     "flags");
++	rc = lfsck_bits_dump(m, ns->ln_flags, lfsck_flags_names, "flags");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_bits_dump(&buf, &len, bk->lb_param, lfsck_param_names,
+-			     "param");
++	rc = lfsck_bits_dump(m, bk->lb_param, lfsck_param_names, "param");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_complete,
++	rc = lfsck_time_dump(m, ns->ln_time_last_complete,
+ 			     "time_since_last_completed");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, ns->ln_time_latest_start,
++	rc = lfsck_time_dump(m, ns->ln_time_latest_start,
+ 			     "time_since_latest_start");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_time_dump(&buf, &len, ns->ln_time_last_checkpoint,
++	rc = lfsck_time_dump(m, ns->ln_time_last_checkpoint,
+ 			     "time_since_last_checkpoint");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_latest_start,
++	rc = lfsck_pos_dump(m, &ns->ln_pos_latest_start,
+ 			    "latest_start_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_last_checkpoint,
++	rc = lfsck_pos_dump(m, &ns->ln_pos_last_checkpoint,
+ 			    "last_checkpoint_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = lfsck_pos_dump(&buf, &len, &ns->ln_pos_first_inconsistent,
++	rc = lfsck_pos_dump(m, &ns->ln_pos_first_inconsistent,
+ 			    "first_failure_position");
+ 	if (rc < 0)
+ 		goto out;
+@@ -1171,8 +1162,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			do_div(new_checked, duration);
+ 		if (rtime != 0)
+ 			do_div(speed, rtime);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "updated_phase1: "LPU64"\n"
+ 			      "updated_phase2: "LPU64"\n"
+@@ -1204,11 +1194,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			      ns->ln_run_time_phase2,
+ 			      speed,
+ 			      new_checked);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 
+ 		LASSERT(lfsck->li_di_oit != NULL);
+ 
+@@ -1237,9 +1222,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			pos.lp_dir_cookie = 0;
+ 		}
+ 		spin_unlock(&lfsck->li_lock);
+-		rc = lfsck_pos_dump(&buf, &len, &pos, "current_position");
+-		if (rc <= 0)
+-			goto out;
++		lfsck_pos_dump(m, &pos, "current_position");
+ 	} else if (ns->ln_status == LS_SCANNING_PHASE2) {
+ 		cfs_duration_t duration = cfs_time_current() -
+ 					  lfsck->li_time_last_checkpoint;
+@@ -1257,8 +1240,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			do_div(speed1, ns->ln_run_time_phase1);
+ 		if (rtime != 0)
+ 			do_div(speed2, rtime);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "updated_phase1: "LPU64"\n"
+ 			      "updated_phase2: "LPU64"\n"
+@@ -1293,11 +1275,6 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			      speed2,
+ 			      new_checked,
+ 			      PFID(&ns->ln_fid_latest_scanned_phase2));
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 	} else {
+ 		__u64 speed1 = ns->ln_items_checked;
+ 		__u64 speed2 = ns->ln_objs_checked_phase2;
+@@ -1306,8 +1283,7 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			do_div(speed1, ns->ln_run_time_phase1);
+ 		if (ns->ln_run_time_phase2 != 0)
+ 			do_div(speed2, ns->ln_run_time_phase2);
+-		rc = snprintf(buf, len,
+-			      "checked_phase1: "LPU64"\n"
++		seq_printf(m, "checked_phase1: "LPU64"\n"
+ 			      "checked_phase2: "LPU64"\n"
+ 			      "updated_phase1: "LPU64"\n"
+ 			      "updated_phase2: "LPU64"\n"
+@@ -1340,17 +1316,10 @@ lfsck_namespace_dump(const struct lu_env *env, struct lfsck_component *com,
+ 			      ns->ln_run_time_phase2,
+ 			      speed1,
+ 			      speed2);
+-		if (rc <= 0)
+-			goto out;
+-
+-		buf += rc;
+-		len -= rc;
+ 	}
+-	ret = save - len;
+-
+ out:
+ 	up_read(&com->lc_sem);
+-	return ret;
++	return 0;
+ }
+ 
+ static int lfsck_namespace_double_scan(const struct lu_env *env,
+diff --git a/lustre/mdd/mdd_device.c b/lustre/mdd/mdd_device.c
+index 750281a..ee82f71 100644
+--- a/lustre/mdd/mdd_device.c
++++ b/lustre/mdd/mdd_device.c
+@@ -812,16 +812,16 @@ static int mdd_process_config(const struct lu_env *env,
+         ENTRY;
+ 
+         switch (cfg->lcfg_command) {
+-        case LCFG_PARAM: {
+-                struct lprocfs_static_vars lvars;
+-
+-                lprocfs_mdd_init_vars(&lvars);
+-                rc = class_process_proc_param(PARAM_MDD, lvars.obd_vars, cfg,m);
+-                if (rc > 0 || rc == -ENOSYS)
+-                        /* we don't understand; pass it on */
+-                        rc = next->ld_ops->ldo_process_config(env, next, cfg);
+-                break;
+-        }
++	case LCFG_PARAM: {
++		struct obd_device *obd = mdd2obd_dev(m);
++
++		rc = class_process_proc_seq_param(PARAM_MDD, obd->obd_vars,
++						  cfg, m);
++		if (rc > 0 || rc == -ENOSYS)
++			/* we don't understand; pass it on */
++			rc = next->ld_ops->ldo_process_config(env, next, cfg);
++		break;
++	}
+         case LCFG_SETUP:
+                 rc = next->ld_ops->ldo_process_config(env, next, cfg);
+                 if (rc)
+@@ -1492,11 +1492,8 @@ LU_CONTEXT_KEY_DEFINE(mdd, LCT_MD_THREAD);
+ 
+ static int __init mdd_mod_init(void)
+ {
+-	struct lprocfs_static_vars lvars;
+ 	int rc;
+ 
+-	lprocfs_mdd_init_vars(&lvars);
+-
+ 	rc = lu_kmem_init(mdd_caches);
+ 	if (rc)
+ 		return rc;
+@@ -1512,7 +1509,7 @@ static int __init mdd_mod_init(void)
+ 
+ 	rc = class_register_type(&mdd_obd_device_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_MDD_NAME, &mdd_device_type);
+ 	if (rc)
+diff --git a/lustre/mdd/mdd_internal.h b/lustre/mdd/mdd_internal.h
+index daa1dcb..5332b2c 100644
+--- a/lustre/mdd/mdd_internal.h
++++ b/lustre/mdd/mdd_internal.h
+@@ -340,7 +340,6 @@ int orph_declare_index_delete(const struct lu_env *, struct mdd_object *,
+                               struct thandle *);
+ 
+ /* mdd_lproc.c */
+-void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars);
+ int mdd_procfs_init(struct mdd_device *mdd, const char *name);
+ int mdd_procfs_fini(struct mdd_device *mdd);
+ 
+diff --git a/lustre/mdd/mdd_lproc.c b/lustre/mdd/mdd_lproc.c
+index bd23302..6ddacf7 100644
+--- a/lustre/mdd/mdd_lproc.c
++++ b/lustre/mdd/mdd_lproc.c
+@@ -49,56 +49,13 @@
+ #include <libcfs/libcfs_string.h>
+ #include "mdd_internal.h"
+ 
+-int mdd_procfs_init(struct mdd_device *mdd, const char *name)
++static ssize_t
++mdd_atime_diff_seq_write(struct file *file, const char *buffer,
++			 size_t count, loff_t *off)
+ {
+-        struct lprocfs_static_vars lvars;
+-        struct obd_type     *type;
+-        int                  rc;
+-        ENTRY;
+-
+-	/* at the moment there is no linkage between lu_type
+-	 * and obd_type, so we lookup obd_type this way */
+-	type = class_search_type(LUSTRE_MDD_NAME);
+-
+-        LASSERT(name != NULL);
+-        LASSERT(type != NULL);
+-
+-        /* Find the type procroot and add the proc entry for this device */
+-        lprocfs_mdd_init_vars(&lvars);
+-        mdd->mdd_proc_entry = lprocfs_register(name, type->typ_procroot,
+-                                               lvars.obd_vars, mdd);
+-        if (IS_ERR(mdd->mdd_proc_entry)) {
+-                rc = PTR_ERR(mdd->mdd_proc_entry);
+-                CERROR("Error %d setting up lprocfs for %s\n",
+-                       rc, name);
+-                mdd->mdd_proc_entry = NULL;
+-                GOTO(out, rc);
+-        }
+-
+-	rc = 0;
+-
+-        EXIT;
+-out:
+-        if (rc)
+-               mdd_procfs_fini(mdd);
+-        return rc;
+-}
+-
+-int mdd_procfs_fini(struct mdd_device *mdd)
+-{
+-        if (mdd->mdd_proc_entry) {
+-                 lprocfs_remove(&mdd->mdd_proc_entry);
+-                 mdd->mdd_proc_entry = NULL;
+-        }
+-        RETURN(0);
+-}
+-
+-static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
+-                                 unsigned long count, void *data)
+-{
+-        struct mdd_device *mdd = data;
+-        char kernbuf[20], *end;
+-        unsigned long diff = 0;
++	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
++	char kernbuf[20], *end;
++	unsigned long diff = 0;
+ 
+         if (count > (sizeof(kernbuf) - 1))
+                 return -EINVAL;
+@@ -116,37 +73,34 @@ static int lprocfs_wr_atime_diff(struct file *file, const char *buffer,
+         return count;
+ }
+ 
+-static int lprocfs_rd_atime_diff(char *page, char **start, off_t off,
+-                                 int count, int *eof, void *data)
++static int mdd_atime_diff_seq_show(struct seq_file *m, void *data)
+ {
+-        struct mdd_device *mdd = data;
++	struct mdd_device *mdd = m->private;
+ 
+-        *eof = 1;
+-        return snprintf(page, count, "%lu\n", mdd->mdd_atime_diff);
++	return seq_printf(m, "%lu\n", mdd->mdd_atime_diff);
+ }
+-
++LPROC_SEQ_FOPS(mdd_atime_diff);
+ 
+ /**** changelogs ****/
+-static int lprocfs_rd_changelog_mask(char *page, char **start, off_t off,
+-                                     int count, int *eof, void *data)
++static int mdd_changelog_mask_seq_show(struct seq_file *m, void *data)
+ {
+-        struct mdd_device *mdd = data;
+-        int i = 0, rc = 0;
+-
+-        *eof = 1;
+-        while (i < CL_LAST) {
+-                if (mdd->mdd_cl.mc_mask & (1 << i))
+-                        rc += snprintf(page + rc, count - rc, "%s ",
+-                                       changelog_type2str(i));
+-                i++;
+-        }
+-        return rc;
++	struct mdd_device *mdd = m->private;
++	int i = 0;
++
++	while (i < CL_LAST) {
++		if (mdd->mdd_cl.mc_mask & (1 << i))
++			seq_printf(m, "%s ", changelog_type2str(i));
++		i++;
++	}
++	seq_printf(m, "\n");
++	return 0;
+ }
+ 
+-static int lprocfs_wr_changelog_mask(struct file *file, const char *buffer,
+-				     unsigned long count, void *data)
++static ssize_t
++mdd_changelog_mask_seq_write(struct file *file, const char *buffer,
++			     size_t count, loff_t *off)
+ {
+-	struct mdd_device *mdd = data;
++	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
+ 	char *kernbuf;
+ 	int rc;
+ 	ENTRY;
+@@ -168,45 +122,32 @@ out:
+ 	OBD_FREE(kernbuf, PAGE_CACHE_SIZE);
+ 	return rc;
+ }
+-
+-struct cucb_data {
+-        char *page;
+-        int count;
+-        int idx;
+-};
++LPROC_SEQ_FOPS(mdd_changelog_mask);
+ 
+ static int lprocfs_changelog_users_cb(const struct lu_env *env,
+ 				      struct llog_handle *llh,
+ 				      struct llog_rec_hdr *hdr, void *data)
+ {
+-        struct llog_changelog_user_rec *rec;
+-        struct cucb_data *cucb = (struct cucb_data *)data;
+-
+-        LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
++	struct llog_changelog_user_rec *rec;
++	struct seq_file *m = data;
+ 
+-        rec = (struct llog_changelog_user_rec *)hdr;
++	LASSERT(llh->lgh_hdr->llh_flags & LLOG_F_IS_PLAIN);
+ 
+-        cucb->idx += snprintf(cucb->page + cucb->idx, cucb->count - cucb->idx,
+-                              CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
+-                              rec->cur_id, rec->cur_endrec);
+-        if (cucb->idx >= cucb->count)
+-                return -ENOSPC;
++	rec = (struct llog_changelog_user_rec *)hdr;
+ 
+-        return 0;
++	seq_printf(m, CHANGELOG_USER_PREFIX"%-3d "LPU64"\n",
++		   rec->cur_id, rec->cur_endrec);
++	return 0;
+ }
+ 
+-static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
+-                                      int count, int *eof, void *data)
++static int mdd_changelog_users_seq_show(struct seq_file *m, void *data)
+ {
+ 	struct lu_env		 env;
+-	struct mdd_device	*mdd = data;
++	struct mdd_device	*mdd = m->private;
+ 	struct llog_ctxt	*ctxt;
+-	struct cucb_data	 cucb;
+ 	__u64			 cur;
+ 	int			 rc;
+ 
+-        *eof = 1;
+-
+         ctxt = llog_get_context(mdd2obd_dev(mdd),
+ 				LLOG_CHANGELOG_USER_ORIG_CTXT);
+         if (ctxt == NULL)
+@@ -223,37 +164,31 @@ static int lprocfs_rd_changelog_users(char *page, char **start, off_t off,
+ 	cur = mdd->mdd_cl.mc_index;
+ 	spin_unlock(&mdd->mdd_cl.mc_lock);
+ 
+-        cucb.count = count;
+-        cucb.page = page;
+-        cucb.idx = 0;
+-
+-        cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
+-                              "current index: "LPU64"\n", cur);
+-
+-        cucb.idx += snprintf(cucb.page + cucb.idx, cucb.count - cucb.idx,
+-                              "%-5s %s\n", "ID", "index");
++	seq_printf(m, "current index: "LPU64"\n", cur);
++	seq_printf(m, "%-5s %s\n", "ID", "index");
+ 
+ 	llog_cat_process(&env, ctxt->loc_handle, lprocfs_changelog_users_cb,
+-			 &cucb, 0, 0);
++			 &m, 0, 0);
+ 
+ 	lu_env_fini(&env);
+ 	llog_ctxt_put(ctxt);
+-	return cucb.idx;
++	return 0;
+ }
++LPROC_SEQ_FOPS_RO(mdd_changelog_users);
+ 
+-static int lprocfs_rd_sync_perm(char *page, char **start, off_t off,
+-                                int count, int *eof, void *data)
++static int mdd_sync_perm_seq_show(struct seq_file *m, void *data)
+ {
+-        struct mdd_device *mdd = data;
++	struct mdd_device *mdd = m->private;
+ 
+-        LASSERT(mdd != NULL);
+-        return snprintf(page, count, "%d\n", mdd->mdd_sync_permission);
++	LASSERT(mdd != NULL);
++	return seq_printf(m, "%d\n", mdd->mdd_sync_permission);
+ }
+ 
+-static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
+-                                unsigned long count, void *data)
++static ssize_t
++mdd_sync_perm_seq_write(struct file *file, const char *buffer,
++			size_t count, loff_t *off)
+ {
+-        struct mdd_device *mdd = data;
++	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
+         int val, rc;
+ 
+         LASSERT(mdd != NULL);
+@@ -264,24 +199,21 @@ static int lprocfs_wr_sync_perm(struct file *file, const char *buffer,
+         mdd->mdd_sync_permission = !!val;
+         return count;
+ }
++LPROC_SEQ_FOPS(mdd_sync_perm);
+ 
+-static int lprocfs_rd_lfsck_speed_limit(char *page, char **start, off_t off,
+-					int count, int *eof, void *data)
++static int mdd_lfsck_speed_limit_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdd_device *mdd = data;
+-	int rc;
++	struct mdd_device *mdd = m->private;
+ 
+ 	LASSERT(mdd != NULL);
+-	*eof = 1;
+-
+-	rc = lfsck_get_speed(mdd->mdd_bottom, page, count);
+-	return rc != 0 ? rc : count;
++	return lfsck_get_speed(m, mdd->mdd_bottom);
+ }
+ 
+-static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+-					unsigned long count, void *data)
++static ssize_t
++mdd_lfsck_speed_limit_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct mdd_device *mdd = data;
++	struct mdd_device *mdd = ((struct seq_file *)file->private_data)->private;
+ 	__u32 val;
+ 	int rc;
+ 
+@@ -293,40 +225,67 @@ static int lprocfs_wr_lfsck_speed_limit(struct file *file, const char *buffer,
+ 	rc = lfsck_set_speed(mdd->mdd_bottom, val);
+ 	return rc != 0 ? rc : count;
+ }
++LPROC_SEQ_FOPS(mdd_lfsck_speed_limit);
+ 
+-static int lprocfs_rd_lfsck_namespace(char *page, char **start, off_t off,
+-				      int count, int *eof, void *data)
++static int mdd_lfsck_namespace_seq_show(struct seq_file *m, void *data)
+ {
+-	struct mdd_device *mdd = data;
+-	int rc;
++	struct mdd_device *mdd = m->private;
+ 
+ 	LASSERT(mdd != NULL);
+-	*eof = 1;
+-
+-	rc = lfsck_dump(mdd->mdd_bottom, page, count, LT_NAMESPACE);
+-	return rc;
++	return lfsck_dump(m, mdd->mdd_bottom, LT_NAMESPACE);
+ }
+-
+-static struct lprocfs_vars lprocfs_mdd_obd_vars[] = {
+-        { "atime_diff",      lprocfs_rd_atime_diff, lprocfs_wr_atime_diff, 0 },
+-        { "changelog_mask",  lprocfs_rd_changelog_mask,
+-                             lprocfs_wr_changelog_mask, 0 },
+-        { "changelog_users", lprocfs_rd_changelog_users, 0, 0},
+-        { "sync_permission", lprocfs_rd_sync_perm, lprocfs_wr_sync_perm, 0 },
+-	{ "lfsck_speed_limit", lprocfs_rd_lfsck_speed_limit,
+-			       lprocfs_wr_lfsck_speed_limit, 0 },
+-	{ "lfsck_namespace", lprocfs_rd_lfsck_namespace, 0, 0 },
++LPROC_SEQ_FOPS_RO(mdd_lfsck_namespace);
++
++static struct lprocfs_seq_vars lprocfs_mdd_obd_vars[] = {
++	{ "atime_diff",		&mdd_atime_diff_fops		},
++	{ "changelog_mask",	&mdd_changelog_mask_fops	},
++	{ "changelog_users",	&mdd_changelog_users_fops	},
++	{ "sync_permission",	&mdd_sync_perm_fops		},
++	{ "lfsck_speed_limit",	&mdd_lfsck_speed_limit_fops	},
++	{ "lfsck_namespace",	&mdd_lfsck_namespace_fops	},
+ 	{ 0 }
+ };
+ 
+-static struct lprocfs_vars lprocfs_mdd_module_vars[] = {
+-        { "num_refs",   lprocfs_rd_numrefs, 0, 0 },
+-        { 0 }
+-};
+-
+-void lprocfs_mdd_init_vars(struct lprocfs_static_vars *lvars)
++int mdd_procfs_init(struct mdd_device *mdd, const char *name)
+ {
+-        lvars->module_vars  = lprocfs_mdd_module_vars;
+-        lvars->obd_vars     = lprocfs_mdd_obd_vars;
++	struct obd_device *obd = class_name2obd(name);
++	struct obd_type	  *type;
++	int		  rc;
++	ENTRY;
++
++	/* at the moment there is no linkage between lu_type
++	 * and obd_type, so we lookup obd_type this way */
++	type = class_search_type(LUSTRE_MDD_NAME);
++
++	LASSERT(name != NULL);
++	LASSERT(type != NULL);
++	LASSERT(obd  != NULL);
++
++	/* Find the type procroot and add the proc entry for this device */
++	obd->obd_vars = lprocfs_mdd_obd_vars;
++	mdd->mdd_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
++						   obd->obd_vars, mdd);
++	if (IS_ERR(mdd->mdd_proc_entry)) {
++		rc = PTR_ERR(mdd->mdd_proc_entry);
++		CERROR("Error %d setting up lprocfs for %s\n",
++			rc, name);
++		mdd->mdd_proc_entry = NULL;
++		GOTO(out, rc);
++	}
++	rc = 0;
++
++	EXIT;
++out:
++	if (rc)
++		mdd_procfs_fini(mdd);
++	return rc;
+ }
+ 
++int mdd_procfs_fini(struct mdd_device *mdd)
++{
++	if (mdd->mdd_proc_entry) {
++		lprocfs_remove(&mdd->mdd_proc_entry);
++		mdd->mdd_proc_entry = NULL;
++	}
++	RETURN(0);
++}
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch b/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
new file mode 100644
index 0000000..9d9976a
--- /dev/null
+++ b/sys-cluster/lustre/files/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch
@@ -0,0 +1,748 @@
+From 92589047bca132101a9106f018b2ed9ad1efdfd0 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 19:41:12 -0500
+Subject: [PATCH 18/18] LU-3319 procfs: update ldiskfs proc handling to
+ seq_files
+
+Migrate all ldiskfs proc handling to using strictly
+seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Ia296a4682e2feda02bcfbe0100de8a89404cd731
+---
+ lustre/osd-ldiskfs/osd_handler.c  |   7 +-
+ lustre/osd-ldiskfs/osd_internal.h |   6 +-
+ lustre/osd-ldiskfs/osd_lproc.c    | 321 +++++++++++++++++++-------------------
+ lustre/osd-ldiskfs/osd_scrub.c    |  73 +++------
+ 4 files changed, 192 insertions(+), 215 deletions(-)
+
+diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
+index c13c682..7f8748d 100644
+--- a/lustre/osd-ldiskfs/osd_handler.c
++++ b/lustre/osd-ldiskfs/osd_handler.c
+@@ -5820,19 +5820,18 @@ static struct obd_ops osd_obd_device_ops = {
+ 
+ static int __init osd_mod_init(void)
+ {
+-        struct lprocfs_static_vars lvars;
+ 	int rc;
+ 
+ 	osd_oi_mod_init();
+-	lprocfs_osd_init_vars(&lvars);
+ 
+ 	rc = lu_kmem_init(ldiskfs_caches);
+ 	if (rc)
+ 		return rc;
+ 
+-	rc = class_register_type(&osd_obd_device_ops, NULL, NULL,
++	rc = class_register_type(&osd_obd_device_ops, NULL,
++				lprocfs_osd_module_vars,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_OSD_LDISKFS_NAME, &osd_device_type);
+ 	if (rc)
+diff --git a/lustre/osd-ldiskfs/osd_internal.h b/lustre/osd-ldiskfs/osd_internal.h
+index 8d5ca40..35d1b10 100644
+--- a/lustre/osd-ldiskfs/osd_internal.h
++++ b/lustre/osd-ldiskfs/osd_internal.h
+@@ -623,11 +623,11 @@ static inline int __osd_xattr_set(struct osd_thread_info *info,
+ 
+ #ifdef LPROCFS
+ /* osd_lproc.c */
+-void lprocfs_osd_init_vars(struct lprocfs_static_vars *lvars);
++extern struct lprocfs_seq_vars lprocfs_osd_module_vars[];
++
+ int osd_procfs_init(struct osd_device *osd, const char *name);
+ int osd_procfs_fini(struct osd_device *osd);
+ void osd_brw_stats_update(struct osd_device *osd, struct osd_iobuf *iobuf);
+-
+ #endif
+ int osd_statfs(const struct lu_env *env, struct dt_device *dev,
+                struct obd_statfs *sfs);
+@@ -678,7 +678,7 @@ int osd_oii_insert(struct osd_device *dev, struct osd_idmap_cache *oic,
+ 		   int insert);
+ int osd_oii_lookup(struct osd_device *dev, const struct lu_fid *fid,
+ 		   struct osd_inode_id *id);
+-int osd_scrub_dump(struct osd_device *dev, char *buf, int len);
++int osd_scrub_dump(struct seq_file *m, struct osd_device *dev);
+ 
+ int osd_fld_lookup(const struct lu_env *env, struct osd_device *osd,
+ 		   obd_seq seq, struct lu_seq_range *range);
+diff --git a/lustre/osd-ldiskfs/osd_lproc.c b/lustre/osd-ldiskfs/osd_lproc.c
+index 83bb586..528f60e 100644
+--- a/lustre/osd-ldiskfs/osd_lproc.c
++++ b/lustre/osd-ldiskfs/osd_lproc.c
+@@ -237,93 +237,45 @@ out:
+         RETURN(result);
+ }
+ 
+-int osd_procfs_init(struct osd_device *osd, const char *name)
+-{
+-        struct lprocfs_static_vars lvars;
+-        struct obd_type     *type;
+-        int                  rc;
+-        ENTRY;
+-
+-	/* at the moment there is no linkage between lu_type
+-	 * and obd_type, so we lookup obd_type this way */
+-	type = class_search_type(LUSTRE_OSD_LDISKFS_NAME);
+-
+-        LASSERT(name != NULL);
+-        LASSERT(type != NULL);
+-
+-        /* Find the type procroot and add the proc entry for this device */
+-        lprocfs_osd_init_vars(&lvars);
+-        osd->od_proc_entry = lprocfs_register(name, type->typ_procroot,
+-                                              lvars.obd_vars, &osd->od_dt_dev);
+-        if (IS_ERR(osd->od_proc_entry)) {
+-                rc = PTR_ERR(osd->od_proc_entry);
+-                CERROR("Error %d setting up lprocfs for %s\n",
+-                       rc, name);
+-                osd->od_proc_entry = NULL;
+-                GOTO(out, rc);
+-        }
+-
+-        rc = osd_stats_init(osd);
+-
+-        EXIT;
+-out:
+-        if (rc)
+-               osd_procfs_fini(osd);
+-	return rc;
+-}
+-
+-int osd_procfs_fini(struct osd_device *osd)
+-{
+-	if (osd->od_stats)
+-		lprocfs_free_stats(&osd->od_stats);
+-
+-        if (osd->od_proc_entry) {
+-                 lprocfs_remove(&osd->od_proc_entry);
+-                 osd->od_proc_entry = NULL;
+-        }
+-        RETURN(0);
+-}
+-
+-static int lprocfs_osd_rd_fstype(char *page, char **start, off_t off, int count,
+-				 int *eof, void *data)
++static int ldiskfs_osd_fstype_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *osd = osd_dt_dev(data);
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
+-        LASSERT(osd != NULL);
+-        return snprintf(page, count, "ldiskfs\n");
++	LASSERT(osd != NULL);
++	return seq_printf(m, "ldiskfs\n");
+ }
++LPROC_SEQ_FOPS_RO(ldiskfs_osd_fstype);
+ 
+-static int lprocfs_osd_rd_mntdev(char *page, char **start, off_t off, int count,
+-                                 int *eof, void *data)
++static int ldiskfs_osd_mntdev_seq_show(struct seq_file *m, void *data)
+ {
+-        struct osd_device *osd = osd_dt_dev(data);
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
+-        LASSERT(osd != NULL);
++	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+-                return -EINPROGRESS;
+-
+-	*eof = 1;
++		return -EINPROGRESS;
+ 
+-	return snprintf(page, count, "%s\n", osd->od_mntdev);
++	return seq_printf(m, "%s\n", osd->od_mntdev);
+ }
++LPROC_SEQ_FOPS_RO(ldiskfs_osd_mntdev);
+ 
+-static int lprocfs_osd_rd_cache(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int ldiskfs_osd_cache_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *osd = osd_dt_dev(data);
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+ 		return -EINPROGRESS;
+ 
+-	return snprintf(page, count, "%u\n", osd->od_read_cache);
++	return seq_printf(m, "%u\n", osd->od_read_cache);
+ }
+ 
+-static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
+-				unsigned long count, void *data)
++static ssize_t
++ldiskfs_osd_cache_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct osd_device	*osd = osd_dt_dev(data);
+-	int			 val, rc;
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device *osd = osd_dt_dev(dt);
++	int		   val, rc;
+ 
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+@@ -336,24 +288,26 @@ static int lprocfs_osd_wr_cache(struct file *file, const char *buffer,
+ 	osd->od_read_cache = !!val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ldiskfs_osd_cache);
+ 
+-static int lprocfs_osd_rd_wcache(char *page, char **start, off_t off,
+-				 int count, int *eof, void *data)
++static int ldiskfs_osd_wcache_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *osd = osd_dt_dev(data);
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+ 		return -EINPROGRESS;
+ 
+-	return snprintf(page, count, "%u\n", osd->od_writethrough_cache);
++	return seq_printf(m, "%u\n", osd->od_writethrough_cache);
+ }
+ 
+-static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
+-				 unsigned long count, void *data)
++static ssize_t
++ldiskfs_osd_wcache_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct osd_device	*osd = osd_dt_dev(data);
+-	int			 val, rc;
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device *osd = osd_dt_dev(dt);
++	int		   val, rc;
+ 
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+@@ -366,14 +320,16 @@ static int lprocfs_osd_wr_wcache(struct file *file, const char *buffer,
+ 	osd->od_writethrough_cache = !!val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ldiskfs_osd_wcache);
+ 
+-static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+-				     unsigned long count, void *data)
++static ssize_t
++lprocfs_osd_force_sync_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-	struct osd_device	*osd = osd_dt_dev(data);
+-	struct dt_device	*dt = data;
+-	struct lu_env		 env;
+-	int			 rc;
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device *osd = osd_dt_dev(dt);
++	struct lu_env	   env;
++	int		   rc;
+ 
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+@@ -387,20 +343,18 @@ static int lprocfs_osd_wr_force_sync(struct file *file, const char *buffer,
+ 
+ 	return rc == 0 ? count : rc;
+ }
++LPROC_SEQ_FOPS_WO_TYPE(ldiskfs, osd_force_sync);
+ 
+-static int lprocfs_osd_rd_pdo(char *page, char **start, off_t off, int count,
+-                              int *eof, void *data)
++static int ldiskfs_osd_pdo_seq_show(struct seq_file *m, void *data)
+ {
+-        *eof = 1;
+-
+-        return snprintf(page, count, "%s\n", ldiskfs_pdo ? "ON" : "OFF");
++	return seq_printf(m, "%s\n", ldiskfs_pdo ? "ON" : "OFF");
+ }
+ 
+-static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
+-                              unsigned long count, void *data)
++static ssize_t
++ldiskfs_osd_pdo_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-        int     pdo;
+-        int     rc;
++	int pdo, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &pdo);
+         if (rc != 0)
+@@ -410,24 +364,25 @@ static int lprocfs_osd_wr_pdo(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(ldiskfs_osd_pdo);
+ 
+-static int lprocfs_osd_rd_auto_scrub(char *page, char **start, off_t off,
+-				     int count, int *eof, void *data)
++static int ldiskfs_osd_auto_scrub_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *dev = osd_dt_dev(data);
++	struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(dev != NULL);
+ 	if (unlikely(dev->od_mnt == NULL))
+ 		return -EINPROGRESS;
+ 
+-	*eof = 1;
+-	return snprintf(page, count, "%d\n", !dev->od_noscrub);
++	return seq_printf(m, "%d\n", !dev->od_noscrub);
+ }
+ 
+-static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
+-				     unsigned long count, void *data)
++static ssize_t
++ldiskfs_osd_auto_scrub_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-	struct osd_device *dev = osd_dt_dev(data);
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device *dev = osd_dt_dev(dt);
+ 	int val, rc;
+ 
+ 	LASSERT(dev != NULL);
+@@ -441,19 +396,18 @@ static int lprocfs_osd_wr_auto_scrub(struct file *file, const char *buffer,
+ 	dev->od_noscrub = !val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ldiskfs_osd_auto_scrub);
+ 
+-static int lprocfs_osd_rd_track_declares_assert(char *page, char **start,
+-						off_t off, int count,
+-						int *eof, void *data)
++static int
++ldiskfs_osd_track_declares_assert_seq_show(struct seq_file *m, void *data)
+ {
+-	*eof = 1;
+-
+-	return snprintf(page, count, "%d\n", ldiskfs_track_declares_assert);
++	return seq_printf(m, "%d\n", ldiskfs_track_declares_assert);
+ }
+ 
+-static int lprocfs_osd_wr_track_declares_assert(struct file *file,
++static ssize_t
++ldiskfs_osd_track_declares_assert_seq_write(struct file *file,
+ 						const char *buffer,
+-						unsigned long count, void *data)
++						size_t count, loff_t *off)
+ {
+ 	int     track_declares_assert;
+ 	int     rc;
+@@ -466,38 +420,39 @@ static int lprocfs_osd_wr_track_declares_assert(struct file *file,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ldiskfs_osd_track_declares_assert);
++
++extern int osd_scrub_dump(struct seq_file *m, struct osd_device *dev);
+ 
+-static int lprocfs_osd_rd_oi_scrub(char *page, char **start, off_t off,
+-				   int count, int *eof, void *data)
++static int ldiskfs_osd_oi_scrub_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *dev = osd_dt_dev(data);
++	struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(dev != NULL);
+ 	if (unlikely(dev->od_mnt == NULL))
+ 		return -EINPROGRESS;
+ 
+-	*eof = 1;
+-	return osd_scrub_dump(dev, page, count);
++	return osd_scrub_dump(m, dev);
+ }
++LPROC_SEQ_FOPS_RO(ldiskfs_osd_oi_scrub);
+ 
+-int lprocfs_osd_rd_readcache(char *page, char **start, off_t off, int count,
+-			     int *eof, void *data)
++int ldiskfs_osd_readcache_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device	*osd = osd_dt_dev(data);
+-	int			 rc;
++	struct osd_device *osd = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(osd != NULL);
+ 	if (unlikely(osd->od_mnt == NULL))
+ 		return -EINPROGRESS;
+ 
+-	rc = snprintf(page, count, LPU64"\n", osd->od_readcache_max_filesize);
+-	return rc;
++	return seq_printf(m, LPU64"\n", osd->od_readcache_max_filesize);
+ }
+ 
+-int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
+-			     unsigned long count, void *data)
++ssize_t
++ldiskfs_osd_readcache_seq_write(struct file *file, const char *buffer,
++				size_t count, loff_t *off)
+ {
+-	struct osd_device	*osd = osd_dt_dev(data);
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device	*osd = osd_dt_dev(dt);
+ 	__u64			 val;
+ 	int			 rc;
+ 
+@@ -513,24 +468,25 @@ int lprocfs_osd_wr_readcache(struct file *file, const char *buffer,
+ 					 OSD_MAX_CACHE_SIZE : val;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ldiskfs_osd_readcache);
+ 
+-static int lprocfs_osd_rd_lma_self_repair(char *page, char **start, off_t off,
+-					  int count, int *eof, void *data)
++static int ldiskfs_osd_lma_self_repair_seq_show(struct seq_file *m, void *data)
+ {
+-	struct osd_device *dev = osd_dt_dev(data);
++	struct osd_device *dev = osd_dt_dev((struct dt_device *)m->private);
+ 
+ 	LASSERT(dev != NULL);
+ 	if (unlikely(dev->od_mnt == NULL))
+ 		return -EINPROGRESS;
+ 
+-	*eof = 1;
+-	return snprintf(page, count, "%d\n", !!dev->od_lma_self_repair);
++	return seq_printf(m, "%d\n", !!dev->od_lma_self_repair);
+ }
+ 
+-static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
+-					  unsigned long count, void *data)
++static ssize_t
++ldiskfs_osd_lma_self_repair_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-	struct osd_device *dev = osd_dt_dev(data);
++	struct dt_device  *dt = ((struct seq_file *)file->private_data)->private;
++	struct osd_device *dev = osd_dt_dev(dt);
+ 	int		   val;
+ 	int		   rc;
+ 
+@@ -545,43 +501,86 @@ static int lprocfs_osd_wr_lma_self_repair(struct file *file, const char *buffer,
+ 	dev->od_lma_self_repair = !!val;
+ 	return count;
+ }
+-
+-struct lprocfs_vars lprocfs_osd_obd_vars[] = {
+-	{ "blocksize",		lprocfs_dt_rd_blksize,	0, 0 },
+-	{ "kbytestotal",	lprocfs_dt_rd_kbytestotal,	0, 0 },
+-	{ "kbytesfree",		lprocfs_dt_rd_kbytesfree,	0, 0 },
+-	{ "kbytesavail",	lprocfs_dt_rd_kbytesavail,	0, 0 },
+-	{ "filestotal",		lprocfs_dt_rd_filestotal,	0, 0 },
+-	{ "filesfree",		lprocfs_dt_rd_filesfree,	0, 0 },
+-        { "fstype",          lprocfs_osd_rd_fstype,      0, 0 },
+-        { "mntdev",          lprocfs_osd_rd_mntdev,      0, 0 },
+-	{ "force_sync",      0, lprocfs_osd_wr_force_sync     },
+-        { "pdo",             lprocfs_osd_rd_pdo, lprocfs_osd_wr_pdo, 0 },
+-	{ "auto_scrub",      lprocfs_osd_rd_auto_scrub,
+-			     lprocfs_osd_wr_auto_scrub,  0 },
+-	{ "oi_scrub",	     lprocfs_osd_rd_oi_scrub,    0, 0 },
+-	{ "force_sync",		0, lprocfs_osd_wr_force_sync },
+-	{ "read_cache_enable",	lprocfs_osd_rd_cache, lprocfs_osd_wr_cache, 0 },
+-	{ "writethrough_cache_enable",	lprocfs_osd_rd_wcache,
+-					lprocfs_osd_wr_wcache, 0 },
+-	{ "readcache_max_filesize",	lprocfs_osd_rd_readcache,
+-					lprocfs_osd_wr_readcache, 0 },
+-	{ "lma_self_repair",	lprocfs_osd_rd_lma_self_repair,
+-				lprocfs_osd_wr_lma_self_repair, 0, 0 },
++LPROC_SEQ_FOPS(ldiskfs_osd_lma_self_repair);
++
++LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_blksize);
++LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytestotal);
++LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytesfree);
++LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_kbytesavail);
++LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filestotal);
++LPROC_SEQ_FOPS_RO_TYPE(ldiskfs, dt_filesfree);
++
++static struct lprocfs_seq_vars lprocfs_osd_obd_vars[] = {
++	{ "blocksize",			&ldiskfs_dt_blksize_fops	},
++	{ "kbytestotal",		&ldiskfs_dt_kbytestotal_fops	},
++	{ "kbytesfree",			&ldiskfs_dt_kbytesfree_fops	},
++	{ "kbytesavail",		&ldiskfs_dt_kbytesavail_fops	},
++	{ "filestotal",			&ldiskfs_dt_filestotal_fops	},
++	{ "filesfree",			&ldiskfs_dt_filesfree_fops	},
++	{ "fstype",			&ldiskfs_osd_fstype_fops	},
++	{ "mntdev",			&ldiskfs_osd_mntdev_fops	},
++	{ "force_sync",			&ldiskfs_osd_force_sync_fops	},
++	{ "pdo",			&ldiskfs_osd_pdo_fops		},
++	{ "auto_scrub",			&ldiskfs_osd_auto_scrub_fops	},
++	{ "oi_scrub",			&ldiskfs_osd_oi_scrub_fops	},
++	{ "read_cache_enable",		&ldiskfs_osd_cache_fops		},
++	{ "writethrough_cache_enable",	&ldiskfs_osd_wcache_fops	},
++	{ "readcache_max_filesize",	&ldiskfs_osd_readcache_fops	},
++	{ "lma_self_repair",		&ldiskfs_osd_lma_self_repair_fops },
+ 	{ 0 }
+ };
+ 
+-struct lprocfs_vars lprocfs_osd_module_vars[] = {
+-        { "num_refs",        lprocfs_rd_numrefs,     0, 0 },
+-	{ "track_declares_assert",	lprocfs_osd_rd_track_declares_assert,
+-					lprocfs_osd_wr_track_declares_assert,
+-					0 },
+-        { 0 }
++struct lprocfs_seq_vars lprocfs_osd_module_vars[] = {
++	{ "track_declares_assert", &ldiskfs_osd_track_declares_assert_fops },
++	{ 0 }
+ };
+ 
+-void lprocfs_osd_init_vars(struct lprocfs_static_vars *lvars)
++int osd_procfs_init(struct osd_device *osd, const char *name)
++{
++	struct obd_type	*type;
++	int		rc;
++	ENTRY;
++
++	if (osd->od_proc_entry)
++		RETURN(0);
++
++	/* at the moment there is no linkage between lu_type
++	 * and obd_type, so we lookup obd_type this way */
++	type = class_search_type(LUSTRE_OSD_LDISKFS_NAME);
++
++	LASSERT(name != NULL);
++	LASSERT(type != NULL);
++
++	/* Find the type procroot and add the proc entry for this device */
++	osd->od_proc_entry = lprocfs_seq_register(name, type->typ_procroot,
++						lprocfs_osd_obd_vars,
++						&osd->od_dt_dev);
++	if (IS_ERR(osd->od_proc_entry)) {
++		rc = PTR_ERR(osd->od_proc_entry);
++		CERROR("Error %d setting up lprocfs for %s\n",
++			rc, name);
++		osd->od_proc_entry = NULL;
++		GOTO(out, rc);
++	}
++
++	rc = osd_stats_init(osd);
++
++	EXIT;
++out:
++	if (rc)
++		osd_procfs_fini(osd);
++	return rc;
++}
++
++int osd_procfs_fini(struct osd_device *osd)
+ {
+-        lvars->module_vars = lprocfs_osd_module_vars;
+-        lvars->obd_vars = lprocfs_osd_obd_vars;
++	if (osd->od_stats)
++		lprocfs_free_stats(&osd->od_stats);
++
++	if (osd->od_proc_entry) {
++		lprocfs_remove(&osd->od_proc_entry);
++		osd->od_proc_entry = NULL;
++	}
++	RETURN(0);
+ }
+ #endif
+diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
+index 18a0a2a..38f5d29 100644
+--- a/lustre/osd-ldiskfs/osd_scrub.c
++++ b/lustre/osd-ldiskfs/osd_scrub.c
+@@ -2508,80 +2508,69 @@ static const char *scrub_param_names[] = {
+ 	NULL
+ };
+ 
+-static int scrub_bits_dump(char **buf, int *len, int bits, const char *names[],
++static int scrub_bits_dump(struct seq_file *m, int bits, const char *names[],
+ 			   const char *prefix)
+ {
+-	int save = *len;
+ 	int flag;
+ 	int rc;
+ 	int i;
+ 
+-	rc = snprintf(*buf, *len, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
++	rc = seq_printf(m, "%s:%c", prefix, bits != 0 ? ' ' : '\n');
+ 	if (rc <= 0)
+ 		return -ENOSPC;
+ 
+-	*buf += rc;
+-	*len -= rc;
+ 	for (i = 0, flag = 1; bits != 0; i++, flag = 1 << i) {
+ 		if (flag & bits) {
+ 			bits &= ~flag;
+-			rc = snprintf(*buf, *len, "%s%c", names[i],
+-				      bits != 0 ? ',' : '\n');
++			rc = seq_printf(m, "%s%c", names[i],
++					bits != 0 ? ',' : '\n');
+ 			if (rc <= 0)
+ 				return -ENOSPC;
+-
+-			*buf += rc;
+-			*len -= rc;
+ 		}
+ 	}
+-	return save - *len;
++	return 0;
+ }
+ 
+-static int scrub_time_dump(char **buf, int *len, __u64 time, const char *prefix)
++static int scrub_time_dump(struct seq_file *m, __u64 time, const char *prefix)
+ {
+ 	int rc;
+ 
+ 	if (time != 0)
+-		rc = snprintf(*buf, *len, "%s: "LPU64" seconds\n", prefix,
++		rc = seq_printf(m, "%s: "LPU64" seconds\n", prefix,
+ 			      cfs_time_current_sec() - time);
+ 	else
+-		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
++		rc = seq_printf(m, "%s: N/A\n", prefix);
+ 	if (rc <= 0)
+ 		return -ENOSPC;
+ 
+-	*buf += rc;
+-	*len -= rc;
+-	return rc;
++	return 0;
+ }
+ 
+-static int scrub_pos_dump(char **buf, int *len, __u64 pos, const char *prefix)
++static int scrub_pos_dump(struct seq_file *m, __u64 pos, const char *prefix)
+ {
+ 	int rc;
+ 
+ 	if (pos != 0)
+-		rc = snprintf(*buf, *len, "%s: "LPU64"\n", prefix, pos);
++		rc = seq_printf(m, "%s: "LPU64"\n", prefix, pos);
+ 	else
+-		rc = snprintf(*buf, *len, "%s: N/A\n", prefix);
++		rc = seq_printf(m, "%s: N/A\n", prefix);
+ 	if (rc <= 0)
+ 		return -ENOSPC;
+ 
+-	*buf += rc;
+-	*len -= rc;
+ 	return rc;
+ }
+ 
+-int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
++int osd_scrub_dump(struct seq_file *m,struct osd_device *dev)
+ {
+ 	struct osd_scrub  *scrub   = &dev->od_scrub;
+ 	struct scrub_file *sf      = &scrub->os_file;
+ 	__u64		   checked;
+ 	__u64		   speed;
+-	int		   save    = len;
+ 	int		   ret     = -ENOSPC;
+ 	int		   rc;
+ 
+ 	down_read(&scrub->os_rwsem);
+-	rc = snprintf(buf, len,
++	rc = seq_printf(m,
+ 		      "name: OI_scrub\n"
+ 		      "magic: 0x%x\n"
+ 		      "oi_files: %d\n"
+@@ -2591,51 +2580,48 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 	if (rc <= 0)
+ 		goto out;
+ 
+-	buf += rc;
+-	len -= rc;
+-	rc = scrub_bits_dump(&buf, &len, sf->sf_flags, scrub_flags_names,
++	rc = scrub_bits_dump(m, sf->sf_flags, scrub_flags_names,
+ 			     "flags");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_bits_dump(&buf, &len, sf->sf_param, scrub_param_names,
++	rc = scrub_bits_dump(m, sf->sf_param, scrub_param_names,
+ 			     "param");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_time_dump(&buf, &len, sf->sf_time_last_complete,
++	rc = scrub_time_dump(m, sf->sf_time_last_complete,
+ 			     "time_since_last_completed");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_time_dump(&buf, &len, sf->sf_time_latest_start,
++	rc = scrub_time_dump(m, sf->sf_time_latest_start,
+ 			     "time_since_latest_start");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_time_dump(&buf, &len, sf->sf_time_last_checkpoint,
++	rc = scrub_time_dump(m, sf->sf_time_last_checkpoint,
+ 			     "time_since_last_checkpoint");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_pos_dump(&buf, &len, sf->sf_pos_latest_start,
++	rc = scrub_pos_dump(m, sf->sf_pos_latest_start,
+ 			    "latest_start_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_pos_dump(&buf, &len, sf->sf_pos_last_checkpoint,
++	rc = scrub_pos_dump(m, sf->sf_pos_last_checkpoint,
+ 			    "last_checkpoint_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+-	rc = scrub_pos_dump(&buf, &len, sf->sf_pos_first_inconsistent,
++	rc = scrub_pos_dump(m, sf->sf_pos_first_inconsistent,
+ 			    "first_failure_position");
+ 	if (rc < 0)
+ 		goto out;
+ 
+ 	checked = sf->sf_items_checked + scrub->os_new_checked;
+-	rc = snprintf(buf, len,
+-		      "checked: "LPU64"\n"
++	rc = seq_printf(m, "checked: "LPU64"\n"
+ 		      "updated: "LPU64"\n"
+ 		      "failed: "LPU64"\n"
+ 		      "prior_updated: "LPU64"\n"
+@@ -2648,8 +2634,6 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 	if (rc <= 0)
+ 		goto out;
+ 
+-	buf += rc;
+-	len -= rc;
+ 	speed = checked;
+ 	if (thread_is_running(&scrub->os_thread)) {
+ 		cfs_duration_t duration = cfs_time_current() -
+@@ -2662,8 +2646,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 			do_div(new_checked, duration);
+ 		if (rtime != 0)
+ 			do_div(speed, rtime);
+-		rc = snprintf(buf, len,
+-			      "run_time: %u seconds\n"
++		rc = seq_printf(m, "run_time: %u seconds\n"
+ 			      "average_speed: "LPU64" objects/sec\n"
+ 			      "real-time_speed: "LPU64" objects/sec\n"
+ 			      "current_position: %u\n"
+@@ -2676,8 +2659,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 	} else {
+ 		if (sf->sf_run_time != 0)
+ 			do_div(speed, sf->sf_run_time);
+-		rc = snprintf(buf, len,
+-			      "run_time: %u seconds\n"
++		rc = seq_printf(m, "run_time: %u seconds\n"
+ 			      "average_speed: "LPU64" objects/sec\n"
+ 			      "real-time_speed: N/A\n"
+ 			      "current_position: N/A\n"
+@@ -2689,10 +2671,7 @@ int osd_scrub_dump(struct osd_device *dev, char *buf, int len)
+ 	}
+ 	if (rc <= 0)
+ 		goto out;
+-
+-	buf += rc;
+-	len -= rc;
+-	ret = save - len;
++	ret = 0;
+ 
+ out:
+ 	up_read(&scrub->os_rwsem);
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 610c755..123c81c 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -42,6 +42,15 @@ PATCHES=(
 	"${FILESDIR}/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch"
 	"${FILESDIR}/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch"
 	"${FILESDIR}/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch"
+	"${FILESDIR}/0010-LU-3319-procfs-update-shared-server-side-core-proc-h.patch"
+	"${FILESDIR}/0011-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0012-LU-3319-procfs-move-mgs-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0013-LU-3319-procfs-move-ofd-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0014-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0015-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0016-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch"
+	"${FILESDIR}/0017-LU-3319-procfs-move-mdd-proc-handling-to-seq_files.patch"
+	"${FILESDIR}/0018-LU-3319-procfs-update-ldiskfs-proc-handling-to-seq_f.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-12-19 13:29 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-12-19 13:29 UTC (permalink / raw
  To: gentoo-commits

commit:     e4356da29fa5d3f53d2c49e1b44a83ec740e93ee
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 19 13:29:19 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 19 13:29:19 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=e4356da2

Give me more patches =D

Package-Manager: portage-2.2.7
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |  13 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |   2 +-
 ...3-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch |   2 +-
 ...74-llite-dentry-d_compare-changes-in-3.11.patch |   2 +-
 ...-LU-3974-llite-use-new-struct-dir_context.patch |   2 +-
 ...-LU-3974-llite-invalidatepage-api-changed.patch |   2 +-
 ...cfs-move-llite-proc-handling-over-to-seq_.patch |   3 +-
 ...cfs-move-lmv-proc-handling-over-to-seq_fi.patch | 409 +++++++++++
 ...cfs-move-ldlm-proc-handling-over-to-seq_f.patch | 789 +++++++++++++++++++++
 ...cfs-move-ost-proc-handling-over-to-seq_fi.patch | 174 +++++
 sys-cluster/lustre/lustre-9999.ebuild              |   3 +
 11 files changed, 1395 insertions(+), 6 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 5ca35a5..33ff78c 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,19 @@
 # $Header: $
 
   19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch,
+  +files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch,
+  +files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,
+  files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch,
+  files/0004-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0005-LU-3974-llite-invalidatepage-api-changed.patch,
+  files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch,
+  lustre-9999.ebuild:
+  Give me more patches =D
+
+  19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch,
   files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 8ace887..b1123cc 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From a607b37a64f797b766825ccb6f41176685cd843f Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 1/6] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/10] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
index 975d6a9..d231dd4 100644
--- a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
+++ b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
@@ -1,7 +1,7 @@
 From e53207df22261a635315a62f1405eb8c7b700963 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 5 Dec 2013 09:05:22 -0500
-Subject: [PATCH 2/6] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
+Subject: [PATCH 02/10] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
 
 ldiskfs patches
 

diff --git a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
index 7034391..09fccee 100644
--- a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
+++ b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
@@ -1,7 +1,7 @@
 From 18cfd561fae3b2eac663b51f8e5147b59c711af7 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 11 Dec 2013 10:29:41 -0500
-Subject: [PATCH 3/6] LU-3974 llite: dentry d_compare changes in 3.11
+Subject: [PATCH 03/10] LU-3974 llite: dentry d_compare changes in 3.11
 
 In the linux 3.11 kernel the d_compare function has
 removed passing in any struct inode arguments. This

diff --git a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
index f50491f..d60c144 100644
--- a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,7 +1,7 @@
 From 82f692de87cb6c7db8f050b3201d23f4852a404c Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:05:14 -0500
-Subject: [PATCH 4/6] LU-3974 llite: use new struct dir_context
+Subject: [PATCH 04/10] LU-3974 llite: use new struct dir_context
 
 The readdir and nfs code over time has added more
 parameters to be passed to be processed. For the 3.11

diff --git a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
index 823c159..ea5eea5 100644
--- a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,7 +1,7 @@
 From 2725bc0f3bc5fa7706b9a475ccb0c191f21ca884 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
-Subject: [PATCH 5/6] LU-3974 llite: invalidatepage api changed
+Subject: [PATCH 05/10] LU-3974 llite: invalidatepage api changed
 
 Until recently invalidating pages from the buffer cache
 was dependent only on the page passed in and the start

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
index 427e088..1df7373 100644
--- a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
@@ -1,7 +1,8 @@
 From 01ce737ef8bba37c904d79f3aabe88a4ead20b74 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 5 Dec 2013 13:53:37 -0500
-Subject: [PATCH 6/6] LU-3319 procfs: move llite proc handling over to seq_file
+Subject: [PATCH 06/10] LU-3319 procfs: move llite proc handling over to
+ seq_file
 
 For lustre clients a special abstract layer so a lustre
 client can be mounted. In order to support 3.10+ kernels

diff --git a/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
new file mode 100644
index 0000000..c710c5c
--- /dev/null
+++ b/sys-cluster/lustre/files/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch
@@ -0,0 +1,409 @@
+From 4169735b41f2452d884e24c92581af0c4fbf6121 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 09:32:29 -0500
+Subject: [PATCH 07/10] LU-3319 procfs: move lmv proc handling over to seq_file
+
+In order to support 3.10+ kernels for clients we adapt
+the lmv proc handling to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I34f58c3a484ee79b41b59d4a60f6a21726373152
+---
+ lustre/lmv/lmv_internal.h |   7 +--
+ lustre/lmv/lmv_obd.c      | 138 ++++++++++++++++++++--------------------------
+ lustre/lmv/lproc_lmv.c    |  78 ++++++++++----------------
+ 3 files changed, 91 insertions(+), 132 deletions(-)
+
+diff --git a/lustre/lmv/lmv_internal.h b/lustre/lmv/lmv_internal.h
+index 15692c5..1d027d7 100644
+--- a/lustre/lmv/lmv_internal.h
++++ b/lustre/lmv/lmv_internal.h
+@@ -147,12 +147,7 @@ struct lmv_tgt_desc
+ 		struct lu_fid *fid);
+ /* lproc_lmv.c */
+ #ifdef LPROCFS
+-void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars);
+-#else
+-static inline void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-        memset(lvars, 0, sizeof(*lvars));
+-}
++extern struct lprocfs_seq_vars lprocfs_lmv_obd_vars[];
+ #endif
+ extern struct file_operations lmv_proc_target_fops;
+ 
+diff --git a/lustre/lmv/lmv_obd.c b/lustre/lmv/lmv_obd.c
+index 56d6e20..888a86f 100644
+--- a/lustre/lmv/lmv_obd.c
++++ b/lustre/lmv/lmv_obd.c
+@@ -239,13 +239,19 @@ static int lmv_connect(const struct lu_env *env,
+                 lmv->conn_data = *data;
+ 
+ #ifdef __KERNEL__
+-        lmv_proc_dir = lprocfs_register("target_obds", obd->obd_proc_entry,
+-                                        NULL, NULL);
+-        if (IS_ERR(lmv_proc_dir)) {
+-                CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
+-                       obd->obd_type->typ_name, obd->obd_name);
+-                lmv_proc_dir = NULL;
+-        }
++	if (obd->obd_proc_private != NULL) {
++		lmv_proc_dir = obd->obd_proc_private;
++	} else {
++		lmv_proc_dir = lprocfs_seq_register("target_obds",
++						    obd->obd_proc_entry,
++						    NULL, NULL);
++		if (IS_ERR(lmv_proc_dir)) {
++			CERROR("could not register /proc/fs/lustre/%s/%s/target_obds.",
++			       obd->obd_type->typ_name, obd->obd_name);
++			lmv_proc_dir = NULL;
++		}
++		obd->obd_proc_private = lmv_proc_dir;
++	}
+ #endif
+ 
+         /*
+@@ -258,12 +264,11 @@ static int lmv_connect(const struct lu_env *env,
+                 rc = lmv_check_connect(obd);
+ 
+ #ifdef __KERNEL__
+-        if (rc) {
+-                if (lmv_proc_dir)
+-                        lprocfs_remove(&lmv_proc_dir);
+-        }
++	if (rc && lmv_proc_dir) {
++		lprocfs_remove(&lmv_proc_dir);
++		obd->obd_proc_private = NULL;
++	}
+ #endif
+-
+         RETURN(rc);
+ }
+ 
+@@ -423,28 +428,28 @@ int lmv_connect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+                 cfs_atomic_read(&obd->obd_refcount));
+ 
+ #ifdef __KERNEL__
+-        lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds");
+-        if (lmv_proc_dir) {
+-                struct proc_dir_entry *mdc_symlink;
+-
+-                LASSERT(mdc_obd->obd_type != NULL);
+-                LASSERT(mdc_obd->obd_type->typ_name != NULL);
+-                mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
+-                                                  lmv_proc_dir,
+-                                                  "../../../%s/%s",
+-                                                  mdc_obd->obd_type->typ_name,
+-                                                  mdc_obd->obd_name);
+-                if (mdc_symlink == NULL) {
+-                        CERROR("Could not register LMV target "
+-                               "/proc/fs/lustre/%s/%s/target_obds/%s.",
+-                               obd->obd_type->typ_name, obd->obd_name,
+-                               mdc_obd->obd_name);
+-                        lprocfs_remove(&lmv_proc_dir);
+-                        lmv_proc_dir = NULL;
+-                }
+-        }
++	lmv_proc_dir = obd->obd_proc_private;
++	if (lmv_proc_dir) {
++		struct proc_dir_entry *mdc_symlink;
++
++		LASSERT(mdc_obd->obd_type != NULL);
++		LASSERT(mdc_obd->obd_type->typ_name != NULL);
++		mdc_symlink = lprocfs_add_symlink(mdc_obd->obd_name,
++						  lmv_proc_dir,
++						  "../../../%s/%s",
++						  mdc_obd->obd_type->typ_name,
++						  mdc_obd->obd_name);
++		if (mdc_symlink == NULL) {
++			CERROR("Could not register LMV target "
++			       "/proc/fs/lustre/%s/%s/target_obds/%s.",
++			       obd->obd_type->typ_name, obd->obd_name,
++			       mdc_obd->obd_name);
++			lprocfs_remove(&lmv_proc_dir);
++			obd->obd_proc_private = NULL;
++		}
++	}
+ #endif
+-        RETURN(0);
++	RETURN(0);
+ }
+ 
+ static void lmv_del_target(struct lmv_obd *lmv, int index)
+@@ -652,19 +657,9 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+         }
+ 
+ #ifdef __KERNEL__
+-        lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds");
+-        if (lmv_proc_dir) {
+-                struct proc_dir_entry *mdc_symlink;
+-
+-                mdc_symlink = lprocfs_srch(lmv_proc_dir, mdc_obd->obd_name);
+-                if (mdc_symlink) {
+-                        lprocfs_remove(&mdc_symlink);
+-                } else {
+-                        CERROR("/proc/fs/lustre/%s/%s/target_obds/%s missing\n",
+-                               obd->obd_type->typ_name, obd->obd_name,
+-                               mdc_obd->obd_name);
+-                }
+-        }
++	lmv_proc_dir = obd->obd_proc_private;
++	if (lmv_proc_dir)
++		lprocfs_remove_proc_entry(mdc_obd->obd_name, lmv_proc_dir);
+ #endif
+ 	rc = obd_fid_fini(tgt->ltd_exp->exp_obd);
+ 	if (rc)
+@@ -691,9 +686,6 @@ static int lmv_disconnect_mdc(struct obd_device *obd, struct lmv_tgt_desc *tgt)
+ static int lmv_disconnect(struct obd_export *exp)
+ {
+ 	struct obd_device	*obd = class_exp2obd(exp);
+-#ifdef __KERNEL__
+-	struct proc_dir_entry	*lmv_proc_dir;
+-#endif
+ 	struct lmv_obd		*lmv = &obd->u.lmv;
+ 	int			 rc;
+ 	__u32			 i;
+@@ -717,13 +709,11 @@ static int lmv_disconnect(struct obd_export *exp)
+         }
+ 
+ #ifdef __KERNEL__
+-        lmv_proc_dir = lprocfs_srch(obd->obd_proc_entry, "target_obds");
+-        if (lmv_proc_dir) {
+-                lprocfs_remove(&lmv_proc_dir);
+-        } else {
+-                CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
+-                       obd->obd_type->typ_name, obd->obd_name);
+-        }
++	if (obd->obd_proc_private)
++		lprocfs_remove((struct proc_dir_entry **)&obd->obd_proc_private);
++	else
++		CERROR("/proc/fs/lustre/%s/%s/target_obds missing\n",
++		       obd->obd_type->typ_name, obd->obd_name);
+ #endif
+ 
+ out_local:
+@@ -1383,11 +1373,10 @@ int lmv_fid_alloc(struct obd_export *exp, struct lu_fid *fid,
+ 
+ static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ {
+-        struct lmv_obd             *lmv = &obd->u.lmv;
+-        struct lprocfs_static_vars  lvars;
+-        struct lmv_desc            *desc;
+-        int                         rc;
+-        ENTRY;
++	struct lmv_obd	*lmv = &obd->u.lmv;
++	struct lmv_desc	*desc;
++	int		rc;
++	ENTRY;
+ 
+         if (LUSTRE_CFG_BUFLEN(lcfg, 1) < 1) {
+                 CERROR("LMV setup requires a descriptor\n");
+@@ -1417,18 +1406,15 @@ static int lmv_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+ 	spin_lock_init(&lmv->lmv_lock);
+ 	mutex_init(&lmv->init_mutex);
+ 
+-	lprocfs_lmv_init_vars(&lvars);
+-
+-	lprocfs_obd_setup(obd, lvars.obd_vars);
+-	lprocfs_alloc_md_stats(obd, 0);
+ #ifdef LPROCFS
+-	{
+-		rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
+-					0444, &lmv_proc_target_fops, obd);
+-		if (rc)
+-			CWARN("%s: error adding LMV target_obd file: rc = %d\n",
+-			      obd->obd_name, rc);
+-	}
++	obd->obd_vars = lprocfs_lmv_obd_vars;
++	lprocfs_seq_obd_setup(obd);
++	lprocfs_alloc_md_stats(obd, 0);
++	rc = lprocfs_seq_create(obd->obd_proc_entry, "target_obd",
++				0444, &lmv_proc_target_fops, obd);
++	if (rc)
++		CWARN("%s: error adding LMV target_obd file: rc = %d\n",
++		      obd->obd_name, rc);
+ #endif
+ 	rc = fld_client_init(&lmv->lmv_fld, obd->obd_name,
+ 			     LUSTRE_CLI_FLD_HASH_DHT);
+@@ -2477,7 +2463,7 @@ int lmv_set_info_async(const struct lu_env *env, struct obd_export *exp,
+                        obd_count keylen, void *key, obd_count vallen,
+                        void *val, struct ptlrpc_request_set *set)
+ {
+-        struct lmv_tgt_desc    *tgt;
++	struct lmv_tgt_desc    *tgt = NULL;
+         struct obd_device      *obd;
+         struct lmv_obd         *lmv;
+         int rc = 0;
+@@ -2982,13 +2968,9 @@ struct md_ops lmv_md_ops = {
+ 
+ int __init lmv_init(void)
+ {
+-        struct lprocfs_static_vars lvars;
+-
+-        lprocfs_lmv_init_vars(&lvars);
+-
+ 	return class_register_type(&lmv_obd_ops, &lmv_md_ops, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-					lvars.module_vars,
++					NULL,
+ #endif
+ 					LUSTRE_LMV_NAME, NULL);
+ }
+diff --git a/lustre/lmv/lproc_lmv.c b/lustre/lmv/lproc_lmv.c
+index 6a3b128..eea5927 100644
+--- a/lustre/lmv/lproc_lmv.c
++++ b/lustre/lmv/lproc_lmv.c
+@@ -46,18 +46,16 @@
+ static struct lprocfs_vars lprocfs_module_vars[] = { {0} };
+ static struct lprocfs_vars lprocfs_obd_vars[] = { {0} };
+ #else
+-static int lmv_rd_numobd(char *page, char **start, off_t off, int count,
+-                         int *eof, void *data)
++static int lmv_numobd_seq_show(struct seq_file *m, void *v)
+ {
+-        struct obd_device       *dev = (struct obd_device*)data;
++	struct obd_device	*dev = (struct obd_device *)m->private;
+         struct lmv_desc         *desc;
+ 
+         LASSERT(dev != NULL);
+         desc = &dev->u.lmv.desc;
+-        *eof = 1;
+-        return snprintf(page, count, "%u\n", desc->ld_tgt_count);
+-
++	return seq_printf(m, "%u\n", desc->ld_tgt_count);
+ }
++LPROC_SEQ_FOPS_RO(lmv_numobd);
+ 
+ static const char *placement_name[] = {
+         [PLACEMENT_CHAR_POLICY] = "CHAR",
+@@ -82,26 +80,22 @@ static const char *placement_policy2name(placement_policy_t placement)
+         return placement_name[placement];
+ }
+ 
+-static int lmv_rd_placement(char *page, char **start, off_t off, int count,
+-                            int *eof, void *data)
++static int lmv_placement_seq_show(struct seq_file *m, void *v)
+ {
+-        struct obd_device       *dev = (struct obd_device*)data;
++	struct obd_device	*dev = (struct obd_device *)m->private;
+         struct lmv_obd          *lmv;
+ 
+         LASSERT(dev != NULL);
+         lmv = &dev->u.lmv;
+-        *eof = 1;
+-        return snprintf(page, count, "%s\n",
+-                        placement_policy2name(lmv->lmv_placement));
+-
++	return seq_printf(m, "%s\n", placement_policy2name(lmv->lmv_placement));
+ }
+ 
+ #define MAX_POLICY_STRING_SIZE 64
+ 
+-static int lmv_wr_placement(struct file *file, const char *buffer,
+-                            unsigned long count, void *data)
++static ssize_t lmv_placement_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-        struct obd_device       *dev = (struct obd_device *)data;
++	struct obd_device *dev = ((struct seq_file *)file->private_data)->private;
+         char                     dummy[MAX_POLICY_STRING_SIZE + 1];
+         int                      len = count;
+         placement_policy_t       policy;
+@@ -131,30 +125,29 @@ static int lmv_wr_placement(struct file *file, const char *buffer,
+         }
+         return count;
+ }
++LPROC_SEQ_FOPS(lmv_placement);
+ 
+-static int lmv_rd_activeobd(char *page, char **start, off_t off, int count,
+-                            int *eof, void *data)
++static int lmv_activeobd_seq_show(struct seq_file *m, void *v)
+ {
+-        struct obd_device       *dev = (struct obd_device*)data;
++	struct obd_device	*dev = (struct obd_device *)m->private;
+         struct lmv_desc         *desc;
+ 
+         LASSERT(dev != NULL);
+         desc = &dev->u.lmv.desc;
+-        *eof = 1;
+-        return snprintf(page, count, "%u\n", desc->ld_active_tgt_count);
++	return seq_printf(m, "%u\n", desc->ld_active_tgt_count);
+ }
++LPROC_SEQ_FOPS_RO(lmv_activeobd);
+ 
+-static int lmv_rd_desc_uuid(char *page, char **start, off_t off, int count,
+-                            int *eof, void *data)
++static int lmv_desc_uuid_seq_show(struct seq_file *m, void *v)
+ {
+-        struct obd_device       *dev = (struct obd_device*) data;
++	struct obd_device	*dev = (struct obd_device*)m->private;
+         struct lmv_obd          *lmv;
+ 
+         LASSERT(dev != NULL);
+         lmv = &dev->u.lmv;
+-        *eof = 1;
+-        return snprintf(page, count, "%s\n", lmv->desc.ld_uuid.uuid);
++	return seq_printf(m, "%s\n", lmv->desc.ld_uuid.uuid);
+ }
++LPROC_SEQ_FOPS_RO(lmv_desc_uuid);
+ 
+ static void *lmv_tgt_seq_start(struct seq_file *p, loff_t *pos)
+ {
+@@ -195,7 +188,6 @@ struct seq_operations lmv_tgt_sops = {
+ 
+ static int lmv_target_seq_open(struct inode *inode, struct file *file)
+ {
+-        struct proc_dir_entry   *dp = PDE(inode);
+         struct seq_file         *seq;
+         int                     rc;
+ 
+@@ -203,24 +195,20 @@ static int lmv_target_seq_open(struct inode *inode, struct file *file)
+         if (rc)
+                 return rc;
+ 
+-        seq = file->private_data;
+-        seq->private = dp->data;
+-
+-        return 0;
++	seq = file->private_data;
++	seq->private = PDE_DATA(inode);
++	return 0;
+ }
+ 
+-struct lprocfs_vars lprocfs_lmv_obd_vars[] = {
+-        { "numobd",             lmv_rd_numobd,          0, 0 },
+-        { "placement",          lmv_rd_placement,       lmv_wr_placement, 0 },
+-        { "activeobd",          lmv_rd_activeobd,       0, 0 },
+-        { "uuid",               lprocfs_rd_uuid,        0, 0 },
+-        { "desc_uuid",          lmv_rd_desc_uuid,       0, 0 },
+-        { 0 }
+-};
++LPROC_SEQ_FOPS_RO_TYPE(lmv, uuid);
+ 
+-static struct lprocfs_vars lprocfs_lmv_module_vars[] = {
+-        { "num_refs",           lprocfs_rd_numrefs,     0, 0 },
+-        { 0 }
++struct lprocfs_seq_vars lprocfs_lmv_obd_vars[] = {
++	{ "numobd",	&lmv_numobd_fops	},
++	{ "placement",	&lmv_placement_fops	},
++	{ "activeobd",	&lmv_activeobd_fops	},
++	{ "uuid",	&lmv_uuid_fops		},
++	{ "desc_uuid",	&lmv_desc_uuid_fops	},
++	{ 0 }
+ };
+ 
+ struct file_operations lmv_proc_target_fops = {
+@@ -230,10 +218,4 @@ struct file_operations lmv_proc_target_fops = {
+         .llseek               = seq_lseek,
+         .release              = seq_release,
+ };
+-
+ #endif /* LPROCFS */
+-void lprocfs_lmv_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-        lvars->module_vars    = lprocfs_lmv_module_vars;
+-        lvars->obd_vars       = lprocfs_lmv_obd_vars;
+-}
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
new file mode 100644
index 0000000..5d2cd20
--- /dev/null
+++ b/sys-cluster/lustre/files/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch
@@ -0,0 +1,789 @@
+From a464fd862a7876e1c4f679b32956904eee88d45e Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 17 Dec 2013 19:11:15 -0500
+Subject: [PATCH 08/10] LU-3319 procfs: move ldlm proc handling over to
+ seq_file
+
+In order to support 3.10+ kernels for clients we adapt
+the ldlm proc handling to using seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Iaedae5fe1e1cd2985a6240314810db9bba3cd747
+---
+ lustre/include/lustre_dlm.h |   5 +-
+ lustre/ldlm/ldlm_internal.h |  85 ++++++------
+ lustre/ldlm/ldlm_pool.c     | 197 +++++++++++++---------------
+ lustre/ldlm/ldlm_resource.c | 306 +++++++++++++++++++-------------------------
+ 4 files changed, 270 insertions(+), 323 deletions(-)
+
+diff --git a/lustre/include/lustre_dlm.h b/lustre/include/lustre_dlm.h
+index 30b70b5..d01b7e9 100644
+--- a/lustre/include/lustre_dlm.h
++++ b/lustre/include/lustre_dlm.h
+@@ -243,7 +243,7 @@ struct ldlm_pool_ops {
+  */
+ struct ldlm_pool {
+ 	/** Pool proc directory. */
+-	cfs_proc_dir_entry_t	*pl_proc_dir;
++	struct proc_dir_entry	*pl_proc_dir;
+ 	/** Pool name, must be long enough to hold compound proc entry name. */
+ 	char			pl_name[100];
+ 	/** Lock for protecting SLV/CLV updates. */
+@@ -400,6 +400,9 @@ struct ldlm_namespace {
+ 	/** Client side original connect flags supported by server. */
+ 	__u64			ns_orig_connect_flags;
+ 
++	/* namespace proc dir entry */
++	struct proc_dir_entry	*ns_proc_dir_entry;
++
+ 	/**
+ 	 * Position in global namespace list linking all namespaces on
+ 	 * the node.
+diff --git a/lustre/ldlm/ldlm_internal.h b/lustre/ldlm/ldlm_internal.h
+index 5077072..ffc528b 100644
+--- a/lustre/ldlm/ldlm_internal.h
++++ b/lustre/ldlm/ldlm_internal.h
+@@ -212,8 +212,8 @@ void ldlm_destroy_flock_export(struct obd_export *exp);
+ void l_check_ns_lock(struct ldlm_namespace *ns);
+ void l_check_no_ns_lock(struct ldlm_namespace *ns);
+ 
+-extern cfs_proc_dir_entry_t *ldlm_svc_proc_dir;
+-extern cfs_proc_dir_entry_t *ldlm_type_proc_dir;
++extern struct proc_dir_entry *ldlm_svc_proc_dir;
++extern struct proc_dir_entry *ldlm_type_proc_dir;
+ 
+ struct ldlm_state {
+         struct ptlrpc_service *ldlm_cb_service;
+@@ -252,42 +252,51 @@ enum ldlm_policy_res {
+ 
+ typedef enum ldlm_policy_res ldlm_policy_res_t;
+ 
+-#define LDLM_POOL_PROC_READER(var, type)                                    \
+-        static int lprocfs_rd_##var(char *page, char **start, off_t off,    \
+-                                    int count, int *eof, void *data)        \
+-        {                                                                   \
+-                struct ldlm_pool *pl = data;                                \
+-                type tmp;                                                   \
+-                                                                            \
+-		spin_lock(&pl->pl_lock);				    \
+-		tmp = pl->pl_##var;					    \
+-		spin_unlock(&pl->pl_lock);				    \
+-                                                                            \
+-                return lprocfs_rd_uint(page, start, off, count, eof, &tmp); \
+-        }                                                                   \
+-        struct __##var##__dummy_read {;} /* semicolon catcher */
+-
+-#define LDLM_POOL_PROC_WRITER(var, type)                                    \
+-        int lprocfs_wr_##var(struct file *file, const char *buffer,         \
+-                             unsigned long count, void *data)               \
+-        {                                                                   \
+-                struct ldlm_pool *pl = data;                                \
+-                type tmp;                                                   \
+-                int rc;                                                     \
+-                                                                            \
+-                rc = lprocfs_wr_uint(file, buffer, count, &tmp);            \
+-                if (rc < 0) {                                               \
+-                        CERROR("Can't parse user input, rc = %d\n", rc);    \
+-                        return rc;                                          \
+-                }                                                           \
+-                                                                            \
+-		spin_lock(&pl->pl_lock);				    \
+-		pl->pl_##var = tmp;					    \
+-		spin_unlock(&pl->pl_lock);				    \
+-                                                                            \
+-                return rc;                                                  \
+-        }                                                                   \
+-        struct __##var##__dummy_write {;} /* semicolon catcher */
++#define LDLM_POOL_PROC_READER_SEQ_SHOW(var, type)			\
++	static int lprocfs_##var##_seq_show(struct seq_file *m, void *v)\
++	{								\
++		struct ldlm_pool *pl = m->private;			\
++		type tmp;						\
++									\
++		spin_lock(&pl->pl_lock);				\
++		tmp = pl->pl_##var;					\
++		spin_unlock(&pl->pl_lock);				\
++									\
++		return lprocfs_uint_seq_show(m, &tmp);			\
++	}								\
++	struct __##var##__dummy_read {;} /* semicolon catcher */
++
++#define LDLM_POOL_PROC_WRITER(var, type)				\
++	int lprocfs_wr_##var(struct file *file, const char *buffer,	\
++			     unsigned long count, void *data)		\
++	{								\
++		struct ldlm_pool *pl = data;				\
++		type tmp;						\
++		int rc;							\
++									\
++		rc = lprocfs_wr_uint(file, buffer, count, &tmp);	\
++		if (rc < 0) {						\
++			CERROR("Can't parse user input, rc = %d\n", rc);\
++			return rc;					\
++		}							\
++									\
++		spin_lock(&pl->pl_lock);				\
++		pl->pl_##var = tmp;					\
++		spin_unlock(&pl->pl_lock);				\
++									\
++		return rc;						\
++	}								\
++	struct __##var##__dummy_write {;} /* semicolon catcher */
++
++static inline void
++ldlm_add_var(struct lprocfs_seq_vars *vars, struct proc_dir_entry *proc_dir,
++	     const char *name, void *data, const struct file_operations *ops)
++{
++	snprintf((char *)vars->name, MAX_STRING_SIZE, "%s", name);
++	vars->data = data;
++	vars->fops = ops;
++	lprocfs_seq_add_vars(proc_dir, vars, 0);
++}
+ 
+ static inline int is_granted_or_cancelled(struct ldlm_lock *lock)
+ {
+diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
+index 734b330..c1b7ac6 100644
+--- a/lustre/ldlm/ldlm_pool.c
++++ b/lustre/ldlm/ldlm_pool.c
+@@ -148,7 +148,7 @@
+ #define LDLM_POOL_SLV_SHIFT (10)
+ 
+ #ifdef __KERNEL__
+-extern cfs_proc_dir_entry_t *ldlm_ns_proc_dir;
++extern struct proc_dir_entry *ldlm_ns_proc_dir;
+ #endif
+ 
+ static inline __u64 dru(__u64 val, __u32 shift, int round_up)
+@@ -656,14 +656,13 @@ int ldlm_pool_setup(struct ldlm_pool *pl, int limit)
+ EXPORT_SYMBOL(ldlm_pool_setup);
+ 
+ #ifdef __KERNEL__
+-static int lprocfs_rd_pool_state(char *page, char **start, off_t off,
+-                                 int count, int *eof, void *data)
++static int lprocfs_pool_state_seq_show(struct seq_file *m, void *unused)
+ {
+-        int granted, grant_rate, cancel_rate, grant_step;
+-        int nr = 0, grant_speed, grant_plan, lvf;
+-        struct ldlm_pool *pl = data;
+-        __u64 slv, clv;
+-        __u32 limit;
++	int granted, grant_rate, cancel_rate, grant_step;
++	int grant_speed, grant_plan, lvf;
++	struct ldlm_pool *pl = m->private;
++	__u64 slv, clv;
++	__u32 limit;
+ 
+ 	spin_lock(&pl->pl_lock);
+         slv = pl->pl_server_lock_volume;
+@@ -678,35 +677,28 @@ static int lprocfs_rd_pool_state(char *page, char **start, off_t off,
+         grant_step = ldlm_pool_t2gsp(pl->pl_recalc_period);
+ 	spin_unlock(&pl->pl_lock);
+ 
+-        nr += snprintf(page + nr, count - nr, "LDLM pool state (%s):\n",
+-                       pl->pl_name);
+-        nr += snprintf(page + nr, count - nr, "  SLV: "LPU64"\n", slv);
+-        nr += snprintf(page + nr, count - nr, "  CLV: "LPU64"\n", clv);
+-        nr += snprintf(page + nr, count - nr, "  LVF: %d\n", lvf);
+-
+-        if (ns_is_server(ldlm_pl2ns(pl))) {
+-                nr += snprintf(page + nr, count - nr, "  GSP: %d%%\n",
+-                               grant_step);
+-                nr += snprintf(page + nr, count - nr, "  GP:  %d\n",
+-                               grant_plan);
+-        }
+-        nr += snprintf(page + nr, count - nr, "  GR:  %d\n",
+-                       grant_rate);
+-        nr += snprintf(page + nr, count - nr, "  CR:  %d\n",
+-                       cancel_rate);
+-        nr += snprintf(page + nr, count - nr, "  GS:  %d\n",
+-                       grant_speed);
+-        nr += snprintf(page + nr, count - nr, "  G:   %d\n",
+-                       granted);
+-        nr += snprintf(page + nr, count - nr, "  L:   %d\n",
+-                       limit);
+-        return nr;
++	seq_printf(m, "LDLM pool state (%s):\n"
++		      "  SLV: "LPU64"\n"
++		      "  CLV: "LPU64"\n"
++		      "  LVF: %d\n",
++		      pl->pl_name, slv, clv, lvf);
++
++	if (ns_is_server(ldlm_pl2ns(pl))) {
++		seq_printf(m, "  GSP: %d%%\n"
++			      "  GP:  %d\n",
++			      grant_step, grant_plan);
++	}
++	seq_printf(m, "  GR:  %d\n" "  CR:  %d\n" "  GS:  %d\n"
++		      "  G:   %d\n" "  L:   %d\n",
++		      grant_rate, cancel_rate, grant_speed,
++		      granted, limit);
++	return 0;
+ }
++LPROC_SEQ_FOPS_RO(lprocfs_pool_state);
+ 
+-static int lprocfs_rd_grant_speed(char *page, char **start, off_t off,
+-				  int count, int *eof, void *data)
++static int lprocfs_grant_speed_seq_show(struct seq_file *m, void *unused)
+ {
+-	struct ldlm_pool *pl = data;
++	struct ldlm_pool *pl = m->private;
+ 	int               grant_speed;
+ 
+ 	spin_lock(&pl->pl_lock);
+@@ -714,35 +706,50 @@ static int lprocfs_rd_grant_speed(char *page, char **start, off_t off,
+ 	grant_speed = cfs_atomic_read(&pl->pl_grant_rate) -
+ 			cfs_atomic_read(&pl->pl_cancel_rate);
+ 	spin_unlock(&pl->pl_lock);
+-	return lprocfs_rd_uint(page, start, off, count, eof, &grant_speed);
++	return lprocfs_uint_seq_show(m, &grant_speed);
+ }
+ 
+-LDLM_POOL_PROC_READER(grant_plan, int);
+-LDLM_POOL_PROC_READER(recalc_period, int);
++LDLM_POOL_PROC_READER_SEQ_SHOW(grant_plan, int);
++LPROC_SEQ_FOPS_RO(lprocfs_grant_plan);
++
++LDLM_POOL_PROC_READER_SEQ_SHOW(recalc_period, int);
+ LDLM_POOL_PROC_WRITER(recalc_period, int);
++static ssize_t lprocfs_recalc_period_seq_write(struct file *file, const char *buf,
++					       size_t len, loff_t *off)
++{
++	struct seq_file *seq = file->private_data;
++
++	return lprocfs_wr_recalc_period(file, buf, len, seq->private);
++}
++LPROC_SEQ_FOPS(lprocfs_recalc_period);
++
++LPROC_SEQ_FOPS_RO_TYPE(ldlm_pool, u64);
++LPROC_SEQ_FOPS_RO_TYPE(ldlm_pool, atomic);
++LPROC_SEQ_FOPS_RW_TYPE(ldlm_pool_rw, atomic);
++
++LPROC_SEQ_FOPS_RO(lprocfs_grant_speed);
+ 
+ static int ldlm_pool_proc_init(struct ldlm_pool *pl)
+ {
+-        struct ldlm_namespace *ns = ldlm_pl2ns(pl);
+-        struct proc_dir_entry *parent_ns_proc;
+-        struct lprocfs_vars pool_vars[2];
+-        char *var_name = NULL;
+-        int rc = 0;
+-        ENTRY;
++	struct ldlm_namespace *ns = ldlm_pl2ns(pl);
++	struct proc_dir_entry *parent_ns_proc;
++	struct lprocfs_seq_vars pool_vars[2];
++	char *var_name = NULL;
++	int rc = 0;
++	ENTRY;
+ 
+-        OBD_ALLOC(var_name, MAX_STRING_SIZE + 1);
+-        if (!var_name)
+-                RETURN(-ENOMEM);
++	OBD_ALLOC(var_name, MAX_STRING_SIZE + 1);
++	if (!var_name)
++		RETURN(-ENOMEM);
+ 
+-        parent_ns_proc = lprocfs_srch(ldlm_ns_proc_dir,
+-                                      ldlm_ns_name(ns));
+-        if (parent_ns_proc == NULL) {
+-                CERROR("%s: proc entry is not initialized\n",
+-                       ldlm_ns_name(ns));
+-                GOTO(out_free_name, rc = -EINVAL);
+-        }
+-        pl->pl_proc_dir = lprocfs_register("pool", parent_ns_proc,
+-                                           NULL, NULL);
++	parent_ns_proc = ns->ns_proc_dir_entry;
++	if (parent_ns_proc == NULL) {
++		CERROR("%s: proc entry is not initialized\n",
++		       ldlm_ns_name(ns));
++		GOTO(out_free_name, rc = -EINVAL);
++	}
++	pl->pl_proc_dir = lprocfs_seq_register("pool", parent_ns_proc,
++						NULL, NULL);
+ 	if (IS_ERR(pl->pl_proc_dir)) {
+ 		rc = PTR_ERR(pl->pl_proc_dir);
+ 		pl->pl_proc_dir = NULL;
+@@ -751,62 +758,30 @@ static int ldlm_pool_proc_init(struct ldlm_pool *pl)
+ 		GOTO(out_free_name, rc);
+ 	}
+ 
+-        var_name[MAX_STRING_SIZE] = '\0';
+-        memset(pool_vars, 0, sizeof(pool_vars));
+-        pool_vars[0].name = var_name;
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "server_lock_volume");
+-        pool_vars[0].data = &pl->pl_server_lock_volume;
+-        pool_vars[0].read_fptr = lprocfs_rd_u64;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "limit");
+-        pool_vars[0].data = &pl->pl_limit;
+-        pool_vars[0].read_fptr = lprocfs_rd_atomic;
+-        pool_vars[0].write_fptr = lprocfs_wr_atomic;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "granted");
+-        pool_vars[0].data = &pl->pl_granted;
+-        pool_vars[0].read_fptr = lprocfs_rd_atomic;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "grant_speed");
+-        pool_vars[0].data = pl;
+-        pool_vars[0].read_fptr = lprocfs_rd_grant_speed;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "cancel_rate");
+-        pool_vars[0].data = &pl->pl_cancel_rate;
+-        pool_vars[0].read_fptr = lprocfs_rd_atomic;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "grant_rate");
+-        pool_vars[0].data = &pl->pl_grant_rate;
+-        pool_vars[0].read_fptr = lprocfs_rd_atomic;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "grant_plan");
+-        pool_vars[0].data = pl;
+-        pool_vars[0].read_fptr = lprocfs_rd_grant_plan;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "recalc_period");
+-        pool_vars[0].data = pl;
+-        pool_vars[0].read_fptr = lprocfs_rd_recalc_period;
+-        pool_vars[0].write_fptr = lprocfs_wr_recalc_period;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "lock_volume_factor");
+-        pool_vars[0].data = &pl->pl_lock_volume_factor;
+-        pool_vars[0].read_fptr = lprocfs_rd_atomic;
+-        pool_vars[0].write_fptr = lprocfs_wr_atomic;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
+-
+-        snprintf(var_name, MAX_STRING_SIZE, "state");
+-        pool_vars[0].data = pl;
+-        pool_vars[0].read_fptr = lprocfs_rd_pool_state;
+-        lprocfs_add_vars(pl->pl_proc_dir, pool_vars, 0);
++	var_name[MAX_STRING_SIZE] = '\0';
++	memset(pool_vars, 0, sizeof(pool_vars));
++	pool_vars[0].name = var_name;
++
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "server_lock_volume",
++		     &pl->pl_server_lock_volume, &ldlm_pool_u64_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "limit", &pl->pl_limit,
++		     &ldlm_pool_rw_atomic_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "granted",
++		     &pl->pl_granted, &ldlm_pool_atomic_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "grant_speed", pl,
++		     &lprocfs_grant_speed_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "cancel_rate",
++		     &pl->pl_cancel_rate, &ldlm_pool_atomic_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "grant_rate",
++		     &pl->pl_grant_rate, &ldlm_pool_atomic_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "grant_plan", pl,
++		     &lprocfs_grant_plan_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "recalc_period",
++		     pl, &lprocfs_recalc_period_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "lock_volume_factor",
++		     &pl->pl_lock_volume_factor, &ldlm_pool_rw_atomic_fops);
++	ldlm_add_var(&pool_vars[0], pl->pl_proc_dir, "state", pl,
++		     &lprocfs_pool_state_fops);
+ 
+         pl->pl_stats = lprocfs_alloc_stats(LDLM_POOL_LAST_STAT -
+                                            LDLM_POOL_FIRST_STAT, 0);
+diff --git a/lustre/ldlm/ldlm_resource.c b/lustre/ldlm/ldlm_resource.c
+index e1b8787..e504cff 100644
+--- a/lustre/ldlm/ldlm_resource.c
++++ b/lustre/ldlm/ldlm_resource.c
+@@ -66,9 +66,9 @@ CFS_LIST_HEAD(ldlm_cli_active_namespace_list);
+ /* Client namespaces that don't have any locks in them */
+ CFS_LIST_HEAD(ldlm_cli_inactive_namespace_list);
+ 
+-cfs_proc_dir_entry_t *ldlm_type_proc_dir = NULL;
+-cfs_proc_dir_entry_t *ldlm_ns_proc_dir = NULL;
+-cfs_proc_dir_entry_t *ldlm_svc_proc_dir = NULL;
++struct proc_dir_entry *ldlm_type_proc_dir = NULL;
++struct proc_dir_entry *ldlm_ns_proc_dir = NULL;
++struct proc_dir_entry *ldlm_svc_proc_dir = NULL;
+ 
+ extern unsigned int ldlm_cancel_unused_locks_before_replay;
+ 
+@@ -77,57 +77,64 @@ extern unsigned int ldlm_cancel_unused_locks_before_replay;
+ unsigned int ldlm_dump_granted_max = 256;
+ 
+ #ifdef LPROCFS
+-static int ldlm_proc_dump_ns(struct file *file, const char *buffer,
+-                             unsigned long count, void *data)
++static ssize_t
++lprocfs_dump_ns_seq_write(struct file *file, const char *buffer,
++			  size_t count, loff_t *off)
+ {
+-        ldlm_dump_all_namespaces(LDLM_NAMESPACE_SERVER, D_DLMTRACE);
+-        ldlm_dump_all_namespaces(LDLM_NAMESPACE_CLIENT, D_DLMTRACE);
+-        RETURN(count);
++	ldlm_dump_all_namespaces(LDLM_NAMESPACE_SERVER, D_DLMTRACE);
++	ldlm_dump_all_namespaces(LDLM_NAMESPACE_CLIENT, D_DLMTRACE);
++	RETURN(count);
+ }
++LPROC_SEQ_FOPS_WO_TYPE(ldlm, dump_ns);
++
++LPROC_SEQ_FOPS_RW_TYPE(ldlm_rw, uint);
++LPROC_SEQ_FOPS_RO_TYPE(ldlm, uint);
+ 
+ int ldlm_proc_setup(void)
+ {
+-        int rc;
+-        struct lprocfs_vars list[] = {
+-                { "dump_namespaces", NULL, ldlm_proc_dump_ns, NULL },
+-                { "dump_granted_max",
+-                  lprocfs_rd_uint, lprocfs_wr_uint,
+-                  &ldlm_dump_granted_max, NULL },
+-                { "cancel_unused_locks_before_replay",
+-                  lprocfs_rd_uint, lprocfs_wr_uint,
+-                  &ldlm_cancel_unused_locks_before_replay, NULL },
+-                { NULL }};
+-        ENTRY;
+-        LASSERT(ldlm_ns_proc_dir == NULL);
+-
+-        ldlm_type_proc_dir = lprocfs_register(OBD_LDLM_DEVICENAME,
+-                                              proc_lustre_root,
+-                                              NULL, NULL);
+-        if (IS_ERR(ldlm_type_proc_dir)) {
+-                CERROR("LProcFS failed in ldlm-init\n");
+-                rc = PTR_ERR(ldlm_type_proc_dir);
+-                GOTO(err, rc);
+-        }
++	int rc;
++	struct lprocfs_seq_vars list[] = {
++		{ .name	=	"dump_namespaces",
++		  .fops	=	&ldlm_dump_ns_fops,
++		  .proc_mode =	0222 },
++		{ .name	=	"dump_granted_max",
++		  .fops	=	&ldlm_rw_uint_fops,
++		  .data	=	&ldlm_dump_granted_max },
++		{ .name	=	"cancel_unused_locks_before_replay",
++		  .fops	=	&ldlm_rw_uint_fops,
++		  .data	=	&ldlm_cancel_unused_locks_before_replay },
++		{ NULL }};
++	ENTRY;
++	LASSERT(ldlm_ns_proc_dir == NULL);
++
++	ldlm_type_proc_dir = lprocfs_seq_register(OBD_LDLM_DEVICENAME,
++							proc_lustre_root,
++							NULL, NULL);
++	if (IS_ERR(ldlm_type_proc_dir)) {
++		CERROR("LProcFS failed in ldlm-init\n");
++		rc = PTR_ERR(ldlm_type_proc_dir);
++		GOTO(err, rc);
++	}
+ 
+-        ldlm_ns_proc_dir = lprocfs_register("namespaces",
+-                                            ldlm_type_proc_dir,
+-                                            NULL, NULL);
+-        if (IS_ERR(ldlm_ns_proc_dir)) {
+-                CERROR("LProcFS failed in ldlm-init\n");
+-                rc = PTR_ERR(ldlm_ns_proc_dir);
+-                GOTO(err_type, rc);
+-        }
++	ldlm_ns_proc_dir = lprocfs_seq_register("namespaces",
++						ldlm_type_proc_dir,
++						NULL, NULL);
++	if (IS_ERR(ldlm_ns_proc_dir)) {
++		CERROR("LProcFS failed in ldlm-init\n");
++		rc = PTR_ERR(ldlm_ns_proc_dir);
++		GOTO(err_type, rc);
++	}
+ 
+-        ldlm_svc_proc_dir = lprocfs_register("services",
+-                                            ldlm_type_proc_dir,
+-                                            NULL, NULL);
+-        if (IS_ERR(ldlm_svc_proc_dir)) {
+-                CERROR("LProcFS failed in ldlm-init\n");
+-                rc = PTR_ERR(ldlm_svc_proc_dir);
+-                GOTO(err_ns, rc);
+-        }
++	ldlm_svc_proc_dir = lprocfs_seq_register("services",
++						ldlm_type_proc_dir,
++						NULL, NULL);
++	if (IS_ERR(ldlm_svc_proc_dir)) {
++		CERROR("LProcFS failed in ldlm-init\n");
++		rc = PTR_ERR(ldlm_svc_proc_dir);
++		GOTO(err_ns, rc);
++	}
+ 
+-	rc = lprocfs_add_vars(ldlm_type_proc_dir, list, NULL);
++	rc = lprocfs_seq_add_vars(ldlm_type_proc_dir, list, NULL);
+ 	if (rc != 0) {
+ 		CERROR("LProcFS failed in ldlm-init\n");
+ 		GOTO(err_svc, rc);
+@@ -158,46 +165,45 @@ void ldlm_proc_cleanup(void)
+                 lprocfs_remove(&ldlm_type_proc_dir);
+ }
+ 
+-static int lprocfs_rd_ns_resources(char *page, char **start, off_t off,
+-                                   int count, int *eof, void *data)
++static int lprocfs_ns_resources_seq_show(struct seq_file *m, void *v)
+ {
+-        struct ldlm_namespace *ns  = data;
+-        __u64                  res = 0;
+-        cfs_hash_bd_t          bd;
+-        int                    i;
+-
+-        /* result is not strictly consistant */
+-        cfs_hash_for_each_bucket(ns->ns_rs_hash, &bd, i)
+-                res += cfs_hash_bd_count_get(&bd);
+-        return lprocfs_rd_u64(page, start, off, count, eof, &res);
++	struct ldlm_namespace	*ns  = m->private;
++	__u64			res = 0;
++	cfs_hash_bd_t		bd;
++	int			i;
++
++	/* result is not strictly consistant */
++	cfs_hash_for_each_bucket(ns->ns_rs_hash, &bd, i)
++		res += cfs_hash_bd_count_get(&bd);
++	return lprocfs_u64_seq_show(m, &res);
+ }
++LPROC_SEQ_FOPS_RO(lprocfs_ns_resources);
+ 
+-static int lprocfs_rd_ns_locks(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data)
++static int lprocfs_ns_locks_seq_show(struct seq_file *m, void *v)
+ {
+-        struct ldlm_namespace *ns = data;
+-        __u64                  locks;
++	struct ldlm_namespace	*ns = m->private;
++	__u64			locks;
+ 
+-        locks = lprocfs_stats_collector(ns->ns_stats, LDLM_NSS_LOCKS,
+-                                        LPROCFS_FIELDS_FLAGS_SUM);
+-        return lprocfs_rd_u64(page, start, off, count, eof, &locks);
++	locks = lprocfs_stats_collector(ns->ns_stats, LDLM_NSS_LOCKS,
++					LPROCFS_FIELDS_FLAGS_SUM);
++	return lprocfs_u64_seq_show(m, &locks);
+ }
++LPROC_SEQ_FOPS_RO(lprocfs_ns_locks);
+ 
+-static int lprocfs_rd_lru_size(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data)
++static int lprocfs_lru_size_seq_show(struct seq_file *m, void *v)
+ {
+-        struct ldlm_namespace *ns = data;
+-        __u32 *nr = &ns->ns_max_unused;
++	struct ldlm_namespace *ns = m->private;
++	__u32 *nr = &ns->ns_max_unused;
+ 
+-        if (ns_connect_lru_resize(ns))
+-                nr = &ns->ns_nr_unused;
+-        return lprocfs_rd_uint(page, start, off, count, eof, nr);
++	if (ns_connect_lru_resize(ns))
++		nr = &ns->ns_nr_unused;
++	return lprocfs_uint_seq_show(m, nr);
+ }
+ 
+-static int lprocfs_wr_lru_size(struct file *file, const char *buffer,
+-                               unsigned long count, void *data)
++static ssize_t lprocfs_lru_size_seq_write(struct file *file, const char *buffer,
++					  size_t count, loff_t *off)
+ {
+-        struct ldlm_namespace *ns = data;
++	struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private;
+         char dummy[MAX_STRING_SIZE + 1], *end;
+         unsigned long tmp;
+         int lru_resize;
+@@ -280,20 +286,20 @@ static int lprocfs_wr_lru_size(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(lprocfs_lru_size);
+ 
+-static int lprocfs_rd_elc(char *page, char **start, off_t off,
+-			  int count, int *eof, void *data)
++static int lprocfs_elc_seq_show(struct seq_file *m, void *v)
+ {
+-	struct ldlm_namespace *ns = data;
++	struct ldlm_namespace *ns = m->private;
+ 	unsigned int supp = ns_connect_cancelset(ns);
+ 
+-	return lprocfs_rd_uint(page, start, off, count, eof, &supp);
++	return lprocfs_uint_seq_show(m, &supp);
+ }
+ 
+-static int lprocfs_wr_elc(struct file *file, const char *buffer,
+-			       unsigned long count, void *data)
++static ssize_t lprocfs_elc_seq_write(struct file *file, const char *buffer,
++				     size_t count, loff_t *off)
+ {
+-	struct ldlm_namespace *ns = data;
++	struct ldlm_namespace *ns = ((struct seq_file *)file->private_data)->private;
+ 	unsigned int supp = -1;
+ 	int rc;
+ 
+@@ -307,31 +313,38 @@ static int lprocfs_wr_elc(struct file *file, const char *buffer,
+ 		ns->ns_connect_flags |= OBD_CONNECT_CANCELSET;
+ 	return count;
+ }
++LPROC_SEQ_FOPS(lprocfs_elc);
+ 
+ void ldlm_namespace_proc_unregister(struct ldlm_namespace *ns)
+ {
+-        struct proc_dir_entry *dir;
+-
+-        dir = lprocfs_srch(ldlm_ns_proc_dir, ldlm_ns_name(ns));
+-        if (dir == NULL) {
++	if (ns->ns_proc_dir_entry == NULL)
+                 CERROR("dlm namespace %s has no procfs dir?\n",
+                        ldlm_ns_name(ns));
+-        } else {
+-                lprocfs_remove(&dir);
+-        }
++	else
++		lprocfs_remove(&ns->ns_proc_dir_entry);
+ 
+-        if (ns->ns_stats != NULL)
+-                lprocfs_free_stats(&ns->ns_stats);
++	if (ns->ns_stats != NULL)
++		lprocfs_free_stats(&ns->ns_stats);
+ }
+ 
+ int ldlm_namespace_proc_register(struct ldlm_namespace *ns)
+ {
+-        struct lprocfs_vars lock_vars[2];
++	struct lprocfs_seq_vars lock_vars[2];
+         char lock_name[MAX_STRING_SIZE + 1];
++	struct proc_dir_entry *ns_pde;
+ 
+         LASSERT(ns != NULL);
+         LASSERT(ns->ns_rs_hash != NULL);
+ 
++	if (ns->ns_proc_dir_entry != NULL) {
++		ns_pde = ns->ns_proc_dir_entry;
++	} else {
++		ns_pde = proc_mkdir(ldlm_ns_name(ns), ldlm_ns_proc_dir);
++		if (ns_pde == NULL)
++			return -ENOMEM;
++		ns->ns_proc_dir_entry = ns_pde;
++	}
++
+         ns->ns_stats = lprocfs_alloc_stats(LDLM_NSS_LAST, 0);
+         if (ns->ns_stats == NULL)
+                 return -ENOMEM;
+@@ -344,88 +357,35 @@ int ldlm_namespace_proc_register(struct ldlm_namespace *ns)
+         memset(lock_vars, 0, sizeof(lock_vars));
+         lock_vars[0].name = lock_name;
+ 
+-        snprintf(lock_name, MAX_STRING_SIZE, "%s/resource_count",
+-                 ldlm_ns_name(ns));
+-        lock_vars[0].data = ns;
+-        lock_vars[0].read_fptr = lprocfs_rd_ns_resources;
+-        lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-        snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_count",
+-                 ldlm_ns_name(ns));
+-        lock_vars[0].data = ns;
+-        lock_vars[0].read_fptr = lprocfs_rd_ns_locks;
+-        lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-        if (ns_is_client(ns)) {
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_unused_count",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_nr_unused;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_size",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = ns;
+-                lock_vars[0].read_fptr = lprocfs_rd_lru_size;
+-                lock_vars[0].write_fptr = lprocfs_wr_lru_size;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/lru_max_age",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_max_age;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lock_vars[0].write_fptr = lprocfs_wr_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-		snprintf(lock_name, MAX_STRING_SIZE, "%s/early_lock_cancel",
+-			 ldlm_ns_name(ns));
+-		lock_vars[0].data = ns;
+-		lock_vars[0].read_fptr = lprocfs_rd_elc;
+-		lock_vars[0].write_fptr = lprocfs_wr_elc;
+-		lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-        } else {
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/ctime_age_limit",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_ctime_age_limit;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lock_vars[0].write_fptr = lprocfs_wr_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/lock_timeouts",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_timeouts;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/max_nolock_bytes",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_max_nolock_size;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lock_vars[0].write_fptr = lprocfs_wr_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/contention_seconds",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_contention_time;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lock_vars[0].write_fptr = lprocfs_wr_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/contended_locks",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_contended_locks;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lock_vars[0].write_fptr = lprocfs_wr_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-
+-                snprintf(lock_name, MAX_STRING_SIZE, "%s/max_parallel_ast",
+-                         ldlm_ns_name(ns));
+-                lock_vars[0].data = &ns->ns_max_parallel_ast;
+-                lock_vars[0].read_fptr = lprocfs_rd_uint;
+-                lock_vars[0].write_fptr = lprocfs_wr_uint;
+-                lprocfs_add_vars(ldlm_ns_proc_dir, lock_vars, 0);
+-        }
+-        return 0;
++	ldlm_add_var(&lock_vars[0], ns_pde, "resource_count", ns,
++		     &lprocfs_ns_resources_fops);
++	ldlm_add_var(&lock_vars[0], ns_pde, "lock_count", ns,
++		     &lprocfs_ns_locks_fops);
++
++	if (ns_is_client(ns)) {
++		ldlm_add_var(&lock_vars[0], ns_pde, "lock_unused_count",
++			     &ns->ns_nr_unused, &ldlm_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "lru_size", ns,
++			     &lprocfs_lru_size_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "lru_max_age",
++			     &ns->ns_max_age, &ldlm_rw_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "early_lock_cancel",
++			     ns, &lprocfs_elc_fops);
++	} else {
++		ldlm_add_var(&lock_vars[0], ns_pde, "ctime_age_limit",
++			     &ns->ns_ctime_age_limit, &ldlm_rw_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "lock_timeouts",
++			     &ns->ns_timeouts, &ldlm_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "max_nolock_bytes",
++			     &ns->ns_max_nolock_size, &ldlm_rw_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "contention_seconds",
++			     &ns->ns_contention_time, &ldlm_rw_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "contended_locks",
++			     &ns->ns_contended_locks, &ldlm_rw_uint_fops);
++		ldlm_add_var(&lock_vars[0], ns_pde, "max_parallel_ast",
++			     &ns->ns_max_parallel_ast, &ldlm_rw_uint_fops);
++	}
++	return 0;
+ }
+ #undef MAX_STRING_SIZE
+ #else /* LPROCFS */
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
new file mode 100644
index 0000000..0f01c97
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch
@@ -0,0 +1,174 @@
+From 917c26236db7d3684733f693ccc579c3dd41f26c Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 14 Nov 2013 09:48:08 -0500
+Subject: [PATCH 09/10] LU-3319 procfs: move ost proc handling over to seq_file
+
+Most of the current proc handling of the OST is already
+based on seq_file handling except for the reporting of
+the UUID of the OST. This patch moves this last piece
+so that the OST layer will use strictly proc files with
+seq_files.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Idf2bc014ada9292d545f761aa27c777412a66671
+---
+ lustre/ost/Makefile.in    |  2 +-
+ lustre/ost/lproc_ost.c    | 58 -----------------------------------------------
+ lustre/ost/ost_handler.c  | 21 +++++++++++------
+ lustre/ost/ost_internal.h |  9 --------
+ 4 files changed, 15 insertions(+), 75 deletions(-)
+ delete mode 100644 lustre/ost/lproc_ost.c
+
+diff --git a/lustre/ost/Makefile.in b/lustre/ost/Makefile.in
+index 6bd8be3..bae023e 100644
+--- a/lustre/ost/Makefile.in
++++ b/lustre/ost/Makefile.in
+@@ -1,5 +1,5 @@
+ MODULES := ost
+-ost-objs := ost_handler.o lproc_ost.o
++ost-objs := ost_handler.o
+ 
+ EXTRA_DIST = $(ost-objs:%.o=%.c) ost_internal.h
+ 
+diff --git a/lustre/ost/lproc_ost.c b/lustre/ost/lproc_ost.c
+deleted file mode 100644
+index a978c51..0000000
+--- a/lustre/ost/lproc_ost.c
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/*
+- * GPL HEADER START
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 only,
+- * as published by the Free Software Foundation.
+- *
+- * 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 version 2 for more details (a copy is included
+- * in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU General Public License
+- * version 2 along with this program; If not, see
+- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
+- *
+- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+- * CA 95054 USA or visit www.sun.com if you need additional information or
+- * have any questions.
+- *
+- * GPL HEADER END
+- */
+-/*
+- * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
+- * Use is subject to license terms.
+- */
+-/*
+- * This file is part of Lustre, http://www.lustre.org/
+- * Lustre is a trademark of Sun Microsystems, Inc.
+- */
+-#define DEBUG_SUBSYSTEM S_OST
+-
+-#include <obd_class.h>
+-#include <lprocfs_status.h>
+-#include <linux/seq_file.h>
+-#include "ost_internal.h"
+-
+-#ifdef LPROCFS
+-static struct lprocfs_vars lprocfs_ost_obd_vars[] = {
+-        { "uuid",            lprocfs_rd_uuid,   0, 0 },
+-        { 0 }
+-};
+-
+-static struct lprocfs_vars lprocfs_ost_module_vars[] = {
+-        { "num_refs",       lprocfs_rd_numrefs, 0, 0 },
+-        { 0 }
+-};
+-
+-void lprocfs_ost_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-    lvars->module_vars  = lprocfs_ost_module_vars;
+-    lvars->obd_vars     = lprocfs_ost_obd_vars;
+-}
+-
+-#endif /* LPROCFS */
+diff --git a/lustre/ost/ost_handler.c b/lustre/ost/ost_handler.c
+index 662a489..7567acf 100644
+--- a/lustre/ost/ost_handler.c
++++ b/lustre/ost/ost_handler.c
+@@ -538,12 +538,20 @@ static int ost_io_hpreq_handler(struct ptlrpc_request *req)
+ 
+ static struct cfs_cpt_table	*ost_io_cptable;
+ 
++#ifdef LPROCFS
++LPROC_SEQ_FOPS_RO_TYPE(ost, uuid);
++
++static struct lprocfs_seq_vars lprocfs_ost_obd_vars[] = {
++	{ "uuid",	&ost_uuid_fops	},
++	{ 0 }
++};
++#endif /* LPROCFS */
++
+ /* Sigh - really, this is an OSS, the _server_, not the _target_ */
+ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
+ {
+ 	static struct ptlrpc_service_conf	svc_conf;
+ 	struct ost_obd *ost = &obd->u.ost;
+-	struct lprocfs_static_vars lvars;
+ 	nodemask_t		*mask;
+ 	int rc;
+ 	ENTRY;
+@@ -552,9 +560,10 @@ static int ost_setup(struct obd_device *obd, struct lustre_cfg* lcfg)
+         if (rc)
+                 RETURN(rc);
+ 
+-        lprocfs_ost_init_vars(&lvars);
+-        lprocfs_obd_setup(obd, lvars.obd_vars);
+-
++#ifdef LPROCFS
++	obd->obd_vars = lprocfs_ost_obd_vars;
++	lprocfs_seq_obd_setup(obd);
++#endif
+ 	mutex_init(&ost->ost_health_mutex);
+ 
+ 	svc_conf = (typeof(svc_conf)) {
+@@ -877,15 +886,13 @@ static struct obd_ops ost_obd_ops = {
+ 
+ static int __init ost_init(void)
+ {
+-	struct lprocfs_static_vars lvars;
+ 	int rc;
+ 
+ 	ENTRY;
+ 
+-        lprocfs_ost_init_vars(&lvars);
+ 	rc = class_register_type(&ost_obd_ops, NULL, NULL,
+ #ifndef HAVE_ONLY_PROCFS_SEQ
+-				lvars.module_vars,
++				NULL,
+ #endif
+ 				LUSTRE_OSS_NAME, NULL);
+ 
+diff --git a/lustre/ost/ost_internal.h b/lustre/ost/ost_internal.h
+index 8b475a1..63c8415 100644
+--- a/lustre/ost/ost_internal.h
++++ b/lustre/ost/ost_internal.h
+@@ -39,13 +39,4 @@
+ 
+ #define OSS_SERVICE_WATCHDOG_FACTOR 2
+ 
+-#ifdef LPROCFS
+-void lprocfs_ost_init_vars(struct lprocfs_static_vars *lvars);
+-#else
+-static void lprocfs_ost_init_vars(struct lprocfs_static_vars *lvars)
+-{
+-        memset(lvars, 0, sizeof(*lvars));
+-}
+-#endif
+-
+ #endif /* OST_INTERNAL_H */
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index e19d1d4..610c755 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -39,6 +39,9 @@ PATCHES=(
 	"${FILESDIR}/0004-LU-3974-llite-use-new-struct-dir_context.patch"
 	"${FILESDIR}/0005-LU-3974-llite-invalidatepage-api-changed.patch"
 	"${FILESDIR}/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch"
+	"${FILESDIR}/0007-LU-3319-procfs-move-lmv-proc-handling-over-to-seq_fi.patch"
+	"${FILESDIR}/0008-LU-3319-procfs-move-ldlm-proc-handling-over-to-seq_f.patch"
+	"${FILESDIR}/0009-LU-3319-procfs-move-ost-proc-handling-over-to-seq_fi.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-12-19 13:23 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-12-19 13:23 UTC (permalink / raw
  To: gentoo-commits

commit:     fcb8aeff2dd76096a29c89a5ccffc999eb41f803
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Dec 19 13:22:38 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Dec 19 13:22:38 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=fcb8aeff

Fix flag filtering and build

Package-Manager: portage-2.2.7
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    9 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    2 +-
 ...3-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch |    2 +-
 ...74-llite-dentry-d_compare-changes-in-3.11.patch |    2 +-
 ...-LU-3974-llite-use-new-struct-dir_context.patch |    2 +-
 ...-LU-3974-llite-invalidatepage-api-changed.patch |    2 +-
 ...cfs-move-llite-proc-handling-over-to-seq_.patch | 1333 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    5 +-
 8 files changed, 1351 insertions(+), 6 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index dcd6ef7..5ca35a5 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,15 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch,
+  files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch,
+  files/0004-LU-3974-llite-use-new-struct-dir_context.patch,
+  files/0005-LU-3974-llite-invalidatepage-api-changed.patch, lustre-9999.ebuild:
+  Fix flag filtering and build
+
   19 Dec 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Dissalow unsafe flags for kernel build
 

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 2b3fa1a..8ace887 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From a607b37a64f797b766825ccb6f41176685cd843f Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 1/5] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 1/6] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
index 473d378..975d6a9 100644
--- a/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
+++ b/sys-cluster/lustre/files/0002-LU-3373-ldiskfs-ldiskfs-patches-for-3.11.1-fc19.patch
@@ -1,7 +1,7 @@
 From e53207df22261a635315a62f1405eb8c7b700963 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 5 Dec 2013 09:05:22 -0500
-Subject: [PATCH 2/5] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
+Subject: [PATCH 2/6] LU-3373 ldiskfs: ldiskfs patches for 3.11.1 fc19
 
 ldiskfs patches
 

diff --git a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
index 72698fc..7034391 100644
--- a/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
+++ b/sys-cluster/lustre/files/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch
@@ -1,7 +1,7 @@
 From 18cfd561fae3b2eac663b51f8e5147b59c711af7 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Wed, 11 Dec 2013 10:29:41 -0500
-Subject: [PATCH 3/5] LU-3974 llite: dentry d_compare changes in 3.11
+Subject: [PATCH 3/6] LU-3974 llite: dentry d_compare changes in 3.11
 
 In the linux 3.11 kernel the d_compare function has
 removed passing in any struct inode arguments. This

diff --git a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
index b9714df..f50491f 100644
--- a/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
+++ b/sys-cluster/lustre/files/0004-LU-3974-llite-use-new-struct-dir_context.patch
@@ -1,7 +1,7 @@
 From 82f692de87cb6c7db8f050b3201d23f4852a404c Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Mon, 2 Dec 2013 12:05:14 -0500
-Subject: [PATCH 4/5] LU-3974 llite: use new struct dir_context
+Subject: [PATCH 4/6] LU-3974 llite: use new struct dir_context
 
 The readdir and nfs code over time has added more
 parameters to be passed to be processed. For the 3.11

diff --git a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
index 4e13bfe..823c159 100644
--- a/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
+++ b/sys-cluster/lustre/files/0005-LU-3974-llite-invalidatepage-api-changed.patch
@@ -1,7 +1,7 @@
 From 2725bc0f3bc5fa7706b9a475ccb0c191f21ca884 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 24 Sep 2013 12:29:47 -0400
-Subject: [PATCH 5/5] LU-3974 llite: invalidatepage api changed
+Subject: [PATCH 5/6] LU-3974 llite: invalidatepage api changed
 
 Until recently invalidating pages from the buffer cache
 was dependent only on the page passed in and the start

diff --git a/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
new file mode 100644
index 0000000..427e088
--- /dev/null
+++ b/sys-cluster/lustre/files/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch
@@ -0,0 +1,1333 @@
+From 01ce737ef8bba37c904d79f3aabe88a4ead20b74 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 5 Dec 2013 13:53:37 -0500
+Subject: [PATCH 6/6] LU-3319 procfs: move llite proc handling over to seq_file
+
+For lustre clients a special abstract layer so a lustre
+client can be mounted. In order to support 3.10+ kernels
+this client code being the llite,vvp,and clio layers proc
+proc handling has been ported to using seq_files only.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: Id2ac0956dbdf586ab1200e2edb00d489c15c5d50
+---
+ lustre/include/cl_object.h    |   4 +-
+ lustre/include/lu_object.h    |   1 +
+ lustre/llite/llite_internal.h |   7 +-
+ lustre/llite/llite_lib.c      |  40 ++-
+ lustre/llite/lproc_llite.c    | 611 +++++++++++++++++++++---------------------
+ lustre/llite/super25.c        |   2 +-
+ lustre/llite/vvp_dev.c        |   7 +-
+ lustre/obdclass/cl_object.c   |  93 +++----
+ lustre/obdclass/lu_object.c   |  22 ++
+ 9 files changed, 402 insertions(+), 385 deletions(-)
+
+diff --git a/lustre/include/cl_object.h b/lustre/include/cl_object.h
+index 0aedd62..9735671 100644
+--- a/lustre/include/cl_object.h
++++ b/lustre/include/cl_object.h
+@@ -2553,8 +2553,6 @@ struct cache_stats {
+ 
+ /** These are not exported so far */
+ void cache_stats_init (struct cache_stats *cs, const char *name);
+-int  cache_stats_print(const struct cache_stats *cs,
+-                       char *page, int count, int header);
+ 
+ /**
+  * Client-side site. This represents particular client stack. "Global"
+@@ -2586,7 +2584,7 @@ void cl_stack_fini(const struct lu_env *env, struct cl_device *cl);
+  * Output client site statistical counters into a buffer. Suitable for
+  * ll_rd_*()-style functions.
+  */
+-int cl_site_stats_print(const struct cl_site *s, char *page, int count);
++int cl_site_stats_print(const struct cl_site *site, struct seq_file *m);
+ 
+ /**
+  * \name helpers
+diff --git a/lustre/include/lu_object.h b/lustre/include/lu_object.h
+index 94c0b47..103debd 100644
+--- a/lustre/include/lu_object.h
++++ b/lustre/include/lu_object.h
+@@ -1279,6 +1279,7 @@ int  lu_env_refill_by_tags(struct lu_env *env, __u32 ctags, __u32 stags);
+  * Output site statistical counters into a buffer. Suitable for
+  * ll_rd_*()-style functions.
+  */
++int lu_site_stats_seq_print(const struct lu_site *s, struct seq_file *m);
+ int lu_site_stats_print(const struct lu_site *s, char *page, int count);
+ 
+ /**
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index 283e106..44f6522 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -706,15 +706,16 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+                                 struct super_block *sb, char *osc, char *mdc);
+ void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi);
+ void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count);
+-void lprocfs_llite_init_vars(struct lprocfs_static_vars *lvars);
++int ll_process_proc_param(struct lustre_cfg *lcfg, unsigned long *sb);
+ #else
+ static inline int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+                         struct super_block *sb, char *osc, char *mdc){return 0;}
+ static inline void lprocfs_unregister_mountpoint(struct ll_sb_info *sbi) {}
+ static void ll_stats_ops_tally(struct ll_sb_info *sbi, int op, int count) {}
+-static void lprocfs_llite_init_vars(struct lprocfs_static_vars *lvars)
++
++static int ll_process_proc_param(struct lustre_cfg *lcfg, unsigned long *sb)
+ {
+-        memset(lvars, 0, sizeof(*lvars));
++	return 0;
+ }
+ #endif
+ 
+diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
+index 9d9e432..86f07c9 100644
+--- a/lustre/llite/llite_lib.c
++++ b/lustre/llite/llite_lib.c
+@@ -2277,31 +2277,23 @@ out_statfs:
+ 
+ int ll_process_config(struct lustre_cfg *lcfg)
+ {
+-        char *ptr;
+-        void *sb;
+-        struct lprocfs_static_vars lvars;
+-        unsigned long x;
+-        int rc = 0;
++	struct super_block *sb;
++	unsigned long x;
++	char *ptr;
+ 
+-        lprocfs_llite_init_vars(&lvars);
+-
+-        /* The instance name contains the sb: lustre-client-aacfe000 */
+-        ptr = strrchr(lustre_cfg_string(lcfg, 0), '-');
+-        if (!ptr || !*(++ptr))
+-                return -EINVAL;
+-        if (sscanf(ptr, "%lx", &x) != 1)
+-                return -EINVAL;
+-        sb = (void *)x;
+-        /* This better be a real Lustre superblock! */
+-        LASSERT(s2lsi((struct super_block *)sb)->lsi_lmd->lmd_magic == LMD_MAGIC);
+-
+-        /* Note we have not called client_common_fill_super yet, so
+-           proc fns must be able to handle that! */
+-        rc = class_process_proc_param(PARAM_LLITE, lvars.obd_vars,
+-                                      lcfg, sb);
+-        if (rc > 0)
+-                rc = 0;
+-        return(rc);
++	/* The instance name contains the sb: lustre-client-aacfe000 */
++	ptr = strrchr(lustre_cfg_string(lcfg, 0), '-');
++	if (!ptr || !*(++ptr))
++		return -EINVAL;
++	if (sscanf(ptr, "%lx", &x) != 1)
++		return -EINVAL;
++	sb = (struct super_block *)x;
++	/* This better be a real Lustre superblock! */
++	LASSERT(s2lsi(sb)->lsi_lmd->lmd_magic == LMD_MAGIC);
++
++	/* Note we have not called client_common_fill_super yet, so
++	   proc fns must be able to handle that! */
++	return ll_process_proc_param(lcfg, &x);
+ }
+ 
+ /* this function prepares md_op_data hint for passing ot down to MD stack. */
+diff --git a/lustre/llite/lproc_llite.c b/lustre/llite/lproc_llite.c
+index 2686924..7793a63 100644
+--- a/lustre/llite/lproc_llite.c
++++ b/lustre/llite/lproc_llite.c
+@@ -37,8 +37,8 @@
+ 
+ #include <linux/version.h>
+ #include <lustre_lite.h>
++#include <lustre_param.h>
+ #include <lprocfs_status.h>
+-#include <linux/seq_file.h>
+ #include <obd_support.h>
+ 
+ #include "llite_internal.h"
+@@ -52,10 +52,9 @@ struct file_operations ll_rw_extents_stats_fops;
+ struct file_operations ll_rw_extents_stats_pp_fops;
+ struct file_operations ll_rw_offset_stats_fops;
+ 
+-static int ll_rd_blksize(char *page, char **start, off_t off, int count,
+-                         int *eof, void *data)
++static int ll_blksize_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
++	struct super_block *sb = m->private;
+         struct obd_statfs osfs;
+         int rc;
+ 
+@@ -63,18 +62,15 @@ static int ll_rd_blksize(char *page, char **start, off_t off, int count,
+         rc = ll_statfs_internal(sb, &osfs,
+                                 cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
+                                 OBD_STATFS_NODELAY);
+-        if (!rc) {
+-              *eof = 1;
+-              rc = snprintf(page, count, "%u\n", osfs.os_bsize);
+-        }
+-
++	if (!rc)
++		rc = seq_printf(m, "%u\n", osfs.os_bsize);
+         return rc;
+ }
++LPROC_SEQ_FOPS_RO(ll_blksize);
+ 
+-static int ll_rd_kbytestotal(char *page, char **start, off_t off, int count,
+-                             int *eof, void *data)
++static int ll_kbytestotal_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
++	struct super_block *sb = m->private;
+         struct obd_statfs osfs;
+         int rc;
+ 
+@@ -89,17 +85,15 @@ static int ll_rd_kbytestotal(char *page, char **start, off_t off, int count,
+                 while (blk_size >>= 1)
+                         result <<= 1;
+ 
+-                *eof = 1;
+-                rc = snprintf(page, count, LPU64"\n", result);
++		rc = seq_printf(m, LPU64"\n", result);
+         }
+         return rc;
+-
+ }
++LPROC_SEQ_FOPS_RO(ll_kbytestotal);
+ 
+-static int ll_rd_kbytesfree(char *page, char **start, off_t off, int count,
+-                            int *eof, void *data)
++static int ll_kbytesfree_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
++	struct super_block *sb = m->private;
+         struct obd_statfs osfs;
+         int rc;
+ 
+@@ -114,16 +108,15 @@ static int ll_rd_kbytesfree(char *page, char **start, off_t off, int count,
+                 while (blk_size >>= 1)
+                         result <<= 1;
+ 
+-                *eof = 1;
+-                rc = snprintf(page, count, LPU64"\n", result);
++		rc = seq_printf(m, LPU64"\n", result);
+         }
+         return rc;
+ }
++LPROC_SEQ_FOPS_RO(ll_kbytesfree);
+ 
+-static int ll_rd_kbytesavail(char *page, char **start, off_t off, int count,
+-                             int *eof, void *data)
++static int ll_kbytesavail_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
++	struct super_block *sb = m->private;
+         struct obd_statfs osfs;
+         int rc;
+ 
+@@ -138,16 +131,15 @@ static int ll_rd_kbytesavail(char *page, char **start, off_t off, int count,
+                 while (blk_size >>= 1)
+                         result <<= 1;
+ 
+-                *eof = 1;
+-                rc = snprintf(page, count, LPU64"\n", result);
++		rc = seq_printf(m, LPU64"\n", result);
+         }
+         return rc;
+ }
++LPROC_SEQ_FOPS_RO(ll_kbytesavail);
+ 
+-static int ll_rd_filestotal(char *page, char **start, off_t off, int count,
+-                            int *eof, void *data)
++static int ll_filestotal_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
++	struct super_block *sb = m->private;
+         struct obd_statfs osfs;
+         int rc;
+ 
+@@ -155,86 +147,73 @@ static int ll_rd_filestotal(char *page, char **start, off_t off, int count,
+         rc = ll_statfs_internal(sb, &osfs,
+                                 cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
+                                 OBD_STATFS_NODELAY);
+-        if (!rc) {
+-                 *eof = 1;
+-                 rc = snprintf(page, count, LPU64"\n", osfs.os_files);
+-        }
+-        return rc;
++	if (!rc)
++		rc = seq_printf(m, LPU64"\n", osfs.os_files);
++	return rc;
+ }
++LPROC_SEQ_FOPS_RO(ll_filestotal);
+ 
+-static int ll_rd_filesfree(char *page, char **start, off_t off, int count,
+-                           int *eof, void *data)
++static int ll_filesfree_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
+-        struct obd_statfs osfs;
+-        int rc;
+-
+-        LASSERT(sb != NULL);
+-        rc = ll_statfs_internal(sb, &osfs,
+-                                cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
+-                                OBD_STATFS_NODELAY);
+-        if (!rc) {
+-                 *eof = 1;
+-                 rc = snprintf(page, count, LPU64"\n", osfs.os_ffree);
+-        }
+-        return rc;
++	struct super_block *sb = m->private;
++	struct obd_statfs osfs;
++	int rc;
+ 
++	LASSERT(sb != NULL);
++	rc = ll_statfs_internal(sb, &osfs,
++				cfs_time_shift_64(-OBD_STATFS_CACHE_SECONDS),
++				OBD_STATFS_NODELAY);
++	if (!rc)
++		rc = seq_printf(m, LPU64"\n", osfs.os_ffree);
++	return rc;
+ }
++LPROC_SEQ_FOPS_RO(ll_filesfree);
+ 
+-static int ll_rd_client_type(char *page, char **start, off_t off, int count,
+-                            int *eof, void *data)
++static int ll_client_type_seq_show(struct seq_file *m, void *v)
+ {
+-        struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)data);
+-        int rc;
+-
+-        LASSERT(sbi != NULL);
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
++	int rc;
+ 
+-        *eof = 1;
+-        if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
+-                rc = snprintf(page, count, "remote client\n");
+-        else
+-                rc = snprintf(page, count, "local client\n");
++	LASSERT(sbi != NULL);
+ 
+-        return rc;
++	if (sbi->ll_flags & LL_SBI_RMT_CLIENT)
++		rc = seq_printf(m, "remote client\n");
++	else
++		rc = seq_printf(m, "local client\n");
++	return rc;
+ }
++LPROC_SEQ_FOPS_RO(ll_client_type);
+ 
+-static int ll_rd_fstype(char *page, char **start, off_t off, int count,
+-                        int *eof, void *data)
++static int ll_fstype_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block*)data;
++	struct super_block *sb = m->private;
+ 
+-        LASSERT(sb != NULL);
+-        *eof = 1;
+-        return snprintf(page, count, "%s\n", sb->s_type->name);
++	LASSERT(sb != NULL);
++	return seq_printf(m, "%s\n", sb->s_type->name);
+ }
++LPROC_SEQ_FOPS_RO(ll_fstype);
+ 
+-static int ll_rd_sb_uuid(char *page, char **start, off_t off, int count,
+-                         int *eof, void *data)
++static int ll_sb_uuid_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = (struct super_block *)data;
++	struct super_block *sb = m->private;
+ 
+-        LASSERT(sb != NULL);
+-        *eof = 1;
+-        return snprintf(page, count, "%s\n", ll_s2sbi(sb)->ll_sb_uuid.uuid);
++	LASSERT(sb != NULL);
++	return seq_printf(m, "%s\n", ll_s2sbi(sb)->ll_sb_uuid.uuid);
+ }
++LPROC_SEQ_FOPS_RO(ll_sb_uuid);
+ 
+-static int ll_rd_xattr_cache(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int ll_xattr_cache_seq_show(struct seq_file *m, void *v)
+ {
+-	struct super_block *sb = (struct super_block *)data;
+-	struct ll_sb_info *sbi = ll_s2sbi(sb);
+-	int rc;
+-
+-	rc = snprintf(page, count, "%u\n", sbi->ll_xattr_cache_enabled);
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
+ 
+-	return rc;
++	return seq_printf(m, "%u\n", sbi->ll_xattr_cache_enabled);
+ }
+ 
+-static int ll_wr_xattr_cache(struct file *file, const char *buffer,
+-				unsigned long count, void *data)
++static ssize_t ll_xattr_cache_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-	struct super_block *sb = (struct super_block *)data;
+-	struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
+ 	int val, rc;
+ 
+ 	rc = lprocfs_write_helper(buffer, count, &val);
+@@ -251,24 +230,23 @@ static int ll_wr_xattr_cache(struct file *file, const char *buffer,
+ 
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ll_xattr_cache);
+ 
+-static int ll_rd_site_stats(char *page, char **start, off_t off,
+-                            int count, int *eof, void *data)
++static int ll_site_stats_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-
+-        /*
+-         * See description of statistical counters in struct cl_site, and
+-         * struct lu_site.
+-         */
+-        return cl_site_stats_print(lu2cl_site(ll_s2sbi(sb)->ll_site),
+-                                   page, count);
++	struct super_block *sb = m->private;
++
++	/*
++	 * See description of statistical counters in struct cl_site, and
++	 * struct lu_site.
++	 */
++	return cl_site_stats_print(lu2cl_site(ll_s2sbi(sb)->ll_site), m);
+ }
++LPROC_SEQ_FOPS_RO(ll_site_stats);
+ 
+-static int ll_rd_max_readahead_mb(char *page, char **start, off_t off,
+-                                   int count, int *eof, void *data)
++static int ll_max_readahead_mb_seq_show(struct seq_file *m, void *v)
+ {
+-	struct super_block *sb = data;
++	struct super_block *sb = m->private;
+ 	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 	long pages_number;
+ 	int mult;
+@@ -278,14 +256,15 @@ static int ll_rd_max_readahead_mb(char *page, char **start, off_t off,
+ 	spin_unlock(&sbi->ll_lock);
+ 
+ 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
+-	return lprocfs_read_frac_helper(page, count, pages_number, mult);
++	return lprocfs_seq_read_frac_helper(m, pages_number, mult);
+ }
+ 
+-static int ll_wr_max_readahead_mb(struct file *file, const char *buffer,
+-				  unsigned long count, void *data)
++static ssize_t
++ll_max_readahead_mb_seq_write(struct file *file, const char *buffer,
++			      size_t count, loff_t *off)
+ {
+-	struct super_block *sb = data;
+-	struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
+ 	int mult, rc, pages_number;
+ 
+ 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
+@@ -303,14 +282,13 @@ static int ll_wr_max_readahead_mb(struct file *file, const char *buffer,
+ 	spin_lock(&sbi->ll_lock);
+ 	sbi->ll_ra_info.ra_max_pages = pages_number;
+ 	spin_unlock(&sbi->ll_lock);
+-
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ll_max_readahead_mb);
+ 
+-static int ll_rd_max_readahead_per_file_mb(char *page, char **start, off_t off,
+-                                           int count, int *eof, void *data)
++static int ll_max_readahead_per_file_mb_seq_show(struct seq_file *m, void *v)
+ {
+-	struct super_block *sb = data;
++	struct super_block *sb = m->private;
+ 	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 	long pages_number;
+ 	int mult;
+@@ -320,15 +298,16 @@ static int ll_rd_max_readahead_per_file_mb(char *page, char **start, off_t off,
+ 	spin_unlock(&sbi->ll_lock);
+ 
+ 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
+-	return lprocfs_read_frac_helper(page, count, pages_number, mult);
++	return lprocfs_seq_read_frac_helper(m, pages_number, mult);
+ }
+ 
+-static int ll_wr_max_readahead_per_file_mb(struct file *file, const char *buffer,
+-                                          unsigned long count, void *data)
++static ssize_t
++ll_max_readahead_per_file_mb_seq_write(struct file *file, const char *buffer,
++				       size_t count, loff_t *off)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
+-        int mult, rc, pages_number;
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
++	int mult, rc, pages_number;
+ 
+ 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
+         rc = lprocfs_write_frac_helper(buffer, count, &pages_number, mult);
+@@ -346,14 +325,13 @@ static int ll_wr_max_readahead_per_file_mb(struct file *file, const char *buffer
+ 	spin_lock(&sbi->ll_lock);
+ 	sbi->ll_ra_info.ra_max_pages_per_file = pages_number;
+ 	spin_unlock(&sbi->ll_lock);
+-
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ll_max_readahead_per_file_mb);
+ 
+-static int ll_rd_max_read_ahead_whole_mb(char *page, char **start, off_t off,
+-                                         int count, int *eof, void *data)
++static int ll_max_read_ahead_whole_mb_seq_show(struct seq_file *m, void *v)
+ {
+-	struct super_block *sb = data;
++	struct super_block *sb = m->private;
+ 	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 	long pages_number;
+ 	int mult;
+@@ -363,14 +341,15 @@ static int ll_rd_max_read_ahead_whole_mb(char *page, char **start, off_t off,
+ 	spin_unlock(&sbi->ll_lock);
+ 
+ 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
+-	return lprocfs_read_frac_helper(page, count, pages_number, mult);
++	return lprocfs_seq_read_frac_helper(m, pages_number, mult);
+ }
+ 
+-static int ll_wr_max_read_ahead_whole_mb(struct file *file, const char *buffer,
+-					 unsigned long count, void *data)
++static ssize_t
++ll_max_read_ahead_whole_mb_seq_write(struct file *file, const char *buffer,
++				     size_t count, loff_t *off)
+ {
+-	struct super_block *sb = data;
+-	struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
+ 	int mult, rc, pages_number;
+ 
+ 	mult = 1 << (20 - PAGE_CACHE_SHIFT);
+@@ -392,24 +371,22 @@ static int ll_wr_max_read_ahead_whole_mb(struct file *file, const char *buffer,
+ 	spin_lock(&sbi->ll_lock);
+ 	sbi->ll_ra_info.ra_max_read_ahead_whole_pages = pages_number;
+ 	spin_unlock(&sbi->ll_lock);
+-
+ 	return count;
+ }
++LPROC_SEQ_FOPS(ll_max_read_ahead_whole_mb);
+ 
+-static int ll_rd_max_cached_mb(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data)
++static int ll_max_cached_mb_seq_show(struct seq_file *m, void *v)
+ {
+-	struct super_block     *sb    = data;
++	struct super_block     *sb    = m->private;
+ 	struct ll_sb_info      *sbi   = ll_s2sbi(sb);
+ 	struct cl_client_cache *cache = &sbi->ll_cache;
+ 	int shift = 20 - PAGE_CACHE_SHIFT;
+ 	int max_cached_mb;
+ 	int unused_mb;
+ 
+-	*eof = 1;
+ 	max_cached_mb = cache->ccc_lru_max >> shift;
+ 	unused_mb = cfs_atomic_read(&cache->ccc_lru_left) >> shift;
+-	return snprintf(page, count,
++	return seq_printf(m,
+ 			"users: %d\n"
+ 			"max_cached_mb: %d\n"
+ 			"used_mb: %d\n"
+@@ -422,16 +399,17 @@ static int ll_rd_max_cached_mb(char *page, char **start, off_t off,
+ 			cache->ccc_lru_shrinkers);
+ }
+ 
+-static int ll_wr_max_cached_mb(struct file *file, const char *buffer,
+-				unsigned long nob, void *data)
++static ssize_t
++ll_max_cached_mb_seq_write(struct file *file, const char *buffer,
++			   size_t count, loff_t *off)
+ {
+-	struct super_block *sb = data;
++	struct seq_file *m = file->private_data;
++	struct super_block *sb = m->private;
+ 	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 	struct cl_client_cache *cache = &sbi->ll_cache;
+ 	struct lu_env *env;
+ 	int refcheck;
+ 	int mult, rc, pages_number;
+-	size_t count = nob;
+ 	int diff = 0;
+ 	int nrpages = 0;
+ 	ENTRY;
+@@ -512,22 +490,21 @@ out:
+ 	}
+ 	return rc;
+ }
++LPROC_SEQ_FOPS(ll_max_cached_mb);
+ 
+-static int ll_rd_checksum(char *page, char **start, off_t off,
+-                          int count, int *eof, void *data)
++static int ll_checksum_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct super_block *sb = m->private;
++	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 
+-        return snprintf(page, count, "%u\n",
+-                        (sbi->ll_flags & LL_SBI_CHECKSUM) ? 1 : 0);
++	return seq_printf(m, "%u\n", (sbi->ll_flags & LL_SBI_CHECKSUM) ? 1 : 0);
+ }
+ 
+-static int ll_wr_checksum(struct file *file, const char *buffer,
+-                          unsigned long count, void *data)
++static ssize_t ll_checksum_seq_write(struct file *file, const char *buffer,
++				     size_t count, loff_t *off)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
+         int val, rc;
+ 
+         if (!sbi->ll_dt_exp)
+@@ -549,19 +526,20 @@ static int ll_wr_checksum(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(ll_checksum);
+ 
+-static int ll_rd_max_rw_chunk(char *page, char **start, off_t off,
+-                          int count, int *eof, void *data)
++static int ll_max_rw_chunk_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
++	struct super_block *sb = m->private;
+ 
+-        return snprintf(page, count, "%lu\n", ll_s2sbi(sb)->ll_max_rw_chunk);
++	return seq_printf(m, "%lu\n", ll_s2sbi(sb)->ll_max_rw_chunk);
+ }
+ 
+-static int ll_wr_max_rw_chunk(struct file *file, const char *buffer,
+-                          unsigned long count, void *data)
++static ssize_t ll_max_rw_chunk_seq_write(struct file *file, const char *buffer,
++					 size_t count, loff_t *off)
+ {
+-        struct super_block *sb = data;
++	struct seq_file *m = file->private_data;
++	struct super_block *sb = m->private;
+         int rc, val;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+@@ -570,27 +548,26 @@ static int ll_wr_max_rw_chunk(struct file *file, const char *buffer,
+         ll_s2sbi(sb)->ll_max_rw_chunk = val;
+         return count;
+ }
++LPROC_SEQ_FOPS(ll_max_rw_chunk);
+ 
+-static int ll_rd_track_id(char *page, int count, void *data,
+-                          enum stats_track_type type)
++static int ll_rd_track_id(struct seq_file *m, enum stats_track_type type)
+ {
+-        struct super_block *sb = data;
+-
+-        if (ll_s2sbi(sb)->ll_stats_track_type == type) {
+-                return snprintf(page, count, "%d\n",
+-                                ll_s2sbi(sb)->ll_stats_track_id);
++	struct super_block *sb = m->private;
+ 
+-        } else if (ll_s2sbi(sb)->ll_stats_track_type == STATS_TRACK_ALL) {
+-                return snprintf(page, count, "0 (all)\n");
+-        } else {
+-                return snprintf(page, count, "untracked\n");
+-        }
++	if (ll_s2sbi(sb)->ll_stats_track_type == type) {
++		return seq_printf(m, "%d\n",
++				  ll_s2sbi(sb)->ll_stats_track_id);
++	} else if (ll_s2sbi(sb)->ll_stats_track_type == STATS_TRACK_ALL) {
++		return seq_printf(m, "0 (all)\n");
++	} else {
++		return seq_printf(m, "untracked\n");
++	}
+ }
+ 
+ static int ll_wr_track_id(const char *buffer, unsigned long count, void *data,
+-                          enum stats_track_type type)
++			  enum stats_track_type type)
+ {
+-        struct super_block *sb = data;
++	struct super_block *sb = data;
+         int rc, pid;
+ 
+         rc = lprocfs_write_helper(buffer, count, &pid);
+@@ -605,57 +582,59 @@ static int ll_wr_track_id(const char *buffer, unsigned long count, void *data,
+         return count;
+ }
+ 
+-static int ll_rd_track_pid(char *page, char **start, off_t off,
+-                          int count, int *eof, void *data)
++static int ll_track_pid_seq_show(struct seq_file *m, void *v)
+ {
+-        return (ll_rd_track_id(page, count, data, STATS_TRACK_PID));
++	return ll_rd_track_id(m, STATS_TRACK_PID);
+ }
+ 
+-static int ll_wr_track_pid(struct file *file, const char *buffer,
+-                          unsigned long count, void *data)
++static ssize_t ll_track_pid_seq_write(struct file *file, const char *buffer,
++				      size_t count, loff_t *off)
+ {
+-        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_PID));
++	struct seq_file *seq = file->private_data;
++	return ll_wr_track_id(buffer, count, seq->private, STATS_TRACK_PID);
+ }
++LPROC_SEQ_FOPS(ll_track_pid);
+ 
+-static int ll_rd_track_ppid(char *page, char **start, off_t off,
+-                          int count, int *eof, void *data)
++static int ll_track_ppid_seq_show(struct seq_file *m, void *v)
+ {
+-        return (ll_rd_track_id(page, count, data, STATS_TRACK_PPID));
++	return ll_rd_track_id(m, STATS_TRACK_PPID);
+ }
+ 
+-static int ll_wr_track_ppid(struct file *file, const char *buffer,
+-                          unsigned long count, void *data)
++static ssize_t ll_track_ppid_seq_write(struct file *file, const char *buffer,
++				       size_t count, loff_t *off)
+ {
+-        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_PPID));
++	struct seq_file *seq = file->private_data;
++	return ll_wr_track_id(buffer, count, seq->private, STATS_TRACK_PPID);
+ }
++LPROC_SEQ_FOPS(ll_track_ppid);
+ 
+-static int ll_rd_track_gid(char *page, char **start, off_t off,
+-                          int count, int *eof, void *data)
++static int ll_track_gid_seq_show(struct seq_file *m, void *v)
+ {
+-        return (ll_rd_track_id(page, count, data, STATS_TRACK_GID));
++	return ll_rd_track_id(m, STATS_TRACK_GID);
+ }
+ 
+-static int ll_wr_track_gid(struct file *file, const char *buffer,
+-                          unsigned long count, void *data)
++static ssize_t ll_track_gid_seq_write(struct file *file, const char *buffer,
++				      size_t count, loff_t *off)
+ {
+-        return (ll_wr_track_id(buffer, count, data, STATS_TRACK_GID));
++	struct seq_file *seq = file->private_data;
++	return ll_wr_track_id(buffer, count, seq->private, STATS_TRACK_GID);
+ }
++LPROC_SEQ_FOPS(ll_track_gid);
+ 
+-static int ll_rd_statahead_max(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data)
++static int ll_statahead_max_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct super_block *sb = m->private;
++	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 
+-        return snprintf(page, count, "%u\n", sbi->ll_sa_max);
++	return seq_printf(m, "%u\n", sbi->ll_sa_max);
+ }
+ 
+-static int ll_wr_statahead_max(struct file *file, const char *buffer,
+-                               unsigned long count, void *data)
++static ssize_t ll_statahead_max_seq_write(struct file *file, const char *buffer,
++					  size_t count, loff_t *off)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
+-        int val, rc;
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
++	int val, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+         if (rc)
+@@ -669,23 +648,23 @@ static int ll_wr_statahead_max(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(ll_statahead_max);
+ 
+-static int ll_rd_statahead_agl(char *page, char **start, off_t off,
+-                               int count, int *eof, void *data)
++static int ll_statahead_agl_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct super_block *sb = m->private;
++	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 
+-        return snprintf(page, count, "%u\n",
+-                        sbi->ll_flags & LL_SBI_AGL_ENABLED ? 1 : 0);
++	return seq_printf(m, "%u\n",
++			  sbi->ll_flags & LL_SBI_AGL_ENABLED ? 1 : 0);
+ }
+ 
+-static int ll_wr_statahead_agl(struct file *file, const char *buffer,
+-                               unsigned long count, void *data)
++static ssize_t ll_statahead_agl_seq_write(struct file *file, const char *buffer,
++					  size_t count, loff_t *off)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
+-        int val, rc;
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
++	int val, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+         if (rc)
+@@ -698,14 +677,14 @@ static int ll_wr_statahead_agl(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(ll_statahead_agl);
+ 
+-static int ll_rd_statahead_stats(char *page, char **start, off_t off,
+-                                 int count, int *eof, void *data)
++static int ll_statahead_stats_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct super_block *sb = m->private;
++	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 
+-        return snprintf(page, count,
++	return seq_printf(m,
+                         "statahead total: %u\n"
+                         "statahead wrong: %u\n"
+                         "agl total: %u\n",
+@@ -713,23 +692,23 @@ static int ll_rd_statahead_stats(char *page, char **start, off_t off,
+                         atomic_read(&sbi->ll_sa_wrong),
+                         atomic_read(&sbi->ll_agl_total));
+ }
++LPROC_SEQ_FOPS_RO(ll_statahead_stats);
+ 
+-static int ll_rd_lazystatfs(char *page, char **start, off_t off,
+-                            int count, int *eof, void *data)
++static int ll_lazystatfs_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
++	struct super_block *sb = m->private;
++	struct ll_sb_info *sbi = ll_s2sbi(sb);
+ 
+-        return snprintf(page, count, "%u\n",
+-                        (sbi->ll_flags & LL_SBI_LAZYSTATFS) ? 1 : 0);
++	return seq_printf(m, "%u\n",
++			  (sbi->ll_flags & LL_SBI_LAZYSTATFS) ? 1 : 0);
+ }
+ 
+-static int ll_wr_lazystatfs(struct file *file, const char *buffer,
+-                            unsigned long count, void *data)
++static ssize_t ll_lazystatfs_seq_write(struct file *file, const char *buffer,
++					size_t count, loff_t *off)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
+-        int val, rc;
++	struct seq_file *m = file->private_data;
++	struct ll_sb_info *sbi = ll_s2sbi((struct super_block *)m->private);
++	int val, rc;
+ 
+         rc = lprocfs_write_helper(buffer, count, &val);
+         if (rc)
+@@ -742,30 +721,29 @@ static int ll_wr_lazystatfs(struct file *file, const char *buffer,
+ 
+         return count;
+ }
++LPROC_SEQ_FOPS(ll_lazystatfs);
+ 
+-static int ll_rd_maxea_size(char *page, char **start, off_t off,
+-                            int count, int *eof, void *data)
++static int ll_maxea_size_seq_show(struct seq_file *m, void *v)
+ {
+-        struct super_block *sb = data;
+-        struct ll_sb_info *sbi = ll_s2sbi(sb);
+-        unsigned int ealen;
+-        int rc;
++	struct super_block *sb = m->private;
++	struct ll_sb_info *sbi = ll_s2sbi(sb);
++	unsigned int ealen;
++	int rc;
+ 
+         rc = ll_get_max_mdsize(sbi, &ealen);
+         if (rc)
+                 return rc;
+ 
+-        return snprintf(page, count, "%u\n", ealen);
++	return seq_printf(m, "%u\n", ealen);
+ }
++LPROC_SEQ_FOPS_RO(ll_maxea_size);
+ 
+-static int ll_rd_sbi_flags(char *page, char **start, off_t off,
+-				int count, int *eof, void *data)
++static int ll_sbi_flags_seq_show(struct seq_file *m, void *v)
+ {
+ 	const char *str[] = LL_SBI_FLAGS;
+-	struct super_block *sb = data;
++	struct super_block *sb = m->private;
+ 	int flags = ll_s2sbi(sb)->ll_flags;
+ 	int i = 0;
+-	int rc = 0;
+ 
+ 	while (flags != 0) {
+ 		if (ARRAY_SIZE(str) <= i) {
+@@ -775,66 +753,86 @@ static int ll_rd_sbi_flags(char *page, char **start, off_t off,
+ 		}
+ 
+ 		if (flags & 0x1)
+-			rc += snprintf(page + rc, count - rc, "%s ", str[i]);
++			seq_printf(m, "%s ", str[i]);
+ 		flags >>= 1;
+ 		++i;
+ 	}
+-	if (rc > 0)
+-		rc += snprintf(page + rc, count - rc, "\b\n");
+-	return rc;
++	seq_printf(m, "\b\n");
++	return 0;
+ }
++LPROC_SEQ_FOPS_RO(ll_sbi_flags);
+ 
+-static int ll_rd_unstable_stats(char *page, char **start, off_t off,
+-			      int count, int *eof, void *data)
++static int ll_unstable_stats_seq_show(struct seq_file *m, void *v)
+ {
+-	struct super_block	*sb    = data;
++	struct super_block	*sb    = m->private;
+ 	struct ll_sb_info	*sbi   = ll_s2sbi(sb);
+ 	struct cl_client_cache	*cache = &sbi->ll_cache;
+-	int pages, mb, rc;
++	int pages, mb;
+ 
+ 	pages = cfs_atomic_read(&cache->ccc_unstable_nr);
+ 	mb    = (pages * PAGE_CACHE_SIZE) >> 20;
+ 
+-	rc = snprintf(page, count, "unstable_pages: %8d\n"
+-				   "unstable_mb:    %8d\n", pages, mb);
+-
+-	return rc;
++	return seq_printf(m, "unstable_pages: %8d\n"
++				"unstable_mb:    %8d\n", pages, mb);
+ }
+-
+-static struct lprocfs_vars lprocfs_llite_obd_vars[] = {
+-        { "uuid",         ll_rd_sb_uuid,          0, 0 },
+-        //{ "mntpt_path",   ll_rd_path,             0, 0 },
+-        { "fstype",       ll_rd_fstype,           0, 0 },
+-        { "site",         ll_rd_site_stats,       0, 0 },
+-        { "blocksize",    ll_rd_blksize,          0, 0 },
+-        { "kbytestotal",  ll_rd_kbytestotal,      0, 0 },
+-        { "kbytesfree",   ll_rd_kbytesfree,       0, 0 },
+-        { "kbytesavail",  ll_rd_kbytesavail,      0, 0 },
+-        { "filestotal",   ll_rd_filestotal,       0, 0 },
+-        { "filesfree",    ll_rd_filesfree,        0, 0 },
+-        { "client_type",  ll_rd_client_type,      0, 0 },
+-        //{ "filegroups",   lprocfs_rd_filegroups,  0, 0 },
+-        { "max_read_ahead_mb", ll_rd_max_readahead_mb,
+-                               ll_wr_max_readahead_mb, 0 },
+-        { "max_read_ahead_per_file_mb", ll_rd_max_readahead_per_file_mb,
+-                                        ll_wr_max_readahead_per_file_mb, 0 },
+-        { "max_read_ahead_whole_mb", ll_rd_max_read_ahead_whole_mb,
+-                                     ll_wr_max_read_ahead_whole_mb, 0 },
+-        { "max_cached_mb",    ll_rd_max_cached_mb, ll_wr_max_cached_mb, 0 },
+-        { "checksum_pages",   ll_rd_checksum, ll_wr_checksum, 0 },
+-        { "max_rw_chunk",     ll_rd_max_rw_chunk, ll_wr_max_rw_chunk, 0 },
+-        { "stats_track_pid",  ll_rd_track_pid, ll_wr_track_pid, 0 },
+-        { "stats_track_ppid", ll_rd_track_ppid, ll_wr_track_ppid, 0 },
+-        { "stats_track_gid",  ll_rd_track_gid, ll_wr_track_gid, 0 },
+-        { "statahead_max",    ll_rd_statahead_max, ll_wr_statahead_max, 0 },
+-        { "statahead_agl",    ll_rd_statahead_agl, ll_wr_statahead_agl, 0 },
+-        { "statahead_stats",  ll_rd_statahead_stats, 0, 0 },
+-        { "lazystatfs",       ll_rd_lazystatfs, ll_wr_lazystatfs, 0 },
+-        { "max_easize",       ll_rd_maxea_size, 0, 0 },
+-	{ "sbi_flags",        ll_rd_sbi_flags, 0, 0 },
+-	{ "xattr_cache",      ll_rd_xattr_cache, ll_wr_xattr_cache, 0 },
+-	{ "unstable_stats",   ll_rd_unstable_stats, 0, 0},
+-        { 0 }
++LPROC_SEQ_FOPS_RO(ll_unstable_stats);
++
++static struct lprocfs_seq_vars lprocfs_llite_obd_vars[] = {
++	{ .name	=	"uuid",
++	  .fops	=	&ll_sb_uuid_fops			},
++	{ .name	=	"fstype",
++	  .fops	=	&ll_fstype_fops				},
++	{ .name	=	"site",
++	  .fops	=	&ll_site_stats_fops			},
++	{ .name	=	"blocksize",
++	  .fops	=	&ll_blksize_fops			},
++	{ .name	=	"kbytestotal",
++	  .fops =	&ll_kbytestotal_fops			},
++	{ .name	=	"kbytesfree",
++	  .fops	=	&ll_kbytesfree_fops			},
++	{ .name	=	"kbytesavail",
++	  .fops	=	&ll_kbytesavail_fops			},
++	{ .name	=	"filestotal",
++	  .fops	=	&ll_filestotal_fops			},
++	{ .name	=	"filesfree",
++	  .fops	=	&ll_filesfree_fops			},
++	{ .name	=	"client_type",
++	  .fops	=	&ll_client_type_fops			},
++	{ .name	=	"max_read_ahead_mb",
++	  .fops	=	&ll_max_readahead_mb_fops		},
++	{ .name	=	"max_read_ahead_per_file_mb",
++	  .fops	=	&ll_max_readahead_per_file_mb_fops	},
++	{ .name	=	"max_read_ahead_whole_mb",
++	  .fops	=	&ll_max_read_ahead_whole_mb_fops	},
++	{ .name	=	"max_cached_mb",
++	  .fops	=	&ll_max_cached_mb_fops			},
++	{ .name	=	"checksum_pages",
++	  .fops	=	&ll_checksum_fops			},
++	{ .name	=	"max_rw_chunk",
++	  .fops	=	&ll_max_rw_chunk_fops			},
++	{ .name	=	"stats_track_pid",
++	  .fops	=	&ll_track_pid_fops			},
++	{ .name	=	"stats_track_ppid",
++	  .fops	=	&ll_track_ppid_fops			},
++	{ .name	=	"stats_track_gid",
++	  .fops	=	&ll_track_gid_fops			},
++	{ .name	=	"statahead_max",
++	  .fops	=	&ll_statahead_max_fops			},
++	{ .name	=	"statahead_agl",
++	  .fops	=	&ll_statahead_agl_fops			},
++	{ .name	=	"statahead_stats",
++	  .fops	=	&ll_statahead_stats_fops		},
++	{ .name	=	"lazystatfs",
++	  .fops =	&ll_lazystatfs_fops			},
++	{ .name	=	"max_easize",
++	  .fops =	&ll_maxea_size_fops			},
++	{ .name	=	"sbi_flags",
++	  .fops =	&ll_sbi_flags_fops			},
++	{ .name	=	"xattr_cache",
++	  .fops	=	&ll_xattr_cache_fops			},
++	{ .name	=	"unstable_stats",
++	  .fops	=	&ll_unstable_stats_fops			},
++	{ 0 }
+ };
+ 
+ #define MAX_STRING_SIZE 128
+@@ -924,14 +922,17 @@ static const char *ra_stat_string[] = {
+         [RA_STAT_WRONG_GRAB_PAGE] = "wrong page from grab_cache_page",
+ };
+ 
++LPROC_SEQ_FOPS_RO_TYPE(llite, name);
++LPROC_SEQ_FOPS_RO_TYPE(llite, uuid);
+ 
+ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+                                 struct super_block *sb, char *osc, char *mdc)
+ {
+-        struct lprocfs_vars lvars[2];
++	struct lprocfs_seq_vars lvars[2];
+         struct lustre_sb_info *lsi = s2lsi(sb);
+         struct ll_sb_info *sbi = ll_s2sbi(sb);
+         struct obd_device *obd;
++	struct proc_dir_entry *dir;
+         char name[MAX_STRING_SIZE + 1], *ptr;
+         int err, id, len, rc;
+         ENTRY;
+@@ -955,7 +956,7 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+         snprintf(name, MAX_STRING_SIZE, "%.*s-%p", len,
+                  lsi->lsi_lmd->lmd_profile, sb);
+ 
+-        sbi->ll_proc_root = lprocfs_register(name, parent, NULL, NULL);
++	sbi->ll_proc_root = lprocfs_seq_register(name, parent, NULL, NULL);
+         if (IS_ERR(sbi->ll_proc_root)) {
+                 err = PTR_ERR(sbi->ll_proc_root);
+                 sbi->ll_proc_root = NULL;
+@@ -1020,7 +1021,7 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+                 GOTO(out, err);
+ 
+ 
+-        err = lprocfs_add_vars(sbi->ll_proc_root, lprocfs_llite_obd_vars, sb);
++	err = lprocfs_seq_add_vars(sbi->ll_proc_root, lprocfs_llite_obd_vars, sb);
+         if (err)
+                 GOTO(out, err);
+ 
+@@ -1031,18 +1032,21 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+         LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
+         LASSERT(obd->obd_type->typ_name != NULL);
+ 
+-        snprintf(name, MAX_STRING_SIZE, "%s/common_name",
+-                 obd->obd_type->typ_name);
+-        lvars[0].read_fptr = lprocfs_rd_name;
+-        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
+-        if (err)
+-                GOTO(out, err);
++	dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root);
++	if (dir == NULL)
++		GOTO(out, err = -ENOMEM);
+ 
+-        snprintf(name, MAX_STRING_SIZE, "%s/uuid", obd->obd_type->typ_name);
+-        lvars[0].read_fptr = lprocfs_rd_uuid;
+-        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
+-        if (err)
+-                GOTO(out, err);
++	snprintf(name, MAX_STRING_SIZE, "common_name");
++	lvars[0].fops = &llite_name_fops;
++	err = lprocfs_seq_add_vars(dir, lvars, obd);
++	if (err)
++		GOTO(out, err);
++
++	snprintf(name, MAX_STRING_SIZE, "uuid");
++	lvars[0].fops = &llite_uuid_fops;
++	err = lprocfs_seq_add_vars(dir, lvars, obd);
++	if (err)
++		GOTO(out, err);
+ 
+         /* OSC */
+         obd = class_name2obd(osc);
+@@ -1051,16 +1055,19 @@ int lprocfs_register_mountpoint(struct proc_dir_entry *parent,
+         LASSERT(obd->obd_magic == OBD_DEVICE_MAGIC);
+         LASSERT(obd->obd_type->typ_name != NULL);
+ 
+-        snprintf(name, MAX_STRING_SIZE, "%s/common_name",
+-                 obd->obd_type->typ_name);
+-        lvars[0].read_fptr = lprocfs_rd_name;
+-        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
+-        if (err)
+-                GOTO(out, err);
++	dir = proc_mkdir(obd->obd_type->typ_name, sbi->ll_proc_root);
++	if (dir == NULL)
++		GOTO(out, err = -ENOMEM);
++
++	snprintf(name, MAX_STRING_SIZE, "common_name");
++	lvars[0].fops = &llite_name_fops;
++	err = lprocfs_seq_add_vars(dir, lvars, obd);
++	if (err)
++		GOTO(out, err);
+ 
+-        snprintf(name, MAX_STRING_SIZE, "%s/uuid", obd->obd_type->typ_name);
+-        lvars[0].read_fptr = lprocfs_rd_uuid;
+-        err = lprocfs_add_vars(sbi->ll_proc_root, lvars, obd);
++	snprintf(name, MAX_STRING_SIZE, "uuid");
++	lvars[0].fops = &llite_uuid_fops;
++	err = lprocfs_seq_add_vars(dir, lvars, obd);
+ out:
+         if (err) {
+                 lprocfs_remove(&sbi->ll_proc_root);
+@@ -1439,9 +1446,11 @@ static ssize_t ll_rw_offset_stats_seq_write(struct file *file, const char *buf,
+ 
+ LPROC_SEQ_FOPS(ll_rw_offset_stats);
+ 
+-void lprocfs_llite_init_vars(struct lprocfs_static_vars *lvars)
++int ll_process_proc_param(struct lustre_cfg *lcfg, unsigned long *sb)
+ {
+-    lvars->module_vars  = NULL;
+-    lvars->obd_vars     = lprocfs_llite_obd_vars;
++	int rc = class_process_proc_seq_param(PARAM_LLITE,
++					      lprocfs_llite_obd_vars,
++					      lcfg, (void *)sb);
++	return (rc > 0 ? 0 : rc);
+ }
+ #endif /* LPROCFS */
+diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
+index 06b55fe..4692f6e 100644
+--- a/lustre/llite/super25.c
++++ b/lustre/llite/super25.c
+@@ -169,7 +169,7 @@ static int __init init_lustre_lite(void)
+ 	}
+ 
+         proc_lustre_fs_root = proc_lustre_root ?
+-                              lprocfs_register("llite", proc_lustre_root, NULL, NULL) : NULL;
++			      lprocfs_seq_register("llite", proc_lustre_root, NULL, NULL) : NULL;
+ 
+         lustre_register_client_fill_super(ll_fill_super);
+         lustre_register_kill_super_cb(ll_kill_super);
+diff --git a/lustre/llite/vvp_dev.c b/lustre/llite/vvp_dev.c
+index 2fdb613..fa124e2 100644
+--- a/lustre/llite/vvp_dev.c
++++ b/lustre/llite/vvp_dev.c
+@@ -530,10 +530,9 @@ static struct seq_operations vvp_pgcache_ops = {
+ 
+ static int vvp_dump_pgcache_seq_open(struct inode *inode, struct file *filp)
+ {
+-        struct proc_dir_entry *dp  = PDE(inode);
+-        struct ll_sb_info     *sbi = dp->data;
+-        struct seq_file       *seq;
+-        int                    result;
++	struct ll_sb_info	*sbi = PDE_DATA(inode);
++	struct seq_file		*seq;
++	int			result;
+ 
+         result = seq_open(filp, &vvp_pgcache_ops);
+         if (result == 0) {
+diff --git a/lustre/obdclass/cl_object.c b/lustre/obdclass/cl_object.c
+index 1984836..985cf0b 100644
+--- a/lustre/obdclass/cl_object.c
++++ b/lustre/obdclass/cl_object.c
+@@ -400,11 +400,10 @@ void cache_stats_init(struct cache_stats *cs, const char *name)
+ 		cfs_atomic_set(&cs->cs_stats[i], 0);
+ }
+ 
+-int cache_stats_print(const struct cache_stats *cs,
+-                      char *page, int count, int h)
++int cache_stats_print(const struct cache_stats *cs, struct seq_file *m, int h)
+ {
+-	int nob = 0;
+ 	int i;
++
+ 	/*
+ 	 *   lookup    hit    total  cached create
+ 	 * env: ...... ...... ...... ...... ......
+@@ -412,18 +411,16 @@ int cache_stats_print(const struct cache_stats *cs,
+ 	if (h) {
+ 		const char *names[CS_NR] = CS_NAMES;
+ 
+-		nob += snprintf(page + nob, count - nob, "%6s", " ");
++		seq_printf(m, "%6s", " ");
+ 		for (i = 0; i < CS_NR; i++)
+-			nob += snprintf(page + nob, count - nob,
+-					"%8s", names[i]);
+-		nob += snprintf(page + nob, count - nob, "\n");
++			seq_printf(m, "%8s", names[i]);
++		seq_printf(m, "\n");
+ 	}
+ 
+-	nob += snprintf(page + nob, count - nob, "%5.5s:", cs->cs_name);
++	seq_printf(m, "%5.5s:", cs->cs_name);
+ 	for (i = 0; i < CS_NR; i++)
+-		nob += snprintf(page + nob, count - nob, "%8u",
+-				cfs_atomic_read(&cs->cs_stats[i]));
+-	return nob;
++		seq_printf(m, "%8u", cfs_atomic_read(&cs->cs_stats[i]));
++	return 0;
+ }
+ 
+ static void cl_env_percpu_refill(void);
+@@ -471,50 +468,48 @@ static struct cache_stats cl_env_stats = {
+  * Outputs client site statistical counters into a buffer. Suitable for
+  * ll_rd_*()-style functions.
+  */
+-int cl_site_stats_print(const struct cl_site *site, char *page, int count)
+-{
+-        int nob;
+-        int i;
+-        static const char *pstate[] = {
+-                [CPS_CACHED]  = "c",
+-                [CPS_OWNED]   = "o",
+-                [CPS_PAGEOUT] = "w",
+-                [CPS_PAGEIN]  = "r",
+-                [CPS_FREEING] = "f"
+-        };
+-        static const char *lstate[] = {
+-                [CLS_NEW]       = "n",
+-                [CLS_QUEUING]   = "q",
+-                [CLS_ENQUEUED]  = "e",
+-                [CLS_HELD]      = "h",
+-                [CLS_INTRANSIT] = "t",
+-                [CLS_CACHED]    = "c",
+-                [CLS_FREEING]   = "f"
+-        };
++int cl_site_stats_print(const struct cl_site *site, struct seq_file *m)
++{
++	static const char *pstate[] = {
++		[CPS_CACHED]  = "c",
++		[CPS_OWNED]   = "o",
++		[CPS_PAGEOUT] = "w",
++		[CPS_PAGEIN]  = "r",
++		[CPS_FREEING] = "f"
++	};
++	static const char *lstate[] = {
++		[CLS_NEW]       = "n",
++		[CLS_QUEUING]   = "q",
++		[CLS_ENQUEUED]  = "e",
++		[CLS_HELD]      = "h",
++		[CLS_INTRANSIT] = "t",
++		[CLS_CACHED]    = "c",
++		[CLS_FREEING]   = "f"
++	};
++	int i;
++
+ /*
+        lookup    hit  total   busy create
+ pages: ...... ...... ...... ...... ...... [...... ...... ...... ......]
+ locks: ...... ...... ...... ...... ...... [...... ...... ...... ...... ......]
+   env: ...... ...... ...... ...... ......
+  */
+-        nob = lu_site_stats_print(&site->cs_lu, page, count);
+-        nob += cache_stats_print(&site->cs_pages, page + nob, count - nob, 1);
+-        nob += snprintf(page + nob, count - nob, " [");
+-        for (i = 0; i < ARRAY_SIZE(site->cs_pages_state); ++i)
+-                nob += snprintf(page + nob, count - nob, "%s: %u ",
+-                                pstate[i],
+-                                cfs_atomic_read(&site->cs_pages_state[i]));
+-        nob += snprintf(page + nob, count - nob, "]\n");
+-        nob += cache_stats_print(&site->cs_locks, page + nob, count - nob, 0);
+-        nob += snprintf(page + nob, count - nob, " [");
+-        for (i = 0; i < ARRAY_SIZE(site->cs_locks_state); ++i)
+-                nob += snprintf(page + nob, count - nob, "%s: %u ",
+-                                lstate[i],
+-                                cfs_atomic_read(&site->cs_locks_state[i]));
+-        nob += snprintf(page + nob, count - nob, "]\n");
+-        nob += cache_stats_print(&cl_env_stats, page + nob, count - nob, 0);
+-        nob += snprintf(page + nob, count - nob, "\n");
+-        return nob;
++	lu_site_stats_seq_print(&site->cs_lu, m);
++	cache_stats_print(&site->cs_pages, m, 1);
++	seq_printf(m, " [");
++	for (i = 0; i < ARRAY_SIZE(site->cs_pages_state); ++i)
++		seq_printf(m, "%s: %u ", pstate[i],
++			   cfs_atomic_read(&site->cs_pages_state[i]));
++	seq_printf(m, "]\n");
++	cache_stats_print(&site->cs_locks, m, 0);
++	seq_printf(m, " [");
++	for (i = 0; i < ARRAY_SIZE(site->cs_locks_state); ++i)
++		seq_printf(m, "%s: %u ", lstate[i],
++			   cfs_atomic_read(&site->cs_locks_state[i]));
++	seq_printf(m, "]\n");
++	cache_stats_print(&cl_env_stats, m, 0);
++	seq_printf(m, "\n");
++	return 0;
+ }
+ EXPORT_SYMBOL(cl_site_stats_print);
+ 
+diff --git a/lustre/obdclass/lu_object.c b/lustre/obdclass/lu_object.c
+index 28a18ef..cca2ec0 100644
+--- a/lustre/obdclass/lu_object.c
++++ b/lustre/obdclass/lu_object.c
+@@ -2090,6 +2090,28 @@ static __u32 ls_stats_read(struct lprocfs_stats *stats, int idx)
+  * Output site statistical counters into a buffer. Suitable for
+  * lprocfs_rd_*()-style functions.
+  */
++int lu_site_stats_seq_print(const struct lu_site *s, struct seq_file *m)
++{
++	lu_site_stats_t stats;
++
++	memset(&stats, 0, sizeof(stats));
++	lu_site_stats_get(s->ls_obj_hash, &stats, 1);
++
++	return seq_printf(m, "%d/%d %d/%d %d %d %d %d %d %d %d\n",
++			  stats.lss_busy,
++			  stats.lss_total,
++			  stats.lss_populated,
++			  CFS_HASH_NHLIST(s->ls_obj_hash),
++			  stats.lss_max_search,
++			  ls_stats_read(s->ls_stats, LU_SS_CREATED),
++			  ls_stats_read(s->ls_stats, LU_SS_CACHE_HIT),
++			  ls_stats_read(s->ls_stats, LU_SS_CACHE_MISS),
++			  ls_stats_read(s->ls_stats, LU_SS_CACHE_RACE),
++			  ls_stats_read(s->ls_stats, LU_SS_CACHE_DEATH_RACE),
++			  ls_stats_read(s->ls_stats, LU_SS_LRU_PURGED));
++}
++EXPORT_SYMBOL(lu_site_stats_seq_print);
++
+ int lu_site_stats_print(const struct lu_site *s, char *page, int count)
+ {
+         lu_site_stats_t stats;
+-- 
+1.8.5.1
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 566afc2..e19d1d4 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -38,10 +38,13 @@ PATCHES=(
 	"${FILESDIR}/0003-LU-3974-llite-dentry-d_compare-changes-in-3.11.patch"
 	"${FILESDIR}/0004-LU-3974-llite-use-new-struct-dir_context.patch"
 	"${FILESDIR}/0005-LU-3974-llite-invalidatepage-api-changed.patch"
+	"${FILESDIR}/0006-LU-3319-procfs-move-llite-proc-handling-over-to-seq_.patch"
 )
 
 pkg_setup() {
-	setup-allowed-flags
+	filter-mfpmath sse
+	filter-mfpmath i386
+	filter-flags -msse* -mavx* -mmmx -m3dnow
 	linux-mod_pkg_setup
 	ARCH="$(tc-arch-kernel)"
 	ABI="${KERNEL_ABI}"


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-07-11 15:36 Justin Lecher
  0 siblings, 0 replies; 53+ messages in thread
From: Justin Lecher @ 2013-07-11 15:36 UTC (permalink / raw
  To: gentoo-commits

commit:     763e1015c20a1be5543596f3f7a25afcee576e9a
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 11 13:24:22 2013 +0000
Commit:     Justin Lecher <jlec <AT> gentoo <DOT> org>
CommitDate: Thu Jul 11 15:34:53 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=763e1015

Update lustre patches

Package-Manager: portage-2.2.0_alpha186

---
 sys-cluster/lustre/ChangeLog                       |   20 +
 ...01-LU-1812-kernel-3.7-FC18-server-patches.patch |  380 ---
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |    8 +-
 ...-kernel-Kernel-update-for-3.7.2-201.fc18.patch} |  105 +-
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |  137 -
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |   30 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |  159 --
 ...9-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch} |   14 +-
 ...005-LU-2800-llite-introduce-local-getname.patch |   91 -
 .../files/0006-LU-2987-llite-rcu-free-inode.patch  |   89 -
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |   83 -
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch | 3005 --------------------
 ...uild-fix-compilation-error-with-gcc-4.7.2.patch |   43 -
 sys-cluster/lustre/lustre-9999.ebuild              |   16 +-
 14 files changed, 96 insertions(+), 4084 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 9d8c772..b769d9b 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,26 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  11 Jul 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  +files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch,
+  -files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  -files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  -files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  -files/0005-LU-2800-llite-introduce-local-getname.patch,
+  -files/0006-LU-2987-llite-rcu-free-inode.patch,
+  -files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  -files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  -files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   13 Jun 2013; Justin Lecher <jlec@gentoo.org> lustre-9999.ebuild,
   metadata.xml:
   Move virtual/linux-sources to build deps

diff --git a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch b/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
deleted file mode 100644
index f773a7b..0000000
--- a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
+++ /dev/null
@@ -1,380 +0,0 @@
-From 91315157587f3392b6cf43ea286b0f3ce1e7f94f Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 2 May 2013 07:54:50 -0400
-Subject: [PATCH 01/12] LU-1812 kernel: 3.7/FC18 server patches
-
-This patch extends lustre server support to FC18 running a
-3.7.2-201 kernel with a ZFS backend. At this time ldiskfs
-is not supported on FC18. This patch provides block level
-performance optimizations and the ability to simulate fail
-over for ldiskfs when it is provided. The jbd2-jcberr patch
-was not ported to these new platforms for reasons described
-in LU-433.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I2a86d7ca4e068686372eb74f85b1443d24e245c4
----
- .../patches/blkdev_tunables-3.7.patch              | 128 +++++++++++++++
- .../kernel_patches/patches/dev_read_only-3.7.patch | 174 +++++++++++++++++++++
- .../patches/raid5-mmp-unplug-dev-3.7.patch         |  21 +++
- lustre/kernel_patches/series/3.x-fc18.series       |   4 +
- 4 files changed, 327 insertions(+)
- create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
- create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.7.patch
- create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
- create mode 100644 lustre/kernel_patches/series/3.x-fc18.series
-
-diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
-new file mode 100644
-index 0000000..1a98fb5
---- /dev/null
-+++ b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
-@@ -0,0 +1,128 @@
-+--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
-++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
-+@@ -19,6 +19,12 @@
-+ 
-+ unsigned long blk_max_pfn;
-+ 
-++int default_max_sectors = BLK_DEF_MAX_SECTORS;
-++module_param(default_max_sectors, int, 0);
-++
-++int default_max_segments = BLK_MAX_SEGMENTS;
-++module_param(default_max_segments, int, 0);
-++
-+ /**
-+  * blk_queue_prep_rq - set a prepare_request function for queue
-+  * @q:		queue
-+@@ -108,7 +114,7 @@
-+  */
-+ void blk_set_default_limits(struct queue_limits *lim)
-+ {
-+-	lim->max_segments = BLK_MAX_SEGMENTS;
-++	lim->max_segments = default_max_segments;
-+ 	lim->max_integrity_segments = 0;
-+ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
-+ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
-+@@ -255,7 +261,7 @@
-+ 
-+ 	limits->max_hw_sectors = max_hw_sectors;
-+ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
-+-				    BLK_DEF_MAX_SECTORS);
-++				    default_max_sectors);
-+ }
-+ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
-+ 
-+--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
-++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
-+@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
-+	  there should be no noticeable performance impact as long as you have
-+	  logging turned off.
-+ 
-++config SCSI_MAX_SG_SEGMENTS
-++	int "Maximum SCSI scatter gather segment size"
-++	range 32 256 
-++	default "128"
-++	depends on SCSI
-++	help
-++	  Control the maximum limit for scatter gather buffers for the
-++	  SCSI device.
-++
-+ config SCSI_SCAN_ASYNC
-+ 	bool "Asynchronous SCSI scanning"
-+ 	depends on SCSI
-+--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
-++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
-+@@ -20,7 +20,7 @@ struct scsi_cmnd;
-+  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
-+  * minimum value is 32
-+  */
-+-#define SCSI_MAX_SG_SEGMENTS	128
-++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
-+ 
-+ /*
-+  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
-+--- a/drivers/scsi/isci/init.c	2013-02-07 09:59:49.000000000 -0500
-++++ b/drivers/scsi/isci/init.c	2013-02-07 10:01:51.000000000 -0500
-+@@ -119,6 +119,10 @@
-+ module_param(phy_gen, byte, 0);
-+ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
-+ 
-++u16 sg_table_size = SG_ALL;
-++module_param(sg_table_size, ushort, 0);
-++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
-++
-+ unsigned char max_concurr_spinup;
-+ module_param(max_concurr_spinup, byte, 0);
-+ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
-+@@ -163,7 +167,6 @@
-+ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
-+ 	.cmd_per_lun			= 1,
-+ 	.this_id			= -1,
-+-	.sg_tablesize			= SG_ALL,
-+ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
-+ 	.use_clustering			= ENABLE_CLUSTERING,
-+ 	.eh_abort_handler		= sas_eh_abort_handler,
-+@@ -573,6 +576,7 @@
-+ 
-+ 		INIT_LIST_HEAD(&idev->node);
-+ 	}
-++	isci_sht.sg_tablesize = sg_table_size;
-+ 
-+ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
-+ 	if (!shost)
-+Increase MAX_SGE for fusion mpt driver.
-+
-+Index: linux-2.6.32.i386/drivers/message/fusion/Kconfig
-+===================================================================
-+--- linux-2.6.32.i386.orig/drivers/message/fusion/Kconfig	2009-12-03 09:21:21.000000000 +0530
-++++ linux-2.6.32.i386/drivers/message/fusion/Kconfig	2010-03-16 16:45:08.000000000 +0530
-+@@ -61,9 +61,9 @@
-+ 	  LSISAS1078
-+ 
-+ config FUSION_MAX_SGE
-+-	int "Maximum number of scatter gather entries (16 - 128)"
-+-	default "128"
-+-	range 16 128
-++	int "Maximum number of scatter gather entries (16 - 256)"
-++	default "256"
-++	range 16 256
-+ 	help
-+ 	  This option allows you to specify the maximum number of scatter-
-+ 	  gather entries per I/O. The driver default is 128, which matches
-+Index: linux-2.6.32.i386/drivers/message/fusion/mptbase.h
-+===================================================================
-+--- linux-2.6.32.i386.orig/drivers/message/fusion/mptbase.h	2009-12-03 09:21:21.000000000 +0530
-++++ linux-2.6.32.i386/drivers/message/fusion/mptbase.h	2010-03-16 16:46:54.000000000 +0530
-+@@ -165,10 +165,10 @@
-+  * Set the MAX_SGE value based on user input.
-+  */
-+ #ifdef CONFIG_FUSION_MAX_SGE
-+-#if CONFIG_FUSION_MAX_SGE  < 16
-++#if CONFIG_FUSION_MAX_SGE < 16
-+ #define MPT_SCSI_SG_DEPTH	16
-+-#elif CONFIG_FUSION_MAX_SGE  > 128
-+-#define MPT_SCSI_SG_DEPTH	128
-++#elif CONFIG_FUSION_MAX_SGE > 256
-++#define MPT_SCSI_SG_DEPTH	256
-+ #else
-+ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
-+ #endif
-diff --git a/lustre/kernel_patches/patches/dev_read_only-3.7.patch b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
-new file mode 100644
-index 0000000..7fb0b98
---- /dev/null
-+++ b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
-@@ -0,0 +1,174 @@
-+This patch is no longer needed for Lustre.  It is only included
-+for testing and ease of using the same kernel with older Lustre
-+versions.  This testing functionality was replaced in Linux 3.0
-+by the dm-flakey driver.
-+
-+This functionality is mainly used during testing, in order to
-+simulate a server crash for ldiskfs by discarding all of the
-+writes to the filesystem.  For recovery testing we could simulate
-+this by using a special loopback or DM device that also discards
-+writes to the device.
-+
-+This functionality is also used by target "failback" in order
-+to speed up service shutdown and takeover by the other node
-+during controlled operation.  However, it would also be possible
-+to do this by simply allowing all of the in-flight requests to
-+complete and then waiting for the service to stop.  This will
-+also be needed by the DMU-OSD, because discarding of writes on
-+a DMU-based target is not safe as it could trigger a storage
-+failure if the data is ever read from disk again and the
-+checksum does not match that expected by the block pointer.
-+
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/block/blk-core.c	2012-09-30 19:47:46.000000000 -0400
-++++ linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c	2012-11-16 11:35:04.419174277 -0500
-+@@ -1606,6 +1606,8 @@ static inline bool should_fail_request(s
-+
-+ #endif /* CONFIG_FAIL_MAKE_REQUEST */
-+
-++int dev_check_rdonly(struct block_device *bdev);
-++
-+ /*
-+  * Check whether this bio extends beyond the end of the device.
-+  */
-+@@ -1668,6 +1670,12 @@ generic_make_request_checks(struct bio *
-+		goto end_io;
-+	}
-+
-++	/* this is cfs's dev_rdonly check */
-++	if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
-++		err = 0;
-++		goto end_io;
-++	}
-++
-+	part = bio->bi_bdev->bd_part;
-+	if (should_fail_request(part, bio->bi_size) ||
-+	    should_fail_request(&part_to_disk(part)->part0,
-+@@ -3034,6 +3042,99 @@ void blk_finish_plug(struct blk_plug *pl
-+ }
-+ EXPORT_SYMBOL(blk_finish_plug);
-+
-++/*
-++ * Debug code for turning block devices "read-only" (will discard writes
-++ * silently).  This is for filesystem crash/recovery testing.
-++ */
-++struct deventry {
-++	dev_t dev;
-++	struct deventry *next;
-++};
-++
-++static struct deventry *devlist = NULL;
-++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
-++
-++int dev_check_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur;
-++
-++	if (!bdev)
-++		return 0;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			return 1;
-++		}
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++	return 0;
-++}
-++
-++void dev_set_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *newdev, *cur;
-++
-++	if (!bdev)
-++		return;
-++
-++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-++	if (!newdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			kfree(newdev);
-++			return;
-++		}
-++		cur = cur->next;
-++	}
-++	newdev->dev = bdev->bd_dev;
-++	newdev->next = devlist;
-++	devlist = newdev;
-++	spin_unlock(&devlock);
-++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
-++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
-++}
-++
-++void dev_clear_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur, *last = NULL;
-++
-++	if (!bdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			if (last)
-++				last->next = cur->next;
-++			else
-++				devlist = cur->next;
-++			spin_unlock(&devlock);
-++			kfree(cur);
-++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
-++				bdev->bd_disk ? bdev->bd_disk->disk_name :
-++				"unknown block", bdev->bd_dev);
-++			return;
-++		}
-++		last = cur;
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++}
-++
-++EXPORT_SYMBOL(dev_set_rdonly);
-++EXPORT_SYMBOL(dev_clear_rdonly);
-++EXPORT_SYMBOL(dev_check_rdonly);
-++
-+ int __init blk_dev_init(void)
-+ {
-+	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
-++++ linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
-+@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
-+		if (bdev != bdev->bd_contains)
-+			victim = bdev->bd_contains;
-+		bdev->bd_contains = NULL;
-++		dev_clear_rdonly(bdev);
-+
-+		put_disk(disk);
-+		module_put(owner);
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
-++++ linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
-+@@ -2244,6 +2244,10 @@ struct bio;
-+ extern void submit_bio(int, struct bio *);
-+ extern int bdev_read_only(struct block_device *);
-+ #endif
-++#define HAVE_CLEAR_RDONLY_ON_PUT
-++extern void dev_set_rdonly(struct block_device *bdev);
-++extern int dev_check_rdonly(struct block_device *bdev);
-++extern void dev_clear_rdonly(struct block_device *bdev);
-+ extern int set_blocksize(struct block_device *, int);
-+ extern int sb_set_blocksize(struct super_block *, int);
-+ extern int sb_min_blocksize(struct super_block *, int);
-diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
-new file mode 100644
-index 0000000..70b9992
---- /dev/null
-+++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
-@@ -0,0 +1,21 @@
-+--- linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c.orig	2012-11-21 08:51:15.312175089 -0500
-++++ linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c		2012-11-21 09:02:38.415174560 -0500
-+@@ -2394,6 +2394,8 @@ static int add_stripe_bio(struct stripe_
-+		bi->bi_next = *bip;
-+	*bip = bi;
-+	raid5_inc_bi_active_stripes(bi);
-++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
-++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);	/* force to read from disk. */
-+
-+	if (forwrite) {
-+		/* check if page is covered */
-+@@ -4217,6 +4222,9 @@ static void make_request(struct mddev *m
-+
-+		bio_endio(bi, 0);
-+	}
-++
-++	if (bi->bi_rw & REQ_SYNC)
-++		md_wakeup_thread(mddev->thread);
-+ }
-+
-+ static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
-diff --git a/lustre/kernel_patches/series/3.x-fc18.series b/lustre/kernel_patches/series/3.x-fc18.series
-new file mode 100644
-index 0000000..387a2dd
---- /dev/null
-+++ b/lustre/kernel_patches/series/3.x-fc18.series
-@@ -0,0 +1,4 @@
-+raid5-mmp-unplug-dev-3.7.patch
-+dev_read_only-3.7.patch
-+blkdev_tunables-3.7.patch
-+bh_lru_size_config.patch
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 91%
rename from sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index dbfda90..a5af8be 100644
--- a/sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From a48ffc03f6d9630e66720089ed01c9f4f1ec10fc Mon Sep 17 00:00:00 2001
+From e4b7000ba2dde158a990130bcaee91256255c280 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 09/12] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 1/4] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -14,10 +14,10 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  1 file changed, 58 insertions(+), 8 deletions(-)
 
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index a78bfe3..d8451e0 100644
+index 95d20e2..de9df76 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
-@@ -362,14 +362,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -365,14 +365,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
similarity index 70%
rename from sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
rename to sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index 95ef999..8e02095 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,22 +1,22 @@
-From 025fda5f3a44942e7c87f180fc7275529e5405fa Mon Sep 17 00:00:00 2001
+From 1359b3ff29d39aae651457e39942b5ff61092d6c Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
-Date: Mon, 8 Apr 2013 21:04:22 +0800
-Subject: [PATCH 03/12] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
+Date: Wed, 10 Jul 2013 13:52:41 +0800
+Subject: [PATCH 2/4] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
-Add uapi header to include search path.
+Add uapi header to include search path
 
 Signed-off-by: yang sheng <yang.sheng@intel.com>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Id90e091fef63ebf5bb8e7765969aa3148cc31aa2
 ---
  autoMakefile.am                 |  2 +-
- config/lustre-build-linux.m4    | 21 +++++++++++++--------
- ldiskfs/config/ldiskfs-build.m4 | 22 ++++++++++++++--------
- lustre/autoconf/lustre-core.m4  |  1 +
+ config/lustre-build-linux.m4    | 19 ++++++++++++-------
+ ldiskfs/config/ldiskfs-build.m4 | 20 +++++++++++++-------
  lustre/scripts/version_tag.pl   |  4 +++-
- 5 files changed, 32 insertions(+), 18 deletions(-)
+ 4 files changed, 29 insertions(+), 16 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 1cc3b48..7b8a096 100644
+index 9b6dcfd..71d8db4 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -84,7 +84,7 @@ all-am: modules
@@ -24,12 +24,12 @@ index 1cc3b48..7b8a096 100644
  	$(MAKE) CC="$(CC)" $(CROSS_VARS) -C $(LINUX_OBJ)	     \
  	-f $(PWD)/build/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) \
 -	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
-+        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
++	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
  	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index b08ae65..a78bfe3 100644
+index de9df76..8849f14 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -59,23 +59,21 @@ index b08ae65..a78bfe3 100644
  	],[
  		#ifndef RHEL_RELEASE_CODE
  		#error "not redhat kernel"
-@@ -222,9 +222,13 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+@@ -222,8 +222,12 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
          [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
  	[AC_MSG_ERROR([Run make config in $LINUX.])])])
          AC_SUBST(AUTOCONF_HDIR)
 -LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
 -	[AC_MSG_ERROR([Run make config in $LINUX.])])
--
 +LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
 +	[LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
 +		[VERSION_HDIR=generated/uapi/linux],
 +		[AC_MSG_ERROR([Run make config in $LINUX.])])
 +	])
-+        AC_SUBST(VERSION_HDIR)
-+ 
++	AC_SUBST(VERSION_HDIR)
+ 
  # ----------- kconfig.h exists ---------------
  # kernel 3.1, $LINUX/include/linux/kconfig.h is added
- # see kernel commit 2a11c8ea20bf850b3a2c60db8c2e7497d28aba99
 @@ -240,7 +244,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
  # tarred up the tree and ran make dep etc. in it, then
  # version.h gets overwritten with a standard linux one.
@@ -85,7 +83,7 @@ index b08ae65..a78bfe3 100644
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-@@ -344,7 +348,8 @@ $2
+@@ -352,7 +356,8 @@ $2
  AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
  [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
  rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
@@ -96,36 +94,35 @@ index b08ae65..a78bfe3 100644
  	[_AC_MSG_LOG_CONFTEST
  m4_ifvaln([$5],[$5])dnl])
 diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
-index be144de..a978bcf 100644
+index 38fce59..8a00872 100644
 --- a/ldiskfs/config/ldiskfs-build.m4
 +++ b/ldiskfs/config/ldiskfs-build.m4
-@@ -4,12 +4,12 @@ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
- 	utsrelease1=${LINUX_OBJ}/include/linux/version.h
+@@ -1,9 +1,9 @@
+ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
+ 	AC_MSG_CHECKING([kernel source version])
+ 
+-	utsrelease1=${LINUX_OBJ}/include/linux/version.h
++	utsrelease1=${LINUX_OBJ}/include/generated/utsrelease.h
  	utsrelease2=${LINUX_OBJ}/include/linux/utsrelease.h
- 	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
--	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
--		utsrelease=linux/version.h
-+	AS_IF([test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
-+		utsrelease=generated/utsrelease.h
+-	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
++	utsrelease3=${LINUX_OBJ}/include/linux/version.h
+ 	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
+ 		utsrelease=${utsrelease1}
  	], [test -r ${utsrelease2} && fgrep -q UTS_RELEASE ${utsrelease2}], [
- 		utsrelease=linux/utsrelease.h
--	], [test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
--		utsrelease=generated/utsrelease.h
-+	], [test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
-+		utsrelease=linux/version.h
- 	])
+@@ -60,10 +60,10 @@ AC_SUBST(RELEASE)
  
- 	AS_IF([test "${utsrelease}"], [
-@@ -64,7 +64,7 @@ AC_SUBST(RELEASE)
  # check is redhat/suse kernels
- AC_MSG_CHECKING([that RedHat kernel])
- LB_LINUX_TRY_COMPILE([
--		#include <linux/version.h>
-+		#include <$VERSION_HDIR/version.h>
- 	],[
- 		#ifndef RHEL_RELEASE_CODE
- 		#error "not redhat kernel"
-@@ -190,8 +190,14 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+ AC_MSG_CHECKING([for RedHat kernel version])
+-	AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/linux/version.h], [
++	AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/$VERSION_HDIR/version.h], [
+ 		RHEL_KERNEL="yes"
+ 		RHEL_RELEASE=$(expr 0$(awk -F \" '/ RHEL_RELEASE / { print [$]2 }' \
+-		               ${LINUX_OBJ}/include/linux/version.h) + 1)
++		               ${LINUX_OBJ}/include/$VERSION_HDIR/version.h) + 1)
+ 		KERNEL_VERSION=$(sed -e 's/\(@<:@23@:>@\.@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/' <<< ${LINUXRELEASE})
+ 		RHEL_KERNEL_VERSION=${KERNEL_VERSION}-${RHEL_RELEASE}
+ 		AC_SUBST(RHEL_KERNEL_VERSION)
+@@ -184,8 +184,14 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
          [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
  	[AC_MSG_ERROR([Run make config in $LINUX.])])])
          AC_SUBST(AUTOCONF_HDIR)
@@ -133,16 +130,16 @@ index be144de..a978bcf 100644
 -	[AC_MSG_ERROR([Run make config in $LINUX.])])
 +LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
 +       [LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
-+               [VERSION_HDIR=generated/uapi/linux],
-+               [AC_MSG_ERROR([Run make config in $LINUX.])])
++	       [VERSION_HDIR=generated/uapi/linux],
++	       [AC_MSG_ERROR([Run make config in $LINUX.])])
 +       ])
 +       AC_SUBST(VERSION_HDIR)
-+ 
++
 +
  
  # ----------- kconfig.h exists ---------------
  # kernel 3.1, $LINUX/include/linux/kconfig.h is added
-@@ -208,7 +214,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
+@@ -202,7 +208,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
  # tarred up the tree and ran make dep etc. in it, then
  # version.h gets overwritten with a standard linux one.
  
@@ -151,20 +148,8 @@ index be144de..a978bcf 100644
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 7ac2b22..1972e17 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -328,6 +328,7 @@ AC_TRY_RUN([
-         #define __LINUX_POSIX_ACL_H
- 
-         #ifdef CONFIG_FS_POSIX_ACL
-+        struct user_namespace;
-         # include <linux/posix_acl_xattr.h>
-         #endif
- 
 diff --git a/lustre/scripts/version_tag.pl b/lustre/scripts/version_tag.pl
-index 61796c9..07cbdf8 100644
+index 61796c9..4d2bb4a 100644
 --- a/lustre/scripts/version_tag.pl
 +++ b/lustre/scripts/version_tag.pl
 @@ -43,8 +43,10 @@ sub get_kernver($$)
@@ -173,9 +158,9 @@ index 61796c9..07cbdf8 100644
      my $ver = new IO::File;
 -    if (!$ver->open("$objdir/include/linux/utsrelease.h") &&
 +    if (!$ver->open("$objdir/include/generated/utsrelease.h") &&
-+        !$ver->open("$objdir/include/linux/utsrelease.h") &&
++	!$ver->open("$objdir/include/linux/utsrelease.h") &&
          !$ver->open("$objdir/include/linux/version.h") &&
-+        !$ver->open("$dir/include/generated/utsrelease.h") &&
++	!$ver->open("$dir/include/generated/utsrelease.h") &&
          !$ver->open("$dir/include/linux/utsrelease.h") &&
          !$ver->open("$dir/include/linux/version.h")) {
              die "Run make dep on '$dir'\n";

diff --git a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
deleted file mode 100644
index 7d24cf8..0000000
--- a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From c81da9c214f1b32aa9657df42288a9c25e63c434 Mon Sep 17 00:00:00 2001
-From: yangsheng <yang.sheng@intel.com>
-Date: Mon, 8 Apr 2013 21:14:09 +0800
-Subject: [PATCH 02/12] LU-2686 kernel: sock_map_fd() replaced by
- sock_alloc_file()
-
-Use sock_alloc_file() replace sock_map_fd().
-
-Signed-off-by: yang sheng <yang.sheng@intel.com>
-Change-Id: I04cbcd651689af6b82b48ba5d49ddbf99a6758bf
----
- libcfs/autoconf/lustre-libcfs.m4  | 27 ++++++++++++++++++++++++
- libcfs/libcfs/linux/linux-tcpip.c | 44 +++++++++++++++++++++++----------------
- 2 files changed, 53 insertions(+), 18 deletions(-)
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 312542d..4545a7a 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -793,6 +793,31 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# FC18 3.7.2-201 unexport sock_map_fd() change to
-+# use sock_alloc_file().
-+# upstream commit 56b31d1c9f1e6a3ad92e7bfe252721e05d92b285
-+#
-+AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE],
-+[AC_MSG_CHECKING([sock_alloc_file is exported])
-+LB_CHECK_SYMBOL_EXPORT([sock_alloc_file], [net/socket.c],[
-+	LB_LINUX_TRY_COMPILE([
-+		#include <linux/net.h>
-+	],[
-+		sock_alloc_file(NULL, 0, NULL);
-+	],[
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_SOCK_ALLOC_FILE_3ARGS, 1,
-+			[sock_alloc_file takes 3 arguments])
-+	],[
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
-+			[sock_alloc_file is exported])
-+	])
-+],[
-+])
-+])
-+
-+#
- # LIBCFS_PROG_LINUX
- #
- # LNet linux kernel checks
-@@ -850,6 +875,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
- LC_SK_SLEEP
- # 2.6.40 fc15
- LC_SHRINK_CONTROL
-+# 3.7
-+LIBCFS_SOCK_ALLOC_FILE
- ])
- 
- #
-diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
-index 0a31b55..3be0f68 100644
---- a/libcfs/libcfs/linux/linux-tcpip.c
-+++ b/libcfs/libcfs/linux/linux-tcpip.c
-@@ -47,11 +47,11 @@
- int
- libcfs_sock_ioctl(int cmd, unsigned long arg)
- {
--        mm_segment_t   oldmm = get_fs();
--        struct socket  *sock;
--        int             fd;
--        int             rc;
--        struct file     *sock_filp;
-+	mm_segment_t    oldmm = get_fs();
-+	struct socket  *sock;
-+	int             fd = -1;
-+	int             rc;
-+	struct file    *sock_filp;
- 
-         rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock);
-         if (rc != 0) {
-@@ -59,21 +59,27 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
-                 return rc;
-         }
- 
--#ifdef HAVE_SOCK_MAP_FD_2ARG
--        fd = sock_map_fd(sock,0);
-+#if !defined(HAVE_SOCK_ALLOC_FILE) && !defined(HAVE_SOCK_ALLOC_FILE_3ARGS)
-+# ifdef HAVE_SOCK_MAP_FD_2ARG
-+	fd = sock_map_fd(sock,0);
-+# else
-+	fd = sock_map_fd(sock);
-+# endif
-+	if (fd < 0) {
-+		rc = fd;
-+		goto out;
-+	}
-+	sock_filp = fget(fd);
- #else
--        fd = sock_map_fd(sock);
-+# ifdef HAVE_SOCK_ALLOC_FILE_3ARGS
-+	sock_filp = sock_alloc_file(sock, 0, NULL);
-+# else
-+	sock_filp = sock_alloc_file(sock, 0);
-+# endif
- #endif
--        if (fd < 0) {
--                rc = fd;
--                sock_release(sock);
--                goto out;
--        }
--
--        sock_filp = fget(fd);
-         if (!sock_filp) {
-                 rc = -ENOMEM;
--                goto out_fd;
-+                goto out;
-         }
- 
- 	set_fs(KERNEL_DS);
-@@ -83,9 +89,11 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
- 
-         fput(sock_filp);
- 
-- out_fd:
--        sys_close(fd);
-  out:
-+	if (fd >= 0)
-+		sys_close(fd);
-+	else
-+		sock_release(sock);
-         return rc;
- }
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 84%
rename from sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index 510b6d3..0ed0061 100644
--- a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From b36528aa2738f3ee4c9b26694502212619ee7283 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 10/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+From 8eb9c28b3ac9bcc05f00259301c9bd92e8451a55 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Wed, 15 May 2013 09:18:19 -0400
+Subject: [PATCH 3/4] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 
@@ -12,12 +12,13 @@ Date:   Wed Feb 27 17:06:00 2013 -0800
     hlist: drop the node parameter from iterators
 
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I8f38d562607de21771b03575e37cc0498867a570
 ---
  libcfs/include/libcfs/list.h           | 10 ++++++++++
- lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++++++++++
+ lustre/autoconf/lustre-core.m4         | 27 +++++++++++++++++++++++++++
  lustre/include/linux/lustre_compat25.h |  5 +++++
- 3 files changed, 41 insertions(+)
+ 3 files changed, 42 insertions(+)
 
 diff --git a/libcfs/include/libcfs/list.h b/libcfs/include/libcfs/list.h
 index be06e74..b747804 100644
@@ -49,11 +50,11 @@ index be06e74..b747804 100644
  #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
  #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 909fe8a..e460935 100644
+index 9ac1194..2cb4edd 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2293,6 +2293,29 @@ LB_LINUX_TRY_COMPILE([
- 
+@@ -1604,6 +1604,29 @@ LB_LINUX_TRY_COMPILE([
+ ])
  
  #
 +# 3.9 uses hlist_for_each_entry with 3 args
@@ -82,10 +83,11 @@ index 909fe8a..e460935 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2481,6 +2504,9 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 # 3.8
- 	 LC_HAVE_MM_VMTRUNCATE
+@@ -1740,6 +1763,10 @@ AC_DEFUN([LC_PROG_LINUX],
  
+ 	 # 3.7
+  	 LC_HAVE_POSIXACL_USER_NS
++
 +	 # 3.9
 +	 LC_HAVE_HLIST_FOR_EACH_3ARG
 +
@@ -93,10 +95,10 @@ index 909fe8a..e460935 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index 27139fb..da2b8c0 100644
+index 4e29e69..efb3fd1 100644
 --- a/lustre/include/linux/lustre_compat25.h
 +++ b/lustre/include/linux/lustre_compat25.h
-@@ -617,8 +617,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
+@@ -421,8 +421,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
  #define ll_d_hlist_empty(list) hlist_empty(list)
  #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
  #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)

diff --git a/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
deleted file mode 100644
index 04bac71..0000000
--- a/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From ceccbd0ba0715d45702d26f3a459435906b9dbf2 Mon Sep 17 00:00:00 2001
-From: Jeff Mahoney <jeffm@suse.com>
-Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 04/12] LU-2850 compat: posix_acl_{to,from}_xattr take
- user_namespace
-
-Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
-posix_acl_{to,from}_xattr. Pretty much every caller just uses
-&init_user_ns. We mask it off in user mode so we don't need to
-create a fake structure only to ignore it.
-
-Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-Change-Id: I558a06941b364f241fd4423720957beeaf1d3cea
----
- libcfs/include/libcfs/darwin/darwin-fs.h |  6 ++++--
- libcfs/include/libcfs/linux/linux-fs.h   | 10 ++++++++++
- lustre/autoconf/lustre-core.m4           | 21 +++++++++++++++++++++
- lustre/include/liblustre.h               |  4 ++++
- lustre/llite/xattr.c                     |  2 +-
- lustre/mdc/mdc_request.c                 |  3 ++-
- 6 files changed, 42 insertions(+), 4 deletions(-)
-
-diff --git a/libcfs/include/libcfs/darwin/darwin-fs.h b/libcfs/include/libcfs/darwin/darwin-fs.h
-index 998823b..9f71d6a 100644
---- a/libcfs/include/libcfs/darwin/darwin-fs.h
-+++ b/libcfs/include/libcfs/darwin/darwin-fs.h
-@@ -171,11 +171,13 @@ struct posix_acl {
- };
- 
- struct posix_acl *posix_acl_alloc(int count, int flags);
--static inline struct posix_acl *posix_acl_from_xattr(const void *value, 
-+static inline struct posix_acl *posix_acl_from_xattr(const void *value,
-                                                      size_t size)
--{ 
-+{
-         return posix_acl_alloc(0, 0);
- }
-+#define posix_acl_from_xattr(a,b,c) posix_acl_from_xattr(b,c)
-+
- static inline void posix_acl_release(struct posix_acl *acl) {};
- static inline int posix_acl_valid(const struct posix_acl *acl) { return 0; }
- static inline struct posix_acl * posix_acl_dup(struct posix_acl *acl) 
-diff --git a/libcfs/include/libcfs/linux/linux-fs.h b/libcfs/include/libcfs/linux/linux-fs.h
-index 53975ab..fa4e4d4 100644
---- a/libcfs/include/libcfs/linux/linux-fs.h
-+++ b/libcfs/include/libcfs/linux/linux-fs.h
-@@ -53,6 +53,7 @@
- #include <linux/stat.h>
- #include <linux/mount.h>
- #include <linux/backing-dev.h>
-+#include <linux/posix_acl_xattr.h>
- 
- #define filp_size(f)					\
- 	(i_size_read((f)->f_dentry->d_inode))
-@@ -102,4 +103,13 @@ ssize_t filp_user_write(struct file *filp, const void *buf, size_t count,
- #define DTTOIF(dirtype)		((dirtype) << IFSHIFT)
- #endif
- 
-+#ifndef HAVE_POSIXACL_USER_NS
-+/*
-+ * Mask out &init_user_ns so we don't jump
-+ * through hoops to define it somehow only
-+ * to have it ignored anyway.
-+ */
-+#define posix_acl_from_xattr(a,b,c)	posix_acl_from_xattr(b,c)
-+#define posix_acl_to_xattr(a,b,c,d)	posix_acl_to_xattr(b,c,d)
-+#endif
- #endif
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 1972e17..d0efbf4 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2234,6 +2234,25 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.7 posix_acl_{to,from}_xattr take struct user_namespace
-+#
-+AC_DEFUN([LC_HAVE_POSIXACL_USER_NS],
-+[AC_MSG_CHECKING([if posix_acl_to_xattr takes struct user_namespace])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+	#include <linux/posix_acl_xattr.h>
-+],[
-+	posix_acl_to_xattr((struct user_namespace *)NULL, NULL, NULL, 0);
-+],[
-+	AC_DEFINE(HAVE_POSIXACL_USER_NS, 1,
-+		  [posix_acl_to_xattr takes struct user_namespace])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2415,6 +2434,8 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_DENTRY_OPEN_USE_PATH
- 	 LC_HAVE_IOP_ATOMIC_OPEN
- 
-+	 # 3.7
-+ 	 LC_HAVE_POSIXACL_USER_NS
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index b93d805..ad88587 100644
---- a/lustre/include/liblustre.h
-+++ b/lustre/include/liblustre.h
-@@ -458,6 +458,10 @@ struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
-         return NULL;
- }
- 
-+/* The kernel version takes 3 arguments, so strip that off first. */
-+#define posix_acl_from_xattr(a,b,c)	posix_acl_from_xattr(b,c)
-+#define posix_acl_to_xattr(a,b,c)	posix_acl_to_xattr(b,c)
-+
- static inline
- int posix_acl_valid(const struct posix_acl *acl)
- {
-diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index 8772b74..a08c58a 100644
---- a/lustre/llite/xattr.c
-+++ b/lustre/llite/xattr.c
-@@ -345,7 +345,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
-                 if (!acl)
-                         RETURN(-ENODATA);
- 
--                rc = posix_acl_to_xattr(acl, buffer, size);
-+                rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
-                 posix_acl_release(acl);
-                 RETURN(rc);
-         }
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 3ea8996..5751460 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -41,6 +41,7 @@
- # include <linux/pagemap.h>
- # include <linux/miscdevice.h>
- # include <linux/init.h>
-+# include <linux/utsname.h>
- #else
- # include <liblustre.h>
- #endif
-@@ -470,7 +471,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
-         if (!buf)
-                 RETURN(-EPROTO);
- 
--        acl = posix_acl_from_xattr(buf, body->aclsize);
-+        acl = posix_acl_from_xattr(&init_user_ns, buf, body->aclsize);
-         if (IS_ERR(acl)) {
-                 rc = PTR_ERR(acl);
-                 CERROR("convert xattr to acl: %d\n", rc);
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
similarity index 82%
rename from sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
rename to sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index bfcb3da..2dd2223 100644
--- a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From f8a2f09093e0279f32eb7e79b6d014bbee8482d7 Mon Sep 17 00:00:00 2001
+From 58a8bf674096caabc6edc0c598f16a0b04c05ebf Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 11/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 4/4] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 
@@ -21,10 +21,10 @@ Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
  2 files changed, 27 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index e460935..0cc6ef4 100644
+index 2cb4edd..ba69c41 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2316,6 +2316,28 @@ LB_LINUX_TRY_COMPILE([
+@@ -1627,6 +1627,28 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -53,7 +53,7 @@ index e460935..0cc6ef4 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2506,6 +2528,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -1766,6 +1788,7 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.9
  	 LC_HAVE_HLIST_FOR_EACH_3ARG
@@ -62,10 +62,10 @@ index e460935..0cc6ef4 100644
  	 #
  	 if test x$enable_server = xyes ; then
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 878f645..f7f7938 100644
+index dd7f7df..e625200 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
-@@ -640,7 +640,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+@@ -629,7 +629,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
          }
  	filp->f_version = inode->i_version;
  #ifdef HAVE_TOUCH_ATIME_1ARG

diff --git a/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
deleted file mode 100644
index 9dfae36..0000000
--- a/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 9248d7b04b67f683ac2a04b35793790047b50ab7 Mon Sep 17 00:00:00 2001
-From: Jeff Mahoney <jeffm@suse.com>
-Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 05/12] LU-2800 llite: introduce local getname()
-
-Commit 8e377d15 (v3.7) unexported getname and putname. Although
-getname was re-exported, putname was not. All we really need is
-something to to allocate a buffer and copy it from userspace so
-let's just use our own version. The down size is that we lose
-the audit support in the original getname.
-
-Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-Change-Id: If44cd9f9d14f26f220d5f0c52e8b804a49d3cf92
----
- lustre/llite/dir.c | 32 ++++++++++++++++++++++++++++----
- 1 file changed, 28 insertions(+), 4 deletions(-)
-
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index a3086d0..878f645 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -1228,6 +1228,30 @@ out:
-         RETURN(rc);
- }
- 
-+static char *
-+ll_getname(const char __user *filename)
-+{
-+	int ret = 0, len;
-+	char *tmp = __getname();
-+
-+	if (!tmp)
-+		return ERR_PTR(-ENOMEM);
-+
-+	len = strncpy_from_user(tmp, filename, PATH_MAX);
-+	if (len == 0)
-+		ret = -ENOENT;
-+	else if (len > PATH_MAX)
-+		ret = -ENAMETOOLONG;
-+
-+	if (ret) {
-+		__putname(tmp);
-+		tmp =  ERR_PTR(ret);
-+	}
-+	return tmp;
-+}
-+
-+#define ll_putname(filename) __putname(filename)
-+
- static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
- {
-         struct inode *inode = file->f_dentry->d_inode;
-@@ -1430,7 +1454,7 @@ free_lmv:
- 		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
- 			return -ENOTSUPP;
- 
--		filename = getname((const char *)arg);
-+		filename = ll_getname((const char *)arg);
- 		if (IS_ERR(filename))
- 			RETURN(PTR_ERR(filename));
- 
-@@ -1441,7 +1465,7 @@ free_lmv:
- 		rc = ll_rmdir_entry(inode, filename, namelen);
- out_rmdir:
-                 if (filename)
--                        putname(filename);
-+                        ll_putname(filename);
- 		RETURN(rc);
- 	}
- 	case LL_IOC_LOV_SWAP_LAYOUTS:
-@@ -1461,7 +1485,7 @@ out_rmdir:
- 
-                 if (cmd == IOC_MDC_GETFILEINFO ||
-                     cmd == IOC_MDC_GETFILESTRIPE) {
--                        filename = getname((const char *)arg);
-+                        filename = ll_getname((const char *)arg);
-                         if (IS_ERR(filename))
-                                 RETURN(PTR_ERR(filename));
- 
-@@ -1528,7 +1552,7 @@ out_rmdir:
-         out_req:
-                 ptlrpc_req_finished(request);
-                 if (filename)
--                        putname(filename);
-+                        ll_putname(filename);
-                 return rc;
-         }
-         case IOC_LOV_GETINFO: {
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
deleted file mode 100644
index f55f693..0000000
--- a/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From fe7ac0140ddb8fe5b8b046d857ed018ac9dc6335 Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 06/12] LU-2987 llite: rcu-free inode
-
-Since 2.6.38, inode.i_rcu was added and file system .destory_inode
-should rcu-free inodes.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
----
- lustre/autoconf/lustre-core.m4 | 21 +++++++++++++++++++++
- lustre/llite/super25.c         | 18 ++++++++++++++++--
- 2 files changed, 37 insertions(+), 2 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index d0efbf4..bd7ef11 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1683,6 +1683,26 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 2.6.38 inode.i_rcu added.
-+#
-+AC_DEFUN([LC_INODE_I_RCU],
-+[AC_MSG_CHECKING([if inode.i_rcu exists])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct inode ino;
-+	struct rcu_head rcu = {};
-+	ino.i_rcu = rcu;
-+],[
-+	AC_DEFINE(HAVE_INODE_I_RCU, 1,
-+		[inode.i_rcu exists])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # 2.6.38 export blkdev_get_by_dev
- #
- AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
-@@ -2390,6 +2410,7 @@ AC_DEFUN([LC_PROG_LINUX],
-          LC_GENERIC_PERMISSION
-          LC_QUOTA_ON_USE_PATH
-          LC_DCACHE_LOCK
-+	 LC_INODE_I_RCU
-          LC_D_COMPARE_7ARGS
-          LC_D_DELETE_CONST
- 
-diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
-index 90949ff..0b9bdbc 100644
---- a/lustre/llite/super25.c
-+++ b/lustre/llite/super25.c
-@@ -61,11 +61,25 @@ static struct inode *ll_alloc_inode(struct super_block *sb)
-         return &lli->lli_vfs_inode;
- }
- 
-+#ifdef HAVE_INODE_I_RCU
-+static void ll_inode_destroy_callback(struct rcu_head *head)
-+{
-+	struct inode *inode = container_of(head, struct inode, i_rcu);
-+	struct ll_inode_info *ptr = ll_i2info(inode);
-+	OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
-+}
-+
-+static void ll_destroy_inode(struct inode *inode)
-+{
-+	call_rcu(&inode->i_rcu, ll_inode_destroy_callback);
-+}
-+#else
- static void ll_destroy_inode(struct inode *inode)
- {
--        struct ll_inode_info *ptr = ll_i2info(inode);
--        OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
-+	struct ll_inode_info *ptr = ll_i2info(inode);
-+	OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
- }
-+#endif
- 
- int ll_init_inodecache(void)
- {
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
deleted file mode 100644
index 4ce5b1f..0000000
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 019311dd1ae9e97336748f016afd2581d8ecc213 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Wed, 17 Apr 2013 13:27:55 +0400
-Subject: [PATCH 07/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
-
-vmtruncate() is removed since upstream commit b9f61c3.
-We can open code is for llite though.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
----
- lustre/autoconf/lustre-core.m4 | 24 ++++++++++++++++++++++++
- lustre/llite/vvp_io.c          | 10 +++++++++-
- 2 files changed, 33 insertions(+), 1 deletion(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index bd7ef11..909fe8a 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2273,6 +2273,26 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.8 removes vmtruncate()
-+# see upstream commit b9f61c3
-+#
-+AC_DEFUN([LC_HAVE_MM_VMTRUNCATE],
-+[AC_MSG_CHECKING([if mm has vmtruncate])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/mm.h>
-+],[
-+	vmtruncate(NULL, 0);
-+],[
-+	AC_DEFINE(HAVE_MM_VMTRUNCATE, 1,
-+		[vmtruncate is defined by the kernel])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2457,6 +2477,10 @@ AC_DEFUN([LC_PROG_LINUX],
- 
- 	 # 3.7
-  	 LC_HAVE_POSIXACL_USER_NS
-+
-+	 # 3.8
-+	 LC_HAVE_MM_VMTRUNCATE
-+
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index 3a64517..59a3bd8 100644
---- a/lustre/llite/vvp_io.c
-+++ b/lustre/llite/vvp_io.c
-@@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
- 	 * Only ll_inode_size_lock is taken at this level.
- 	 */
- 	ll_inode_size_lock(inode);
-+#ifdef HAVE_MM_VMTRUNCATE
- 	result = vmtruncate(inode, size);
-+#else
-+	result = inode_newsize_ok(inode, size);
-+	if (result < 0) {
-+		ll_inode_size_unlock(inode);
-+		return result;
-+	}
-+	truncate_setsize(inode, size);
-+#endif
- 	ll_inode_size_unlock(inode);
--
- 	return result;
- }
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
deleted file mode 100644
index 3094ef4..0000000
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ /dev/null
@@ -1,3005 +0,0 @@
-From 3440a08d1e950bddff32304ea1ba919d63ae47be Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 23 Apr 2013 10:18:04 -0400
-Subject: [PATCH 08/12] LU-2850 kernel: 3.8 upstream kills daemonize()
-
-kernel_thread() is a low level kernel function.
-Instead of calling kernel_thread() and relying on daemonize()
-to create new kernel threads, we should really switch to
-kthread_run() and elimilate daemonize().
-
-Conflicts:
-	lustre/mdd/mdd_lfsck.c
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
----
- libcfs/autoconf/lustre-libcfs.m4           | 28 -----------
- libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
- libcfs/include/libcfs/libcfs.h             | 13 +----
- libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
- libcfs/include/libcfs/posix/libcfs.h       |  1 +
- libcfs/include/libcfs/user-prim.h          |  5 +-
- libcfs/include/libcfs/winnt/winnt-prim.h   |  4 --
- libcfs/libcfs/Makefile.in                  |  4 +-
- libcfs/libcfs/darwin/darwin-prim.c         | 39 +++++++-------
- libcfs/libcfs/darwin/darwin-utils.c        |  2 +-
- libcfs/libcfs/debug.c                      | 20 ++++----
- libcfs/libcfs/linux/Makefile.am            |  2 +-
- libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
- libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
- libcfs/libcfs/tracefile.c                  | 15 +++---
- libcfs/libcfs/user-prim.c                  | 38 +++++++-------
- libcfs/libcfs/watchdog.c                   | 25 ++++-----
- libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
- libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
- libcfs/libcfs/workitem.c                   | 26 +++++-----
- lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
- lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
- lnet/klnds/gnilnd/gnilnd_stack.c           |  2 -
- lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
- lnet/klnds/mxlnd/mxlnd_cb.c                | 11 ----
- lnet/klnds/o2iblnd/o2iblnd.c               | 13 +++--
- lnet/klnds/o2iblnd/o2iblnd.h               |  2 +-
- lnet/klnds/o2iblnd/o2iblnd_cb.c            | 23 +++------
- lnet/klnds/ptllnd/ptllnd.c                 |  5 +-
- lnet/klnds/ptllnd/ptllnd_cb.c              | 25 ++++-----
- lnet/klnds/qswlnd/qswlnd.c                 |  3 +-
- lnet/klnds/qswlnd/qswlnd_cb.c              | 13 +++--
- lnet/klnds/ralnd/ralnd.c                   | 10 ++--
- lnet/klnds/ralnd/ralnd.h                   |  2 +-
- lnet/klnds/ralnd/ralnd_cb.c                | 19 ++-----
- lnet/klnds/socklnd/socklnd.c               | 19 +++++--
- lnet/klnds/socklnd/socklnd.h               |  2 +-
- lnet/klnds/socklnd/socklnd_cb.c            | 30 ++++-------
- lnet/lnet/acceptor.c                       | 11 ++--
- lnet/lnet/module.c                         | 10 ++--
- lnet/lnet/router.c                         | 20 ++++----
- lnet/selftest/timer.c                      | 11 ++--
- lnet/ulnds/socklnd/usocklnd.c              | 17 ++++---
- lustre/ldlm/ldlm_lib.c                     | 31 +++++-------
- lustre/ldlm/ldlm_lockd.c                   | 41 +++++++--------
- lustre/ldlm/ldlm_pool.c                    | 53 +++++++++----------
- lustre/llite/llite_capa.c                  | 25 +++++----
- lustre/llite/llite_close.c                 | 26 ++++------
- lustre/llite/lloop.c                       | 10 ++--
- lustre/llite/statahead.c                   | 61 +++++++++++-----------
- lustre/mdc/mdc_request.c                   | 34 ++++++-------
- lustre/mdd/mdd_lfsck.c                     |  7 ++-
- lustre/mdt/mdt_capa.c                      | 26 +++++-----
- lustre/mgc/mgc_request.c                   | 31 ++++++------
- lustre/mgs/mgs_nids.c                      | 13 ++---
- lustre/obdclass/genops.c                   | 22 +++-----
- lustre/obdclass/llog.c                     |  8 +--
- lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
- lustre/osp/osp_precreate.c                 | 15 +++---
- lustre/osp/osp_sync.c                      |  9 ++--
- lustre/ptlrpc/import.c                     | 34 +++++++------
- lustre/ptlrpc/pinger.c                     | 39 +++++++-------
- lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
- lustre/ptlrpc/sec_gc.c                     | 12 ++---
- lustre/ptlrpc/service.c                    | 25 +++++----
- lustre/quota/qmt_lock.c                    | 17 +++----
- lustre/quota/qsd_reint.c                   |  6 +--
- lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 516 insertions(+), 760 deletions(-)
- delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 4545a7a..0f53b9a 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -638,15 +638,6 @@ LB_LINUX_TRY_COMPILE([
- ])
- ])
- 
--AC_DEFUN([LIBCFS_HAVE_OOM_H],
--[LB_CHECK_FILE([$LINUX/include/linux/oom.h], [
--        AC_DEFINE(HAVE_LINUX_OOM_H, 1,
--                [kernel has include/oom.h])
--],[
--        AC_MSG_RESULT([no])
--])
--])
--
- AC_DEFUN([LIBCFS_HAVE_KEYTYPE_H],
- [LB_CHECK_FILE([$LINUX/include/linux/key-type.h], [
-         AC_DEFINE(HAVE_LINUX_KEYTYPE_H, 1,
-@@ -696,23 +687,6 @@ LB_LINUX_TRY_COMPILE([
- ])
- ])
- 
--# 2.6.18 store oom parameters in task struct.
--# 2.6.32 store oom parameters in signal struct
--AC_DEFUN([LIBCFS_OOMADJ_IN_SIG],
--[AC_MSG_CHECKING([kernel store oom parameters in task])
--LB_LINUX_TRY_COMPILE([
--        #include <linux/sched.h>
--],[
--        ((struct signal_struct *)0)->oom_adj = 0;
--],[
--        AC_MSG_RESULT(yes)
--        AC_DEFINE(HAVE_OOMADJ_IN_SIG, 1,
--                  [kernel store a oom parameters in signal struct])
--],[
--        AC_MSG_RESULT(no)
--])
--])
--
- #
- # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
- #
-@@ -865,8 +839,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
- # 2.6.32
- LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
- LC_SHRINKER_WANT_SHRINK_PTR
--LIBCFS_HAVE_OOM_H
--LIBCFS_OOMADJ_IN_SIG
- # 2.6.33
- LIBCFS_SYSCTL_CTLNAME
- # 2.6.34
-diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
-index 7bc7af3..583e257 100644
---- a/libcfs/include/libcfs/darwin/darwin-prim.h
-+++ b/libcfs/include/libcfs/darwin/darwin-prim.h
-@@ -202,10 +202,8 @@ extern task_t	kernel_task;
- 
- #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
- 
--#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
--
--extern int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flag);
--
-+extern cfs_task_t kthread_run(cfs_thread_t func, void *arg,
-+			      const char namefmt[], ...);
- 
- /*
-  * Wait Queue implementation
-diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h
-index 2375ed9..34c36a3 100644
---- a/libcfs/include/libcfs/libcfs.h
-+++ b/libcfs/include/libcfs/libcfs.h
-@@ -226,8 +226,7 @@ void cfs_enter_debugger(void);
- /*
-  * Defined by platform
-  */
--void cfs_daemonize(char *str);
--int cfs_daemonize_ctxt(char *str);
-+int unshare_fs_struct(void);
- cfs_sigset_t cfs_get_blocked_sigs(void);
- cfs_sigset_t cfs_block_allsigs(void);
- cfs_sigset_t cfs_block_sigs(unsigned long sigs);
-@@ -236,16 +235,6 @@ void cfs_restore_sigs(cfs_sigset_t);
- int cfs_signal_pending(void);
- void cfs_clear_sigpending(void);
- 
--/*
-- * XXX Liang:
-- * these macros should be removed in the future,
-- * we keep them just for keeping libcfs compatible
-- * with other branches.
-- */
--#define libcfs_daemonize(s)     cfs_daemonize(s)
--#define cfs_sigmask_lock(f)     do { f= 0; } while (0)
--#define cfs_sigmask_unlock(f)   do { f= 0; } while (0)
--
- int convert_server_error(__u64 ecode);
- int convert_client_oflag(int cflag, int *result);
- 
-diff --git a/libcfs/include/libcfs/linux/linux-prim.h b/libcfs/include/libcfs/linux/linux-prim.h
-index 1aeb5aa..31298e1 100644
---- a/libcfs/include/libcfs/linux/linux-prim.h
-+++ b/libcfs/include/libcfs/linux/linux-prim.h
-@@ -183,15 +183,6 @@ typedef long                            cfs_task_state_t;
- 
- #define CFS_DECL_WAITQ(wq)		DECLARE_WAIT_QUEUE_HEAD(wq)
- 
--#define cfs_kthread_run(fn, data, fmt, arg...) kthread_run(fn, data, fmt, ##arg)
--
--/* Kernel thread */
--typedef int (*cfs_thread_t)(void *);
--
--#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
--extern int cfs_create_thread(int (*fn)(void *),
--                             void *arg, unsigned long flags);
--
- /*
-  * Task struct
-  */
-diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 64cfbc7..305b74b 100644
---- a/libcfs/include/libcfs/posix/libcfs.h
-+++ b/libcfs/include/libcfs/posix/libcfs.h
-@@ -110,6 +110,7 @@
- typedef unsigned long long cfs_cycles_t;
- 
- #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L)
-+#define IS_ERR_VALUE(a) (IS_ERR(a))
- #define PTR_ERR(a) ((long)(a))
- #define ERR_PTR(a) ((void*)((long)(a)))
- 
-diff --git a/libcfs/include/libcfs/user-prim.h b/libcfs/include/libcfs/user-prim.h
-index 85253d8..c4e806c 100644
---- a/libcfs/include/libcfs/user-prim.h
-+++ b/libcfs/include/libcfs/user-prim.h
-@@ -157,9 +157,10 @@ static inline int cfs_psdev_deregister(cfs_psdev_t *foo)
- 
- #ifdef HAVE_LIBPTHREAD
- typedef int (*cfs_thread_t)(void *);
--int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags);
-+void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...);
- #else
--#define cfs_create_thread(l,m) LBUG()
-+/* Fine, crash, but stop giving me compile warnings */
-+#define kthread_run(f, a, n, ...) LBUG()
- #endif
- 
- uid_t cfs_curproc_uid(void);
-diff --git a/libcfs/include/libcfs/winnt/winnt-prim.h b/libcfs/include/libcfs/winnt/winnt-prim.h
-index 985af01..e234bba 100644
---- a/libcfs/include/libcfs/winnt/winnt-prim.h
-+++ b/libcfs/include/libcfs/winnt/winnt-prim.h
-@@ -442,8 +442,6 @@ typedef struct _cfs_thread_context {
-     void *              arg;
- } cfs_thread_context_t;
- 
--int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
--
- /*
-  * thread creation flags from Linux, not used in winnt
-  */
-@@ -461,8 +459,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
- 
- #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
- 
--#define CFS_DAEMON_FLAGS (CLONE_VM|CLONE_FILES)
--
- /*
-  * group_info: linux/sched.h
-  */
-diff --git a/libcfs/libcfs/Makefile.in b/libcfs/libcfs/Makefile.in
-index 71852cc..ddfadde 100644
---- a/libcfs/libcfs/Makefile.in
-+++ b/libcfs/libcfs/Makefile.in
-@@ -3,7 +3,7 @@ MODULES = libcfs
- libcfs-linux-objs := linux-tracefile.o linux-debug.o
- libcfs-linux-objs += linux-prim.o linux-mem.o linux-cpu.o
- libcfs-linux-objs += linux-fs.o linux-sync.o linux-tcpip.o
--libcfs-linux-objs += linux-lwt.o linux-proc.o linux-curproc.o
-+libcfs-linux-objs += linux-proc.o linux-curproc.o
- libcfs-linux-objs += linux-utils.o linux-module.o
- libcfs-linux-objs += linux-crypto.o linux-crypto-crc32.o
- libcfs-linux-objs += linux-crypto-adler.o
-@@ -29,7 +29,7 @@ sources:
- 
- libcfs-linux-objs := $(addprefix linux/,$(libcfs-linux-objs))
- 
--libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \
-+libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \
- 		   watchdog.o libcfs_string.o hash.o kernel_user_comm.o \
- 		   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
- 		   libcfs_mem.o libcfs_lock.o heap.o
-diff --git a/libcfs/libcfs/darwin/darwin-prim.c b/libcfs/libcfs/darwin/darwin-prim.c
-index 68d1c0d..8e0901f 100644
---- a/libcfs/libcfs/darwin/darwin-prim.c
-+++ b/libcfs/libcfs/darwin/darwin-prim.c
-@@ -333,24 +333,29 @@ cfs_thread_agent (void)
- 
- extern thread_t kernel_thread(task_t task, void (*start)(void));
- 
--int
--cfs_create_thread(cfs_thread_t  func, void *arg, unsigned long flag)
--{
--        int ret = 0;
--        thread_t th = NULL;
--
--        thread_arg_hold(&cfs_thread_arg, func, arg);
--        th = kernel_thread(kernel_task, cfs_thread_agent);
--        thread_arg_release(&cfs_thread_arg);
--        if (th == THREAD_NULL)
-+cfs_task_t
-+kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
-+{
-+	int ret = 0;
-+	thread_t th = NULL;
-+
-+	thread_arg_hold(&cfs_thread_arg, func, arg);
-+	th = kernel_thread(kernel_task, cfs_thread_agent);
-+	thread_arg_release(&cfs_thread_arg);
-+	if (th != THREAD_NULL) {
-+		/*
-+		 * FIXME: change child thread name...
-+		 * cfs_curproc_comm() is already broken. So it is left as is...
-+		va_list args;
-+		va_start(args, namefmt);
-+		snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX,
-+			 namefmt, args);
-+		va_end(args);
-+		 */
-+	} else {
-                 ret = -1;
--        return ret;
--}
--
--void cfs_daemonize(char *str)
--{
--        snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX, "%s", str);
--        return;
-+	}
-+	return (cfs_task_t)((long)ret);
- }
- 
- /*
-diff --git a/libcfs/libcfs/darwin/darwin-utils.c b/libcfs/libcfs/darwin/darwin-utils.c
-index c66f8e8..909b586 100644
---- a/libcfs/libcfs/darwin/darwin-utils.c
-+++ b/libcfs/libcfs/darwin/darwin-utils.c
-@@ -531,7 +531,7 @@ static int is_last_frame(void *addr)
- 		return 1;
- 	else if (is_addr_in_range(addr, trap, syscall_trace))
- 		return 1;
--	else if (is_addr_in_range(addr, cfs_thread_agent, cfs_create_thread))
-+	else if (is_addr_in_range(addr, cfs_thread_agent, kthread_run))
- 		return 1;
- 	else
- 		return 0;
-diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c
-index f503781..16a8e99 100644
---- a/libcfs/libcfs/debug.c
-+++ b/libcfs/libcfs/debug.c
-@@ -367,16 +367,16 @@ void libcfs_debug_dumplog(void)
-         /* we're being careful to ensure that the kernel thread is
-          * able to set our state to running as it exits before we
-          * get to schedule() */
--        cfs_waitlink_init(&wait);
--        cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
--        cfs_waitq_add(&debug_ctlwq, &wait);
--
--        dumper = cfs_kthread_run(libcfs_debug_dumplog_thread,
--                                 (void*)(long)cfs_curproc_pid(),
--                                 "libcfs_debug_dumper");
--        if (IS_ERR(dumper))
--                printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
--                       " %ld\n", PTR_ERR(dumper));
-+	cfs_waitlink_init(&wait);
-+	cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
-+	cfs_waitq_add(&debug_ctlwq, &wait);
-+
-+	dumper = kthread_run(libcfs_debug_dumplog_thread,
-+			     (void *)(long)cfs_curproc_pid(),
-+			     "libcfs_debug_dumper");
-+	if (IS_ERR(dumper))
-+		printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
-+		       " %ld\n", PTR_ERR(dumper));
-         else
-                 cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
- 
-diff --git a/libcfs/libcfs/linux/Makefile.am b/libcfs/libcfs/linux/Makefile.am
-index bb75462..3c0209f 100644
---- a/libcfs/libcfs/linux/Makefile.am
-+++ b/libcfs/libcfs/linux/Makefile.am
-@@ -1,4 +1,4 @@
--EXTRA_DIST = linux-debug.c linux-lwt.c linux-prim.c linux-tracefile.c	\
-+EXTRA_DIST = linux-debug.c linux-prim.c linux-tracefile.c	\
- 	linux-fs.c linux-mem.c linux-proc.c linux-utils.c linux-lock.c	\
- 	linux-module.c linux-sync.c linux-curproc.c linux-tcpip.c	\
- 	linux-cpu.c linux-crypto.c linux-crypto-crc32.c linux-crypto-adler.c \
-diff --git a/libcfs/libcfs/linux/linux-lwt.c b/libcfs/libcfs/linux/linux-lwt.c
-deleted file mode 100644
-index d9d4dc1..0000000
---- a/libcfs/libcfs/linux/linux-lwt.c
-+++ /dev/null
-@@ -1,81 +0,0 @@
--/*
-- * GPL HEADER START
-- *
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 only,
-- * as published by the Free Software Foundation.
-- *
-- * 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 version 2 for more details (a copy is included
-- * in the LICENSE file that accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License
-- * version 2 along with this program; If not, see
-- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
-- *
-- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-- * CA 95054 USA or visit www.sun.com if you need additional information or
-- * have any questions.
-- *
-- * GPL HEADER END
-- */
--/*
-- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
-- * Use is subject to license terms.
-- *
-- * Copyright (c) 2012, Intel Corporation.
-- */
--/*
-- * This file is part of Lustre, http://www.lustre.org/
-- * Lustre is a trademark of Sun Microsystems, Inc.
-- */
--
--# define DEBUG_SUBSYSTEM S_LNET
--#include <linux/module.h>
--#include <linux/sched.h>
--#include <linux/spinlock.h>
--
--#ifdef HAVE_LINUX_OOM_H
--#include <linux/oom.h>
--#else
--#include <linux/mm.h>
--#endif
--
--int oom_get_adj(struct task_struct *task, int scope)
--{
--	int oom_adj;
--#ifdef HAVE_OOMADJ_IN_SIG
--	unsigned long flags;
--
--	spin_lock_irqsave(&task->sighand->siglock, flags);
--	oom_adj = task->signal->oom_adj;
--	task->signal->oom_adj = scope;
--	spin_unlock_irqrestore(&task->sighand->siglock, flags);
--
--#else
--	oom_adj = task->oomkilladj;
--	task->oomkilladj = scope;
--#endif
--	return oom_adj;
--}
--
--int cfs_create_thread(int (*fn)(void *),
--                      void *arg, unsigned long flags)
--{
--        void *orig_info = current->journal_info;
--        int rc;
--        int old_oom;
--
--        old_oom = oom_get_adj(current, OOM_DISABLE);
--        current->journal_info = NULL;
--        rc = kernel_thread(fn, arg, flags);
--        current->journal_info = orig_info;
--        oom_get_adj(current, old_oom);
--
--        return rc;
--}
--EXPORT_SYMBOL(cfs_create_thread);
-diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index 43b172e..9e2de0e 100644
---- a/libcfs/libcfs/linux/linux-prim.c
-+++ b/libcfs/libcfs/linux/linux-prim.c
-@@ -259,34 +259,20 @@ void cfs_enter_debugger(void)
- #endif
- }
- 
--void cfs_daemonize(char *str) {
--        unsigned long flags;
--
--        daemonize(str);
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--}
--
--int cfs_daemonize_ctxt(char *str) {
--
--        cfs_daemonize(str);
- #ifndef HAVE_UNSHARE_FS_STRUCT
--        {
--        struct task_struct *tsk = current;
--        struct fs_struct *fs = NULL;
--        fs = copy_fs_struct(tsk->fs);
--        if (fs == NULL)
--                return -ENOMEM;
--        exit_fs(tsk);
--        tsk->fs = fs;
--        }
--#else
--        unshare_fs_struct();
-+int unshare_fs_struct(void)
-+{
-+	struct task_struct *tsk = current;
-+	struct fs_struct *fs = NULL;
-+	fs = copy_fs_struct(tsk->fs);
-+	if (fs == NULL)
-+		return -ENOMEM;
-+	exit_fs(tsk);
-+	tsk->fs = fs;
-+	return 0;
-+}
-+EXPORT_SYMBOL(unshare_fs_struct);
- #endif
--        return 0;
--}
- 
- sigset_t
- cfs_block_allsigs(void)
-@@ -373,8 +359,6 @@ libcfs_arch_cleanup(void)
- EXPORT_SYMBOL(libcfs_arch_init);
- EXPORT_SYMBOL(libcfs_arch_cleanup);
- EXPORT_SYMBOL(cfs_enter_debugger);
--EXPORT_SYMBOL(cfs_daemonize);
--EXPORT_SYMBOL(cfs_daemonize_ctxt);
- EXPORT_SYMBOL(cfs_block_allsigs);
- EXPORT_SYMBOL(cfs_block_sigs);
- EXPORT_SYMBOL(cfs_block_sigsinv);
-diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
-index 916bdc9..2049908 100644
---- a/libcfs/libcfs/tracefile.c
-+++ b/libcfs/libcfs/tracefile.c
-@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
- 
- 	/* we're started late enough that we pick up init's fs context */
- 	/* this is so broken in uml?  what on earth is going on? */
--	cfs_daemonize("ktracefiled");
- 
- 	spin_lock_init(&pc.pc_lock);
- 	complete(&tctl->tctl_start);
-@@ -1106,16 +1105,16 @@ int cfs_trace_start_thread(void)
- 
- 	init_completion(&tctl->tctl_start);
- 	init_completion(&tctl->tctl_stop);
--        cfs_waitq_init(&tctl->tctl_waitq);
--        cfs_atomic_set(&tctl->tctl_shutdown, 0);
-+	cfs_waitq_init(&tctl->tctl_waitq);
-+	cfs_atomic_set(&tctl->tctl_shutdown, 0);
- 
--        if (cfs_create_thread(tracefiled, tctl, 0) < 0) {
--                rc = -ECHILD;
--                goto out;
--        }
-+	if (IS_ERR(kthread_run(tracefiled, tctl, "ktracefiled"))) {
-+		rc = -ECHILD;
-+		goto out;
-+	}
- 
- 	wait_for_completion(&tctl->tctl_start);
--        thread_running = 1;
-+	thread_running = 1;
- out:
- 	mutex_unlock(&cfs_trace_thread_mutex);
-         return rc;
-diff --git a/libcfs/libcfs/user-prim.c b/libcfs/libcfs/user-prim.c
-index eb21418..9f2b7b3 100644
---- a/libcfs/libcfs/user-prim.c
-+++ b/libcfs/libcfs/user-prim.c
-@@ -223,24 +223,25 @@ static void *cfs_thread_helper(void *data)
-         return NULL;
- }
- 
--int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags)
-+void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
- {
--        pthread_t tid;
--        pthread_attr_t tattr;
--        int rc;
--        struct lustre_thread_arg *targ_p = malloc(sizeof(struct lustre_thread_arg));
-+	pthread_t tid;
-+	pthread_attr_t tattr;
-+	int rc;
-+	struct lustre_thread_arg *targ_p =
-+				malloc(sizeof(struct lustre_thread_arg));
- 
--        if ( targ_p == NULL )
--                return -ENOMEM;
-+	if (targ_p == NULL)
-+		return ERR_PTR(-ENOMEM);
- 
--        targ_p->f = func;
--        targ_p->arg = arg;
-+	targ_p->f = func;
-+	targ_p->arg = arg;
- 
--        pthread_attr_init(&tattr);
--        pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
--        rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
--        pthread_attr_destroy(&tattr);
--        return -rc;
-+	pthread_attr_init(&tattr);
-+	pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
-+	rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
-+	pthread_attr_destroy(&tattr);
-+	return ERR_PTR(rc);
- }
- #endif
- 
-@@ -314,14 +315,9 @@ void cfs_enter_debugger(void)
-          */
- }
- 
--void cfs_daemonize(char *str)
-+int unshare_fs_struct()
- {
--        return;
--}
--
--int cfs_daemonize_ctxt(char *str)
--{
--        return 0;
-+	return 0;
- }
- 
- cfs_sigset_t cfs_block_allsigs(void)
-diff --git a/libcfs/libcfs/watchdog.c b/libcfs/libcfs/watchdog.c
-index e08fe68..0981a2c 100644
---- a/libcfs/libcfs/watchdog.c
-+++ b/libcfs/libcfs/watchdog.c
-@@ -213,19 +213,11 @@ static void lcw_dump_stack(struct lc_watchdog *lcw)
- static int lcw_dispatch_main(void *data)
- {
-         int                 rc = 0;
--        unsigned long       flags;
-         struct lc_watchdog *lcw;
-         CFS_LIST_HEAD      (zombies);
- 
-         ENTRY;
- 
--        cfs_daemonize("lc_watchdogd");
--
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--
- 	complete(&lcw_start_completion);
- 
-         while (1) {
-@@ -312,7 +304,7 @@ static int lcw_dispatch_main(void *data)
- 
- static void lcw_dispatch_start(void)
- {
--	int rc;
-+	cfs_task_t *task;
- 
- 	ENTRY;
- 	LASSERT(lcw_refcount == 1);
-@@ -321,13 +313,14 @@ static void lcw_dispatch_start(void)
- 	init_completion(&lcw_start_completion);
-         cfs_waitq_init(&lcw_event_waitq);
- 
--        CDEBUG(D_INFO, "starting dispatch thread\n");
--        rc = cfs_create_thread(lcw_dispatch_main, NULL, 0);
--        if (rc < 0) {
--                CERROR("error spawning watchdog dispatch thread: %d\n", rc);
--                EXIT;
--                return;
--        }
-+	CDEBUG(D_INFO, "starting dispatch thread\n");
-+	task = kthread_run(lcw_dispatch_main, NULL, "lc_watchdogd");
-+	if (IS_ERR(task)) {
-+		CERROR("error spawning watchdog dispatch thread: %ld\n",
-+			PTR_ERR(task));
-+		EXIT;
-+		return;
-+	}
- 	wait_for_completion(&lcw_start_completion);
- 	CDEBUG(D_INFO, "watchdog dispatcher initialization complete.\n");
- 
-diff --git a/libcfs/libcfs/winnt/winnt-prim.c b/libcfs/libcfs/winnt/winnt-prim.c
-index 8596a40..1d04567 100644
---- a/libcfs/libcfs/winnt/winnt-prim.c
-+++ b/libcfs/libcfs/winnt/winnt-prim.c
-@@ -82,22 +82,22 @@ cfs_thread_proc(
- }
- 
- /*
-- * cfs_create_thread
-+ * kthread_run
-  *   Create a system thread to execute the routine specified
-  *
-  * Arguments:
-  *   func:  function to be executed in the thread
-  *   arg:   argument transferred to func function
-- *   flag:  thread creation flags.
-+ *   name:  thread name to create
-  *
-  * Return Value:
-- *   int:   0 on success or error codes
-+ *   cfs_task_t:   0 on success or error codes
-  *
-  * Notes:
-  *   N/A
-  */
- 
--int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
-+cfs_task_t kthread_run(int (*func)(void *), void *arg, char *name)
- {
-     cfs_handle_t  thread = NULL;
-     NTSTATUS      status;
-@@ -108,7 +108,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
-     context = cfs_alloc(sizeof(cfs_thread_context_t), CFS_ALLOC_ZERO);
- 
-     if (!context) {
--        return -ENOMEM;
-+	return ERR_PTR(-ENOMEM);
-     }
- 
-     context->func  = func;
-@@ -130,7 +130,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
- 
-         /* We need translate the nt status to linux error code */
- 
--        return cfs_error_code(status);
-+	return ERR_PTR(cfs_error_code(status));
-     }
- 
-     //
-@@ -139,7 +139,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
- 
-     ZwClose(thread);
- 
--    return 0;
-+	return (cfs_task_t)0;
- }
- 
- 
-@@ -529,18 +529,9 @@ cfs_time_t cfs_timer_deadline(cfs_timer_t * timer)
-     return timer->deadline;
- }
- 
--/*
-- * daemonize routine stub
-- */
--
--void cfs_daemonize(char *str)
-+int unshare_fs_struct()
- {
--    return;
--}
--
--int cfs_daemonize_ctxt(char *str) {
--    cfs_daemonize(str);
--    return 0;
-+	return 0;
- }
- 
- /*
-diff --git a/libcfs/libcfs/winnt/winnt-tcpip.c b/libcfs/libcfs/winnt/winnt-tcpip.c
-index 6fbf0a5..50d784f 100644
---- a/libcfs/libcfs/winnt/winnt-tcpip.c
-+++ b/libcfs/libcfs/winnt/winnt-tcpip.c
-@@ -5898,10 +5898,10 @@ ks_init_tdi_data()
-     }
-     for (i = 0; i < ks_data.ksnd_engine_nums; i++) {
- 		spin_lock_init(&ks_data.ksnd_engine_mgr[i].lock);
--        cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
--        cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
--        CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
--        cfs_create_thread(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], 0);
-+	cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
-+	cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
-+	CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
-+	kthread_run(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], "");
-     }
- 
-     /* register pnp handlers to watch network condition */
-diff --git a/libcfs/libcfs/workitem.c b/libcfs/libcfs/workitem.c
-index db839e5..309cfec 100644
---- a/libcfs/libcfs/workitem.c
-+++ b/libcfs/libcfs/workitem.c
-@@ -245,17 +245,7 @@ static int
- cfs_wi_scheduler (void *arg)
- {
- 	struct cfs_wi_sched	*sched = (cfs_wi_sched_t *)arg;
--	char			name[16];
--
--	if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
--		snprintf(name, sizeof(name), "%s_%02d_%02d",
--			 sched->ws_name, sched->ws_cpt, sched->ws_nthreads);
--	} else {
--		snprintf(name, sizeof(name), "%s_%02d",
--			 sched->ws_name, sched->ws_nthreads);
--	}
- 
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* CPT affinity scheduler? */
-@@ -463,6 +453,8 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
- 	rc = 0;
- #ifdef __KERNEL__
- 	while (nthrs > 0)  {
-+		char	name[16];
-+		cfs_task_t	*task;
- 		spin_lock(&cfs_wi_data.wi_glock);
- 		while (sched->ws_starting > 0) {
- 			spin_unlock(&cfs_wi_data.wi_glock);
-@@ -473,11 +465,21 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
- 		sched->ws_starting++;
- 		spin_unlock(&cfs_wi_data.wi_glock);
- 
--		rc = cfs_create_thread(cfs_wi_scheduler, sched, 0);
--		if (rc >= 0) {
-+		if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
-+			snprintf(name, sizeof(name), "%s_%02d_%02d",
-+				 sched->ws_name, sched->ws_cpt,
-+				 sched->ws_nthreads);
-+		} else {
-+			snprintf(name, sizeof(name), "%s_%02d",
-+				 sched->ws_name, sched->ws_nthreads);
-+		}
-+
-+		task = kthread_run(cfs_wi_scheduler, sched, name);
-+		if (!IS_ERR(task)) {
- 			nthrs--;
- 			continue;
- 		}
-+		rc = PTR_ERR(task);
- 
- 		CERROR("Failed to create thread for WI scheduler %s: %d\n",
- 		       name, rc);
-diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
-index 381aa64..3c0f472 100644
---- a/lnet/klnds/gnilnd/gnilnd_cb.c
-+++ b/lnet/klnds/gnilnd/gnilnd_cb.c
-@@ -2946,7 +2946,6 @@ kgnilnd_reaper(void *arg)
- 	struct timer_list  timer;
- 	DEFINE_WAIT(wait);
- 
--	cfs_daemonize("kgnilnd_rpr");
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-@@ -4850,15 +4849,12 @@ kgnilnd_scheduler(void *arg)
- {
- 	int               threadno = (long)arg;
- 	kgn_device_t		*dev;
--	char			name[16];
- 	int			busy_loops = 0;
- 	unsigned long	  deadline = 0;
- 	DEFINE_WAIT(wait);
- 
- 	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
- 
--	snprintf(name, sizeof(name), "kgnilnd_sd_%02d", threadno);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-diff --git a/lnet/klnds/gnilnd/gnilnd_conn.c b/lnet/klnds/gnilnd/gnilnd_conn.c
-index 39716b8..a513ccd 100644
---- a/lnet/klnds/gnilnd/gnilnd_conn.c
-+++ b/lnet/klnds/gnilnd/gnilnd_conn.c
-@@ -2167,13 +2167,10 @@ int
- kgnilnd_dgram_waitq(void *arg)
- {
- 	kgn_device_t     *dev = (kgn_device_t *) arg;
--	char              name[16];
- 	gni_return_t      grc;
- 	__u64             readyid;
- 	DEFINE_WAIT(mover_done);
- 
--	snprintf(name, sizeof(name), "kgnilnd_dgn_%02d", dev->gnd_id);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-@@ -2345,7 +2342,6 @@ int
- kgnilnd_dgram_mover(void *arg)
- {
- 	kgn_device_t            *dev = (kgn_device_t *)arg;
--	char                     name[16];
- 	int                      rc, did_something;
- 	unsigned long            next_purge_check = jiffies - 1;
- 	unsigned long            timeout;
-@@ -2353,8 +2349,6 @@ kgnilnd_dgram_mover(void *arg)
- 	unsigned long		 deadline = 0;
- 	DEFINE_WAIT(wait);
- 
--	snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 	/* all gnilnd threads need to run fairly urgently */
- 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
-diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
-index 0dec950..6b93025 100644
---- a/lnet/klnds/gnilnd/gnilnd_stack.c
-+++ b/lnet/klnds/gnilnd/gnilnd_stack.c
-@@ -366,7 +366,6 @@ kgnilnd_ruhroh_thread(void *arg)
- 	int                i = 1;
- 	DEFINE_WAIT(wait);
- 
--	cfs_daemonize("kgnilnd_rr");
- 	cfs_block_allsigs();
- 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
- 	kgnilnd_data.kgn_ruhroh_running = 1;
-@@ -592,7 +591,6 @@ kgnilnd_rca(void *arg)
- 	rs_event_t event;
- 	lnet_nid_t nid;
- 
--	cfs_daemonize("kgnilnd_rca");
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-diff --git a/lnet/klnds/mxlnd/mxlnd.c b/lnet/klnds/mxlnd/mxlnd.c
-index 558bfaf..dbe998f 100644
---- a/lnet/klnds/mxlnd/mxlnd.c
-+++ b/lnet/klnds/mxlnd/mxlnd.c
-@@ -385,24 +385,25 @@ failed_with_init:
-  * mxlnd_thread_start - spawn a kernel thread with this function
-  * @fn - function pointer
-  * @arg - pointer to the parameter data
-+ * @name - name of new thread
-  *
-  * Returns 0 on success and a negative value on failure
-  */
- int
--mxlnd_thread_start(int (*fn)(void *arg), void *arg)
-+mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        int     pid = 0;
-+	cfs_task *task;
-         int     i   = (int) ((long) arg);
- 
-         cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
- 	init_completion(&kmxlnd_data.kmx_completions[i]);
- 
--        pid = cfs_create_thread(fn, arg, 0);
--        if (pid < 0) {
--                CERROR("cfs_create_thread() failed with %d\n", pid);
--                cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
--        }
--        return pid;
-+	task = kthread_run(fn, arg, name);
-+	if (IS_ERR(task)) {
-+		CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
-+		cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
-+	}
-+	return PTR_ERR(task);
- }
- 
- /**
-@@ -616,9 +617,13 @@ mxlnd_startup (lnet_ni_t *ni)
-                 *kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
- 
-         for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
-+		char                    name[24];
-+		memset(name, 0, sizeof(name));
-+		snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
-                 ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
--                if (ret < 0) {
--                        CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
-+		if (ret < 0) {
-+			CERROR("Starting mxlnd_request_waitd[%d] "
-+				"failed with %d\n", i, ret);
-                         cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-                         mx_wakeup(kmxlnd_data.kmx_endpt);
-                         for (--i; i >= 0; i--) {
-@@ -631,7 +636,8 @@ mxlnd_startup (lnet_ni_t *ni)
-                         goto failed;
-                 }
-         }
--        ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
-+				 "mxlnd_tx_queued");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-@@ -644,7 +650,8 @@ mxlnd_startup (lnet_ni_t *ni)
- 			nthreads * sizeof(struct completion));
-                 goto failed;
-         }
--        ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
-+				 "mxlnd_timeoutd");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-@@ -658,7 +665,8 @@ mxlnd_startup (lnet_ni_t *ni)
- 			nthreads * sizeof(struct completion));
-                 goto failed;
-         }
--        ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
-+				 "mxlnd_connd");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_connd failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-diff --git a/lnet/klnds/mxlnd/mxlnd_cb.c b/lnet/klnds/mxlnd/mxlnd_cb.c
-index 5b67392..4b3961b 100644
---- a/lnet/klnds/mxlnd/mxlnd_cb.c
-+++ b/lnet/klnds/mxlnd/mxlnd_cb.c
-@@ -2554,8 +2554,6 @@ mxlnd_tx_queued(void *arg)
- 	spinlock_t		*tx_q_lock = &kmxlnd_data.kmx_tx_queue_lock;
- 	rwlock_t		*g_lock  = &kmxlnd_data.kmx_global_lock;
- 
--	cfs_daemonize("mxlnd_tx_queued");
--
- 	while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
- 		ret = down_interruptible(&kmxlnd_data.kmx_tx_queue_sem);
- 		if (cfs_atomic_read(&kmxlnd_data.kmx_shutdown))
-@@ -3485,7 +3483,6 @@ int
- mxlnd_request_waitd(void *arg)
- {
-         long                    id              = (long) arg;
--        char                    name[24];
-         __u32                   result          = 0;
-         mx_return_t             mxret           = MX_SUCCESS;
-         mx_status_t             status;
-@@ -3497,10 +3494,6 @@ mxlnd_request_waitd(void *arg)
-         int                     count           = 0;
- #endif
- 
--        memset(name, 0, sizeof(name));
--        snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", id);
--        cfs_daemonize(name);
--
-         memset(&status, 0, sizeof(status));
- 
-         CDEBUG(D_NET, "%s starting\n", name);
-@@ -3965,8 +3958,6 @@ mxlnd_connd(void *arg)
- {
-         long                    id              = (long) arg;
- 
--        cfs_daemonize("mxlnd_connd");
--
-         CDEBUG(D_NET, "connd starting\n");
- 
-         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
-@@ -4040,8 +4031,6 @@ mxlnd_timeoutd(void *arg)
-         kmx_conn_t     *conn    = NULL;
- 	rwlock_t   *g_lock  = &kmxlnd_data.kmx_global_lock;
- 
--        cfs_daemonize("mxlnd_timeoutd");
--
-         CDEBUG(D_NET, "timeoutd starting\n");
- 
-         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c
-index 7d3c025..86298dd 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd.c
-@@ -3011,14 +3011,15 @@ kiblnd_base_startup(void)
-         kiblnd_data.kib_init = IBLND_INIT_DATA;
-         /*****************************************************/
- 
--        rc = kiblnd_thread_start(kiblnd_connd, NULL);
-+	rc = kiblnd_thread_start(kiblnd_connd, NULL, "kiblnd_connd");
-         if (rc != 0) {
-                 CERROR("Can't spawn o2iblnd connd: %d\n", rc);
-                 goto failed;
-         }
- 
--        if (*kiblnd_tunables.kib_dev_failover != 0)
--                rc = kiblnd_thread_start(kiblnd_failover_thread, NULL);
-+	if (*kiblnd_tunables.kib_dev_failover != 0)
-+		rc = kiblnd_thread_start(kiblnd_failover_thread, NULL,
-+					 "kiblnd_failover");
- 
-         if (rc != 0) {
-                 CERROR("Can't spawn o2iblnd failover thread: %d\n", rc);
-@@ -3060,9 +3061,11 @@ kiblnd_start_schedulers(struct kib_sched_info *sched)
- 
- 	for (i = 0; i < nthrs; i++) {
- 		long	id;
--
-+		char	name[20];
- 		id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
--		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id);
-+		snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
-+			 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
-+		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id, name);
- 		if (rc == 0)
- 			continue;
- 
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
-index fee5273..1c92fee 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.h
-+++ b/lnet/klnds/o2iblnd/o2iblnd.h
-@@ -1067,7 +1067,7 @@ void kiblnd_tunables_fini(void);
- 
- int  kiblnd_connd (void *arg);
- int  kiblnd_scheduler(void *arg);
--int  kiblnd_thread_start (int (*fn)(void *arg), void *arg);
-+int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
- int  kiblnd_failover_thread (void *arg);
- 
- int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
-diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c
-index 3cc7985..af92311 100644
---- a/lnet/klnds/o2iblnd/o2iblnd_cb.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c
-@@ -1805,15 +1805,15 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
- }
- 
- int
--kiblnd_thread_start (int (*fn)(void *arg), void *arg)
-+kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = kthread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
--        cfs_atomic_inc (&kiblnd_data.kib_nthreads);
--        return (0);
-+	cfs_atomic_inc(&kiblnd_data.kib_nthreads);
-+	return 0;
- }
- 
- void
-@@ -3135,7 +3135,6 @@ kiblnd_connd (void *arg)
-         int                peer_index = 0;
-         unsigned long      deadline = jiffies;
- 
--        cfs_daemonize ("kiblnd_connd");
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init (&wait);
-@@ -3329,15 +3328,10 @@ kiblnd_scheduler(void *arg)
- 	cfs_waitlink_t		wait;
- 	unsigned long		flags;
- 	struct ib_wc		wc;
--	char			name[20];
- 	int			did_something;
- 	int			busy_loops = 0;
- 	int			rc;
- 
--	snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
--		 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
--
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	cfs_waitlink_init(&wait);
-@@ -3346,10 +3340,10 @@ kiblnd_scheduler(void *arg)
- 
- 	rc = cfs_cpt_bind(lnet_cpt_table(), sched->ibs_cpt);
- 	if (rc != 0) {
--		CWARN("Failed to bind %s on CPT %d, please verify whether "
-+		CWARN("Failed to bind on CPT %d, please verify whether "
- 		      "all CPUs are healthy and reload modules if necessary, "
- 		      "otherwise your system might under risk of low "
--		      "performance\n", name, sched->ibs_cpt);
-+		      "performance\n", sched->ibs_cpt);
- 	}
- 
- 	spin_lock_irqsave(&sched->ibs_lock, flags);
-@@ -3464,7 +3458,6 @@ kiblnd_failover_thread(void *arg)
- 
-         LASSERT (*kiblnd_tunables.kib_dev_failover != 0);
- 
--        cfs_daemonize ("kiblnd_failover");
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init(&wait);
-diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c
-index 791f5c2..2edf87d 100644
---- a/lnet/klnds/ptllnd/ptllnd.c
-+++ b/lnet/klnds/ptllnd/ptllnd.c
-@@ -643,6 +643,7 @@ kptllnd_base_startup (void)
-         struct timeval  tv;
-         lnet_process_id_t  target;
-         ptl_err_t       ptl_rc;
-+	char            name[16];
- 
-         if (*kptllnd_tunables.kptl_max_procs_per_node < 1) {
-                 CERROR("max_procs_per_node must be >= 1\n");
-@@ -824,6 +825,7 @@ kptllnd_base_startup (void)
-          * now that PTLLND_INIT_DATA state has been entered */
-         CDEBUG(D_NET, "starting %d scheduler threads\n", PTLLND_N_SCHED);
-         for (i = 0; i < PTLLND_N_SCHED; i++) {
-+		snprintf(name, sizeof(name), "kptllnd_sd_%02d", i);
-                 rc = kptllnd_thread_start(kptllnd_scheduler, (void *)((long)i));
-                 if (rc != 0) {
-                         CERROR("Can't spawn scheduler[%d]: %d\n", i, rc);
-@@ -831,7 +833,8 @@ kptllnd_base_startup (void)
-                 }
-         }
- 
--        rc = kptllnd_thread_start(kptllnd_watchdog, NULL);
-+	snprintf(name, sizeof(name), "kptllnd_wd_%02d", i);
-+	rc = kptllnd_thread_start(kptllnd_watchdog, NULL, name);
-         if (rc != 0) {
-                 CERROR("Can't spawn watchdog: %d\n", rc);
-                 goto failed;
-diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c
-index e815607..7be7e4d 100644
---- a/lnet/klnds/ptllnd/ptllnd_cb.c
-+++ b/lnet/klnds/ptllnd/ptllnd_cb.c
-@@ -651,26 +651,24 @@ kptllnd_thread_fini (void)
- }
- 
- int
--kptllnd_thread_start (int (*fn)(void *arg), void *arg)
-+kptllnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long                pid;
-+	cfs_task_t *task;
- 
--        cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
-+	cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
- 
--        pid = cfs_create_thread (fn, arg, 0);
--        if (pid >= 0)
--                return 0;
--
--        CERROR("Failed to start thread: error %d\n", (int)pid);
--        kptllnd_thread_fini();
--        return (int)pid;
-+	task = kthread_run(fn, arg, name);
-+	if (IS_ERR(task)) {
-+		CERROR("Failed to start thread: error %ld\n", PTR_ERR(task));
-+		kptllnd_thread_fini();
-+	}
-+	return PTR_ERR(task);
- }
- 
- int
- kptllnd_watchdog(void *arg)
- {
-         int                 id = (long)arg;
--        char                name[16];
-         cfs_waitlink_t      waitlink;
-         int                 stamp = 0;
-         int                 peer_index = 0;
-@@ -678,8 +676,6 @@ kptllnd_watchdog(void *arg)
-         int                 timeout;
-         int                 i;
- 
--        snprintf(name, sizeof(name), "kptllnd_wd_%02d", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&waitlink);
-@@ -740,7 +736,6 @@ int
- kptllnd_scheduler (void *arg)
- {
-         int                 id = (long)arg;
--        char                name[16];
-         cfs_waitlink_t      waitlink;
-         unsigned long       flags;
-         int                 did_something;
-@@ -749,8 +744,6 @@ kptllnd_scheduler (void *arg)
-         kptl_rx_buffer_t   *rxb;
-         kptl_tx_t          *tx;
- 
--        snprintf(name, sizeof(name), "kptllnd_sd_%02d", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&waitlink);
-diff --git a/lnet/klnds/qswlnd/qswlnd.c b/lnet/klnds/qswlnd/qswlnd.c
-index eb6c659..4df26ee 100644
---- a/lnet/klnds/qswlnd/qswlnd.c
-+++ b/lnet/klnds/qswlnd/qswlnd.c
-@@ -526,7 +526,8 @@ kqswnal_startup (lnet_ni_t *ni)
- 	/**********************************************************************/
- 	/* Spawn scheduling threads */
- 	for (i = 0; i < cfs_num_online_cpus(); i++) {
--		rc = kqswnal_thread_start (kqswnal_scheduler, NULL);
-+		rc = kqswnal_thread_start(kqswnal_scheduler, NULL,
-+					  "kqswnal_sched");
- 		if (rc != 0)
- 		{
- 			CERROR ("failed to spawn scheduling thread: %d\n", rc);
-diff --git a/lnet/klnds/qswlnd/qswlnd_cb.c b/lnet/klnds/qswlnd/qswlnd_cb.c
-index 243918b..50cc744 100644
---- a/lnet/klnds/qswlnd/qswlnd_cb.c
-+++ b/lnet/klnds/qswlnd/qswlnd_cb.c
-@@ -1655,15 +1655,15 @@ kqswnal_recv (lnet_ni_t     *ni,
- }
- 
- int
--kqswnal_thread_start (int (*fn)(void *arg), void *arg)
-+kqswnal_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = cfs_thread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
--        cfs_atomic_inc (&kqswnal_data.kqn_nthreads);
--        return (0);
-+	cfs_atomic_inc(&kqswnal_data.kqn_nthreads);
-+	return 0;
- }
- 
- void
-@@ -1682,7 +1682,6 @@ kqswnal_scheduler (void *arg)
-         int              counter = 0;
-         int              did_something;
- 
--        cfs_daemonize ("kqswnal_sched");
-         cfs_block_allsigs ();
- 
- 	spin_lock_irqsave(&kqswnal_data.kqn_sched_lock, flags);
-diff --git a/lnet/klnds/ralnd/ralnd.c b/lnet/klnds/ralnd/ralnd.c
-index ca68fef..eabefae 100644
---- a/lnet/klnds/ralnd/ralnd.c
-+++ b/lnet/klnds/ralnd/ralnd.c
-@@ -1566,6 +1566,7 @@ kranal_startup (lnet_ni_t *ni)
-         int               rc;
-         int               i;
-         kra_device_t     *dev;
-+	char		  name[16];
- 
-         LASSERT (ni->ni_lnd == &the_kralnd);
- 
-@@ -1658,14 +1659,16 @@ kranal_startup (lnet_ni_t *ni)
-         if (rc != 0)
-                 goto failed;
- 
--        rc = kranal_thread_start(kranal_reaper, NULL);
-+	rc = kranal_thread_start(kranal_reaper, NULL, "kranal_reaper");
-         if (rc != 0) {
-                 CERROR("Can't spawn ranal reaper: %d\n", rc);
-                 goto failed;
-         }
- 
-         for (i = 0; i < *kranal_tunables.kra_n_connd; i++) {
--                rc = kranal_thread_start(kranal_connd, (void *)(unsigned long)i);
-+		snprintf(name, sizeof(name), "kranal_connd_%02ld", i);
-+		rc = kranal_thread_start(kranal_connd,
-+					 (void *)(unsigned long)i, name);
-                 if (rc != 0) {
-                         CERROR("Can't spawn ranal connd[%d]: %d\n",
-                                i, rc);
-@@ -1691,7 +1694,8 @@ kranal_startup (lnet_ni_t *ni)
-         
-         for (i = 0; i < kranal_data.kra_ndevs; i++) {
-                 dev = &kranal_data.kra_devices[i];
--                rc = kranal_thread_start(kranal_scheduler, dev);
-+		snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
-+		rc = kranal_thread_start(kranal_scheduler, dev, name);
-                 if (rc != 0) {
-                         CERROR("Can't spawn ranal scheduler[%d]: %d\n",
-                                i, rc);
-diff --git a/lnet/klnds/ralnd/ralnd.h b/lnet/klnds/ralnd/ralnd.h
-index d9fd100..8b92cdc 100644
---- a/lnet/klnds/ralnd/ralnd.h
-+++ b/lnet/klnds/ralnd/ralnd.h
-@@ -452,7 +452,7 @@ extern kra_peer_t *kranal_find_peer_locked (lnet_nid_t nid);
- extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
- extern int kranal_del_peer (lnet_nid_t nid);
- extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
--extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
-+extern int kranal_thread_start(int(*fn)(void *arg), void *arg, char *name);
- extern int kranal_connd (void *arg);
- extern int kranal_reaper (void *arg);
- extern int kranal_scheduler (void *arg);
-diff --git a/lnet/klnds/ralnd/ralnd_cb.c b/lnet/klnds/ralnd/ralnd_cb.c
-index 8c7f053..05de1c1 100644
---- a/lnet/klnds/ralnd/ralnd_cb.c
-+++ b/lnet/klnds/ralnd/ralnd_cb.c
-@@ -891,15 +891,13 @@ kranal_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
- }
- 
- int
--kranal_thread_start (int(*fn)(void *arg), void *arg)
-+kranal_thread_start(int(*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread(fn, arg, 0);
-+	cfs_task_t *task = cfs_thread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return(int)pid;
--
--        cfs_atomic_inc(&kranal_data.kra_nthreads);
--        return 0;
-+	if (!IS_ERR(task))
-+		cfs_atomic_inc(&kranal_data.kra_nthreads);
-+	return PTR_ERR(task);
- }
- 
- void
-@@ -1054,15 +1052,12 @@ int
- kranal_connd (void *arg)
- {
-         long               id = (long)arg;
--        char               name[16];
-         cfs_waitlink_t     wait;
-         unsigned long      flags;
-         kra_peer_t        *peer;
-         kra_acceptsock_t  *ras;
-         int                did_something;
- 
--        snprintf(name, sizeof(name), "kranal_connd_%02ld", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&wait);
-@@ -1159,7 +1154,6 @@ kranal_reaper (void *arg)
-         long               next_min_timeout = CFS_MAX_SCHEDULE_TIMEOUT;
-         long               current_min_timeout = 1;
- 
--        cfs_daemonize("kranal_reaper");
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&wait);
-@@ -1932,7 +1926,6 @@ kranal_scheduler (void *arg)
- {
-         kra_device_t     *dev = (kra_device_t *)arg;
-         cfs_waitlink_t    wait;
--        char              name[16];
-         kra_conn_t       *conn;
-         unsigned long     flags;
-         unsigned long     deadline;
-@@ -1945,8 +1938,6 @@ kranal_scheduler (void *arg)
-         int               dropped_lock;
-         int               busy_loops = 0;
- 
--        snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         dev->rad_scheduler = current;
-diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c
-index 9376b08..c70ceeb 100644
---- a/lnet/klnds/socklnd/socklnd.c
-+++ b/lnet/klnds/socklnd/socklnd.c
-@@ -2465,12 +2465,15 @@ ksocknal_base_startup(void)
-         }
- 
-         for (i = 0; i < *ksocknal_tunables.ksnd_nconnds; i++) {
-+		char name[16];
- 		spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- 		ksocknal_data.ksnd_connd_starting++;
- 		spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- 
-+
-+		snprintf(name, sizeof(name), "socknal_cd%02d", i);
- 		rc = ksocknal_thread_start(ksocknal_connd,
--					   (void *)((ulong_ptr_t)i));
-+					   (void *)((ulong_ptr_t)i), name);
- 		if (rc != 0) {
- 			spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- 			ksocknal_data.ksnd_connd_starting--;
-@@ -2480,7 +2483,7 @@ ksocknal_base_startup(void)
-                 }
-         }
- 
--        rc = ksocknal_thread_start (ksocknal_reaper, NULL);
-+	rc = ksocknal_thread_start(ksocknal_reaper, NULL, "socknal_reaper");
-         if (rc != 0) {
-                 CERROR ("Can't spawn socknal reaper: %d\n", rc);
-                 goto failed;
-@@ -2724,10 +2727,16 @@ ksocknal_start_schedulers(struct ksock_sched_info *info)
- 	}
- 
- 	for (i = 0; i < nthrs; i++) {
--		long	id;
--
-+		long		id;
-+		char		name[20];
-+		ksock_sched_t	*sched;
- 		id = KSOCK_THREAD_ID(info->ksi_cpt, info->ksi_nthreads + i);
--		rc = ksocknal_thread_start(ksocknal_scheduler, (void *)id);
-+		sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
-+		snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
-+			 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
-+
-+		rc = ksocknal_thread_start(ksocknal_scheduler,
-+					   (void *)id, name);
- 		if (rc == 0)
- 			continue;
- 
-diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
-index c7f1bed..3fd04ac 100644
---- a/lnet/klnds/socklnd/socklnd.h
-+++ b/lnet/klnds/socklnd/socklnd.h
-@@ -581,7 +581,7 @@ extern void ksocknal_txlist_done (lnet_ni_t *ni, cfs_list_t *txlist,
-                                   int error);
- extern void ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive);
- extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when);
--extern int ksocknal_thread_start (int (*fn)(void *arg), void *arg);
-+extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
- extern void ksocknal_thread_fini (void);
- extern void ksocknal_launch_all_connections_locked (ksock_peer_t *peer);
- extern ksock_route_t *ksocknal_find_connectable_route_locked (ksock_peer_t *peer);
-diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c
-index b24127d..e624753 100644
---- a/lnet/klnds/socklnd/socklnd_cb.c
-+++ b/lnet/klnds/socklnd/socklnd_cb.c
-@@ -1007,17 +1007,17 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
- }
- 
- int
--ksocknal_thread_start (int (*fn)(void *arg), void *arg)
-+ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long          pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = kthread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
- 	write_lock_bh(&ksocknal_data.ksnd_global_lock);
--        ksocknal_data.ksnd_nthreads++;
-+	ksocknal_data.ksnd_nthreads++;
- 	write_unlock_bh(&ksocknal_data.ksnd_global_lock);
--        return (0);
-+	return 0;
- }
- 
- void
-@@ -1396,22 +1396,17 @@ int ksocknal_scheduler(void *arg)
- 	ksock_tx_t		*tx;
- 	int			rc;
- 	int			nloops = 0;
--	char			name[20];
- 	long			id = (long)arg;
- 
- 	info = ksocknal_data.ksnd_sched_info[KSOCK_THREAD_CPT(id)];
- 	sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
- 
--	snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
--		 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
--
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	rc = cfs_cpt_bind(lnet_cpt_table(), info->ksi_cpt);
- 	if (rc != 0) {
--		CERROR("Can't set CPT affinity for %s to %d: %d\n",
--		       name, info->ksi_cpt, rc);
-+		CERROR("Can't set CPT affinity to %d: %d\n",
-+		       info->ksi_cpt, rc);
- 	}
- 
- 	spin_lock_bh(&sched->kss_lock);
-@@ -2023,6 +2018,7 @@ ksocknal_connect (ksock_route_t *route)
- static int
- ksocknal_connd_check_start(long sec, long *timeout)
- {
-+	char name[16];
-         int rc;
-         int total = ksocknal_data.ksnd_connd_starting +
-                     ksocknal_data.ksnd_connd_running;
-@@ -2060,7 +2056,8 @@ ksocknal_connd_check_start(long sec, long *timeout)
- 	spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- 
- 	/* NB: total is the next id */
--	rc = ksocknal_thread_start(ksocknal_connd, (void *)((long)total));
-+	snprintf(name, sizeof(name), "socknal_cd%02d", total);
-+	rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
- 
- 	spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
-         if (rc == 0)
-@@ -2145,15 +2142,11 @@ int
- ksocknal_connd (void *arg)
- {
- 	spinlock_t    *connd_lock = &ksocknal_data.ksnd_connd_lock;
--        long               id = (long)(long_ptr_t)arg;
--        char               name[16];
-         ksock_connreq_t   *cr;
-         cfs_waitlink_t     wait;
-         int                nloops = 0;
-         int                cons_retry = 0;
- 
--        snprintf (name, sizeof (name), "socknal_cd%02ld", id);
--        cfs_daemonize (name);
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init (&wait);
-@@ -2546,7 +2539,6 @@ ksocknal_reaper (void *arg)
-         int                peer_index = 0;
-         cfs_time_t         deadline = cfs_time_current();
- 
--        cfs_daemonize ("socknal_reaper");
-         cfs_block_allsigs ();
- 
-         CFS_INIT_LIST_HEAD(&enomem_conns);
-diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
-index 9e9b236..9bdac05 100644
---- a/lnet/lnet/acceptor.c
-+++ b/lnet/lnet/acceptor.c
-@@ -389,7 +389,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
- int
- lnet_acceptor(void *arg)
- {
--        char           name[16];
-         cfs_socket_t  *newsock;
-         int            rc;
-         __u32          magic;
-@@ -399,8 +398,6 @@ lnet_acceptor(void *arg)
- 
-         LASSERT (lnet_acceptor_state.pta_sock == NULL);
- 
--        snprintf(name, sizeof(name), "acceptor_%03d", accept_port);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock,
-@@ -532,9 +529,11 @@ lnet_acceptor_start(void)
- 	if (lnet_count_acceptor_nis() == 0)  /* not required */
- 		return 0;
- 
--	rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
--	if (rc2 < 0) {
--		CERROR("Can't start acceptor thread: %d\n", rc);
-+	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
-+				  (void *)(ulong_ptr_t)secure,
-+				  "acceptor_%03ld", secure));
-+	if (IS_ERR_VALUE(rc2)) {
-+		CERROR("Can't start acceptor thread: %ld\n", rc2);
- 		fini_completion(&lnet_acceptor_state.pta_signal);
- 
- 		return -ESRCH;
-diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c
-index 770345d..9d57479 100644
---- a/lnet/lnet/module.c
-+++ b/lnet/lnet/module.c
-@@ -127,11 +127,11 @@ init_lnet(void)
-         rc = libcfs_register_ioctl(&lnet_ioctl_handler);
-         LASSERT (rc == 0);
- 
--        if (config_on_load) {
--                /* Have to schedule a separate thread to avoid deadlocking
--                 * in modload */
--                (void) cfs_create_thread(lnet_configure, NULL, 0);
--        }
-+	if (config_on_load) {
-+		/* Have to schedule a separate thread to avoid deadlocking
-+		 * in modload */
-+		(void) kthread_run(lnet_configure, NULL, "lnet_initd");
-+	}
- 
-         RETURN(0);
- }
-diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c
-index 34c94ae..4cef9e8 100644
---- a/lnet/lnet/router.c
-+++ b/lnet/lnet/router.c
-@@ -1095,16 +1095,17 @@ lnet_router_checker_start(void)
- 
-         the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
- #ifdef __KERNEL__
--        rc = cfs_create_thread(lnet_router_checker, NULL, 0);
--        if (rc < 0) {
--                CERROR("Can't start router checker thread: %d\n", rc);
--                /* block until event callback signals exit */
-+	rc = PTR_ERR(kthread_run(lnet_router_checker,
-+				 NULL, "router_checker"));
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("Can't start router checker thread: %d\n", rc);
-+		/* block until event callback signals exit */
- 		down(&the_lnet.ln_rc_signal);
--                rc = LNetEQFree(the_lnet.ln_rc_eqh);
--                LASSERT (rc == 0);
--                the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
--                return -ENOMEM;
--        }
-+		rc = LNetEQFree(the_lnet.ln_rc_eqh);
-+		LASSERT(rc == 0);
-+		the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
-+		return -ENOMEM;
-+	}
- #endif
- 
-         if (check_routers_before_use) {
-@@ -1230,7 +1231,6 @@ lnet_router_checker(void *arg)
-         lnet_peer_t       *rtr;
-         cfs_list_t        *entry;
- 
--        cfs_daemonize("router_checker");
-         cfs_block_allsigs();
- 
-         LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING);
-diff --git a/lnet/selftest/timer.c b/lnet/selftest/timer.c
-index a66a336..f2f8262 100644
---- a/lnet/selftest/timer.c
-+++ b/lnet/selftest/timer.c
-@@ -183,7 +183,6 @@ stt_timer_main (void *arg)
- 
-         SET_BUT_UNUSED(rc);
- 
--        cfs_daemonize("st_timer");
-         cfs_block_allsigs();
- 
-         while (!stt_data.stt_shuttingdown) {
-@@ -204,13 +203,13 @@ stt_timer_main (void *arg)
- int
- stt_start_timer_thread (void)
- {
--        long pid;
-+	cfs_task_t *task;
- 
--        LASSERT (!stt_data.stt_shuttingdown);
-+	LASSERT(!stt_data.stt_shuttingdown);
- 
--        pid = cfs_create_thread(stt_timer_main, NULL, 0);
--        if (pid < 0)
--                return (int)pid;
-+	task = kthread_run(stt_timer_main, NULL, "st_timer");
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
- 	spin_lock(&stt_data.stt_lock);
- 	stt_data.stt_nthreads++;
-diff --git a/lnet/ulnds/socklnd/usocklnd.c b/lnet/ulnds/socklnd/usocklnd.c
-index cc8c4c8..d4d5027 100644
---- a/lnet/ulnds/socklnd/usocklnd.c
-+++ b/lnet/ulnds/socklnd/usocklnd.c
-@@ -296,14 +296,15 @@ usocklnd_base_startup()
-         pthread_rwlock_init(&usock_data.ud_peers_lock, NULL);
- 
-         /* Spawn poll threads */
--        for (i = 0; i < usock_data.ud_npollthreads; i++) {
--                rc = cfs_create_thread(usocklnd_poll_thread,
--                                       &usock_data.ud_pollthreads[i], 0);
--                if (rc) {
--                        usocklnd_base_shutdown(i);
--                        return rc;
--                }
--        }
-+	for (i = 0; i < usock_data.ud_npollthreads; i++) {
-+		rc = PTR_ERR(kthread_run(usocklnd_poll_thread,
-+					     &usock_data.ud_pollthreads[i],
-+					     ""));
-+		if (IS_ERR_VALUE(rc)) {
-+			usocklnd_base_shutdown(i);
-+			return rc;
-+		}
-+	}
- 
-         usock_data.ud_state = UD_STATE_INITIALIZED;
- 
-diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
-index 88b51a9..517b8e3 100644
---- a/lustre/ldlm/ldlm_lib.c
-+++ b/lustre/ldlm/ldlm_lib.c
-@@ -1972,19 +1972,12 @@ static int target_recovery_thread(void *arg)
-         struct ptlrpc_request *req;
-         struct target_recovery_data *trd = &obd->obd_recovery_data;
-         unsigned long delta;
--        unsigned long flags;
-         struct lu_env *env;
-         struct ptlrpc_thread *thread = NULL;
-         int rc = 0;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("tgt_recov");
--
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--
-+	unshare_fs_struct();
-         OBD_ALLOC_PTR(thread);
-         if (thread == NULL)
-                 RETURN(-ENOMEM);
-@@ -2109,22 +2102,24 @@ static int target_recovery_thread(void *arg)
- static int target_start_recovery_thread(struct lu_target *lut,
-                                         svc_handler_t handler)
- {
--        struct obd_device *obd = lut->lut_obd;
--        int rc = 0;
--        struct target_recovery_data *trd = &obd->obd_recovery_data;
-+	struct obd_device *obd = lut->lut_obd;
-+	int rc = 0;
-+	struct target_recovery_data *trd = &obd->obd_recovery_data;
- 
--        memset(trd, 0, sizeof(*trd));
-+	memset(trd, 0, sizeof(*trd));
- 	init_completion(&trd->trd_starting);
- 	init_completion(&trd->trd_finishing);
--        trd->trd_recovery_handler = handler;
-+	trd->trd_recovery_handler = handler;
- 
--        if (cfs_create_thread(target_recovery_thread, lut, 0) > 0) {
-+	if (!IS_ERR(kthread_run(target_recovery_thread,
-+				lut, "tgt_recov"))) {
- 		wait_for_completion(&trd->trd_starting);
--                LASSERT(obd->obd_recovering != 0);
--        } else
--                rc = -ECHILD;
-+		LASSERT(obd->obd_recovering != 0);
-+	} else {
-+		rc = -ECHILD;
-+	}
- 
--        return rc;
-+	return rc;
- }
- 
- void target_stop_recovery_thread(struct obd_device *obd)
-diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 211380a..01fe1ca 100644
---- a/lustre/ldlm/ldlm_lockd.c
-+++ b/lustre/ldlm/ldlm_lockd.c
-@@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
-         int do_dump;
- 
-         ENTRY;
--        cfs_daemonize("ldlm_elt");
- 
-         expired_lock_thread.elt_state = ELT_READY;
-         cfs_waitq_signal(&expired_lock_thread.elt_waitq);
-@@ -2577,14 +2576,17 @@ static int ldlm_bl_thread_main(void *arg);
- static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
- {
- 	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
--	int rc;
-+	cfs_task_t *task;
- 
- 	init_completion(&bltd.bltd_comp);
--	rc = cfs_create_thread(ldlm_bl_thread_main, &bltd, 0);
--	if (rc < 0) {
--		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %d\n",
--		       cfs_atomic_read(&blp->blp_num_threads), rc);
--		return rc;
-+	bltd.bltd_num = cfs_atomic_read(&blp->blp_num_threads);
-+	snprintf(bltd.bltd_name, sizeof(bltd.bltd_name) - 1,
-+		"ldlm_bl_%02d", bltd.bltd_num);
-+	task = kthread_run(ldlm_bl_thread_main, &bltd, bltd.bltd_name);
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
-+		       cfs_atomic_read(&blp->blp_num_threads), PTR_ERR(task));
-+		return PTR_ERR(task);
- 	}
- 	wait_for_completion(&bltd.bltd_comp);
- 
-@@ -2608,14 +2610,9 @@ static int ldlm_bl_thread_main(void *arg)
- 
-                 blp = bltd->bltd_blp;
- 
--                bltd->bltd_num =
--                        cfs_atomic_inc_return(&blp->blp_num_threads) - 1;
-+		cfs_atomic_inc(&blp->blp_num_threads);
-                 cfs_atomic_inc(&blp->blp_busy_threads);
- 
--                snprintf(bltd->bltd_name, sizeof(bltd->bltd_name) - 1,
--                        "ldlm_bl_%02d", bltd->bltd_num);
--                cfs_daemonize(bltd->bltd_name);
--
- 		complete(&bltd->bltd_comp);
-                 /* cannot use bltd after this, it is only on caller's stack */
-         }
-@@ -2955,22 +2952,22 @@ static int ldlm_setup(void)
- 	}
- 
- # ifdef HAVE_SERVER_SUPPORT
--        CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
--        expired_lock_thread.elt_state = ELT_STOPPED;
--        cfs_waitq_init(&expired_lock_thread.elt_waitq);
-+	CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
-+	expired_lock_thread.elt_state = ELT_STOPPED;
-+	cfs_waitq_init(&expired_lock_thread.elt_waitq);
- 
--        CFS_INIT_LIST_HEAD(&waiting_locks_list);
-+	CFS_INIT_LIST_HEAD(&waiting_locks_list);
- 	spin_lock_init(&waiting_locks_spinlock);
--        cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
-+	cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
- 
--        rc = cfs_create_thread(expired_lock_main, NULL, CFS_DAEMON_FLAGS);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(expired_lock_main, NULL, "ldlm_elt"));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("Cannot start ldlm expired-lock thread: %d\n", rc);
- 		GOTO(out, rc);
- 	}
- 
--        cfs_wait_event(expired_lock_thread.elt_waitq,
--                       expired_lock_thread.elt_state == ELT_READY);
-+	cfs_wait_event(expired_lock_thread.elt_waitq,
-+		       expired_lock_thread.elt_state == ELT_READY);
- # endif /* HAVE_SERVER_SUPPORT */
- 
- 	rc = ldlm_pools_init();
-diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
-index d724a2d..fa14f66 100644
---- a/lustre/ldlm/ldlm_pool.c
-+++ b/lustre/ldlm/ldlm_pool.c
-@@ -1295,15 +1295,13 @@ EXPORT_SYMBOL(ldlm_pools_recalc);
- static int ldlm_pools_thread_main(void *arg)
- {
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
--        char *t_name = "ldlm_poold";
-         ENTRY;
- 
--        cfs_daemonize(t_name);
-         thread_set_flags(thread, SVC_RUNNING);
-         cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-         CDEBUG(D_DLMTRACE, "%s: pool thread starting, process %d\n",
--               t_name, cfs_curproc_pid());
-+		"ldlm_poold", cfs_curproc_pid());
- 
-         while (1) {
-                 struct l_wait_info lwi;
-@@ -1335,43 +1333,38 @@ static int ldlm_pools_thread_main(void *arg)
-         cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-         CDEBUG(D_DLMTRACE, "%s: pool thread exiting, process %d\n",
--               t_name, cfs_curproc_pid());
-+		"ldlm_poold", cfs_curproc_pid());
- 
- 	complete_and_exit(&ldlm_pools_comp, 0);
- }
- 
- static int ldlm_pools_thread_start(void)
- {
--        struct l_wait_info lwi = { 0 };
--        int rc;
--        ENTRY;
-+	struct l_wait_info lwi = { 0 };
-+	cfs_task_t *task;
-+	ENTRY;
- 
--        if (ldlm_pools_thread != NULL)
--                RETURN(-EALREADY);
-+	if (ldlm_pools_thread != NULL)
-+		RETURN(-EALREADY);
- 
--        OBD_ALLOC_PTR(ldlm_pools_thread);
--        if (ldlm_pools_thread == NULL)
--                RETURN(-ENOMEM);
-+	OBD_ALLOC_PTR(ldlm_pools_thread);
-+	if (ldlm_pools_thread == NULL)
-+		RETURN(-ENOMEM);
- 
- 	init_completion(&ldlm_pools_comp);
--        cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
--
--        /*
--         * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
--         * just drop the VM and FILES in cfs_daemonize() right away.
--         */
--        rc = cfs_create_thread(ldlm_pools_thread_main, ldlm_pools_thread,
--                               CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("Can't start pool thread, error %d\n",
--                       rc);
--                OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
--                ldlm_pools_thread = NULL;
--                RETURN(rc);
--        }
--        l_wait_event(ldlm_pools_thread->t_ctl_waitq,
--                     thread_is_running(ldlm_pools_thread), &lwi);
--        RETURN(0);
-+	cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
-+
-+	task = kthread_run(ldlm_pools_thread_main, ldlm_pools_thread,
-+			   "ldlm_poold");
-+	if (IS_ERR(task)) {
-+		CERROR("Can't start pool thread, error %ld\n", PTR_ERR(task));
-+		OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
-+		ldlm_pools_thread = NULL;
-+		RETURN(PTR_ERR(task));
-+	}
-+	l_wait_event(ldlm_pools_thread->t_ctl_waitq,
-+		     thread_is_running(ldlm_pools_thread), &lwi);
-+	RETURN(0);
- }
- 
- static void ldlm_pools_thread_stop(void)
-diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c
-index 7ab686c..1d1cded 100644
---- a/lustre/llite/llite_capa.c
-+++ b/lustre/llite/llite_capa.c
-@@ -173,8 +173,6 @@ static int capa_thread_main(void *unused)
-         int rc;
-         ENTRY;
- 
--        cfs_daemonize("ll_capa");
--
-         thread_set_flags(&ll_capa_thread, SVC_RUNNING);
-         cfs_waitq_signal(&ll_capa_thread.t_ctl_waitq);
- 
-@@ -293,20 +291,21 @@ void ll_capa_timer_callback(unsigned long unused)
- 
- int ll_capa_thread_start(void)
- {
--        int rc;
--        ENTRY;
-+	cfs_task_t *task;
-+	ENTRY;
- 
--        cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
-+	cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
- 
--        rc = cfs_create_thread(capa_thread_main, NULL, 0);
--        if (rc < 0) {
--                CERROR("cannot start expired capa thread: rc %d\n", rc);
--                RETURN(rc);
--        }
--        cfs_wait_event(ll_capa_thread.t_ctl_waitq,
--                       thread_is_running(&ll_capa_thread));
-+	task = kthread_run(capa_thread_main, NULL, "ll_capa");
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start expired capa thread: rc %ld\n",
-+			PTR_ERR(task));
-+		RETURN(PTR_ERR(task));
-+	}
-+	cfs_wait_event(ll_capa_thread.t_ctl_waitq,
-+		       thread_is_running(&ll_capa_thread));
- 
--        RETURN(0);
-+	RETURN(0);
- }
- 
- void ll_capa_thread_stop(void)
-diff --git a/lustre/llite/llite_close.c b/lustre/llite/llite_close.c
-index 26a2c8c..f1a1415 100644
---- a/lustre/llite/llite_close.c
-+++ b/lustre/llite/llite_close.c
-@@ -349,12 +349,6 @@ static int ll_close_thread(void *arg)
-         struct ll_close_queue *lcq = arg;
-         ENTRY;
- 
--        {
--                char name[CFS_CURPROC_COMM_MAX];
--                snprintf(name, sizeof(name) - 1, "ll_close");
--                cfs_daemonize(name);
--        }
--
- 	complete(&lcq->lcq_comp);
- 
-         while (1) {
-@@ -382,25 +376,25 @@ static int ll_close_thread(void *arg)
- 
- int ll_close_thread_start(struct ll_close_queue **lcq_ret)
- {
--        struct ll_close_queue *lcq;
--        pid_t pid;
-+	struct ll_close_queue *lcq;
-+	cfs_task_t *task;
- 
--        if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
--                return -EINTR;
-+	if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
-+		return -EINTR;
- 
--        OBD_ALLOC(lcq, sizeof(*lcq));
--        if (lcq == NULL)
--                return -ENOMEM;
-+	OBD_ALLOC(lcq, sizeof(*lcq));
-+	if (lcq == NULL)
-+		return -ENOMEM;
- 
- 	spin_lock_init(&lcq->lcq_lock);
- 	CFS_INIT_LIST_HEAD(&lcq->lcq_head);
- 	cfs_waitq_init(&lcq->lcq_waitq);
- 	init_completion(&lcq->lcq_comp);
- 
--	pid = cfs_create_thread(ll_close_thread, lcq, 0);
--	if (pid < 0) {
-+	task = kthread_run(ll_close_thread, lcq, "ll_close");
-+	if (IS_ERR(task)) {
- 		OBD_FREE(lcq, sizeof(*lcq));
--		return pid;
-+		return PTR_ERR(task);
- 	}
- 
- 	wait_for_completion(&lcq->lcq_comp);
-diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
-index f94a7ca..c494dd2 100644
---- a/lustre/llite/lloop.c
-+++ b/lustre/llite/lloop.c
-@@ -420,8 +420,6 @@ static int loop_thread(void *data)
-         int refcheck;
-         int ret = 0;
- 
--        daemonize("lloop%d", lo->lo_number);
--
-         set_user_nice(current, -20);
- 
-         lo->lo_state = LLOOP_BOUND;
-@@ -552,13 +550,13 @@ static int loop_set_fd(struct lloop_device *lo, struct file *unused,
-         set_capacity(disks[lo->lo_number], size);
-         bd_set_size(bdev, size << 9);
- 
--        set_blocksize(bdev, lo->lo_blocksize);
-+	set_blocksize(bdev, lo->lo_blocksize);
- 
--        cfs_create_thread(loop_thread, lo, CLONE_KERNEL);
-+	kthread_run(loop_thread, lo, "lloop%d", lo->lo_number);
- 	down(&lo->lo_sem);
--        return 0;
-+	return 0;
- 
-- out:
-+out:
-         /* This is safe: open() is still holding a reference. */
-         cfs_module_put(THIS_MODULE);
-         return error;
-diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
-index a2e48f4..19ca1b4 100644
---- a/lustre/llite/statahead.c
-+++ b/lustre/llite/statahead.c
-@@ -981,12 +981,6 @@ static int ll_agl_thread(void *arg)
-         struct l_wait_info        lwi    = { 0 };
-         ENTRY;
- 
--        {
--                char pname[16];
--                snprintf(pname, 15, "ll_agl_%u", plli->lli_opendir_pid);
--                cfs_daemonize(pname);
--        }
--
-         CDEBUG(D_READA, "agl thread started: [pid %d] [parent %.*s]\n",
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-@@ -1040,25 +1034,28 @@ static int ll_agl_thread(void *arg)
- 
- static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
- {
--        struct ptlrpc_thread *thread = &sai->sai_agl_thread;
--        struct l_wait_info    lwi    = { 0 };
--        int                   rc;
--        ENTRY;
-+	struct ptlrpc_thread *thread = &sai->sai_agl_thread;
-+	struct l_wait_info    lwi    = { 0 };
-+	struct ll_inode_info  *plli;
-+	cfs_task_t	      *task;
-+	ENTRY;
- 
--        CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
--               cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
-+	CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
-+	       cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
--        rc = cfs_create_thread(ll_agl_thread, parent, 0);
--        if (rc < 0) {
--                CERROR("can't start ll_agl thread, rc: %d\n", rc);
--                thread_set_flags(thread, SVC_STOPPED);
--                RETURN_EXIT;
--        }
-+	plli = ll_i2info(parent->d_inode);
-+	task = kthread_run(ll_agl_thread, parent,
-+			       "ll_agl_%u", plli->lli_opendir_pid);
-+	if (IS_ERR(task)) {
-+		CERROR("can't start ll_agl thread, rc: %ld\n", PTR_ERR(task));
-+		thread_set_flags(thread, SVC_STOPPED);
-+		RETURN_EXIT;
-+	}
- 
--        l_wait_event(thread->t_ctl_waitq,
--                     thread_is_running(thread) || thread_is_stopped(thread),
--                     &lwi);
--        EXIT;
-+	l_wait_event(thread->t_ctl_waitq,
-+		     thread_is_running(thread) || thread_is_stopped(thread),
-+		     &lwi);
-+	EXIT;
- }
- 
- static int ll_statahead_thread(void *arg)
-@@ -1079,12 +1076,6 @@ static int ll_statahead_thread(void *arg)
-         struct l_wait_info        lwi    = { 0 };
-         ENTRY;
- 
--        {
--                char pname[16];
--                snprintf(pname, 15, "ll_sa_%u", plli->lli_opendir_pid);
--                cfs_daemonize(pname);
--        }
--
-         CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-@@ -1548,6 +1539,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
-         struct ptlrpc_thread     *thread;
-         struct l_wait_info        lwi   = { 0 };
-         int                       rc    = 0;
-+	struct ll_inode_info     *plli;
-         ENTRY;
- 
-         LASSERT(lli->lli_opendir_pid == cfs_curproc_pid());
-@@ -1693,11 +1685,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-         lli->lli_sai = sai;
--        rc = cfs_create_thread(ll_statahead_thread, parent, 0);
--        thread = &sai->sai_thread;
--        if (rc < 0) {
--                CERROR("can't start ll_sa thread, rc: %d\n", rc);
--                dput(parent);
-+
-+	plli = ll_i2info(parent->d_inode);
-+	rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
-+				 "ll_sa_%u", plli->lli_opendir_pid));
-+	thread = &sai->sai_thread;
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("can't start ll_sa thread, rc: %d\n", rc);
-+		dput(parent);
-                 lli->lli_opendir_key = NULL;
-                 thread_set_flags(thread, SVC_STOPPED);
-                 thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 5751460..2581b69 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -1571,13 +1571,6 @@ static int mdc_changelog_send_thread(void *csdata)
-         CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
-                cs->cs_fp, cs->cs_startrec);
- 
--        /*
--         * It's important to daemonize here to close unused FDs.
--         * The write fd from pipe is already opened by the caller,
--         * so it's fine to clear all files here
--         */
--        cfs_daemonize("mdc_clg_send_thread");
--
-         OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
-         if (cs->cs_buf == NULL)
-                 GOTO(out, rc = -ENOMEM);
-@@ -1614,12 +1607,10 @@ out:
- 		llog_cat_close(NULL, llh);
-         if (ctxt)
-                 llog_ctxt_put(ctxt);
--        if (cs->cs_buf)
--                OBD_FREE(cs->cs_buf, CR_MAXSIZE);
--        OBD_FREE_PTR(cs);
--        /* detach from parent process so we get cleaned up */
--        cfs_daemonize("cl_send");
--        return rc;
-+	if (cs->cs_buf)
-+		OBD_FREE(cs->cs_buf, CR_MAXSIZE);
-+	OBD_FREE_PTR(cs);
-+	return rc;
- }
- 
- static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1639,13 +1630,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
- 	cs->cs_fp = fget(icc->icc_id);
- 	cs->cs_flags = icc->icc_flags;
- 
--        /* New thread because we should return to user app before
--           writing into our pipe */
--        rc = cfs_create_thread(mdc_changelog_send_thread, cs, CFS_DAEMON_FLAGS);
--        if (rc >= 0) {
--                CDEBUG(D_CHANGELOG, "start changelog thread: %d\n", rc);
--                return 0;
--        }
-+	/*
-+	 * New thread because we should return to user app before
-+	 * writing into our pipe
-+	 */
-+        rc = PTR_ERR(kthread_run(mdc_changelog_send_thread, cs,
-+				 "mdc_clg_send_thread"));
-+	if (!IS_ERR_VALUE(rc)) {
-+		CDEBUG(D_CHANGELOG, "start changelog thread\n");
-+		return 0;
-+	}
- 
-         CERROR("Failed to start changelog thread: %d\n", rc);
-         OBD_FREE_PTR(cs);
-diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
-index 7ab15f9..6d6208b 100644
---- a/lustre/mdd/mdd_lfsck.c
-+++ b/lustre/mdd/mdd_lfsck.c
-@@ -2533,8 +2533,7 @@ static int mdd_lfsck_main(void *args)
- 	int			 rc;
- 	ENTRY;
- 
--	cfs_daemonize("lfsck");
--	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
-+	rc = lu_env_init(&env, LCT_MD_THREAD);
- 	if (rc != 0) {
- 		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
- 		       mdd_lfsck2name(lfsck), rc);
-@@ -2798,8 +2797,8 @@ trigger:
- 
- 	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
- 	thread_set_flags(thread, 0);
--	rc = cfs_create_thread(mdd_lfsck_main, lfsck, 0);
--	if (rc < 0)
-+	rc = PTR_ERR(kthread_run(mdd_lfsck_main, lfsck, "lfsck"));
-+	if (IS_ERR_VALUE(rc))
- 		CERROR("%s: cannot start LFSCK thread, rc = %d\n",
- 		       mdd_lfsck2name(lfsck), rc);
- 	else
-diff --git a/lustre/mdt/mdt_capa.c b/lustre/mdt/mdt_capa.c
-index 567a0f8..6e13b42 100644
---- a/lustre/mdt/mdt_capa.c
-+++ b/lustre/mdt/mdt_capa.c
-@@ -218,7 +218,7 @@ static int mdt_ck_thread_main(void *args)
-         int                     rc;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("mdt_ck");
-+	unshare_fs_struct();
-         cfs_block_allsigs();
- 
-         thread_set_flags(thread, SVC_RUNNING);
-@@ -290,18 +290,18 @@ static int mdt_ck_thread_main(void *args)
- 
- int mdt_ck_thread_start(struct mdt_device *mdt)
- {
--        struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
--        int rc;
--
--        cfs_waitq_init(&thread->t_ctl_waitq);
--        rc = cfs_create_thread(mdt_ck_thread_main, mdt, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("cannot start mdt_ck thread, rc = %d\n", rc);
--                return rc;
--        }
--
--        l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
--        return 0;
-+	struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
-+	cfs_task_t *task;
-+
-+	cfs_waitq_init(&thread->t_ctl_waitq);
-+	task = kthread_run(mdt_ck_thread_main, mdt, "mdt_ck");
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start mdt_ck thread, rc = %ld\n", PTR_ERR(task));
-+		return PTR_ERR(task);
-+	}
-+
-+	l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
-+	return 0;
- }
- 
- void mdt_ck_thread_stop(struct mdt_device *mdt)
-diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 83bd75e..b7dccf0 100644
---- a/lustre/mgc/mgc_request.c
-+++ b/lustre/mgc/mgc_request.c
-@@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
- 
- static int mgc_requeue_thread(void *data)
- {
--        char name[] = "ll_cfg_requeue";
-         int rc = 0;
-         ENTRY;
- 
--        cfs_daemonize(name);
--
-         CDEBUG(D_MGC, "Starting requeue thread\n");
- 
-         /* Keep trying failed locks periodically */
-@@ -776,20 +773,20 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
-         sptlrpc_lprocfs_cliobd_attach(obd);
- 
-         if (cfs_atomic_inc_return(&mgc_count) == 1) {
--                rq_state = 0;
--                cfs_waitq_init(&rq_waitq);
--
--                /* start requeue thread */
--                rc = cfs_create_thread(mgc_requeue_thread, NULL,
--                                       CFS_DAEMON_FLAGS);
--                if (rc < 0) {
--                        CERROR("%s: Cannot start requeue thread (%d),"
--                               "no more log updates!\n",
--                               obd->obd_name, rc);
--                        GOTO(err_cleanup, rc);
--                }
--                /* rc is the pid of mgc_requeue_thread. */
--                rc = 0;
-+		rq_state = 0;
-+		cfs_waitq_init(&rq_waitq);
-+
-+		/* start requeue thread */
-+		rc = PTR_ERR(kthread_run(mgc_requeue_thread, NULL,
-+					     "ll_cfg_requeue"));
-+		if (IS_ERR_VALUE(rc)) {
-+			CERROR("%s: Cannot start requeue thread (%d),"
-+			       "no more log updates!\n",
-+			       obd->obd_name, rc);
-+			GOTO(err_cleanup, rc);
-+		}
-+		/* rc is the task_struct pointer of mgc_requeue_thread. */
-+		rc = 0;
-         }
- 
-         RETURN(rc);
-diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
-index 781250f..e6abdc4 100644
---- a/lustre/mgs/mgs_nids.c
-+++ b/lustre/mgs/mgs_nids.c
-@@ -440,7 +440,6 @@ static int mgs_ir_notify(void *arg)
- 
-         LASSERTF(sizeof(name) < 32, "name is too large to be in stack.\n");
-         sprintf(name, "mgs_%s_notify", fsdb->fsdb_name);
--        cfs_daemonize(name);
- 
- 	complete(&fsdb->fsdb_notify_comp);
- 
-@@ -471,7 +470,7 @@ static int mgs_ir_notify(void *arg)
- int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
- 		   struct fs_db *fsdb)
- {
--        int rc;
-+	cfs_task_t *task;
- 
-         if (!ir_timeout)
-                 ir_timeout = OBD_IR_MGS_TIMEOUT;
-@@ -488,11 +487,13 @@ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
-         cfs_atomic_set(&fsdb->fsdb_notify_phase, 0);
-         cfs_waitq_init(&fsdb->fsdb_notify_waitq);
- 	init_completion(&fsdb->fsdb_notify_comp);
--        rc = cfs_create_thread(mgs_ir_notify, fsdb, CFS_DAEMON_FLAGS);
--        if (rc > 0)
-+
-+	task = kthread_run(mgs_ir_notify, fsdb,
-+			       "mgs_%s_notify", fsdb->fsdb_name);
-+	if (IS_ERR(task))
- 		wait_for_completion(&fsdb->fsdb_notify_comp);
--        else
--                CERROR("Start notify thread error %d\n", rc);
-+	else
-+		CERROR("Start notify thread error %ld\n", PTR_ERR(task));
- 
- 	mgs_nidtbl_init_fs(env, fsdb);
-         return 0;
-diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index e09f15e..6900bbc 100644
---- a/lustre/obdclass/genops.c
-+++ b/lustre/obdclass/genops.c
-@@ -1744,14 +1744,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
-  */
- static int obd_zombie_impexp_thread(void *unused)
- {
--	int rc;
--
--	rc = cfs_daemonize_ctxt("obd_zombid");
--	if (rc != 0) {
--		complete(&obd_zombie_start);
--		RETURN(rc);
--	}
--
-+	unshare_fs_struct();
- 	complete(&obd_zombie_start);
- 
- 	obd_zombie_pid = cfs_curproc_pid();
-@@ -1800,7 +1793,9 @@ int obd_zombie_impexp_kill(void *arg)
-  */
- int obd_zombie_impexp_init(void)
- {
--	int rc;
-+#ifdef __KERNEL__
-+	cfs_task_t *task;
-+#endif
- 
- 	CFS_INIT_LIST_HEAD(&obd_zombie_imports);
- 	CFS_INIT_LIST_HEAD(&obd_zombie_exports);
-@@ -1811,9 +1806,9 @@ int obd_zombie_impexp_init(void)
- 	obd_zombie_pid = 0;
- 
- #ifdef __KERNEL__
--	rc = cfs_create_thread(obd_zombie_impexp_thread, NULL, 0);
--	if (rc < 0)
--		RETURN(rc);
-+	task = kthread_run(obd_zombie_impexp_thread, NULL, "obd_zombid");
-+	if (IS_ERR(task))
-+		RETURN(PTR_ERR(task));
- 
- 	wait_for_completion(&obd_zombie_start);
- #else
-@@ -1825,9 +1820,8 @@ int obd_zombie_impexp_init(void)
-         obd_zombie_impexp_idle_cb =
-                 liblustre_register_idle_callback("obd_zombi_impexp_check",
-                                                  &obd_zombie_impexp_check, NULL);
--        rc = 0;
- #endif
--        RETURN(rc);
-+	RETURN(0);
- }
- /**
-  * stop destroy zombie import/export thread
-diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
-index 2ab3061..2cd9598 100644
---- a/lustre/obdclass/llog.c
-+++ b/lustre/obdclass/llog.c
-@@ -438,7 +438,7 @@ static int llog_process_thread_daemonize(void *arg)
- 	struct lu_env			 env;
- 	int				 rc;
- 
--	cfs_daemonize_ctxt("llog_process_thread");
-+	unshare_fs_struct();
- 
- 	/* client env has no keys, tags is just 0 */
- 	rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
-@@ -480,9 +480,9 @@ int llog_process_or_fork(const struct lu_env *env,
- 		 * init the new one in llog_process_thread_daemonize. */
- 		lpi->lpi_env = NULL;
- 		init_completion(&lpi->lpi_completion);
--		rc = cfs_create_thread(llog_process_thread_daemonize, lpi,
--				       CFS_DAEMON_FLAGS);
--		if (rc < 0) {
-+		rc = PTR_ERR(kthread_run(llog_process_thread_daemonize, lpi,
-+					     "llog_process_thread"));
-+		if (IS_ERR_VALUE(rc)) {
- 			CERROR("%s: cannot start thread: rc = %d\n",
- 			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
- 			OBD_FREE_PTR(lpi);
-diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 6e9c37b..f0ad81d 100644
---- a/lustre/osd-ldiskfs/osd_scrub.c
-+++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -1027,7 +1027,6 @@ static int osd_scrub_main(void *args)
- 	int		      rc;
- 	ENTRY;
- 
--	cfs_daemonize("OI_scrub");
- 	rc = lu_env_init(&env, LCT_DT_THREAD);
- 	if (rc != 0) {
- 		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
-@@ -1601,8 +1600,8 @@ again:
- 
- 	scrub->os_start_flags = flags;
- 	thread_set_flags(thread, 0);
--	rc = cfs_create_thread(osd_scrub_main, dev, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(osd_scrub_main, dev, "OI_scrub"));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("%.16s: cannot start iteration thread, rc = %d\n",
- 		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
- 		RETURN(rc);
-diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 073bd4b..227a6ef 100644
---- a/lustre/osp/osp_precreate.c
-+++ b/lustre/osp/osp_precreate.c
-@@ -872,15 +872,11 @@ static int osp_precreate_thread(void *_arg)
- 	struct osp_device	*d = _arg;
- 	struct ptlrpc_thread	*thread = &d->opd_pre_thread;
- 	struct l_wait_info	 lwi = { 0 };
--	char			 pname[16];
- 	struct lu_env		 env;
- 	int			 rc;
- 
- 	ENTRY;
- 
--	sprintf(pname, "osp-pre-%u", d->opd_index);
--	cfs_daemonize(pname);
--
- 	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
- 	if (rc) {
- 		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1239,7 +1235,7 @@ out:
- int osp_init_precreate(struct osp_device *d)
- {
- 	struct l_wait_info	 lwi = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 
- 	ENTRY;
- 
-@@ -1274,10 +1270,11 @@ int osp_init_precreate(struct osp_device *d)
- 	/*
- 	 * start thread handling precreation and statfs updates
- 	 */
--	rc = cfs_create_thread(osp_precreate_thread, d, 0);
--	if (rc < 0) {
--		CERROR("can't start precreate thread %d\n", rc);
--		RETURN(rc);
-+	task = kthread_run(osp_precreate_thread, d,
-+			       "osp-pre-%u", d->opd_index);
-+	if (IS_ERR(task)) {
-+		CERROR("can't start precreate thread %ld\n", PTR_ERR(task));
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
-diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index c845077..852f1ee 100644
---- a/lustre/osp/osp_sync.c
-+++ b/lustre/osp/osp_sync.c
-@@ -823,7 +823,6 @@ static int osp_sync_thread(void *_arg)
- 	struct llog_handle	*llh;
- 	struct lu_env		 env;
- 	int			 rc, count;
--	char			 pname[16];
- 
- 	ENTRY;
- 
-@@ -834,9 +833,6 @@ static int osp_sync_thread(void *_arg)
- 		RETURN(rc);
- 	}
- 
--	sprintf(pname, "osp-syn-%u", d->opd_index);
--	cfs_daemonize(pname);
--
- 	spin_lock(&d->opd_syn_lock);
- 	thread->t_flags = SVC_RUNNING;
- 	spin_unlock(&d->opd_syn_lock);
-@@ -1041,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
- 	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
- 	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
- 
--	rc = cfs_create_thread(osp_sync_thread, d, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(osp_sync_thread, d,
-+				 "osp-syn-%u", d->opd_index));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("%s: can't start sync thread: rc = %d\n",
- 		       d->opd_obd->obd_name, rc);
- 		GOTO(err_llog, rc);
-diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
-index 6ab0248..0eb47d9 100644
---- a/lustre/ptlrpc/import.c
-+++ b/lustre/ptlrpc/import.c
-@@ -1267,7 +1267,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
- 
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_imp_inval");
-+	unshare_fs_struct();
- 
-         CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
-                imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
-@@ -1337,20 +1337,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
- 		spin_unlock(&imp->imp_lock);
- 
- #ifdef __KERNEL__
--                /* bug 17802:  XXX client_disconnect_export vs connect request
--                 * race. if client will evicted at this time, we start
--                 * invalidate thread without reference to import and import can
--                 * be freed at same time. */
--                class_import_get(imp);
--                rc = cfs_create_thread(ptlrpc_invalidate_import_thread, imp,
--                                       CFS_DAEMON_FLAGS);
--                if (rc < 0) {
--                        class_import_put(imp);
--                        CERROR("error starting invalidate thread: %d\n", rc);
--                } else {
--                        rc = 0;
--                }
--                RETURN(rc);
-+		{
-+		cfs_task_t *task;
-+		/* bug 17802:  XXX client_disconnect_export vs connect request
-+		 * race. if client will evicted at this time, we start
-+		 * invalidate thread without reference to import and import can
-+		 * be freed at same time. */
-+		class_import_get(imp);
-+		task = kthread_run(ptlrpc_invalidate_import_thread, imp,
-+				     "ll_imp_inval");
-+		if (IS_ERR(task)) {
-+			class_import_put(imp);
-+			CERROR("error starting invalidate thread: %d\n", rc);
-+			rc = PTR_ERR(task);
-+		} else {
-+			rc = 0;
-+		}
-+		RETURN(rc);
-+		}
- #else
-                 ptlrpc_invalidate_import(imp);
- 
-diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
-index b42fb10..4c4ba01 100644
---- a/lustre/ptlrpc/pinger.c
-+++ b/lustre/ptlrpc/pinger.c
-@@ -306,8 +306,6 @@ static int ptlrpc_pinger_main(void *arg)
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
- 	ENTRY;
- 
--        cfs_daemonize(thread->t_name);
--
-         /* Record that the thread is running */
-         thread_set_flags(thread, SVC_RUNNING);
-         cfs_waitq_signal(&thread->t_ctl_waitq);
-@@ -402,14 +400,14 @@ int ptlrpc_start_pinger(void)
- 
- 	/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
- 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
--        rc = cfs_create_thread(ptlrpc_pinger_main,
--			       pinger_thread, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("cannot start thread: %d\n", rc);
--                OBD_FREE(pinger_thread, sizeof(*pinger_thread));
--                pinger_thread = NULL;
--                RETURN(rc);
--        }
-+	rc = PTR_ERR(kthread_run(ptlrpc_pinger_main,
-+				 pinger_thread, pinger_thread->t_name));
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("cannot start thread: %d\n", rc);
-+		OBD_FREE(pinger_thread, sizeof(*pinger_thread));
-+		pinger_thread = NULL;
-+		RETURN(rc);
-+	}
-         l_wait_event(pinger_thread->t_ctl_waitq,
-                      thread_is_running(pinger_thread), &lwi);
- 
-@@ -678,7 +676,7 @@ static int ping_evictor_main(void *arg)
-         time_t expire_time;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_evictor");
-+	unshare_fs_struct();
- 
-         CDEBUG(D_HA, "Starting Ping Evictor\n");
-         pet_state = PET_READY;
-@@ -753,18 +751,19 @@ static int ping_evictor_main(void *arg)
- 
- void ping_evictor_start(void)
- {
--        int rc;
-+	cfs_task_t *task;
- 
--        if (++pet_refcount > 1)
--                return;
-+	if (++pet_refcount > 1)
-+		return;
- 
--        cfs_waitq_init(&pet_waitq);
-+	cfs_waitq_init(&pet_waitq);
- 
--        rc = cfs_create_thread(ping_evictor_main, NULL, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                pet_refcount--;
--                CERROR("Cannot start ping evictor thread: %d\n", rc);
--        }
-+	task = kthread_run(ping_evictor_main, NULL, "ll_evictor");
-+	if (IS_ERR(task)) {
-+		pet_refcount--;
-+		CERROR("Cannot start ping evictor thread: %ld\n",
-+			PTR_ERR(task));
-+	}
- }
- EXPORT_SYMBOL(ping_evictor_start);
- 
-diff --git a/lustre/ptlrpc/ptlrpcd.c b/lustre/ptlrpc/ptlrpcd.c
-index 669b0d7..b6486e0 100644
---- a/lustre/ptlrpc/ptlrpcd.c
-+++ b/lustre/ptlrpc/ptlrpcd.c
-@@ -410,7 +410,7 @@ static int ptlrpcd(void *arg)
-         int rc, exit = 0;
-         ENTRY;
- 
--	cfs_daemonize_ctxt(pc->pc_name);
-+	unshare_fs_struct();
- #if defined(CONFIG_SMP) && \
- (defined(HAVE_CPUMASK_OF_NODE) || defined(HAVE_NODE_TO_CPUMASK))
- 	if (test_bit(LIOD_BIND, &pc->pc_flags)) {
-@@ -709,18 +709,21 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
- 
-         env = 1;
- #ifdef __KERNEL__
--        if (index >= 0) {
--                rc = ptlrpcd_bind(index, max);
--                if (rc < 0)
--                        GOTO(out, rc);
--        }
-+	{
-+		cfs_task_t *task;
-+		if (index >= 0) {
-+			rc = ptlrpcd_bind(index, max);
-+			if (rc < 0)
-+				GOTO(out, rc);
-+		}
- 
--        rc = cfs_create_thread(ptlrpcd, pc, 0);
--        if (rc < 0)
--                GOTO(out, rc);
-+		task = kthread_run(ptlrpcd, pc, pc->pc_name);
-+		if (IS_ERR(task))
-+			GOTO(out, rc = PTR_ERR(task));
- 
--        rc = 0;
--	wait_for_completion(&pc->pc_starting);
-+		rc = 0;
-+		wait_for_completion(&pc->pc_starting);
-+	}
- #else
-         pc->pc_wait_callback =
-                 liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
-diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
-index 40f16eb..4c6f20d 100644
---- a/lustre/ptlrpc/sec_gc.c
-+++ b/lustre/ptlrpc/sec_gc.c
-@@ -169,7 +169,7 @@ static int sec_gc_main(void *arg)
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *) arg;
-         struct l_wait_info    lwi;
- 
--        cfs_daemonize_ctxt("sptlrpc_gc");
-+	unshare_fs_struct();
- 
-         /* Record that the thread is running */
-         thread_set_flags(thread, SVC_RUNNING);
-@@ -222,7 +222,7 @@ again:
- int sptlrpc_gc_init(void)
- {
- 	struct l_wait_info lwi = { 0 };
--	int                rc;
-+	cfs_task_t *task;
- 
- 	mutex_init(&sec_gc_mutex);
- 	spin_lock_init(&sec_gc_list_lock);
-@@ -232,10 +232,10 @@ int sptlrpc_gc_init(void)
-         memset(&sec_gc_thread, 0, sizeof(sec_gc_thread));
-         cfs_waitq_init(&sec_gc_thread.t_ctl_waitq);
- 
--        rc = cfs_create_thread(sec_gc_main, &sec_gc_thread, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("can't start gc thread: %d\n", rc);
--                return rc;
-+	task = kthread_run(sec_gc_main, &sec_gc_thread, "sptlrpc_gc");
-+	if (IS_ERR(task)) {
-+		CERROR("can't start gc thread: %ld\n", PTR_ERR(task));
-+		return PTR_ERR(task);
-         }
- 
-         l_wait_event(sec_gc_thread.t_ctl_waitq,
-diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
-index 7e176c0..c1e23fd 100644
---- a/lustre/ptlrpc/service.c
-+++ b/lustre/ptlrpc/service.c
-@@ -2400,7 +2400,7 @@ static int ptlrpc_main(void *arg)
-         ENTRY;
- 
-         thread->t_pid = cfs_curproc_pid();
--        cfs_daemonize_ctxt(thread->t_name);
-+	unshare_fs_struct();
- 
- 	/* NB: we will call cfs_cpt_bind() for all threads, because we
- 	 * might want to run lustre server only on a subset of system CPUs,
-@@ -2599,7 +2599,7 @@ static int ptlrpc_hr_main(void *arg)
- 
- 	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
- 		 hrp->hrp_cpt, hrt->hrt_id);
--	cfs_daemonize_ctxt(threadname);
-+	unshare_fs_struct();
- 
- 	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
- 	if (rc != 0) {
-@@ -2665,15 +2665,18 @@ static int ptlrpc_start_hr_threads(void)
- 		int	rc = 0;
- 
- 		for (j = 0; j < hrp->hrp_nthrs; j++) {
--			rc = cfs_create_thread(ptlrpc_hr_main,
--					       &hrp->hrp_thrs[j],
--					       CLONE_VM | CLONE_FILES);
--			if (rc < 0)
-+			struct	ptlrpc_hr_thread *hrt = &hrp->hrp_thrs[j];
-+			rc = PTR_ERR(kthread_run(ptlrpc_hr_main,
-+						 &hrp->hrp_thrs[j],
-+						 "ptlrpc_hr%02d_%03d",
-+						 hrp->hrp_cpt,
-+						 hrt->hrt_id));
-+			if (IS_ERR_VALUE(rc))
- 				break;
- 		}
- 		cfs_wait_event(ptlrpc_hr.hr_waitq,
- 			       cfs_atomic_read(&hrp->hrp_nstarted) == j);
--		if (rc >= 0)
-+		if (!IS_ERR_VALUE(rc))
- 			continue;
- 
- 		CERROR("Reply handling thread %d:%d Failed on starting: "
-@@ -2856,12 +2859,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
- 	}
- 
- 	CDEBUG(D_RPCTRACE, "starting thread '%s'\n", thread->t_name);
--	/*
--	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
--	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
--	 */
--	rc = cfs_create_thread(ptlrpc_main, thread, CFS_DAEMON_FLAGS);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("cannot start thread '%s': rc %d\n",
- 		       thread->t_name, rc);
- 		spin_lock(&svcpt->scp_lock);
-diff --git a/lustre/quota/qmt_lock.c b/lustre/quota/qmt_lock.c
-index 9339580..1f33aef 100644
---- a/lustre/quota/qmt_lock.c
-+++ b/lustre/quota/qmt_lock.c
-@@ -716,7 +716,6 @@ static int qmt_reba_thread(void *arg)
- 	struct l_wait_info	 lwi = { 0 };
- 	struct lu_env		*env;
- 	struct lquota_entry	*lqe, *tmp;
--	char			 pname[MTI_NAME_MAXLEN];
- 	int			 rc;
- 	ENTRY;
- 
-@@ -731,9 +730,6 @@ static int qmt_reba_thread(void *arg)
- 		RETURN(rc);
- 	}
- 
--	snprintf(pname, MTI_NAME_MAXLEN, "qmt_reba_%s", qmt->qmt_svname);
--	cfs_daemonize(pname);
--
- 	thread_set_flags(thread, SVC_RUNNING);
- 	cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-@@ -773,15 +769,16 @@ int qmt_start_reba_thread(struct qmt_device *qmt)
- {
- 	struct ptlrpc_thread	*thread = &qmt->qmt_reba_thread;
- 	struct l_wait_info	 lwi    = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 	ENTRY;
- 
--	rc = cfs_create_thread(qmt_reba_thread, (void *)qmt, 0);
--	if (rc < 0) {
--		CERROR("%s: failed to start rebalance thread (%d)\n",
--		       qmt->qmt_svname, rc);
-+	task = kthread_run(qmt_reba_thread, (void *)qmt,
-+			       "qmt_reba_%s", qmt->qmt_svname);
-+	if (IS_ERR(task)) {
-+		CERROR("%s: failed to start rebalance thread (%ld)\n",
-+		       qmt->qmt_svname, PTR_ERR(task));
- 		thread_set_flags(thread, SVC_STOPPED);
--		RETURN(rc);
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(thread->t_ctl_waitq,
-diff --git a/lustre/quota/qsd_reint.c b/lustre/quota/qsd_reint.c
-index 0e0643f..6fec9e6 100644
---- a/lustre/quota/qsd_reint.c
-+++ b/lustre/quota/qsd_reint.c
-@@ -417,8 +417,6 @@ static int qsd_reint_main(void *args)
- 	int			 rc;
- 	ENTRY;
- 
--	cfs_daemonize("qsd_reint");
--
- 	CDEBUG(D_QUOTA, "%s: Starting reintegration thread for "DFID"\n",
- 	       qsd->qsd_svname, PFID(&qqi->qqi_fid));
- 
-@@ -662,8 +660,8 @@ int qsd_start_reint_thread(struct qsd_qtype_info *qqi)
- 		RETURN(0);
- 	}
- 
--	rc = cfs_create_thread(qsd_reint_main, (void *)qqi, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(qsd_reint_main, (void *)qqi, "qsd_reint"));
-+	if (IS_ERR_VALUE(rc)) {
- 		thread_set_flags(thread, SVC_STOPPED);
- 		write_lock(&qsd->qsd_lock);
- 		qqi->qqi_reint = 0;
-diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c
-index fdc1ef5..f9af987 100644
---- a/lustre/quota/qsd_writeback.c
-+++ b/lustre/quota/qsd_writeback.c
-@@ -404,7 +404,6 @@ static int qsd_upd_thread(void *arg)
- 	struct l_wait_info	 lwi;
- 	cfs_list_t		 queue;
- 	struct qsd_upd_rec	*upd, *n;
--	char			 pname[MTI_NAME_MAXLEN];
- 	struct lu_env		*env;
- 	int			 qtype, rc = 0;
- 	bool			 uptodate;
-@@ -423,9 +422,6 @@ static int qsd_upd_thread(void *arg)
- 		RETURN(rc);
- 	}
- 
--	snprintf(pname, MTI_NAME_MAXLEN, "lquota_wb_%s", qsd->qsd_svname);
--	cfs_daemonize(pname);
--
- 	thread_set_flags(thread, SVC_RUNNING);
- 	cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-@@ -487,14 +483,16 @@ int qsd_start_upd_thread(struct qsd_instance *qsd)
- {
- 	struct ptlrpc_thread	*thread = &qsd->qsd_upd_thread;
- 	struct l_wait_info	 lwi = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 	ENTRY;
- 
--	rc = cfs_create_thread(qsd_upd_thread, (void *)qsd, 0);
--	if (rc < 0) {
--		CERROR("Fail to start quota update thread. rc: %d\n", rc);
-+	task = kthread_run(qsd_upd_thread, (void *)qsd,
-+			   "lquota_wb_%s", qsd->qsd_svname);
-+	if (IS_ERR(task)) {
-+		CERROR("Fail to start quota update thread. rc: %ld\n",
-+			PTR_ERR(task));
- 		thread_set_flags(thread, SVC_STOPPED);
--		RETURN(rc);
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(thread->t_ctl_waitq,
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch b/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch
deleted file mode 100644
index cb7c8c8..0000000
--- a/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 15e569cb19f7d46747da8ca461db0869571db0cc Mon Sep 17 00:00:00 2001
-From: Bob Glossman <bob.glossman@intel.com>
-Date: Wed, 24 Apr 2013 06:43:35 -0700
-Subject: [PATCH 12/12] LU-3179 build: fix compilation error with gcc 4.7.2
-
-use cast to resolve build warning from gcc 4.7.2
-
-Signed-off-by: Bob Glossman <bob.glossman@intel.com>
-Change-Id: I4356e621f5b9c687a6b76b12a93b664d542e1c79
----
- lustre/ptlrpc/nrs_crr.c | 2 +-
- lustre/ptlrpc/nrs_orr.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/lustre/ptlrpc/nrs_crr.c b/lustre/ptlrpc/nrs_crr.c
-index 0335bf9..6545913 100644
---- a/lustre/ptlrpc/nrs_crr.c
-+++ b/lustre/ptlrpc/nrs_crr.c
-@@ -278,7 +278,7 @@ int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
- {
- 	LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
- 
--	switch(opc) {
-+	switch((enum nrs_ctl_crr)opc) {
- 	default:
- 		RETURN(-EINVAL);
- 
-diff --git a/lustre/ptlrpc/nrs_orr.c b/lustre/ptlrpc/nrs_orr.c
-index bc4b373..5363629 100644
---- a/lustre/ptlrpc/nrs_orr.c
-+++ b/lustre/ptlrpc/nrs_orr.c
-@@ -759,7 +759,7 @@ int nrs_orr_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
- {
- 	LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
- 
--	switch(opc) {
-+	switch((enum nrs_ctl_orr)opc) {
- 	default:
- 		RETURN(-EINVAL);
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index e87c114..cb217db 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -33,18 +33,10 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-1812-kernel-3.7-FC18-server-patches.patch"
-	"${FILESDIR}/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
-	"${FILESDIR}/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
-	"${FILESDIR}/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
-	"${FILESDIR}/0005-LU-2800-llite-introduce-local-getname.patch"
-	"${FILESDIR}/0006-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
-	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
-	"${FILESDIR}/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch"
+	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
+	"${FILESDIR}/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
+	"${FILESDIR}/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-07-11 13:25 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-07-11 13:25 UTC (permalink / raw
  To: gentoo-commits

commit:     f71ef628107a5e59dd54ef96d44361a15f4eebd0
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Jul 11 13:24:22 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Jul 11 13:24:22 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=f71ef628

Update lustre patches

Package-Manager: portage-2.2.0_alpha186

---
 sys-cluster/lustre/ChangeLog                       |   20 +
 ...01-LU-1812-kernel-3.7-FC18-server-patches.patch |  380 ---
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |    8 +-
 ...-kernel-Kernel-update-for-3.7.2-201.fc18.patch} |  105 +-
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |  137 -
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |   30 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |  159 --
 ...9-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch} |   14 +-
 ...005-LU-2800-llite-introduce-local-getname.patch |   91 -
 .../files/0006-LU-2987-llite-rcu-free-inode.patch  |   89 -
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |   83 -
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch | 3005 --------------------
 ...uild-fix-compilation-error-with-gcc-4.7.2.patch |   43 -
 sys-cluster/lustre/lustre-9999.ebuild              |   16 +-
 14 files changed, 96 insertions(+), 4084 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 9d8c772..b769d9b 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,26 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  11 Jul 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  +files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch,
+  -files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  -files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  -files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  -files/0005-LU-2800-llite-introduce-local-getname.patch,
+  -files/0006-LU-2987-llite-rcu-free-inode.patch,
+  -files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  -files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  -files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   13 Jun 2013; Justin Lecher <jlec@gentoo.org> lustre-9999.ebuild,
   metadata.xml:
   Move virtual/linux-sources to build deps

diff --git a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch b/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
deleted file mode 100644
index f773a7b..0000000
--- a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
+++ /dev/null
@@ -1,380 +0,0 @@
-From 91315157587f3392b6cf43ea286b0f3ce1e7f94f Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Thu, 2 May 2013 07:54:50 -0400
-Subject: [PATCH 01/12] LU-1812 kernel: 3.7/FC18 server patches
-
-This patch extends lustre server support to FC18 running a
-3.7.2-201 kernel with a ZFS backend. At this time ldiskfs
-is not supported on FC18. This patch provides block level
-performance optimizations and the ability to simulate fail
-over for ldiskfs when it is provided. The jbd2-jcberr patch
-was not ported to these new platforms for reasons described
-in LU-433.
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I2a86d7ca4e068686372eb74f85b1443d24e245c4
----
- .../patches/blkdev_tunables-3.7.patch              | 128 +++++++++++++++
- .../kernel_patches/patches/dev_read_only-3.7.patch | 174 +++++++++++++++++++++
- .../patches/raid5-mmp-unplug-dev-3.7.patch         |  21 +++
- lustre/kernel_patches/series/3.x-fc18.series       |   4 +
- 4 files changed, 327 insertions(+)
- create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
- create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.7.patch
- create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
- create mode 100644 lustre/kernel_patches/series/3.x-fc18.series
-
-diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
-new file mode 100644
-index 0000000..1a98fb5
---- /dev/null
-+++ b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
-@@ -0,0 +1,128 @@
-+--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
-++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
-+@@ -19,6 +19,12 @@
-+ 
-+ unsigned long blk_max_pfn;
-+ 
-++int default_max_sectors = BLK_DEF_MAX_SECTORS;
-++module_param(default_max_sectors, int, 0);
-++
-++int default_max_segments = BLK_MAX_SEGMENTS;
-++module_param(default_max_segments, int, 0);
-++
-+ /**
-+  * blk_queue_prep_rq - set a prepare_request function for queue
-+  * @q:		queue
-+@@ -108,7 +114,7 @@
-+  */
-+ void blk_set_default_limits(struct queue_limits *lim)
-+ {
-+-	lim->max_segments = BLK_MAX_SEGMENTS;
-++	lim->max_segments = default_max_segments;
-+ 	lim->max_integrity_segments = 0;
-+ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
-+ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
-+@@ -255,7 +261,7 @@
-+ 
-+ 	limits->max_hw_sectors = max_hw_sectors;
-+ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
-+-				    BLK_DEF_MAX_SECTORS);
-++				    default_max_sectors);
-+ }
-+ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
-+ 
-+--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
-++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
-+@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
-+	  there should be no noticeable performance impact as long as you have
-+	  logging turned off.
-+ 
-++config SCSI_MAX_SG_SEGMENTS
-++	int "Maximum SCSI scatter gather segment size"
-++	range 32 256 
-++	default "128"
-++	depends on SCSI
-++	help
-++	  Control the maximum limit for scatter gather buffers for the
-++	  SCSI device.
-++
-+ config SCSI_SCAN_ASYNC
-+ 	bool "Asynchronous SCSI scanning"
-+ 	depends on SCSI
-+--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
-++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
-+@@ -20,7 +20,7 @@ struct scsi_cmnd;
-+  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
-+  * minimum value is 32
-+  */
-+-#define SCSI_MAX_SG_SEGMENTS	128
-++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
-+ 
-+ /*
-+  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
-+--- a/drivers/scsi/isci/init.c	2013-02-07 09:59:49.000000000 -0500
-++++ b/drivers/scsi/isci/init.c	2013-02-07 10:01:51.000000000 -0500
-+@@ -119,6 +119,10 @@
-+ module_param(phy_gen, byte, 0);
-+ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
-+ 
-++u16 sg_table_size = SG_ALL;
-++module_param(sg_table_size, ushort, 0);
-++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
-++
-+ unsigned char max_concurr_spinup;
-+ module_param(max_concurr_spinup, byte, 0);
-+ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
-+@@ -163,7 +167,6 @@
-+ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
-+ 	.cmd_per_lun			= 1,
-+ 	.this_id			= -1,
-+-	.sg_tablesize			= SG_ALL,
-+ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
-+ 	.use_clustering			= ENABLE_CLUSTERING,
-+ 	.eh_abort_handler		= sas_eh_abort_handler,
-+@@ -573,6 +576,7 @@
-+ 
-+ 		INIT_LIST_HEAD(&idev->node);
-+ 	}
-++	isci_sht.sg_tablesize = sg_table_size;
-+ 
-+ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
-+ 	if (!shost)
-+Increase MAX_SGE for fusion mpt driver.
-+
-+Index: linux-2.6.32.i386/drivers/message/fusion/Kconfig
-+===================================================================
-+--- linux-2.6.32.i386.orig/drivers/message/fusion/Kconfig	2009-12-03 09:21:21.000000000 +0530
-++++ linux-2.6.32.i386/drivers/message/fusion/Kconfig	2010-03-16 16:45:08.000000000 +0530
-+@@ -61,9 +61,9 @@
-+ 	  LSISAS1078
-+ 
-+ config FUSION_MAX_SGE
-+-	int "Maximum number of scatter gather entries (16 - 128)"
-+-	default "128"
-+-	range 16 128
-++	int "Maximum number of scatter gather entries (16 - 256)"
-++	default "256"
-++	range 16 256
-+ 	help
-+ 	  This option allows you to specify the maximum number of scatter-
-+ 	  gather entries per I/O. The driver default is 128, which matches
-+Index: linux-2.6.32.i386/drivers/message/fusion/mptbase.h
-+===================================================================
-+--- linux-2.6.32.i386.orig/drivers/message/fusion/mptbase.h	2009-12-03 09:21:21.000000000 +0530
-++++ linux-2.6.32.i386/drivers/message/fusion/mptbase.h	2010-03-16 16:46:54.000000000 +0530
-+@@ -165,10 +165,10 @@
-+  * Set the MAX_SGE value based on user input.
-+  */
-+ #ifdef CONFIG_FUSION_MAX_SGE
-+-#if CONFIG_FUSION_MAX_SGE  < 16
-++#if CONFIG_FUSION_MAX_SGE < 16
-+ #define MPT_SCSI_SG_DEPTH	16
-+-#elif CONFIG_FUSION_MAX_SGE  > 128
-+-#define MPT_SCSI_SG_DEPTH	128
-++#elif CONFIG_FUSION_MAX_SGE > 256
-++#define MPT_SCSI_SG_DEPTH	256
-+ #else
-+ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
-+ #endif
-diff --git a/lustre/kernel_patches/patches/dev_read_only-3.7.patch b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
-new file mode 100644
-index 0000000..7fb0b98
---- /dev/null
-+++ b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
-@@ -0,0 +1,174 @@
-+This patch is no longer needed for Lustre.  It is only included
-+for testing and ease of using the same kernel with older Lustre
-+versions.  This testing functionality was replaced in Linux 3.0
-+by the dm-flakey driver.
-+
-+This functionality is mainly used during testing, in order to
-+simulate a server crash for ldiskfs by discarding all of the
-+writes to the filesystem.  For recovery testing we could simulate
-+this by using a special loopback or DM device that also discards
-+writes to the device.
-+
-+This functionality is also used by target "failback" in order
-+to speed up service shutdown and takeover by the other node
-+during controlled operation.  However, it would also be possible
-+to do this by simply allowing all of the in-flight requests to
-+complete and then waiting for the service to stop.  This will
-+also be needed by the DMU-OSD, because discarding of writes on
-+a DMU-based target is not safe as it could trigger a storage
-+failure if the data is ever read from disk again and the
-+checksum does not match that expected by the block pointer.
-+
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/block/blk-core.c	2012-09-30 19:47:46.000000000 -0400
-++++ linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c	2012-11-16 11:35:04.419174277 -0500
-+@@ -1606,6 +1606,8 @@ static inline bool should_fail_request(s
-+
-+ #endif /* CONFIG_FAIL_MAKE_REQUEST */
-+
-++int dev_check_rdonly(struct block_device *bdev);
-++
-+ /*
-+  * Check whether this bio extends beyond the end of the device.
-+  */
-+@@ -1668,6 +1670,12 @@ generic_make_request_checks(struct bio *
-+		goto end_io;
-+	}
-+
-++	/* this is cfs's dev_rdonly check */
-++	if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
-++		err = 0;
-++		goto end_io;
-++	}
-++
-+	part = bio->bi_bdev->bd_part;
-+	if (should_fail_request(part, bio->bi_size) ||
-+	    should_fail_request(&part_to_disk(part)->part0,
-+@@ -3034,6 +3042,99 @@ void blk_finish_plug(struct blk_plug *pl
-+ }
-+ EXPORT_SYMBOL(blk_finish_plug);
-+
-++/*
-++ * Debug code for turning block devices "read-only" (will discard writes
-++ * silently).  This is for filesystem crash/recovery testing.
-++ */
-++struct deventry {
-++	dev_t dev;
-++	struct deventry *next;
-++};
-++
-++static struct deventry *devlist = NULL;
-++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
-++
-++int dev_check_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur;
-++
-++	if (!bdev)
-++		return 0;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			return 1;
-++		}
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++	return 0;
-++}
-++
-++void dev_set_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *newdev, *cur;
-++
-++	if (!bdev)
-++		return;
-++
-++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-++	if (!newdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			kfree(newdev);
-++			return;
-++		}
-++		cur = cur->next;
-++	}
-++	newdev->dev = bdev->bd_dev;
-++	newdev->next = devlist;
-++	devlist = newdev;
-++	spin_unlock(&devlock);
-++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
-++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
-++}
-++
-++void dev_clear_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur, *last = NULL;
-++
-++	if (!bdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			if (last)
-++				last->next = cur->next;
-++			else
-++				devlist = cur->next;
-++			spin_unlock(&devlock);
-++			kfree(cur);
-++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
-++				bdev->bd_disk ? bdev->bd_disk->disk_name :
-++				"unknown block", bdev->bd_dev);
-++			return;
-++		}
-++		last = cur;
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++}
-++
-++EXPORT_SYMBOL(dev_set_rdonly);
-++EXPORT_SYMBOL(dev_clear_rdonly);
-++EXPORT_SYMBOL(dev_check_rdonly);
-++
-+ int __init blk_dev_init(void)
-+ {
-+	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
-++++ linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
-+@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
-+		if (bdev != bdev->bd_contains)
-+			victim = bdev->bd_contains;
-+		bdev->bd_contains = NULL;
-++		dev_clear_rdonly(bdev);
-+
-+		put_disk(disk);
-+		module_put(owner);
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
-++++ linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
-+@@ -2244,6 +2244,10 @@ struct bio;
-+ extern void submit_bio(int, struct bio *);
-+ extern int bdev_read_only(struct block_device *);
-+ #endif
-++#define HAVE_CLEAR_RDONLY_ON_PUT
-++extern void dev_set_rdonly(struct block_device *bdev);
-++extern int dev_check_rdonly(struct block_device *bdev);
-++extern void dev_clear_rdonly(struct block_device *bdev);
-+ extern int set_blocksize(struct block_device *, int);
-+ extern int sb_set_blocksize(struct super_block *, int);
-+ extern int sb_min_blocksize(struct super_block *, int);
-diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
-new file mode 100644
-index 0000000..70b9992
---- /dev/null
-+++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
-@@ -0,0 +1,21 @@
-+--- linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c.orig	2012-11-21 08:51:15.312175089 -0500
-++++ linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c		2012-11-21 09:02:38.415174560 -0500
-+@@ -2394,6 +2394,8 @@ static int add_stripe_bio(struct stripe_
-+		bi->bi_next = *bip;
-+	*bip = bi;
-+	raid5_inc_bi_active_stripes(bi);
-++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
-++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);	/* force to read from disk. */
-+
-+	if (forwrite) {
-+		/* check if page is covered */
-+@@ -4217,6 +4222,9 @@ static void make_request(struct mddev *m
-+
-+		bio_endio(bi, 0);
-+	}
-++
-++	if (bi->bi_rw & REQ_SYNC)
-++		md_wakeup_thread(mddev->thread);
-+ }
-+
-+ static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
-diff --git a/lustre/kernel_patches/series/3.x-fc18.series b/lustre/kernel_patches/series/3.x-fc18.series
-new file mode 100644
-index 0000000..387a2dd
---- /dev/null
-+++ b/lustre/kernel_patches/series/3.x-fc18.series
-@@ -0,0 +1,4 @@
-+raid5-mmp-unplug-dev-3.7.patch
-+dev_read_only-3.7.patch
-+blkdev_tunables-3.7.patch
-+bh_lru_size_config.patch
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 91%
rename from sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index dbfda90..a5af8be 100644
--- a/sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From a48ffc03f6d9630e66720089ed01c9f4f1ec10fc Mon Sep 17 00:00:00 2001
+From e4b7000ba2dde158a990130bcaee91256255c280 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 09/12] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 1/4] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -14,10 +14,10 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  1 file changed, 58 insertions(+), 8 deletions(-)
 
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index a78bfe3..d8451e0 100644
+index 95d20e2..de9df76 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
-@@ -362,14 +362,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -365,14 +365,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
similarity index 70%
rename from sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
rename to sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index 95ef999..8e02095 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,22 +1,22 @@
-From 025fda5f3a44942e7c87f180fc7275529e5405fa Mon Sep 17 00:00:00 2001
+From 1359b3ff29d39aae651457e39942b5ff61092d6c Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
-Date: Mon, 8 Apr 2013 21:04:22 +0800
-Subject: [PATCH 03/12] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
+Date: Wed, 10 Jul 2013 13:52:41 +0800
+Subject: [PATCH 2/4] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
-Add uapi header to include search path.
+Add uapi header to include search path
 
 Signed-off-by: yang sheng <yang.sheng@intel.com>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: Id90e091fef63ebf5bb8e7765969aa3148cc31aa2
 ---
  autoMakefile.am                 |  2 +-
- config/lustre-build-linux.m4    | 21 +++++++++++++--------
- ldiskfs/config/ldiskfs-build.m4 | 22 ++++++++++++++--------
- lustre/autoconf/lustre-core.m4  |  1 +
+ config/lustre-build-linux.m4    | 19 ++++++++++++-------
+ ldiskfs/config/ldiskfs-build.m4 | 20 +++++++++++++-------
  lustre/scripts/version_tag.pl   |  4 +++-
- 5 files changed, 32 insertions(+), 18 deletions(-)
+ 4 files changed, 29 insertions(+), 16 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 1cc3b48..7b8a096 100644
+index 9b6dcfd..71d8db4 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -84,7 +84,7 @@ all-am: modules
@@ -24,12 +24,12 @@ index 1cc3b48..7b8a096 100644
  	$(MAKE) CC="$(CC)" $(CROSS_VARS) -C $(LINUX_OBJ)	     \
  	-f $(PWD)/build/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) \
 -	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
-+        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
++	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
  	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index b08ae65..a78bfe3 100644
+index de9df76..8849f14 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -59,23 +59,21 @@ index b08ae65..a78bfe3 100644
  	],[
  		#ifndef RHEL_RELEASE_CODE
  		#error "not redhat kernel"
-@@ -222,9 +222,13 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+@@ -222,8 +222,12 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
          [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
  	[AC_MSG_ERROR([Run make config in $LINUX.])])])
          AC_SUBST(AUTOCONF_HDIR)
 -LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
 -	[AC_MSG_ERROR([Run make config in $LINUX.])])
--
 +LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
 +	[LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
 +		[VERSION_HDIR=generated/uapi/linux],
 +		[AC_MSG_ERROR([Run make config in $LINUX.])])
 +	])
-+        AC_SUBST(VERSION_HDIR)
-+ 
++	AC_SUBST(VERSION_HDIR)
+ 
  # ----------- kconfig.h exists ---------------
  # kernel 3.1, $LINUX/include/linux/kconfig.h is added
- # see kernel commit 2a11c8ea20bf850b3a2c60db8c2e7497d28aba99
 @@ -240,7 +244,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
  # tarred up the tree and ran make dep etc. in it, then
  # version.h gets overwritten with a standard linux one.
@@ -85,7 +83,7 @@ index b08ae65..a78bfe3 100644
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-@@ -344,7 +348,8 @@ $2
+@@ -352,7 +356,8 @@ $2
  AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
  [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
  rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
@@ -96,36 +94,35 @@ index b08ae65..a78bfe3 100644
  	[_AC_MSG_LOG_CONFTEST
  m4_ifvaln([$5],[$5])dnl])
 diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
-index be144de..a978bcf 100644
+index 38fce59..8a00872 100644
 --- a/ldiskfs/config/ldiskfs-build.m4
 +++ b/ldiskfs/config/ldiskfs-build.m4
-@@ -4,12 +4,12 @@ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
- 	utsrelease1=${LINUX_OBJ}/include/linux/version.h
+@@ -1,9 +1,9 @@
+ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
+ 	AC_MSG_CHECKING([kernel source version])
+ 
+-	utsrelease1=${LINUX_OBJ}/include/linux/version.h
++	utsrelease1=${LINUX_OBJ}/include/generated/utsrelease.h
  	utsrelease2=${LINUX_OBJ}/include/linux/utsrelease.h
- 	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
--	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
--		utsrelease=linux/version.h
-+	AS_IF([test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
-+		utsrelease=generated/utsrelease.h
+-	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
++	utsrelease3=${LINUX_OBJ}/include/linux/version.h
+ 	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
+ 		utsrelease=${utsrelease1}
  	], [test -r ${utsrelease2} && fgrep -q UTS_RELEASE ${utsrelease2}], [
- 		utsrelease=linux/utsrelease.h
--	], [test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
--		utsrelease=generated/utsrelease.h
-+	], [test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
-+		utsrelease=linux/version.h
- 	])
+@@ -60,10 +60,10 @@ AC_SUBST(RELEASE)
  
- 	AS_IF([test "${utsrelease}"], [
-@@ -64,7 +64,7 @@ AC_SUBST(RELEASE)
  # check is redhat/suse kernels
- AC_MSG_CHECKING([that RedHat kernel])
- LB_LINUX_TRY_COMPILE([
--		#include <linux/version.h>
-+		#include <$VERSION_HDIR/version.h>
- 	],[
- 		#ifndef RHEL_RELEASE_CODE
- 		#error "not redhat kernel"
-@@ -190,8 +190,14 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+ AC_MSG_CHECKING([for RedHat kernel version])
+-	AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/linux/version.h], [
++	AS_IF([fgrep -q RHEL_RELEASE ${LINUX_OBJ}/include/$VERSION_HDIR/version.h], [
+ 		RHEL_KERNEL="yes"
+ 		RHEL_RELEASE=$(expr 0$(awk -F \" '/ RHEL_RELEASE / { print [$]2 }' \
+-		               ${LINUX_OBJ}/include/linux/version.h) + 1)
++		               ${LINUX_OBJ}/include/$VERSION_HDIR/version.h) + 1)
+ 		KERNEL_VERSION=$(sed -e 's/\(@<:@23@:>@\.@<:@0-9@:>@*\.@<:@0-9@:>@*\).*/\1/' <<< ${LINUXRELEASE})
+ 		RHEL_KERNEL_VERSION=${KERNEL_VERSION}-${RHEL_RELEASE}
+ 		AC_SUBST(RHEL_KERNEL_VERSION)
+@@ -184,8 +184,14 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
          [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
  	[AC_MSG_ERROR([Run make config in $LINUX.])])])
          AC_SUBST(AUTOCONF_HDIR)
@@ -133,16 +130,16 @@ index be144de..a978bcf 100644
 -	[AC_MSG_ERROR([Run make config in $LINUX.])])
 +LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
 +       [LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
-+               [VERSION_HDIR=generated/uapi/linux],
-+               [AC_MSG_ERROR([Run make config in $LINUX.])])
++	       [VERSION_HDIR=generated/uapi/linux],
++	       [AC_MSG_ERROR([Run make config in $LINUX.])])
 +       ])
 +       AC_SUBST(VERSION_HDIR)
-+ 
++
 +
  
  # ----------- kconfig.h exists ---------------
  # kernel 3.1, $LINUX/include/linux/kconfig.h is added
-@@ -208,7 +214,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
+@@ -202,7 +208,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
  # tarred up the tree and ran make dep etc. in it, then
  # version.h gets overwritten with a standard linux one.
  
@@ -151,20 +148,8 @@ index be144de..a978bcf 100644
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 7ac2b22..1972e17 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -328,6 +328,7 @@ AC_TRY_RUN([
-         #define __LINUX_POSIX_ACL_H
- 
-         #ifdef CONFIG_FS_POSIX_ACL
-+        struct user_namespace;
-         # include <linux/posix_acl_xattr.h>
-         #endif
- 
 diff --git a/lustre/scripts/version_tag.pl b/lustre/scripts/version_tag.pl
-index 61796c9..07cbdf8 100644
+index 61796c9..4d2bb4a 100644
 --- a/lustre/scripts/version_tag.pl
 +++ b/lustre/scripts/version_tag.pl
 @@ -43,8 +43,10 @@ sub get_kernver($$)
@@ -173,9 +158,9 @@ index 61796c9..07cbdf8 100644
      my $ver = new IO::File;
 -    if (!$ver->open("$objdir/include/linux/utsrelease.h") &&
 +    if (!$ver->open("$objdir/include/generated/utsrelease.h") &&
-+        !$ver->open("$objdir/include/linux/utsrelease.h") &&
++	!$ver->open("$objdir/include/linux/utsrelease.h") &&
          !$ver->open("$objdir/include/linux/version.h") &&
-+        !$ver->open("$dir/include/generated/utsrelease.h") &&
++	!$ver->open("$dir/include/generated/utsrelease.h") &&
          !$ver->open("$dir/include/linux/utsrelease.h") &&
          !$ver->open("$dir/include/linux/version.h")) {
              die "Run make dep on '$dir'\n";

diff --git a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
deleted file mode 100644
index 7d24cf8..0000000
--- a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ /dev/null
@@ -1,137 +0,0 @@
-From c81da9c214f1b32aa9657df42288a9c25e63c434 Mon Sep 17 00:00:00 2001
-From: yangsheng <yang.sheng@intel.com>
-Date: Mon, 8 Apr 2013 21:14:09 +0800
-Subject: [PATCH 02/12] LU-2686 kernel: sock_map_fd() replaced by
- sock_alloc_file()
-
-Use sock_alloc_file() replace sock_map_fd().
-
-Signed-off-by: yang sheng <yang.sheng@intel.com>
-Change-Id: I04cbcd651689af6b82b48ba5d49ddbf99a6758bf
----
- libcfs/autoconf/lustre-libcfs.m4  | 27 ++++++++++++++++++++++++
- libcfs/libcfs/linux/linux-tcpip.c | 44 +++++++++++++++++++++++----------------
- 2 files changed, 53 insertions(+), 18 deletions(-)
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 312542d..4545a7a 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -793,6 +793,31 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# FC18 3.7.2-201 unexport sock_map_fd() change to
-+# use sock_alloc_file().
-+# upstream commit 56b31d1c9f1e6a3ad92e7bfe252721e05d92b285
-+#
-+AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE],
-+[AC_MSG_CHECKING([sock_alloc_file is exported])
-+LB_CHECK_SYMBOL_EXPORT([sock_alloc_file], [net/socket.c],[
-+	LB_LINUX_TRY_COMPILE([
-+		#include <linux/net.h>
-+	],[
-+		sock_alloc_file(NULL, 0, NULL);
-+	],[
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_SOCK_ALLOC_FILE_3ARGS, 1,
-+			[sock_alloc_file takes 3 arguments])
-+	],[
-+		AC_MSG_RESULT(yes)
-+		AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
-+			[sock_alloc_file is exported])
-+	])
-+],[
-+])
-+])
-+
-+#
- # LIBCFS_PROG_LINUX
- #
- # LNet linux kernel checks
-@@ -850,6 +875,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
- LC_SK_SLEEP
- # 2.6.40 fc15
- LC_SHRINK_CONTROL
-+# 3.7
-+LIBCFS_SOCK_ALLOC_FILE
- ])
- 
- #
-diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
-index 0a31b55..3be0f68 100644
---- a/libcfs/libcfs/linux/linux-tcpip.c
-+++ b/libcfs/libcfs/linux/linux-tcpip.c
-@@ -47,11 +47,11 @@
- int
- libcfs_sock_ioctl(int cmd, unsigned long arg)
- {
--        mm_segment_t   oldmm = get_fs();
--        struct socket  *sock;
--        int             fd;
--        int             rc;
--        struct file     *sock_filp;
-+	mm_segment_t    oldmm = get_fs();
-+	struct socket  *sock;
-+	int             fd = -1;
-+	int             rc;
-+	struct file    *sock_filp;
- 
-         rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock);
-         if (rc != 0) {
-@@ -59,21 +59,27 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
-                 return rc;
-         }
- 
--#ifdef HAVE_SOCK_MAP_FD_2ARG
--        fd = sock_map_fd(sock,0);
-+#if !defined(HAVE_SOCK_ALLOC_FILE) && !defined(HAVE_SOCK_ALLOC_FILE_3ARGS)
-+# ifdef HAVE_SOCK_MAP_FD_2ARG
-+	fd = sock_map_fd(sock,0);
-+# else
-+	fd = sock_map_fd(sock);
-+# endif
-+	if (fd < 0) {
-+		rc = fd;
-+		goto out;
-+	}
-+	sock_filp = fget(fd);
- #else
--        fd = sock_map_fd(sock);
-+# ifdef HAVE_SOCK_ALLOC_FILE_3ARGS
-+	sock_filp = sock_alloc_file(sock, 0, NULL);
-+# else
-+	sock_filp = sock_alloc_file(sock, 0);
-+# endif
- #endif
--        if (fd < 0) {
--                rc = fd;
--                sock_release(sock);
--                goto out;
--        }
--
--        sock_filp = fget(fd);
-         if (!sock_filp) {
-                 rc = -ENOMEM;
--                goto out_fd;
-+                goto out;
-         }
- 
- 	set_fs(KERNEL_DS);
-@@ -83,9 +89,11 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
- 
-         fput(sock_filp);
- 
-- out_fd:
--        sys_close(fd);
-  out:
-+	if (fd >= 0)
-+		sys_close(fd);
-+	else
-+		sock_release(sock);
-         return rc;
- }
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 84%
rename from sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index 510b6d3..0ed0061 100644
--- a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From b36528aa2738f3ee4c9b26694502212619ee7283 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 10/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+From 8eb9c28b3ac9bcc05f00259301c9bd92e8451a55 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Wed, 15 May 2013 09:18:19 -0400
+Subject: [PATCH 3/4] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 
@@ -12,12 +12,13 @@ Date:   Wed Feb 27 17:06:00 2013 -0800
     hlist: drop the node parameter from iterators
 
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I8f38d562607de21771b03575e37cc0498867a570
 ---
  libcfs/include/libcfs/list.h           | 10 ++++++++++
- lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++++++++++
+ lustre/autoconf/lustre-core.m4         | 27 +++++++++++++++++++++++++++
  lustre/include/linux/lustre_compat25.h |  5 +++++
- 3 files changed, 41 insertions(+)
+ 3 files changed, 42 insertions(+)
 
 diff --git a/libcfs/include/libcfs/list.h b/libcfs/include/libcfs/list.h
 index be06e74..b747804 100644
@@ -49,11 +50,11 @@ index be06e74..b747804 100644
  #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
  #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 909fe8a..e460935 100644
+index 9ac1194..2cb4edd 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2293,6 +2293,29 @@ LB_LINUX_TRY_COMPILE([
- 
+@@ -1604,6 +1604,29 @@ LB_LINUX_TRY_COMPILE([
+ ])
  
  #
 +# 3.9 uses hlist_for_each_entry with 3 args
@@ -82,10 +83,11 @@ index 909fe8a..e460935 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2481,6 +2504,9 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 # 3.8
- 	 LC_HAVE_MM_VMTRUNCATE
+@@ -1740,6 +1763,10 @@ AC_DEFUN([LC_PROG_LINUX],
  
+ 	 # 3.7
+  	 LC_HAVE_POSIXACL_USER_NS
++
 +	 # 3.9
 +	 LC_HAVE_HLIST_FOR_EACH_3ARG
 +
@@ -93,10 +95,10 @@ index 909fe8a..e460935 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index 27139fb..da2b8c0 100644
+index 4e29e69..efb3fd1 100644
 --- a/lustre/include/linux/lustre_compat25.h
 +++ b/lustre/include/linux/lustre_compat25.h
-@@ -617,8 +617,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
+@@ -421,8 +421,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
  #define ll_d_hlist_empty(list) hlist_empty(list)
  #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
  #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)

diff --git a/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
deleted file mode 100644
index 04bac71..0000000
--- a/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ /dev/null
@@ -1,159 +0,0 @@
-From ceccbd0ba0715d45702d26f3a459435906b9dbf2 Mon Sep 17 00:00:00 2001
-From: Jeff Mahoney <jeffm@suse.com>
-Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 04/12] LU-2850 compat: posix_acl_{to,from}_xattr take
- user_namespace
-
-Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
-posix_acl_{to,from}_xattr. Pretty much every caller just uses
-&init_user_ns. We mask it off in user mode so we don't need to
-create a fake structure only to ignore it.
-
-Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-Change-Id: I558a06941b364f241fd4423720957beeaf1d3cea
----
- libcfs/include/libcfs/darwin/darwin-fs.h |  6 ++++--
- libcfs/include/libcfs/linux/linux-fs.h   | 10 ++++++++++
- lustre/autoconf/lustre-core.m4           | 21 +++++++++++++++++++++
- lustre/include/liblustre.h               |  4 ++++
- lustre/llite/xattr.c                     |  2 +-
- lustre/mdc/mdc_request.c                 |  3 ++-
- 6 files changed, 42 insertions(+), 4 deletions(-)
-
-diff --git a/libcfs/include/libcfs/darwin/darwin-fs.h b/libcfs/include/libcfs/darwin/darwin-fs.h
-index 998823b..9f71d6a 100644
---- a/libcfs/include/libcfs/darwin/darwin-fs.h
-+++ b/libcfs/include/libcfs/darwin/darwin-fs.h
-@@ -171,11 +171,13 @@ struct posix_acl {
- };
- 
- struct posix_acl *posix_acl_alloc(int count, int flags);
--static inline struct posix_acl *posix_acl_from_xattr(const void *value, 
-+static inline struct posix_acl *posix_acl_from_xattr(const void *value,
-                                                      size_t size)
--{ 
-+{
-         return posix_acl_alloc(0, 0);
- }
-+#define posix_acl_from_xattr(a,b,c) posix_acl_from_xattr(b,c)
-+
- static inline void posix_acl_release(struct posix_acl *acl) {};
- static inline int posix_acl_valid(const struct posix_acl *acl) { return 0; }
- static inline struct posix_acl * posix_acl_dup(struct posix_acl *acl) 
-diff --git a/libcfs/include/libcfs/linux/linux-fs.h b/libcfs/include/libcfs/linux/linux-fs.h
-index 53975ab..fa4e4d4 100644
---- a/libcfs/include/libcfs/linux/linux-fs.h
-+++ b/libcfs/include/libcfs/linux/linux-fs.h
-@@ -53,6 +53,7 @@
- #include <linux/stat.h>
- #include <linux/mount.h>
- #include <linux/backing-dev.h>
-+#include <linux/posix_acl_xattr.h>
- 
- #define filp_size(f)					\
- 	(i_size_read((f)->f_dentry->d_inode))
-@@ -102,4 +103,13 @@ ssize_t filp_user_write(struct file *filp, const void *buf, size_t count,
- #define DTTOIF(dirtype)		((dirtype) << IFSHIFT)
- #endif
- 
-+#ifndef HAVE_POSIXACL_USER_NS
-+/*
-+ * Mask out &init_user_ns so we don't jump
-+ * through hoops to define it somehow only
-+ * to have it ignored anyway.
-+ */
-+#define posix_acl_from_xattr(a,b,c)	posix_acl_from_xattr(b,c)
-+#define posix_acl_to_xattr(a,b,c,d)	posix_acl_to_xattr(b,c,d)
-+#endif
- #endif
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 1972e17..d0efbf4 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2234,6 +2234,25 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.7 posix_acl_{to,from}_xattr take struct user_namespace
-+#
-+AC_DEFUN([LC_HAVE_POSIXACL_USER_NS],
-+[AC_MSG_CHECKING([if posix_acl_to_xattr takes struct user_namespace])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+	#include <linux/posix_acl_xattr.h>
-+],[
-+	posix_acl_to_xattr((struct user_namespace *)NULL, NULL, NULL, 0);
-+],[
-+	AC_DEFINE(HAVE_POSIXACL_USER_NS, 1,
-+		  [posix_acl_to_xattr takes struct user_namespace])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2415,6 +2434,8 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_DENTRY_OPEN_USE_PATH
- 	 LC_HAVE_IOP_ATOMIC_OPEN
- 
-+	 # 3.7
-+ 	 LC_HAVE_POSIXACL_USER_NS
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index b93d805..ad88587 100644
---- a/lustre/include/liblustre.h
-+++ b/lustre/include/liblustre.h
-@@ -458,6 +458,10 @@ struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
-         return NULL;
- }
- 
-+/* The kernel version takes 3 arguments, so strip that off first. */
-+#define posix_acl_from_xattr(a,b,c)	posix_acl_from_xattr(b,c)
-+#define posix_acl_to_xattr(a,b,c)	posix_acl_to_xattr(b,c)
-+
- static inline
- int posix_acl_valid(const struct posix_acl *acl)
- {
-diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index 8772b74..a08c58a 100644
---- a/lustre/llite/xattr.c
-+++ b/lustre/llite/xattr.c
-@@ -345,7 +345,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
-                 if (!acl)
-                         RETURN(-ENODATA);
- 
--                rc = posix_acl_to_xattr(acl, buffer, size);
-+                rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
-                 posix_acl_release(acl);
-                 RETURN(rc);
-         }
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 3ea8996..5751460 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -41,6 +41,7 @@
- # include <linux/pagemap.h>
- # include <linux/miscdevice.h>
- # include <linux/init.h>
-+# include <linux/utsname.h>
- #else
- # include <liblustre.h>
- #endif
-@@ -470,7 +471,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
-         if (!buf)
-                 RETURN(-EPROTO);
- 
--        acl = posix_acl_from_xattr(buf, body->aclsize);
-+        acl = posix_acl_from_xattr(&init_user_ns, buf, body->aclsize);
-         if (IS_ERR(acl)) {
-                 rc = PTR_ERR(acl);
-                 CERROR("convert xattr to acl: %d\n", rc);
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
similarity index 82%
rename from sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
rename to sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index bfcb3da..2dd2223 100644
--- a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From f8a2f09093e0279f32eb7e79b6d014bbee8482d7 Mon Sep 17 00:00:00 2001
+From 58a8bf674096caabc6edc0c598f16a0b04c05ebf Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 11/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 4/4] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 
@@ -21,10 +21,10 @@ Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
  2 files changed, 27 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index e460935..0cc6ef4 100644
+index 2cb4edd..ba69c41 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2316,6 +2316,28 @@ LB_LINUX_TRY_COMPILE([
+@@ -1627,6 +1627,28 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -53,7 +53,7 @@ index e460935..0cc6ef4 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2506,6 +2528,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -1766,6 +1788,7 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.9
  	 LC_HAVE_HLIST_FOR_EACH_3ARG
@@ -62,10 +62,10 @@ index e460935..0cc6ef4 100644
  	 #
  	 if test x$enable_server = xyes ; then
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 878f645..f7f7938 100644
+index dd7f7df..e625200 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
-@@ -640,7 +640,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+@@ -629,7 +629,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
          }
  	filp->f_version = inode->i_version;
  #ifdef HAVE_TOUCH_ATIME_1ARG

diff --git a/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
deleted file mode 100644
index 9dfae36..0000000
--- a/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
+++ /dev/null
@@ -1,91 +0,0 @@
-From 9248d7b04b67f683ac2a04b35793790047b50ab7 Mon Sep 17 00:00:00 2001
-From: Jeff Mahoney <jeffm@suse.com>
-Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 05/12] LU-2800 llite: introduce local getname()
-
-Commit 8e377d15 (v3.7) unexported getname and putname. Although
-getname was re-exported, putname was not. All we really need is
-something to to allocate a buffer and copy it from userspace so
-let's just use our own version. The down size is that we lose
-the audit support in the original getname.
-
-Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-Change-Id: If44cd9f9d14f26f220d5f0c52e8b804a49d3cf92
----
- lustre/llite/dir.c | 32 ++++++++++++++++++++++++++++----
- 1 file changed, 28 insertions(+), 4 deletions(-)
-
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index a3086d0..878f645 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -1228,6 +1228,30 @@ out:
-         RETURN(rc);
- }
- 
-+static char *
-+ll_getname(const char __user *filename)
-+{
-+	int ret = 0, len;
-+	char *tmp = __getname();
-+
-+	if (!tmp)
-+		return ERR_PTR(-ENOMEM);
-+
-+	len = strncpy_from_user(tmp, filename, PATH_MAX);
-+	if (len == 0)
-+		ret = -ENOENT;
-+	else if (len > PATH_MAX)
-+		ret = -ENAMETOOLONG;
-+
-+	if (ret) {
-+		__putname(tmp);
-+		tmp =  ERR_PTR(ret);
-+	}
-+	return tmp;
-+}
-+
-+#define ll_putname(filename) __putname(filename)
-+
- static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
- {
-         struct inode *inode = file->f_dentry->d_inode;
-@@ -1430,7 +1454,7 @@ free_lmv:
- 		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
- 			return -ENOTSUPP;
- 
--		filename = getname((const char *)arg);
-+		filename = ll_getname((const char *)arg);
- 		if (IS_ERR(filename))
- 			RETURN(PTR_ERR(filename));
- 
-@@ -1441,7 +1465,7 @@ free_lmv:
- 		rc = ll_rmdir_entry(inode, filename, namelen);
- out_rmdir:
-                 if (filename)
--                        putname(filename);
-+                        ll_putname(filename);
- 		RETURN(rc);
- 	}
- 	case LL_IOC_LOV_SWAP_LAYOUTS:
-@@ -1461,7 +1485,7 @@ out_rmdir:
- 
-                 if (cmd == IOC_MDC_GETFILEINFO ||
-                     cmd == IOC_MDC_GETFILESTRIPE) {
--                        filename = getname((const char *)arg);
-+                        filename = ll_getname((const char *)arg);
-                         if (IS_ERR(filename))
-                                 RETURN(PTR_ERR(filename));
- 
-@@ -1528,7 +1552,7 @@ out_rmdir:
-         out_req:
-                 ptlrpc_req_finished(request);
-                 if (filename)
--                        putname(filename);
-+                        ll_putname(filename);
-                 return rc;
-         }
-         case IOC_LOV_GETINFO: {
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
deleted file mode 100644
index f55f693..0000000
--- a/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
+++ /dev/null
@@ -1,89 +0,0 @@
-From fe7ac0140ddb8fe5b8b046d857ed018ac9dc6335 Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 06/12] LU-2987 llite: rcu-free inode
-
-Since 2.6.38, inode.i_rcu was added and file system .destory_inode
-should rcu-free inodes.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
----
- lustre/autoconf/lustre-core.m4 | 21 +++++++++++++++++++++
- lustre/llite/super25.c         | 18 ++++++++++++++++--
- 2 files changed, 37 insertions(+), 2 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index d0efbf4..bd7ef11 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -1683,6 +1683,26 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 2.6.38 inode.i_rcu added.
-+#
-+AC_DEFUN([LC_INODE_I_RCU],
-+[AC_MSG_CHECKING([if inode.i_rcu exists])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct inode ino;
-+	struct rcu_head rcu = {};
-+	ino.i_rcu = rcu;
-+],[
-+	AC_DEFINE(HAVE_INODE_I_RCU, 1,
-+		[inode.i_rcu exists])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # 2.6.38 export blkdev_get_by_dev
- #
- AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
-@@ -2390,6 +2410,7 @@ AC_DEFUN([LC_PROG_LINUX],
-          LC_GENERIC_PERMISSION
-          LC_QUOTA_ON_USE_PATH
-          LC_DCACHE_LOCK
-+	 LC_INODE_I_RCU
-          LC_D_COMPARE_7ARGS
-          LC_D_DELETE_CONST
- 
-diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
-index 90949ff..0b9bdbc 100644
---- a/lustre/llite/super25.c
-+++ b/lustre/llite/super25.c
-@@ -61,11 +61,25 @@ static struct inode *ll_alloc_inode(struct super_block *sb)
-         return &lli->lli_vfs_inode;
- }
- 
-+#ifdef HAVE_INODE_I_RCU
-+static void ll_inode_destroy_callback(struct rcu_head *head)
-+{
-+	struct inode *inode = container_of(head, struct inode, i_rcu);
-+	struct ll_inode_info *ptr = ll_i2info(inode);
-+	OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
-+}
-+
-+static void ll_destroy_inode(struct inode *inode)
-+{
-+	call_rcu(&inode->i_rcu, ll_inode_destroy_callback);
-+}
-+#else
- static void ll_destroy_inode(struct inode *inode)
- {
--        struct ll_inode_info *ptr = ll_i2info(inode);
--        OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
-+	struct ll_inode_info *ptr = ll_i2info(inode);
-+	OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
- }
-+#endif
- 
- int ll_init_inodecache(void)
- {
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
deleted file mode 100644
index 4ce5b1f..0000000
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ /dev/null
@@ -1,83 +0,0 @@
-From 019311dd1ae9e97336748f016afd2581d8ecc213 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Wed, 17 Apr 2013 13:27:55 +0400
-Subject: [PATCH 07/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
-
-vmtruncate() is removed since upstream commit b9f61c3.
-We can open code is for llite though.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
----
- lustre/autoconf/lustre-core.m4 | 24 ++++++++++++++++++++++++
- lustre/llite/vvp_io.c          | 10 +++++++++-
- 2 files changed, 33 insertions(+), 1 deletion(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index bd7ef11..909fe8a 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2273,6 +2273,26 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.8 removes vmtruncate()
-+# see upstream commit b9f61c3
-+#
-+AC_DEFUN([LC_HAVE_MM_VMTRUNCATE],
-+[AC_MSG_CHECKING([if mm has vmtruncate])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/mm.h>
-+],[
-+	vmtruncate(NULL, 0);
-+],[
-+	AC_DEFINE(HAVE_MM_VMTRUNCATE, 1,
-+		[vmtruncate is defined by the kernel])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2457,6 +2477,10 @@ AC_DEFUN([LC_PROG_LINUX],
- 
- 	 # 3.7
-  	 LC_HAVE_POSIXACL_USER_NS
-+
-+	 # 3.8
-+	 LC_HAVE_MM_VMTRUNCATE
-+
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index 3a64517..59a3bd8 100644
---- a/lustre/llite/vvp_io.c
-+++ b/lustre/llite/vvp_io.c
-@@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
- 	 * Only ll_inode_size_lock is taken at this level.
- 	 */
- 	ll_inode_size_lock(inode);
-+#ifdef HAVE_MM_VMTRUNCATE
- 	result = vmtruncate(inode, size);
-+#else
-+	result = inode_newsize_ok(inode, size);
-+	if (result < 0) {
-+		ll_inode_size_unlock(inode);
-+		return result;
-+	}
-+	truncate_setsize(inode, size);
-+#endif
- 	ll_inode_size_unlock(inode);
--
- 	return result;
- }
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
deleted file mode 100644
index 3094ef4..0000000
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ /dev/null
@@ -1,3005 +0,0 @@
-From 3440a08d1e950bddff32304ea1ba919d63ae47be Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 23 Apr 2013 10:18:04 -0400
-Subject: [PATCH 08/12] LU-2850 kernel: 3.8 upstream kills daemonize()
-
-kernel_thread() is a low level kernel function.
-Instead of calling kernel_thread() and relying on daemonize()
-to create new kernel threads, we should really switch to
-kthread_run() and elimilate daemonize().
-
-Conflicts:
-	lustre/mdd/mdd_lfsck.c
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
----
- libcfs/autoconf/lustre-libcfs.m4           | 28 -----------
- libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
- libcfs/include/libcfs/libcfs.h             | 13 +----
- libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
- libcfs/include/libcfs/posix/libcfs.h       |  1 +
- libcfs/include/libcfs/user-prim.h          |  5 +-
- libcfs/include/libcfs/winnt/winnt-prim.h   |  4 --
- libcfs/libcfs/Makefile.in                  |  4 +-
- libcfs/libcfs/darwin/darwin-prim.c         | 39 +++++++-------
- libcfs/libcfs/darwin/darwin-utils.c        |  2 +-
- libcfs/libcfs/debug.c                      | 20 ++++----
- libcfs/libcfs/linux/Makefile.am            |  2 +-
- libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
- libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
- libcfs/libcfs/tracefile.c                  | 15 +++---
- libcfs/libcfs/user-prim.c                  | 38 +++++++-------
- libcfs/libcfs/watchdog.c                   | 25 ++++-----
- libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
- libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
- libcfs/libcfs/workitem.c                   | 26 +++++-----
- lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
- lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
- lnet/klnds/gnilnd/gnilnd_stack.c           |  2 -
- lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
- lnet/klnds/mxlnd/mxlnd_cb.c                | 11 ----
- lnet/klnds/o2iblnd/o2iblnd.c               | 13 +++--
- lnet/klnds/o2iblnd/o2iblnd.h               |  2 +-
- lnet/klnds/o2iblnd/o2iblnd_cb.c            | 23 +++------
- lnet/klnds/ptllnd/ptllnd.c                 |  5 +-
- lnet/klnds/ptllnd/ptllnd_cb.c              | 25 ++++-----
- lnet/klnds/qswlnd/qswlnd.c                 |  3 +-
- lnet/klnds/qswlnd/qswlnd_cb.c              | 13 +++--
- lnet/klnds/ralnd/ralnd.c                   | 10 ++--
- lnet/klnds/ralnd/ralnd.h                   |  2 +-
- lnet/klnds/ralnd/ralnd_cb.c                | 19 ++-----
- lnet/klnds/socklnd/socklnd.c               | 19 +++++--
- lnet/klnds/socklnd/socklnd.h               |  2 +-
- lnet/klnds/socklnd/socklnd_cb.c            | 30 ++++-------
- lnet/lnet/acceptor.c                       | 11 ++--
- lnet/lnet/module.c                         | 10 ++--
- lnet/lnet/router.c                         | 20 ++++----
- lnet/selftest/timer.c                      | 11 ++--
- lnet/ulnds/socklnd/usocklnd.c              | 17 ++++---
- lustre/ldlm/ldlm_lib.c                     | 31 +++++-------
- lustre/ldlm/ldlm_lockd.c                   | 41 +++++++--------
- lustre/ldlm/ldlm_pool.c                    | 53 +++++++++----------
- lustre/llite/llite_capa.c                  | 25 +++++----
- lustre/llite/llite_close.c                 | 26 ++++------
- lustre/llite/lloop.c                       | 10 ++--
- lustre/llite/statahead.c                   | 61 +++++++++++-----------
- lustre/mdc/mdc_request.c                   | 34 ++++++-------
- lustre/mdd/mdd_lfsck.c                     |  7 ++-
- lustre/mdt/mdt_capa.c                      | 26 +++++-----
- lustre/mgc/mgc_request.c                   | 31 ++++++------
- lustre/mgs/mgs_nids.c                      | 13 ++---
- lustre/obdclass/genops.c                   | 22 +++-----
- lustre/obdclass/llog.c                     |  8 +--
- lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
- lustre/osp/osp_precreate.c                 | 15 +++---
- lustre/osp/osp_sync.c                      |  9 ++--
- lustre/ptlrpc/import.c                     | 34 +++++++------
- lustre/ptlrpc/pinger.c                     | 39 +++++++-------
- lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
- lustre/ptlrpc/sec_gc.c                     | 12 ++---
- lustre/ptlrpc/service.c                    | 25 +++++----
- lustre/quota/qmt_lock.c                    | 17 +++----
- lustre/quota/qsd_reint.c                   |  6 +--
- lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 516 insertions(+), 760 deletions(-)
- delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 4545a7a..0f53b9a 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -638,15 +638,6 @@ LB_LINUX_TRY_COMPILE([
- ])
- ])
- 
--AC_DEFUN([LIBCFS_HAVE_OOM_H],
--[LB_CHECK_FILE([$LINUX/include/linux/oom.h], [
--        AC_DEFINE(HAVE_LINUX_OOM_H, 1,
--                [kernel has include/oom.h])
--],[
--        AC_MSG_RESULT([no])
--])
--])
--
- AC_DEFUN([LIBCFS_HAVE_KEYTYPE_H],
- [LB_CHECK_FILE([$LINUX/include/linux/key-type.h], [
-         AC_DEFINE(HAVE_LINUX_KEYTYPE_H, 1,
-@@ -696,23 +687,6 @@ LB_LINUX_TRY_COMPILE([
- ])
- ])
- 
--# 2.6.18 store oom parameters in task struct.
--# 2.6.32 store oom parameters in signal struct
--AC_DEFUN([LIBCFS_OOMADJ_IN_SIG],
--[AC_MSG_CHECKING([kernel store oom parameters in task])
--LB_LINUX_TRY_COMPILE([
--        #include <linux/sched.h>
--],[
--        ((struct signal_struct *)0)->oom_adj = 0;
--],[
--        AC_MSG_RESULT(yes)
--        AC_DEFINE(HAVE_OOMADJ_IN_SIG, 1,
--                  [kernel store a oom parameters in signal struct])
--],[
--        AC_MSG_RESULT(no)
--])
--])
--
- #
- # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
- #
-@@ -865,8 +839,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
- # 2.6.32
- LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
- LC_SHRINKER_WANT_SHRINK_PTR
--LIBCFS_HAVE_OOM_H
--LIBCFS_OOMADJ_IN_SIG
- # 2.6.33
- LIBCFS_SYSCTL_CTLNAME
- # 2.6.34
-diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
-index 7bc7af3..583e257 100644
---- a/libcfs/include/libcfs/darwin/darwin-prim.h
-+++ b/libcfs/include/libcfs/darwin/darwin-prim.h
-@@ -202,10 +202,8 @@ extern task_t	kernel_task;
- 
- #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
- 
--#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
--
--extern int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flag);
--
-+extern cfs_task_t kthread_run(cfs_thread_t func, void *arg,
-+			      const char namefmt[], ...);
- 
- /*
-  * Wait Queue implementation
-diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h
-index 2375ed9..34c36a3 100644
---- a/libcfs/include/libcfs/libcfs.h
-+++ b/libcfs/include/libcfs/libcfs.h
-@@ -226,8 +226,7 @@ void cfs_enter_debugger(void);
- /*
-  * Defined by platform
-  */
--void cfs_daemonize(char *str);
--int cfs_daemonize_ctxt(char *str);
-+int unshare_fs_struct(void);
- cfs_sigset_t cfs_get_blocked_sigs(void);
- cfs_sigset_t cfs_block_allsigs(void);
- cfs_sigset_t cfs_block_sigs(unsigned long sigs);
-@@ -236,16 +235,6 @@ void cfs_restore_sigs(cfs_sigset_t);
- int cfs_signal_pending(void);
- void cfs_clear_sigpending(void);
- 
--/*
-- * XXX Liang:
-- * these macros should be removed in the future,
-- * we keep them just for keeping libcfs compatible
-- * with other branches.
-- */
--#define libcfs_daemonize(s)     cfs_daemonize(s)
--#define cfs_sigmask_lock(f)     do { f= 0; } while (0)
--#define cfs_sigmask_unlock(f)   do { f= 0; } while (0)
--
- int convert_server_error(__u64 ecode);
- int convert_client_oflag(int cflag, int *result);
- 
-diff --git a/libcfs/include/libcfs/linux/linux-prim.h b/libcfs/include/libcfs/linux/linux-prim.h
-index 1aeb5aa..31298e1 100644
---- a/libcfs/include/libcfs/linux/linux-prim.h
-+++ b/libcfs/include/libcfs/linux/linux-prim.h
-@@ -183,15 +183,6 @@ typedef long                            cfs_task_state_t;
- 
- #define CFS_DECL_WAITQ(wq)		DECLARE_WAIT_QUEUE_HEAD(wq)
- 
--#define cfs_kthread_run(fn, data, fmt, arg...) kthread_run(fn, data, fmt, ##arg)
--
--/* Kernel thread */
--typedef int (*cfs_thread_t)(void *);
--
--#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
--extern int cfs_create_thread(int (*fn)(void *),
--                             void *arg, unsigned long flags);
--
- /*
-  * Task struct
-  */
-diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 64cfbc7..305b74b 100644
---- a/libcfs/include/libcfs/posix/libcfs.h
-+++ b/libcfs/include/libcfs/posix/libcfs.h
-@@ -110,6 +110,7 @@
- typedef unsigned long long cfs_cycles_t;
- 
- #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L)
-+#define IS_ERR_VALUE(a) (IS_ERR(a))
- #define PTR_ERR(a) ((long)(a))
- #define ERR_PTR(a) ((void*)((long)(a)))
- 
-diff --git a/libcfs/include/libcfs/user-prim.h b/libcfs/include/libcfs/user-prim.h
-index 85253d8..c4e806c 100644
---- a/libcfs/include/libcfs/user-prim.h
-+++ b/libcfs/include/libcfs/user-prim.h
-@@ -157,9 +157,10 @@ static inline int cfs_psdev_deregister(cfs_psdev_t *foo)
- 
- #ifdef HAVE_LIBPTHREAD
- typedef int (*cfs_thread_t)(void *);
--int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags);
-+void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...);
- #else
--#define cfs_create_thread(l,m) LBUG()
-+/* Fine, crash, but stop giving me compile warnings */
-+#define kthread_run(f, a, n, ...) LBUG()
- #endif
- 
- uid_t cfs_curproc_uid(void);
-diff --git a/libcfs/include/libcfs/winnt/winnt-prim.h b/libcfs/include/libcfs/winnt/winnt-prim.h
-index 985af01..e234bba 100644
---- a/libcfs/include/libcfs/winnt/winnt-prim.h
-+++ b/libcfs/include/libcfs/winnt/winnt-prim.h
-@@ -442,8 +442,6 @@ typedef struct _cfs_thread_context {
-     void *              arg;
- } cfs_thread_context_t;
- 
--int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
--
- /*
-  * thread creation flags from Linux, not used in winnt
-  */
-@@ -461,8 +459,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
- 
- #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
- 
--#define CFS_DAEMON_FLAGS (CLONE_VM|CLONE_FILES)
--
- /*
-  * group_info: linux/sched.h
-  */
-diff --git a/libcfs/libcfs/Makefile.in b/libcfs/libcfs/Makefile.in
-index 71852cc..ddfadde 100644
---- a/libcfs/libcfs/Makefile.in
-+++ b/libcfs/libcfs/Makefile.in
-@@ -3,7 +3,7 @@ MODULES = libcfs
- libcfs-linux-objs := linux-tracefile.o linux-debug.o
- libcfs-linux-objs += linux-prim.o linux-mem.o linux-cpu.o
- libcfs-linux-objs += linux-fs.o linux-sync.o linux-tcpip.o
--libcfs-linux-objs += linux-lwt.o linux-proc.o linux-curproc.o
-+libcfs-linux-objs += linux-proc.o linux-curproc.o
- libcfs-linux-objs += linux-utils.o linux-module.o
- libcfs-linux-objs += linux-crypto.o linux-crypto-crc32.o
- libcfs-linux-objs += linux-crypto-adler.o
-@@ -29,7 +29,7 @@ sources:
- 
- libcfs-linux-objs := $(addprefix linux/,$(libcfs-linux-objs))
- 
--libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \
-+libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \
- 		   watchdog.o libcfs_string.o hash.o kernel_user_comm.o \
- 		   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
- 		   libcfs_mem.o libcfs_lock.o heap.o
-diff --git a/libcfs/libcfs/darwin/darwin-prim.c b/libcfs/libcfs/darwin/darwin-prim.c
-index 68d1c0d..8e0901f 100644
---- a/libcfs/libcfs/darwin/darwin-prim.c
-+++ b/libcfs/libcfs/darwin/darwin-prim.c
-@@ -333,24 +333,29 @@ cfs_thread_agent (void)
- 
- extern thread_t kernel_thread(task_t task, void (*start)(void));
- 
--int
--cfs_create_thread(cfs_thread_t  func, void *arg, unsigned long flag)
--{
--        int ret = 0;
--        thread_t th = NULL;
--
--        thread_arg_hold(&cfs_thread_arg, func, arg);
--        th = kernel_thread(kernel_task, cfs_thread_agent);
--        thread_arg_release(&cfs_thread_arg);
--        if (th == THREAD_NULL)
-+cfs_task_t
-+kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
-+{
-+	int ret = 0;
-+	thread_t th = NULL;
-+
-+	thread_arg_hold(&cfs_thread_arg, func, arg);
-+	th = kernel_thread(kernel_task, cfs_thread_agent);
-+	thread_arg_release(&cfs_thread_arg);
-+	if (th != THREAD_NULL) {
-+		/*
-+		 * FIXME: change child thread name...
-+		 * cfs_curproc_comm() is already broken. So it is left as is...
-+		va_list args;
-+		va_start(args, namefmt);
-+		snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX,
-+			 namefmt, args);
-+		va_end(args);
-+		 */
-+	} else {
-                 ret = -1;
--        return ret;
--}
--
--void cfs_daemonize(char *str)
--{
--        snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX, "%s", str);
--        return;
-+	}
-+	return (cfs_task_t)((long)ret);
- }
- 
- /*
-diff --git a/libcfs/libcfs/darwin/darwin-utils.c b/libcfs/libcfs/darwin/darwin-utils.c
-index c66f8e8..909b586 100644
---- a/libcfs/libcfs/darwin/darwin-utils.c
-+++ b/libcfs/libcfs/darwin/darwin-utils.c
-@@ -531,7 +531,7 @@ static int is_last_frame(void *addr)
- 		return 1;
- 	else if (is_addr_in_range(addr, trap, syscall_trace))
- 		return 1;
--	else if (is_addr_in_range(addr, cfs_thread_agent, cfs_create_thread))
-+	else if (is_addr_in_range(addr, cfs_thread_agent, kthread_run))
- 		return 1;
- 	else
- 		return 0;
-diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c
-index f503781..16a8e99 100644
---- a/libcfs/libcfs/debug.c
-+++ b/libcfs/libcfs/debug.c
-@@ -367,16 +367,16 @@ void libcfs_debug_dumplog(void)
-         /* we're being careful to ensure that the kernel thread is
-          * able to set our state to running as it exits before we
-          * get to schedule() */
--        cfs_waitlink_init(&wait);
--        cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
--        cfs_waitq_add(&debug_ctlwq, &wait);
--
--        dumper = cfs_kthread_run(libcfs_debug_dumplog_thread,
--                                 (void*)(long)cfs_curproc_pid(),
--                                 "libcfs_debug_dumper");
--        if (IS_ERR(dumper))
--                printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
--                       " %ld\n", PTR_ERR(dumper));
-+	cfs_waitlink_init(&wait);
-+	cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
-+	cfs_waitq_add(&debug_ctlwq, &wait);
-+
-+	dumper = kthread_run(libcfs_debug_dumplog_thread,
-+			     (void *)(long)cfs_curproc_pid(),
-+			     "libcfs_debug_dumper");
-+	if (IS_ERR(dumper))
-+		printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
-+		       " %ld\n", PTR_ERR(dumper));
-         else
-                 cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
- 
-diff --git a/libcfs/libcfs/linux/Makefile.am b/libcfs/libcfs/linux/Makefile.am
-index bb75462..3c0209f 100644
---- a/libcfs/libcfs/linux/Makefile.am
-+++ b/libcfs/libcfs/linux/Makefile.am
-@@ -1,4 +1,4 @@
--EXTRA_DIST = linux-debug.c linux-lwt.c linux-prim.c linux-tracefile.c	\
-+EXTRA_DIST = linux-debug.c linux-prim.c linux-tracefile.c	\
- 	linux-fs.c linux-mem.c linux-proc.c linux-utils.c linux-lock.c	\
- 	linux-module.c linux-sync.c linux-curproc.c linux-tcpip.c	\
- 	linux-cpu.c linux-crypto.c linux-crypto-crc32.c linux-crypto-adler.c \
-diff --git a/libcfs/libcfs/linux/linux-lwt.c b/libcfs/libcfs/linux/linux-lwt.c
-deleted file mode 100644
-index d9d4dc1..0000000
---- a/libcfs/libcfs/linux/linux-lwt.c
-+++ /dev/null
-@@ -1,81 +0,0 @@
--/*
-- * GPL HEADER START
-- *
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 only,
-- * as published by the Free Software Foundation.
-- *
-- * 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 version 2 for more details (a copy is included
-- * in the LICENSE file that accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License
-- * version 2 along with this program; If not, see
-- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
-- *
-- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-- * CA 95054 USA or visit www.sun.com if you need additional information or
-- * have any questions.
-- *
-- * GPL HEADER END
-- */
--/*
-- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
-- * Use is subject to license terms.
-- *
-- * Copyright (c) 2012, Intel Corporation.
-- */
--/*
-- * This file is part of Lustre, http://www.lustre.org/
-- * Lustre is a trademark of Sun Microsystems, Inc.
-- */
--
--# define DEBUG_SUBSYSTEM S_LNET
--#include <linux/module.h>
--#include <linux/sched.h>
--#include <linux/spinlock.h>
--
--#ifdef HAVE_LINUX_OOM_H
--#include <linux/oom.h>
--#else
--#include <linux/mm.h>
--#endif
--
--int oom_get_adj(struct task_struct *task, int scope)
--{
--	int oom_adj;
--#ifdef HAVE_OOMADJ_IN_SIG
--	unsigned long flags;
--
--	spin_lock_irqsave(&task->sighand->siglock, flags);
--	oom_adj = task->signal->oom_adj;
--	task->signal->oom_adj = scope;
--	spin_unlock_irqrestore(&task->sighand->siglock, flags);
--
--#else
--	oom_adj = task->oomkilladj;
--	task->oomkilladj = scope;
--#endif
--	return oom_adj;
--}
--
--int cfs_create_thread(int (*fn)(void *),
--                      void *arg, unsigned long flags)
--{
--        void *orig_info = current->journal_info;
--        int rc;
--        int old_oom;
--
--        old_oom = oom_get_adj(current, OOM_DISABLE);
--        current->journal_info = NULL;
--        rc = kernel_thread(fn, arg, flags);
--        current->journal_info = orig_info;
--        oom_get_adj(current, old_oom);
--
--        return rc;
--}
--EXPORT_SYMBOL(cfs_create_thread);
-diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index 43b172e..9e2de0e 100644
---- a/libcfs/libcfs/linux/linux-prim.c
-+++ b/libcfs/libcfs/linux/linux-prim.c
-@@ -259,34 +259,20 @@ void cfs_enter_debugger(void)
- #endif
- }
- 
--void cfs_daemonize(char *str) {
--        unsigned long flags;
--
--        daemonize(str);
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--}
--
--int cfs_daemonize_ctxt(char *str) {
--
--        cfs_daemonize(str);
- #ifndef HAVE_UNSHARE_FS_STRUCT
--        {
--        struct task_struct *tsk = current;
--        struct fs_struct *fs = NULL;
--        fs = copy_fs_struct(tsk->fs);
--        if (fs == NULL)
--                return -ENOMEM;
--        exit_fs(tsk);
--        tsk->fs = fs;
--        }
--#else
--        unshare_fs_struct();
-+int unshare_fs_struct(void)
-+{
-+	struct task_struct *tsk = current;
-+	struct fs_struct *fs = NULL;
-+	fs = copy_fs_struct(tsk->fs);
-+	if (fs == NULL)
-+		return -ENOMEM;
-+	exit_fs(tsk);
-+	tsk->fs = fs;
-+	return 0;
-+}
-+EXPORT_SYMBOL(unshare_fs_struct);
- #endif
--        return 0;
--}
- 
- sigset_t
- cfs_block_allsigs(void)
-@@ -373,8 +359,6 @@ libcfs_arch_cleanup(void)
- EXPORT_SYMBOL(libcfs_arch_init);
- EXPORT_SYMBOL(libcfs_arch_cleanup);
- EXPORT_SYMBOL(cfs_enter_debugger);
--EXPORT_SYMBOL(cfs_daemonize);
--EXPORT_SYMBOL(cfs_daemonize_ctxt);
- EXPORT_SYMBOL(cfs_block_allsigs);
- EXPORT_SYMBOL(cfs_block_sigs);
- EXPORT_SYMBOL(cfs_block_sigsinv);
-diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
-index 916bdc9..2049908 100644
---- a/libcfs/libcfs/tracefile.c
-+++ b/libcfs/libcfs/tracefile.c
-@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
- 
- 	/* we're started late enough that we pick up init's fs context */
- 	/* this is so broken in uml?  what on earth is going on? */
--	cfs_daemonize("ktracefiled");
- 
- 	spin_lock_init(&pc.pc_lock);
- 	complete(&tctl->tctl_start);
-@@ -1106,16 +1105,16 @@ int cfs_trace_start_thread(void)
- 
- 	init_completion(&tctl->tctl_start);
- 	init_completion(&tctl->tctl_stop);
--        cfs_waitq_init(&tctl->tctl_waitq);
--        cfs_atomic_set(&tctl->tctl_shutdown, 0);
-+	cfs_waitq_init(&tctl->tctl_waitq);
-+	cfs_atomic_set(&tctl->tctl_shutdown, 0);
- 
--        if (cfs_create_thread(tracefiled, tctl, 0) < 0) {
--                rc = -ECHILD;
--                goto out;
--        }
-+	if (IS_ERR(kthread_run(tracefiled, tctl, "ktracefiled"))) {
-+		rc = -ECHILD;
-+		goto out;
-+	}
- 
- 	wait_for_completion(&tctl->tctl_start);
--        thread_running = 1;
-+	thread_running = 1;
- out:
- 	mutex_unlock(&cfs_trace_thread_mutex);
-         return rc;
-diff --git a/libcfs/libcfs/user-prim.c b/libcfs/libcfs/user-prim.c
-index eb21418..9f2b7b3 100644
---- a/libcfs/libcfs/user-prim.c
-+++ b/libcfs/libcfs/user-prim.c
-@@ -223,24 +223,25 @@ static void *cfs_thread_helper(void *data)
-         return NULL;
- }
- 
--int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags)
-+void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
- {
--        pthread_t tid;
--        pthread_attr_t tattr;
--        int rc;
--        struct lustre_thread_arg *targ_p = malloc(sizeof(struct lustre_thread_arg));
-+	pthread_t tid;
-+	pthread_attr_t tattr;
-+	int rc;
-+	struct lustre_thread_arg *targ_p =
-+				malloc(sizeof(struct lustre_thread_arg));
- 
--        if ( targ_p == NULL )
--                return -ENOMEM;
-+	if (targ_p == NULL)
-+		return ERR_PTR(-ENOMEM);
- 
--        targ_p->f = func;
--        targ_p->arg = arg;
-+	targ_p->f = func;
-+	targ_p->arg = arg;
- 
--        pthread_attr_init(&tattr);
--        pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
--        rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
--        pthread_attr_destroy(&tattr);
--        return -rc;
-+	pthread_attr_init(&tattr);
-+	pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
-+	rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
-+	pthread_attr_destroy(&tattr);
-+	return ERR_PTR(rc);
- }
- #endif
- 
-@@ -314,14 +315,9 @@ void cfs_enter_debugger(void)
-          */
- }
- 
--void cfs_daemonize(char *str)
-+int unshare_fs_struct()
- {
--        return;
--}
--
--int cfs_daemonize_ctxt(char *str)
--{
--        return 0;
-+	return 0;
- }
- 
- cfs_sigset_t cfs_block_allsigs(void)
-diff --git a/libcfs/libcfs/watchdog.c b/libcfs/libcfs/watchdog.c
-index e08fe68..0981a2c 100644
---- a/libcfs/libcfs/watchdog.c
-+++ b/libcfs/libcfs/watchdog.c
-@@ -213,19 +213,11 @@ static void lcw_dump_stack(struct lc_watchdog *lcw)
- static int lcw_dispatch_main(void *data)
- {
-         int                 rc = 0;
--        unsigned long       flags;
-         struct lc_watchdog *lcw;
-         CFS_LIST_HEAD      (zombies);
- 
-         ENTRY;
- 
--        cfs_daemonize("lc_watchdogd");
--
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--
- 	complete(&lcw_start_completion);
- 
-         while (1) {
-@@ -312,7 +304,7 @@ static int lcw_dispatch_main(void *data)
- 
- static void lcw_dispatch_start(void)
- {
--	int rc;
-+	cfs_task_t *task;
- 
- 	ENTRY;
- 	LASSERT(lcw_refcount == 1);
-@@ -321,13 +313,14 @@ static void lcw_dispatch_start(void)
- 	init_completion(&lcw_start_completion);
-         cfs_waitq_init(&lcw_event_waitq);
- 
--        CDEBUG(D_INFO, "starting dispatch thread\n");
--        rc = cfs_create_thread(lcw_dispatch_main, NULL, 0);
--        if (rc < 0) {
--                CERROR("error spawning watchdog dispatch thread: %d\n", rc);
--                EXIT;
--                return;
--        }
-+	CDEBUG(D_INFO, "starting dispatch thread\n");
-+	task = kthread_run(lcw_dispatch_main, NULL, "lc_watchdogd");
-+	if (IS_ERR(task)) {
-+		CERROR("error spawning watchdog dispatch thread: %ld\n",
-+			PTR_ERR(task));
-+		EXIT;
-+		return;
-+	}
- 	wait_for_completion(&lcw_start_completion);
- 	CDEBUG(D_INFO, "watchdog dispatcher initialization complete.\n");
- 
-diff --git a/libcfs/libcfs/winnt/winnt-prim.c b/libcfs/libcfs/winnt/winnt-prim.c
-index 8596a40..1d04567 100644
---- a/libcfs/libcfs/winnt/winnt-prim.c
-+++ b/libcfs/libcfs/winnt/winnt-prim.c
-@@ -82,22 +82,22 @@ cfs_thread_proc(
- }
- 
- /*
-- * cfs_create_thread
-+ * kthread_run
-  *   Create a system thread to execute the routine specified
-  *
-  * Arguments:
-  *   func:  function to be executed in the thread
-  *   arg:   argument transferred to func function
-- *   flag:  thread creation flags.
-+ *   name:  thread name to create
-  *
-  * Return Value:
-- *   int:   0 on success or error codes
-+ *   cfs_task_t:   0 on success or error codes
-  *
-  * Notes:
-  *   N/A
-  */
- 
--int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
-+cfs_task_t kthread_run(int (*func)(void *), void *arg, char *name)
- {
-     cfs_handle_t  thread = NULL;
-     NTSTATUS      status;
-@@ -108,7 +108,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
-     context = cfs_alloc(sizeof(cfs_thread_context_t), CFS_ALLOC_ZERO);
- 
-     if (!context) {
--        return -ENOMEM;
-+	return ERR_PTR(-ENOMEM);
-     }
- 
-     context->func  = func;
-@@ -130,7 +130,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
- 
-         /* We need translate the nt status to linux error code */
- 
--        return cfs_error_code(status);
-+	return ERR_PTR(cfs_error_code(status));
-     }
- 
-     //
-@@ -139,7 +139,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
- 
-     ZwClose(thread);
- 
--    return 0;
-+	return (cfs_task_t)0;
- }
- 
- 
-@@ -529,18 +529,9 @@ cfs_time_t cfs_timer_deadline(cfs_timer_t * timer)
-     return timer->deadline;
- }
- 
--/*
-- * daemonize routine stub
-- */
--
--void cfs_daemonize(char *str)
-+int unshare_fs_struct()
- {
--    return;
--}
--
--int cfs_daemonize_ctxt(char *str) {
--    cfs_daemonize(str);
--    return 0;
-+	return 0;
- }
- 
- /*
-diff --git a/libcfs/libcfs/winnt/winnt-tcpip.c b/libcfs/libcfs/winnt/winnt-tcpip.c
-index 6fbf0a5..50d784f 100644
---- a/libcfs/libcfs/winnt/winnt-tcpip.c
-+++ b/libcfs/libcfs/winnt/winnt-tcpip.c
-@@ -5898,10 +5898,10 @@ ks_init_tdi_data()
-     }
-     for (i = 0; i < ks_data.ksnd_engine_nums; i++) {
- 		spin_lock_init(&ks_data.ksnd_engine_mgr[i].lock);
--        cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
--        cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
--        CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
--        cfs_create_thread(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], 0);
-+	cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
-+	cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
-+	CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
-+	kthread_run(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], "");
-     }
- 
-     /* register pnp handlers to watch network condition */
-diff --git a/libcfs/libcfs/workitem.c b/libcfs/libcfs/workitem.c
-index db839e5..309cfec 100644
---- a/libcfs/libcfs/workitem.c
-+++ b/libcfs/libcfs/workitem.c
-@@ -245,17 +245,7 @@ static int
- cfs_wi_scheduler (void *arg)
- {
- 	struct cfs_wi_sched	*sched = (cfs_wi_sched_t *)arg;
--	char			name[16];
--
--	if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
--		snprintf(name, sizeof(name), "%s_%02d_%02d",
--			 sched->ws_name, sched->ws_cpt, sched->ws_nthreads);
--	} else {
--		snprintf(name, sizeof(name), "%s_%02d",
--			 sched->ws_name, sched->ws_nthreads);
--	}
- 
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* CPT affinity scheduler? */
-@@ -463,6 +453,8 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
- 	rc = 0;
- #ifdef __KERNEL__
- 	while (nthrs > 0)  {
-+		char	name[16];
-+		cfs_task_t	*task;
- 		spin_lock(&cfs_wi_data.wi_glock);
- 		while (sched->ws_starting > 0) {
- 			spin_unlock(&cfs_wi_data.wi_glock);
-@@ -473,11 +465,21 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
- 		sched->ws_starting++;
- 		spin_unlock(&cfs_wi_data.wi_glock);
- 
--		rc = cfs_create_thread(cfs_wi_scheduler, sched, 0);
--		if (rc >= 0) {
-+		if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
-+			snprintf(name, sizeof(name), "%s_%02d_%02d",
-+				 sched->ws_name, sched->ws_cpt,
-+				 sched->ws_nthreads);
-+		} else {
-+			snprintf(name, sizeof(name), "%s_%02d",
-+				 sched->ws_name, sched->ws_nthreads);
-+		}
-+
-+		task = kthread_run(cfs_wi_scheduler, sched, name);
-+		if (!IS_ERR(task)) {
- 			nthrs--;
- 			continue;
- 		}
-+		rc = PTR_ERR(task);
- 
- 		CERROR("Failed to create thread for WI scheduler %s: %d\n",
- 		       name, rc);
-diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
-index 381aa64..3c0f472 100644
---- a/lnet/klnds/gnilnd/gnilnd_cb.c
-+++ b/lnet/klnds/gnilnd/gnilnd_cb.c
-@@ -2946,7 +2946,6 @@ kgnilnd_reaper(void *arg)
- 	struct timer_list  timer;
- 	DEFINE_WAIT(wait);
- 
--	cfs_daemonize("kgnilnd_rpr");
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-@@ -4850,15 +4849,12 @@ kgnilnd_scheduler(void *arg)
- {
- 	int               threadno = (long)arg;
- 	kgn_device_t		*dev;
--	char			name[16];
- 	int			busy_loops = 0;
- 	unsigned long	  deadline = 0;
- 	DEFINE_WAIT(wait);
- 
- 	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
- 
--	snprintf(name, sizeof(name), "kgnilnd_sd_%02d", threadno);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-diff --git a/lnet/klnds/gnilnd/gnilnd_conn.c b/lnet/klnds/gnilnd/gnilnd_conn.c
-index 39716b8..a513ccd 100644
---- a/lnet/klnds/gnilnd/gnilnd_conn.c
-+++ b/lnet/klnds/gnilnd/gnilnd_conn.c
-@@ -2167,13 +2167,10 @@ int
- kgnilnd_dgram_waitq(void *arg)
- {
- 	kgn_device_t     *dev = (kgn_device_t *) arg;
--	char              name[16];
- 	gni_return_t      grc;
- 	__u64             readyid;
- 	DEFINE_WAIT(mover_done);
- 
--	snprintf(name, sizeof(name), "kgnilnd_dgn_%02d", dev->gnd_id);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-@@ -2345,7 +2342,6 @@ int
- kgnilnd_dgram_mover(void *arg)
- {
- 	kgn_device_t            *dev = (kgn_device_t *)arg;
--	char                     name[16];
- 	int                      rc, did_something;
- 	unsigned long            next_purge_check = jiffies - 1;
- 	unsigned long            timeout;
-@@ -2353,8 +2349,6 @@ kgnilnd_dgram_mover(void *arg)
- 	unsigned long		 deadline = 0;
- 	DEFINE_WAIT(wait);
- 
--	snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 	/* all gnilnd threads need to run fairly urgently */
- 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
-diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
-index 0dec950..6b93025 100644
---- a/lnet/klnds/gnilnd/gnilnd_stack.c
-+++ b/lnet/klnds/gnilnd/gnilnd_stack.c
-@@ -366,7 +366,6 @@ kgnilnd_ruhroh_thread(void *arg)
- 	int                i = 1;
- 	DEFINE_WAIT(wait);
- 
--	cfs_daemonize("kgnilnd_rr");
- 	cfs_block_allsigs();
- 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
- 	kgnilnd_data.kgn_ruhroh_running = 1;
-@@ -592,7 +591,6 @@ kgnilnd_rca(void *arg)
- 	rs_event_t event;
- 	lnet_nid_t nid;
- 
--	cfs_daemonize("kgnilnd_rca");
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-diff --git a/lnet/klnds/mxlnd/mxlnd.c b/lnet/klnds/mxlnd/mxlnd.c
-index 558bfaf..dbe998f 100644
---- a/lnet/klnds/mxlnd/mxlnd.c
-+++ b/lnet/klnds/mxlnd/mxlnd.c
-@@ -385,24 +385,25 @@ failed_with_init:
-  * mxlnd_thread_start - spawn a kernel thread with this function
-  * @fn - function pointer
-  * @arg - pointer to the parameter data
-+ * @name - name of new thread
-  *
-  * Returns 0 on success and a negative value on failure
-  */
- int
--mxlnd_thread_start(int (*fn)(void *arg), void *arg)
-+mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        int     pid = 0;
-+	cfs_task *task;
-         int     i   = (int) ((long) arg);
- 
-         cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
- 	init_completion(&kmxlnd_data.kmx_completions[i]);
- 
--        pid = cfs_create_thread(fn, arg, 0);
--        if (pid < 0) {
--                CERROR("cfs_create_thread() failed with %d\n", pid);
--                cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
--        }
--        return pid;
-+	task = kthread_run(fn, arg, name);
-+	if (IS_ERR(task)) {
-+		CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
-+		cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
-+	}
-+	return PTR_ERR(task);
- }
- 
- /**
-@@ -616,9 +617,13 @@ mxlnd_startup (lnet_ni_t *ni)
-                 *kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
- 
-         for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
-+		char                    name[24];
-+		memset(name, 0, sizeof(name));
-+		snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
-                 ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
--                if (ret < 0) {
--                        CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
-+		if (ret < 0) {
-+			CERROR("Starting mxlnd_request_waitd[%d] "
-+				"failed with %d\n", i, ret);
-                         cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-                         mx_wakeup(kmxlnd_data.kmx_endpt);
-                         for (--i; i >= 0; i--) {
-@@ -631,7 +636,8 @@ mxlnd_startup (lnet_ni_t *ni)
-                         goto failed;
-                 }
-         }
--        ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
-+				 "mxlnd_tx_queued");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-@@ -644,7 +650,8 @@ mxlnd_startup (lnet_ni_t *ni)
- 			nthreads * sizeof(struct completion));
-                 goto failed;
-         }
--        ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
-+				 "mxlnd_timeoutd");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-@@ -658,7 +665,8 @@ mxlnd_startup (lnet_ni_t *ni)
- 			nthreads * sizeof(struct completion));
-                 goto failed;
-         }
--        ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
-+				 "mxlnd_connd");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_connd failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-diff --git a/lnet/klnds/mxlnd/mxlnd_cb.c b/lnet/klnds/mxlnd/mxlnd_cb.c
-index 5b67392..4b3961b 100644
---- a/lnet/klnds/mxlnd/mxlnd_cb.c
-+++ b/lnet/klnds/mxlnd/mxlnd_cb.c
-@@ -2554,8 +2554,6 @@ mxlnd_tx_queued(void *arg)
- 	spinlock_t		*tx_q_lock = &kmxlnd_data.kmx_tx_queue_lock;
- 	rwlock_t		*g_lock  = &kmxlnd_data.kmx_global_lock;
- 
--	cfs_daemonize("mxlnd_tx_queued");
--
- 	while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
- 		ret = down_interruptible(&kmxlnd_data.kmx_tx_queue_sem);
- 		if (cfs_atomic_read(&kmxlnd_data.kmx_shutdown))
-@@ -3485,7 +3483,6 @@ int
- mxlnd_request_waitd(void *arg)
- {
-         long                    id              = (long) arg;
--        char                    name[24];
-         __u32                   result          = 0;
-         mx_return_t             mxret           = MX_SUCCESS;
-         mx_status_t             status;
-@@ -3497,10 +3494,6 @@ mxlnd_request_waitd(void *arg)
-         int                     count           = 0;
- #endif
- 
--        memset(name, 0, sizeof(name));
--        snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", id);
--        cfs_daemonize(name);
--
-         memset(&status, 0, sizeof(status));
- 
-         CDEBUG(D_NET, "%s starting\n", name);
-@@ -3965,8 +3958,6 @@ mxlnd_connd(void *arg)
- {
-         long                    id              = (long) arg;
- 
--        cfs_daemonize("mxlnd_connd");
--
-         CDEBUG(D_NET, "connd starting\n");
- 
-         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
-@@ -4040,8 +4031,6 @@ mxlnd_timeoutd(void *arg)
-         kmx_conn_t     *conn    = NULL;
- 	rwlock_t   *g_lock  = &kmxlnd_data.kmx_global_lock;
- 
--        cfs_daemonize("mxlnd_timeoutd");
--
-         CDEBUG(D_NET, "timeoutd starting\n");
- 
-         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c
-index 7d3c025..86298dd 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd.c
-@@ -3011,14 +3011,15 @@ kiblnd_base_startup(void)
-         kiblnd_data.kib_init = IBLND_INIT_DATA;
-         /*****************************************************/
- 
--        rc = kiblnd_thread_start(kiblnd_connd, NULL);
-+	rc = kiblnd_thread_start(kiblnd_connd, NULL, "kiblnd_connd");
-         if (rc != 0) {
-                 CERROR("Can't spawn o2iblnd connd: %d\n", rc);
-                 goto failed;
-         }
- 
--        if (*kiblnd_tunables.kib_dev_failover != 0)
--                rc = kiblnd_thread_start(kiblnd_failover_thread, NULL);
-+	if (*kiblnd_tunables.kib_dev_failover != 0)
-+		rc = kiblnd_thread_start(kiblnd_failover_thread, NULL,
-+					 "kiblnd_failover");
- 
-         if (rc != 0) {
-                 CERROR("Can't spawn o2iblnd failover thread: %d\n", rc);
-@@ -3060,9 +3061,11 @@ kiblnd_start_schedulers(struct kib_sched_info *sched)
- 
- 	for (i = 0; i < nthrs; i++) {
- 		long	id;
--
-+		char	name[20];
- 		id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
--		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id);
-+		snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
-+			 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
-+		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id, name);
- 		if (rc == 0)
- 			continue;
- 
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
-index fee5273..1c92fee 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.h
-+++ b/lnet/klnds/o2iblnd/o2iblnd.h
-@@ -1067,7 +1067,7 @@ void kiblnd_tunables_fini(void);
- 
- int  kiblnd_connd (void *arg);
- int  kiblnd_scheduler(void *arg);
--int  kiblnd_thread_start (int (*fn)(void *arg), void *arg);
-+int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
- int  kiblnd_failover_thread (void *arg);
- 
- int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
-diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c
-index 3cc7985..af92311 100644
---- a/lnet/klnds/o2iblnd/o2iblnd_cb.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c
-@@ -1805,15 +1805,15 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
- }
- 
- int
--kiblnd_thread_start (int (*fn)(void *arg), void *arg)
-+kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = kthread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
--        cfs_atomic_inc (&kiblnd_data.kib_nthreads);
--        return (0);
-+	cfs_atomic_inc(&kiblnd_data.kib_nthreads);
-+	return 0;
- }
- 
- void
-@@ -3135,7 +3135,6 @@ kiblnd_connd (void *arg)
-         int                peer_index = 0;
-         unsigned long      deadline = jiffies;
- 
--        cfs_daemonize ("kiblnd_connd");
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init (&wait);
-@@ -3329,15 +3328,10 @@ kiblnd_scheduler(void *arg)
- 	cfs_waitlink_t		wait;
- 	unsigned long		flags;
- 	struct ib_wc		wc;
--	char			name[20];
- 	int			did_something;
- 	int			busy_loops = 0;
- 	int			rc;
- 
--	snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
--		 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
--
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	cfs_waitlink_init(&wait);
-@@ -3346,10 +3340,10 @@ kiblnd_scheduler(void *arg)
- 
- 	rc = cfs_cpt_bind(lnet_cpt_table(), sched->ibs_cpt);
- 	if (rc != 0) {
--		CWARN("Failed to bind %s on CPT %d, please verify whether "
-+		CWARN("Failed to bind on CPT %d, please verify whether "
- 		      "all CPUs are healthy and reload modules if necessary, "
- 		      "otherwise your system might under risk of low "
--		      "performance\n", name, sched->ibs_cpt);
-+		      "performance\n", sched->ibs_cpt);
- 	}
- 
- 	spin_lock_irqsave(&sched->ibs_lock, flags);
-@@ -3464,7 +3458,6 @@ kiblnd_failover_thread(void *arg)
- 
-         LASSERT (*kiblnd_tunables.kib_dev_failover != 0);
- 
--        cfs_daemonize ("kiblnd_failover");
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init(&wait);
-diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c
-index 791f5c2..2edf87d 100644
---- a/lnet/klnds/ptllnd/ptllnd.c
-+++ b/lnet/klnds/ptllnd/ptllnd.c
-@@ -643,6 +643,7 @@ kptllnd_base_startup (void)
-         struct timeval  tv;
-         lnet_process_id_t  target;
-         ptl_err_t       ptl_rc;
-+	char            name[16];
- 
-         if (*kptllnd_tunables.kptl_max_procs_per_node < 1) {
-                 CERROR("max_procs_per_node must be >= 1\n");
-@@ -824,6 +825,7 @@ kptllnd_base_startup (void)
-          * now that PTLLND_INIT_DATA state has been entered */
-         CDEBUG(D_NET, "starting %d scheduler threads\n", PTLLND_N_SCHED);
-         for (i = 0; i < PTLLND_N_SCHED; i++) {
-+		snprintf(name, sizeof(name), "kptllnd_sd_%02d", i);
-                 rc = kptllnd_thread_start(kptllnd_scheduler, (void *)((long)i));
-                 if (rc != 0) {
-                         CERROR("Can't spawn scheduler[%d]: %d\n", i, rc);
-@@ -831,7 +833,8 @@ kptllnd_base_startup (void)
-                 }
-         }
- 
--        rc = kptllnd_thread_start(kptllnd_watchdog, NULL);
-+	snprintf(name, sizeof(name), "kptllnd_wd_%02d", i);
-+	rc = kptllnd_thread_start(kptllnd_watchdog, NULL, name);
-         if (rc != 0) {
-                 CERROR("Can't spawn watchdog: %d\n", rc);
-                 goto failed;
-diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c
-index e815607..7be7e4d 100644
---- a/lnet/klnds/ptllnd/ptllnd_cb.c
-+++ b/lnet/klnds/ptllnd/ptllnd_cb.c
-@@ -651,26 +651,24 @@ kptllnd_thread_fini (void)
- }
- 
- int
--kptllnd_thread_start (int (*fn)(void *arg), void *arg)
-+kptllnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long                pid;
-+	cfs_task_t *task;
- 
--        cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
-+	cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
- 
--        pid = cfs_create_thread (fn, arg, 0);
--        if (pid >= 0)
--                return 0;
--
--        CERROR("Failed to start thread: error %d\n", (int)pid);
--        kptllnd_thread_fini();
--        return (int)pid;
-+	task = kthread_run(fn, arg, name);
-+	if (IS_ERR(task)) {
-+		CERROR("Failed to start thread: error %ld\n", PTR_ERR(task));
-+		kptllnd_thread_fini();
-+	}
-+	return PTR_ERR(task);
- }
- 
- int
- kptllnd_watchdog(void *arg)
- {
-         int                 id = (long)arg;
--        char                name[16];
-         cfs_waitlink_t      waitlink;
-         int                 stamp = 0;
-         int                 peer_index = 0;
-@@ -678,8 +676,6 @@ kptllnd_watchdog(void *arg)
-         int                 timeout;
-         int                 i;
- 
--        snprintf(name, sizeof(name), "kptllnd_wd_%02d", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&waitlink);
-@@ -740,7 +736,6 @@ int
- kptllnd_scheduler (void *arg)
- {
-         int                 id = (long)arg;
--        char                name[16];
-         cfs_waitlink_t      waitlink;
-         unsigned long       flags;
-         int                 did_something;
-@@ -749,8 +744,6 @@ kptllnd_scheduler (void *arg)
-         kptl_rx_buffer_t   *rxb;
-         kptl_tx_t          *tx;
- 
--        snprintf(name, sizeof(name), "kptllnd_sd_%02d", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&waitlink);
-diff --git a/lnet/klnds/qswlnd/qswlnd.c b/lnet/klnds/qswlnd/qswlnd.c
-index eb6c659..4df26ee 100644
---- a/lnet/klnds/qswlnd/qswlnd.c
-+++ b/lnet/klnds/qswlnd/qswlnd.c
-@@ -526,7 +526,8 @@ kqswnal_startup (lnet_ni_t *ni)
- 	/**********************************************************************/
- 	/* Spawn scheduling threads */
- 	for (i = 0; i < cfs_num_online_cpus(); i++) {
--		rc = kqswnal_thread_start (kqswnal_scheduler, NULL);
-+		rc = kqswnal_thread_start(kqswnal_scheduler, NULL,
-+					  "kqswnal_sched");
- 		if (rc != 0)
- 		{
- 			CERROR ("failed to spawn scheduling thread: %d\n", rc);
-diff --git a/lnet/klnds/qswlnd/qswlnd_cb.c b/lnet/klnds/qswlnd/qswlnd_cb.c
-index 243918b..50cc744 100644
---- a/lnet/klnds/qswlnd/qswlnd_cb.c
-+++ b/lnet/klnds/qswlnd/qswlnd_cb.c
-@@ -1655,15 +1655,15 @@ kqswnal_recv (lnet_ni_t     *ni,
- }
- 
- int
--kqswnal_thread_start (int (*fn)(void *arg), void *arg)
-+kqswnal_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = cfs_thread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
--        cfs_atomic_inc (&kqswnal_data.kqn_nthreads);
--        return (0);
-+	cfs_atomic_inc(&kqswnal_data.kqn_nthreads);
-+	return 0;
- }
- 
- void
-@@ -1682,7 +1682,6 @@ kqswnal_scheduler (void *arg)
-         int              counter = 0;
-         int              did_something;
- 
--        cfs_daemonize ("kqswnal_sched");
-         cfs_block_allsigs ();
- 
- 	spin_lock_irqsave(&kqswnal_data.kqn_sched_lock, flags);
-diff --git a/lnet/klnds/ralnd/ralnd.c b/lnet/klnds/ralnd/ralnd.c
-index ca68fef..eabefae 100644
---- a/lnet/klnds/ralnd/ralnd.c
-+++ b/lnet/klnds/ralnd/ralnd.c
-@@ -1566,6 +1566,7 @@ kranal_startup (lnet_ni_t *ni)
-         int               rc;
-         int               i;
-         kra_device_t     *dev;
-+	char		  name[16];
- 
-         LASSERT (ni->ni_lnd == &the_kralnd);
- 
-@@ -1658,14 +1659,16 @@ kranal_startup (lnet_ni_t *ni)
-         if (rc != 0)
-                 goto failed;
- 
--        rc = kranal_thread_start(kranal_reaper, NULL);
-+	rc = kranal_thread_start(kranal_reaper, NULL, "kranal_reaper");
-         if (rc != 0) {
-                 CERROR("Can't spawn ranal reaper: %d\n", rc);
-                 goto failed;
-         }
- 
-         for (i = 0; i < *kranal_tunables.kra_n_connd; i++) {
--                rc = kranal_thread_start(kranal_connd, (void *)(unsigned long)i);
-+		snprintf(name, sizeof(name), "kranal_connd_%02ld", i);
-+		rc = kranal_thread_start(kranal_connd,
-+					 (void *)(unsigned long)i, name);
-                 if (rc != 0) {
-                         CERROR("Can't spawn ranal connd[%d]: %d\n",
-                                i, rc);
-@@ -1691,7 +1694,8 @@ kranal_startup (lnet_ni_t *ni)
-         
-         for (i = 0; i < kranal_data.kra_ndevs; i++) {
-                 dev = &kranal_data.kra_devices[i];
--                rc = kranal_thread_start(kranal_scheduler, dev);
-+		snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
-+		rc = kranal_thread_start(kranal_scheduler, dev, name);
-                 if (rc != 0) {
-                         CERROR("Can't spawn ranal scheduler[%d]: %d\n",
-                                i, rc);
-diff --git a/lnet/klnds/ralnd/ralnd.h b/lnet/klnds/ralnd/ralnd.h
-index d9fd100..8b92cdc 100644
---- a/lnet/klnds/ralnd/ralnd.h
-+++ b/lnet/klnds/ralnd/ralnd.h
-@@ -452,7 +452,7 @@ extern kra_peer_t *kranal_find_peer_locked (lnet_nid_t nid);
- extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
- extern int kranal_del_peer (lnet_nid_t nid);
- extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
--extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
-+extern int kranal_thread_start(int(*fn)(void *arg), void *arg, char *name);
- extern int kranal_connd (void *arg);
- extern int kranal_reaper (void *arg);
- extern int kranal_scheduler (void *arg);
-diff --git a/lnet/klnds/ralnd/ralnd_cb.c b/lnet/klnds/ralnd/ralnd_cb.c
-index 8c7f053..05de1c1 100644
---- a/lnet/klnds/ralnd/ralnd_cb.c
-+++ b/lnet/klnds/ralnd/ralnd_cb.c
-@@ -891,15 +891,13 @@ kranal_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
- }
- 
- int
--kranal_thread_start (int(*fn)(void *arg), void *arg)
-+kranal_thread_start(int(*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread(fn, arg, 0);
-+	cfs_task_t *task = cfs_thread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return(int)pid;
--
--        cfs_atomic_inc(&kranal_data.kra_nthreads);
--        return 0;
-+	if (!IS_ERR(task))
-+		cfs_atomic_inc(&kranal_data.kra_nthreads);
-+	return PTR_ERR(task);
- }
- 
- void
-@@ -1054,15 +1052,12 @@ int
- kranal_connd (void *arg)
- {
-         long               id = (long)arg;
--        char               name[16];
-         cfs_waitlink_t     wait;
-         unsigned long      flags;
-         kra_peer_t        *peer;
-         kra_acceptsock_t  *ras;
-         int                did_something;
- 
--        snprintf(name, sizeof(name), "kranal_connd_%02ld", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&wait);
-@@ -1159,7 +1154,6 @@ kranal_reaper (void *arg)
-         long               next_min_timeout = CFS_MAX_SCHEDULE_TIMEOUT;
-         long               current_min_timeout = 1;
- 
--        cfs_daemonize("kranal_reaper");
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&wait);
-@@ -1932,7 +1926,6 @@ kranal_scheduler (void *arg)
- {
-         kra_device_t     *dev = (kra_device_t *)arg;
-         cfs_waitlink_t    wait;
--        char              name[16];
-         kra_conn_t       *conn;
-         unsigned long     flags;
-         unsigned long     deadline;
-@@ -1945,8 +1938,6 @@ kranal_scheduler (void *arg)
-         int               dropped_lock;
-         int               busy_loops = 0;
- 
--        snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         dev->rad_scheduler = current;
-diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c
-index 9376b08..c70ceeb 100644
---- a/lnet/klnds/socklnd/socklnd.c
-+++ b/lnet/klnds/socklnd/socklnd.c
-@@ -2465,12 +2465,15 @@ ksocknal_base_startup(void)
-         }
- 
-         for (i = 0; i < *ksocknal_tunables.ksnd_nconnds; i++) {
-+		char name[16];
- 		spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- 		ksocknal_data.ksnd_connd_starting++;
- 		spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- 
-+
-+		snprintf(name, sizeof(name), "socknal_cd%02d", i);
- 		rc = ksocknal_thread_start(ksocknal_connd,
--					   (void *)((ulong_ptr_t)i));
-+					   (void *)((ulong_ptr_t)i), name);
- 		if (rc != 0) {
- 			spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- 			ksocknal_data.ksnd_connd_starting--;
-@@ -2480,7 +2483,7 @@ ksocknal_base_startup(void)
-                 }
-         }
- 
--        rc = ksocknal_thread_start (ksocknal_reaper, NULL);
-+	rc = ksocknal_thread_start(ksocknal_reaper, NULL, "socknal_reaper");
-         if (rc != 0) {
-                 CERROR ("Can't spawn socknal reaper: %d\n", rc);
-                 goto failed;
-@@ -2724,10 +2727,16 @@ ksocknal_start_schedulers(struct ksock_sched_info *info)
- 	}
- 
- 	for (i = 0; i < nthrs; i++) {
--		long	id;
--
-+		long		id;
-+		char		name[20];
-+		ksock_sched_t	*sched;
- 		id = KSOCK_THREAD_ID(info->ksi_cpt, info->ksi_nthreads + i);
--		rc = ksocknal_thread_start(ksocknal_scheduler, (void *)id);
-+		sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
-+		snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
-+			 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
-+
-+		rc = ksocknal_thread_start(ksocknal_scheduler,
-+					   (void *)id, name);
- 		if (rc == 0)
- 			continue;
- 
-diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
-index c7f1bed..3fd04ac 100644
---- a/lnet/klnds/socklnd/socklnd.h
-+++ b/lnet/klnds/socklnd/socklnd.h
-@@ -581,7 +581,7 @@ extern void ksocknal_txlist_done (lnet_ni_t *ni, cfs_list_t *txlist,
-                                   int error);
- extern void ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive);
- extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when);
--extern int ksocknal_thread_start (int (*fn)(void *arg), void *arg);
-+extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
- extern void ksocknal_thread_fini (void);
- extern void ksocknal_launch_all_connections_locked (ksock_peer_t *peer);
- extern ksock_route_t *ksocknal_find_connectable_route_locked (ksock_peer_t *peer);
-diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c
-index b24127d..e624753 100644
---- a/lnet/klnds/socklnd/socklnd_cb.c
-+++ b/lnet/klnds/socklnd/socklnd_cb.c
-@@ -1007,17 +1007,17 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
- }
- 
- int
--ksocknal_thread_start (int (*fn)(void *arg), void *arg)
-+ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long          pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = kthread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
- 	write_lock_bh(&ksocknal_data.ksnd_global_lock);
--        ksocknal_data.ksnd_nthreads++;
-+	ksocknal_data.ksnd_nthreads++;
- 	write_unlock_bh(&ksocknal_data.ksnd_global_lock);
--        return (0);
-+	return 0;
- }
- 
- void
-@@ -1396,22 +1396,17 @@ int ksocknal_scheduler(void *arg)
- 	ksock_tx_t		*tx;
- 	int			rc;
- 	int			nloops = 0;
--	char			name[20];
- 	long			id = (long)arg;
- 
- 	info = ksocknal_data.ksnd_sched_info[KSOCK_THREAD_CPT(id)];
- 	sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
- 
--	snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
--		 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
--
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	rc = cfs_cpt_bind(lnet_cpt_table(), info->ksi_cpt);
- 	if (rc != 0) {
--		CERROR("Can't set CPT affinity for %s to %d: %d\n",
--		       name, info->ksi_cpt, rc);
-+		CERROR("Can't set CPT affinity to %d: %d\n",
-+		       info->ksi_cpt, rc);
- 	}
- 
- 	spin_lock_bh(&sched->kss_lock);
-@@ -2023,6 +2018,7 @@ ksocknal_connect (ksock_route_t *route)
- static int
- ksocknal_connd_check_start(long sec, long *timeout)
- {
-+	char name[16];
-         int rc;
-         int total = ksocknal_data.ksnd_connd_starting +
-                     ksocknal_data.ksnd_connd_running;
-@@ -2060,7 +2056,8 @@ ksocknal_connd_check_start(long sec, long *timeout)
- 	spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- 
- 	/* NB: total is the next id */
--	rc = ksocknal_thread_start(ksocknal_connd, (void *)((long)total));
-+	snprintf(name, sizeof(name), "socknal_cd%02d", total);
-+	rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
- 
- 	spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
-         if (rc == 0)
-@@ -2145,15 +2142,11 @@ int
- ksocknal_connd (void *arg)
- {
- 	spinlock_t    *connd_lock = &ksocknal_data.ksnd_connd_lock;
--        long               id = (long)(long_ptr_t)arg;
--        char               name[16];
-         ksock_connreq_t   *cr;
-         cfs_waitlink_t     wait;
-         int                nloops = 0;
-         int                cons_retry = 0;
- 
--        snprintf (name, sizeof (name), "socknal_cd%02ld", id);
--        cfs_daemonize (name);
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init (&wait);
-@@ -2546,7 +2539,6 @@ ksocknal_reaper (void *arg)
-         int                peer_index = 0;
-         cfs_time_t         deadline = cfs_time_current();
- 
--        cfs_daemonize ("socknal_reaper");
-         cfs_block_allsigs ();
- 
-         CFS_INIT_LIST_HEAD(&enomem_conns);
-diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
-index 9e9b236..9bdac05 100644
---- a/lnet/lnet/acceptor.c
-+++ b/lnet/lnet/acceptor.c
-@@ -389,7 +389,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
- int
- lnet_acceptor(void *arg)
- {
--        char           name[16];
-         cfs_socket_t  *newsock;
-         int            rc;
-         __u32          magic;
-@@ -399,8 +398,6 @@ lnet_acceptor(void *arg)
- 
-         LASSERT (lnet_acceptor_state.pta_sock == NULL);
- 
--        snprintf(name, sizeof(name), "acceptor_%03d", accept_port);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock,
-@@ -532,9 +529,11 @@ lnet_acceptor_start(void)
- 	if (lnet_count_acceptor_nis() == 0)  /* not required */
- 		return 0;
- 
--	rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
--	if (rc2 < 0) {
--		CERROR("Can't start acceptor thread: %d\n", rc);
-+	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
-+				  (void *)(ulong_ptr_t)secure,
-+				  "acceptor_%03ld", secure));
-+	if (IS_ERR_VALUE(rc2)) {
-+		CERROR("Can't start acceptor thread: %ld\n", rc2);
- 		fini_completion(&lnet_acceptor_state.pta_signal);
- 
- 		return -ESRCH;
-diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c
-index 770345d..9d57479 100644
---- a/lnet/lnet/module.c
-+++ b/lnet/lnet/module.c
-@@ -127,11 +127,11 @@ init_lnet(void)
-         rc = libcfs_register_ioctl(&lnet_ioctl_handler);
-         LASSERT (rc == 0);
- 
--        if (config_on_load) {
--                /* Have to schedule a separate thread to avoid deadlocking
--                 * in modload */
--                (void) cfs_create_thread(lnet_configure, NULL, 0);
--        }
-+	if (config_on_load) {
-+		/* Have to schedule a separate thread to avoid deadlocking
-+		 * in modload */
-+		(void) kthread_run(lnet_configure, NULL, "lnet_initd");
-+	}
- 
-         RETURN(0);
- }
-diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c
-index 34c94ae..4cef9e8 100644
---- a/lnet/lnet/router.c
-+++ b/lnet/lnet/router.c
-@@ -1095,16 +1095,17 @@ lnet_router_checker_start(void)
- 
-         the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
- #ifdef __KERNEL__
--        rc = cfs_create_thread(lnet_router_checker, NULL, 0);
--        if (rc < 0) {
--                CERROR("Can't start router checker thread: %d\n", rc);
--                /* block until event callback signals exit */
-+	rc = PTR_ERR(kthread_run(lnet_router_checker,
-+				 NULL, "router_checker"));
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("Can't start router checker thread: %d\n", rc);
-+		/* block until event callback signals exit */
- 		down(&the_lnet.ln_rc_signal);
--                rc = LNetEQFree(the_lnet.ln_rc_eqh);
--                LASSERT (rc == 0);
--                the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
--                return -ENOMEM;
--        }
-+		rc = LNetEQFree(the_lnet.ln_rc_eqh);
-+		LASSERT(rc == 0);
-+		the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
-+		return -ENOMEM;
-+	}
- #endif
- 
-         if (check_routers_before_use) {
-@@ -1230,7 +1231,6 @@ lnet_router_checker(void *arg)
-         lnet_peer_t       *rtr;
-         cfs_list_t        *entry;
- 
--        cfs_daemonize("router_checker");
-         cfs_block_allsigs();
- 
-         LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING);
-diff --git a/lnet/selftest/timer.c b/lnet/selftest/timer.c
-index a66a336..f2f8262 100644
---- a/lnet/selftest/timer.c
-+++ b/lnet/selftest/timer.c
-@@ -183,7 +183,6 @@ stt_timer_main (void *arg)
- 
-         SET_BUT_UNUSED(rc);
- 
--        cfs_daemonize("st_timer");
-         cfs_block_allsigs();
- 
-         while (!stt_data.stt_shuttingdown) {
-@@ -204,13 +203,13 @@ stt_timer_main (void *arg)
- int
- stt_start_timer_thread (void)
- {
--        long pid;
-+	cfs_task_t *task;
- 
--        LASSERT (!stt_data.stt_shuttingdown);
-+	LASSERT(!stt_data.stt_shuttingdown);
- 
--        pid = cfs_create_thread(stt_timer_main, NULL, 0);
--        if (pid < 0)
--                return (int)pid;
-+	task = kthread_run(stt_timer_main, NULL, "st_timer");
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
- 	spin_lock(&stt_data.stt_lock);
- 	stt_data.stt_nthreads++;
-diff --git a/lnet/ulnds/socklnd/usocklnd.c b/lnet/ulnds/socklnd/usocklnd.c
-index cc8c4c8..d4d5027 100644
---- a/lnet/ulnds/socklnd/usocklnd.c
-+++ b/lnet/ulnds/socklnd/usocklnd.c
-@@ -296,14 +296,15 @@ usocklnd_base_startup()
-         pthread_rwlock_init(&usock_data.ud_peers_lock, NULL);
- 
-         /* Spawn poll threads */
--        for (i = 0; i < usock_data.ud_npollthreads; i++) {
--                rc = cfs_create_thread(usocklnd_poll_thread,
--                                       &usock_data.ud_pollthreads[i], 0);
--                if (rc) {
--                        usocklnd_base_shutdown(i);
--                        return rc;
--                }
--        }
-+	for (i = 0; i < usock_data.ud_npollthreads; i++) {
-+		rc = PTR_ERR(kthread_run(usocklnd_poll_thread,
-+					     &usock_data.ud_pollthreads[i],
-+					     ""));
-+		if (IS_ERR_VALUE(rc)) {
-+			usocklnd_base_shutdown(i);
-+			return rc;
-+		}
-+	}
- 
-         usock_data.ud_state = UD_STATE_INITIALIZED;
- 
-diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
-index 88b51a9..517b8e3 100644
---- a/lustre/ldlm/ldlm_lib.c
-+++ b/lustre/ldlm/ldlm_lib.c
-@@ -1972,19 +1972,12 @@ static int target_recovery_thread(void *arg)
-         struct ptlrpc_request *req;
-         struct target_recovery_data *trd = &obd->obd_recovery_data;
-         unsigned long delta;
--        unsigned long flags;
-         struct lu_env *env;
-         struct ptlrpc_thread *thread = NULL;
-         int rc = 0;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("tgt_recov");
--
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--
-+	unshare_fs_struct();
-         OBD_ALLOC_PTR(thread);
-         if (thread == NULL)
-                 RETURN(-ENOMEM);
-@@ -2109,22 +2102,24 @@ static int target_recovery_thread(void *arg)
- static int target_start_recovery_thread(struct lu_target *lut,
-                                         svc_handler_t handler)
- {
--        struct obd_device *obd = lut->lut_obd;
--        int rc = 0;
--        struct target_recovery_data *trd = &obd->obd_recovery_data;
-+	struct obd_device *obd = lut->lut_obd;
-+	int rc = 0;
-+	struct target_recovery_data *trd = &obd->obd_recovery_data;
- 
--        memset(trd, 0, sizeof(*trd));
-+	memset(trd, 0, sizeof(*trd));
- 	init_completion(&trd->trd_starting);
- 	init_completion(&trd->trd_finishing);
--        trd->trd_recovery_handler = handler;
-+	trd->trd_recovery_handler = handler;
- 
--        if (cfs_create_thread(target_recovery_thread, lut, 0) > 0) {
-+	if (!IS_ERR(kthread_run(target_recovery_thread,
-+				lut, "tgt_recov"))) {
- 		wait_for_completion(&trd->trd_starting);
--                LASSERT(obd->obd_recovering != 0);
--        } else
--                rc = -ECHILD;
-+		LASSERT(obd->obd_recovering != 0);
-+	} else {
-+		rc = -ECHILD;
-+	}
- 
--        return rc;
-+	return rc;
- }
- 
- void target_stop_recovery_thread(struct obd_device *obd)
-diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 211380a..01fe1ca 100644
---- a/lustre/ldlm/ldlm_lockd.c
-+++ b/lustre/ldlm/ldlm_lockd.c
-@@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
-         int do_dump;
- 
-         ENTRY;
--        cfs_daemonize("ldlm_elt");
- 
-         expired_lock_thread.elt_state = ELT_READY;
-         cfs_waitq_signal(&expired_lock_thread.elt_waitq);
-@@ -2577,14 +2576,17 @@ static int ldlm_bl_thread_main(void *arg);
- static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
- {
- 	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
--	int rc;
-+	cfs_task_t *task;
- 
- 	init_completion(&bltd.bltd_comp);
--	rc = cfs_create_thread(ldlm_bl_thread_main, &bltd, 0);
--	if (rc < 0) {
--		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %d\n",
--		       cfs_atomic_read(&blp->blp_num_threads), rc);
--		return rc;
-+	bltd.bltd_num = cfs_atomic_read(&blp->blp_num_threads);
-+	snprintf(bltd.bltd_name, sizeof(bltd.bltd_name) - 1,
-+		"ldlm_bl_%02d", bltd.bltd_num);
-+	task = kthread_run(ldlm_bl_thread_main, &bltd, bltd.bltd_name);
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
-+		       cfs_atomic_read(&blp->blp_num_threads), PTR_ERR(task));
-+		return PTR_ERR(task);
- 	}
- 	wait_for_completion(&bltd.bltd_comp);
- 
-@@ -2608,14 +2610,9 @@ static int ldlm_bl_thread_main(void *arg)
- 
-                 blp = bltd->bltd_blp;
- 
--                bltd->bltd_num =
--                        cfs_atomic_inc_return(&blp->blp_num_threads) - 1;
-+		cfs_atomic_inc(&blp->blp_num_threads);
-                 cfs_atomic_inc(&blp->blp_busy_threads);
- 
--                snprintf(bltd->bltd_name, sizeof(bltd->bltd_name) - 1,
--                        "ldlm_bl_%02d", bltd->bltd_num);
--                cfs_daemonize(bltd->bltd_name);
--
- 		complete(&bltd->bltd_comp);
-                 /* cannot use bltd after this, it is only on caller's stack */
-         }
-@@ -2955,22 +2952,22 @@ static int ldlm_setup(void)
- 	}
- 
- # ifdef HAVE_SERVER_SUPPORT
--        CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
--        expired_lock_thread.elt_state = ELT_STOPPED;
--        cfs_waitq_init(&expired_lock_thread.elt_waitq);
-+	CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
-+	expired_lock_thread.elt_state = ELT_STOPPED;
-+	cfs_waitq_init(&expired_lock_thread.elt_waitq);
- 
--        CFS_INIT_LIST_HEAD(&waiting_locks_list);
-+	CFS_INIT_LIST_HEAD(&waiting_locks_list);
- 	spin_lock_init(&waiting_locks_spinlock);
--        cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
-+	cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
- 
--        rc = cfs_create_thread(expired_lock_main, NULL, CFS_DAEMON_FLAGS);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(expired_lock_main, NULL, "ldlm_elt"));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("Cannot start ldlm expired-lock thread: %d\n", rc);
- 		GOTO(out, rc);
- 	}
- 
--        cfs_wait_event(expired_lock_thread.elt_waitq,
--                       expired_lock_thread.elt_state == ELT_READY);
-+	cfs_wait_event(expired_lock_thread.elt_waitq,
-+		       expired_lock_thread.elt_state == ELT_READY);
- # endif /* HAVE_SERVER_SUPPORT */
- 
- 	rc = ldlm_pools_init();
-diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
-index d724a2d..fa14f66 100644
---- a/lustre/ldlm/ldlm_pool.c
-+++ b/lustre/ldlm/ldlm_pool.c
-@@ -1295,15 +1295,13 @@ EXPORT_SYMBOL(ldlm_pools_recalc);
- static int ldlm_pools_thread_main(void *arg)
- {
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
--        char *t_name = "ldlm_poold";
-         ENTRY;
- 
--        cfs_daemonize(t_name);
-         thread_set_flags(thread, SVC_RUNNING);
-         cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-         CDEBUG(D_DLMTRACE, "%s: pool thread starting, process %d\n",
--               t_name, cfs_curproc_pid());
-+		"ldlm_poold", cfs_curproc_pid());
- 
-         while (1) {
-                 struct l_wait_info lwi;
-@@ -1335,43 +1333,38 @@ static int ldlm_pools_thread_main(void *arg)
-         cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-         CDEBUG(D_DLMTRACE, "%s: pool thread exiting, process %d\n",
--               t_name, cfs_curproc_pid());
-+		"ldlm_poold", cfs_curproc_pid());
- 
- 	complete_and_exit(&ldlm_pools_comp, 0);
- }
- 
- static int ldlm_pools_thread_start(void)
- {
--        struct l_wait_info lwi = { 0 };
--        int rc;
--        ENTRY;
-+	struct l_wait_info lwi = { 0 };
-+	cfs_task_t *task;
-+	ENTRY;
- 
--        if (ldlm_pools_thread != NULL)
--                RETURN(-EALREADY);
-+	if (ldlm_pools_thread != NULL)
-+		RETURN(-EALREADY);
- 
--        OBD_ALLOC_PTR(ldlm_pools_thread);
--        if (ldlm_pools_thread == NULL)
--                RETURN(-ENOMEM);
-+	OBD_ALLOC_PTR(ldlm_pools_thread);
-+	if (ldlm_pools_thread == NULL)
-+		RETURN(-ENOMEM);
- 
- 	init_completion(&ldlm_pools_comp);
--        cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
--
--        /*
--         * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
--         * just drop the VM and FILES in cfs_daemonize() right away.
--         */
--        rc = cfs_create_thread(ldlm_pools_thread_main, ldlm_pools_thread,
--                               CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("Can't start pool thread, error %d\n",
--                       rc);
--                OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
--                ldlm_pools_thread = NULL;
--                RETURN(rc);
--        }
--        l_wait_event(ldlm_pools_thread->t_ctl_waitq,
--                     thread_is_running(ldlm_pools_thread), &lwi);
--        RETURN(0);
-+	cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
-+
-+	task = kthread_run(ldlm_pools_thread_main, ldlm_pools_thread,
-+			   "ldlm_poold");
-+	if (IS_ERR(task)) {
-+		CERROR("Can't start pool thread, error %ld\n", PTR_ERR(task));
-+		OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
-+		ldlm_pools_thread = NULL;
-+		RETURN(PTR_ERR(task));
-+	}
-+	l_wait_event(ldlm_pools_thread->t_ctl_waitq,
-+		     thread_is_running(ldlm_pools_thread), &lwi);
-+	RETURN(0);
- }
- 
- static void ldlm_pools_thread_stop(void)
-diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c
-index 7ab686c..1d1cded 100644
---- a/lustre/llite/llite_capa.c
-+++ b/lustre/llite/llite_capa.c
-@@ -173,8 +173,6 @@ static int capa_thread_main(void *unused)
-         int rc;
-         ENTRY;
- 
--        cfs_daemonize("ll_capa");
--
-         thread_set_flags(&ll_capa_thread, SVC_RUNNING);
-         cfs_waitq_signal(&ll_capa_thread.t_ctl_waitq);
- 
-@@ -293,20 +291,21 @@ void ll_capa_timer_callback(unsigned long unused)
- 
- int ll_capa_thread_start(void)
- {
--        int rc;
--        ENTRY;
-+	cfs_task_t *task;
-+	ENTRY;
- 
--        cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
-+	cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
- 
--        rc = cfs_create_thread(capa_thread_main, NULL, 0);
--        if (rc < 0) {
--                CERROR("cannot start expired capa thread: rc %d\n", rc);
--                RETURN(rc);
--        }
--        cfs_wait_event(ll_capa_thread.t_ctl_waitq,
--                       thread_is_running(&ll_capa_thread));
-+	task = kthread_run(capa_thread_main, NULL, "ll_capa");
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start expired capa thread: rc %ld\n",
-+			PTR_ERR(task));
-+		RETURN(PTR_ERR(task));
-+	}
-+	cfs_wait_event(ll_capa_thread.t_ctl_waitq,
-+		       thread_is_running(&ll_capa_thread));
- 
--        RETURN(0);
-+	RETURN(0);
- }
- 
- void ll_capa_thread_stop(void)
-diff --git a/lustre/llite/llite_close.c b/lustre/llite/llite_close.c
-index 26a2c8c..f1a1415 100644
---- a/lustre/llite/llite_close.c
-+++ b/lustre/llite/llite_close.c
-@@ -349,12 +349,6 @@ static int ll_close_thread(void *arg)
-         struct ll_close_queue *lcq = arg;
-         ENTRY;
- 
--        {
--                char name[CFS_CURPROC_COMM_MAX];
--                snprintf(name, sizeof(name) - 1, "ll_close");
--                cfs_daemonize(name);
--        }
--
- 	complete(&lcq->lcq_comp);
- 
-         while (1) {
-@@ -382,25 +376,25 @@ static int ll_close_thread(void *arg)
- 
- int ll_close_thread_start(struct ll_close_queue **lcq_ret)
- {
--        struct ll_close_queue *lcq;
--        pid_t pid;
-+	struct ll_close_queue *lcq;
-+	cfs_task_t *task;
- 
--        if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
--                return -EINTR;
-+	if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
-+		return -EINTR;
- 
--        OBD_ALLOC(lcq, sizeof(*lcq));
--        if (lcq == NULL)
--                return -ENOMEM;
-+	OBD_ALLOC(lcq, sizeof(*lcq));
-+	if (lcq == NULL)
-+		return -ENOMEM;
- 
- 	spin_lock_init(&lcq->lcq_lock);
- 	CFS_INIT_LIST_HEAD(&lcq->lcq_head);
- 	cfs_waitq_init(&lcq->lcq_waitq);
- 	init_completion(&lcq->lcq_comp);
- 
--	pid = cfs_create_thread(ll_close_thread, lcq, 0);
--	if (pid < 0) {
-+	task = kthread_run(ll_close_thread, lcq, "ll_close");
-+	if (IS_ERR(task)) {
- 		OBD_FREE(lcq, sizeof(*lcq));
--		return pid;
-+		return PTR_ERR(task);
- 	}
- 
- 	wait_for_completion(&lcq->lcq_comp);
-diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
-index f94a7ca..c494dd2 100644
---- a/lustre/llite/lloop.c
-+++ b/lustre/llite/lloop.c
-@@ -420,8 +420,6 @@ static int loop_thread(void *data)
-         int refcheck;
-         int ret = 0;
- 
--        daemonize("lloop%d", lo->lo_number);
--
-         set_user_nice(current, -20);
- 
-         lo->lo_state = LLOOP_BOUND;
-@@ -552,13 +550,13 @@ static int loop_set_fd(struct lloop_device *lo, struct file *unused,
-         set_capacity(disks[lo->lo_number], size);
-         bd_set_size(bdev, size << 9);
- 
--        set_blocksize(bdev, lo->lo_blocksize);
-+	set_blocksize(bdev, lo->lo_blocksize);
- 
--        cfs_create_thread(loop_thread, lo, CLONE_KERNEL);
-+	kthread_run(loop_thread, lo, "lloop%d", lo->lo_number);
- 	down(&lo->lo_sem);
--        return 0;
-+	return 0;
- 
-- out:
-+out:
-         /* This is safe: open() is still holding a reference. */
-         cfs_module_put(THIS_MODULE);
-         return error;
-diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
-index a2e48f4..19ca1b4 100644
---- a/lustre/llite/statahead.c
-+++ b/lustre/llite/statahead.c
-@@ -981,12 +981,6 @@ static int ll_agl_thread(void *arg)
-         struct l_wait_info        lwi    = { 0 };
-         ENTRY;
- 
--        {
--                char pname[16];
--                snprintf(pname, 15, "ll_agl_%u", plli->lli_opendir_pid);
--                cfs_daemonize(pname);
--        }
--
-         CDEBUG(D_READA, "agl thread started: [pid %d] [parent %.*s]\n",
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-@@ -1040,25 +1034,28 @@ static int ll_agl_thread(void *arg)
- 
- static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
- {
--        struct ptlrpc_thread *thread = &sai->sai_agl_thread;
--        struct l_wait_info    lwi    = { 0 };
--        int                   rc;
--        ENTRY;
-+	struct ptlrpc_thread *thread = &sai->sai_agl_thread;
-+	struct l_wait_info    lwi    = { 0 };
-+	struct ll_inode_info  *plli;
-+	cfs_task_t	      *task;
-+	ENTRY;
- 
--        CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
--               cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
-+	CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
-+	       cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
--        rc = cfs_create_thread(ll_agl_thread, parent, 0);
--        if (rc < 0) {
--                CERROR("can't start ll_agl thread, rc: %d\n", rc);
--                thread_set_flags(thread, SVC_STOPPED);
--                RETURN_EXIT;
--        }
-+	plli = ll_i2info(parent->d_inode);
-+	task = kthread_run(ll_agl_thread, parent,
-+			       "ll_agl_%u", plli->lli_opendir_pid);
-+	if (IS_ERR(task)) {
-+		CERROR("can't start ll_agl thread, rc: %ld\n", PTR_ERR(task));
-+		thread_set_flags(thread, SVC_STOPPED);
-+		RETURN_EXIT;
-+	}
- 
--        l_wait_event(thread->t_ctl_waitq,
--                     thread_is_running(thread) || thread_is_stopped(thread),
--                     &lwi);
--        EXIT;
-+	l_wait_event(thread->t_ctl_waitq,
-+		     thread_is_running(thread) || thread_is_stopped(thread),
-+		     &lwi);
-+	EXIT;
- }
- 
- static int ll_statahead_thread(void *arg)
-@@ -1079,12 +1076,6 @@ static int ll_statahead_thread(void *arg)
-         struct l_wait_info        lwi    = { 0 };
-         ENTRY;
- 
--        {
--                char pname[16];
--                snprintf(pname, 15, "ll_sa_%u", plli->lli_opendir_pid);
--                cfs_daemonize(pname);
--        }
--
-         CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-@@ -1548,6 +1539,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
-         struct ptlrpc_thread     *thread;
-         struct l_wait_info        lwi   = { 0 };
-         int                       rc    = 0;
-+	struct ll_inode_info     *plli;
-         ENTRY;
- 
-         LASSERT(lli->lli_opendir_pid == cfs_curproc_pid());
-@@ -1693,11 +1685,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-         lli->lli_sai = sai;
--        rc = cfs_create_thread(ll_statahead_thread, parent, 0);
--        thread = &sai->sai_thread;
--        if (rc < 0) {
--                CERROR("can't start ll_sa thread, rc: %d\n", rc);
--                dput(parent);
-+
-+	plli = ll_i2info(parent->d_inode);
-+	rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
-+				 "ll_sa_%u", plli->lli_opendir_pid));
-+	thread = &sai->sai_thread;
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("can't start ll_sa thread, rc: %d\n", rc);
-+		dput(parent);
-                 lli->lli_opendir_key = NULL;
-                 thread_set_flags(thread, SVC_STOPPED);
-                 thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 5751460..2581b69 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -1571,13 +1571,6 @@ static int mdc_changelog_send_thread(void *csdata)
-         CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
-                cs->cs_fp, cs->cs_startrec);
- 
--        /*
--         * It's important to daemonize here to close unused FDs.
--         * The write fd from pipe is already opened by the caller,
--         * so it's fine to clear all files here
--         */
--        cfs_daemonize("mdc_clg_send_thread");
--
-         OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
-         if (cs->cs_buf == NULL)
-                 GOTO(out, rc = -ENOMEM);
-@@ -1614,12 +1607,10 @@ out:
- 		llog_cat_close(NULL, llh);
-         if (ctxt)
-                 llog_ctxt_put(ctxt);
--        if (cs->cs_buf)
--                OBD_FREE(cs->cs_buf, CR_MAXSIZE);
--        OBD_FREE_PTR(cs);
--        /* detach from parent process so we get cleaned up */
--        cfs_daemonize("cl_send");
--        return rc;
-+	if (cs->cs_buf)
-+		OBD_FREE(cs->cs_buf, CR_MAXSIZE);
-+	OBD_FREE_PTR(cs);
-+	return rc;
- }
- 
- static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1639,13 +1630,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
- 	cs->cs_fp = fget(icc->icc_id);
- 	cs->cs_flags = icc->icc_flags;
- 
--        /* New thread because we should return to user app before
--           writing into our pipe */
--        rc = cfs_create_thread(mdc_changelog_send_thread, cs, CFS_DAEMON_FLAGS);
--        if (rc >= 0) {
--                CDEBUG(D_CHANGELOG, "start changelog thread: %d\n", rc);
--                return 0;
--        }
-+	/*
-+	 * New thread because we should return to user app before
-+	 * writing into our pipe
-+	 */
-+        rc = PTR_ERR(kthread_run(mdc_changelog_send_thread, cs,
-+				 "mdc_clg_send_thread"));
-+	if (!IS_ERR_VALUE(rc)) {
-+		CDEBUG(D_CHANGELOG, "start changelog thread\n");
-+		return 0;
-+	}
- 
-         CERROR("Failed to start changelog thread: %d\n", rc);
-         OBD_FREE_PTR(cs);
-diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
-index 7ab15f9..6d6208b 100644
---- a/lustre/mdd/mdd_lfsck.c
-+++ b/lustre/mdd/mdd_lfsck.c
-@@ -2533,8 +2533,7 @@ static int mdd_lfsck_main(void *args)
- 	int			 rc;
- 	ENTRY;
- 
--	cfs_daemonize("lfsck");
--	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
-+	rc = lu_env_init(&env, LCT_MD_THREAD);
- 	if (rc != 0) {
- 		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
- 		       mdd_lfsck2name(lfsck), rc);
-@@ -2798,8 +2797,8 @@ trigger:
- 
- 	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
- 	thread_set_flags(thread, 0);
--	rc = cfs_create_thread(mdd_lfsck_main, lfsck, 0);
--	if (rc < 0)
-+	rc = PTR_ERR(kthread_run(mdd_lfsck_main, lfsck, "lfsck"));
-+	if (IS_ERR_VALUE(rc))
- 		CERROR("%s: cannot start LFSCK thread, rc = %d\n",
- 		       mdd_lfsck2name(lfsck), rc);
- 	else
-diff --git a/lustre/mdt/mdt_capa.c b/lustre/mdt/mdt_capa.c
-index 567a0f8..6e13b42 100644
---- a/lustre/mdt/mdt_capa.c
-+++ b/lustre/mdt/mdt_capa.c
-@@ -218,7 +218,7 @@ static int mdt_ck_thread_main(void *args)
-         int                     rc;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("mdt_ck");
-+	unshare_fs_struct();
-         cfs_block_allsigs();
- 
-         thread_set_flags(thread, SVC_RUNNING);
-@@ -290,18 +290,18 @@ static int mdt_ck_thread_main(void *args)
- 
- int mdt_ck_thread_start(struct mdt_device *mdt)
- {
--        struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
--        int rc;
--
--        cfs_waitq_init(&thread->t_ctl_waitq);
--        rc = cfs_create_thread(mdt_ck_thread_main, mdt, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("cannot start mdt_ck thread, rc = %d\n", rc);
--                return rc;
--        }
--
--        l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
--        return 0;
-+	struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
-+	cfs_task_t *task;
-+
-+	cfs_waitq_init(&thread->t_ctl_waitq);
-+	task = kthread_run(mdt_ck_thread_main, mdt, "mdt_ck");
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start mdt_ck thread, rc = %ld\n", PTR_ERR(task));
-+		return PTR_ERR(task);
-+	}
-+
-+	l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
-+	return 0;
- }
- 
- void mdt_ck_thread_stop(struct mdt_device *mdt)
-diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 83bd75e..b7dccf0 100644
---- a/lustre/mgc/mgc_request.c
-+++ b/lustre/mgc/mgc_request.c
-@@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
- 
- static int mgc_requeue_thread(void *data)
- {
--        char name[] = "ll_cfg_requeue";
-         int rc = 0;
-         ENTRY;
- 
--        cfs_daemonize(name);
--
-         CDEBUG(D_MGC, "Starting requeue thread\n");
- 
-         /* Keep trying failed locks periodically */
-@@ -776,20 +773,20 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
-         sptlrpc_lprocfs_cliobd_attach(obd);
- 
-         if (cfs_atomic_inc_return(&mgc_count) == 1) {
--                rq_state = 0;
--                cfs_waitq_init(&rq_waitq);
--
--                /* start requeue thread */
--                rc = cfs_create_thread(mgc_requeue_thread, NULL,
--                                       CFS_DAEMON_FLAGS);
--                if (rc < 0) {
--                        CERROR("%s: Cannot start requeue thread (%d),"
--                               "no more log updates!\n",
--                               obd->obd_name, rc);
--                        GOTO(err_cleanup, rc);
--                }
--                /* rc is the pid of mgc_requeue_thread. */
--                rc = 0;
-+		rq_state = 0;
-+		cfs_waitq_init(&rq_waitq);
-+
-+		/* start requeue thread */
-+		rc = PTR_ERR(kthread_run(mgc_requeue_thread, NULL,
-+					     "ll_cfg_requeue"));
-+		if (IS_ERR_VALUE(rc)) {
-+			CERROR("%s: Cannot start requeue thread (%d),"
-+			       "no more log updates!\n",
-+			       obd->obd_name, rc);
-+			GOTO(err_cleanup, rc);
-+		}
-+		/* rc is the task_struct pointer of mgc_requeue_thread. */
-+		rc = 0;
-         }
- 
-         RETURN(rc);
-diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
-index 781250f..e6abdc4 100644
---- a/lustre/mgs/mgs_nids.c
-+++ b/lustre/mgs/mgs_nids.c
-@@ -440,7 +440,6 @@ static int mgs_ir_notify(void *arg)
- 
-         LASSERTF(sizeof(name) < 32, "name is too large to be in stack.\n");
-         sprintf(name, "mgs_%s_notify", fsdb->fsdb_name);
--        cfs_daemonize(name);
- 
- 	complete(&fsdb->fsdb_notify_comp);
- 
-@@ -471,7 +470,7 @@ static int mgs_ir_notify(void *arg)
- int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
- 		   struct fs_db *fsdb)
- {
--        int rc;
-+	cfs_task_t *task;
- 
-         if (!ir_timeout)
-                 ir_timeout = OBD_IR_MGS_TIMEOUT;
-@@ -488,11 +487,13 @@ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
-         cfs_atomic_set(&fsdb->fsdb_notify_phase, 0);
-         cfs_waitq_init(&fsdb->fsdb_notify_waitq);
- 	init_completion(&fsdb->fsdb_notify_comp);
--        rc = cfs_create_thread(mgs_ir_notify, fsdb, CFS_DAEMON_FLAGS);
--        if (rc > 0)
-+
-+	task = kthread_run(mgs_ir_notify, fsdb,
-+			       "mgs_%s_notify", fsdb->fsdb_name);
-+	if (IS_ERR(task))
- 		wait_for_completion(&fsdb->fsdb_notify_comp);
--        else
--                CERROR("Start notify thread error %d\n", rc);
-+	else
-+		CERROR("Start notify thread error %ld\n", PTR_ERR(task));
- 
- 	mgs_nidtbl_init_fs(env, fsdb);
-         return 0;
-diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index e09f15e..6900bbc 100644
---- a/lustre/obdclass/genops.c
-+++ b/lustre/obdclass/genops.c
-@@ -1744,14 +1744,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
-  */
- static int obd_zombie_impexp_thread(void *unused)
- {
--	int rc;
--
--	rc = cfs_daemonize_ctxt("obd_zombid");
--	if (rc != 0) {
--		complete(&obd_zombie_start);
--		RETURN(rc);
--	}
--
-+	unshare_fs_struct();
- 	complete(&obd_zombie_start);
- 
- 	obd_zombie_pid = cfs_curproc_pid();
-@@ -1800,7 +1793,9 @@ int obd_zombie_impexp_kill(void *arg)
-  */
- int obd_zombie_impexp_init(void)
- {
--	int rc;
-+#ifdef __KERNEL__
-+	cfs_task_t *task;
-+#endif
- 
- 	CFS_INIT_LIST_HEAD(&obd_zombie_imports);
- 	CFS_INIT_LIST_HEAD(&obd_zombie_exports);
-@@ -1811,9 +1806,9 @@ int obd_zombie_impexp_init(void)
- 	obd_zombie_pid = 0;
- 
- #ifdef __KERNEL__
--	rc = cfs_create_thread(obd_zombie_impexp_thread, NULL, 0);
--	if (rc < 0)
--		RETURN(rc);
-+	task = kthread_run(obd_zombie_impexp_thread, NULL, "obd_zombid");
-+	if (IS_ERR(task))
-+		RETURN(PTR_ERR(task));
- 
- 	wait_for_completion(&obd_zombie_start);
- #else
-@@ -1825,9 +1820,8 @@ int obd_zombie_impexp_init(void)
-         obd_zombie_impexp_idle_cb =
-                 liblustre_register_idle_callback("obd_zombi_impexp_check",
-                                                  &obd_zombie_impexp_check, NULL);
--        rc = 0;
- #endif
--        RETURN(rc);
-+	RETURN(0);
- }
- /**
-  * stop destroy zombie import/export thread
-diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
-index 2ab3061..2cd9598 100644
---- a/lustre/obdclass/llog.c
-+++ b/lustre/obdclass/llog.c
-@@ -438,7 +438,7 @@ static int llog_process_thread_daemonize(void *arg)
- 	struct lu_env			 env;
- 	int				 rc;
- 
--	cfs_daemonize_ctxt("llog_process_thread");
-+	unshare_fs_struct();
- 
- 	/* client env has no keys, tags is just 0 */
- 	rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
-@@ -480,9 +480,9 @@ int llog_process_or_fork(const struct lu_env *env,
- 		 * init the new one in llog_process_thread_daemonize. */
- 		lpi->lpi_env = NULL;
- 		init_completion(&lpi->lpi_completion);
--		rc = cfs_create_thread(llog_process_thread_daemonize, lpi,
--				       CFS_DAEMON_FLAGS);
--		if (rc < 0) {
-+		rc = PTR_ERR(kthread_run(llog_process_thread_daemonize, lpi,
-+					     "llog_process_thread"));
-+		if (IS_ERR_VALUE(rc)) {
- 			CERROR("%s: cannot start thread: rc = %d\n",
- 			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
- 			OBD_FREE_PTR(lpi);
-diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 6e9c37b..f0ad81d 100644
---- a/lustre/osd-ldiskfs/osd_scrub.c
-+++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -1027,7 +1027,6 @@ static int osd_scrub_main(void *args)
- 	int		      rc;
- 	ENTRY;
- 
--	cfs_daemonize("OI_scrub");
- 	rc = lu_env_init(&env, LCT_DT_THREAD);
- 	if (rc != 0) {
- 		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
-@@ -1601,8 +1600,8 @@ again:
- 
- 	scrub->os_start_flags = flags;
- 	thread_set_flags(thread, 0);
--	rc = cfs_create_thread(osd_scrub_main, dev, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(osd_scrub_main, dev, "OI_scrub"));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("%.16s: cannot start iteration thread, rc = %d\n",
- 		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
- 		RETURN(rc);
-diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 073bd4b..227a6ef 100644
---- a/lustre/osp/osp_precreate.c
-+++ b/lustre/osp/osp_precreate.c
-@@ -872,15 +872,11 @@ static int osp_precreate_thread(void *_arg)
- 	struct osp_device	*d = _arg;
- 	struct ptlrpc_thread	*thread = &d->opd_pre_thread;
- 	struct l_wait_info	 lwi = { 0 };
--	char			 pname[16];
- 	struct lu_env		 env;
- 	int			 rc;
- 
- 	ENTRY;
- 
--	sprintf(pname, "osp-pre-%u", d->opd_index);
--	cfs_daemonize(pname);
--
- 	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
- 	if (rc) {
- 		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1239,7 +1235,7 @@ out:
- int osp_init_precreate(struct osp_device *d)
- {
- 	struct l_wait_info	 lwi = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 
- 	ENTRY;
- 
-@@ -1274,10 +1270,11 @@ int osp_init_precreate(struct osp_device *d)
- 	/*
- 	 * start thread handling precreation and statfs updates
- 	 */
--	rc = cfs_create_thread(osp_precreate_thread, d, 0);
--	if (rc < 0) {
--		CERROR("can't start precreate thread %d\n", rc);
--		RETURN(rc);
-+	task = kthread_run(osp_precreate_thread, d,
-+			       "osp-pre-%u", d->opd_index);
-+	if (IS_ERR(task)) {
-+		CERROR("can't start precreate thread %ld\n", PTR_ERR(task));
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
-diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index c845077..852f1ee 100644
---- a/lustre/osp/osp_sync.c
-+++ b/lustre/osp/osp_sync.c
-@@ -823,7 +823,6 @@ static int osp_sync_thread(void *_arg)
- 	struct llog_handle	*llh;
- 	struct lu_env		 env;
- 	int			 rc, count;
--	char			 pname[16];
- 
- 	ENTRY;
- 
-@@ -834,9 +833,6 @@ static int osp_sync_thread(void *_arg)
- 		RETURN(rc);
- 	}
- 
--	sprintf(pname, "osp-syn-%u", d->opd_index);
--	cfs_daemonize(pname);
--
- 	spin_lock(&d->opd_syn_lock);
- 	thread->t_flags = SVC_RUNNING;
- 	spin_unlock(&d->opd_syn_lock);
-@@ -1041,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
- 	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
- 	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
- 
--	rc = cfs_create_thread(osp_sync_thread, d, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(osp_sync_thread, d,
-+				 "osp-syn-%u", d->opd_index));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("%s: can't start sync thread: rc = %d\n",
- 		       d->opd_obd->obd_name, rc);
- 		GOTO(err_llog, rc);
-diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
-index 6ab0248..0eb47d9 100644
---- a/lustre/ptlrpc/import.c
-+++ b/lustre/ptlrpc/import.c
-@@ -1267,7 +1267,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
- 
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_imp_inval");
-+	unshare_fs_struct();
- 
-         CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
-                imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
-@@ -1337,20 +1337,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
- 		spin_unlock(&imp->imp_lock);
- 
- #ifdef __KERNEL__
--                /* bug 17802:  XXX client_disconnect_export vs connect request
--                 * race. if client will evicted at this time, we start
--                 * invalidate thread without reference to import and import can
--                 * be freed at same time. */
--                class_import_get(imp);
--                rc = cfs_create_thread(ptlrpc_invalidate_import_thread, imp,
--                                       CFS_DAEMON_FLAGS);
--                if (rc < 0) {
--                        class_import_put(imp);
--                        CERROR("error starting invalidate thread: %d\n", rc);
--                } else {
--                        rc = 0;
--                }
--                RETURN(rc);
-+		{
-+		cfs_task_t *task;
-+		/* bug 17802:  XXX client_disconnect_export vs connect request
-+		 * race. if client will evicted at this time, we start
-+		 * invalidate thread without reference to import and import can
-+		 * be freed at same time. */
-+		class_import_get(imp);
-+		task = kthread_run(ptlrpc_invalidate_import_thread, imp,
-+				     "ll_imp_inval");
-+		if (IS_ERR(task)) {
-+			class_import_put(imp);
-+			CERROR("error starting invalidate thread: %d\n", rc);
-+			rc = PTR_ERR(task);
-+		} else {
-+			rc = 0;
-+		}
-+		RETURN(rc);
-+		}
- #else
-                 ptlrpc_invalidate_import(imp);
- 
-diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
-index b42fb10..4c4ba01 100644
---- a/lustre/ptlrpc/pinger.c
-+++ b/lustre/ptlrpc/pinger.c
-@@ -306,8 +306,6 @@ static int ptlrpc_pinger_main(void *arg)
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
- 	ENTRY;
- 
--        cfs_daemonize(thread->t_name);
--
-         /* Record that the thread is running */
-         thread_set_flags(thread, SVC_RUNNING);
-         cfs_waitq_signal(&thread->t_ctl_waitq);
-@@ -402,14 +400,14 @@ int ptlrpc_start_pinger(void)
- 
- 	/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
- 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
--        rc = cfs_create_thread(ptlrpc_pinger_main,
--			       pinger_thread, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("cannot start thread: %d\n", rc);
--                OBD_FREE(pinger_thread, sizeof(*pinger_thread));
--                pinger_thread = NULL;
--                RETURN(rc);
--        }
-+	rc = PTR_ERR(kthread_run(ptlrpc_pinger_main,
-+				 pinger_thread, pinger_thread->t_name));
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("cannot start thread: %d\n", rc);
-+		OBD_FREE(pinger_thread, sizeof(*pinger_thread));
-+		pinger_thread = NULL;
-+		RETURN(rc);
-+	}
-         l_wait_event(pinger_thread->t_ctl_waitq,
-                      thread_is_running(pinger_thread), &lwi);
- 
-@@ -678,7 +676,7 @@ static int ping_evictor_main(void *arg)
-         time_t expire_time;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_evictor");
-+	unshare_fs_struct();
- 
-         CDEBUG(D_HA, "Starting Ping Evictor\n");
-         pet_state = PET_READY;
-@@ -753,18 +751,19 @@ static int ping_evictor_main(void *arg)
- 
- void ping_evictor_start(void)
- {
--        int rc;
-+	cfs_task_t *task;
- 
--        if (++pet_refcount > 1)
--                return;
-+	if (++pet_refcount > 1)
-+		return;
- 
--        cfs_waitq_init(&pet_waitq);
-+	cfs_waitq_init(&pet_waitq);
- 
--        rc = cfs_create_thread(ping_evictor_main, NULL, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                pet_refcount--;
--                CERROR("Cannot start ping evictor thread: %d\n", rc);
--        }
-+	task = kthread_run(ping_evictor_main, NULL, "ll_evictor");
-+	if (IS_ERR(task)) {
-+		pet_refcount--;
-+		CERROR("Cannot start ping evictor thread: %ld\n",
-+			PTR_ERR(task));
-+	}
- }
- EXPORT_SYMBOL(ping_evictor_start);
- 
-diff --git a/lustre/ptlrpc/ptlrpcd.c b/lustre/ptlrpc/ptlrpcd.c
-index 669b0d7..b6486e0 100644
---- a/lustre/ptlrpc/ptlrpcd.c
-+++ b/lustre/ptlrpc/ptlrpcd.c
-@@ -410,7 +410,7 @@ static int ptlrpcd(void *arg)
-         int rc, exit = 0;
-         ENTRY;
- 
--	cfs_daemonize_ctxt(pc->pc_name);
-+	unshare_fs_struct();
- #if defined(CONFIG_SMP) && \
- (defined(HAVE_CPUMASK_OF_NODE) || defined(HAVE_NODE_TO_CPUMASK))
- 	if (test_bit(LIOD_BIND, &pc->pc_flags)) {
-@@ -709,18 +709,21 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
- 
-         env = 1;
- #ifdef __KERNEL__
--        if (index >= 0) {
--                rc = ptlrpcd_bind(index, max);
--                if (rc < 0)
--                        GOTO(out, rc);
--        }
-+	{
-+		cfs_task_t *task;
-+		if (index >= 0) {
-+			rc = ptlrpcd_bind(index, max);
-+			if (rc < 0)
-+				GOTO(out, rc);
-+		}
- 
--        rc = cfs_create_thread(ptlrpcd, pc, 0);
--        if (rc < 0)
--                GOTO(out, rc);
-+		task = kthread_run(ptlrpcd, pc, pc->pc_name);
-+		if (IS_ERR(task))
-+			GOTO(out, rc = PTR_ERR(task));
- 
--        rc = 0;
--	wait_for_completion(&pc->pc_starting);
-+		rc = 0;
-+		wait_for_completion(&pc->pc_starting);
-+	}
- #else
-         pc->pc_wait_callback =
-                 liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
-diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
-index 40f16eb..4c6f20d 100644
---- a/lustre/ptlrpc/sec_gc.c
-+++ b/lustre/ptlrpc/sec_gc.c
-@@ -169,7 +169,7 @@ static int sec_gc_main(void *arg)
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *) arg;
-         struct l_wait_info    lwi;
- 
--        cfs_daemonize_ctxt("sptlrpc_gc");
-+	unshare_fs_struct();
- 
-         /* Record that the thread is running */
-         thread_set_flags(thread, SVC_RUNNING);
-@@ -222,7 +222,7 @@ again:
- int sptlrpc_gc_init(void)
- {
- 	struct l_wait_info lwi = { 0 };
--	int                rc;
-+	cfs_task_t *task;
- 
- 	mutex_init(&sec_gc_mutex);
- 	spin_lock_init(&sec_gc_list_lock);
-@@ -232,10 +232,10 @@ int sptlrpc_gc_init(void)
-         memset(&sec_gc_thread, 0, sizeof(sec_gc_thread));
-         cfs_waitq_init(&sec_gc_thread.t_ctl_waitq);
- 
--        rc = cfs_create_thread(sec_gc_main, &sec_gc_thread, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("can't start gc thread: %d\n", rc);
--                return rc;
-+	task = kthread_run(sec_gc_main, &sec_gc_thread, "sptlrpc_gc");
-+	if (IS_ERR(task)) {
-+		CERROR("can't start gc thread: %ld\n", PTR_ERR(task));
-+		return PTR_ERR(task);
-         }
- 
-         l_wait_event(sec_gc_thread.t_ctl_waitq,
-diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
-index 7e176c0..c1e23fd 100644
---- a/lustre/ptlrpc/service.c
-+++ b/lustre/ptlrpc/service.c
-@@ -2400,7 +2400,7 @@ static int ptlrpc_main(void *arg)
-         ENTRY;
- 
-         thread->t_pid = cfs_curproc_pid();
--        cfs_daemonize_ctxt(thread->t_name);
-+	unshare_fs_struct();
- 
- 	/* NB: we will call cfs_cpt_bind() for all threads, because we
- 	 * might want to run lustre server only on a subset of system CPUs,
-@@ -2599,7 +2599,7 @@ static int ptlrpc_hr_main(void *arg)
- 
- 	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
- 		 hrp->hrp_cpt, hrt->hrt_id);
--	cfs_daemonize_ctxt(threadname);
-+	unshare_fs_struct();
- 
- 	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
- 	if (rc != 0) {
-@@ -2665,15 +2665,18 @@ static int ptlrpc_start_hr_threads(void)
- 		int	rc = 0;
- 
- 		for (j = 0; j < hrp->hrp_nthrs; j++) {
--			rc = cfs_create_thread(ptlrpc_hr_main,
--					       &hrp->hrp_thrs[j],
--					       CLONE_VM | CLONE_FILES);
--			if (rc < 0)
-+			struct	ptlrpc_hr_thread *hrt = &hrp->hrp_thrs[j];
-+			rc = PTR_ERR(kthread_run(ptlrpc_hr_main,
-+						 &hrp->hrp_thrs[j],
-+						 "ptlrpc_hr%02d_%03d",
-+						 hrp->hrp_cpt,
-+						 hrt->hrt_id));
-+			if (IS_ERR_VALUE(rc))
- 				break;
- 		}
- 		cfs_wait_event(ptlrpc_hr.hr_waitq,
- 			       cfs_atomic_read(&hrp->hrp_nstarted) == j);
--		if (rc >= 0)
-+		if (!IS_ERR_VALUE(rc))
- 			continue;
- 
- 		CERROR("Reply handling thread %d:%d Failed on starting: "
-@@ -2856,12 +2859,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
- 	}
- 
- 	CDEBUG(D_RPCTRACE, "starting thread '%s'\n", thread->t_name);
--	/*
--	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
--	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
--	 */
--	rc = cfs_create_thread(ptlrpc_main, thread, CFS_DAEMON_FLAGS);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("cannot start thread '%s': rc %d\n",
- 		       thread->t_name, rc);
- 		spin_lock(&svcpt->scp_lock);
-diff --git a/lustre/quota/qmt_lock.c b/lustre/quota/qmt_lock.c
-index 9339580..1f33aef 100644
---- a/lustre/quota/qmt_lock.c
-+++ b/lustre/quota/qmt_lock.c
-@@ -716,7 +716,6 @@ static int qmt_reba_thread(void *arg)
- 	struct l_wait_info	 lwi = { 0 };
- 	struct lu_env		*env;
- 	struct lquota_entry	*lqe, *tmp;
--	char			 pname[MTI_NAME_MAXLEN];
- 	int			 rc;
- 	ENTRY;
- 
-@@ -731,9 +730,6 @@ static int qmt_reba_thread(void *arg)
- 		RETURN(rc);
- 	}
- 
--	snprintf(pname, MTI_NAME_MAXLEN, "qmt_reba_%s", qmt->qmt_svname);
--	cfs_daemonize(pname);
--
- 	thread_set_flags(thread, SVC_RUNNING);
- 	cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-@@ -773,15 +769,16 @@ int qmt_start_reba_thread(struct qmt_device *qmt)
- {
- 	struct ptlrpc_thread	*thread = &qmt->qmt_reba_thread;
- 	struct l_wait_info	 lwi    = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 	ENTRY;
- 
--	rc = cfs_create_thread(qmt_reba_thread, (void *)qmt, 0);
--	if (rc < 0) {
--		CERROR("%s: failed to start rebalance thread (%d)\n",
--		       qmt->qmt_svname, rc);
-+	task = kthread_run(qmt_reba_thread, (void *)qmt,
-+			       "qmt_reba_%s", qmt->qmt_svname);
-+	if (IS_ERR(task)) {
-+		CERROR("%s: failed to start rebalance thread (%ld)\n",
-+		       qmt->qmt_svname, PTR_ERR(task));
- 		thread_set_flags(thread, SVC_STOPPED);
--		RETURN(rc);
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(thread->t_ctl_waitq,
-diff --git a/lustre/quota/qsd_reint.c b/lustre/quota/qsd_reint.c
-index 0e0643f..6fec9e6 100644
---- a/lustre/quota/qsd_reint.c
-+++ b/lustre/quota/qsd_reint.c
-@@ -417,8 +417,6 @@ static int qsd_reint_main(void *args)
- 	int			 rc;
- 	ENTRY;
- 
--	cfs_daemonize("qsd_reint");
--
- 	CDEBUG(D_QUOTA, "%s: Starting reintegration thread for "DFID"\n",
- 	       qsd->qsd_svname, PFID(&qqi->qqi_fid));
- 
-@@ -662,8 +660,8 @@ int qsd_start_reint_thread(struct qsd_qtype_info *qqi)
- 		RETURN(0);
- 	}
- 
--	rc = cfs_create_thread(qsd_reint_main, (void *)qqi, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(qsd_reint_main, (void *)qqi, "qsd_reint"));
-+	if (IS_ERR_VALUE(rc)) {
- 		thread_set_flags(thread, SVC_STOPPED);
- 		write_lock(&qsd->qsd_lock);
- 		qqi->qqi_reint = 0;
-diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c
-index fdc1ef5..f9af987 100644
---- a/lustre/quota/qsd_writeback.c
-+++ b/lustre/quota/qsd_writeback.c
-@@ -404,7 +404,6 @@ static int qsd_upd_thread(void *arg)
- 	struct l_wait_info	 lwi;
- 	cfs_list_t		 queue;
- 	struct qsd_upd_rec	*upd, *n;
--	char			 pname[MTI_NAME_MAXLEN];
- 	struct lu_env		*env;
- 	int			 qtype, rc = 0;
- 	bool			 uptodate;
-@@ -423,9 +422,6 @@ static int qsd_upd_thread(void *arg)
- 		RETURN(rc);
- 	}
- 
--	snprintf(pname, MTI_NAME_MAXLEN, "lquota_wb_%s", qsd->qsd_svname);
--	cfs_daemonize(pname);
--
- 	thread_set_flags(thread, SVC_RUNNING);
- 	cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-@@ -487,14 +483,16 @@ int qsd_start_upd_thread(struct qsd_instance *qsd)
- {
- 	struct ptlrpc_thread	*thread = &qsd->qsd_upd_thread;
- 	struct l_wait_info	 lwi = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 	ENTRY;
- 
--	rc = cfs_create_thread(qsd_upd_thread, (void *)qsd, 0);
--	if (rc < 0) {
--		CERROR("Fail to start quota update thread. rc: %d\n", rc);
-+	task = kthread_run(qsd_upd_thread, (void *)qsd,
-+			   "lquota_wb_%s", qsd->qsd_svname);
-+	if (IS_ERR(task)) {
-+		CERROR("Fail to start quota update thread. rc: %ld\n",
-+			PTR_ERR(task));
- 		thread_set_flags(thread, SVC_STOPPED);
--		RETURN(rc);
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(thread->t_ctl_waitq,
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch b/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch
deleted file mode 100644
index cb7c8c8..0000000
--- a/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch
+++ /dev/null
@@ -1,43 +0,0 @@
-From 15e569cb19f7d46747da8ca461db0869571db0cc Mon Sep 17 00:00:00 2001
-From: Bob Glossman <bob.glossman@intel.com>
-Date: Wed, 24 Apr 2013 06:43:35 -0700
-Subject: [PATCH 12/12] LU-3179 build: fix compilation error with gcc 4.7.2
-
-use cast to resolve build warning from gcc 4.7.2
-
-Signed-off-by: Bob Glossman <bob.glossman@intel.com>
-Change-Id: I4356e621f5b9c687a6b76b12a93b664d542e1c79
----
- lustre/ptlrpc/nrs_crr.c | 2 +-
- lustre/ptlrpc/nrs_orr.c | 2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/lustre/ptlrpc/nrs_crr.c b/lustre/ptlrpc/nrs_crr.c
-index 0335bf9..6545913 100644
---- a/lustre/ptlrpc/nrs_crr.c
-+++ b/lustre/ptlrpc/nrs_crr.c
-@@ -278,7 +278,7 @@ int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
- {
- 	LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
- 
--	switch(opc) {
-+	switch((enum nrs_ctl_crr)opc) {
- 	default:
- 		RETURN(-EINVAL);
- 
-diff --git a/lustre/ptlrpc/nrs_orr.c b/lustre/ptlrpc/nrs_orr.c
-index bc4b373..5363629 100644
---- a/lustre/ptlrpc/nrs_orr.c
-+++ b/lustre/ptlrpc/nrs_orr.c
-@@ -759,7 +759,7 @@ int nrs_orr_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
- {
- 	LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
- 
--	switch(opc) {
-+	switch((enum nrs_ctl_orr)opc) {
- 	default:
- 		RETURN(-EINVAL);
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index e87c114..cb217db 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -33,18 +33,10 @@ DEPEND="${RDEPEND}
 	virtual/linux-sources"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-1812-kernel-3.7-FC18-server-patches.patch"
-	"${FILESDIR}/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
-	"${FILESDIR}/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
-	"${FILESDIR}/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
-	"${FILESDIR}/0005-LU-2800-llite-introduce-local-getname.patch"
-	"${FILESDIR}/0006-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
-	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
-	"${FILESDIR}/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch"
+	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
+	"${FILESDIR}/0002-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
+	"${FILESDIR}/0003-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0004-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-05-07 18:45 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-05-07 18:45 UTC (permalink / raw
  To: gentoo-commits

commit:     08d6e42aff4ce369e53ab99f4331f0e88b7ad118
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue May  7 18:44:44 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue May  7 18:44:44 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=08d6e42a

Update lustre patches. zfs patches was merged

Package-Manager: portage-2.2.0_alpha174
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   20 +
 ...01-LU-1812-kernel-3.7-FC18-server-patches.patch |    2 +-
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |    2 +-
 ...6-kernel-Kernel-update-for-3.7.2-201.fc18.patch |   16 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    2 +-
 ...005-LU-2800-llite-introduce-local-getname.patch |    2 +-
 .../files/0006-LU-2987-llite-rcu-free-inode.patch  |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |    2 +-
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |   10 +-
 ...7-build-zfs-0.6.1-kmod-dkms-compatibility.patch | 1121 --------------------
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |    4 +-
 ...9-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch} |    4 +-
 ...uild-fix-compilation-error-with-gcc-4.7.2.patch |   43 +
 sys-cluster/lustre/lustre-9999.ebuild              |    8 +-
 15 files changed, 91 insertions(+), 1149 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 67fe3ae..9f26c4b 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,26 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  07 May 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  +files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch,
+  -files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch,
+  files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0005-LU-2800-llite-introduce-local-getname.patch,
+  files/0006-LU-2987-llite-rcu-free-inode.patch,
+  files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  lustre-9999.ebuild:
+  Update lustre patches. zfs patches was merged
+
   07 May 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Fix quotation issues with server
 

diff --git a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch b/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
index dc7f5aa..f773a7b 100644
--- a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
+++ b/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
@@ -1,4 +1,4 @@
-From 65c212c034f632513cd0e4afe6830698b8450e27 Mon Sep 17 00:00:00 2001
+From 91315157587f3392b6cf43ea286b0f3ce1e7f94f Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Thu, 2 May 2013 07:54:50 -0400
 Subject: [PATCH 01/12] LU-1812 kernel: 3.7/FC18 server patches

diff --git a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
index ea382a8..7d24cf8 100644
--- a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -1,4 +1,4 @@
-From 9798799dc437a49e099ee3e2a4056dbab29f7664 Mon Sep 17 00:00:00 2001
+From c81da9c214f1b32aa9657df42288a9c25e63c434 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:14:09 +0800
 Subject: [PATCH 02/12] LU-2686 kernel: sock_map_fd() replaced by

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index b9e3865..95ef999 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,4 +1,4 @@
-From eb644ae44a7a7c1884ff9bb8b384730cedc17175 Mon Sep 17 00:00:00 2001
+From 025fda5f3a44942e7c87f180fc7275529e5405fa Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:04:22 +0800
 Subject: [PATCH 03/12] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
@@ -16,20 +16,20 @@ Change-Id: Id90e091fef63ebf5bb8e7765969aa3148cc31aa2
  5 files changed, 32 insertions(+), 18 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 79bcd65..bfec407 100644
+index 1cc3b48..7b8a096 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -84,7 +84,7 @@ all-am: modules
  modules: $(DEP) all-sources
- 	$(MAKE) CC="$(CC)" -C $(LINUX_OBJ)			     \
+ 	$(MAKE) CC="$(CC)" $(CROSS_VARS) -C $(LINUX_OBJ)	     \
  	-f $(PWD)/build/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) \
--        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
+-	LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
 +        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
  	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index ec77262..fe4f4da 100644
+index b08ae65..a78bfe3 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -85,13 +85,13 @@ index ec77262..fe4f4da 100644
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-@@ -312,7 +316,8 @@ $2
+@@ -344,7 +348,8 @@ $2
  AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
  [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
  rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
--AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
+-AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
 +SUBARCH=$(echo $target_cpu | sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/')
-+AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
++AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $CROSS_VARS $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
  	[$4],
  	[_AC_MSG_LOG_CONFTEST
  m4_ifvaln([$5],[$5])dnl])

diff --git a/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 9255c65..04bac71 100644
--- a/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,4 +1,4 @@
-From 1f4b6325b84ae71aca272904452c7751c84e1870 Mon Sep 17 00:00:00 2001
+From ceccbd0ba0715d45702d26f3a459435906b9dbf2 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
 Subject: [PATCH 04/12] LU-2850 compat: posix_acl_{to,from}_xattr take

diff --git a/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
index c66cea0..9dfae36 100644
--- a/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
@@ -1,4 +1,4 @@
-From 385173f27cbda04a7fef76ee37e20b8cbd810036 Mon Sep 17 00:00:00 2001
+From 9248d7b04b67f683ac2a04b35793790047b50ab7 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
 Subject: [PATCH 05/12] LU-2800 llite: introduce local getname()

diff --git a/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
index 7899dec..f55f693 100644
--- a/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
@@ -1,4 +1,4 @@
-From 8b87cde85f26ebf1a3607db89b406681b1e66721 Mon Sep 17 00:00:00 2001
+From fe7ac0140ddb8fe5b8b046d857ed018ac9dc6335 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
 Subject: [PATCH 06/12] LU-2987 llite: rcu-free inode

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 487e6bf..4ce5b1f 100644
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,4 +1,4 @@
-From ca0935ac2c329ceab8e52681e688947b44a06f25 Mon Sep 17 00:00:00 2001
+From 019311dd1ae9e97336748f016afd2581d8ecc213 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 17 Apr 2013 13:27:55 +0400
 Subject: [PATCH 07/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 7c43e97..3094ef4 100644
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,4 +1,4 @@
-From 6788eaaadcd9e1cc48f991c4d120cf0665bf02bf Mon Sep 17 00:00:00 2001
+From 3440a08d1e950bddff32304ea1ba919d63ae47be Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 23 Apr 2013 10:18:04 -0400
 Subject: [PATCH 08/12] LU-2850 kernel: 3.8 upstream kills daemonize()

diff --git a/sys-cluster/lustre/files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 91%
rename from sys-cluster/lustre/files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 6b02321..dbfda90 100644
--- a/sys-cluster/lustre/files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From 9988e7ade168cf979b02e0cd840cf86b0e696666 Mon Sep 17 00:00:00 2001
+From a48ffc03f6d9630e66720089ed01c9f4f1ec10fc Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 10/12] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 09/12] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -14,17 +14,17 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  1 file changed, 58 insertions(+), 8 deletions(-)
 
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index fe4f4da..0ab7cdb 100644
+index a78bfe3..d8451e0 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
-@@ -330,14 +330,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -362,14 +362,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],
 -         [AC_MSG_CHECKING([Linux kernel architecture])
 -          AS_IF([rm -f $PWD/build/arch
 -                 make -s --no-print-directory echoarch -f $PWD/build/Makefile \
--                     LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -C $LINUX \
+-                     LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -C $LINUX $CROSS_VARS  \
 -                     ARCHFILE=$PWD/build/arch && LINUX_ARCH=`cat $PWD/build/arch`],
 -                [AC_MSG_RESULT([$LINUX_ARCH])],
 -                [AC_MSG_ERROR([Could not determine the kernel architecture.])])

diff --git a/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
deleted file mode 100644
index f7625d3..0000000
--- a/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ /dev/null
@@ -1,1121 +0,0 @@
-From be658d898d8985782db9aba0c0c65834507938fc Mon Sep 17 00:00:00 2001
-From: Brian Behlendorf <behlendorf1@llnl.gov>
-Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 09/12] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
-
-With the release of zfs-0.6.1 the default install location of
-the zfs kmod headers and objects has changed.  The kmod headers
-which are common for a zfs version are now installed under
-/usr/src/zfs-<version>/ path.  The objects, which are kernel
-specific, are installed under /usr/src/zfs-<version>/<kernel>/.
-
-This was done just prior to the official 0.6.1 release because
-this scheme satisfies the packaging requirements of the major
-distributions.  Making the change now means we shouldn't need
-to change it again.
-
-To accomidate this change the lustre-build-zfs.m4 has been
-updated in the following ways:
-
-* The new zfs header and object paths were added to the list
-  of default search paths.  The DKMS build paths were also added
-  to allow compilation against zfs-kmod or zfs-dkms packages.
-
-* Support for building the spl and zfs code recursively as
-  part of the Lustre build process was removed.
-
-* The lustre-osd-zfs packages 'Requires' line was changed to
-  require zfs-kmod.  Either the zfs-kmod or zfs-dkms packages
-  can be used to satisfy this requirement.
-
-* Fix incorrect usage of @ZFS_OBJ@ in osd-zfs/Makefile.in,
-  the include directory us under @ZFS@ with the headers.
-  These happens to be the same location before so it never
-  caused issues.
-
-* EXTRA_LIBZFS_INCLUDE renamed ZFS_LIBZFS_INCLUDE, this was
-  done for consistency.
-
-* Failing to build ldiskfs should not automatically disable
-  all server support.  The zfs osd may still be buildable.
-
-* General m4 cleanup and simplification of lustre-build-zfs.m4.
-
-* Ensure new zfs/spl build correctly with lbuild.
-
-Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
-Change-Id: Ib686211c4f9ace39a41053ce8a20112d1121def9
-Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
----
- autoMakefile.am                |   2 +-
- config/lustre-build-ldiskfs.m4 |   1 -
- config/lustre-build-zfs.m4     | 731 ++++++++++++++++++-----------------------
- contrib/lbuild/lbuild          | 147 +++++----
- lustre.spec.in                 |   2 +-
- lustre/osd-zfs/Makefile.in     |   3 +-
- lustre/utils/Makefile.am       |   6 +-
- 7 files changed, 407 insertions(+), 485 deletions(-)
-
-diff --git a/autoMakefile.am b/autoMakefile.am
-index bfec407..27e16c1 100644
---- a/autoMakefile.am
-+++ b/autoMakefile.am
-@@ -1,4 +1,4 @@
--SUBDIRS := @LDISKFS_SUBDIR@ @SPL_SUBDIR@ @ZFS_SUBDIR@ . @LIBSYSIO_SUBDIR@ @SNMP_SUBDIR@ @LUSTREIOKIT_SUBDIR@ @LIBCFS_SUBDIR@ lnet lustre
-+SUBDIRS := @LDISKFS_SUBDIR@ . @LIBSYSIO_SUBDIR@ @SNMP_SUBDIR@ @LUSTREIOKIT_SUBDIR@ @LIBCFS_SUBDIR@ lnet lustre
- DIST_SUBDIRS := @LDISKFS_DIST_SUBDIR@ @SNMP_DIST_SUBDIR@ libsysio lustre-iokit @LIBCFS_SUBDIR@ lnet lustre config contrib
- SOURCES_SUBDIRS := @LIBCFS_SUBDIR@ lnet lustre
- RPM_SUBDIRS := @LDISKFS_SUBDIR@ @LUSTREIOKIT_SUBDIR@
-diff --git a/config/lustre-build-ldiskfs.m4 b/config/lustre-build-ldiskfs.m4
-index d619d7c..f29fd39 100644
---- a/config/lustre-build-ldiskfs.m4
-+++ b/config/lustre-build-ldiskfs.m4
-@@ -189,7 +189,6 @@ else
- fi
- 
- if test x$enable_ldiskfs_build = xno; then
--	enable_server='no'
- 	enable_ldiskfs_build='no'
- 	with_ldiskfs='no'
- 	LDISKFS_SUBDIR=
-diff --git a/config/lustre-build-zfs.m4 b/config/lustre-build-zfs.m4
-index bfc647f..507afd8 100644
---- a/config/lustre-build-zfs.m4
-+++ b/config/lustre-build-zfs.m4
-@@ -1,445 +1,350 @@
--#
--# LB_PATH_SPL
--#
--# --with-spl      - Enable spl support and attempt to autodetect the spl
--# --with-spl=yes    headers in one of the following places in this order:
--#                   * ./spl
--#                   * /usr/src/spl-*/$LINUXRELEASE
--#                   * ../spl
--#
--# --with-spl=path - Enable spl support and use the spl headers in the
--#                   provided path.  No autodetection is performed.
--#
--# --with-spl-obj  - When spl support is enabled the object directory
--#                   will be based on the --with-spl directory.  If this
--#                   is detected incorrectly it can be explicitly
--#                   specified using this option.
--#
--# NOTE: As with all external packages spl is expected to already be
--# configured and built.  However, if the spl tree is located in-tree
--# (./spl) then it will be configured and built recursively as part of
--# the lustre build system.
--#
--AC_DEFUN([LB_PATH_SPL],
--[
--AC_ARG_WITH([spl],
--	AC_HELP_STRING([--with-spl=path], [set path to spl sources]),
--	[],[
--		if test x$enable_server = xyes && test x$enable_dist = xno; then
--			with_spl='yes'
--		else
--			with_spl='no'
--		fi
-+dnl #
-+dnl # Supported configure options.  When no options are specified support
-+dnl # for ZFS OSDs will be autodetected assuming server support is enabled.
-+dnl # If the ZFS OSD cannot be built support for it is disabled and a
-+dnl # warning is issued but the configure process is allowed to continue.
-+dnl #
-+dnl # --without-zfs   - Disable zfs support.
-+dnl # --with-zfs=no
-+dnl #
-+dnl # --with-zfs      - Enable zfs support and attempt to autodetect the zfs
-+dnl # --with-zfs=yes    headers in one of the following places.  Because zfs
-+dnl #                   support was explicitly required if the headers cannot
-+dnl #                   be located it is treated as a fatal error.
-+dnl #
-+dnl #                       * /var/lib/dkms/zfs/${VERSION}/build
-+dnl #                       * /usr/src/zfs-${VERSION}/${LINUXRELEASE}
-+dnl #                       * /usr/src/zfs-${VERSION}
-+dnl #                       * ../spl/
-+dnl #                       * $LINUX
-+dnl #
-+dnl # --with-zfs=path - Enable zfs support and use the zfs headers in the
-+dnl #                   provided path.  No autodetection is performed and
-+dnl #                   if no headers are found this is a fatal error.
-+dnl #
-+dnl # --with-zfs-obj  - When zfs support is enabled the object directory
-+dnl #                   will be based on the --with-zfs directory.  If this
-+dnl #                   is detected incorrectly it can be explicitly
-+dnl #                   specified using this option.
-+dnl #
-+dnl # --without-spl   - Disable spl support.
-+dnl # --with-spl=no
-+dnl #
-+dnl # --with-spl      - Enable spl support and attempt to autodetect the spl
-+dnl # --with-spl=yes    headers in one of the following places in this order:
-+dnl #                   * /var/lib/dkms/spl/${VERSION}/build
-+dnl #                   * /usr/src/spl-${VERSION}/${LINUXRELEASE}
-+dnl #                   * /usr/src/spl-${VERSION}
-+dnl #                   * ../spl/
-+dnl #                   * $LINUX
-+dnl #
-+dnl # --with-spl=path - Enable spl support and use the spl headers in the
-+dnl #                   provided path.  No autodetection is performed.
-+dnl #
-+dnl # --with-spl-obj  - When spl support is enabled the object directory
-+dnl #                   will be based on the --with-spl directory.  If this
-+dnl #                   is detected incorrectly it can be explicitly
-+dnl #                   specified using this option.
-+dnl #
-+AC_DEFUN([LB_SPL], [
-+	AC_ARG_WITH([spl],
-+		AS_HELP_STRING([--with-spl=PATH],
-+		[Path to spl source]),
-+		[splsrc="$withval"])
-+
-+	AC_ARG_WITH([spl-obj],
-+		AS_HELP_STRING([--with-spl-obj=PATH],
-+		[Path to spl build objects]),
-+		[splobj="$withval"])
-+
-+	dnl #
-+	dnl # The existence of spl.release[.in] is used to identify a valid
-+	dnl # source directory.  In order of preference:
-+	dnl #
-+	splver=$(ls -1 /usr/src/ | grep -m1 spl | cut -f2 -d'-')
-+	splsrc0="/var/lib/dkms/spl/${splver}/build"
-+	splsrc1="/usr/src/spl-${splver}/${LINUXRELEASE}"
-+	splsrc2="/usr/src/spl-${splver}"
-+	splsrc3="../spl/"
-+	splsrc4="$LINUX"
-+
-+	AC_MSG_CHECKING([spl source directory])
-+	AS_IF([test -z "${splsrc}"], [
-+		AS_IF([test -e "${splsrc0}/spl.release.in"], [
-+			splsrc=${splsrc0}
-+		], [test -e "${splsrc1}/spl.release.in"], [
-+			splsrc=${splsrc1}
-+		], [test -e "${splsrc2}/spl.release.in"], [
-+			splsrc=${splsrc2}
-+		], [test -e "${splsrc3}/spl.release.in"], [
-+			splsrc=$(readlink -f "${splsrc3}")
-+		], [test -e "${splsrc4}/spl.release.in"], [
-+			splsrc=${splsrc4}
-+		], [
-+			splsrc="[Not found]"
-+		])
- 	])
-+	AC_MSG_RESULT([$splsrc])
- 
--case x$with_spl in
--	xno)
--		AC_MSG_ERROR([spl must be enabled when building zfs.])
--		;;
--	xyes)
--		SPL_DIR=
--
--		# Check ./spl
--		spl_src=$PWD/spl
--		if test -e "$spl_src"; then
--			SPL_DIR=$(readlink -f $spl_src)
--		else
--			# Check /usr/src/spl-*/$LINUXRELEASE
--			spl_src=$(ls -1d /usr/src/spl-*/$LINUXRELEASE \
--			          2>/dev/null | tail -1)
--			if test -e "$spl_src"; then
--				SPL_DIR=$(readlink -f $spl_src)
--			else
--				# Check ../spl
--				spl_src=$PWD/../spl
--				if test -e "$spl_src"; then
--					SPL_DIR=$(readlink -f $spl_src)
--				else
--					# Fatal spl required for zfs builds
--					AC_MSG_ERROR([Could not locate spl.])
--				fi
--			fi
--		fi
--
--		;;
--	*)
--		SPL_DIR=$(readlink -f $with_spl)
--		with_spl='yes'
--		;;
--esac
--
--AC_ARG_WITH([spl-obj],
--	AC_HELP_STRING([--with-spl-obj=path], [set path to spl objects]),
--	[
--		if test x$with_spl = xyes; then
--			SPL_OBJ="$withval"
--		fi
--	],[
--		if test x$with_spl = xyes; then
--			SPL_OBJ=$SPL_DIR
--		fi
-+	AS_IF([test ! -e "$splsrc/spl.release" &&
-+	    test ! -e "$splsrc/spl.release.in"], [
-+		enable_zfs=no
- 	])
- 
--AC_MSG_CHECKING([spl source directory])
--AC_MSG_RESULT([$SPL_DIR])
--AC_SUBST(SPL_DIR)
--
--AC_MSG_CHECKING([spl object directory])
--AC_MSG_RESULT([$SPL_OBJ])
--AC_SUBST(SPL_OBJ)
--
--LB_SPL_SYMVERS
--LB_SPL_RELEASE
--])
-+	dnl #
-+	dnl # The existence of the spl_config.h is used to identify a valid
-+	dnl # spl object directory.  In many cases the object and source
-+	dnl # directory are the same, however the objects may also reside
-+	dnl # is a subdirectory named after the kernel version.
-+	dnl #
-+	AC_MSG_CHECKING([spl build directory])
-+	AS_IF([test -z "$splobj"], [
-+		AS_IF([test -e "${splsrc}/${LINUXRELEASE}/spl_config.h"], [
-+			splobj="${splsrc}/${LINUXRELEASE}"
-+		], [test -e "${splsrc}/spl_config.h"], [
-+			splobj="${splsrc}"
-+		], [
-+			splobj="[Not found]"
-+		])
-+	])
-+	AC_MSG_RESULT([$splobj])
- 
--#
--# LB_SPL_BUILD
--#
--# Optionally configure/make the spl sources.  If the sources are
--# determined to reside in-tree this feature will automatically be
--# enabled.  If the sources are not in-tree it will be disabled.
--# Use --enable-spl-build or --disable-spl-build if you need to
--# override this behavior.
--#
--AC_DEFUN([LB_SPL_BUILD],
--[
--AC_ARG_ENABLE([spl-build],
--	AC_HELP_STRING([--enable-spl-build], [enable spl configure/make]),
--	[], [
--		SPL_DIR_INTREE=$(readlink -f $PWD/spl)
--		if test x$SPL_DIR = x$SPL_DIR_INTREE; then
--			enable_spl_build='yes'
--		else
--			enable_spl_build='no'
--		fi
-+	AS_IF([test ! -e "$splobj/spl_config.h"], [
-+		enable_zfs=no
- 	])
- 
--AC_MSG_CHECKING([whether to build spl])
--if test x$enable_spl_build = xyes; then
--	AC_MSG_RESULT([$enable_spl_build])
-+	dnl #
-+	dnl # Verify the source version using SPL_META_VERSION in spl_config.h
-+	dnl #
-+	AS_IF([test x$enable_zfs = xyes], [
-+		AC_MSG_CHECKING([spl source version])
-+		AS_IF([fgrep -q SPL_META_VERSION $splobj/spl_config.h], [
-+			splver=$((echo "#include <spl_config.h>";
-+			    echo "splver=SPL_META_VERSION-SPL_META_RELEASE") |
-+			    cpp -I $splobj |
-+			    grep "^splver=" | tr -d \" | cut -d= -f2)
-+		], [
-+			splver="[Not found]"
-+			enable_zfs=no
-+		])
-+		AC_MSG_RESULT([$splver])
-+	])
- 
--	LB_CHECK_FILE([$SPL_DIR/module/spl/spl-generic.c], [], [
--		AC_MSG_ERROR([Complete spl source must exist when building.])])
-+	dnl #
-+	dnl # Verify the modules systems exist by the expect name.
-+	dnl #
-+	AS_IF([test x$enable_zfs = xyes], [
-+		AC_MSG_CHECKING([spl file name for module symbols])
-+		AS_IF([test -r $splobj/$SYMVERFILE], [
-+			splsym=$SYMVERFILE
-+		], [test -r $splobj/module/$SYMVERFILE], [
-+			splsym=$SYMVERFILE
-+		], [
-+			splsym="[Not found]"
-+			enable_zfs=no
-+		])
-+		AC_MSG_RESULT([$splsym])
-+	])
- 
--	LB_CHECK_FILE([$SPL_DIR/configure], [], [
--		AC_MSG_ERROR([Complete spl source must exist when building.])])
-+	SPL=${splsrc}
-+	SPL_OBJ=${splobj}
-+	SPL_VERSION=${splver}
-+	SPL_SYMBOLS=${splsym}
- 
--	SPL_SUBDIR="$SPL_DIR"
--	AC_SUBST(SPL_SUBDIR)
--	AC_CONFIG_SUBDIRS("spl")
--else
--	enable_spl_build='no'
--	AC_MSG_RESULT([$enable_spl_build])
--fi
-+	AC_SUBST(SPL)
-+	AC_SUBST(SPL_OBJ)
-+	AC_SUBST(SPL_VERSION)
-+	AC_SUBST(SPL_SYMBOLS)
- ])
- 
--#
--# LB_SPL_SYMVERS
--#
--AC_DEFUN([LB_SPL_SYMVERS],
--[
--AC_MSG_CHECKING([spl module symbols])
--if test -r $SPL_OBJ/Module.symvers; then
--	SPL_SYMBOLS=Module.symvers
--elif test -r $SPL_OBJ/Modules.symvers; then
--	SPL_SYMBOLS=Modules.symvers
--elif test -r $SPL_OBJ/module/Module.symvers; then
--	SPL_SYMBOLS=Module.symvers
--elif test -r $SPL_OBJ/module/Modules.symvers; then
--	SPL_SYMBOLS=Modules.symvers
--else
--	SPL_SYMBOLS=$SYMVERFILE
--fi
--
--AC_MSG_RESULT([$SPL_SYMBOLS])
--AC_SUBST(SPL_SYMBOLS)
--])
-+AC_DEFUN([LB_ZFS], [
-+	AC_ARG_WITH([zfs-obj],
-+		AS_HELP_STRING([--with-zfs-obj=PATH],
-+		[Path to zfs build objects]),
-+		[zfsobj="$withval"])
-+
-+	dnl #
-+	dnl # The existence of zfs.release[.in] is used to identify a valid
-+	dnl # source directory.  In order of preference:
-+	dnl #
-+	zfsver=$(ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-')
-+	zfssrc0="/var/lib/dkms/zfs/${zfsver}/build"
-+	zfssrc1="/usr/src/zfs-${zfsver}/${LINUXRELEASE}"
-+	zfssrc2="/usr/src/zfs-${zfsver}"
-+	zfssrc3="../zfs/"
-+	zfssrc4="$LINUX"
- 
--#
--# LB_SPL_RELEASE
--#
--AC_DEFUN([LB_SPL_RELEASE],
--[
--AC_MSG_CHECKING([spl source release])
--if test -r $SPL_OBJ/spl_config.h; then
--	tmp_flags="$EXTRA_KCFLAGS"
--	EXTRA_KCFLAGS="-I$SPL_DIR $EXTRA_KCFLAGS"
--	LB_LINUX_TRY_MAKE([
--		#include <$SPL_OBJ/spl_config.h>
--	],[
--		char *SPL_RELEASE;
--		SPL_RELEASE=SPL_META_VERSION;
--	],[
--		$makerule LUSTRE_KERNEL_TEST=conftest.i
--	],[
--		test -s build/conftest.i
--	],[
--		eval $(grep "SPL_RELEASE=" build/conftest.i)
--	],[
--		AC_MSG_RESULT([unknown])
--		AC_MSG_ERROR([Could not preprocess test program.])
-+	AC_MSG_CHECKING([zfs source directory])
-+	AS_IF([test -z "${zfssrc}"], [
-+		AS_IF([test -e "${zfssrc0}/zfs.release.in"], [
-+			zfssrc=${zfssrc0}
-+		], [test -e "${zfssrc1}/zfs.release.in"], [
-+			zfssrc=${zfssrc1}
-+		], [test -e "${zfssrc2}/zfs.release.in"], [
-+			zfssrc=${zfssrc2}
-+		], [test -e "${zfssrc3}/zfs.release.in"], [
-+			zfssrc=$(readlink -f "${zfssrc3}")
-+		], [test -e "${zfssrc4}/zfs.release.in"], [
-+			zfssrc=${zfssrc4}
-+		], [
-+			zfssrc="[Not found]"
-+		])
- 	])
--	EXTRA_KCFLAGS="$tmp_flags"
--	rm build/conftest.i
--elif test -r $SPL_DIR/META; then
--	SPL_RELEASE=$(awk '/Version/ { print [$]2 }' $SPL_DIR/META)
--else
--	AC_MSG_RESULT([unknown])
--	AC_MSG_ERROR([Could not locate spl_config.h or META to check release.])
--fi
--
--if test x$SPL_RELEASE = x; then
--	AC_MSG_RESULT([unknown])
--	AC_MSG_ERROR([Could not determine spl release.])
--fi
--
--AC_MSG_RESULT([$SPL_RELEASE])
--AC_SUBST(SPL_RELEASE)
--])
--
-+	AC_MSG_RESULT([$zfssrc])
- 
--#
--# LB_PATH_ZFS
--#
--# --without-zfs   - Disable zfs support.
--# --with-zfs=no
--#
--# --with-zfs      - Enable zfs support and attempt to autodetect the zfs
--# --with-zfs=yes    headers in one of the following places in this order:
--#                   * ./zfs
--#                   * /usr/src/zfs-*/$LINUXRELEASE
--#                   * ../zfs
--#
--# --with-zfs=path - Enable zfs support and use the zfs headers in the
--#                   provided path.  No autodetection is performed.
--#
--# --with-zfs-obj  - When zfs support is enabled the object directory
--#                   will be based on the --with-zfs directory.  If this
--#                   is detected incorrectly it can be explicitly
--#                   specified using this option.
--#
--# NOTE: As with all external packages zfs is expected to already be
--# configured and built.  However, if the zfs tree is located in-tree
--# (./zfs) then it will be configured and built recursively as part of
--# the lustre build system.
--#
--AC_DEFUN([LB_PATH_ZFS],
--[
--AC_ARG_WITH([zfs],
--	AC_HELP_STRING([--with-zfs=path], [set path to zfs sources]),
--	[],[
--		if test x$enable_server = xyes && test x$enable_dist = xno; then
--			with_zfs='yes'
--		else
--			with_zfs='no'
--		fi
-+	AS_IF([test ! -e "$zfssrc/zfs.release.in" &&
-+	    test ! -e "$zfssrc/zfs.release"], [
-+		enable_zfs=no
- 	])
- 
--case x$with_zfs in
--	xno)
--		ZFS_DIR=
--		;;
--	xyes)
--		ZFS_DIR=
--
--		# Check ./zfs
--		zfs_src=$PWD/zfs
--		if test -e "$zfs_src"; then
--			ZFS_DIR=$(readlink -f $zfs_src)
--		else
--			# Check /usr/src/zfs-*/$LINUXRELEASE
--			zfs_src=$(ls -1d /usr/src/zfs-*/$LINUXRELEASE \
--				2>/dev/null|tail -1)
--			if test -e "$zfs_src"; then
--				ZFS_DIR=$(readlink -f $zfs_src)
--			else
--				# Check ../zfs
--				zfs_src=$PWD/../zfs
--				if test -e "$zfs_src"; then
--					ZFS_DIR=$(readlink -f $zfs_src)
--				else
--					# Disable zfs failed to detect sources
--					with_zfs='no'
--				fi
--			fi
--		fi
--		;;
--	*)
--		ZFS_DIR=$(readlink -f $with_zfs)
--		with_zfs='yes'
--		;;
--esac
--
--AC_MSG_CHECKING([whether to enable zfs])
--AC_MSG_RESULT([$with_zfs])
--
--if test x$with_zfs = xyes; then
--	AC_MSG_CHECKING([for location of zfs library headers])
--	if test -e "$ZFS_DIR/include/libzfs.h"; then
--		EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I $ZFS_DIR/lib/libspl/include -I $ZFS_DIR/include"
--		AC_MSG_RESULT([$ZFS_DIR])
--	elif test -e "$ZFS_DIR/libzfs/libzfs.h"; then
--		EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I $ZFS_DIR/libspl -I $ZFS_DIR/libzfs"
--		AC_MSG_RESULT([$ZFS_DIR])
--	elif test -e "/usr/include/libzfs/libzfs.h"; then
--		AC_MSG_RESULT([/usr/include])
--		EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I /usr/include/libspl -I /usr/include/libzfs"
--	else
--		AC_MSG_RESULT([unknown])
--		AC_MSG_ERROR([Could not locate zfs library headers.])
--	fi
--	AC_SUBST(EXTRA_LIBZFS_INCLUDE)
--fi
--
--AC_ARG_WITH([zfs-obj],
--	AC_HELP_STRING([--with-zfs-obj=path], [set path to zfs objects]),
--	[
--		if test x$with_zfs = xyes; then
--			ZFS_OBJ="$withval"
--		fi
--	],[
--		if test x$with_zfs = xyes; then
--			ZFS_OBJ=$ZFS_DIR
--		fi
-+	dnl #
-+	dnl # The existence of the zfs_config.h is used to identify a valid
-+	dnl # zfs object directory.  In many cases the object and source
-+	dnl # directory are the same, however the objects may also reside
-+	dnl # is a subdirectory named after the kernel version.
-+	dnl #
-+	AC_MSG_CHECKING([zfs build directory])
-+	AS_IF([test -z "$zfsobj"], [
-+		AS_IF([test -e "${zfssrc}/${LINUXRELEASE}/zfs_config.h"], [
-+			zfsobj="${zfssrc}/${LINUXRELEASE}"
-+		], [test -e "${zfssrc}/zfs_config.h"], [
-+			zfsobj="${zfssrc}"
-+		], [
-+			zfsobj="[Not found]"
-+		])
- 	])
- 
--if test x$with_zfs = xyes; then
--	LB_ZFS_DEFINE_OPTIONS
--
--	AC_MSG_CHECKING([zfs source directory])
--	AC_MSG_RESULT([$ZFS_DIR])
--	AC_SUBST(ZFS_DIR)
--
--	AC_MSG_CHECKING([zfs object directory])
--	AC_MSG_RESULT([$ZFS_OBJ])
--	AC_SUBST(ZFS_OBJ)
-+	AC_MSG_RESULT([$zfsobj])
-+	AS_IF([test ! -e "$zfsobj/zfs_config.h"], [
-+		enable_zfs=no
-+	])
- 
--	LB_ZFS_SYMVERS
--	LB_ZFS_RELEASE
-+	dnl #
-+	dnl # Verify the source version using SPL_META_VERSION in spl_config.h
-+	dnl #
-+	AS_IF([test x$enable_zfs = xyes], [
-+		AC_MSG_CHECKING([zfs source version])
-+		AS_IF([fgrep -q ZFS_META_VERSION $zfsobj/zfs_config.h], [
-+			zfsver=$((echo "#include <zfs_config.h>";
-+			    echo "zfsver=ZFS_META_VERSION-ZFS_META_RELEASE") |
-+			    cpp -I $zfsobj |
-+			    grep "^zfsver=" | tr -d \" | cut -d= -f2)
-+		],[
-+			zfsver="[Not found]"
-+			enable_zfs=no
-+		])
-+		AC_MSG_RESULT([$zfsver])
-+	])
- 
--	LB_PATH_SPL
-+	dnl #
-+	dnl # Verify the modules systems exist by the expect name.
-+	dnl #
-+	AS_IF([test x$enable_zfs = xyes], [
-+		AC_MSG_CHECKING([zfs file name for module symbols])
-+		AS_IF([test -r $zfsobj/$SYMVERFILE], [
-+			zfssym=$SYMVERFILE
-+		], [test -r $zfsobj/module/$SYMVERFILE], [
-+			zfssym=$SYMVERFILE
-+		], [
-+			zfssym="[Not found]"
-+			enable_zfs=no
-+		])
-+		AC_MSG_RESULT([$zfssym])
-+	])
- 
--	LB_SPL_BUILD
--	LB_ZFS_BUILD
--fi
-+	ZFS=${zfssrc}
-+	ZFS_OBJ=${zfsobj}
-+	ZFS_VERSION=${zfsver}
-+	ZFS_SYMBOLS=${zfssym}
- 
--AM_CONDITIONAL(SPL_BUILD, test x$enable_spl_build = xyes)
--AM_CONDITIONAL(ZFS_BUILD, test x$enable_zfs_build = xyes)
--AM_CONDITIONAL(ZFS_ENABLED, test x$with_zfs = xyes)
-+	AC_SUBST(ZFS)
-+	AC_SUBST(ZFS_OBJ)
-+	AC_SUBST(ZFS_VERSION)
-+	AC_SUBST(ZFS_SYMBOLS)
- ])
- 
--#
--# LB_ZFS_BUILD
--#
--# Optionally configure/make the zfs sources.  If the sources are
--# determined to reside in-tree this feature will automatically be
--# enabled.  If the sources are not in-tree it will be disabled.
--# Use --enable-zfs-build or --disable-zfs-build if you need to
--# override this behavior.
--#
--AC_DEFUN([LB_ZFS_BUILD],
--[
--AC_ARG_ENABLE([zfs-build],
--	AC_HELP_STRING([--enable-zfs-build], [enable zfs configure/make]),
--	[], [
--		ZFS_DIR_INTREE=$(readlink -f $PWD/zfs)
--		if test x$ZFS_DIR = x$ZFS_DIR_INTREE; then
--			enable_zfs_build='yes'
--		else
--			enable_zfs_build='no'
--		fi
-+AC_DEFUN([LB_ZFS_USER], [
-+	dnl #
-+	dnl # Detect user space zfs development headers.
-+	dnl #
-+	AC_MSG_CHECKING([zfs devel headers])
-+	AS_IF([test -d /usr/include/libzfs && test -d /usr/include/libspl], [
-+		zfslib="-I /usr/include/libspl -I /usr/include/libzfs"
-+	], [
-+		zfslib="[Not found]"
-+		enable_zfs=no
- 	])
-+	AC_MSG_RESULT([$zfslib])
- 
--AC_MSG_CHECKING([whether to build zfs])
--if test x$enable_zfs_build = xyes; then
--	AC_MSG_RESULT([$enable_zfs_build])
--
--	LB_CHECK_FILE([$ZFS_DIR/module/zfs/dmu.c], [], [
--		AC_MSG_ERROR([Complete zfs sources must exist when building.])])
--
--	LB_CHECK_FILE([$ZFS_DIR/configure], [], [
--		AC_MSG_ERROR([Complete zfs sources must exist when building.])])
--
--	ZFS_SUBDIR="$ZFS_DIR"
--	AC_SUBST(ZFS_SUBDIR)
--	AC_CONFIG_SUBDIRS("zfs")
--
--	ac_configure_args="$ac_configure_args --with-spl=$SPL_DIR"
--	ac_configure_args="$ac_configure_args --with-spl-obj=$SPL_OBJ"
--else
--	enable_zfs_build='no'
--	AC_MSG_RESULT([$enable_zfs_build])
--fi
-+	ZFS_LIBZFS_INCLUDE=${zfslib}
-+	AC_SUBST(ZFS_LIBZFS_INCLUDE)
- ])
- 
--#
--# LB_ZFS_SYMVERS
--#
--AC_DEFUN([LB_ZFS_SYMVERS],
--[
--AC_MSG_CHECKING([zfs module symbols])
--if test -r $ZFS_OBJ/Module.symvers; then
--	ZFS_SYMBOLS=Module.symvers
--elif test -r $ZFS_OBJ/Modules.symvers; then
--	ZFS_SYMBOLS=Modules.symvers
--elif test -r $ZFS_OBJ/module/Module.symvers; then
--	ZFS_SYMBOLS=Module.symvers
--elif test -r $ZFS_OBJ/module/Modules.symvers; then
--	ZFS_SYMBOLS=Modules.symvers
--else
--	ZFS_SYMBOLS=$SYMVERFILE
--fi
--
--AC_MSG_RESULT([$ZFS_SYMBOLS])
--AC_SUBST(ZFS_SYMBOLS)
--])
--
--#
--# LB_ZFS_RELEASE
--#
--AC_DEFUN([LB_ZFS_RELEASE],
--[
--AC_MSG_CHECKING([zfs source release])
--if test -r $ZFS_OBJ/zfs_config.h; then
--	tmp_flags="$EXTRA_KCFLAGS"
--	EXTRA_KCFLAGS="-I$ZFS_OBJ $EXTRA_KCFLAGS"
--	LB_LINUX_TRY_MAKE([
--		#include <$ZFS_OBJ/zfs_config.h>
--	],[
--		char *ZFS_RELEASE;
--		ZFS_RELEASE=ZFS_META_VERSION;
--	],[
--		$makerule LUSTRE_KERNEL_TEST=conftest.i
--	],[
--		test -s build/conftest.i
--	],[
--		eval $(grep "ZFS_RELEASE=" build/conftest.i)
--	],[
--		AC_MSG_RESULT([unknown])
--		AC_MSG_ERROR([Could not preprocess test program.])
-+AC_DEFUN([LB_PATH_ZFS], [
-+	AC_ARG_WITH([zfs],
-+		[AS_HELP_STRING([--with-zfs=PATH], [Path to zfs source])],
-+		[
-+			AS_IF([test x$withval = xno], [
-+				enable_zfs=no
-+				require_zfs=no
-+			], [test x$withval = xyes], [
-+				enable_zfs=yes
-+				require_zfs=yes
-+			], [
-+				enable_zfs=yes
-+				require_zfs=yes
-+				zfssrc="$withval"
-+			])
-+		], [
-+			AS_IF([test x$enable_server = xyes &&
-+			    test x$enable_dist = xno], [
-+				require_zfs=no
-+				enable_zfs=yes
-+			], [
-+				require_zfs=no
-+				enable_zfs=no
-+			])
-+		])
-+
-+	AC_MSG_CHECKING([whether to enable zfs])
-+	AC_MSG_RESULT([$enable_zfs])
-+
-+	AS_IF([test x$enable_zfs = xyes], [
-+		AS_IF([test x$enable_modules = xyes], [
-+			LB_SPL
-+			LB_ZFS
-+		])
-+
-+		LB_ZFS_USER
-+
-+		dnl #
-+		dnl # enable_zfs will be set to no in LB_SPL or LB_ZFS if
-+		dnl # one of more of the build requirements is not met.
-+		dnl #
-+		AS_IF([test x$enable_zfs = xyes], [
-+			AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd)
-+		],[
-+			AS_IF([test x$require_zfs = xyes], [
-+				AC_MSG_ERROR([
-+
-+Required zfs osd cannot be built due to missing zfs development headers.
-+
-+Support for zfs can be enabled by downloading the required packages for your
-+distribution.  See http://zfsonlinux.org/ to determine is zfs is supported by
-+your distribution.
-+				])
-+			], [
-+				AC_MSG_WARN([
-+
-+Disabling optional zfs osd due to missing development headers.
-+
-+Support for zfs can be enabled by downloading the required packages for your
-+distribution.  See http://zfsonlinux.org/ to determine is zfs is supported by
-+your distribution.
-+				])
-+			])
-+		])
- 	])
--	EXTRA_KCFLAGS="$tmp_flags"
--	rm build/conftest.i
--elif test -r $ZFS_DIR/META; then
--	ZFS_RELEASE=$(awk '/Version/ { print [$]2 }' $ZFS_DIR/META)
--else
--	AC_MSG_RESULT([unknown])
--	AC_MSG_ERROR([Could not locate zfs_config.h or META to check release.])
--fi
--
--if test x$ZFS_RELEASE = x; then
--	AC_MSG_RESULT([unknown])
--	AC_MSG_ERROR([Could not determine zfs release.])
--fi
--
--AC_MSG_RESULT([$ZFS_RELEASE])
--AC_SUBST(ZFS_RELEASE)
--])
- 
--#
--# LB_ZFS_DEFINE_OPTIONS
--#
--AC_DEFUN([LB_ZFS_DEFINE_OPTIONS],
--[
--AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd)
-+	AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
- ])
-diff --git a/contrib/lbuild/lbuild b/contrib/lbuild/lbuild
-index d682f3c..b4a0a8d 100755
---- a/contrib/lbuild/lbuild
-+++ b/contrib/lbuild/lbuild
-@@ -993,36 +993,60 @@ build_lustre() {
- #
- # Fetch spl/zfs from the git repo and prepare for lustre build
- #
-+# Overrides:
-+#   SPLZFSGITREPO - URI of directory where spl.git and zfs.git are located
-+#   SPLZFSTAG     - Tag to checkout of clone repositories
-+#   SPLZFSVER     - Version to checkout of both (format zfs/spl-$SPLZFSVER)
-+#
- # return 0 if successful, else 255
- build_spl_zfs() {
-     # make sure the RPM build environment is set up
-+    pushd $TOPDIR
-     create_rpmbuild_dirs
-+    popd
- 
-     # The spl/zfs spec files expect RPM_BUILD_ROOT to point to the root of the
-     # destination for the rpms
-     export RPM_BUILD_ROOT=$TOPDIR
-+    SPLZFSVER=${SPLZFSVER:-0.6.1}
-+    SPLZFSTAG=${SPLZFSTAG:-lustre-zfs}
- 
-     # The files expect a kver to be set to the kernel version .
--    kver=$(cat ${LINUX}/include/config/kernel.release)
-+    local kver=$(find_linux_release ${LINUX})
- 
-     # build and install the spl and zfs (and -devel) RPMs for lustre to use
-     local pkg
-     for pkg in spl zfs; do
- 
--        local rpmmod spldir
-+        local rpmpkg
- 
--        [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/*)"
--        rpmmod=$pkg-modules
-+        [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/|tail -1)"
- 
-         # need to fetch the repo in order to build it.
-         # default to github but allow override
-         git clone ${SPLZFSGITREPO:-"https://github.com/zfsonlinux"}/$pkg.git $pkg 2>&1
- 
-         pushd $pkg || return 255
--
--        # XXX - _having_ to give a package a kernel just to have it configure
--        #       enough to do a "make dist" is truely bogus!
--        if  ! ./configure --with-linux=${LINUX} \
-+	if [ -n "$SPLZFSTAG" ]; then
-+	    git checkout $SPLZFSTAG
-+	else
-+	    git checkout -b lbuild $pkg-$SPLZFSVER
-+	fi
-+
-+	# This differentiates between older zfs versions
-+	if [ -f $pkg-modules.spec.in ]; then
-+	    rpmpkg=$pkg-modules
-+	    specdir=.
-+	    speclist="$pkg.spec $rpmpkg.spec"
-+	else
-+            rpmpkg=kmod-$pkg-devel
-+	    specdir=rpm/generic
-+	    speclist="$pkg.spec $pkg-kmod.spec $pkg-dkms.spec"
-+	fi
-+
-+	sh autogen.sh || return 255
-+
-+        if  ! ./configure --with-linux=${LINUX} --with-linux-obj=${LINUX} \
-                           ${spldir:+--with-spl="${spldir}"} 2>&1 ||
-             ! make dist 2>&1; then
-             popd
-@@ -1030,71 +1054,57 @@ build_spl_zfs() {
-         fi
-         popd
- 
--        # XXX - dirty hack time.  ~sigh~
--        #       because the spl tarball contains two .spec files, we cannot
--        #       simply rebuild the tarball
--        ln $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
--            error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
--
--        # First build the userspace tools RPMs
--        if ! $RPMBUILD $targets -bb $pkg/$pkg.spec \
--            --nodeps -v \
--            --define "configure_args ${CONFIGURE_FLAGS}" \
--            --define "_tmppath /var/tmp" \
--            --define "_topdir $TOPDIR" 2>&1; then
--            return 255
--        fi
--
--        if $DO_SRC; then
--            if ! $RPMBUILD -bs $pkg/$pkg.spec \
--                --nodeps -v \
--                --define "configure_args ${CONFIGURE_FLAGS}" \
--                --define "_tmppath /var/tmp" \
--                --define "_topdir $TOPDIR" 2>&1; then
--                return 255
-+        ln -f $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
-+           error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
-+	if [ -f $pkg/scripts/kmodtool ]; then
-+	    ln -f $pkg/scripts/kmodtool $TOPDIR/SOURCES/
-+	fi
-+
-+	local rpmb
-+	if $DO_SRC; then
-+	    rpmb=-ba
-+	else
-+	    rpmb=-bb
-+	fi
-+
-+	# set search dir for our own kmodtool to find correct
-+	# directories
-+	export KERNELSOURCE=$(dirname ${LINUX})
-+	# Manually build rpms
-+	for spec in $speclist; do
-+	    echo "Building RPMs from $pkg/$specdir/$spec"
-+            if ! $RPMBUILD $rpmb $pkg/$specdir/$spec \
-+		--nodeps -v \
-+		--define "require_kdir ${LINUX}" \
-+		${LINUXOBJ:+--define "require_kobj ${LINUXOBJ}"} \
-+		${spldir:+--define "require_spldir ${spldir}"} \
-+		--define "kver $kver" \
-+		--define "kernels $kver" \
-+		--define "_tmppath /var/tmp" \
-+		--define "kernelbuildroot $(find_linux_builddir $LINUX)" \
-+		--define "_topdir $TOPDIR" 2>&1; then
-+		return 255
-             fi
--        fi
-+	done
- 
--        # Now the kernel module RPMs
--        # Need to provide pointers to the lustre kernel source, objects, usr/src
--        if ! $RPMBUILD $targets -bb $pkg/$rpmmod.spec \
--            --nodeps -v \
--            --define "require_kdir ${linux}" \
--            ${linuxobj:+--define "require_kobj ${linuxobj}"} \
--            ${spldir:+--define "require_spldir ${spldir}"} \
--            --define "configure_args ${CONFIGURE_FLAGS}" \
--            --define "_usrsrc $TOPDIR/usr/src" \
--            --define "kver $kver" \
--            --define "_tmppath /var/tmp" \
--            --define "_topdir $TOPDIR" 2>&1; then
--            return 255
--        fi
-+#	$DO_SRC && mv $pkg*.src.rpm $TOPDIR/SRPMS/
-+#	mv $pkg*.noarch.rpm $TOPDIR/RPMS/noarch/
-+#	mv *$pkg*.$TARGET_ARCH.rpm $TOPDIR/RPMS/$(basearch $TARGET_ARCH)/
- 
--        if $DO_SRC; then
--            if ! $RPMBUILD -bs $pkg/$rpmmod.spec \
--                --nodeps -v \
--                --define "require_kdir ${linux}" \
--                ${linuxobj:+--define "require_kobj ${linuxobj}"} \
--                ${spldir:+--define "require_spldir ${spldir}"} \
--                --define "configure_args ${CONFIGURE_FLAGS}" \
--                --define "_usrsrc $TOPDIR/usr/src" \
--                --define "kver $kver" \
--                --define "_tmppath /var/tmp" \
--                --define "_topdir $TOPDIR" 2>&1; then
--                return 255
--            fi
--        fi
--
--        # We have built the rpms for the package. No we need to extract the
-+        # We have built the rpms for the package. Now we need to extract the
-         # contained files so we can build further things against them
--        local rpm=$(ls $TOPDIR/RPMS/*/$rpmmod-devel-*.rpm)
-+        local rpms=$(ls -1 $TOPDIR/RPMS/*/$rpmpkg-*.rpm)
- 
-         # cpio only extract to pwd so we need to go there.
-         pushd $TOPDIR
--        rpm2cpio < $rpm | cpio -id
-+	local rpm
-+	for rpm in $rpms; do
-+            rpm2cpio $rpm | cpio -id
-+	done
-         popd
- 
--        CONFIGURE_FLAGS="--with-$pkg=$(ls -d $TOPDIR/usr/src/$pkg-*/*) ${CONFIGURE_FLAGS}"
-+        CONFIGURE_FLAGS="--with-$pkg=$(ls -d $TOPDIR/usr/src/$pkg-*/|tail -1) ${CONFIGURE_FLAGS}"
-+        CONFIGURE_FLAGS="--with-$pkg-obj=$(ls -d $TOPDIR/usr/src/$pkg-*/$kver*|tail -1) ${CONFIGURE_FLAGS}"
-     done
- 
-     OSDZFSRPM=true
-@@ -1177,7 +1187,15 @@ find_linux_release() {
-     fi
- 
-     sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' $LINUXRELEASEHEADER
-+}
-+
-+# This funcition finds the buildroot directory for a given linux
-+# kernel directory
-+find_linux_builddir() {
-+    local linux=${1:-${LINUX}}
-+    local rel=$(find_linux_release $linux)
- 
-+    echo ${linux%/usr/src/kernels/${rel}*}
- }
- 
- # unpack kernel(/source/devel) RPM
-@@ -1765,6 +1783,7 @@ create_rpmbuild_dirs() {
-         fi
-         [ -d RPMS/$arch ] || mkdir RPMS/$arch
-     done
-+    [ -d RPMS/noarch ] || mkdir RPMS/noarch
-     [ -d BUILD ] || mkdir BUILD
-     [ -d SOURCES ] || mkdir SOURCES
-     [ -d SPECS ] || mkdir SPECS
-diff --git a/lustre.spec.in b/lustre.spec.in
-index afb5016..d07949a 100644
---- a/lustre.spec.in
-+++ b/lustre.spec.in
-@@ -115,7 +115,7 @@ backing store of a Lustre server.
- %if %{build_lustre_osd_zfs}
- %package osd-zfs
- Summary: osd-zfs is the mandatory glue for ZFS support in Lustre.
--Requires: lustre-modules = %{version}, zfs-modules
-+Requires: lustre-modules = %{version}, zfs-kmod
- Provides: lustre-osd
- Group: Development/Kernel
- 
-diff --git a/lustre/osd-zfs/Makefile.in b/lustre/osd-zfs/Makefile.in
-index 0a2dceb..7def377 100644
---- a/lustre/osd-zfs/Makefile.in
-+++ b/lustre/osd-zfs/Makefile.in
-@@ -2,9 +2,8 @@ MODULES := osd_zfs
- osd_zfs-objs := osd_handler.o osd_lproc.o udmu.o osd_quota.o
- osd_zfs-objs += osd_object.o osd_io.o osd_oi.o osd_xattr.o osd_index.o
- 
--EXTRA_PRE_CFLAGS += -I@SPL_DIR@ -I@SPL_DIR@/include
- EXTRA_PRE_CFLAGS += -include @SPL_OBJ@/spl_config.h
--EXTRA_PRE_CFLAGS += -I@ZFS_OBJ@ -I@ZFS_OBJ@/include
- EXTRA_PRE_CFLAGS += -include @ZFS_OBJ@/zfs_config.h
-+EXTRA_PRE_CFLAGS += -I@SPL@ -I@SPL@/include -I@ZFS@ -I@ZFS@/include
- 
- @INCLUDE_RULES@
-diff --git a/lustre/utils/Makefile.am b/lustre/utils/Makefile.am
-index a353557..23bde35 100644
---- a/lustre/utils/Makefile.am
-+++ b/lustre/utils/Makefile.am
-@@ -133,7 +133,7 @@ endif
- if ZFS_ENABLED
- mount_lustre_SOURCES += mount_utils_zfs.c
- mount_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
--mount_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
-+mount_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
- mount_lustre_LDFLAGS = -pthread -rdynamic -ldl
- endif
- 
-@@ -149,7 +149,7 @@ endif
- if ZFS_ENABLED
- mkfs_lustre_SOURCES += mount_utils_zfs.c
- mkfs_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
--mkfs_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
-+mkfs_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
- mkfs_lustre_LDFLAGS = -pthread -rdynamic -ldl
- endif
- 
-@@ -163,7 +163,7 @@ endif
- if ZFS_ENABLED
- tunefs_lustre_SOURCES += mount_utils_zfs.c
- tunefs_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
--tunefs_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
-+tunefs_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
- tunefs_lustre_LDFLAGS = -pthread -rdynamic -ldl
- endif
- 
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 96%
rename from sys-cluster/lustre/files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index f05aeaf..510b6d3 100644
--- a/sys-cluster/lustre/files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From ce1f67c5c62e85f4b64146563dcf365209592aaa Mon Sep 17 00:00:00 2001
+From b36528aa2738f3ee4c9b26694502212619ee7283 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 11/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+Subject: [PATCH 10/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 

diff --git a/sys-cluster/lustre/files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
similarity index 93%
rename from sys-cluster/lustre/files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
rename to sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index 4c7c7b0..bfcb3da 100644
--- a/sys-cluster/lustre/files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From 339363a3e668585842a8a11ec141734521063e3e Mon Sep 17 00:00:00 2001
+From f8a2f09093e0279f32eb7e79b6d014bbee8482d7 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 12/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 11/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 

diff --git a/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch b/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch
new file mode 100644
index 0000000..cb7c8c8
--- /dev/null
+++ b/sys-cluster/lustre/files/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch
@@ -0,0 +1,43 @@
+From 15e569cb19f7d46747da8ca461db0869571db0cc Mon Sep 17 00:00:00 2001
+From: Bob Glossman <bob.glossman@intel.com>
+Date: Wed, 24 Apr 2013 06:43:35 -0700
+Subject: [PATCH 12/12] LU-3179 build: fix compilation error with gcc 4.7.2
+
+use cast to resolve build warning from gcc 4.7.2
+
+Signed-off-by: Bob Glossman <bob.glossman@intel.com>
+Change-Id: I4356e621f5b9c687a6b76b12a93b664d542e1c79
+---
+ lustre/ptlrpc/nrs_crr.c | 2 +-
+ lustre/ptlrpc/nrs_orr.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/lustre/ptlrpc/nrs_crr.c b/lustre/ptlrpc/nrs_crr.c
+index 0335bf9..6545913 100644
+--- a/lustre/ptlrpc/nrs_crr.c
++++ b/lustre/ptlrpc/nrs_crr.c
+@@ -278,7 +278,7 @@ int nrs_crrn_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
+ {
+ 	LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
+ 
+-	switch(opc) {
++	switch((enum nrs_ctl_crr)opc) {
+ 	default:
+ 		RETURN(-EINVAL);
+ 
+diff --git a/lustre/ptlrpc/nrs_orr.c b/lustre/ptlrpc/nrs_orr.c
+index bc4b373..5363629 100644
+--- a/lustre/ptlrpc/nrs_orr.c
++++ b/lustre/ptlrpc/nrs_orr.c
+@@ -759,7 +759,7 @@ int nrs_orr_ctl(struct ptlrpc_nrs_policy *policy, enum ptlrpc_nrs_ctl opc,
+ {
+ 	LASSERT(spin_is_locked(&policy->pol_nrs->nrs_lock));
+ 
+-	switch(opc) {
++	switch((enum nrs_ctl_orr)opc) {
+ 	default:
+ 		RETURN(-EINVAL);
+ 
+-- 
+1.8.2.1
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index cbc61e4..23ee833 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -41,10 +41,10 @@ PATCHES=(
 	"${FILESDIR}/0006-LU-2987-llite-rcu-free-inode.patch"
 	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
-	"${FILESDIR}/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0009-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
+	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0012-LU-3179-build-fix-compilation-error-with-gcc-4.7.2.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-05-07  9:20 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-05-07  9:20 UTC (permalink / raw
  To: gentoo-commits

commit:     94356c5c482aee7e984d196a8b4c808fa6122f79
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue May  7 09:19:44 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue May  7 09:19:44 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=94356c5c

Update lustre patches

Package-Manager: portage-2.2.0_alpha174
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   29 +
 ...01-LU-1812-kernel-3.7-FC18-server-patches.patch |  380 +
 ...rnel-3.0-SuSE-and-3.6-FC18-server-patches.patch |21302 --------------------
 ...el-sock_map_fd-replaced-by-sock_alloc_fi.patch} |    4 +-
 ...-kernel-Kernel-update-for-3.7.2-201.fc18.patch} |   10 +-
 ...at-posix_acl_-to-from-_xattr-take-user_n.patch} |   12 +-
 ...05-LU-2800-llite-introduce-local-getname.patch} |   16 +-
 ...tch => 0006-LU-2987-llite-rcu-free-inode.patch} |    8 +-
 ...0-kernel-3.8-upstream-removes-vmtruncate.patch} |    8 +-
 ...2850-kernel-3.8-upstream-kills-daemonize.patch} |  167 +-
 ...-build-zfs-0.6.1-kmod-dkms-compatibility.patch} |  175 +-
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |    8 +-
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |    8 +-
 ...9-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch} |   10 +-
 ...fids-fix-compilation-error-with-gcc-4.7.2.patch |   29 -
 sys-cluster/lustre/lustre-9999.ebuild              |   25 +-
 16 files changed, 695 insertions(+), 21496 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 418a4bf..6420370 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,35 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  07 May 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch,
+  +files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  +files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  +files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  +files/0005-LU-2800-llite-introduce-local-getname.patch,
+  +files/0006-LU-2987-llite-rcu-free-inode.patch,
+  +files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  +files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  +files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  +files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch,
+  -files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  -files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  -files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  -files/0006-LU-2800-llite-introduce-local-getname.patch,
+  -files/0007-LU-2987-llite-rcu-free-inode.patch,
+  -files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  -files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  -files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch,
+  -files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   23 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch,
   +files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch b/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
new file mode 100644
index 0000000..dc7f5aa
--- /dev/null
+++ b/sys-cluster/lustre/files/0001-LU-1812-kernel-3.7-FC18-server-patches.patch
@@ -0,0 +1,380 @@
+From 65c212c034f632513cd0e4afe6830698b8450e27 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Thu, 2 May 2013 07:54:50 -0400
+Subject: [PATCH 01/12] LU-1812 kernel: 3.7/FC18 server patches
+
+This patch extends lustre server support to FC18 running a
+3.7.2-201 kernel with a ZFS backend. At this time ldiskfs
+is not supported on FC18. This patch provides block level
+performance optimizations and the ability to simulate fail
+over for ldiskfs when it is provided. The jbd2-jcberr patch
+was not ported to these new platforms for reasons described
+in LU-433.
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I2a86d7ca4e068686372eb74f85b1443d24e245c4
+---
+ .../patches/blkdev_tunables-3.7.patch              | 128 +++++++++++++++
+ .../kernel_patches/patches/dev_read_only-3.7.patch | 174 +++++++++++++++++++++
+ .../patches/raid5-mmp-unplug-dev-3.7.patch         |  21 +++
+ lustre/kernel_patches/series/3.x-fc18.series       |   4 +
+ 4 files changed, 327 insertions(+)
+ create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
+ create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.7.patch
+ create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
+ create mode 100644 lustre/kernel_patches/series/3.x-fc18.series
+
+diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
+new file mode 100644
+index 0000000..1a98fb5
+--- /dev/null
++++ b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
+@@ -0,0 +1,128 @@
++--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
+++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
++@@ -19,6 +19,12 @@
++ 
++ unsigned long blk_max_pfn;
++ 
+++int default_max_sectors = BLK_DEF_MAX_SECTORS;
+++module_param(default_max_sectors, int, 0);
+++
+++int default_max_segments = BLK_MAX_SEGMENTS;
+++module_param(default_max_segments, int, 0);
+++
++ /**
++  * blk_queue_prep_rq - set a prepare_request function for queue
++  * @q:		queue
++@@ -108,7 +114,7 @@
++  */
++ void blk_set_default_limits(struct queue_limits *lim)
++ {
++-	lim->max_segments = BLK_MAX_SEGMENTS;
+++	lim->max_segments = default_max_segments;
++ 	lim->max_integrity_segments = 0;
++ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
++ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
++@@ -255,7 +261,7 @@
++ 
++ 	limits->max_hw_sectors = max_hw_sectors;
++ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
++-				    BLK_DEF_MAX_SECTORS);
+++				    default_max_sectors);
++ }
++ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
++ 
++--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
+++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
++@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
++	  there should be no noticeable performance impact as long as you have
++	  logging turned off.
++ 
+++config SCSI_MAX_SG_SEGMENTS
+++	int "Maximum SCSI scatter gather segment size"
+++	range 32 256 
+++	default "128"
+++	depends on SCSI
+++	help
+++	  Control the maximum limit for scatter gather buffers for the
+++	  SCSI device.
+++
++ config SCSI_SCAN_ASYNC
++ 	bool "Asynchronous SCSI scanning"
++ 	depends on SCSI
++--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
+++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
++@@ -20,7 +20,7 @@ struct scsi_cmnd;
++  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
++  * minimum value is 32
++  */
++-#define SCSI_MAX_SG_SEGMENTS	128
+++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
++ 
++ /*
++  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
++--- a/drivers/scsi/isci/init.c	2013-02-07 09:59:49.000000000 -0500
+++++ b/drivers/scsi/isci/init.c	2013-02-07 10:01:51.000000000 -0500
++@@ -119,6 +119,10 @@
++ module_param(phy_gen, byte, 0);
++ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
++ 
+++u16 sg_table_size = SG_ALL;
+++module_param(sg_table_size, ushort, 0);
+++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
+++
++ unsigned char max_concurr_spinup;
++ module_param(max_concurr_spinup, byte, 0);
++ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
++@@ -163,7 +167,6 @@
++ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
++ 	.cmd_per_lun			= 1,
++ 	.this_id			= -1,
++-	.sg_tablesize			= SG_ALL,
++ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
++ 	.use_clustering			= ENABLE_CLUSTERING,
++ 	.eh_abort_handler		= sas_eh_abort_handler,
++@@ -573,6 +576,7 @@
++ 
++ 		INIT_LIST_HEAD(&idev->node);
++ 	}
+++	isci_sht.sg_tablesize = sg_table_size;
++ 
++ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
++ 	if (!shost)
++Increase MAX_SGE for fusion mpt driver.
++
++Index: linux-2.6.32.i386/drivers/message/fusion/Kconfig
++===================================================================
++--- linux-2.6.32.i386.orig/drivers/message/fusion/Kconfig	2009-12-03 09:21:21.000000000 +0530
+++++ linux-2.6.32.i386/drivers/message/fusion/Kconfig	2010-03-16 16:45:08.000000000 +0530
++@@ -61,9 +61,9 @@
++ 	  LSISAS1078
++ 
++ config FUSION_MAX_SGE
++-	int "Maximum number of scatter gather entries (16 - 128)"
++-	default "128"
++-	range 16 128
+++	int "Maximum number of scatter gather entries (16 - 256)"
+++	default "256"
+++	range 16 256
++ 	help
++ 	  This option allows you to specify the maximum number of scatter-
++ 	  gather entries per I/O. The driver default is 128, which matches
++Index: linux-2.6.32.i386/drivers/message/fusion/mptbase.h
++===================================================================
++--- linux-2.6.32.i386.orig/drivers/message/fusion/mptbase.h	2009-12-03 09:21:21.000000000 +0530
+++++ linux-2.6.32.i386/drivers/message/fusion/mptbase.h	2010-03-16 16:46:54.000000000 +0530
++@@ -165,10 +165,10 @@
++  * Set the MAX_SGE value based on user input.
++  */
++ #ifdef CONFIG_FUSION_MAX_SGE
++-#if CONFIG_FUSION_MAX_SGE  < 16
+++#if CONFIG_FUSION_MAX_SGE < 16
++ #define MPT_SCSI_SG_DEPTH	16
++-#elif CONFIG_FUSION_MAX_SGE  > 128
++-#define MPT_SCSI_SG_DEPTH	128
+++#elif CONFIG_FUSION_MAX_SGE > 256
+++#define MPT_SCSI_SG_DEPTH	256
++ #else
++ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
++ #endif
+diff --git a/lustre/kernel_patches/patches/dev_read_only-3.7.patch b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
+new file mode 100644
+index 0000000..7fb0b98
+--- /dev/null
++++ b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
+@@ -0,0 +1,174 @@
++This patch is no longer needed for Lustre.  It is only included
++for testing and ease of using the same kernel with older Lustre
++versions.  This testing functionality was replaced in Linux 3.0
++by the dm-flakey driver.
++
++This functionality is mainly used during testing, in order to
++simulate a server crash for ldiskfs by discarding all of the
++writes to the filesystem.  For recovery testing we could simulate
++this by using a special loopback or DM device that also discards
++writes to the device.
++
++This functionality is also used by target "failback" in order
++to speed up service shutdown and takeover by the other node
++during controlled operation.  However, it would also be possible
++to do this by simply allowing all of the in-flight requests to
++complete and then waiting for the service to stop.  This will
++also be needed by the DMU-OSD, because discarding of writes on
++a DMU-based target is not safe as it could trigger a storage
++failure if the data is ever read from disk again and the
++checksum does not match that expected by the block pointer.
++
++Index: linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c
++===================================================================
++--- linux-3.6.0-0.3.fc.el6.x86_64.orig/block/blk-core.c	2012-09-30 19:47:46.000000000 -0400
+++++ linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c	2012-11-16 11:35:04.419174277 -0500
++@@ -1606,6 +1606,8 @@ static inline bool should_fail_request(s
++
++ #endif /* CONFIG_FAIL_MAKE_REQUEST */
++
+++int dev_check_rdonly(struct block_device *bdev);
+++
++ /*
++  * Check whether this bio extends beyond the end of the device.
++  */
++@@ -1668,6 +1670,12 @@ generic_make_request_checks(struct bio *
++		goto end_io;
++	}
++
+++	/* this is cfs's dev_rdonly check */
+++	if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+++		err = 0;
+++		goto end_io;
+++	}
+++
++	part = bio->bi_bdev->bd_part;
++	if (should_fail_request(part, bio->bi_size) ||
++	    should_fail_request(&part_to_disk(part)->part0,
++@@ -3034,6 +3042,99 @@ void blk_finish_plug(struct blk_plug *pl
++ }
++ EXPORT_SYMBOL(blk_finish_plug);
++
+++/*
+++ * Debug code for turning block devices "read-only" (will discard writes
+++ * silently).  This is for filesystem crash/recovery testing.
+++ */
+++struct deventry {
+++	dev_t dev;
+++	struct deventry *next;
+++};
+++
+++static struct deventry *devlist = NULL;
+++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
+++
+++int dev_check_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *cur;
+++
+++	if (!bdev)
+++		return 0;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			spin_unlock(&devlock);
+++			return 1;
+++		}
+++		cur = cur->next;
+++	}
+++	spin_unlock(&devlock);
+++	return 0;
+++}
+++
+++void dev_set_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *newdev, *cur;
+++
+++	if (!bdev)
+++		return;
+++
+++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
+++	if (!newdev)
+++		return;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			spin_unlock(&devlock);
+++			kfree(newdev);
+++			return;
+++		}
+++		cur = cur->next;
+++	}
+++	newdev->dev = bdev->bd_dev;
+++	newdev->next = devlist;
+++	devlist = newdev;
+++	spin_unlock(&devlock);
+++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
+++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
+++}
+++
+++void dev_clear_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *cur, *last = NULL;
+++
+++	if (!bdev)
+++		return;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			if (last)
+++				last->next = cur->next;
+++			else
+++				devlist = cur->next;
+++			spin_unlock(&devlock);
+++			kfree(cur);
+++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
+++				bdev->bd_disk ? bdev->bd_disk->disk_name :
+++				"unknown block", bdev->bd_dev);
+++			return;
+++		}
+++		last = cur;
+++		cur = cur->next;
+++	}
+++	spin_unlock(&devlock);
+++}
+++
+++EXPORT_SYMBOL(dev_set_rdonly);
+++EXPORT_SYMBOL(dev_clear_rdonly);
+++EXPORT_SYMBOL(dev_check_rdonly);
+++
++ int __init blk_dev_init(void)
++ {
++	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
++Index: linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c
++===================================================================
++--- linux-3.6.0-0.3.fc.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
+++++ linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
++@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
++		if (bdev != bdev->bd_contains)
++			victim = bdev->bd_contains;
++		bdev->bd_contains = NULL;
+++		dev_clear_rdonly(bdev);
++
++		put_disk(disk);
++		module_put(owner);
++Index: linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h
++===================================================================
++--- linux-3.6.0-0.3.fc.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
+++++ linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
++@@ -2244,6 +2244,10 @@ struct bio;
++ extern void submit_bio(int, struct bio *);
++ extern int bdev_read_only(struct block_device *);
++ #endif
+++#define HAVE_CLEAR_RDONLY_ON_PUT
+++extern void dev_set_rdonly(struct block_device *bdev);
+++extern int dev_check_rdonly(struct block_device *bdev);
+++extern void dev_clear_rdonly(struct block_device *bdev);
++ extern int set_blocksize(struct block_device *, int);
++ extern int sb_set_blocksize(struct super_block *, int);
++ extern int sb_min_blocksize(struct super_block *, int);
+diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
+new file mode 100644
+index 0000000..70b9992
+--- /dev/null
++++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
+@@ -0,0 +1,21 @@
++--- linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c.orig	2012-11-21 08:51:15.312175089 -0500
+++++ linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c		2012-11-21 09:02:38.415174560 -0500
++@@ -2394,6 +2394,8 @@ static int add_stripe_bio(struct stripe_
++		bi->bi_next = *bip;
++	*bip = bi;
++	raid5_inc_bi_active_stripes(bi);
+++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
+++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);	/* force to read from disk. */
++
++	if (forwrite) {
++		/* check if page is covered */
++@@ -4217,6 +4222,9 @@ static void make_request(struct mddev *m
++
++		bio_endio(bi, 0);
++	}
+++
+++	if (bi->bi_rw & REQ_SYNC)
+++		md_wakeup_thread(mddev->thread);
++ }
++
++ static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
+diff --git a/lustre/kernel_patches/series/3.x-fc18.series b/lustre/kernel_patches/series/3.x-fc18.series
+new file mode 100644
+index 0000000..387a2dd
+--- /dev/null
++++ b/lustre/kernel_patches/series/3.x-fc18.series
+@@ -0,0 +1,4 @@
++raid5-mmp-unplug-dev-3.7.patch
++dev_read_only-3.7.patch
++blkdev_tunables-3.7.patch
++bh_lru_size_config.patch
+-- 
+1.8.2.1
+

diff --git a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
deleted file mode 100644
index 8ed8d9a..0000000
--- a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
+++ /dev/null
@@ -1,21302 +0,0 @@
-From 63af3a0a24703ae6a818c801ba70023995ebc7d3 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 9 Apr 2013 11:26:00 -0400
-Subject: [PATCH 02/13] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches
-
-This patch extends lustre server support to FC18 and
-SLES11 SP2 with a ZFS. At this time ldiskfs is not
-supported on FC18. Several outdated patches for SLES10
-server server support also have been removed. The
-jbd2-jcberr patch was not ported to these new platforms
-for reasons described in LU-433
-
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I2a86d7ca4e068686372eb74f85b1443d24e245c4
----
- lustre/autoconf/lustre-core.m4                     |    1 -
- lustre/include/linux/lustre_compat25.h             |    3 -
- .../kernel-2.6.16-2.6-sles10-ppc64-ppc64.config    | 2190 ----------
- .../kernel-2.6.27-2.6-sles11-i686-default.config   | 4409 --------------------
- .../kernel-2.6.27-2.6-sles11-i686.config           | 4409 --------------------
- .../kernel-2.6.27-2.6-sles11-x86_64-default.config | 4143 ------------------
- .../kernel-2.6.27-2.6-sles11-x86_64.config         | 4143 ------------------
- .../patches/blkdev_tunables-2.6-sles11.patch       |   11 -
- .../patches/blkdev_tunables-3.0-sles11.patch       |  119 +
- .../patches/blkdev_tunables-3.7.patch              |  128 +
- .../patches/dev_read_only-2.6.27-vanilla.patch     |  166 -
- .../patches/dev_read_only-3.0-sles11.patch         |  174 +
- .../kernel_patches/patches/dev_read_only-3.7.patch |  174 +
- .../patches/export-2.6.27-vanilla.patch            |   24 -
- .../patches/iopen-misc-2.6.22-vanilla.patch        |   70 -
- .../patches/jbd2-jcberr-2.6-sles11.patch           |  225 -
- .../patches/raid5-mmp-unplug-dev-3.7.patch         |   21 +
- .../patches/raid5-mmp-unplug-dev-sles11sp2.patch   |   29 +
- .../patches/sd_iostats-2.6.27-vanilla.patch        |  579 ---
- lustre/kernel_patches/series/2.6-sles11.series     |   17 +-
- lustre/kernel_patches/series/3.0-sles11.series     |    7 +-
- lustre/kernel_patches/series/3.x-fc18.series       |    4 +
- lustre/kernel_patches/targets/2.6-sles10.target.in |   41 -
- 23 files changed, 659 insertions(+), 20428 deletions(-)
- delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config
- delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config
- delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config
- delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config
- delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config
- delete mode 100644 lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch
- create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch
- create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
- delete mode 100644 lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch
- create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch
- create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.7.patch
- delete mode 100644 lustre/kernel_patches/patches/export-2.6.27-vanilla.patch
- delete mode 100644 lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch
- delete mode 100644 lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch
- create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
- create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch
- delete mode 100644 lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch
- create mode 100644 lustre/kernel_patches/series/3.x-fc18.series
- delete mode 100644 lustre/kernel_patches/targets/2.6-sles10.target.in
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 40c4680..0354dd4 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2883,7 +2883,6 @@ lustre/include/darwin/Makefile
- lustre/include/lustre/Makefile
- lustre/kernel_patches/targets/2.6-rhel6.target
- lustre/kernel_patches/targets/2.6-rhel5.target
--lustre/kernel_patches/targets/2.6-sles10.target
- lustre/kernel_patches/targets/2.6-sles11.target
- lustre/kernel_patches/targets/3.0-sles11.target
- lustre/kernel_patches/targets/2.6-oel5.target
-diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index ca485cd..54effc5 100644
---- a/lustre/include/linux/lustre_compat25.h
-+++ b/lustre/include/linux/lustre_compat25.h
-@@ -447,8 +447,6 @@ static inline int ll_crypto_hmac(struct crypto_tfm *tfm,
- #define ll_vfs_unlink(inode,entry,mnt)          vfs_unlink(inode,entry,mnt)
- #define ll_vfs_mknod(dir,entry,mnt,mode,dev)            \
-                 vfs_mknod(dir,entry,mnt,mode,dev)
--#define ll_security_inode_unlink(dir,entry,mnt)         \
--                security_inode_unlink(dir,entry,mnt)
- #define ll_vfs_rename(old,old_dir,mnt,new,new_dir,mnt1) \
-                 vfs_rename(old,old_dir,mnt,new,new_dir,mnt1)
- #else
-@@ -457,7 +455,6 @@ static inline int ll_crypto_hmac(struct crypto_tfm *tfm,
- #define ll_vfs_link(old,mnt,dir,new,mnt1)       vfs_link(old,dir,new)
- #define ll_vfs_unlink(inode,entry,mnt)          vfs_unlink(inode,entry)
- #define ll_vfs_mknod(dir,entry,mnt,mode,dev)    vfs_mknod(dir,entry,mode,dev)
--#define ll_security_inode_unlink(dir,entry,mnt) security_inode_unlink(dir,entry)
- #define ll_vfs_rename(old,old_dir,mnt,new,new_dir,mnt1) \
-                 vfs_rename(old,old_dir,new,new_dir)
- #endif /* HAVE_SECURITY_PLUG */
-diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config
-deleted file mode 100644
-index dd43736..0000000
---- a/lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config
-+++ /dev/null
-@@ -1,2190 +0,0 @@
--#
--# Automatically generated make config: don't edit
--#
--CONFIG_PPC64=y
--CONFIG_64BIT=y
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_HARDIRQS=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_COMPAT=y
--CONFIG_SYSVIPC_COMPAT=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_PPC_UDBG_16550=y
--CONFIG_GENERIC_TBSYNC=y
--CONFIG_AUDIT_ARCH=y
--# CONFIG_DEFAULT_UIMAGE is not set
--
--#
--# Processor support
--#
--# CONFIG_POWER4_ONLY is not set
--CONFIG_POWER3=y
--CONFIG_POWER4=y
--CONFIG_PPC_FPU=y
--CONFIG_ALTIVEC=y
--CONFIG_PPC_STD_MMU=y
--CONFIG_VIRT_CPU_ACCOUNTING=y
--CONFIG_SMP=y
--CONFIG_NR_CPUS=128
--
--#
--# Code maturity level options
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_LOCK_KERNEL=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--
--#
--# General setup
--#
--CONFIG_LOCALVERSION="-ppc64"
--# CONFIG_LOCALVERSION_AUTO is not set
--CONFIG_SUSE_KERNEL=y
--CONFIG_SLE_VERSION=10
--CONFIG_SLE_SP=2
--CONFIG_SLE_SP_SUBLEVEL=0
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--CONFIG_BSD_PROCESS_ACCT_V3=y
--CONFIG_TASKSTATS=y
--CONFIG_TASK_DELAY_ACCT=y
--CONFIG_TASK_XACCT=y
--CONFIG_SYSCTL=y
--CONFIG_AUDIT=y
--CONFIG_AUDITSYSCALL=y
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_CPUSETS=y
--CONFIG_RELAY=y
--CONFIG_INITRAMFS_SOURCE=""
--CONFIG_CC_OPTIMIZE_FOR_SIZE=y
--# CONFIG_EMBEDDED is not set
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_EPOLL=y
--CONFIG_SHMEM=y
--CONFIG_CC_ALIGN_FUNCTIONS=0
--CONFIG_CC_ALIGN_LABELS=0
--CONFIG_CC_ALIGN_LOOPS=0
--CONFIG_CC_ALIGN_JUMPS=0
--CONFIG_SLAB=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_SLOB is not set
--CONFIG_OBSOLETE_INTERMODULE=m
--
--#
--# Loadable module support
--#
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--CONFIG_MODVERSIONS=y
--CONFIG_MODULE_SRCVERSION_ALL=y
--CONFIG_KMOD=y
--CONFIG_STOP_MACHINE=y
--
--#
--# Block layer
--#
--CONFIG_BLK_DEV_IO_TRACE=y
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--CONFIG_DEFAULT_DEADLINE=y
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="deadline"
--
--#
--# Platform support
--#
--CONFIG_PPC_MULTIPLATFORM=y
--# CONFIG_PPC_ISERIES is not set
--# CONFIG_EMBEDDED6xx is not set
--# CONFIG_APUS is not set
--CONFIG_PPC_PSERIES=y
--CONFIG_PPC_PMAC=y
--CONFIG_PPC_PMAC64=y
--CONFIG_PPC_MAPLE=y
--CONFIG_PPC_CELL=y
--CONFIG_XICS=y
--CONFIG_U3_DART=y
--CONFIG_MPIC=y
--CONFIG_PPC_RTAS=y
--CONFIG_RTAS_ERROR_LOGGING=y
--CONFIG_RTAS_PROC=y
--CONFIG_RTAS_FLASH=y
--CONFIG_MMIO_NVRAM=y
--CONFIG_MPIC_BROKEN_U3=y
--CONFIG_CELL_IIC=y
--CONFIG_IBMVIO=y
--CONFIG_IBMEBUS=y
--# CONFIG_PPC_MPC106 is not set
--CONFIG_CPU_FREQ=y
--CONFIG_CPU_FREQ_TABLE=y
--CONFIG_CPU_FREQ_DEBUG=y
--CONFIG_CPU_FREQ_STAT=m
--CONFIG_CPU_FREQ_STAT_DETAILS=y
--CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
--CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
--CONFIG_CPU_FREQ_GOV_POWERSAVE=m
--CONFIG_CPU_FREQ_GOV_USERSPACE=m
--CONFIG_CPU_FREQ_GOV_ONDEMAND=m
--CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
--CONFIG_CPU_FREQ_PMAC64=y
--# CONFIG_WANT_EARLY_SERIAL is not set
--
--#
--# Cell Broadband Engine options
--#
--CONFIG_SPU_FS=m
--
--#
--# Kernel options
--#
--CONFIG_HZ_100=y
--# CONFIG_HZ_250 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=100
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--# CONFIG_PREEMPT_BKL is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=m
--CONFIG_FORCE_MAX_ZONEORDER=13
--CONFIG_IOMMU_VMERGE=y
--CONFIG_HOTPLUG_CPU=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_KEXEC=y
--# CONFIG_CRASH_DUMP is not set
--CONFIG_IRQ_ALL_CPUS=y
--CONFIG_PPC_SPLPAR=y
--CONFIG_EEH=y
--CONFIG_SCANLOG=m
--CONFIG_LPARCFG=y
--CONFIG_NUMA=y
--CONFIG_ARCH_SELECT_MEMORY_MODEL=y
--CONFIG_ARCH_SPARSEMEM_ENABLE=y
--CONFIG_ARCH_SPARSEMEM_DEFAULT=y
--CONFIG_SELECT_MEMORY_MODEL=y
--# CONFIG_FLATMEM_MANUAL is not set
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--CONFIG_SPARSEMEM_MANUAL=y
--CONFIG_SPARSEMEM=y
--CONFIG_NEED_MULTIPLE_NODES=y
--CONFIG_HAVE_MEMORY_PRESENT=y
--# CONFIG_SPARSEMEM_STATIC is not set
--CONFIG_SPARSEMEM_EXTREME=y
--CONFIG_MEMORY_HOTPLUG=y
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_MIGRATION=y
--CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
--CONFIG_ARCH_MEMORY_PROBE=y
--# CONFIG_PPC_64K_PAGES is not set
--CONFIG_SCHED_SMT=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_I8259=y
--# CONFIG_PPC_INDIRECT_PCI is not set
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCIEPORTBUS=y
--# CONFIG_HOTPLUG_PCI_PCIE is not set
--CONFIG_PCI_MSI=y
--# CONFIG_PCI_LEGACY_PROC is not set
--# CONFIG_PCI_DEBUG is not set
--
--#
--# PCCARD (PCMCIA/CardBus) support
--#
--# CONFIG_PCCARD is not set
--
--#
--# PCI Hotplug Support
--#
--CONFIG_HOTPLUG_PCI=y
--# CONFIG_HOTPLUG_PCI_FAKE is not set
--# CONFIG_HOTPLUG_PCI_CPCI is not set
--# CONFIG_HOTPLUG_PCI_SHPC is not set
--CONFIG_HOTPLUG_PCI_RPA=y
--CONFIG_HOTPLUG_PCI_RPA_DLPAR=y
--CONFIG_KERNEL_START=0xc000000000000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--# CONFIG_NETDEBUG is not set
--CONFIG_PACKET=y
--CONFIG_PACKET_MMAP=y
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--CONFIG_NET_KEY=y
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--# CONFIG_IP_ROUTE_FWMARK is not set
--CONFIG_IP_ROUTE_MULTIPATH=y
--# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
--CONFIG_IP_ROUTE_VERBOSE=y
--# CONFIG_IP_PNP is not set
--CONFIG_NET_IPIP=m
--CONFIG_NET_IPGRE=m
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--CONFIG_INET_AH=m
--CONFIG_INET_ESP=m
--CONFIG_INET_IPCOMP=m
--CONFIG_INET_TUNNEL=m
--CONFIG_INET_DIAG=m
--CONFIG_INET_TCP_DIAG=m
--CONFIG_TCP_CONG_ADVANCED=y
--
--#
--# TCP congestion control
--#
--CONFIG_TCP_CONG_BIC=m
--CONFIG_TCP_CONG_CUBIC=m
--CONFIG_TCP_CONG_WESTWOOD=m
--CONFIG_TCP_CONG_HTCP=m
--CONFIG_TCP_CONG_HSTCP=m
--CONFIG_TCP_CONG_HYBLA=m
--CONFIG_TCP_CONG_VEGAS=m
--CONFIG_TCP_CONG_SCALABLE=m
--
--#
--# IP: Virtual Server Configuration
--#
--# CONFIG_IP_VS is not set
--CONFIG_IPV6=m
--CONFIG_IPV6_PRIVACY=y
--CONFIG_INET6_AH=m
--CONFIG_INET6_ESP=m
--CONFIG_INET6_IPCOMP=m
--CONFIG_INET6_TUNNEL=m
--CONFIG_IPV6_TUNNEL=m
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_BRIDGE_NETFILTER=y
--
--#
--# Core Netfilter Configuration
--#
--CONFIG_NETFILTER_NETLINK=m
--CONFIG_NETFILTER_NETLINK_QUEUE=m
--CONFIG_NETFILTER_NETLINK_LOG=m
--CONFIG_NETFILTER_XTABLES=m
--CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
--CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
--CONFIG_NETFILTER_XT_TARGET_MARK=m
--CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
--CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
--CONFIG_NETFILTER_XT_MATCH_COMMENT=m
--CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
--CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
--CONFIG_NETFILTER_XT_MATCH_DCCP=m
--CONFIG_NETFILTER_XT_MATCH_HELPER=m
--CONFIG_NETFILTER_XT_MATCH_LENGTH=m
--CONFIG_NETFILTER_XT_MATCH_LIMIT=m
--CONFIG_NETFILTER_XT_MATCH_MAC=m
--CONFIG_NETFILTER_XT_MATCH_MARK=m
--CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
--CONFIG_NETFILTER_XT_MATCH_REALM=m
--CONFIG_NETFILTER_XT_MATCH_SCTP=m
--CONFIG_NETFILTER_XT_MATCH_STATE=m
--CONFIG_NETFILTER_XT_MATCH_STRING=m
--CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
--
--#
--# IP: Netfilter Configuration
--#
--CONFIG_IP_NF_CONNTRACK=m
--# CONFIG_IP_NF_CT_ACCT is not set
--CONFIG_IP_NF_CONNTRACK_MARK=y
--CONFIG_IP_NF_CONNTRACK_EVENTS=y
--CONFIG_IP_NF_CONNTRACK_NETLINK=m
--CONFIG_IP_NF_CT_PROTO_SCTP=m
--CONFIG_IP_NF_FTP=m
--CONFIG_IP_NF_IRC=m
--CONFIG_IP_NF_NETBIOS_NS=m
--CONFIG_IP_NF_TFTP=m
--CONFIG_IP_NF_AMANDA=m
--CONFIG_IP_NF_PPTP=m
--CONFIG_IP_NF_QUEUE=m
--CONFIG_IP_NF_IPTABLES=m
--CONFIG_IP_NF_MATCH_IPRANGE=m
--CONFIG_IP_NF_MATCH_MULTIPORT=m
--CONFIG_IP_NF_MATCH_TOS=m
--CONFIG_IP_NF_MATCH_RECENT=m
--CONFIG_IP_NF_MATCH_ECN=m
--CONFIG_IP_NF_MATCH_DSCP=m
--CONFIG_IP_NF_MATCH_AH_ESP=m
--CONFIG_IP_NF_MATCH_TTL=m
--CONFIG_IP_NF_MATCH_OWNER=m
--CONFIG_IP_NF_MATCH_ADDRTYPE=m
--CONFIG_IP_NF_MATCH_HASHLIMIT=m
--CONFIG_IP_NF_MATCH_POLICY=m
--CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
--CONFIG_IP_NF_FILTER=m
--CONFIG_IP_NF_TARGET_REJECT=m
--CONFIG_IP_NF_TARGET_LOG=m
--CONFIG_IP_NF_TARGET_ULOG=m
--CONFIG_IP_NF_TARGET_TCPMSS=m
--CONFIG_IP_NF_NAT=m
--CONFIG_IP_NF_NAT_NEEDED=y
--CONFIG_IP_NF_TARGET_MASQUERADE=m
--CONFIG_IP_NF_TARGET_REDIRECT=m
--CONFIG_IP_NF_TARGET_NETMAP=m
--CONFIG_IP_NF_TARGET_SAME=m
--CONFIG_IP_NF_NAT_SNMP_BASIC=m
--CONFIG_IP_NF_NAT_IRC=m
--CONFIG_IP_NF_NAT_FTP=m
--CONFIG_IP_NF_NAT_TFTP=m
--CONFIG_IP_NF_NAT_AMANDA=m
--CONFIG_IP_NF_NAT_PPTP=m
--CONFIG_IP_NF_MANGLE=m
--CONFIG_IP_NF_TARGET_TOS=m
--CONFIG_IP_NF_TARGET_ECN=m
--CONFIG_IP_NF_TARGET_DSCP=m
--CONFIG_IP_NF_TARGET_TTL=m
--CONFIG_IP_NF_TARGET_CLUSTERIP=m
--CONFIG_IP_NF_RAW=m
--CONFIG_IP_NF_ARPTABLES=m
--CONFIG_IP_NF_ARPFILTER=m
--CONFIG_IP_NF_ARP_MANGLE=m
--
--#
--# IPv6: Netfilter Configuration (EXPERIMENTAL)
--#
--CONFIG_IP6_NF_QUEUE=m
--CONFIG_IP6_NF_IPTABLES=m
--CONFIG_IP6_NF_MATCH_RT=m
--CONFIG_IP6_NF_MATCH_OPTS=m
--CONFIG_IP6_NF_MATCH_FRAG=m
--CONFIG_IP6_NF_MATCH_HL=m
--CONFIG_IP6_NF_MATCH_MULTIPORT=m
--CONFIG_IP6_NF_MATCH_OWNER=m
--CONFIG_IP6_NF_MATCH_IPV6HEADER=m
--CONFIG_IP6_NF_MATCH_AHESP=m
--CONFIG_IP6_NF_MATCH_EUI64=m
--CONFIG_IP6_NF_MATCH_POLICY=m
--CONFIG_IP6_NF_FILTER=m
--CONFIG_IP6_NF_TARGET_LOG=m
--CONFIG_IP6_NF_TARGET_REJECT=m
--CONFIG_IP6_NF_MANGLE=m
--CONFIG_IP6_NF_TARGET_HL=m
--CONFIG_IP6_NF_RAW=m
--
--#
--# Bridge: Netfilter Configuration
--#
--CONFIG_BRIDGE_NF_EBTABLES=m
--CONFIG_BRIDGE_EBT_BROUTE=m
--CONFIG_BRIDGE_EBT_T_FILTER=m
--CONFIG_BRIDGE_EBT_T_NAT=m
--CONFIG_BRIDGE_EBT_802_3=m
--CONFIG_BRIDGE_EBT_AMONG=m
--CONFIG_BRIDGE_EBT_ARP=m
--CONFIG_BRIDGE_EBT_IP=m
--CONFIG_BRIDGE_EBT_LIMIT=m
--CONFIG_BRIDGE_EBT_MARK=m
--CONFIG_BRIDGE_EBT_PKTTYPE=m
--CONFIG_BRIDGE_EBT_STP=m
--CONFIG_BRIDGE_EBT_VLAN=m
--CONFIG_BRIDGE_EBT_ARPREPLY=m
--CONFIG_BRIDGE_EBT_DNAT=m
--CONFIG_BRIDGE_EBT_MARK_T=m
--CONFIG_BRIDGE_EBT_REDIRECT=m
--CONFIG_BRIDGE_EBT_SNAT=m
--CONFIG_BRIDGE_EBT_LOG=m
--CONFIG_BRIDGE_EBT_ULOG=m
--
--#
--# DCCP Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_DCCP=m
--CONFIG_INET_DCCP_DIAG=m
--
--#
--# DCCP CCIDs Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_DCCP_CCID3=m
--CONFIG_IP_DCCP_TFRC_LIB=m
--
--#
--# DCCP Kernel Hacking
--#
--# CONFIG_IP_DCCP_DEBUG is not set
--# CONFIG_IP_DCCP_UNLOAD_HACK is not set
--
--#
--# SCTP Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_SCTP=m
--# CONFIG_SCTP_DBG_MSG is not set
--# CONFIG_SCTP_DBG_OBJCNT is not set
--CONFIG_SCTP_HMAC_NONE=y
--# CONFIG_SCTP_HMAC_SHA1 is not set
--# CONFIG_SCTP_HMAC_MD5 is not set
--
--#
--# TIPC Configuration (EXPERIMENTAL)
--#
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--CONFIG_BRIDGE=m
--CONFIG_VLAN_8021Q=m
--# CONFIG_DECNET is not set
--CONFIG_LLC=y
--CONFIG_LLC2=m
--CONFIG_IPX=m
--CONFIG_IPX_INTERN=y
--CONFIG_ATALK=m
--CONFIG_DEV_APPLETALK=y
--CONFIG_IPDDP=m
--CONFIG_IPDDP_ENCAP=y
--CONFIG_IPDDP_DECAP=y
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_NET_DIVERT is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--
--#
--# QoS and/or fair queueing
--#
--CONFIG_NET_SCHED=y
--CONFIG_NET_SCH_CLK_JIFFIES=y
--# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
--# CONFIG_NET_SCH_CLK_CPU is not set
--
--#
--# Queueing/Scheduling
--#
--CONFIG_NET_SCH_CBQ=m
--CONFIG_NET_SCH_HTB=m
--CONFIG_NET_SCH_HFSC=m
--CONFIG_NET_SCH_PRIO=m
--CONFIG_NET_SCH_RED=m
--CONFIG_NET_SCH_SFQ=m
--CONFIG_NET_SCH_TEQL=m
--CONFIG_NET_SCH_TBF=m
--CONFIG_NET_SCH_GRED=m
--CONFIG_NET_SCH_DSMARK=m
--CONFIG_NET_SCH_NETEM=m
--CONFIG_NET_SCH_INGRESS=m
--
--#
--# Classification
--#
--CONFIG_NET_CLS=y
--CONFIG_NET_CLS_BASIC=m
--CONFIG_NET_CLS_TCINDEX=m
--CONFIG_NET_CLS_ROUTE4=m
--CONFIG_NET_CLS_ROUTE=y
--CONFIG_NET_CLS_FW=m
--CONFIG_NET_CLS_U32=m
--CONFIG_CLS_U32_PERF=y
--CONFIG_CLS_U32_MARK=y
--CONFIG_NET_CLS_RSVP=m
--CONFIG_NET_CLS_RSVP6=m
--CONFIG_NET_EMATCH=y
--CONFIG_NET_EMATCH_STACK=32
--CONFIG_NET_EMATCH_CMP=m
--CONFIG_NET_EMATCH_NBYTE=m
--CONFIG_NET_EMATCH_U32=m
--CONFIG_NET_EMATCH_META=m
--CONFIG_NET_EMATCH_TEXT=m
--CONFIG_NET_CLS_ACT=y
--CONFIG_NET_ACT_POLICE=m
--CONFIG_NET_ACT_GACT=m
--CONFIG_GACT_PROB=y
--CONFIG_NET_ACT_MIRRED=m
--CONFIG_NET_ACT_IPT=m
--CONFIG_NET_ACT_PEDIT=m
--CONFIG_NET_ACT_SIMP=m
--CONFIG_NET_CLS_IND=y
--CONFIG_NET_ESTIMATOR=y
--
--#
--# Network testing
--#
--CONFIG_NET_PKTGEN=m
--# CONFIG_HAMRADIO is not set
--# CONFIG_IRDA is not set
--CONFIG_BT=m
--CONFIG_BT_L2CAP=m
--CONFIG_BT_SCO=m
--CONFIG_BT_RFCOMM=m
--CONFIG_BT_RFCOMM_TTY=y
--CONFIG_BT_BNEP=m
--CONFIG_BT_BNEP_MC_FILTER=y
--CONFIG_BT_BNEP_PROTO_FILTER=y
--CONFIG_BT_HIDP=m
--
--#
--# Bluetooth device drivers
--#
--CONFIG_BT_HCIUSB=m
--CONFIG_BT_HCIUSB_SCO=y
--# CONFIG_BT_HCIUART is not set
--CONFIG_BT_HCIBCM203X=m
--CONFIG_BT_HCIBPA10X=m
--CONFIG_BT_HCIBFUSB=m
--CONFIG_BT_HCIVHCI=m
--CONFIG_IEEE80211=m
--# CONFIG_IEEE80211_DEBUG is not set
--CONFIG_IEEE80211_CRYPT_WEP=m
--CONFIG_IEEE80211_CRYPT_CCMP=m
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=m
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--
--#
--# Connector - unified userspace <-> kernelspace linker
--#
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--
--#
--# Memory Technology Devices (MTD)
--#
--# CONFIG_MTD is not set
--
--#
--# Parallel port support
--#
--CONFIG_PARPORT=m
--CONFIG_PARPORT_PC=m
--CONFIG_PARPORT_SERIAL=m
--CONFIG_PARPORT_PC_FIFO=y
--# CONFIG_PARPORT_PC_SUPERIO is not set
--CONFIG_PARPORT_NOT_PC=y
--# CONFIG_PARPORT_GSC is not set
--CONFIG_PARPORT_1284=y
--
--#
--# Plug and Play support
--#
--
--#
--# Block devices
--#
--CONFIG_BLK_DEV_FD=m
--# CONFIG_PARIDE is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=m
--CONFIG_BLK_DEV_CRYPTOLOOP=m
--CONFIG_BLK_DEV_NBD=m
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=123456
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_CDROM_PKTCDVD=m
--CONFIG_CDROM_PKTCDVD_BUFFERS=8
--CONFIG_CDROM_PKTCDVD_WCACHE=y
--CONFIG_CIPHER_TWOFISH=m
--CONFIG_ATA_OVER_ETH=m
--
--#
--# ATA/ATAPI/MFM/RLL support
--#
--CONFIG_IDE=y
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=y
--# CONFIG_IDEDISK_MULTI_MODE is not set
--CONFIG_BLK_DEV_IDECD=m
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--CONFIG_BLK_DEV_IDESCSI=m
--CONFIG_IDE_TASK_IOCTL=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_IDEPCI_SHARE_IRQ=y
--# CONFIG_BLK_DEV_OFFBOARD is not set
--# CONFIG_BLK_DEV_GENERIC is not set
--# CONFIG_BLK_DEV_OPTI621 is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--CONFIG_BLK_DEV_IDEDMA_FORCED=y
--CONFIG_IDEDMA_PCI_AUTO=y
--# CONFIG_IDEDMA_ONLYDISK is not set
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--CONFIG_BLK_DEV_AMD74XX=y
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--CONFIG_BLK_DEV_SIIMAGE=y
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--# CONFIG_BLK_DEV_VIA82CXXX is not set
--CONFIG_BLK_DEV_IDE_PMAC=y
--CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
--CONFIG_BLK_DEV_IDEDMA_PMAC=y
--# CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set
--# CONFIG_IDE_ARM is not set
--CONFIG_BLK_DEV_IDEDMA=y
--# CONFIG_IDEDMA_IVB is not set
--CONFIG_IDEDMA_AUTO=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--CONFIG_RAID_ATTRS=m
--CONFIG_SCSI=m
--CONFIG_SCSI_NETLINK=y
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=m
--CONFIG_SD_IOSTATS=y
--CONFIG_CHR_DEV_ST=m
--# CONFIG_CHR_DEV_OSST is not set
--CONFIG_BLK_DEV_SR=m
--CONFIG_BLK_DEV_SR_VENDOR=y
--CONFIG_CHR_DEV_SG=m
--CONFIG_CHR_DEV_SCH=m
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--CONFIG_SCSI_CONSTANTS=y
--CONFIG_SCSI_LOGGING=y
--
--#
--# SCSI Transport Attributes
--#
--CONFIG_SCSI_SPI_ATTRS=m
--CONFIG_SCSI_FC_ATTRS=m
--# CONFIG_SCSI_ISCSI_ATTRS is not set
--CONFIG_SCSI_SAS_ATTRS=m
--CONFIG_SCSI_SAS_LIBSAS=m
--CONFIG_SCSI_SAS_ATA=y
--# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
--CONFIG_ISCSI_TARGET=m
--
--#
--# SCSI low-level drivers
--#
--# CONFIG_ISCSI_TCP is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--CONFIG_SCSI_AIC94XX=m
--# CONFIG_AIC94XX_DEBUG is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--CONFIG_MEGARAID_SAS=m
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--CONFIG_SCSI_IBMVSCSI=m
--CONFIG_SCSI_IBMVSCSIS=m
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_PPA is not set
--# CONFIG_SCSI_IMM is not set
--CONFIG_SCSI_SYM53C8XX_2=m
--CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
--CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
--CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
--CONFIG_SCSI_SYM53C8XX_MMIO=y
--CONFIG_SCSI_IPR=m
--CONFIG_SCSI_IPR_TRACE=y
--CONFIG_SCSI_IPR_DUMP=y
--# CONFIG_SCSI_QLOGIC_FC is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--CONFIG_SCSI_QLA_FC=m
--# CONFIG_SCSI_QLA_ISCSI is not set
--CONFIG_SCSI_LPFC=m
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--CONFIG_SCSI_DEBUG=m
--
--#
--# Serial ATA (prod) and Parallel ATA (experimental) drivers
--#
--CONFIG_ATA=m
--CONFIG_SATA_AHCI=m
--CONFIG_SATA_SVW=m
--# CONFIG_ATA_PIIX is not set
--# CONFIG_SATA_MV is not set
--# CONFIG_SATA_NV is not set
--# CONFIG_PDC_ADMA is not set
--# CONFIG_SATA_QSTOR is not set
--# CONFIG_SATA_PROMISE is not set
--# CONFIG_SATA_SX4 is not set
--# CONFIG_SATA_SIL is not set
--# CONFIG_SATA_SIL24 is not set
--# CONFIG_SATA_SIS is not set
--# CONFIG_SATA_ULI is not set
--# CONFIG_SATA_VIA is not set
--CONFIG_SATA_VITESSE=m
--CONFIG_SATA_INTEL_COMBINED=y
--# CONFIG_PATA_ALI is not set
--# CONFIG_PATA_AMD is not set
--# CONFIG_PATA_ARTOP is not set
--# CONFIG_PATA_ATIIXP is not set
--# CONFIG_PATA_CMD64X is not set
--# CONFIG_PATA_CS5520 is not set
--# CONFIG_PATA_CS5530 is not set
--# CONFIG_PATA_CYPRESS is not set
--# CONFIG_PATA_EFAR is not set
--# CONFIG_ATA_GENERIC is not set
--# CONFIG_PATA_HPT366 is not set
--# CONFIG_PATA_HPT37X is not set
--# CONFIG_PATA_HPT3X2N is not set
--# CONFIG_PATA_HPT3X3 is not set
--# CONFIG_PATA_IT821X is not set
--# CONFIG_PATA_IT8213 is not set
--# CONFIG_PATA_JMICRON is not set
--# CONFIG_PATA_TRIFLEX is not set
--# CONFIG_PATA_MARVELL is not set
--# CONFIG_PATA_MPIIX is not set
--# CONFIG_PATA_OLDPIIX is not set
--# CONFIG_PATA_NETCELL is not set
--# CONFIG_PATA_NS87410 is not set
--# CONFIG_PATA_OPTI is not set
--# CONFIG_PATA_OPTIDMA is not set
--# CONFIG_PATA_PDC_OLD is not set
--# CONFIG_PATA_RADISYS is not set
--# CONFIG_PATA_RZ1000 is not set
--# CONFIG_PATA_SC1200 is not set
--# CONFIG_PATA_SERVERWORKS is not set
--CONFIG_PATA_PDC2027X=m
--# CONFIG_PATA_SIL680 is not set
--# CONFIG_PATA_SIS is not set
--# CONFIG_PATA_VIA is not set
--CONFIG_PATA_WINBOND=m
--
--#
--# Multi-device support (RAID and LVM)
--#
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=m
--CONFIG_MD_RAID0=m
--CONFIG_MD_RAID1=m
--CONFIG_MD_RAID10=m
--CONFIG_MD_RAID5=m
--CONFIG_MD_RAID6=m
--CONFIG_MD_MULTIPATH=m
--CONFIG_MD_FAULTY=m
--CONFIG_BLK_DEV_DM=m
--CONFIG_DM_CRYPT=m
--CONFIG_DM_SNAPSHOT=m
--CONFIG_DM_MIRROR=m
--CONFIG_DM_ZERO=m
--CONFIG_DM_MULTIPATH=m
--CONFIG_DM_MULTIPATH_EMC=m
--CONFIG_DM_MULTIPATH_HP_SW=m
--CONFIG_DM_MULTIPATH_RDAC=m
--CONFIG_DM_MULTIPATH_ALUA=m
--CONFIG_DM_NL_EVT=y
--CONFIG_FUSION=y
--CONFIG_FUSION_SPI=m
--CONFIG_FUSION_FC=m
--CONFIG_FUSION_SAS=m
--CONFIG_FUSION_MAX_SGE=128
--CONFIG_FUSION_MAX_FC_SGE=256
--CONFIG_FUSION_CTL=m
--CONFIG_FUSION_LAN=m
--CONFIG_FUSION_LOGGING=y
--
--#
--# IEEE 1394 (FireWire) support
--#
--CONFIG_IEEE1394=m
--
--#
--# Subsystem Options
--#
--# CONFIG_IEEE1394_VERBOSEDEBUG is not set
--# CONFIG_IEEE1394_OUI_DB is not set
--CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
--CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
--CONFIG_IEEE1394_EXPORT_FULL_API=y
--
--#
--# Device Drivers
--#
--# CONFIG_IEEE1394_PCILYNX is not set
--CONFIG_IEEE1394_OHCI1394=m
--
--#
--# Protocol Drivers
--#
--CONFIG_IEEE1394_VIDEO1394=m
--CONFIG_IEEE1394_SBP2=m
--# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
--CONFIG_IEEE1394_ETH1394=m
--CONFIG_IEEE1394_DV1394=m
--CONFIG_IEEE1394_RAWIO=m
--
--#
--# I2O device support
--#
--# CONFIG_I2O is not set
--
--#
--# Macintosh device drivers
--#
--CONFIG_ADB=y
--CONFIG_ADB_PMU=y
--CONFIG_PMAC_SMU=y
--CONFIG_INPUT_ADBHID=y
--CONFIG_MAC_EMUMOUSEBTN=y
--CONFIG_THERM_PM72=y
--CONFIG_WINDFARM=y
--CONFIG_WINDFARM_PM81=y
--CONFIG_WINDFARM_PM91=y
--CONFIG_WINDFARM_PM112=y
--
--#
--# Network device support
--#
--CONFIG_NETDEVICES=y
--CONFIG_IFB=m
--CONFIG_DUMMY=m
--CONFIG_BONDING=m
--CONFIG_EQUALIZER=m
--CONFIG_TUN=m
--
--#
--# ARCnet devices
--#
--# CONFIG_ARCNET is not set
--
--#
--# PHY device support
--#
--CONFIG_PHYLIB=m
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=m
--CONFIG_DAVICOM_PHY=m
--CONFIG_QSEMI_PHY=m
--CONFIG_LXT_PHY=m
--CONFIG_CICADA_PHY=m
--
--#
--# Ethernet (10 or 100Mbit)
--#
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=m
--# CONFIG_HAPPYMEAL is not set
--CONFIG_SUNGEM=m
--CONFIG_CASSINI=m
--CONFIG_NET_VENDOR_3COM=y
--CONFIG_VORTEX=m
--CONFIG_TYPHOON=m
--
--#
--# Tulip family network device support
--#
--CONFIG_NET_TULIP=y
--# CONFIG_DE2104X is not set
--CONFIG_TULIP=m
--CONFIG_TULIP_MWI=y
--CONFIG_TULIP_MMIO=y
--CONFIG_TULIP_NAPI=y
--CONFIG_TULIP_NAPI_HW_MITIGATION=y
--CONFIG_DE4X5=m
--CONFIG_WINBOND_840=m
--CONFIG_DM9102=m
--CONFIG_ULI526X=m
--# CONFIG_HP100 is not set
--CONFIG_IBMVETH=m
--CONFIG_NET_PCI=y
--CONFIG_PCNET32=m
--CONFIG_AMD8111_ETH=m
--CONFIG_AMD8111E_NAPI=y
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_DGRS is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=m
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_NET_POCKET is not set
--
--#
--# Ethernet (1000 Mbit)
--#
--CONFIG_ACENIC=m
--CONFIG_ACENIC_OMIT_TIGON_I=y
--# CONFIG_DL2K is not set
--CONFIG_E1000=m
--CONFIG_E1000_NAPI=y
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--CONFIG_IGB=m
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--CONFIG_R8169=m
--CONFIG_R8169_NAPI=y
--CONFIG_R8169_VLAN=y
--CONFIG_SIS190=m
--# CONFIG_SKGE is not set
--CONFIG_SKY2=m
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--CONFIG_TIGON3=m
--CONFIG_BNX2=m
--CONFIG_BNX2X=m
--CONFIG_SPIDER_NET=m
--# CONFIG_MV643XX_ETH is not set
--CONFIG_QLA3XXX=m
--
--#
--# Ethernet (10000 Mbit)
--#
--CONFIG_CHELSIO_T1=m
--CONFIG_EHEA=m
--# CONFIG_CHELSIO_T3 is not set
--CONFIG_IXGBE=m
--CONFIG_IXGBE_NAPI=y
--CONFIG_IXGB=m
--CONFIG_IXGB_NAPI=y
--CONFIG_S2IO=m
--CONFIG_S2IO_NAPI=y
--CONFIG_NETXEN_NIC=m
--CONFIG_MYRI10GE=m
--
--#
--# Token Ring devices
--#
--CONFIG_TR=y
--CONFIG_IBMOL=m
--# CONFIG_3C359 is not set
--# CONFIG_TMS380TR is not set
--
--#
--# Wireless LAN (non-hamradio)
--#
--# CONFIG_NET_RADIO is not set
--
--#
--# Wan interfaces
--#
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PLIP is not set
--CONFIG_PPP=m
--CONFIG_PPP_MULTILINK=y
--CONFIG_PPP_FILTER=y
--CONFIG_PPP_ASYNC=m
--CONFIG_PPP_SYNC_TTY=m
--CONFIG_PPP_DEFLATE=m
--CONFIG_PPP_BSDCOMP=m
--CONFIG_PPP_MPPE=m
--CONFIG_PPPOE=m
--CONFIG_SLIP=m
--CONFIG_SLIP_COMPRESSED=y
--CONFIG_SLIP_SMART=y
--# CONFIG_SLIP_MODE_SLIP6 is not set
--CONFIG_NET_FC=y
--CONFIG_SHAPER=m
--CONFIG_NETCONSOLE=m
--CONFIG_NETPOLL=y
--CONFIG_NETPOLL_TRAP=y
--CONFIG_NET_POLL_CONTROLLER=y
--
--#
--# ISDN subsystem
--#
--# CONFIG_ISDN is not set
--
--#
--# Telephony Support
--#
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--
--#
--# Userland interfaces
--#
--CONFIG_INPUT_MOUSEDEV=y
--# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
--CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
--CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
--CONFIG_INPUT_JOYDEV=m
--CONFIG_INPUT_TSDEV=m
--CONFIG_INPUT_TSDEV_SCREEN_X=240
--CONFIG_INPUT_TSDEV_SCREEN_Y=320
--CONFIG_INPUT_EVDEV=y
--CONFIG_INPUT_EVBUG=m
--
--#
--# Input Device Drivers
--#
--CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
--# CONFIG_KEYBOARD_SUNKBD is not set
--# CONFIG_KEYBOARD_LKKBD is not set
--# CONFIG_KEYBOARD_XTKBD is not set
--# CONFIG_KEYBOARD_NEWTON is not set
--CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
--CONFIG_MOUSE_SERIAL=m
--# CONFIG_MOUSE_VSXXXAA is not set
--CONFIG_INPUT_JOYSTICK=y
--# CONFIG_JOYSTICK_ANALOG is not set
--# CONFIG_JOYSTICK_A3D is not set
--# CONFIG_JOYSTICK_ADI is not set
--# CONFIG_JOYSTICK_COBRA is not set
--# CONFIG_JOYSTICK_GF2K is not set
--# CONFIG_JOYSTICK_GRIP is not set
--# CONFIG_JOYSTICK_GRIP_MP is not set
--# CONFIG_JOYSTICK_GUILLEMOT is not set
--# CONFIG_JOYSTICK_INTERACT is not set
--# CONFIG_JOYSTICK_SIDEWINDER is not set
--# CONFIG_JOYSTICK_TMDC is not set
--CONFIG_JOYSTICK_IFORCE=m
--CONFIG_JOYSTICK_IFORCE_USB=y
--CONFIG_JOYSTICK_IFORCE_232=y
--CONFIG_JOYSTICK_WARRIOR=m
--CONFIG_JOYSTICK_MAGELLAN=m
--CONFIG_JOYSTICK_SPACEORB=m
--CONFIG_JOYSTICK_SPACEBALL=m
--CONFIG_JOYSTICK_STINGER=m
--CONFIG_JOYSTICK_TWIDJOY=m
--# CONFIG_JOYSTICK_DB9 is not set
--# CONFIG_JOYSTICK_GAMECON is not set
--# CONFIG_JOYSTICK_TURBOGRAFX is not set
--CONFIG_JOYSTICK_JOYDUMP=m
--CONFIG_INPUT_TOUCHSCREEN=y
--CONFIG_TOUCHSCREEN_ADS7846=m
--# CONFIG_TOUCHSCREEN_GUNZE is not set
--# CONFIG_TOUCHSCREEN_ELO is not set
--# CONFIG_TOUCHSCREEN_MTOUCH is not set
--# CONFIG_TOUCHSCREEN_MK712 is not set
--CONFIG_INPUT_MISC=y
--CONFIG_INPUT_PCSPKR=m
--CONFIG_INPUT_UINPUT=m
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=m
--# CONFIG_SERIO_PARKBD is not set
--# CONFIG_SERIO_PCIPS2 is not set
--CONFIG_SERIO_LIBPS2=y
--CONFIG_SERIO_RAW=m
--CONFIG_GAMEPORT=m
--# CONFIG_GAMEPORT_NS558 is not set
--# CONFIG_GAMEPORT_L4 is not set
--# CONFIG_GAMEPORT_EMU10K1 is not set
--# CONFIG_GAMEPORT_FM801 is not set
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_PMACZILOG=y
--CONFIG_SERIAL_PMACZILOG_CONSOLE=y
--CONFIG_SERIAL_ICOM=m
--CONFIG_SERIAL_JSM=m
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=64
--CONFIG_PRINTER=m
--# CONFIG_LP_CONSOLE is not set
--# CONFIG_PPDEV is not set
--# CONFIG_TIPAR is not set
--CONFIG_HVC_CONSOLE=y
--CONFIG_HVC_RTAS=y
--CONFIG_HVCS=m
--
--#
--# IPMI
--#
--# CONFIG_IPMI_HANDLER is not set
--
--#
--# Watchdog Cards
--#
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--CONFIG_SOFT_WATCHDOG=m
--CONFIG_WATCHDOG_RTAS=m
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# USB-based Watchdog Cards
--#
--# CONFIG_USBPCWATCHDOG is not set
--# CONFIG_RTC is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_DTLK is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--
--#
--# Ftape, the floppy tape device driver
--#
--CONFIG_AGP=m
--CONFIG_AGP_UNINORTH=m
--CONFIG_DRM=m
--# CONFIG_DRM_TDFX is not set
--CONFIG_DRM_R128=m
--CONFIG_DRM_RADEON=m
--# CONFIG_DRM_MGA is not set
--# CONFIG_DRM_SIS is not set
--# CONFIG_DRM_VIA is not set
--# CONFIG_DRM_SAVAGE is not set
--CONFIG_RAW_DRIVER=m
--CONFIG_MAX_RAW_DEVS=4096
--CONFIG_HANGCHECK_TIMER=m
--
--#
--# TPM devices
--#
--CONFIG_TCG_TPM=m
--CONFIG_TCG_TIS=m
--CONFIG_TCG_ATMEL=m
--# CONFIG_TELCLOCK is not set
--CONFIG_CRASHER=m
--
--#
--# I2C support
--#
--CONFIG_I2C=y
--CONFIG_I2C_CHARDEV=m
--
--#
--# I2C Algorithms
--#
--CONFIG_I2C_ALGOBIT=y
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--CONFIG_I2C_AMD8111=m
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_POWERMAC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_PARPORT is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_SCx200_ACB is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--# CONFIG_I2C_PCA_ISA is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_SENSORS_DS1337 is not set
--# CONFIG_SENSORS_DS1374 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_SENSORS_PCA9539 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_SENSORS_RTC8564 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_RTC_X1205_I2C is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--CONFIG_SPI=y
--CONFIG_SPI_DEBUG=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=m
--CONFIG_SPI_BUTTERFLY=m
--
--#
--# SPI Protocol Masters
--#
--
--#
--# Dallas's 1-wire bus
--#
--# CONFIG_W1 is not set
--
--#
--# Hardware Monitoring support
--#
--# CONFIG_HWMON is not set
--# CONFIG_HWMON_VID is not set
--
--#
--# Misc devices
--#
--# CONFIG_TIFM_CORE is not set
--
--#
--# Multimedia Capabilities Port drivers
--#
--
--#
--# Multimedia devices
--#
--CONFIG_VIDEO_DEV=m
--
--#
--# Video For Linux
--#
--
--#
--# Video Adapters
--#
--# CONFIG_VIDEO_ADV_DEBUG is not set
--CONFIG_VIDEO_BT848=m
--CONFIG_VIDEO_SAA6588=m
--# CONFIG_VIDEO_BWQCAM is not set
--# CONFIG_VIDEO_CQCAM is not set
--# CONFIG_VIDEO_W9966 is not set
--# CONFIG_VIDEO_CPIA is not set
--# CONFIG_VIDEO_SAA5246A is not set
--# CONFIG_VIDEO_SAA5249 is not set
--# CONFIG_TUNER_3036 is not set
--# CONFIG_VIDEO_STRADIS is not set
--# CONFIG_VIDEO_ZORAN is not set
--# CONFIG_VIDEO_SAA7134 is not set
--# CONFIG_VIDEO_MXB is not set
--# CONFIG_VIDEO_DPC is not set
--# CONFIG_VIDEO_HEXIUM_ORION is not set
--# CONFIG_VIDEO_HEXIUM_GEMINI is not set
--# CONFIG_VIDEO_CX88 is not set
--# CONFIG_VIDEO_EM28XX is not set
--# CONFIG_VIDEO_OVCAMCHIP is not set
--# CONFIG_VIDEO_AUDIO_DECODER is not set
--# CONFIG_VIDEO_DECODER is not set
--
--#
--# Radio Adapters
--#
--# CONFIG_RADIO_GEMTEK_PCI is not set
--# CONFIG_RADIO_MAXIRADIO is not set
--# CONFIG_RADIO_MAESTRO is not set
--
--#
--# Digital Video Broadcasting Devices
--#
--# CONFIG_DVB is not set
--CONFIG_VIDEO_TUNER=m
--CONFIG_VIDEO_BUF=m
--CONFIG_VIDEO_BTCX=m
--CONFIG_VIDEO_IR=m
--CONFIG_VIDEO_TVEEPROM=m
--
--#
--# Graphics support
--#
--CONFIG_FB=y
--CONFIG_FB_CFB_FILLRECT=y
--CONFIG_FB_CFB_COPYAREA=y
--CONFIG_FB_CFB_IMAGEBLIT=y
--CONFIG_FB_MACMODES=y
--CONFIG_FB_MODE_HELPERS=y
--CONFIG_FB_TILEBLITTING=y
--# CONFIG_FB_CIRRUS is not set
--# CONFIG_FB_PM2 is not set
--# CONFIG_FB_CYBER2000 is not set
--CONFIG_FB_OF=y
--# CONFIG_FB_CONTROL is not set
--# CONFIG_FB_PLATINUM is not set
--# CONFIG_FB_VALKYRIE is not set
--# CONFIG_FB_CT65550 is not set
--# CONFIG_FB_ASILIANT is not set
--# CONFIG_FB_IMSTT is not set
--# CONFIG_FB_VGA16 is not set
--# CONFIG_FB_S1D13XXX is not set
--CONFIG_FB_NVIDIA=y
--CONFIG_FB_NVIDIA_I2C=y
--# CONFIG_FB_RIVA is not set
--CONFIG_FB_MATROX=y
--CONFIG_FB_MATROX_MILLENIUM=y
--CONFIG_FB_MATROX_MYSTIQUE=y
--CONFIG_FB_MATROX_G=y
--CONFIG_FB_MATROX_I2C=m
--CONFIG_FB_MATROX_MAVEN=m
--CONFIG_FB_MATROX_MULTIHEAD=y
--# CONFIG_FB_RADEON_OLD is not set
--CONFIG_FB_RADEON=y
--CONFIG_FB_RADEON_I2C=y
--# CONFIG_FB_RADEON_DEBUG is not set
--# CONFIG_FB_ATY128 is not set
--# CONFIG_FB_ATY is not set
--# CONFIG_FB_SAVAGE is not set
--# CONFIG_FB_SIS is not set
--# CONFIG_FB_NEOMAGIC is not set
--# CONFIG_FB_KYRO is not set
--# CONFIG_FB_3DFX is not set
--# CONFIG_FB_VOODOO1 is not set
--# CONFIG_FB_TRIDENT is not set
--# CONFIG_FB_VIRTUAL is not set
--
--#
--# Console display driver support
--#
--# CONFIG_VGA_CONSOLE is not set
--CONFIG_DUMMY_CONSOLE=y
--CONFIG_FRAMEBUFFER_CONSOLE=y
--CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
--# CONFIG_FONTS is not set
--CONFIG_FONT_8x8=y
--CONFIG_FONT_8x16=y
--
--#
--# Logo configuration
--#
--CONFIG_LOGO=y
--# CONFIG_LOGO_LINUX_MONO is not set
--CONFIG_LOGO_LINUX_VGA16=y
--# CONFIG_LOGO_LINUX_CLUT224 is not set
--CONFIG_BACKLIGHT_LCD_SUPPORT=y
--CONFIG_BACKLIGHT_CLASS_DEVICE=m
--CONFIG_BACKLIGHT_DEVICE=y
--CONFIG_LCD_CLASS_DEVICE=m
--CONFIG_LCD_DEVICE=y
--
--#
--# Bootsplash configuration
--#
--
--#
--# Sound
--#
--CONFIG_SOUND=m
--
--#
--# Advanced Linux Sound Architecture
--#
--CONFIG_SND=m
--CONFIG_SND_TIMER=m
--CONFIG_SND_PCM=m
--CONFIG_SND_HWDEP=m
--CONFIG_SND_RAWMIDI=m
--CONFIG_SND_SEQUENCER=m
--CONFIG_SND_SEQ_DUMMY=m
--CONFIG_SND_OSSEMUL=y
--CONFIG_SND_MIXER_OSS=m
--CONFIG_SND_PCM_OSS=m
--CONFIG_SND_PCM_OSS_PLUGINS=y
--CONFIG_SND_SEQUENCER_OSS=y
--CONFIG_SND_DYNAMIC_MINORS=y
--CONFIG_SND_SUPPORT_OLD_API=y
--CONFIG_SND_VERBOSE_PROCFS=y
--CONFIG_SND_VERBOSE_PRINTK=y
--CONFIG_SND_DEBUG=y
--# CONFIG_SND_DEBUG_DETECT is not set
--
--#
--# Generic devices
--#
--CONFIG_SND_MPU401_UART=m
--CONFIG_SND_DUMMY=m
--CONFIG_SND_VIRMIDI=m
--CONFIG_SND_MTPAV=m
--CONFIG_SND_SERIAL_U16550=m
--CONFIG_SND_MPU401=m
--
--#
--# PCI devices
--#
--# CONFIG_SND_AD1889 is not set
--# CONFIG_SND_ALS4000 is not set
--# CONFIG_SND_ALI5451 is not set
--# CONFIG_SND_ATIIXP is not set
--# CONFIG_SND_ATIIXP_MODEM is not set
--# CONFIG_SND_AU8810 is not set
--# CONFIG_SND_AU8820 is not set
--# CONFIG_SND_AU8830 is not set
--# CONFIG_SND_AZT3328 is not set
--# CONFIG_SND_BT87X is not set
--# CONFIG_SND_CA0106 is not set
--# CONFIG_SND_CMIPCI is not set
--# CONFIG_SND_CS4281 is not set
--# CONFIG_SND_CS46XX is not set
--CONFIG_SND_DARLA20=m
--CONFIG_SND_GINA20=m
--CONFIG_SND_LAYLA20=m
--CONFIG_SND_DARLA24=m
--CONFIG_SND_GINA24=m
--CONFIG_SND_LAYLA24=m
--CONFIG_SND_MONA=m
--CONFIG_SND_MIA=m
--CONFIG_SND_ECHO3G=m
--CONFIG_SND_INDIGO=m
--CONFIG_SND_INDIGOIO=m
--CONFIG_SND_INDIGODJ=m
--# CONFIG_SND_EMU10K1 is not set
--# CONFIG_SND_EMU10K1X is not set
--# CONFIG_SND_ENS1370 is not set
--# CONFIG_SND_ENS1371 is not set
--# CONFIG_SND_ES1938 is not set
--# CONFIG_SND_ES1968 is not set
--# CONFIG_SND_FM801 is not set
--# CONFIG_SND_HDA_INTEL is not set
--# CONFIG_SND_HDSP is not set
--# CONFIG_SND_HDSPM is not set
--# CONFIG_SND_ICE1712 is not set
--# CONFIG_SND_ICE1724 is not set
--# CONFIG_SND_INTEL8X0 is not set
--# CONFIG_SND_INTEL8X0M is not set
--# CONFIG_SND_KORG1212 is not set
--# CONFIG_SND_MAESTRO3 is not set
--# CONFIG_SND_MIXART is not set
--# CONFIG_SND_NM256 is not set
--# CONFIG_SND_PCXHR is not set
--# CONFIG_SND_RME32 is not set
--# CONFIG_SND_RME96 is not set
--# CONFIG_SND_RME9652 is not set
--# CONFIG_SND_SONICVIBES is not set
--# CONFIG_SND_TRIDENT is not set
--# CONFIG_SND_VIA82XX is not set
--# CONFIG_SND_VIA82XX_MODEM is not set
--# CONFIG_SND_VX222 is not set
--# CONFIG_SND_YMFPCI is not set
--
--#
--# ALSA PowerMac devices
--#
--CONFIG_SND_POWERMAC=m
--CONFIG_SND_POWERMAC_AUTO_DRC=y
--
--#
--# USB devices
--#
--CONFIG_SND_USB_AUDIO=m
--CONFIG_SND_USB_USX2Y=m
--
--#
--# Open Sound System
--#
--# CONFIG_SOUND_PRIME is not set
--
--#
--# USB support
--#
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_BANDWIDTH=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--CONFIG_USB_EHCI_SPLIT_ISO=y
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--# CONFIG_USB_OHCI_BIG_ENDIAN is not set
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=m
--# CONFIG_USB_SL811_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
--CONFIG_USB_ACM=m
--CONFIG_USB_PRINTER=m
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=m
--# CONFIG_USB_STORAGE_DEBUG is not set
--CONFIG_USB_STORAGE_DATAFAB=y
--CONFIG_USB_STORAGE_FREECOM=y
--CONFIG_USB_STORAGE_ISD200=y
--CONFIG_USB_STORAGE_DPCM=y
--CONFIG_USB_STORAGE_USBAT=y
--CONFIG_USB_STORAGE_SDDR09=y
--CONFIG_USB_STORAGE_SDDR55=y
--CONFIG_USB_STORAGE_JUMPSHOT=y
--CONFIG_USB_STORAGE_ALAUDA=y
--CONFIG_USB_STORAGE_ONETOUCH=y
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=y
--CONFIG_USB_HIDINPUT=y
--# CONFIG_USB_HIDINPUT_POWERBOOK is not set
--CONFIG_HID_FF=y
--CONFIG_HID_PID=y
--CONFIG_LOGITECH_FF=y
--CONFIG_THRUSTMASTER_FF=y
--CONFIG_USB_HIDDEV=y
--CONFIG_USB_AIPTEK=m
--CONFIG_USB_WACOM=m
--CONFIG_USB_ACECAD=m
--CONFIG_USB_KBTAB=m
--CONFIG_USB_POWERMATE=m
--CONFIG_USB_MTOUCH=m
--CONFIG_USB_ITMTOUCH=m
--CONFIG_USB_EGALAX=m
--CONFIG_USB_YEALINK=m
--CONFIG_USB_XPAD=m
--CONFIG_USB_ATI_REMOTE=m
--CONFIG_USB_ATI_REMOTE2=m
--CONFIG_USB_KEYSPAN_REMOTE=m
--CONFIG_USB_APPLETOUCH=m
--
--#
--# USB Imaging devices
--#
--CONFIG_USB_MDC800=m
--CONFIG_USB_MICROTEK=m
--
--#
--# USB Multimedia devices
--#
--CONFIG_USB_DABUSB=m
--CONFIG_USB_VICAM=m
--CONFIG_USB_DSBR=m
--CONFIG_USB_ET61X251=m
--CONFIG_USB_IBMCAM=m
--CONFIG_USB_KONICAWC=m
--CONFIG_USB_OV511=m
--CONFIG_USB_SE401=m
--CONFIG_USB_SN9C102=m
--CONFIG_USB_STV680=m
--CONFIG_USB_PWC=m
--
--#
--# USB Network Adapters
--#
--CONFIG_USB_CATC=m
--CONFIG_USB_KAWETH=m
--CONFIG_USB_PEGASUS=m
--CONFIG_USB_RTL8150=m
--CONFIG_USB_USBNET=m
--CONFIG_USB_NET_AX8817X=m
--CONFIG_USB_NET_CDCETHER=m
--CONFIG_USB_NET_GL620A=m
--CONFIG_USB_NET_NET1080=m
--CONFIG_USB_NET_PLUSB=m
--CONFIG_USB_NET_RNDIS_HOST=m
--CONFIG_USB_NET_CDC_SUBSET=m
--CONFIG_USB_ALI_M5632=y
--CONFIG_USB_AN2720=y
--CONFIG_USB_BELKIN=y
--CONFIG_USB_ARMLINUX=y
--CONFIG_USB_EPSON2888=y
--CONFIG_USB_NET_ZAURUS=m
--# CONFIG_USB_MON is not set
--
--#
--# USB port drivers
--#
--CONFIG_USB_USS720=m
--
--#
--# USB Serial Converter support
--#
--CONFIG_USB_SERIAL=m
--CONFIG_USB_SERIAL_GENERIC=y
--CONFIG_USB_SERIAL_AIRPRIME=m
--CONFIG_USB_SERIAL_ANYDATA=m
--CONFIG_USB_SERIAL_BELKIN=m
--CONFIG_USB_SERIAL_WHITEHEAT=m
--CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
--CONFIG_USB_SERIAL_CP2101=m
--CONFIG_USB_SERIAL_CYPRESS_M8=m
--CONFIG_USB_SERIAL_EMPEG=m
--CONFIG_USB_SERIAL_FTDI_SIO=m
--CONFIG_USB_SERIAL_FUNSOFT=m
--CONFIG_USB_SERIAL_VISOR=m
--CONFIG_USB_SERIAL_IPAQ=m
--CONFIG_USB_SERIAL_IR=m
--CONFIG_USB_SERIAL_EDGEPORT=m
--CONFIG_USB_SERIAL_EDGEPORT_TI=m
--CONFIG_USB_SERIAL_GARMIN=m
--CONFIG_USB_SERIAL_IPW=m
--CONFIG_USB_SERIAL_KEYSPAN_PDA=m
--CONFIG_USB_SERIAL_KEYSPAN=m
--CONFIG_USB_SERIAL_KEYSPAN_MPR=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19=y
--CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
--CONFIG_USB_SERIAL_KLSI=m
--CONFIG_USB_SERIAL_KOBIL_SCT=m
--CONFIG_USB_SERIAL_MCT_U232=m
--CONFIG_USB_SERIAL_NAVMAN=m
--CONFIG_USB_SERIAL_PL2303=m
--CONFIG_USB_SERIAL_HP4X=m
--CONFIG_USB_SERIAL_SAFE=m
--CONFIG_USB_SERIAL_SAFE_PADDED=y
--CONFIG_USB_SERIAL_SIERRAWIRELESS=m
--CONFIG_USB_SERIAL_TI=m
--CONFIG_USB_SERIAL_CYBERJACK=m
--CONFIG_USB_SERIAL_XIRCOM=m
--CONFIG_USB_SERIAL_OMNINET=m
--CONFIG_USB_EZUSB=y
--
--#
--# USB Miscellaneous drivers
--#
--CONFIG_USB_EMI62=m
--CONFIG_USB_EMI26=m
--CONFIG_USB_AUERSWALD=m
--CONFIG_USB_RIO500=m
--CONFIG_USB_LEGOTOWER=m
--CONFIG_USB_LCD=m
--CONFIG_USB_BERRY_CHARGE=m
--CONFIG_USB_LED=m
--CONFIG_USB_CYTHERM=m
--CONFIG_USB_PHIDGETKIT=m
--CONFIG_USB_PHIDGETSERVO=m
--CONFIG_USB_IDMOUSE=m
--CONFIG_USB_SISUSBVGA=m
--CONFIG_USB_SISUSBVGA_CON=y
--CONFIG_USB_LD=m
--# CONFIG_USB_TEST is not set
--
--#
--# USB DSL modem support
--#
--
--#
--# USB Gadget Support
--#
--# CONFIG_USB_GADGET is not set
--
--#
--# MMC/SD Card support
--#
--# CONFIG_MMC is not set
--
--#
--# InfiniBand support
--#
--# CONFIG_INFINIBAND is not set
--
--#
--# DMA Engine support
--#
--# CONFIG_DMA_ENGINE is not set
--
--#
--# DMA Clients
--#
--
--#
--# DMA Devices
--#
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--CONFIG_EXT2_FS_XATTR=y
--CONFIG_EXT2_FS_POSIX_ACL=y
--CONFIG_EXT2_FS_SECURITY=y
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--CONFIG_EXT3_FS_POSIX_ACL=y
--CONFIG_EXT3_FS_SECURITY=y
--CONFIG_JBD=y
--# CONFIG_JBD_DEBUG is not set
--CONFIG_FS_MBCACHE=y
--CONFIG_REISERFS_FS=m
--# CONFIG_REISERFS_CHECK is not set
--CONFIG_REISERFS_PROC_INFO=y
--CONFIG_REISERFS_FS_XATTR=y
--CONFIG_REISERFS_FS_POSIX_ACL=y
--CONFIG_REISERFS_FS_SECURITY=y
--CONFIG_JFS_FS=m
--CONFIG_JFS_POSIX_ACL=y
--CONFIG_JFS_SECURITY=y
--# CONFIG_JFS_DEBUG is not set
--CONFIG_JFS_STATISTICS=y
--CONFIG_FS_POSIX_ACL=y
--CONFIG_XFS_FS=m
--CONFIG_XFS_QUOTA=m
--CONFIG_XFS_DMAPI=m
--CONFIG_XFS_SECURITY=y
--CONFIG_XFS_POSIX_ACL=y
--CONFIG_XFS_RT=y
--# CONFIG_XFS_DEBUG is not set
--# CONFIG_XFS_TRACE is not set
--CONFIG_OCFS2_FS=m
--CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
--CONFIG_MINIX_FS=m
--CONFIG_ROMFS_FS=m
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--CONFIG_DMAPI=m
--# CONFIG_DMAPI_DEBUG is not set
--CONFIG_QUOTA=y
--CONFIG_QFMT_V1=m
--CONFIG_QFMT_V2=m
--CONFIG_QUOTACTL=y
--CONFIG_DNOTIFY=y
--CONFIG_AUTOFS_FS=m
--CONFIG_AUTOFS4_FS=m
--CONFIG_FUSE_FS=m
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=m
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_ZISOFS_FS=m
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=m
--# CONFIG_NTFS_DEBUG is not set
--# CONFIG_NTFS_RW is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--CONFIG_TMPFS_POSIX_ACL=y
--CONFIG_HUGETLBFS=y
--CONFIG_HUGETLB_PAGE=y
--CONFIG_RAMFS=y
--CONFIG_CONFIGFS_FS=m
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_CRAMFS=m
--# CONFIG_VXFS_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_SYSV_FS is not set
--CONFIG_UFS_FS=m
--
--#
--# Network File Systems
--#
--CONFIG_NFS_FS=m
--CONFIG_NFS_V3=y
--CONFIG_NFS_V3_ACL=y
--CONFIG_NFS_V4=y
--CONFIG_NFS_DIRECTIO=y
--CONFIG_NFSD=m
--CONFIG_NFSD_V2_ACL=y
--CONFIG_NFSD_V3=y
--CONFIG_NFSD_V3_ACL=y
--CONFIG_NFSD_V4=y
--CONFIG_NFSD_TCP=y
--CONFIG_LOCKD=m
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=m
--CONFIG_NFS_ACL_SUPPORT=m
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=m
--CONFIG_SUNRPC_GSS=m
--CONFIG_RPCSEC_GSS_KRB5=m
--CONFIG_RPCSEC_GSS_SPKM3=m
--CONFIG_SMB_FS=m
--# CONFIG_SMB_NLS_DEFAULT is not set
--CONFIG_CIFS=m
--CONFIG_CIFS_STATS=y
--# CONFIG_CIFS_STATS2 is not set
--CONFIG_CIFS_XATTR=y
--CONFIG_CIFS_POSIX=y
--# CONFIG_CIFS_EXPERIMENTAL is not set
--CONFIG_NCP_FS=m
--CONFIG_NCPFS_PACKET_SIGNING=y
--CONFIG_NCPFS_IOCTL_LOCKING=y
--CONFIG_NCPFS_STRONG=y
--CONFIG_NCPFS_NFS_NS=y
--CONFIG_NCPFS_OS2_NS=y
--CONFIG_NCPFS_SMALLDOS=y
--CONFIG_NCPFS_NLS=y
--CONFIG_NCPFS_EXTRAS=y
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--CONFIG_9P_FS=m
--CONFIG_GENERIC_ACL=y
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--CONFIG_OSF_PARTITION=y
--CONFIG_AMIGA_PARTITION=y
--CONFIG_ATARI_PARTITION=y
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--CONFIG_BSD_DISKLABEL=y
--CONFIG_MINIX_SUBPARTITION=y
--CONFIG_SOLARIS_X86_PARTITION=y
--CONFIG_UNIXWARE_DISKLABEL=y
--CONFIG_LDM_PARTITION=y
--# CONFIG_LDM_DEBUG is not set
--CONFIG_SGI_PARTITION=y
--CONFIG_ULTRIX_PARTITION=y
--CONFIG_SUN_PARTITION=y
--CONFIG_KARMA_PARTITION=y
--CONFIG_EFI_PARTITION=y
--
--#
--# Native Language Support
--#
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="utf8"
--CONFIG_NLS_CODEPAGE_437=y
--CONFIG_NLS_CODEPAGE_737=m
--CONFIG_NLS_CODEPAGE_775=m
--CONFIG_NLS_CODEPAGE_850=m
--CONFIG_NLS_CODEPAGE_852=m
--CONFIG_NLS_CODEPAGE_855=m
--CONFIG_NLS_CODEPAGE_857=m
--CONFIG_NLS_CODEPAGE_860=m
--CONFIG_NLS_CODEPAGE_861=m
--CONFIG_NLS_CODEPAGE_862=m
--CONFIG_NLS_CODEPAGE_863=m
--CONFIG_NLS_CODEPAGE_864=m
--CONFIG_NLS_CODEPAGE_865=m
--CONFIG_NLS_CODEPAGE_866=m
--CONFIG_NLS_CODEPAGE_869=m
--CONFIG_NLS_CODEPAGE_936=m
--CONFIG_NLS_CODEPAGE_950=m
--CONFIG_NLS_CODEPAGE_932=m
--CONFIG_NLS_CODEPAGE_949=m
--CONFIG_NLS_CODEPAGE_874=m
--CONFIG_NLS_ISO8859_8=m
--CONFIG_NLS_CODEPAGE_1250=m
--CONFIG_NLS_CODEPAGE_1251=m
--CONFIG_NLS_ASCII=m
--CONFIG_NLS_ISO8859_1=y
--CONFIG_NLS_ISO8859_2=m
--CONFIG_NLS_ISO8859_3=m
--CONFIG_NLS_ISO8859_4=m
--CONFIG_NLS_ISO8859_5=m
--CONFIG_NLS_ISO8859_6=m
--CONFIG_NLS_ISO8859_7=m
--CONFIG_NLS_ISO8859_9=m
--CONFIG_NLS_ISO8859_13=m
--CONFIG_NLS_ISO8859_14=m
--CONFIG_NLS_ISO8859_15=m
--CONFIG_NLS_KOI8_R=m
--CONFIG_NLS_KOI8_U=m
--CONFIG_NLS_UTF8=m
--
--#
--# Library routines
--#
--CONFIG_CRC_CCITT=m
--CONFIG_CRC16=m
--CONFIG_CRC32=y
--CONFIG_LIBCRC32C=m
--CONFIG_ZLIB_INFLATE=m
--CONFIG_ZLIB_DEFLATE=m
--CONFIG_TEXTSEARCH=y
--CONFIG_TEXTSEARCH_KMP=m
--CONFIG_TEXTSEARCH_BM=m
--CONFIG_TEXTSEARCH_FSM=m
--
--#
--# Instrumentation Support
--#
--CONFIG_PROFILING=y
--CONFIG_OPROFILE=y
--CONFIG_KPROBES=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_MAGIC_SYSRQ=y
--CONFIG_DEBUG_KERNEL=y
--CONFIG_LOG_BUF_SHIFT=19
--# CONFIG_DETECT_SOFTLOCKUP is not set
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_DEBUG_SLAB is not set
--# CONFIG_DEBUG_MUTEXES is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_KOBJECT is not set
--CONFIG_DEBUG_INFO=y
--CONFIG_DEBUG_FS=y
--# CONFIG_DEBUG_VM is not set
--CONFIG_FORCED_INLINING=y
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_LKCD_DUMP is not set
--CONFIG_DEBUG_STACKOVERFLOW=y
--CONFIG_DEBUG_STACK_USAGE=y
--CONFIG_HCALL_STATS=y
--CONFIG_DEBUGGER=y
--CONFIG_XMON=y
--# CONFIG_XMON_DEFAULT is not set
--CONFIG_IRQSTACKS=y
--CONFIG_BOOTX_TEXT=y
--# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
--# CONFIG_PPC_EARLY_DEBUG_G5 is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
--# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
--# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
--
--#
--# Security options
--#
--CONFIG_KEYS=y
--CONFIG_KEYS_DEBUG_PROC_KEYS=y
--CONFIG_SECURITY=y
--CONFIG_SECURITY_NETWORK=y
--# CONFIG_SECURITY_NETWORK_XFRM is not set
--CONFIG_SECURITY_CAPABILITIES=m
--CONFIG_SECURITY_ROOTPLUG=m
--CONFIG_SECURITY_SECLVL=m
--# CONFIG_SECURITY_SELINUX is not set
--CONFIG_SECURITY_APPARMOR=m
--CONFIG_KEYS_COMPAT=y
--
--#
--# Cryptographic options
--#
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_ABLKCIPHER=m
--CONFIG_CRYPTO_BLKCIPHER=m
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_HMAC=y
--CONFIG_CRYPTO_XCBC=m
--CONFIG_CRYPTO_NULL=m
--CONFIG_CRYPTO_MD4=m
--CONFIG_CRYPTO_MD5=y
--CONFIG_CRYPTO_SHA1=m
--CONFIG_CRYPTO_SHA256=m
--CONFIG_CRYPTO_SHA512=m
--CONFIG_CRYPTO_WP512=m
--CONFIG_CRYPTO_TGR192=m
--CONFIG_CRYPTO_GF128MUL=m
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=m
--CONFIG_CRYPTO_PCBC=m
--CONFIG_CRYPTO_LRW=m
--CONFIG_CRYPTO_CRYPTD=m
--CONFIG_CRYPTO_DES=y
--CONFIG_CRYPTO_FCRYPT=m
--CONFIG_CRYPTO_BLOWFISH=m
--CONFIG_CRYPTO_TWOFISH=m
--CONFIG_CRYPTO_TWOFISH_COMMON=m
--CONFIG_CRYPTO_SERPENT=m
--CONFIG_CRYPTO_AES=m
--CONFIG_CRYPTO_CAST5=m
--CONFIG_CRYPTO_CAST6=m
--CONFIG_CRYPTO_TEA=m
--CONFIG_CRYPTO_ARC4=m
--CONFIG_CRYPTO_KHAZAD=m
--CONFIG_CRYPTO_ANUBIS=m
--CONFIG_CRYPTO_DEFLATE=m
--CONFIG_CRYPTO_MICHAEL_MIC=m
--CONFIG_CRYPTO_CRC32C=m
--CONFIG_CRYPTO_CAMELLIA=m
--CONFIG_CRYPTO_TEST=m
--
--#
--# Hardware crypto devices
--#
-diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config
-deleted file mode 100644
-index 81bc07f..0000000
---- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config
-+++ /dev/null
-@@ -1,4409 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.27.21
--# Wed May 13 22:15:21 2009
--#
--# CONFIG_64BIT is not set
--CONFIG_X86_32=y
--# CONFIG_X86_64 is not set
--CONFIG_X86=y
--CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
--# CONFIG_GENERIC_LOCKBREAK is not set
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_CLOCKSOURCE_WATCHDOG=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
--CONFIG_LOCKDEP_SUPPORT=y
--CONFIG_STACKTRACE_SUPPORT=y
--CONFIG_HAVE_LATENCYTOP_SUPPORT=y
--CONFIG_FAST_CMPXCHG_LOCAL=y
--CONFIG_MMU=y
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_GENERIC_IOMAP=y
--CONFIG_GENERIC_BUG=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_GPIO=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--# CONFIG_ARCH_HAS_ILOG2_U32 is not set
--# CONFIG_ARCH_HAS_ILOG2_U64 is not set
--CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--# CONFIG_GENERIC_TIME_VSYSCALL is not set
--CONFIG_ARCH_HAS_CPU_RELAX=y
--CONFIG_ARCH_HAS_DEFAULT_IDLE=y
--CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
--CONFIG_HAVE_SETUP_PER_CPU_AREA=y
--# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
--CONFIG_ARCH_HIBERNATION_POSSIBLE=y
--CONFIG_ARCH_SUSPEND_POSSIBLE=y
--# CONFIG_ZONE_DMA32 is not set
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--# CONFIG_AUDIT_ARCH is not set
--CONFIG_ARCH_SUPPORTS_AOUT=y
--CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
--CONFIG_GENERIC_HARDIRQS=y
--CONFIG_GENERIC_IRQ_PROBE=y
--CONFIG_GENERIC_PENDING_IRQ=y
--CONFIG_X86_SMP=y
--CONFIG_X86_32_SMP=y
--CONFIG_X86_HT=y
--CONFIG_X86_BIOS_REBOOT=y
--CONFIG_X86_TRAMPOLINE=y
--CONFIG_KTIME_SCALAR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_LOCK_KERNEL=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION="-0.1-default"
--# CONFIG_LOCALVERSION_AUTO is not set
--CONFIG_SUSE_KERNEL=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--CONFIG_BSD_PROCESS_ACCT_V3=y
--CONFIG_TASKSTATS=y
--CONFIG_TASK_DELAY_ACCT=y
--CONFIG_TASK_XACCT=y
--CONFIG_TASK_IO_ACCOUNTING=y
--CONFIG_AUDIT=y
--CONFIG_AUDITSYSCALL=y
--CONFIG_AUDIT_TREE=y
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_LOG_BUF_SHIFT=17
--CONFIG_CGROUPS=y
--# CONFIG_CGROUP_DEBUG is not set
--CONFIG_CGROUP_NS=y
--CONFIG_CGROUP_FREEZER=y
--CONFIG_CGROUP_DEVICE=y
--CONFIG_CPUSETS=y
--CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--CONFIG_CGROUP_SCHED=y
--CONFIG_CGROUP_CPUACCT=y
--CONFIG_RESOURCE_COUNTERS=y
--CONFIG_MM_OWNER=y
--CONFIG_CGROUP_MEM_RES_CTLR=y
--# CONFIG_SYSFS_DEPRECATED_V2 is not set
--CONFIG_PROC_PID_CPUSET=y
--CONFIG_RELAY=y
--CONFIG_NAMESPACES=y
--CONFIG_UTS_NS=y
--CONFIG_IPC_NS=y
--CONFIG_USER_NS=y
--CONFIG_PID_NS=y
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--CONFIG_CC_OPTIMIZE_FOR_SIZE=y
--CONFIG_SYSCTL=y
--# CONFIG_EMBEDDED is not set
--CONFIG_UID16=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_PCSPKR_PLATFORM=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--CONFIG_PROFILING=y
--# CONFIG_TRACEPOINTS is not set
--CONFIG_MARKERS=y
--CONFIG_OPROFILE=m
--CONFIG_HAVE_OPROFILE=y
--CONFIG_KPROBES=y
--CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
--CONFIG_KRETPROBES=y
--CONFIG_HAVE_IOREMAP_PROT=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_HAVE_ARCH_TRACEHOOK=y
--# CONFIG_HAVE_DMA_ATTRS is not set
--CONFIG_USE_GENERIC_SMP_HELPERS=y
--# CONFIG_HAVE_CLK is not set
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_HAVE_GENERIC_DMA_COHERENT=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_FORCE_LOAD=y
--CONFIG_MODULE_UNLOAD=y
--CONFIG_MODULE_FORCE_UNLOAD=y
--CONFIG_MODVERSIONS=y
--CONFIG_MODULE_SRCVERSION_ALL=y
--CONFIG_KMOD=y
--CONFIG_STOP_MACHINE=y
--# CONFIG_UTRACE is not set
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--CONFIG_BLK_DEV_IO_TRACE=y
--CONFIG_LSF=y
--CONFIG_BLK_DEV_BSG=y
--CONFIG_BLK_DEV_INTEGRITY=y
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--CONFIG_DEFAULT_DEADLINE=y
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="deadline"
--CONFIG_PREEMPT_NOTIFIERS=y
--CONFIG_CLASSIC_RCU=y
--CONFIG_FREEZER=y
--
--#
--# Processor type and features
--#
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--CONFIG_SMP=y
--CONFIG_X86_FIND_SMP_CONFIG=y
--CONFIG_X86_MPPARSE=y
--# CONFIG_X86_PC is not set
--# CONFIG_X86_XEN is not set
--# CONFIG_X86_ELAN is not set
--# CONFIG_X86_VOYAGER is not set
--CONFIG_X86_GENERICARCH=y
--# CONFIG_X86_NUMAQ is not set
--CONFIG_X86_SUMMIT=y
--CONFIG_X86_ES7000=y
--CONFIG_X86_BIGSMP=y
--# CONFIG_X86_64_XEN is not set
--# CONFIG_X86_VSMP is not set
--# CONFIG_X86_RDC321X is not set
--# CONFIG_PARAVIRT_GUEST is not set
--CONFIG_MEMTEST=y
--CONFIG_X86_CYCLONE_TIMER=y
--# CONFIG_M386 is not set
--# CONFIG_M486 is not set
--CONFIG_M586=y
--# CONFIG_M586TSC is not set
--# CONFIG_M586MMX is not set
--# CONFIG_M686 is not set
--# CONFIG_MPENTIUMII is not set
--# CONFIG_MPENTIUMIII is not set
--# CONFIG_MPENTIUMM is not set
--# CONFIG_MPENTIUM4 is not set
--# CONFIG_MK6 is not set
--# CONFIG_MK7 is not set
--# CONFIG_MK8 is not set
--# CONFIG_MCRUSOE is not set
--# CONFIG_MEFFICEON is not set
--# CONFIG_MWINCHIPC6 is not set
--# CONFIG_MWINCHIP2 is not set
--# CONFIG_MWINCHIP3D is not set
--# CONFIG_MGEODEGX1 is not set
--# CONFIG_MGEODE_LX is not set
--# CONFIG_MCYRIXIII is not set
--# CONFIG_MVIAC3_2 is not set
--# CONFIG_MVIAC7 is not set
--# CONFIG_MPSC is not set
--# CONFIG_MCORE2 is not set
--# CONFIG_GENERIC_CPU is not set
--CONFIG_X86_GENERIC=y
--CONFIG_X86_CPU=y
--CONFIG_X86_CMPXCHG=y
--CONFIG_X86_L1_CACHE_SHIFT=7
--CONFIG_X86_XADD=y
--CONFIG_X86_PPRO_FENCE=y
--CONFIG_X86_F00F_BUG=y
--CONFIG_X86_WP_WORKS_OK=y
--CONFIG_X86_INVLPG=y
--CONFIG_X86_BSWAP=y
--CONFIG_X86_POPAD_OK=y
--CONFIG_X86_ALIGNMENT_16=y
--CONFIG_X86_INTEL_USERCOPY=y
--CONFIG_X86_MINIMUM_CPU_FAMILY=4
--CONFIG_HPET_TIMER=y
--CONFIG_HPET_EMULATE_RTC=y
--CONFIG_DMI=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_NR_CPUS=32
--CONFIG_SCHED_SMT=y
--CONFIG_SCHED_MC=y
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
--CONFIG_X86_LOCAL_APIC=y
--CONFIG_X86_IO_APIC=y
--CONFIG_X86_MCE=y
--CONFIG_X86_MCE_NONFATAL=y
--CONFIG_X86_MCE_P4THERMAL=y
--CONFIG_VM86=y
--CONFIG_TOSHIBA=m
--CONFIG_I8K=m
--CONFIG_X86_REBOOTFIXUPS=y
--CONFIG_MICROCODE=m
--CONFIG_MICROCODE_OLD_INTERFACE=y
--CONFIG_X86_MSR=m
--CONFIG_X86_CPUID=m
--# CONFIG_NOHIGHMEM is not set
--CONFIG_HIGHMEM4G=y
--# CONFIG_HIGHMEM64G is not set
--CONFIG_PAGE_OFFSET=0xC0000000
--CONFIG_HIGHMEM=y
--
--#
--# NUMA (Summit) requires SMP, 64GB highmem support, ACPI
--#
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_PAGEFLAGS_EXTENDED=y
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_MMU_NOTIFIER=y
--CONFIG_HIGHPTE=y
--CONFIG_X86_RESERVE_LOW_64K=y
--# CONFIG_MATH_EMULATION is not set
--CONFIG_MTRR=y
--# CONFIG_MTRR_SANITIZER is not set
--CONFIG_X86_PAT=y
--# CONFIG_EFI is not set
--# CONFIG_IRQBALANCE is not set
--CONFIG_SECCOMP=y
--# CONFIG_SECCOMP_DISABLE_TSC is not set
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--CONFIG_SCHED_HRTICK=y
--CONFIG_KEXEC=y
--CONFIG_CRASH_DUMP=y
--# CONFIG_KEXEC_JUMP is not set
--CONFIG_PHYSICAL_START=0x100000
--CONFIG_RELOCATABLE=y
--CONFIG_PHYSICAL_ALIGN=0x100000
--CONFIG_HOTPLUG_CPU=y
--CONFIG_COMPAT_VDSO=y
--
--#
--# Hardware Performance Monitoring support
--#
--CONFIG_PERFMON=y
--# CONFIG_PERFMON_DEBUG is not set
--CONFIG_PERFMON_DEBUG_FS=y
--CONFIG_X86_PERFMON_P6=m
--CONFIG_X86_PERFMON_P4=m
--CONFIG_X86_PERFMON_PEBS_P4=m
--CONFIG_X86_PERFMON_CORE=m
--CONFIG_X86_PERFMON_PEBS_CORE=m
--CONFIG_X86_PERFMON_INTEL_ATOM=m
--CONFIG_X86_PERFMON_INTEL_ARCH=m
--CONFIG_X86_PERFMON_AMD64=m
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--
--#
--# Power management options
--#
--CONFIG_PM=y
--# CONFIG_PM_DEBUG is not set
--CONFIG_PM_SLEEP_SMP=y
--CONFIG_PM_SLEEP=y
--CONFIG_SUSPEND=y
--CONFIG_SUSPEND_FREEZER=y
--CONFIG_HIBERNATION=y
--CONFIG_PM_STD_PARTITION=""
--CONFIG_ACPI=y
--CONFIG_ACPI_SLEEP=y
--CONFIG_ACPI_PROCFS=y
--CONFIG_ACPI_PROCFS_POWER=y
--CONFIG_ACPI_SYSFS_POWER=y
--CONFIG_ACPI_PROC_EVENT=y
--CONFIG_ACPI_AC=m
--CONFIG_ACPI_BATTERY=m
--CONFIG_ACPI_BUTTON=m
--CONFIG_ACPI_VIDEO=m
--CONFIG_ACPI_FAN=m
--CONFIG_ACPI_DOCK=m
--CONFIG_ACPI_PROCESSOR=m
--CONFIG_ACPI_HOTPLUG_CPU=y
--CONFIG_ACPI_THERMAL=m
--CONFIG_ACPI_WMI=m
--# CONFIG_ACPI_ASUS is not set
--CONFIG_ACPI_TOSHIBA=m
--CONFIG_ACPI_CUSTOM_DSDT_FILE=""
--# CONFIG_ACPI_CUSTOM_DSDT is not set
--CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
--CONFIG_ACPI_BLACKLIST_YEAR=2001
--CONFIG_ACPI_DEBUG=y
--# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
--CONFIG_ACPI_EC=y
--CONFIG_ACPI_PCI_SLOT=m
--CONFIG_ACPI_POWER=y
--CONFIG_ACPI_SYSTEM=y
--CONFIG_X86_PM_TIMER=y
--CONFIG_ACPI_CONTAINER=m
--CONFIG_ACPI_SBS=m
--CONFIG_X86_APM_BOOT=y
--CONFIG_APM=m
--# CONFIG_APM_IGNORE_USER_SUSPEND is not set
--CONFIG_APM_DO_ENABLE=y
--# CONFIG_APM_CPU_IDLE is not set
--CONFIG_APM_DISPLAY_BLANK=y
--CONFIG_APM_ALLOW_INTS=y
--# CONFIG_APM_REAL_MODE_POWER_OFF is not set
--
--#
--# CPU Frequency scaling
--#
--CONFIG_CPU_FREQ=y
--CONFIG_CPU_FREQ_TABLE=y
--# CONFIG_CPU_FREQ_DEBUG is not set
--CONFIG_CPU_FREQ_STAT=m
--CONFIG_CPU_FREQ_STAT_DETAILS=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
--CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
--CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
--CONFIG_CPU_FREQ_GOV_POWERSAVE=m
--CONFIG_CPU_FREQ_GOV_USERSPACE=m
--CONFIG_CPU_FREQ_GOV_ONDEMAND=y
--CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
--
--#
--# CPUFreq processor drivers
--#
--CONFIG_X86_ACPI_CPUFREQ=m
--CONFIG_X86_POWERNOW_K6=m
--CONFIG_X86_POWERNOW_K7=m
--CONFIG_X86_POWERNOW_K7_ACPI=y
--CONFIG_X86_POWERNOW_K8=m
--CONFIG_X86_POWERNOW_K8_ACPI=y
--CONFIG_X86_GX_SUSPMOD=m
--CONFIG_X86_SPEEDSTEP_CENTRINO=m
--CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
--CONFIG_X86_SPEEDSTEP_ICH=m
--CONFIG_X86_SPEEDSTEP_SMI=m
--CONFIG_X86_P4_CLOCKMOD=m
--CONFIG_X86_CPUFREQ_NFORCE2=m
--CONFIG_X86_LONGRUN=m
--CONFIG_X86_LONGHAUL=m
--CONFIG_X86_E_POWERSAVER=m
--
--#
--# shared options
--#
--# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
--CONFIG_X86_SPEEDSTEP_LIB=m
--CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
--CONFIG_CPU_IDLE=y
--CONFIG_CPU_IDLE_GOV_LADDER=y
--CONFIG_CPU_IDLE_GOV_MENU=y
--
--#
--# Bus options (PCI etc.)
--#
--CONFIG_PCI=y
--# CONFIG_PCI_GOBIOS is not set
--# CONFIG_PCI_GOMMCONFIG is not set
--# CONFIG_PCI_GODIRECT is not set
--# CONFIG_PCI_GOOLPC is not set
--# CONFIG_PCI_GOXEN_FE is not set
--CONFIG_PCI_GOANY=y
--CONFIG_PCI_BIOS=y
--CONFIG_PCI_DIRECT=y
--CONFIG_PCI_MMCONFIG=y
--CONFIG_PCI_OLPC=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCIEPORTBUS=y
--CONFIG_HOTPLUG_PCI_PCIE=m
--CONFIG_PCIEAER=y
--CONFIG_PCIEASPM=y
--# CONFIG_PCIEASPM_DEBUG is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--CONFIG_HT_IRQ=y
--CONFIG_ISA_DMA_API=y
--CONFIG_ISA=y
--# CONFIG_EISA is not set
--# CONFIG_MCA is not set
--CONFIG_SCx200=m
--CONFIG_SCx200HR_TIMER=m
--CONFIG_OLPC=y
--CONFIG_K8_NB=y
--CONFIG_PCCARD=m
--# CONFIG_PCMCIA_DEBUG is not set
--CONFIG_PCMCIA=m
--CONFIG_PCMCIA_LOAD_CIS=y
--CONFIG_PCMCIA_IOCTL=y
--CONFIG_CARDBUS=y
--
--#
--# PC-card bridges
--#
--CONFIG_YENTA=m
--CONFIG_YENTA_O2=y
--CONFIG_YENTA_RICOH=y
--CONFIG_YENTA_TI=y
--CONFIG_YENTA_ENE_TUNE=y
--CONFIG_YENTA_TOSHIBA=y
--CONFIG_PD6729=m
--CONFIG_I82092=m
--CONFIG_I82365=m
--CONFIG_TCIC=m
--CONFIG_PCMCIA_PROBE=y
--CONFIG_PCCARD_NONSTATIC=m
--CONFIG_HOTPLUG_PCI=m
--CONFIG_HOTPLUG_PCI_FAKE=m
--CONFIG_HOTPLUG_PCI_COMPAQ=m
--CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y
--CONFIG_HOTPLUG_PCI_IBM=m
--CONFIG_HOTPLUG_PCI_ACPI=m
--CONFIG_HOTPLUG_PCI_ACPI_IBM=m
--CONFIG_HOTPLUG_PCI_CPCI=y
--CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
--CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
--CONFIG_HOTPLUG_PCI_SHPC=m
--
--#
--# Executable file formats / Emulations
--#
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_AOUT=m
--CONFIG_BINFMT_MISC=m
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=m
--CONFIG_PACKET_MMAP=y
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--CONFIG_XFRM_SUB_POLICY=y
--CONFIG_XFRM_MIGRATE=y
--# CONFIG_XFRM_STATISTICS is not set
--CONFIG_XFRM_IPCOMP=m
--CONFIG_NET_KEY=m
--CONFIG_NET_KEY_MIGRATE=y
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--CONFIG_IP_ROUTE_MULTIPATH=y
--CONFIG_IP_ROUTE_VERBOSE=y
--# CONFIG_IP_PNP is not set
--CONFIG_NET_IPIP=m
--CONFIG_NET_IPGRE=m
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--CONFIG_INET_AH=m
--CONFIG_INET_ESP=m
--CONFIG_INET_IPCOMP=m
--CONFIG_INET_XFRM_TUNNEL=m
--CONFIG_INET_TUNNEL=m
--CONFIG_INET_XFRM_MODE_TRANSPORT=m
--CONFIG_INET_XFRM_MODE_TUNNEL=m
--CONFIG_INET_XFRM_MODE_BEET=m
--CONFIG_INET_LRO=y
--CONFIG_INET_DIAG=m
--CONFIG_INET_TCP_DIAG=m
--CONFIG_TCP_CONG_ADVANCED=y
--CONFIG_TCP_CONG_BIC=m
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_TCP_CONG_WESTWOOD=m
--CONFIG_TCP_CONG_HTCP=m
--CONFIG_TCP_CONG_HSTCP=m
--CONFIG_TCP_CONG_HYBLA=m
--CONFIG_TCP_CONG_VEGAS=m
--CONFIG_TCP_CONG_SCALABLE=m
--CONFIG_TCP_CONG_LP=m
--CONFIG_TCP_CONG_VENO=m
--CONFIG_TCP_CONG_YEAH=m
--CONFIG_TCP_CONG_ILLINOIS=m
--# CONFIG_DEFAULT_BIC is not set
--CONFIG_DEFAULT_CUBIC=y
--# CONFIG_DEFAULT_HTCP is not set
--# CONFIG_DEFAULT_VEGAS is not set
--# CONFIG_DEFAULT_WESTWOOD is not set
--# CONFIG_DEFAULT_RENO is not set
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--CONFIG_IP_VS=m
--# CONFIG_IP_VS_DEBUG is not set
--CONFIG_IP_VS_TAB_BITS=12
--
--#
--# IPVS transport protocol load balancing support
--#
--CONFIG_IP_VS_PROTO_TCP=y
--CONFIG_IP_VS_PROTO_UDP=y
--CONFIG_IP_VS_PROTO_ESP=y
--CONFIG_IP_VS_PROTO_AH=y
--
--#
--# IPVS scheduler
--#
--CONFIG_IP_VS_RR=m
--CONFIG_IP_VS_WRR=m
--CONFIG_IP_VS_LC=m
--CONFIG_IP_VS_WLC=m
--CONFIG_IP_VS_LBLC=m
--CONFIG_IP_VS_LBLCR=m
--CONFIG_IP_VS_DH=m
--CONFIG_IP_VS_SH=m
--CONFIG_IP_VS_SED=m
--CONFIG_IP_VS_NQ=m
--
--#
--# IPVS application helper
--#
--CONFIG_IP_VS_FTP=m
--CONFIG_IPV6=m
--CONFIG_IPV6_PRIVACY=y
--CONFIG_IPV6_ROUTER_PREF=y
--CONFIG_IPV6_ROUTE_INFO=y
--# CONFIG_IPV6_OPTIMISTIC_DAD is not set
--CONFIG_INET6_AH=m
--CONFIG_INET6_ESP=m
--CONFIG_INET6_IPCOMP=m
--CONFIG_IPV6_MIP6=m
--CONFIG_INET6_XFRM_TUNNEL=m
--CONFIG_INET6_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_TRANSPORT=m
--CONFIG_INET6_XFRM_MODE_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_BEET=m
--CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
--CONFIG_IPV6_SIT=m
--CONFIG_IPV6_NDISC_NODETYPE=y
--CONFIG_IPV6_TUNNEL=m
--CONFIG_IPV6_MULTIPLE_TABLES=y
--CONFIG_IPV6_SUBTREES=y
--# CONFIG_IPV6_MROUTE is not set
--# CONFIG_NETLABEL is not set
--CONFIG_NETWORK_SECMARK=y
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_NETFILTER_ADVANCED=y
--CONFIG_BRIDGE_NETFILTER=y
--
--#
--# Core Netfilter Configuration
--#
--CONFIG_NETFILTER_NETLINK=m
--CONFIG_NETFILTER_NETLINK_QUEUE=m
--CONFIG_NETFILTER_NETLINK_LOG=m
--CONFIG_NF_CONNTRACK=m
--CONFIG_NF_CT_ACCT=y
--CONFIG_NF_CONNTRACK_MARK=y
--CONFIG_NF_CONNTRACK_SECMARK=y
--CONFIG_NF_CONNTRACK_EVENTS=y
--CONFIG_NF_CT_PROTO_DCCP=m
--CONFIG_NF_CT_PROTO_GRE=m
--CONFIG_NF_CT_PROTO_SCTP=m
--CONFIG_NF_CT_PROTO_UDPLITE=m
--CONFIG_NF_CONNTRACK_AMANDA=m
--CONFIG_NF_CONNTRACK_FTP=m
--CONFIG_NF_CONNTRACK_H323=m
--CONFIG_NF_CONNTRACK_IRC=m
--CONFIG_NF_CONNTRACK_NETBIOS_NS=m
--CONFIG_NF_CONNTRACK_PPTP=m
--CONFIG_NF_CONNTRACK_SANE=m
--CONFIG_NF_CONNTRACK_SIP=m
--CONFIG_NF_CONNTRACK_TFTP=m
--CONFIG_NF_CONNTRACK_SLP=m
--CONFIG_NF_CT_NETLINK=m
--CONFIG_NETFILTER_XTABLES=m
--CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
--CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
--CONFIG_NETFILTER_XT_TARGET_DSCP=m
--CONFIG_NETFILTER_XT_TARGET_MARK=m
--CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
--CONFIG_NETFILTER_XT_TARGET_NFLOG=m
--CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
--CONFIG_NETFILTER_XT_TARGET_RATEEST=m
--CONFIG_NETFILTER_XT_TARGET_TRACE=m
--CONFIG_NETFILTER_XT_TARGET_SECMARK=m
--CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
--CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
--CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
--CONFIG_NETFILTER_XT_MATCH_COMMENT=m
--CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
--CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
--CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
--CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
--CONFIG_NETFILTER_XT_MATCH_DCCP=m
--CONFIG_NETFILTER_XT_MATCH_DSCP=m
--CONFIG_NETFILTER_XT_MATCH_ESP=m
--CONFIG_NETFILTER_XT_MATCH_HELPER=m
--CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
--CONFIG_NETFILTER_XT_MATCH_LENGTH=m
--CONFIG_NETFILTER_XT_MATCH_LIMIT=m
--CONFIG_NETFILTER_XT_MATCH_MAC=m
--CONFIG_NETFILTER_XT_MATCH_MARK=m
--CONFIG_NETFILTER_XT_MATCH_OWNER=m
--CONFIG_NETFILTER_XT_MATCH_POLICY=m
--CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
--CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
--CONFIG_NETFILTER_XT_MATCH_QUOTA=m
--CONFIG_NETFILTER_XT_MATCH_RATEEST=m
--CONFIG_NETFILTER_XT_MATCH_REALM=m
--CONFIG_NETFILTER_XT_MATCH_SCTP=m
--CONFIG_NETFILTER_XT_MATCH_STATE=m
--CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
--CONFIG_NETFILTER_XT_MATCH_STRING=m
--CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
--CONFIG_NETFILTER_XT_MATCH_TIME=m
--CONFIG_NETFILTER_XT_MATCH_U32=m
--CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
--
--#
--# IP: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV4=m
--# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
--CONFIG_IP_NF_QUEUE=m
--CONFIG_IP_NF_IPTABLES=m
--CONFIG_IP_NF_MATCH_RECENT=m
--CONFIG_IP_NF_MATCH_ECN=m
--CONFIG_IP_NF_MATCH_AH=m
--CONFIG_IP_NF_MATCH_TTL=m
--CONFIG_IP_NF_MATCH_ADDRTYPE=m
--CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
--CONFIG_IP_NF_FILTER=m
--CONFIG_IP_NF_TARGET_REJECT=m
--CONFIG_IP_NF_TARGET_LOG=m
--CONFIG_IP_NF_TARGET_ULOG=m
--CONFIG_NF_NAT=m
--CONFIG_NF_NAT_NEEDED=y
--CONFIG_IP_NF_TARGET_MASQUERADE=m
--CONFIG_IP_NF_TARGET_REDIRECT=m
--CONFIG_IP_NF_TARGET_NETMAP=m
--CONFIG_NF_NAT_SNMP_BASIC=m
--CONFIG_NF_NAT_PROTO_DCCP=m
--CONFIG_NF_NAT_PROTO_GRE=m
--CONFIG_NF_NAT_PROTO_UDPLITE=m
--CONFIG_NF_NAT_PROTO_SCTP=m
--CONFIG_NF_NAT_FTP=m
--CONFIG_NF_NAT_IRC=m
--CONFIG_NF_NAT_TFTP=m
--CONFIG_NF_NAT_AMANDA=m
--CONFIG_NF_NAT_PPTP=m
--CONFIG_NF_NAT_H323=m
--CONFIG_NF_NAT_SIP=m
--CONFIG_IP_NF_MANGLE=m
--CONFIG_IP_NF_TARGET_ECN=m
--CONFIG_IP_NF_TARGET_TTL=m
--CONFIG_IP_NF_TARGET_CLUSTERIP=m
--CONFIG_IP_NF_RAW=m
--CONFIG_IP_NF_SECURITY=m
--CONFIG_IP_NF_ARPTABLES=m
--CONFIG_IP_NF_ARPFILTER=m
--CONFIG_IP_NF_ARP_MANGLE=m
--
--#
--# IPv6: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV6=m
--CONFIG_IP6_NF_QUEUE=m
--CONFIG_IP6_NF_IPTABLES=m
--CONFIG_IP6_NF_MATCH_RT=m
--CONFIG_IP6_NF_MATCH_OPTS=m
--CONFIG_IP6_NF_MATCH_FRAG=m
--CONFIG_IP6_NF_MATCH_HL=m
--CONFIG_IP6_NF_MATCH_IPV6HEADER=m
--CONFIG_IP6_NF_MATCH_AH=m
--CONFIG_IP6_NF_MATCH_MH=m
--CONFIG_IP6_NF_MATCH_EUI64=m
--CONFIG_IP6_NF_FILTER=m
--CONFIG_IP6_NF_TARGET_LOG=m
--CONFIG_IP6_NF_TARGET_REJECT=m
--CONFIG_IP6_NF_MANGLE=m
--CONFIG_IP6_NF_TARGET_HL=m
--CONFIG_IP6_NF_RAW=m
--CONFIG_IP6_NF_SECURITY=m
--
--#
--# DECnet: Netfilter Configuration
--#
--CONFIG_DECNET_NF_GRABULATOR=m
--
--#
--# Bridge: Netfilter Configuration
--#
--CONFIG_BRIDGE_NF_EBTABLES=m
--CONFIG_BRIDGE_EBT_BROUTE=m
--CONFIG_BRIDGE_EBT_T_FILTER=m
--CONFIG_BRIDGE_EBT_T_NAT=m
--CONFIG_BRIDGE_EBT_802_3=m
--CONFIG_BRIDGE_EBT_AMONG=m
--CONFIG_BRIDGE_EBT_ARP=m
--CONFIG_BRIDGE_EBT_IP=m
--CONFIG_BRIDGE_EBT_IP6=m
--CONFIG_BRIDGE_EBT_LIMIT=m
--CONFIG_BRIDGE_EBT_MARK=m
--CONFIG_BRIDGE_EBT_PKTTYPE=m
--CONFIG_BRIDGE_EBT_STP=m
--CONFIG_BRIDGE_EBT_VLAN=m
--CONFIG_BRIDGE_EBT_ARPREPLY=m
--CONFIG_BRIDGE_EBT_DNAT=m
--CONFIG_BRIDGE_EBT_MARK_T=m
--CONFIG_BRIDGE_EBT_REDIRECT=m
--CONFIG_BRIDGE_EBT_SNAT=m
--CONFIG_BRIDGE_EBT_LOG=m
--CONFIG_BRIDGE_EBT_ULOG=m
--CONFIG_BRIDGE_EBT_NFLOG=m
--CONFIG_IP_DCCP=m
--CONFIG_INET_DCCP_DIAG=m
--CONFIG_IP_DCCP_ACKVEC=y
--
--#
--# DCCP CCIDs Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_DCCP_CCID2=m
--# CONFIG_IP_DCCP_CCID2_DEBUG is not set
--CONFIG_IP_DCCP_CCID3=m
--# CONFIG_IP_DCCP_CCID3_DEBUG is not set
--CONFIG_IP_DCCP_CCID3_RTO=100
--CONFIG_IP_DCCP_TFRC_LIB=m
--
--#
--# DCCP Kernel Hacking
--#
--# CONFIG_IP_DCCP_DEBUG is not set
--# CONFIG_NET_DCCPPROBE is not set
--CONFIG_IP_SCTP=m
--# CONFIG_SCTP_DBG_MSG is not set
--# CONFIG_SCTP_DBG_OBJCNT is not set
--# CONFIG_SCTP_HMAC_NONE is not set
--# CONFIG_SCTP_HMAC_SHA1 is not set
--CONFIG_SCTP_HMAC_MD5=y
--# CONFIG_TIPC is not set
--CONFIG_ATM=m
--CONFIG_ATM_CLIP=m
--CONFIG_ATM_CLIP_NO_ICMP=y
--CONFIG_ATM_LANE=m
--CONFIG_ATM_MPOA=m
--CONFIG_ATM_BR2684=m
--# CONFIG_ATM_BR2684_IPFILTER is not set
--CONFIG_STP=m
--CONFIG_GARP=m
--CONFIG_BRIDGE=m
--CONFIG_VLAN_8021Q=m
--CONFIG_VLAN_8021Q_GVRP=y
--CONFIG_DECNET=m
--CONFIG_DECNET_ROUTER=y
--CONFIG_LLC=y
--CONFIG_LLC2=m
--CONFIG_IPX=m
--# CONFIG_IPX_INTERN is not set
--CONFIG_ATALK=m
--CONFIG_DEV_APPLETALK=m
--CONFIG_LTPC=m
--CONFIG_COPS=m
--CONFIG_COPS_DAYNA=y
--CONFIG_COPS_TANGENT=y
--CONFIG_IPDDP=m
--CONFIG_IPDDP_ENCAP=y
--CONFIG_IPDDP_DECAP=y
--CONFIG_X25=m
--CONFIG_LAPB=m
--CONFIG_ECONET=m
--# CONFIG_ECONET_AUNUDP is not set
--# CONFIG_ECONET_NATIVE is not set
--CONFIG_WAN_ROUTER=m
--CONFIG_NET_SCHED=y
--
--#
--# Queueing/Scheduling
--#
--CONFIG_NET_SCH_CBQ=m
--CONFIG_NET_SCH_HTB=m
--CONFIG_NET_SCH_HFSC=m
--CONFIG_NET_SCH_ATM=m
--CONFIG_NET_SCH_PRIO=m
--CONFIG_NET_SCH_MULTIQ=m
--CONFIG_NET_SCH_RED=m
--CONFIG_NET_SCH_SFQ=m
--CONFIG_NET_SCH_TEQL=m
--CONFIG_NET_SCH_TBF=m
--CONFIG_NET_SCH_GRED=m
--CONFIG_NET_SCH_DSMARK=m
--CONFIG_NET_SCH_NETEM=m
--CONFIG_NET_SCH_INGRESS=m
--
--#
--# Classification
--#
--CONFIG_NET_CLS=y
--CONFIG_NET_CLS_BASIC=m
--CONFIG_NET_CLS_TCINDEX=m
--CONFIG_NET_CLS_ROUTE4=m
--CONFIG_NET_CLS_ROUTE=y
--CONFIG_NET_CLS_FW=m
--CONFIG_NET_CLS_U32=m
--CONFIG_CLS_U32_PERF=y
--CONFIG_CLS_U32_MARK=y
--CONFIG_NET_CLS_RSVP=m
--CONFIG_NET_CLS_RSVP6=m
--CONFIG_NET_CLS_FLOW=m
--# CONFIG_NET_EMATCH is not set
--CONFIG_NET_CLS_ACT=y
--CONFIG_NET_ACT_POLICE=m
--CONFIG_NET_ACT_GACT=m
--CONFIG_GACT_PROB=y
--CONFIG_NET_ACT_MIRRED=m
--CONFIG_NET_ACT_IPT=m
--CONFIG_NET_ACT_NAT=m
--CONFIG_NET_ACT_PEDIT=m
--CONFIG_NET_ACT_SIMP=m
--CONFIG_NET_ACT_SKBEDIT=m
--# CONFIG_NET_CLS_IND is not set
--CONFIG_NET_SCH_FIFO=y
--CONFIG_DCB=m
--CONFIG_DCBNL=y
--
--#
--# Network testing
--#
--CONFIG_NET_PKTGEN=m
--CONFIG_NET_TCPPROBE=m
--CONFIG_HAMRADIO=y
--
--#
--# Packet Radio protocols
--#
--CONFIG_AX25=m
--CONFIG_AX25_DAMA_SLAVE=y
--CONFIG_NETROM=m
--CONFIG_ROSE=m
--
--#
--# AX.25 network device drivers
--#
--CONFIG_MKISS=m
--CONFIG_6PACK=m
--CONFIG_BPQETHER=m
--CONFIG_SCC=m
--CONFIG_SCC_DELAY=y
--CONFIG_SCC_TRXECHO=y
--CONFIG_BAYCOM_SER_FDX=m
--CONFIG_BAYCOM_SER_HDX=m
--CONFIG_BAYCOM_PAR=m
--CONFIG_BAYCOM_EPP=m
--CONFIG_YAM=m
--CONFIG_CAN=m
--CONFIG_CAN_RAW=m
--CONFIG_CAN_BCM=m
--
--#
--# CAN Device Drivers
--#
--CONFIG_CAN_VCAN=m
--# CONFIG_CAN_DEBUG_DEVICES is not set
--CONFIG_IRDA=m
--
--#
--# IrDA protocols
--#
--CONFIG_IRLAN=m
--CONFIG_IRNET=m
--CONFIG_IRCOMM=m
--CONFIG_IRDA_ULTRA=y
--
--#
--# IrDA options
--#
--CONFIG_IRDA_CACHE_LAST_LSAP=y
--# CONFIG_IRDA_FAST_RR is not set
--# CONFIG_IRDA_DEBUG is not set
--
--#
--# Infrared-port device drivers
--#
--
--#
--# SIR device drivers
--#
--CONFIG_IRTTY_SIR=m
--
--#
--# Dongle support
--#
--CONFIG_DONGLE=y
--CONFIG_ESI_DONGLE=m
--CONFIG_ACTISYS_DONGLE=m
--CONFIG_TEKRAM_DONGLE=m
--CONFIG_TOIM3232_DONGLE=m
--CONFIG_LITELINK_DONGLE=m
--CONFIG_MA600_DONGLE=m
--CONFIG_GIRBIL_DONGLE=m
--CONFIG_MCP2120_DONGLE=m
--CONFIG_OLD_BELKIN_DONGLE=m
--CONFIG_ACT200L_DONGLE=m
--CONFIG_KINGSUN_DONGLE=m
--CONFIG_KSDAZZLE_DONGLE=m
--CONFIG_KS959_DONGLE=m
--
--#
--# FIR device drivers
--#
--CONFIG_USB_IRDA=m
--CONFIG_SIGMATEL_FIR=m
--CONFIG_NSC_FIR=m
--CONFIG_WINBOND_FIR=m
--CONFIG_TOSHIBA_FIR=m
--CONFIG_SMC_IRCC_FIR=m
--CONFIG_ALI_FIR=m
--CONFIG_VLSI_FIR=m
--CONFIG_VIA_FIR=m
--CONFIG_MCS_FIR=m
--CONFIG_BT=m
--CONFIG_BT_L2CAP=m
--CONFIG_BT_SCO=m
--CONFIG_BT_RFCOMM=m
--CONFIG_BT_RFCOMM_TTY=y
--CONFIG_BT_BNEP=m
--CONFIG_BT_BNEP_MC_FILTER=y
--CONFIG_BT_BNEP_PROTO_FILTER=y
--CONFIG_BT_CMTP=m
--CONFIG_BT_HIDP=m
--
--#
--# Bluetooth device drivers
--#
--CONFIG_BT_HCIBTUSB=m
--CONFIG_BT_HCIBTSDIO=m
--CONFIG_BT_HCIUART=m
--CONFIG_BT_HCIUART_H4=y
--CONFIG_BT_HCIUART_BCSP=y
--CONFIG_BT_HCIUART_LL=y
--CONFIG_BT_HCIBCM203X=m
--CONFIG_BT_HCIBPA10X=m
--CONFIG_BT_HCIBFUSB=m
--CONFIG_BT_HCIDTL1=m
--CONFIG_BT_HCIBT3C=m
--CONFIG_BT_HCIBLUECARD=m
--CONFIG_BT_HCIBTUART=m
--CONFIG_BT_HCIVHCI=m
--CONFIG_AF_RXRPC=m
--# CONFIG_AF_RXRPC_DEBUG is not set
--CONFIG_RXKAD=m
--CONFIG_FIB_RULES=y
--
--#
--# Wireless
--#
--CONFIG_CFG80211=m
--CONFIG_NL80211=y
--CONFIG_WIRELESS_EXT=y
--CONFIG_WIRELESS_EXT_SYSFS=y
--CONFIG_MAC80211=m
--
--#
--# Rate control algorithm selection
--#
--CONFIG_MAC80211_RC_PID=y
--CONFIG_MAC80211_RC_DEFAULT_PID=y
--CONFIG_MAC80211_RC_DEFAULT="pid"
--CONFIG_MAC80211_MESH=y
--CONFIG_MAC80211_LEDS=y
--CONFIG_MAC80211_DEBUGFS=y
--# CONFIG_MAC80211_DEBUG_MENU is not set
--CONFIG_IEEE80211=m
--# CONFIG_IEEE80211_DEBUG is not set
--CONFIG_IEEE80211_CRYPT_WEP=m
--CONFIG_IEEE80211_CRYPT_CCMP=m
--CONFIG_IEEE80211_CRYPT_TKIP=m
--CONFIG_RFKILL=m
--CONFIG_RFKILL_INPUT=m
--CONFIG_RFKILL_LEDS=y
--CONFIG_NET_9P=m
--# CONFIG_NET_9P_VIRTIO is not set
--# CONFIG_NET_9P_DEBUG is not set
--CONFIG_NETVM=y
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH=""
--# CONFIG_STANDALONE is not set
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--CONFIG_FIRMWARE_IN_KERNEL=y
--CONFIG_EXTRA_FIRMWARE=""
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=m
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=m
--CONFIG_MTD_PARTITIONS=y
--CONFIG_MTD_REDBOOT_PARTS=m
--CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
--# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
--# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
--CONFIG_MTD_AR7_PARTS=m
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=m
--CONFIG_MTD_BLKDEVS=m
--CONFIG_MTD_BLOCK=m
--# CONFIG_MTD_BLOCK_RO is not set
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--CONFIG_RFD_FTL=m
--# CONFIG_SSFDC is not set
--CONFIG_MTD_OOPS=m
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=m
--CONFIG_MTD_JEDECPROBE=m
--CONFIG_MTD_GEN_PROBE=m
--CONFIG_MTD_CFI_ADV_OPTIONS=y
--CONFIG_MTD_CFI_NOSWAP=y
--# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_GEOMETRY is not set
--CONFIG_MTD_MAP_BANK_WIDTH_1=y
--CONFIG_MTD_MAP_BANK_WIDTH_2=y
--CONFIG_MTD_MAP_BANK_WIDTH_4=y
--# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
--CONFIG_MTD_CFI_I1=y
--CONFIG_MTD_CFI_I2=y
--# CONFIG_MTD_CFI_I4 is not set
--# CONFIG_MTD_CFI_I8 is not set
--# CONFIG_MTD_OTP is not set
--CONFIG_MTD_CFI_INTELEXT=m
--CONFIG_MTD_CFI_AMDSTD=m
--CONFIG_MTD_CFI_STAA=m
--CONFIG_MTD_CFI_UTIL=m
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--CONFIG_MTD_ABSENT=m
--
--#
--# Mapping drivers for chip access
--#
--CONFIG_MTD_COMPLEX_MAPPINGS=y
--CONFIG_MTD_PHYSMAP=m
--CONFIG_MTD_PHYSMAP_START=0x8000000
--CONFIG_MTD_PHYSMAP_LEN=0x4000000
--CONFIG_MTD_PHYSMAP_BANKWIDTH=2
--CONFIG_MTD_SC520CDP=m
--CONFIG_MTD_NETSC520=m
--CONFIG_MTD_TS5500=m
--CONFIG_MTD_SBC_GXX=m
--CONFIG_MTD_SCx200_DOCFLASH=m
--CONFIG_MTD_AMD76XROM=m
--CONFIG_MTD_ICHXROM=m
--CONFIG_MTD_ESB2ROM=m
--CONFIG_MTD_CK804XROM=m
--CONFIG_MTD_SCB2_FLASH=m
--CONFIG_MTD_NETtel=m
--CONFIG_MTD_DILNETPC=m
--CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000
--CONFIG_MTD_L440GX=m
--CONFIG_MTD_PCI=m
--CONFIG_MTD_INTEL_VR_NOR=m
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--CONFIG_MTD_PMC551=m
--CONFIG_MTD_PMC551_BUGFIX=y
--# CONFIG_MTD_PMC551_DEBUG is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--CONFIG_MTD_SLRAM=m
--CONFIG_MTD_PHRAM=m
--CONFIG_MTD_MTDRAM=m
--CONFIG_MTDRAM_TOTAL_SIZE=4096
--CONFIG_MTDRAM_ERASE_SIZE=128
--CONFIG_MTD_BLOCK2MTD=m
--
--#
--# Disk-On-Chip Device Drivers
--#
--CONFIG_MTD_DOC2000=m
--CONFIG_MTD_DOC2001=m
--CONFIG_MTD_DOC2001PLUS=m
--CONFIG_MTD_DOCPROBE=m
--CONFIG_MTD_DOCECC=m
--CONFIG_MTD_DOCPROBE_ADVANCED=y
--CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
--CONFIG_MTD_DOCPROBE_HIGH=y
--CONFIG_MTD_DOCPROBE_55AA=y
--CONFIG_MTD_NAND=m
--# CONFIG_MTD_NAND_VERIFY_WRITE is not set
--CONFIG_MTD_NAND_ECC_SMC=y
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=m
--CONFIG_MTD_NAND_DISKONCHIP=m
--# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
--CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
--CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
--CONFIG_MTD_NAND_CAFE=m
--CONFIG_MTD_NAND_CS553X=m
--CONFIG_MTD_NAND_NANDSIM=m
--CONFIG_MTD_NAND_PLATFORM=m
--CONFIG_MTD_ALAUDA=m
--CONFIG_MTD_ONENAND=m
--# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
--CONFIG_MTD_ONENAND_OTP=y
--CONFIG_MTD_ONENAND_2X_PROGRAM=y
--CONFIG_MTD_ONENAND_SIM=m
--
--#
--# UBI - Unsorted block images
--#
--CONFIG_MTD_UBI=m
--CONFIG_MTD_UBI_WL_THRESHOLD=4096
--CONFIG_MTD_UBI_BEB_RESERVE=1
--# CONFIG_MTD_UBI_GLUEBI is not set
--
--#
--# UBI debugging options
--#
--# CONFIG_MTD_UBI_DEBUG is not set
--CONFIG_PARPORT=m
--CONFIG_PARPORT_PC=m
--CONFIG_PARPORT_SERIAL=m
--CONFIG_PARPORT_PC_FIFO=y
--CONFIG_PARPORT_PC_SUPERIO=y
--CONFIG_PARPORT_PC_PCMCIA=m
--# CONFIG_PARPORT_GSC is not set
--CONFIG_PARPORT_AX88796=m
--CONFIG_PARPORT_1284=y
--CONFIG_PARPORT_NOT_PC=y
--CONFIG_PNP=y
--# CONFIG_PNP_DEBUG is not set
--
--#
--# Protocols
--#
--CONFIG_ISAPNP=y
--CONFIG_PNPBIOS=y
--CONFIG_PNPBIOS_PROC_FS=y
--CONFIG_PNPACPI=y
--CONFIG_BLK_DEV=y
--CONFIG_BLK_DEV_FD=m
--CONFIG_BLK_DEV_XD=m
--CONFIG_PARIDE=m
--
--#
--# Parallel IDE high-level drivers
--#
--CONFIG_PARIDE_PD=m
--CONFIG_PARIDE_PCD=m
--CONFIG_PARIDE_PF=m
--CONFIG_PARIDE_PT=m
--CONFIG_PARIDE_PG=m
--
--#
--# Parallel IDE protocol modules
--#
--CONFIG_PARIDE_ATEN=m
--CONFIG_PARIDE_BPCK=m
--CONFIG_PARIDE_BPCK6=m
--CONFIG_PARIDE_COMM=m
--CONFIG_PARIDE_DSTR=m
--CONFIG_PARIDE_FIT2=m
--CONFIG_PARIDE_FIT3=m
--CONFIG_PARIDE_EPAT=m
--CONFIG_PARIDE_EPATC8=y
--CONFIG_PARIDE_EPIA=m
--CONFIG_PARIDE_FRIQ=m
--CONFIG_PARIDE_FRPW=m
--CONFIG_PARIDE_KBIC=m
--CONFIG_PARIDE_KTTI=m
--CONFIG_PARIDE_ON20=m
--CONFIG_PARIDE_ON26=m
--CONFIG_BLK_CPQ_DA=m
--CONFIG_BLK_CPQ_CISS_DA=m
--CONFIG_CISS_SCSI_TAPE=y
--CONFIG_BLK_DEV_DAC960=m
--CONFIG_BLK_DEV_UMEM=m
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=m
--CONFIG_BLK_DEV_CRYPTOLOOP=m
--CONFIG_BLK_DEV_NBD=m
--CONFIG_BLK_DEV_SX8=m
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=m
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=64000
--CONFIG_BLK_DEV_XIP=y
--CONFIG_CDROM_PKTCDVD=m
--CONFIG_CDROM_PKTCDVD_BUFFERS=8
--CONFIG_CDROM_PKTCDVD_WCACHE=y
--CONFIG_ATA_OVER_ETH=m
--CONFIG_CIPHER_TWOFISH=m
--CONFIG_VIRTIO_BLK=m
--# CONFIG_BLK_DEV_HD is not set
--CONFIG_MISC_DEVICES=y
--CONFIG_IBM_ASM=m
--CONFIG_PHANTOM=m
--CONFIG_EEPROM_93CX6=m
--# CONFIG_SGI_IOC4 is not set
--CONFIG_TIFM_CORE=m
--CONFIG_TIFM_7XX1=m
--CONFIG_ACER_WMI=m
--CONFIG_ASUS_LAPTOP=m
--CONFIG_FUJITSU_LAPTOP=m
--# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
--CONFIG_TC1100_WMI=m
--CONFIG_HP_WMI=m
--CONFIG_MSI_LAPTOP=m
--CONFIG_PANASONIC_LAPTOP=m
--CONFIG_COMPAL_LAPTOP=m
--CONFIG_SONY_LAPTOP=m
--CONFIG_SONYPI_COMPAT=y
--CONFIG_THINKPAD_ACPI=m
--# CONFIG_THINKPAD_ACPI_DEBUG is not set
--CONFIG_THINKPAD_ACPI_BAY=y
--CONFIG_THINKPAD_ACPI_VIDEO=y
--CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
--CONFIG_INTEL_MENLOW=m
--CONFIG_EEEPC_LAPTOP=m
--CONFIG_ENCLOSURE_SERVICES=m
--CONFIG_HP_ILO=m
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=m
--CONFIG_BLK_DEV_IDE=m
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--CONFIG_IDE_TIMINGS=y
--CONFIG_IDE_ATAPI=y
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=m
--CONFIG_IDEDISK_MULTI_MODE=y
--CONFIG_BLK_DEV_IDECS=m
--CONFIG_BLK_DEV_DELKIN=m
--CONFIG_BLK_DEV_IDECD=m
--CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
--CONFIG_BLK_DEV_IDETAPE=m
--CONFIG_BLK_DEV_IDEFLOPPY=m
--CONFIG_BLK_DEV_IDESCSI=m
--CONFIG_BLK_DEV_IDEACPI=y
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=m
--CONFIG_BLK_DEV_PLATFORM=m
--CONFIG_BLK_DEV_CMD640=m
--CONFIG_BLK_DEV_CMD640_ENHANCED=y
--CONFIG_BLK_DEV_IDEPNP=m
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_BLK_DEV_OFFBOARD=y
--CONFIG_BLK_DEV_GENERIC=m
--CONFIG_BLK_DEV_OPTI621=m
--CONFIG_BLK_DEV_RZ1000=m
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--CONFIG_BLK_DEV_AEC62XX=m
--CONFIG_BLK_DEV_ALI15X3=m
--CONFIG_BLK_DEV_AMD74XX=m
--CONFIG_BLK_DEV_ATIIXP=m
--CONFIG_BLK_DEV_CMD64X=m
--CONFIG_BLK_DEV_TRIFLEX=m
--CONFIG_BLK_DEV_CS5520=m
--CONFIG_BLK_DEV_CS5530=m
--CONFIG_BLK_DEV_CS5535=m
--CONFIG_BLK_DEV_HPT366=m
--CONFIG_BLK_DEV_JMICRON=m
--CONFIG_BLK_DEV_SC1200=m
--CONFIG_BLK_DEV_PIIX=m
--CONFIG_BLK_DEV_IT8213=m
--CONFIG_BLK_DEV_IT821X=m
--CONFIG_BLK_DEV_NS87415=m
--CONFIG_BLK_DEV_PDC202XX_OLD=m
--CONFIG_BLK_DEV_PDC202XX_NEW=m
--CONFIG_BLK_DEV_SVWKS=m
--CONFIG_BLK_DEV_SIIMAGE=m
--CONFIG_BLK_DEV_SIS5513=m
--CONFIG_BLK_DEV_SLC90E66=m
--CONFIG_BLK_DEV_TRM290=m
--CONFIG_BLK_DEV_VIA82CXXX=m
--# CONFIG_BLK_DEV_TC86C001 is not set
--
--#
--# Other IDE chipsets support
--#
--
--#
--# Note: most of these also require special kernel boot parameters
--#
--CONFIG_BLK_DEV_4DRIVES=m
--CONFIG_BLK_DEV_ALI14XX=m
--CONFIG_BLK_DEV_DTC2278=m
--CONFIG_BLK_DEV_HT6560B=m
--CONFIG_BLK_DEV_QD65XX=m
--CONFIG_BLK_DEV_UMC8672=m
--CONFIG_BLK_DEV_IDEDMA=y
--
--#
--# SCSI device support
--#
--CONFIG_RAID_ATTRS=m
--CONFIG_SCSI=m
--CONFIG_SCSI_DMA=y
--CONFIG_SCSI_TGT=m
--CONFIG_SCSI_NETLINK=y
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=m
--CONFIG_SD_IOSTATS=y
--CONFIG_CHR_DEV_ST=m
--CONFIG_CHR_DEV_OSST=m
--CONFIG_BLK_DEV_SR=m
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=m
--CONFIG_CHR_DEV_SCH=m
--CONFIG_SCSI_ENCLOSURE=m
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--CONFIG_SCSI_CONSTANTS=y
--CONFIG_SCSI_LOGGING=y
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=m
--CONFIG_SCSI_FC_ATTRS=m
--CONFIG_SCSI_FC_TGT_ATTRS=y
--CONFIG_SCSI_ISCSI_ATTRS=m
--CONFIG_SCSI_SAS_ATTRS=m
--CONFIG_SCSI_SAS_LIBSAS=m
--CONFIG_SCSI_SAS_ATA=y
--CONFIG_SCSI_SAS_HOST_SMP=y
--CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
--CONFIG_SCSI_SRP_ATTRS=m
--CONFIG_SCSI_SRP_TGT_ATTRS=y
--CONFIG_SCSI_LOWLEVEL=y
--CONFIG_ISCSI_TCP=m
--CONFIG_SCSI_CXGB3_ISCSI=m
--CONFIG_BLK_DEV_3W_XXXX_RAID=m
--CONFIG_SCSI_3W_9XXX=m
--CONFIG_SCSI_7000FASST=m
--CONFIG_SCSI_ACARD=m
--CONFIG_SCSI_AHA152X=m
--CONFIG_SCSI_AHA1542=m
--CONFIG_SCSI_AACRAID=m
--CONFIG_SCSI_AIC7XXX=m
--CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
--CONFIG_AIC7XXX_RESET_DELAY_MS=5000
--# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
--CONFIG_AIC7XXX_DEBUG_MASK=0
--CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC7XXX_OLD=m
--CONFIG_SCSI_AIC79XX=m
--CONFIG_AIC79XX_CMDS_PER_DEVICE=32
--CONFIG_AIC79XX_RESET_DELAY_MS=15000
--# CONFIG_AIC79XX_DEBUG_ENABLE is not set
--CONFIG_AIC79XX_DEBUG_MASK=0
--CONFIG_AIC79XX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC94XX=m
--CONFIG_AIC94XX_DEBUG=y
--CONFIG_SCSI_DPT_I2O=m
--CONFIG_SCSI_ADVANSYS=m
--CONFIG_SCSI_IN2000=m
--CONFIG_SCSI_ARCMSR=m
--CONFIG_SCSI_ARCMSR_AER=y
--CONFIG_MEGARAID_NEWGEN=y
--CONFIG_MEGARAID_MM=m
--CONFIG_MEGARAID_MAILBOX=m
--CONFIG_MEGARAID_LEGACY=m
--CONFIG_MEGARAID_SAS=m
--CONFIG_SCSI_HPTIOP=m
--CONFIG_SCSI_BUSLOGIC=m
--CONFIG_SCSI_FLASHPOINT=y
--CONFIG_LIBFC=m
--CONFIG_FCOE=m
--CONFIG_SCSI_DMX3191D=m
--CONFIG_SCSI_DTC3280=m
--CONFIG_SCSI_EATA=m
--CONFIG_SCSI_EATA_TAGGED_QUEUE=y
--CONFIG_SCSI_EATA_LINKED_COMMANDS=y
--CONFIG_SCSI_EATA_MAX_TAGS=16
--CONFIG_SCSI_FUTURE_DOMAIN=m
--CONFIG_SCSI_GDTH=m
--CONFIG_SCSI_GENERIC_NCR5380=m
--CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
--CONFIG_SCSI_GENERIC_NCR53C400=y
--CONFIG_SCSI_IPS=m
--CONFIG_SCSI_INITIO=m
--CONFIG_SCSI_INIA100=m
--CONFIG_SCSI_PPA=m
--CONFIG_SCSI_IMM=m
--# CONFIG_SCSI_IZIP_EPP16 is not set
--# CONFIG_SCSI_IZIP_SLOW_CTR is not set
--CONFIG_SCSI_MVSAS=m
--CONFIG_SCSI_NCR53C406A=m
--CONFIG_SCSI_STEX=m
--CONFIG_SCSI_SYM53C8XX_2=m
--CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
--CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
--CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
--CONFIG_SCSI_SYM53C8XX_MMIO=y
--CONFIG_SCSI_IPR=m
--CONFIG_SCSI_IPR_TRACE=y
--CONFIG_SCSI_IPR_DUMP=y
--CONFIG_SCSI_PAS16=m
--CONFIG_SCSI_QLOGIC_FAS=m
--CONFIG_SCSI_QLOGIC_1280=m
--CONFIG_SCSI_QLA_FC=m
--CONFIG_SCSI_QLA_ISCSI=m
--CONFIG_SCSI_LPFC=m
--CONFIG_SCSI_SYM53C416=m
--CONFIG_SCSI_DC395x=m
--CONFIG_SCSI_DC390T=m
--CONFIG_SCSI_T128=m
--CONFIG_SCSI_U14_34F=m
--CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y
--CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y
--CONFIG_SCSI_U14_34F_MAX_TAGS=8
--CONFIG_SCSI_ULTRASTOR=m
--CONFIG_SCSI_NSP32=m
--CONFIG_SCSI_DEBUG=m
--CONFIG_SCSI_SRP=m
--CONFIG_SCSI_LOWLEVEL_PCMCIA=y
--CONFIG_PCMCIA_AHA152X=m
--CONFIG_PCMCIA_FDOMAIN=m
--CONFIG_PCMCIA_NINJA_SCSI=m
--CONFIG_PCMCIA_QLOGIC=m
--CONFIG_PCMCIA_SYM53C500=m
--CONFIG_SCSI_DH=m
--CONFIG_SCSI_DH_RDAC=m
--CONFIG_SCSI_DH_HP_SW=m
--CONFIG_SCSI_DH_EMC=m
--CONFIG_SCSI_DH_ALUA=m
--CONFIG_ATA=m
--# CONFIG_ATA_NONSTANDARD is not set
--CONFIG_ATA_ACPI=y
--CONFIG_SATA_PMP=y
--CONFIG_SATA_AHCI=m
--CONFIG_SATA_SIL24=m
--CONFIG_ATA_SFF=y
--CONFIG_SATA_SVW=m
--CONFIG_ATA_PIIX=m
--CONFIG_SATA_MV=m
--CONFIG_SATA_NV=m
--CONFIG_PDC_ADMA=m
--CONFIG_SATA_QSTOR=m
--CONFIG_SATA_PROMISE=m
--CONFIG_SATA_SX4=m
--CONFIG_SATA_SIL=m
--CONFIG_SATA_SIS=m
--CONFIG_SATA_ULI=m
--CONFIG_SATA_VIA=m
--CONFIG_SATA_VITESSE=m
--CONFIG_SATA_INIC162X=m
--CONFIG_PATA_ACPI=m
--CONFIG_PATA_ALI=m
--CONFIG_PATA_AMD=m
--CONFIG_PATA_ARTOP=m
--CONFIG_PATA_ATIIXP=m
--CONFIG_PATA_CMD640_PCI=m
--CONFIG_PATA_CMD64X=m
--CONFIG_PATA_CS5520=m
--CONFIG_PATA_CS5530=m
--CONFIG_PATA_CS5535=m
--CONFIG_PATA_CS5536=m
--CONFIG_PATA_CYPRESS=m
--CONFIG_PATA_EFAR=m
--CONFIG_ATA_GENERIC=m
--CONFIG_PATA_HPT366=m
--CONFIG_PATA_HPT37X=m
--CONFIG_PATA_HPT3X2N=m
--CONFIG_PATA_HPT3X3=m
--# CONFIG_PATA_HPT3X3_DMA is not set
--CONFIG_PATA_ISAPNP=m
--CONFIG_PATA_IT821X=m
--CONFIG_PATA_IT8213=m
--CONFIG_PATA_JMICRON=m
--CONFIG_PATA_LEGACY=m
--CONFIG_PATA_TRIFLEX=m
--CONFIG_PATA_MARVELL=m
--CONFIG_PATA_MPIIX=m
--CONFIG_PATA_OLDPIIX=m
--CONFIG_PATA_NETCELL=m
--CONFIG_PATA_NINJA32=m
--CONFIG_PATA_NS87410=m
--CONFIG_PATA_NS87415=m
--CONFIG_PATA_OPTI=m
--CONFIG_PATA_OPTIDMA=m
--CONFIG_PATA_PCMCIA=m
--CONFIG_PATA_PDC_OLD=m
--CONFIG_PATA_QDI=m
--CONFIG_PATA_RADISYS=m
--CONFIG_PATA_RZ1000=m
--CONFIG_PATA_SC1200=m
--CONFIG_PATA_SERVERWORKS=m
--CONFIG_PATA_PDC2027X=m
--CONFIG_PATA_SIL680=m
--CONFIG_PATA_SIS=m
--CONFIG_PATA_VIA=m
--CONFIG_PATA_WINBOND=m
--CONFIG_PATA_WINBOND_VLB=m
--CONFIG_PATA_SCH=m
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=m
--CONFIG_MD_RAID0=m
--CONFIG_MD_RAID1=m
--CONFIG_MD_RAID10=m
--CONFIG_MD_RAID456=m
--CONFIG_MD_RAID5_RESHAPE=y
--CONFIG_MD_MULTIPATH=m
--CONFIG_MD_FAULTY=m
--CONFIG_BLK_DEV_DM=m
--# CONFIG_DM_DEBUG is not set
--CONFIG_DM_CRYPT=m
--CONFIG_DM_SNAPSHOT=m
--CONFIG_DM_MIRROR=m
--CONFIG_DM_ZERO=m
--CONFIG_DM_MULTIPATH=m
--CONFIG_DM_DELAY=m
--CONFIG_DM_RAID45=m
--CONFIG_DM_UEVENT=y
--CONFIG_FUSION=y
--CONFIG_FUSION_SPI=m
--CONFIG_FUSION_FC=m
--CONFIG_FUSION_SAS=m
--CONFIG_FUSION_MAX_SGE=128
--CONFIG_FUSION_MAX_FC_SGE=256
--CONFIG_FUSION_CTL=m
--CONFIG_FUSION_LAN=m
--# CONFIG_FUSION_LOGGING is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--
--#
--# Enable only one of the two stacks, unless you know what you are doing
--#
--# CONFIG_FIREWIRE is not set
--CONFIG_IEEE1394=m
--CONFIG_IEEE1394_OHCI1394=m
--CONFIG_IEEE1394_PCILYNX=m
--CONFIG_IEEE1394_SBP2=m
--# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
--CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
--CONFIG_IEEE1394_ETH1394=m
--CONFIG_IEEE1394_RAWIO=m
--CONFIG_IEEE1394_VIDEO1394=m
--CONFIG_IEEE1394_DV1394=m
--# CONFIG_IEEE1394_VERBOSEDEBUG is not set
--CONFIG_I2O=m
--CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
--CONFIG_I2O_EXT_ADAPTEC=y
--CONFIG_I2O_CONFIG=m
--CONFIG_I2O_CONFIG_OLD_IOCTL=y
--CONFIG_I2O_BUS=m
--CONFIG_I2O_BLOCK=m
--CONFIG_I2O_SCSI=m
--CONFIG_I2O_PROC=m
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--CONFIG_IFB=m
--CONFIG_DUMMY=m
--CONFIG_BONDING=m
--CONFIG_MACVLAN=m
--CONFIG_EQUALIZER=m
--CONFIG_TUN=m
--CONFIG_VETH=m
--CONFIG_NET_SB1000=m
--CONFIG_ARCNET=m
--CONFIG_ARCNET_1201=m
--CONFIG_ARCNET_1051=m
--CONFIG_ARCNET_RAW=m
--CONFIG_ARCNET_CAP=m
--CONFIG_ARCNET_COM90xx=m
--CONFIG_ARCNET_COM90xxIO=m
--CONFIG_ARCNET_RIM_I=m
--# CONFIG_ARCNET_COM20020 is not set
--CONFIG_PHYLIB=m
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=m
--CONFIG_DAVICOM_PHY=m
--CONFIG_QSEMI_PHY=m
--CONFIG_LXT_PHY=m
--CONFIG_CICADA_PHY=m
--CONFIG_VITESSE_PHY=m
--CONFIG_SMSC_PHY=m
--CONFIG_BROADCOM_PHY=m
--CONFIG_ICPLUS_PHY=m
--CONFIG_REALTEK_PHY=m
--CONFIG_MDIO_BITBANG=m
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=m
--CONFIG_HAPPYMEAL=m
--CONFIG_SUNGEM=m
--CONFIG_CASSINI=m
--CONFIG_NET_VENDOR_3COM=y
--CONFIG_EL1=m
--CONFIG_EL2=m
--CONFIG_ELPLUS=m
--CONFIG_EL16=m
--CONFIG_EL3=m
--CONFIG_3C515=m
--CONFIG_VORTEX=m
--CONFIG_TYPHOON=m
--CONFIG_LANCE=m
--CONFIG_NET_VENDOR_SMC=y
--CONFIG_WD80x3=m
--CONFIG_ULTRA=m
--CONFIG_SMC9194=m
--CONFIG_ENC28J60=m
--# CONFIG_ENC28J60_WRITEVERIFY is not set
--CONFIG_NET_VENDOR_RACAL=y
--CONFIG_NI52=m
--CONFIG_NI65=m
--CONFIG_NET_TULIP=y
--CONFIG_DE2104X=m
--CONFIG_TULIP=m
--# CONFIG_TULIP_MWI is not set
--# CONFIG_TULIP_MMIO is not set
--CONFIG_TULIP_NAPI=y
--CONFIG_TULIP_NAPI_HW_MITIGATION=y
--CONFIG_DE4X5=m
--CONFIG_WINBOND_840=m
--CONFIG_DM9102=m
--CONFIG_ULI526X=m
--CONFIG_PCMCIA_XIRCOM=m
--CONFIG_AT1700=m
--CONFIG_DEPCA=m
--CONFIG_HP100=m
--CONFIG_NET_ISA=y
--CONFIG_E2100=m
--CONFIG_EWRK3=m
--CONFIG_EEXPRESS=m
--CONFIG_EEXPRESS_PRO=m
--CONFIG_HPLAN_PLUS=m
--CONFIG_HPLAN=m
--CONFIG_LP486E=m
--CONFIG_ETH16I=m
--CONFIG_NE2000=m
--CONFIG_ZNET=m
--CONFIG_SEEQ8005=m
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--CONFIG_PCNET32=m
--CONFIG_AMD8111_ETH=m
--CONFIG_ADAPTEC_STARFIRE=m
--CONFIG_AC3200=m
--CONFIG_APRICOT=m
--CONFIG_B44=m
--CONFIG_B44_PCI_AUTOSELECT=y
--CONFIG_B44_PCICORE_AUTOSELECT=y
--CONFIG_B44_PCI=y
--CONFIG_FORCEDETH=m
--CONFIG_FORCEDETH_NAPI=y
--CONFIG_CS89x0=m
--CONFIG_EEPRO100=m
--CONFIG_E100=m
--CONFIG_FEALNX=m
--CONFIG_NATSEMI=m
--CONFIG_NE2K_PCI=m
--CONFIG_8139CP=m
--CONFIG_8139TOO=m
--# CONFIG_8139TOO_PIO is not set
--# CONFIG_8139TOO_TUNE_TWISTER is not set
--CONFIG_8139TOO_8129=y
--# CONFIG_8139_OLD_RX_RESET is not set
--CONFIG_R6040=m
--CONFIG_SIS900=m
--CONFIG_EPIC100=m
--CONFIG_SUNDANCE=m
--# CONFIG_SUNDANCE_MMIO is not set
--CONFIG_TLAN=m
--CONFIG_VIA_RHINE=m
--# CONFIG_VIA_RHINE_MMIO is not set
--CONFIG_SC92031=m
--CONFIG_NET_POCKET=y
--CONFIG_ATP=m
--CONFIG_DE600=m
--CONFIG_DE620=m
--CONFIG_ATL2=m
--CONFIG_NETDEV_1000=y
--CONFIG_ACENIC=m
--# CONFIG_ACENIC_OMIT_TIGON_I is not set
--CONFIG_DL2K=m
--CONFIG_E1000=m
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--CONFIG_E1000E=m
--CONFIG_IP1000=m
--CONFIG_IGB=m
--CONFIG_IGB_LRO=y
--CONFIG_NS83820=m
--CONFIG_HAMACHI=m
--CONFIG_YELLOWFIN=m
--CONFIG_R8169=m
--CONFIG_R8169_VLAN=y
--CONFIG_SIS190=m
--CONFIG_SKGE=m
--# CONFIG_SKGE_DEBUG is not set
--CONFIG_SKY2=m
--# CONFIG_SKY2_DEBUG is not set
--CONFIG_VIA_VELOCITY=m
--CONFIG_TIGON3=m
--CONFIG_BNX2=m
--CONFIG_QLA3XXX=m
--CONFIG_ATL1=m
--CONFIG_ATL1E=m
--CONFIG_NETDEV_10000=y
--CONFIG_CHELSIO_T1=m
--CONFIG_CHELSIO_T1_1G=y
--CONFIG_CHELSIO_T3=m
--CONFIG_IXGBE=m
--CONFIG_IXGBE_LRO=y
--CONFIG_IXGBE_DCB=y
--CONFIG_IXGB=m
--CONFIG_S2IO=m
--CONFIG_MYRI10GE=m
--CONFIG_NETXEN_NIC=m
--CONFIG_NIU=m
--CONFIG_MLX4_CORE=m
--CONFIG_MLX4_DEBUG=y
--CONFIG_TEHUTI=m
--CONFIG_BNX2X=m
--CONFIG_SFC=m
--# CONFIG_SFC_RESOURCE is not set
--CONFIG_TR=y
--CONFIG_IBMTR=m
--CONFIG_IBMOL=m
--CONFIG_IBMLS=m
--CONFIG_3C359=m
--CONFIG_TMS380TR=m
--CONFIG_TMSPCI=m
--CONFIG_SKISA=m
--CONFIG_PROTEON=m
--CONFIG_ABYSS=m
--CONFIG_SMCTR=m
--
--#
--# Wireless LAN
--#
--CONFIG_WLAN_PRE80211=y
--CONFIG_STRIP=m
--# CONFIG_ARLAN is not set
--CONFIG_WAVELAN=m
--CONFIG_PCMCIA_WAVELAN=m
--CONFIG_PCMCIA_NETWAVE=m
--CONFIG_WLAN_80211=y
--CONFIG_PCMCIA_RAYCS=m
--CONFIG_IPW2100=m
--CONFIG_IPW2100_MONITOR=y
--# CONFIG_IPW2100_DEBUG is not set
--CONFIG_IPW2200=m
--CONFIG_IPW2200_MONITOR=y
--CONFIG_IPW2200_RADIOTAP=y
--CONFIG_IPW2200_PROMISCUOUS=y
--CONFIG_IPW2200_QOS=y
--# CONFIG_IPW2200_DEBUG is not set
--CONFIG_LIBERTAS=m
--CONFIG_LIBERTAS_USB=m
--CONFIG_LIBERTAS_CS=m
--CONFIG_LIBERTAS_SDIO=m
--# CONFIG_LIBERTAS_DEBUG is not set
--CONFIG_AIRO=m
--CONFIG_HERMES=m
--CONFIG_PLX_HERMES=m
--CONFIG_TMD_HERMES=m
--CONFIG_NORTEL_HERMES=m
--CONFIG_PCI_HERMES=m
--CONFIG_PCMCIA_HERMES=m
--CONFIG_PCMCIA_SPECTRUM=m
--CONFIG_ATMEL=m
--CONFIG_PCI_ATMEL=m
--CONFIG_PCMCIA_ATMEL=m
--CONFIG_AIRO_CS=m
--CONFIG_PCMCIA_WL3501=m
--CONFIG_PRISM54=m
--CONFIG_USB_ZD1201=m
--CONFIG_USB_NET_RNDIS_WLAN=m
--CONFIG_RTL8180=m
--CONFIG_RTL8187=m
--CONFIG_ADM8211=m
--CONFIG_MAC80211_HWSIM=m
--CONFIG_P54_COMMON=m
--CONFIG_P54_USB=m
--CONFIG_P54_PCI=m
--CONFIG_ATH5K=m
--# CONFIG_ATH5K_DEBUG is not set
--CONFIG_ATH9K=m
--CONFIG_IWLWIFI=m
--CONFIG_IWLCORE=m
--CONFIG_IWLWIFI_LEDS=y
--CONFIG_IWLWIFI_RFKILL=y
--# CONFIG_IWLWIFI_DEBUG is not set
--CONFIG_IWLAGN=m
--CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
--CONFIG_IWLAGN_LEDS=y
--CONFIG_IWL4965=y
--CONFIG_IWL5000=y
--CONFIG_IWL3945=m
--CONFIG_IWL3945_RFKILL=y
--CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
--CONFIG_IWL3945_LEDS=y
--# CONFIG_IWL3945_DEBUG is not set
--CONFIG_HOSTAP=m
--CONFIG_HOSTAP_FIRMWARE=y
--CONFIG_HOSTAP_FIRMWARE_NVRAM=y
--CONFIG_HOSTAP_PLX=m
--CONFIG_HOSTAP_PCI=m
--CONFIG_HOSTAP_CS=m
--CONFIG_B43=m
--CONFIG_B43_PCI_AUTOSELECT=y
--CONFIG_B43_PCICORE_AUTOSELECT=y
--CONFIG_B43_PCMCIA=y
--CONFIG_B43_PIO=y
--CONFIG_B43_LEDS=y
--CONFIG_B43_RFKILL=y
--# CONFIG_B43_DEBUG is not set
--CONFIG_B43LEGACY=m
--CONFIG_B43LEGACY_PCI_AUTOSELECT=y
--CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
--CONFIG_B43LEGACY_LEDS=y
--CONFIG_B43LEGACY_RFKILL=y
--# CONFIG_B43LEGACY_DEBUG is not set
--CONFIG_B43LEGACY_DMA=y
--CONFIG_B43LEGACY_PIO=y
--CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
--# CONFIG_B43LEGACY_DMA_MODE is not set
--# CONFIG_B43LEGACY_PIO_MODE is not set
--CONFIG_ZD1211RW=m
--# CONFIG_ZD1211RW_DEBUG is not set
--CONFIG_RT2X00=m
--CONFIG_RT2X00_LIB=m
--CONFIG_RT2X00_LIB_PCI=m
--CONFIG_RT2X00_LIB_USB=m
--CONFIG_RT2X00_LIB_FIRMWARE=y
--CONFIG_RT2X00_LIB_RFKILL=y
--CONFIG_RT2X00_LIB_LEDS=y
--CONFIG_RT2400PCI=m
--CONFIG_RT2400PCI_RFKILL=y
--CONFIG_RT2400PCI_LEDS=y
--CONFIG_RT2500PCI=m
--CONFIG_RT2500PCI_RFKILL=y
--CONFIG_RT2500PCI_LEDS=y
--CONFIG_RT61PCI=m
--CONFIG_RT61PCI_RFKILL=y
--CONFIG_RT61PCI_LEDS=y
--CONFIG_RT2500USB=m
--CONFIG_RT2500USB_LEDS=y
--CONFIG_RT73USB=m
--CONFIG_RT73USB_LEDS=y
--# CONFIG_RT2X00_LIB_DEBUGFS is not set
--# CONFIG_RT2X00_DEBUG is not set
--
--#
--# USB Network Adapters
--#
--CONFIG_USB_CATC=m
--CONFIG_USB_KAWETH=m
--CONFIG_USB_PEGASUS=m
--CONFIG_USB_RTL8150=m
--CONFIG_USB_USBNET=m
--CONFIG_USB_NET_AX8817X=m
--CONFIG_USB_NET_CDCETHER=m
--CONFIG_USB_NET_DM9601=m
--CONFIG_USB_NET_GL620A=m
--CONFIG_USB_NET_NET1080=m
--CONFIG_USB_NET_PLUSB=m
--CONFIG_USB_NET_MCS7830=m
--CONFIG_USB_NET_RNDIS_HOST=m
--CONFIG_USB_NET_CDC_SUBSET=m
--CONFIG_USB_ALI_M5632=y
--CONFIG_USB_AN2720=y
--CONFIG_USB_BELKIN=y
--CONFIG_USB_ARMLINUX=y
--CONFIG_USB_EPSON2888=y
--CONFIG_USB_KC2190=y
--CONFIG_USB_NET_ZAURUS=m
--CONFIG_USB_HSO=m
--CONFIG_NET_PCMCIA=y
--CONFIG_PCMCIA_3C589=m
--CONFIG_PCMCIA_3C574=m
--CONFIG_PCMCIA_FMVJ18X=m
--CONFIG_PCMCIA_PCNET=m
--CONFIG_PCMCIA_NMCLAN=m
--CONFIG_PCMCIA_SMC91C92=m
--CONFIG_PCMCIA_XIRC2PS=m
--CONFIG_PCMCIA_AXNET=m
--CONFIG_PCMCIA_IBMTR=m
--CONFIG_WAN=y
--CONFIG_HOSTESS_SV11=m
--# CONFIG_COSA is not set
--CONFIG_LANMEDIA=m
--CONFIG_SEALEVEL_4021=m
--CONFIG_HDLC=m
--CONFIG_HDLC_RAW=m
--CONFIG_HDLC_RAW_ETH=m
--CONFIG_HDLC_CISCO=m
--CONFIG_HDLC_FR=m
--CONFIG_HDLC_PPP=m
--CONFIG_HDLC_X25=m
--CONFIG_PCI200SYN=m
--CONFIG_WANXL=m
--# CONFIG_PC300 is not set
--CONFIG_PC300TOO=m
--CONFIG_N2=m
--CONFIG_C101=m
--CONFIG_FARSYNC=m
--# CONFIG_DSCC4 is not set
--CONFIG_DLCI=m
--CONFIG_DLCI_MAX=8
--CONFIG_SDLA=m
--# CONFIG_WAN_ROUTER_DRIVERS is not set
--CONFIG_LAPBETHER=m
--CONFIG_X25_ASY=m
--# CONFIG_SBNI is not set
--CONFIG_ATM_DRIVERS=y
--CONFIG_ATM_DUMMY=m
--CONFIG_ATM_TCP=m
--CONFIG_ATM_LANAI=m
--CONFIG_ATM_ENI=m
--# CONFIG_ATM_ENI_DEBUG is not set
--# CONFIG_ATM_ENI_TUNE_BURST is not set
--CONFIG_ATM_FIRESTREAM=m
--CONFIG_ATM_ZATM=m
--# CONFIG_ATM_ZATM_DEBUG is not set
--CONFIG_ATM_NICSTAR=m
--CONFIG_ATM_NICSTAR_USE_SUNI=y
--CONFIG_ATM_NICSTAR_USE_IDT77105=y
--CONFIG_ATM_IDT77252=m
--# CONFIG_ATM_IDT77252_DEBUG is not set
--CONFIG_ATM_IDT77252_RCV_ALL=y
--CONFIG_ATM_IDT77252_USE_SUNI=y
--CONFIG_ATM_AMBASSADOR=m
--# CONFIG_ATM_AMBASSADOR_DEBUG is not set
--CONFIG_ATM_HORIZON=m
--# CONFIG_ATM_HORIZON_DEBUG is not set
--CONFIG_ATM_IA=m
--# CONFIG_ATM_IA_DEBUG is not set
--CONFIG_ATM_FORE200E=m
--CONFIG_ATM_FORE200E_USE_TASKLET=y
--CONFIG_ATM_FORE200E_TX_RETRY=16
--CONFIG_ATM_FORE200E_DEBUG=0
--CONFIG_ATM_HE=m
--CONFIG_ATM_HE_USE_SUNI=y
--CONFIG_FDDI=y
--# CONFIG_DEFXX is not set
--CONFIG_SKFP=m
--CONFIG_HIPPI=y
--CONFIG_ROADRUNNER=m
--CONFIG_ROADRUNNER_LARGE_RINGS=y
--CONFIG_PLIP=m
--CONFIG_PPP=m
--CONFIG_PPP_MULTILINK=y
--CONFIG_PPP_FILTER=y
--CONFIG_PPP_ASYNC=m
--CONFIG_PPP_SYNC_TTY=m
--CONFIG_PPP_DEFLATE=m
--CONFIG_PPP_BSDCOMP=m
--CONFIG_PPP_MPPE=m
--CONFIG_PPPOE=m
--CONFIG_PPPOATM=m
--CONFIG_PPPOL2TP=m
--CONFIG_SLIP=m
--CONFIG_SLIP_COMPRESSED=y
--CONFIG_SLHC=m
--CONFIG_SLIP_SMART=y
--CONFIG_SLIP_MODE_SLIP6=y
--CONFIG_NET_FC=y
--CONFIG_NETCONSOLE=m
--CONFIG_NETCONSOLE_DYNAMIC=y
--CONFIG_NETPOLL=y
--CONFIG_NETPOLL_TRAP=y
--CONFIG_NET_POLL_CONTROLLER=y
--CONFIG_VIRTIO_NET=m
--CONFIG_ISDN=y
--CONFIG_MISDN=m
--CONFIG_MISDN_DSP=m
--CONFIG_MISDN_L1OIP=m
--
--#
--# mISDN hardware drivers
--#
--CONFIG_MISDN_HFCPCI=m
--CONFIG_MISDN_HFCMULTI=m
--CONFIG_ISDN_I4L=m
--CONFIG_ISDN_PPP=y
--CONFIG_ISDN_PPP_VJ=y
--CONFIG_ISDN_MPP=y
--CONFIG_IPPP_FILTER=y
--CONFIG_ISDN_PPP_BSDCOMP=m
--CONFIG_ISDN_AUDIO=y
--CONFIG_ISDN_TTY_FAX=y
--CONFIG_ISDN_X25=y
--
--#
--# ISDN feature submodules
--#
--CONFIG_ISDN_DIVERSION=m
--
--#
--# ISDN4Linux hardware drivers
--#
--
--#
--# Passive cards
--#
--CONFIG_ISDN_DRV_HISAX=m
--
--#
--# D-channel protocol features
--#
--CONFIG_HISAX_EURO=y
--CONFIG_DE_AOC=y
--# CONFIG_HISAX_NO_SENDCOMPLETE is not set
--# CONFIG_HISAX_NO_LLC is not set
--# CONFIG_HISAX_NO_KEYPAD is not set
--CONFIG_HISAX_1TR6=y
--CONFIG_HISAX_NI1=y
--CONFIG_HISAX_MAX_CARDS=8
--
--#
--# HiSax supported cards
--#
--CONFIG_HISAX_16_0=y
--CONFIG_HISAX_16_3=y
--CONFIG_HISAX_TELESPCI=y
--CONFIG_HISAX_S0BOX=y
--CONFIG_HISAX_AVM_A1=y
--CONFIG_HISAX_FRITZPCI=y
--CONFIG_HISAX_AVM_A1_PCMCIA=y
--CONFIG_HISAX_ELSA=y
--CONFIG_HISAX_IX1MICROR2=y
--CONFIG_HISAX_DIEHLDIVA=y
--CONFIG_HISAX_ASUSCOM=y
--CONFIG_HISAX_TELEINT=y
--CONFIG_HISAX_HFCS=y
--CONFIG_HISAX_SEDLBAUER=y
--CONFIG_HISAX_SPORTSTER=y
--CONFIG_HISAX_MIC=y
--CONFIG_HISAX_NETJET=y
--CONFIG_HISAX_NETJET_U=y
--CONFIG_HISAX_NICCY=y
--CONFIG_HISAX_ISURF=y
--CONFIG_HISAX_HSTSAPHIR=y
--CONFIG_HISAX_BKM_A4T=y
--CONFIG_HISAX_SCT_QUADRO=y
--CONFIG_HISAX_GAZEL=y
--CONFIG_HISAX_HFC_PCI=y
--CONFIG_HISAX_W6692=y
--CONFIG_HISAX_HFC_SX=y
--CONFIG_HISAX_ENTERNOW_PCI=y
--CONFIG_HISAX_DEBUG=y
--
--#
--# HiSax PCMCIA card service modules
--#
--CONFIG_HISAX_SEDLBAUER_CS=m
--CONFIG_HISAX_ELSA_CS=m
--CONFIG_HISAX_AVM_A1_CS=m
--CONFIG_HISAX_TELES_CS=m
--
--#
--# HiSax sub driver modules
--#
--CONFIG_HISAX_ST5481=m
--CONFIG_HISAX_HFCUSB=m
--CONFIG_HISAX_HFC4S8S=m
--CONFIG_HISAX_FRITZ_PCIPNP=m
--CONFIG_HISAX_HDLC=y
--
--#
--# Active cards
--#
--CONFIG_ISDN_DRV_ICN=m
--CONFIG_ISDN_DRV_PCBIT=m
--CONFIG_ISDN_DRV_SC=m
--CONFIG_ISDN_DRV_ACT2000=m
--CONFIG_HYSDN=m
--CONFIG_HYSDN_CAPI=y
--CONFIG_ISDN_DRV_GIGASET=m
--CONFIG_GIGASET_BASE=m
--CONFIG_GIGASET_M105=m
--CONFIG_GIGASET_M101=m
--# CONFIG_GIGASET_DEBUG is not set
--CONFIG_GIGASET_UNDOCREQ=y
--CONFIG_ISDN_CAPI=m
--CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
--CONFIG_CAPI_TRACE=y
--CONFIG_ISDN_CAPI_MIDDLEWARE=y
--CONFIG_ISDN_CAPI_CAPI20=m
--CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
--CONFIG_ISDN_CAPI_CAPIFS=m
--CONFIG_ISDN_CAPI_CAPIDRV=m
--
--#
--# CAPI hardware drivers
--#
--CONFIG_CAPI_AVM=y
--CONFIG_ISDN_DRV_AVMB1_B1ISA=m
--CONFIG_ISDN_DRV_AVMB1_B1PCI=m
--CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
--CONFIG_ISDN_DRV_AVMB1_T1ISA=m
--CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
--CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
--CONFIG_ISDN_DRV_AVMB1_T1PCI=m
--CONFIG_ISDN_DRV_AVMB1_C4=m
--CONFIG_CAPI_EICON=y
--CONFIG_ISDN_DIVAS=m
--CONFIG_ISDN_DIVAS_BRIPCI=y
--CONFIG_ISDN_DIVAS_PRIPCI=y
--CONFIG_ISDN_DIVAS_DIVACAPI=m
--CONFIG_ISDN_DIVAS_USERIDI=m
--CONFIG_ISDN_DIVAS_MAINT=m
--CONFIG_PHONE=m
--CONFIG_PHONE_IXJ=m
--CONFIG_PHONE_IXJ_PCMCIA=m
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--CONFIG_INPUT_FF_MEMLESS=m
--CONFIG_INPUT_POLLDEV=m
--
--#
--# Userland interfaces
--#
--CONFIG_INPUT_MOUSEDEV=y
--CONFIG_INPUT_MOUSEDEV_PSAUX=y
--CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
--CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
--CONFIG_INPUT_JOYDEV=m
--CONFIG_INPUT_EVDEV=y
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
--CONFIG_KEYBOARD_SUNKBD=m
--# CONFIG_KEYBOARD_LKKBD is not set
--CONFIG_KEYBOARD_XTKBD=m
--CONFIG_KEYBOARD_NEWTON=m
--# CONFIG_KEYBOARD_STOWAWAY is not set
--CONFIG_KEYBOARD_GPIO=m
--CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
--CONFIG_MOUSE_PS2_ALPS=y
--CONFIG_MOUSE_PS2_LOGIPS2PP=y
--CONFIG_MOUSE_PS2_SYNAPTICS=y
--CONFIG_MOUSE_PS2_LIFEBOOK=y
--CONFIG_MOUSE_PS2_TRACKPOINT=y
--# CONFIG_MOUSE_PS2_TOUCHKIT is not set
--CONFIG_MOUSE_SERIAL=m
--CONFIG_MOUSE_APPLETOUCH=m
--CONFIG_MOUSE_BCM5974=m
--CONFIG_MOUSE_INPORT=m
--CONFIG_MOUSE_ATIXL=y
--CONFIG_MOUSE_LOGIBM=m
--CONFIG_MOUSE_PC110PAD=m
--# CONFIG_MOUSE_VSXXXAA is not set
--CONFIG_MOUSE_GPIO=m
--CONFIG_INPUT_JOYSTICK=y
--CONFIG_JOYSTICK_ANALOG=m
--CONFIG_JOYSTICK_A3D=m
--CONFIG_JOYSTICK_ADI=m
--CONFIG_JOYSTICK_COBRA=m
--CONFIG_JOYSTICK_GF2K=m
--CONFIG_JOYSTICK_GRIP=m
--CONFIG_JOYSTICK_GRIP_MP=m
--CONFIG_JOYSTICK_GUILLEMOT=m
--CONFIG_JOYSTICK_INTERACT=m
--CONFIG_JOYSTICK_SIDEWINDER=m
--CONFIG_JOYSTICK_TMDC=m
--CONFIG_JOYSTICK_IFORCE=m
--CONFIG_JOYSTICK_IFORCE_USB=y
--CONFIG_JOYSTICK_IFORCE_232=y
--CONFIG_JOYSTICK_WARRIOR=m
--CONFIG_JOYSTICK_MAGELLAN=m
--CONFIG_JOYSTICK_SPACEORB=m
--CONFIG_JOYSTICK_SPACEBALL=m
--CONFIG_JOYSTICK_STINGER=m
--CONFIG_JOYSTICK_TWIDJOY=m
--CONFIG_JOYSTICK_ZHENHUA=m
--CONFIG_JOYSTICK_DB9=m
--CONFIG_JOYSTICK_GAMECON=m
--CONFIG_JOYSTICK_TURBOGRAFX=m
--CONFIG_JOYSTICK_JOYDUMP=m
--CONFIG_JOYSTICK_XPAD=m
--CONFIG_JOYSTICK_XPAD_FF=y
--CONFIG_JOYSTICK_XPAD_LEDS=y
--CONFIG_INPUT_TABLET=y
--CONFIG_TABLET_USB_ACECAD=m
--CONFIG_TABLET_USB_AIPTEK=m
--CONFIG_TABLET_USB_GTCO=m
--CONFIG_TABLET_USB_KBTAB=m
--CONFIG_TABLET_USB_WACOM=m
--CONFIG_INPUT_TOUCHSCREEN=y
--CONFIG_TOUCHSCREEN_ADS7846=m
--CONFIG_TOUCHSCREEN_FUJITSU=m
--CONFIG_TOUCHSCREEN_GUNZE=m
--CONFIG_TOUCHSCREEN_ELO=m
--CONFIG_TOUCHSCREEN_ELOUSB=m
--CONFIG_TOUCHSCREEN_MTOUCH=m
--CONFIG_TOUCHSCREEN_INEXIO=m
--CONFIG_TOUCHSCREEN_MK712=m
--CONFIG_TOUCHSCREEN_HTCPEN=m
--CONFIG_TOUCHSCREEN_PENMOUNT=m
--CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
--CONFIG_TOUCHSCREEN_TOUCHWIN=m
--CONFIG_TOUCHSCREEN_UCB1400=m
--CONFIG_TOUCHSCREEN_WM97XX=m
--CONFIG_TOUCHSCREEN_WM9705=y
--CONFIG_TOUCHSCREEN_WM9712=y
--CONFIG_TOUCHSCREEN_WM9713=y
--CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
--CONFIG_TOUCHSCREEN_USB_EGALAX=y
--CONFIG_TOUCHSCREEN_USB_PANJIT=y
--CONFIG_TOUCHSCREEN_USB_3M=y
--CONFIG_TOUCHSCREEN_USB_ITM=y
--CONFIG_TOUCHSCREEN_USB_ETURBO=y
--CONFIG_TOUCHSCREEN_USB_GUNZE=y
--CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
--CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
--CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
--CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
--CONFIG_TOUCHSCREEN_USB_GOTOP=y
--CONFIG_TOUCHSCREEN_TOUCHIT213=m
--CONFIG_INPUT_MISC=y
--CONFIG_INPUT_PCSPKR=m
--CONFIG_INPUT_APANEL=m
--CONFIG_INPUT_WISTRON_BTNS=m
--CONFIG_INPUT_ATLAS_BTNS=m
--CONFIG_INPUT_ATI_REMOTE=m
--CONFIG_INPUT_ATI_REMOTE2=m
--CONFIG_INPUT_KEYSPAN_REMOTE=m
--CONFIG_INPUT_POWERMATE=m
--CONFIG_INPUT_YEALINK=m
--CONFIG_INPUT_UINPUT=m
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=m
--CONFIG_SERIO_CT82C710=m
--CONFIG_SERIO_PARKBD=m
--CONFIG_SERIO_PCIPS2=m
--CONFIG_SERIO_LIBPS2=y
--CONFIG_SERIO_RAW=m
--CONFIG_GAMEPORT=m
--CONFIG_GAMEPORT_NS558=m
--CONFIG_GAMEPORT_L4=m
--CONFIG_GAMEPORT_EMU10K1=m
--CONFIG_GAMEPORT_FM801=m
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_CONSOLE_TRANSLATIONS=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--CONFIG_VT_HW_CONSOLE_BINDING=y
--CONFIG_DEVKMEM=y
--CONFIG_SERIAL_NONSTANDARD=y
--CONFIG_COMPUTONE=m
--CONFIG_ROCKETPORT=m
--CONFIG_CYCLADES=m
--CONFIG_CYZ_INTR=y
--CONFIG_DIGIEPCA=m
--CONFIG_ESPSERIAL=m
--CONFIG_MOXA_INTELLIO=m
--CONFIG_MOXA_SMARTIO=m
--CONFIG_ISI=m
--CONFIG_SYNCLINK=m
--CONFIG_SYNCLINKMP=m
--CONFIG_SYNCLINK_GT=m
--CONFIG_N_HDLC=m
--CONFIG_RISCOM8=m
--CONFIG_SPECIALIX=m
--CONFIG_SX=m
--CONFIG_RIO=m
--CONFIG_RIO_OLDPCI=y
--CONFIG_STALDRV=y
--CONFIG_NOZOMI=m
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_FIX_EARLYCON_MEM=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_PNP=y
--CONFIG_SERIAL_8250_CS=m
--CONFIG_SERIAL_8250_NR_UARTS=16
--CONFIG_SERIAL_8250_RUNTIME_UARTS=8
--CONFIG_SERIAL_8250_EXTENDED=y
--CONFIG_SERIAL_8250_MANY_PORTS=y
--CONFIG_SERIAL_8250_FOURPORT=m
--CONFIG_SERIAL_8250_ACCENT=m
--CONFIG_SERIAL_8250_BOCA=m
--CONFIG_SERIAL_8250_EXAR_ST16C554=m
--CONFIG_SERIAL_8250_HUB6=m
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--CONFIG_SERIAL_8250_RSA=y
--
--#
--# Non-8250 serial port support
--#
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_JSM=m
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=0
--CONFIG_PRINTER=m
--# CONFIG_LP_CONSOLE is not set
--CONFIG_PPDEV=m
--CONFIG_HVC_DRIVER=y
--CONFIG_VIRTIO_CONSOLE=m
--CONFIG_IPMI_HANDLER=m
--CONFIG_IPMI_PANIC_EVENT=y
--CONFIG_IPMI_PANIC_STRING=y
--CONFIG_IPMI_DEVICE_INTERFACE=m
--CONFIG_IPMI_SI=m
--CONFIG_IPMI_WATCHDOG=m
--CONFIG_IPMI_POWEROFF=m
--CONFIG_HW_RANDOM=y
--CONFIG_HW_RANDOM_INTEL=m
--CONFIG_HW_RANDOM_AMD=m
--CONFIG_HW_RANDOM_GEODE=m
--CONFIG_HW_RANDOM_VIA=m
--CONFIG_HW_RANDOM_VIRTIO=m
--CONFIG_NVRAM=m
--CONFIG_DTLK=m
--CONFIG_R3964=m
--CONFIG_APPLICOM=m
--CONFIG_SONYPI=m
--
--#
--# PCMCIA character devices
--#
--CONFIG_SYNCLINK_CS=m
--CONFIG_CARDMAN_4000=m
--CONFIG_CARDMAN_4040=m
--CONFIG_IPWIRELESS=m
--CONFIG_MWAVE=m
--CONFIG_SCx200_GPIO=m
--CONFIG_PC8736x_GPIO=m
--CONFIG_NSC_GPIO=m
--CONFIG_CS5535_GPIO=m
--CONFIG_RAW_DRIVER=m
--CONFIG_MAX_RAW_DEVS=4096
--CONFIG_HPET=y
--CONFIG_HPET_MMAP=y
--CONFIG_HANGCHECK_TIMER=m
--CONFIG_TCG_TPM=m
--CONFIG_TCG_TIS=m
--CONFIG_TCG_NSC=m
--CONFIG_TCG_ATMEL=m
--CONFIG_TCG_INFINEON=m
--CONFIG_TELCLOCK=m
--CONFIG_DEVPORT=y
--CONFIG_CRASHER=m
--CONFIG_I2C=m
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=m
--CONFIG_I2C_HELPER_AUTO=y
--CONFIG_I2C_ALGOBIT=m
--CONFIG_I2C_ALGOPCA=m
--
--#
--# I2C Hardware Bus support
--#
--
--#
--# PC SMBus host controller drivers
--#
--CONFIG_I2C_ALI1535=m
--CONFIG_I2C_ALI1563=m
--CONFIG_I2C_ALI15X3=m
--CONFIG_I2C_AMD756=m
--CONFIG_I2C_AMD756_S4882=m
--CONFIG_I2C_AMD8111=m
--CONFIG_I2C_I801=m
--CONFIG_I2C_ISCH=m
--CONFIG_I2C_PIIX4=m
--CONFIG_I2C_NFORCE2=m
--CONFIG_I2C_NFORCE2_S4985=m
--CONFIG_I2C_SIS5595=m
--CONFIG_I2C_SIS630=m
--CONFIG_I2C_SIS96X=m
--CONFIG_I2C_VIA=m
--CONFIG_I2C_VIAPRO=m
--
--#
--# I2C system bus drivers (mostly embedded / system-on-chip)
--#
--CONFIG_I2C_GPIO=m
--CONFIG_I2C_OCORES=m
--# CONFIG_I2C_SIMTEC is not set
--
--#
--# External I2C/SMBus adapter drivers
--#
--CONFIG_I2C_PARPORT=m
--CONFIG_I2C_PARPORT_LIGHT=m
--CONFIG_I2C_TAOS_EVM=m
--CONFIG_I2C_TINY_USB=m
--
--#
--# Graphics adapter I2C/DDC channel drivers
--#
--CONFIG_I2C_VOODOO3=m
--
--#
--# Other I2C/SMBus bus drivers
--#
--CONFIG_I2C_PCA_ISA=m
--CONFIG_I2C_PCA_PLATFORM=m
--CONFIG_I2C_STUB=m
--CONFIG_SCx200_I2C=m
--CONFIG_SCx200_I2C_SCL=12
--CONFIG_SCx200_I2C_SDA=13
--CONFIG_SCx200_ACB=m
--
--#
--# Miscellaneous I2C Chip support
--#
--CONFIG_DS1682=m
--CONFIG_AT24=m
--CONFIG_SENSORS_EEPROM=m
--CONFIG_SENSORS_PCF8591=m
--# CONFIG_TPS65010 is not set
--CONFIG_SENSORS_MAX6875=m
--CONFIG_SENSORS_TSL2550=m
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--CONFIG_SPI=y
--CONFIG_SPI_DEBUG=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=m
--CONFIG_SPI_BUTTERFLY=m
--CONFIG_SPI_LM70_LLP=m
--
--#
--# SPI Protocol Masters
--#
--CONFIG_SPI_AT25=m
--CONFIG_SPI_SPIDEV=m
--CONFIG_SPI_TLE62X0=m
--CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
--CONFIG_GPIOLIB=y
--# CONFIG_DEBUG_GPIO is not set
--CONFIG_GPIO_SYSFS=y
--
--#
--# I2C GPIO expanders:
--#
--CONFIG_GPIO_MAX732X=m
--CONFIG_GPIO_PCA953X=m
--CONFIG_GPIO_PCF857X=m
--
--#
--# PCI GPIO expanders:
--#
--
--#
--# SPI GPIO expanders:
--#
--CONFIG_GPIO_MAX7301=m
--CONFIG_GPIO_MCP23S08=m
--CONFIG_W1=m
--CONFIG_W1_CON=y
--
--#
--# 1-wire Bus Masters
--#
--CONFIG_W1_MASTER_MATROX=m
--CONFIG_W1_MASTER_DS2490=m
--CONFIG_W1_MASTER_DS2482=m
--CONFIG_W1_MASTER_GPIO=m
--
--#
--# 1-wire Slaves
--#
--CONFIG_W1_SLAVE_THERM=m
--CONFIG_W1_SLAVE_SMEM=m
--CONFIG_W1_SLAVE_DS2433=m
--CONFIG_W1_SLAVE_DS2433_CRC=y
--CONFIG_W1_SLAVE_DS2760=m
--CONFIG_POWER_SUPPLY=y
--# CONFIG_POWER_SUPPLY_DEBUG is not set
--CONFIG_PDA_POWER=m
--CONFIG_BATTERY_DS2760=m
--CONFIG_BATTERY_OLPC=m
--CONFIG_HWMON=m
--CONFIG_HWMON_VID=m
--CONFIG_SENSORS_ABITUGURU=m
--CONFIG_SENSORS_ABITUGURU3=m
--CONFIG_SENSORS_AD7414=m
--CONFIG_SENSORS_AD7418=m
--CONFIG_SENSORS_ADCXX=m
--CONFIG_SENSORS_ADM1021=m
--CONFIG_SENSORS_ADM1025=m
--CONFIG_SENSORS_ADM1026=m
--CONFIG_SENSORS_ADM1029=m
--CONFIG_SENSORS_ADM1031=m
--CONFIG_SENSORS_ADM9240=m
--CONFIG_SENSORS_ADT7470=m
--CONFIG_SENSORS_ADT7473=m
--CONFIG_SENSORS_K8TEMP=m
--CONFIG_SENSORS_ASB100=m
--CONFIG_SENSORS_ATXP1=m
--CONFIG_SENSORS_DS1621=m
--CONFIG_SENSORS_I5K_AMB=m
--CONFIG_SENSORS_F71805F=m
--CONFIG_SENSORS_F71882FG=m
--CONFIG_SENSORS_F75375S=m
--CONFIG_SENSORS_FSCHER=m
--CONFIG_SENSORS_FSCPOS=m
--CONFIG_SENSORS_FSCHMD=m
--CONFIG_SENSORS_GL518SM=m
--CONFIG_SENSORS_GL520SM=m
--CONFIG_SENSORS_CORETEMP=m
--CONFIG_SENSORS_IBMAEM=m
--CONFIG_SENSORS_IBMPEX=m
--CONFIG_SENSORS_IT87=m
--CONFIG_SENSORS_LM63=m
--CONFIG_SENSORS_LM70=m
--CONFIG_SENSORS_LM75=m
--CONFIG_SENSORS_LM77=m
--CONFIG_SENSORS_LM78=m
--CONFIG_SENSORS_LM80=m
--CONFIG_SENSORS_LM83=m
--CONFIG_SENSORS_LM85=m
--CONFIG_SENSORS_LM87=m
--CONFIG_SENSORS_LM90=m
--CONFIG_SENSORS_LM92=m
--CONFIG_SENSORS_LM93=m
--CONFIG_SENSORS_MAX1619=m
--CONFIG_SENSORS_MAX6650=m
--CONFIG_SENSORS_PC87360=m
--CONFIG_SENSORS_PC87427=m
--CONFIG_SENSORS_SIS5595=m
--CONFIG_SENSORS_DME1737=m
--CONFIG_SENSORS_SMSC47M1=m
--CONFIG_SENSORS_SMSC47M192=m
--CONFIG_SENSORS_SMSC47B397=m
--CONFIG_SENSORS_ADS7828=m
--CONFIG_SENSORS_THMC50=m
--CONFIG_SENSORS_VIA686A=m
--CONFIG_SENSORS_VT1211=m
--CONFIG_SENSORS_VT8231=m
--CONFIG_SENSORS_W83781D=m
--CONFIG_SENSORS_W83791D=m
--CONFIG_SENSORS_W83792D=m
--CONFIG_SENSORS_W83793=m
--CONFIG_SENSORS_W83L785TS=m
--CONFIG_SENSORS_W83L786NG=m
--CONFIG_SENSORS_W83627HF=m
--CONFIG_SENSORS_W83627EHF=m
--CONFIG_SENSORS_HDAPS=m
--CONFIG_SENSORS_APPLESMC=m
--# CONFIG_HWMON_DEBUG_CHIP is not set
--CONFIG_THERMAL=m
--CONFIG_THERMAL_HWMON=y
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--CONFIG_SOFT_WATCHDOG=m
--CONFIG_ACQUIRE_WDT=m
--CONFIG_ADVANTECH_WDT=m
--CONFIG_ALIM1535_WDT=m
--CONFIG_ALIM7101_WDT=m
--CONFIG_SC520_WDT=m
--CONFIG_EUROTECH_WDT=m
--CONFIG_IB700_WDT=m
--CONFIG_IBMASR=m
--CONFIG_WAFER_WDT=m
--CONFIG_I6300ESB_WDT=m
--CONFIG_ITCO_WDT=m
--CONFIG_ITCO_VENDOR_SUPPORT=y
--CONFIG_IT8712F_WDT=m
--CONFIG_HP_WATCHDOG=m
--CONFIG_SC1200_WDT=m
--CONFIG_SCx200_WDT=m
--CONFIG_PC87413_WDT=m
--CONFIG_60XX_WDT=m
--CONFIG_SBC8360_WDT=m
--CONFIG_SBC7240_WDT=m
--CONFIG_CPU5_WDT=m
--CONFIG_SMSC37B787_WDT=m
--CONFIG_W83627HF_WDT=m
--CONFIG_W83697HF_WDT=m
--CONFIG_W83877F_WDT=m
--CONFIG_W83977F_WDT=m
--CONFIG_MACHZ_WDT=m
--CONFIG_SBC_EPX_C3_WATCHDOG=m
--
--#
--# ISA-based Watchdog Cards
--#
--CONFIG_PCWATCHDOG=m
--CONFIG_MIXCOMWD=m
--CONFIG_WDT=m
--CONFIG_WDT_501=y
--
--#
--# PCI-based Watchdog Cards
--#
--CONFIG_PCIPCWATCHDOG=m
--CONFIG_WDTPCI=m
--CONFIG_WDT_501_PCI=y
--
--#
--# USB-based Watchdog Cards
--#
--CONFIG_USBPCWATCHDOG=m
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--CONFIG_SSB=m
--CONFIG_SSB_SPROM=y
--CONFIG_SSB_BLOCKIO=y
--CONFIG_SSB_PCIHOST_POSSIBLE=y
--CONFIG_SSB_PCIHOST=y
--CONFIG_SSB_B43_PCI_BRIDGE=y
--CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
--CONFIG_SSB_PCMCIAHOST=y
--# CONFIG_SSB_DEBUG is not set
--CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
--CONFIG_SSB_DRIVER_PCICORE=y
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_CORE is not set
--CONFIG_MFD_SM501=m
--CONFIG_MFD_SM501_GPIO=y
--CONFIG_HTC_PASIC3=m
--# CONFIG_MFD_TMIO is not set
--
--#
--# Multimedia devices
--#
--
--#
--# Multimedia core support
--#
--CONFIG_VIDEO_DEV=m
--CONFIG_VIDEO_V4L2_COMMON=m
--CONFIG_VIDEO_ALLOW_V4L1=y
--CONFIG_VIDEO_V4L1_COMPAT=y
--CONFIG_DVB_CORE=m
--CONFIG_VIDEO_MEDIA=m
--
--#
--# Multimedia drivers
--#
--CONFIG_VIDEO_SAA7146=m
--CONFIG_VIDEO_SAA7146_VV=m
--CONFIG_MEDIA_ATTACH=y
--CONFIG_MEDIA_TUNER=m
--# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
--CONFIG_MEDIA_TUNER_SIMPLE=m
--CONFIG_MEDIA_TUNER_TDA8290=m
--CONFIG_MEDIA_TUNER_TDA827X=m
--CONFIG_MEDIA_TUNER_TDA18271=m
--CONFIG_MEDIA_TUNER_TDA9887=m
--CONFIG_MEDIA_TUNER_TEA5761=m
--CONFIG_MEDIA_TUNER_TEA5767=m
--CONFIG_MEDIA_TUNER_MT20XX=m
--CONFIG_MEDIA_TUNER_MT2060=m
--CONFIG_MEDIA_TUNER_MT2266=m
--CONFIG_MEDIA_TUNER_MT2131=m
--CONFIG_MEDIA_TUNER_QT1010=m
--CONFIG_MEDIA_TUNER_XC2028=m
--CONFIG_MEDIA_TUNER_XC5000=m
--CONFIG_MEDIA_TUNER_MXL5005S=m
--CONFIG_MEDIA_TUNER_MXL5007T=m
--CONFIG_VIDEO_V4L2=m
--CONFIG_VIDEO_V4L1=m
--CONFIG_VIDEOBUF_GEN=m
--CONFIG_VIDEOBUF_DMA_SG=m
--CONFIG_VIDEOBUF_VMALLOC=m
--CONFIG_VIDEOBUF_DMA_CONTIG=m
--CONFIG_VIDEOBUF_DVB=m
--CONFIG_VIDEO_BTCX=m
--CONFIG_VIDEO_IR=m
--CONFIG_VIDEO_TVEEPROM=m
--CONFIG_VIDEO_TUNER=m
--CONFIG_VIDEO_CAPTURE_DRIVERS=y
--# CONFIG_VIDEO_ADV_DEBUG is not set
--CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
--CONFIG_VIDEO_IR_I2C=m
--CONFIG_VIDEO_TVAUDIO=m
--CONFIG_VIDEO_TDA7432=m
--CONFIG_VIDEO_TDA9840=m
--CONFIG_VIDEO_TDA9875=m
--CONFIG_VIDEO_TEA6415C=m
--CONFIG_VIDEO_TEA6420=m
--CONFIG_VIDEO_MSP3400=m
--CONFIG_VIDEO_CS5345=m
--CONFIG_VIDEO_CS53L32A=m
--CONFIG_VIDEO_M52790=m
--CONFIG_VIDEO_WM8775=m
--CONFIG_VIDEO_WM8739=m
--CONFIG_VIDEO_VP27SMPX=m
--CONFIG_VIDEO_BT819=m
--CONFIG_VIDEO_BT856=m
--CONFIG_VIDEO_KS0127=m
--CONFIG_VIDEO_OV7670=m
--CONFIG_VIDEO_SAA7110=m
--CONFIG_VIDEO_SAA7111=m
--CONFIG_VIDEO_SAA7114=m
--CONFIG_VIDEO_SAA711X=m
--CONFIG_VIDEO_SAA717X=m
--CONFIG_VIDEO_TVP5150=m
--CONFIG_VIDEO_VPX3220=m
--CONFIG_VIDEO_CX25840=m
--CONFIG_VIDEO_CX2341X=m
--CONFIG_VIDEO_SAA7127=m
--CONFIG_VIDEO_SAA7185=m
--CONFIG_VIDEO_ADV7170=m
--CONFIG_VIDEO_ADV7175=m
--CONFIG_VIDEO_UPD64031A=m
--CONFIG_VIDEO_UPD64083=m
--CONFIG_VIDEO_VIVI=m
--CONFIG_VIDEO_BT848=m
--CONFIG_VIDEO_BT848_DVB=y
--CONFIG_VIDEO_SAA6588=m
--CONFIG_VIDEO_PMS=m
--CONFIG_VIDEO_BWQCAM=m
--CONFIG_VIDEO_CQCAM=m
--CONFIG_VIDEO_W9966=m
--CONFIG_VIDEO_CPIA=m
--CONFIG_VIDEO_CPIA_PP=m
--CONFIG_VIDEO_CPIA_USB=m
--CONFIG_VIDEO_CPIA2=m
--CONFIG_VIDEO_SAA5246A=m
--CONFIG_VIDEO_SAA5249=m
--# CONFIG_TUNER_3036 is not set
--CONFIG_VIDEO_STRADIS=m
--CONFIG_VIDEO_ZORAN=m
--CONFIG_VIDEO_ZORAN_DC30=m
--CONFIG_VIDEO_ZORAN_ZR36060=m
--CONFIG_VIDEO_ZORAN_BUZ=m
--CONFIG_VIDEO_ZORAN_DC10=m
--CONFIG_VIDEO_ZORAN_LML33=m
--CONFIG_VIDEO_ZORAN_LML33R10=m
--CONFIG_VIDEO_ZORAN_AVS6EYES=m
--CONFIG_VIDEO_MEYE=m
--CONFIG_VIDEO_SAA7134=m
--CONFIG_VIDEO_SAA7134_ALSA=m
--CONFIG_VIDEO_SAA7134_DVB=m
--CONFIG_VIDEO_MXB=m
--# CONFIG_VIDEO_DPC is not set
--CONFIG_VIDEO_HEXIUM_ORION=m
--CONFIG_VIDEO_HEXIUM_GEMINI=m
--CONFIG_VIDEO_CX88=m
--CONFIG_VIDEO_CX88_ALSA=m
--CONFIG_VIDEO_CX88_BLACKBIRD=m
--CONFIG_VIDEO_CX88_DVB=m
--CONFIG_VIDEO_CX88_VP3054=m
--CONFIG_VIDEO_CX23885=m
--CONFIG_VIDEO_AU0828=m
--CONFIG_VIDEO_IVTV=m
--CONFIG_VIDEO_FB_IVTV=m
--CONFIG_VIDEO_CX18=m
--CONFIG_VIDEO_CAFE_CCIC=m
--CONFIG_V4L_USB_DRIVERS=y
--CONFIG_USB_VIDEO_CLASS=m
--CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
--CONFIG_USB_GSPCA=m
--CONFIG_VIDEO_PVRUSB2=m
--CONFIG_VIDEO_PVRUSB2_SYSFS=y
--CONFIG_VIDEO_PVRUSB2_DVB=y
--# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
--CONFIG_VIDEO_EM28XX=m
--CONFIG_VIDEO_EM28XX_ALSA=m
--CONFIG_VIDEO_EM28XX_DVB=m
--CONFIG_VIDEO_USBVISION=m
--CONFIG_VIDEO_USBVIDEO=m
--CONFIG_USB_VICAM=m
--CONFIG_USB_IBMCAM=m
--CONFIG_USB_KONICAWC=m
--CONFIG_USB_QUICKCAM_MESSENGER=m
--CONFIG_USB_ET61X251=m
--CONFIG_VIDEO_OVCAMCHIP=m
--CONFIG_USB_W9968CF=m
--CONFIG_USB_OV511=m
--CONFIG_USB_SE401=m
--CONFIG_USB_SN9C102=m
--CONFIG_USB_STV680=m
--CONFIG_USB_ZC0301=m
--CONFIG_USB_PWC=m
--# CONFIG_USB_PWC_DEBUG is not set
--CONFIG_USB_ZR364XX=m
--CONFIG_USB_STKWEBCAM=m
--CONFIG_USB_S2255=m
--CONFIG_SOC_CAMERA=m
--CONFIG_SOC_CAMERA_MT9M001=m
--CONFIG_MT9M001_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_MT9V022=m
--CONFIG_MT9V022_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_PLATFORM=m
--CONFIG_VIDEO_SH_MOBILE_CEU=m
--CONFIG_RADIO_ADAPTERS=y
--CONFIG_RADIO_CADET=m
--CONFIG_RADIO_RTRACK=m
--CONFIG_RADIO_RTRACK2=m
--CONFIG_RADIO_AZTECH=m
--CONFIG_RADIO_GEMTEK=m
--CONFIG_RADIO_GEMTEK_PCI=m
--CONFIG_RADIO_MAXIRADIO=m
--CONFIG_RADIO_MAESTRO=m
--CONFIG_RADIO_SF16FMI=m
--CONFIG_RADIO_SF16FMR2=m
--CONFIG_RADIO_TERRATEC=m
--CONFIG_RADIO_TRUST=m
--CONFIG_RADIO_TYPHOON=m
--CONFIG_RADIO_TYPHOON_PROC_FS=y
--CONFIG_RADIO_ZOLTRIX=m
--CONFIG_USB_DSBR=m
--CONFIG_USB_SI470X=m
--CONFIG_DVB_CAPTURE_DRIVERS=y
--
--#
--# Supported SAA7146 based PCI Adapters
--#
--CONFIG_TTPCI_EEPROM=m
--CONFIG_DVB_AV7110=m
--# CONFIG_DVB_AV7110_FIRMWARE is not set
--CONFIG_DVB_AV7110_OSD=y
--CONFIG_DVB_BUDGET_CORE=m
--CONFIG_DVB_BUDGET=m
--CONFIG_DVB_BUDGET_CI=m
--CONFIG_DVB_BUDGET_AV=m
--CONFIG_DVB_BUDGET_PATCH=m
--
--#
--# Supported USB Adapters
--#
--CONFIG_DVB_USB=m
--# CONFIG_DVB_USB_DEBUG is not set
--CONFIG_DVB_USB_A800=m
--CONFIG_DVB_USB_DIBUSB_MB=m
--# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
--CONFIG_DVB_USB_DIBUSB_MC=m
--CONFIG_DVB_USB_DIB0700=m
--CONFIG_DVB_USB_UMT_010=m
--# CONFIG_DVB_USB_CXUSB is not set
--CONFIG_DVB_USB_M920X=m
--CONFIG_DVB_USB_GL861=m
--CONFIG_DVB_USB_AU6610=m
--CONFIG_DVB_USB_DIGITV=m
--CONFIG_DVB_USB_VP7045=m
--CONFIG_DVB_USB_VP702X=m
--CONFIG_DVB_USB_GP8PSK=m
--CONFIG_DVB_USB_NOVA_T_USB2=m
--CONFIG_DVB_USB_TTUSB2=m
--CONFIG_DVB_USB_DTT200U=m
--CONFIG_DVB_USB_OPERA1=m
--CONFIG_DVB_USB_AF9005=m
--CONFIG_DVB_USB_AF9005_REMOTE=m
--CONFIG_DVB_USB_DW2102=m
--CONFIG_DVB_USB_ANYSEE=m
--CONFIG_DVB_TTUSB_BUDGET=m
--CONFIG_DVB_TTUSB_DEC=m
--CONFIG_DVB_CINERGYT2=m
--# CONFIG_DVB_CINERGYT2_TUNING is not set
--CONFIG_DVB_SIANO_SMS1XXX=m
--CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
--
--#
--# Supported FlexCopII (B2C2) Adapters
--#
--CONFIG_DVB_B2C2_FLEXCOP=m
--CONFIG_DVB_B2C2_FLEXCOP_PCI=m
--CONFIG_DVB_B2C2_FLEXCOP_USB=m
--# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
--
--#
--# Supported BT878 Adapters
--#
--CONFIG_DVB_BT8XX=m
--
--#
--# Supported Pluto2 Adapters
--#
--CONFIG_DVB_PLUTO2=m
--
--#
--# Supported DVB Frontends
--#
--
--#
--# Customise DVB Frontends
--#
--# CONFIG_DVB_FE_CUSTOMISE is not set
--
--#
--# DVB-S (satellite) frontends
--#
--CONFIG_DVB_CX24110=m
--CONFIG_DVB_CX24123=m
--CONFIG_DVB_MT312=m
--CONFIG_DVB_S5H1420=m
--CONFIG_DVB_STV0299=m
--CONFIG_DVB_TDA8083=m
--CONFIG_DVB_TDA10086=m
--CONFIG_DVB_VES1X93=m
--CONFIG_DVB_TUNER_ITD1000=m
--CONFIG_DVB_TDA826X=m
--CONFIG_DVB_TUA6100=m
--
--#
--# DVB-T (terrestrial) frontends
--#
--CONFIG_DVB_SP8870=m
--CONFIG_DVB_SP887X=m
--CONFIG_DVB_CX22700=m
--CONFIG_DVB_CX22702=m
--CONFIG_DVB_DRX397XD=m
--CONFIG_DVB_L64781=m
--CONFIG_DVB_TDA1004X=m
--CONFIG_DVB_NXT6000=m
--CONFIG_DVB_MT352=m
--CONFIG_DVB_ZL10353=m
--CONFIG_DVB_DIB3000MB=m
--CONFIG_DVB_DIB3000MC=m
--CONFIG_DVB_DIB7000M=m
--CONFIG_DVB_DIB7000P=m
--CONFIG_DVB_TDA10048=m
--
--#
--# DVB-C (cable) frontends
--#
--CONFIG_DVB_VES1820=m
--CONFIG_DVB_TDA10021=m
--CONFIG_DVB_TDA10023=m
--CONFIG_DVB_STV0297=m
--
--#
--# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
--#
--CONFIG_DVB_NXT200X=m
--CONFIG_DVB_OR51211=m
--CONFIG_DVB_OR51132=m
--CONFIG_DVB_BCM3510=m
--CONFIG_DVB_LGDT330X=m
--CONFIG_DVB_S5H1409=m
--CONFIG_DVB_AU8522=m
--CONFIG_DVB_S5H1411=m
--
--#
--# Digital terrestrial only tuners/PLL
--#
--CONFIG_DVB_PLL=m
--CONFIG_DVB_TUNER_DIB0070=m
--
--#
--# SEC control devices for DVB-S
--#
--CONFIG_DVB_LNBP21=m
--CONFIG_DVB_ISL6405=m
--CONFIG_DVB_ISL6421=m
--CONFIG_DAB=y
--CONFIG_USB_DABUSB=m
--
--#
--# Graphics support
--#
--CONFIG_AGP=m
--CONFIG_AGP_ALI=m
--CONFIG_AGP_ATI=m
--CONFIG_AGP_AMD=m
--CONFIG_AGP_AMD64=m
--CONFIG_AGP_INTEL=m
--CONFIG_AGP_NVIDIA=m
--CONFIG_AGP_SIS=m
--CONFIG_AGP_SWORKS=m
--CONFIG_AGP_VIA=m
--CONFIG_AGP_EFFICEON=m
--CONFIG_DRM=m
--CONFIG_DRM_TDFX=m
--CONFIG_DRM_R128=m
--CONFIG_DRM_RADEON=m
--CONFIG_DRM_I810=m
--CONFIG_DRM_I830=m
--CONFIG_DRM_I915=m
--CONFIG_DRM_MGA=m
--CONFIG_DRM_SIS=m
--CONFIG_DRM_VIA=m
--CONFIG_DRM_VIA_CHROME9=m
--CONFIG_DRM_SAVAGE=m
--CONFIG_VGASTATE=m
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--CONFIG_FB=y
--CONFIG_FIRMWARE_EDID=y
--CONFIG_FB_DDC=m
--CONFIG_FB_CFB_FILLRECT=y
--CONFIG_FB_CFB_COPYAREA=y
--CONFIG_FB_CFB_IMAGEBLIT=y
--# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
--CONFIG_FB_SYS_FILLRECT=m
--CONFIG_FB_SYS_COPYAREA=m
--CONFIG_FB_SYS_IMAGEBLIT=m
--# CONFIG_FB_FOREIGN_ENDIAN is not set
--CONFIG_FB_SYS_FOPS=m
--CONFIG_FB_DEFERRED_IO=y
--CONFIG_FB_HECUBA=m
--CONFIG_FB_SVGALIB=m
--# CONFIG_FB_MACMODES is not set
--CONFIG_FB_BACKLIGHT=y
--CONFIG_FB_MODE_HELPERS=y
--CONFIG_FB_TILEBLITTING=y
--
--#
--# Frame buffer hardware drivers
--#
--CONFIG_FB_CIRRUS=m
--CONFIG_FB_PM2=m
--CONFIG_FB_PM2_FIFO_DISCONNECT=y
--CONFIG_FB_CYBER2000=m
--CONFIG_FB_ARC=m
--# CONFIG_FB_ASILIANT is not set
--CONFIG_FB_IMSTT=y
--CONFIG_FB_VGA16=m
--CONFIG_FB_UVESA=m
--CONFIG_FB_VESA=y
--CONFIG_FB_EFI=y
--CONFIG_FB_N411=m
--CONFIG_FB_HGA=m
--CONFIG_FB_HGA_ACCEL=y
--CONFIG_FB_S1D13XXX=m
--CONFIG_FB_NVIDIA=m
--CONFIG_FB_NVIDIA_I2C=y
--# CONFIG_FB_NVIDIA_DEBUG is not set
--CONFIG_FB_NVIDIA_BACKLIGHT=y
--CONFIG_FB_RIVA=m
--CONFIG_FB_RIVA_I2C=y
--# CONFIG_FB_RIVA_DEBUG is not set
--CONFIG_FB_RIVA_BACKLIGHT=y
--CONFIG_FB_I810=m
--CONFIG_FB_I810_GTF=y
--CONFIG_FB_I810_I2C=y
--CONFIG_FB_LE80578=m
--CONFIG_FB_CARILLO_RANCH=m
--CONFIG_FB_INTEL=m
--# CONFIG_FB_INTEL_DEBUG is not set
--CONFIG_FB_INTEL_I2C=y
--CONFIG_FB_MATROX=m
--CONFIG_FB_MATROX_MILLENIUM=y
--CONFIG_FB_MATROX_MYSTIQUE=y
--CONFIG_FB_MATROX_G=y
--# CONFIG_FB_MATROX_I2C is not set
--CONFIG_FB_MATROX_MULTIHEAD=y
--CONFIG_FB_RADEON=m
--CONFIG_FB_RADEON_I2C=y
--CONFIG_FB_RADEON_BACKLIGHT=y
--# CONFIG_FB_RADEON_DEBUG is not set
--# CONFIG_FB_ATY128 is not set
--CONFIG_FB_ATY=m
--CONFIG_FB_ATY_CT=y
--CONFIG_FB_ATY_GENERIC_LCD=y
--CONFIG_FB_ATY_GX=y
--CONFIG_FB_ATY_BACKLIGHT=y
--CONFIG_FB_S3=m
--CONFIG_FB_SAVAGE=m
--CONFIG_FB_SAVAGE_I2C=y
--CONFIG_FB_SAVAGE_ACCEL=y
--CONFIG_FB_SIS=m
--CONFIG_FB_SIS_300=y
--CONFIG_FB_SIS_315=y
--CONFIG_FB_NEOMAGIC=m
--CONFIG_FB_KYRO=m
--CONFIG_FB_3DFX=m
--CONFIG_FB_3DFX_ACCEL=y
--CONFIG_FB_VOODOO1=m
--CONFIG_FB_VT8623=m
--CONFIG_FB_CYBLA=m
--CONFIG_FB_TRIDENT=m
--CONFIG_FB_TRIDENT_ACCEL=y
--CONFIG_FB_ARK=m
--CONFIG_FB_PM3=m
--CONFIG_FB_CARMINE=m
--CONFIG_FB_CARMINE_DRAM_EVAL=y
--# CONFIG_CARMINE_DRAM_CUSTOM is not set
--CONFIG_FB_GEODE=y
--CONFIG_FB_GEODE_LX=m
--CONFIG_FB_GEODE_GX=m
--CONFIG_FB_GEODE_GX1=m
--CONFIG_FB_SM501=m
--# CONFIG_FB_VIRTUAL is not set
--CONFIG_BACKLIGHT_LCD_SUPPORT=y
--CONFIG_LCD_CLASS_DEVICE=m
--CONFIG_LCD_LTV350QV=m
--CONFIG_LCD_ILI9320=m
--CONFIG_LCD_VGG2432A4=m
--CONFIG_LCD_PLATFORM=m
--CONFIG_BACKLIGHT_CLASS_DEVICE=y
--CONFIG_BACKLIGHT_CORGI=m
--CONFIG_BACKLIGHT_PROGEAR=m
--CONFIG_BACKLIGHT_CARILLO_RANCH=m
--CONFIG_BACKLIGHT_MBP_NVIDIA=m
--
--#
--# Display device support
--#
--CONFIG_DISPLAY_SUPPORT=m
--
--#
--# Display hardware drivers
--#
--
--#
--# Console display driver support
--#
--CONFIG_VGA_CONSOLE=y
--CONFIG_VGACON_SOFT_SCROLLBACK=y
--CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
--CONFIG_VIDEO_SELECT=y
--CONFIG_MDA_CONSOLE=m
--CONFIG_DUMMY_CONSOLE=y
--CONFIG_FRAMEBUFFER_CONSOLE=y
--# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
--CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
--# CONFIG_FONTS is not set
--CONFIG_FONT_8x8=y
--CONFIG_FONT_8x16=y
--# CONFIG_LOGO is not set
--
--#
--# Bootsplash configuration
--#
--CONFIG_BOOTSPLASH=y
--CONFIG_SOUND=m
--CONFIG_SND=m
--CONFIG_SND_TIMER=m
--CONFIG_SND_PCM=m
--CONFIG_SND_HWDEP=m
--CONFIG_SND_RAWMIDI=m
--CONFIG_SND_SEQUENCER=m
--CONFIG_SND_SEQ_DUMMY=m
--CONFIG_SND_OSSEMUL=y
--CONFIG_SND_MIXER_OSS=m
--CONFIG_SND_PCM_OSS=m
--CONFIG_SND_PCM_OSS_PLUGINS=y
--CONFIG_SND_SEQUENCER_OSS=y
--CONFIG_SND_DYNAMIC_MINORS=y
--CONFIG_SND_SUPPORT_OLD_API=y
--CONFIG_SND_VERBOSE_PROCFS=y
--CONFIG_SND_VERBOSE_PRINTK=y
--CONFIG_SND_DEBUG=y
--# CONFIG_SND_DEBUG_VERBOSE is not set
--# CONFIG_SND_PCM_XRUN_DEBUG is not set
--CONFIG_SND_VMASTER=y
--CONFIG_SND_MPU401_UART=m
--CONFIG_SND_OPL3_LIB=m
--CONFIG_SND_OPL4_LIB=m
--CONFIG_SND_VX_LIB=m
--CONFIG_SND_AC97_CODEC=m
--CONFIG_SND_DRIVERS=y
--CONFIG_SND_DUMMY=m
--CONFIG_SND_VIRMIDI=m
--CONFIG_SND_MTPAV=m
--CONFIG_SND_MTS64=m
--CONFIG_SND_SERIAL_U16550=m
--CONFIG_SND_MPU401=m
--CONFIG_SND_PORTMAN2X4=m
--CONFIG_SND_AC97_POWER_SAVE=y
--CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
--CONFIG_SND_AD1848_LIB=m
--CONFIG_SND_CS4231_LIB=m
--CONFIG_SND_SB_COMMON=m
--CONFIG_SND_SB8_DSP=m
--CONFIG_SND_SB16_DSP=m
--CONFIG_SND_ISA=y
--CONFIG_SND_ADLIB=m
--CONFIG_SND_AD1816A=m
--CONFIG_SND_AD1848=m
--CONFIG_SND_ALS100=m
--CONFIG_SND_AZT2320=m
--CONFIG_SND_CMI8330=m
--CONFIG_SND_CS4231=m
--CONFIG_SND_CS4232=m
--CONFIG_SND_CS4236=m
--CONFIG_SND_DT019X=m
--CONFIG_SND_ES968=m
--CONFIG_SND_ES1688=m
--CONFIG_SND_ES18XX=m
--CONFIG_SND_SC6000=m
--CONFIG_SND_GUSCLASSIC=m
--CONFIG_SND_GUSEXTREME=m
--CONFIG_SND_GUSMAX=m
--CONFIG_SND_INTERWAVE=m
--CONFIG_SND_INTERWAVE_STB=m
--CONFIG_SND_OPL3SA2=m
--CONFIG_SND_OPTI92X_AD1848=m
--CONFIG_SND_OPTI92X_CS4231=m
--CONFIG_SND_OPTI93X=m
--CONFIG_SND_MIRO=m
--CONFIG_SND_SB8=m
--CONFIG_SND_SB16=m
--CONFIG_SND_SBAWE=m
--CONFIG_SND_SB16_CSP=y
--CONFIG_SND_SGALAXY=m
--CONFIG_SND_SSCAPE=m
--CONFIG_SND_WAVEFRONT=m
--# CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL is not set
--CONFIG_SND_PCI=y
--CONFIG_SND_AD1889=m
--CONFIG_SND_ALS300=m
--CONFIG_SND_ALS4000=m
--CONFIG_SND_ALI5451=m
--CONFIG_SND_ATIIXP=m
--CONFIG_SND_ATIIXP_MODEM=m
--CONFIG_SND_AU8810=m
--CONFIG_SND_AU8820=m
--CONFIG_SND_AU8830=m
--CONFIG_SND_AW2=m
--CONFIG_SND_AZT3328=m
--CONFIG_SND_BT87X=m
--# CONFIG_SND_BT87X_OVERCLOCK is not set
--CONFIG_SND_CA0106=m
--CONFIG_SND_CMIPCI=m
--CONFIG_SND_OXYGEN_LIB=m
--CONFIG_SND_OXYGEN=m
--CONFIG_SND_CS4281=m
--CONFIG_SND_CS46XX=m
--CONFIG_SND_CS46XX_NEW_DSP=y
--CONFIG_SND_CS5530=m
--CONFIG_SND_CS5535AUDIO=m
--CONFIG_SND_DARLA20=m
--CONFIG_SND_GINA20=m
--CONFIG_SND_LAYLA20=m
--CONFIG_SND_DARLA24=m
--CONFIG_SND_GINA24=m
--CONFIG_SND_LAYLA24=m
--CONFIG_SND_MONA=m
--CONFIG_SND_MIA=m
--CONFIG_SND_ECHO3G=m
--CONFIG_SND_INDIGO=m
--CONFIG_SND_INDIGOIO=m
--CONFIG_SND_INDIGODJ=m
--CONFIG_SND_EMU10K1=m
--CONFIG_SND_EMU10K1X=m
--CONFIG_SND_ENS1370=m
--CONFIG_SND_ENS1371=m
--CONFIG_SND_ES1938=m
--CONFIG_SND_ES1968=m
--CONFIG_SND_FM801=m
--CONFIG_SND_FM801_TEA575X_BOOL=y
--CONFIG_SND_FM801_TEA575X=m
--CONFIG_SND_HDA_INTEL=m
--CONFIG_SND_HDA_HWDEP=y
--CONFIG_SND_HDA_INPUT_BEEP=y
--CONFIG_SND_HDA_CODEC_REALTEK=y
--CONFIG_SND_HDA_CODEC_ANALOG=y
--CONFIG_SND_HDA_CODEC_SIGMATEL=y
--CONFIG_SND_HDA_CODEC_VIA=y
--CONFIG_SND_HDA_CODEC_ATIHDMI=y
--CONFIG_SND_HDA_CODEC_NVHDMI=y
--CONFIG_SND_HDA_CODEC_CONEXANT=y
--CONFIG_SND_HDA_CODEC_CMEDIA=y
--CONFIG_SND_HDA_CODEC_SI3054=y
--CONFIG_SND_HDA_GENERIC=y
--CONFIG_SND_HDA_POWER_SAVE=y
--CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
--CONFIG_SND_HDSP=m
--CONFIG_SND_HDSPM=m
--CONFIG_SND_HIFIER=m
--CONFIG_SND_ICE1712=m
--CONFIG_SND_ICE1724=m
--CONFIG_SND_INTEL8X0=m
--CONFIG_SND_INTEL8X0M=m
--CONFIG_SND_KORG1212=m
--CONFIG_SND_MAESTRO3=m
--CONFIG_SND_MIXART=m
--CONFIG_SND_NM256=m
--CONFIG_SND_PCXHR=m
--CONFIG_SND_RIPTIDE=m
--CONFIG_SND_RME32=m
--CONFIG_SND_RME96=m
--CONFIG_SND_RME9652=m
--CONFIG_SND_SIS7019=m
--CONFIG_SND_SONICVIBES=m
--CONFIG_SND_TRIDENT=m
--CONFIG_SND_VIA82XX=m
--CONFIG_SND_VIA82XX_MODEM=m
--CONFIG_SND_VIRTUOSO=m
--CONFIG_SND_VX222=m
--CONFIG_SND_YMFPCI=m
--CONFIG_SND_SPI=y
--CONFIG_SND_USB=y
--CONFIG_SND_USB_AUDIO=m
--CONFIG_SND_USB_USX2Y=m
--CONFIG_SND_USB_CAIAQ=m
--CONFIG_SND_USB_CAIAQ_INPUT=y
--CONFIG_SND_PCMCIA=y
--CONFIG_SND_VXPOCKET=m
--CONFIG_SND_PDAUDIOCF=m
--# CONFIG_SND_SOC is not set
--CONFIG_SOUND_PRIME=m
--# CONFIG_SOUND_MSNDCLAS is not set
--# CONFIG_SOUND_MSNDPIN is not set
--CONFIG_SOUND_OSS=m
--CONFIG_SOUND_TRACEINIT=y
--CONFIG_SOUND_DMAP=y
--CONFIG_SOUND_SSCAPE=m
--CONFIG_SOUND_VMIDI=m
--CONFIG_SOUND_TRIX=m
--CONFIG_SOUND_MSS=m
--CONFIG_SOUND_MPU401=m
--CONFIG_SOUND_PAS=m
--CONFIG_SOUND_PSS=m
--CONFIG_PSS_MIXER=y
--# CONFIG_PSS_HAVE_BOOT is not set
--CONFIG_SOUND_SB=m
--CONFIG_SOUND_YM3812=m
--CONFIG_SOUND_UART6850=m
--CONFIG_SOUND_AEDSP16=m
--CONFIG_SC6600=y
--CONFIG_SC6600_JOY=y
--CONFIG_SC6600_CDROM=4
--CONFIG_SC6600_CDROMBASE=0x0
--# CONFIG_AEDSP16_MSS is not set
--# CONFIG_AEDSP16_SBPRO is not set
--CONFIG_SOUND_KAHLUA=m
--CONFIG_AC97_BUS=m
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=m
--# CONFIG_HID_DEBUG is not set
--CONFIG_HIDRAW=y
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=m
--CONFIG_USB_HIDINPUT_POWERBOOK=y
--CONFIG_HID_FF=y
--CONFIG_HID_PID=y
--CONFIG_LOGITECH_FF=y
--# CONFIG_LOGIRUMBLEPAD2_FF is not set
--CONFIG_PANTHERLORD_FF=y
--CONFIG_THRUSTMASTER_FF=y
--CONFIG_ZEROPLUS_FF=y
--CONFIG_USB_HIDDEV=y
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=m
--# CONFIG_USB_DEBUG is not set
--CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--# CONFIG_USB_DEVICE_CLASS is not set
--# CONFIG_USB_DYNAMIC_MINORS is not set
--CONFIG_USB_SUSPEND=y
--# CONFIG_USB_OTG is not set
--CONFIG_USB_MON=y
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_C67X00_HCD=m
--CONFIG_USB_EHCI_HCD=m
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--CONFIG_USB_EHCI_TT_NEWSCHED=y
--CONFIG_USB_ISP116X_HCD=m
--CONFIG_USB_ISP1760_HCD=m
--CONFIG_USB_OHCI_HCD=m
--# CONFIG_USB_OHCI_HCD_SSB is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=m
--# CONFIG_USB_U132_HCD is not set
--CONFIG_USB_SL811_HCD=m
--CONFIG_USB_SL811_CS=m
--CONFIG_USB_R8A66597_HCD=m
--
--#
--# Enable Host or Gadget support to see Inventra options
--#
--
--#
--# USB Device Class drivers
--#
--CONFIG_USB_ACM=m
--CONFIG_USB_PRINTER=m
--CONFIG_USB_WDM=m
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=m
--# CONFIG_USB_STORAGE_DEBUG is not set
--CONFIG_USB_STORAGE_DATAFAB=y
--CONFIG_USB_STORAGE_FREECOM=y
--CONFIG_USB_STORAGE_ISD200=y
--CONFIG_USB_STORAGE_DPCM=y
--CONFIG_USB_STORAGE_USBAT=y
--CONFIG_USB_STORAGE_SDDR09=y
--CONFIG_USB_STORAGE_SDDR55=y
--CONFIG_USB_STORAGE_JUMPSHOT=y
--CONFIG_USB_STORAGE_ALAUDA=y
--CONFIG_USB_STORAGE_ONETOUCH=y
--CONFIG_USB_STORAGE_KARMA=y
--CONFIG_USB_STORAGE_CYPRESS_ATACB=y
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--CONFIG_USB_MDC800=m
--CONFIG_USB_MICROTEK=m
--
--#
--# USB port drivers
--#
--CONFIG_USB_USS720=m
--CONFIG_USB_SERIAL=m
--CONFIG_USB_EZUSB=y
--CONFIG_USB_SERIAL_GENERIC=y
--CONFIG_USB_SERIAL_AIRCABLE=m
--CONFIG_USB_SERIAL_ARK3116=m
--CONFIG_USB_SERIAL_BELKIN=m
--CONFIG_USB_SERIAL_CH341=m
--CONFIG_USB_SERIAL_WHITEHEAT=m
--CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
--CONFIG_USB_SERIAL_CP2101=m
--CONFIG_USB_SERIAL_CYPRESS_M8=m
--CONFIG_USB_SERIAL_EMPEG=m
--CONFIG_USB_SERIAL_FTDI_SIO=m
--CONFIG_USB_SERIAL_FUNSOFT=m
--CONFIG_USB_SERIAL_VISOR=m
--CONFIG_USB_SERIAL_IPAQ=m
--CONFIG_USB_SERIAL_IR=m
--CONFIG_USB_SERIAL_EDGEPORT=m
--CONFIG_USB_SERIAL_EDGEPORT_TI=m
--CONFIG_USB_SERIAL_GARMIN=m
--CONFIG_USB_SERIAL_IPW=m
--CONFIG_USB_SERIAL_IUU=m
--CONFIG_USB_SERIAL_KEYSPAN_PDA=m
--CONFIG_USB_SERIAL_KEYSPAN=m
--CONFIG_USB_SERIAL_KEYSPAN_MPR=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19=y
--CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
--CONFIG_USB_SERIAL_KLSI=m
--CONFIG_USB_SERIAL_KOBIL_SCT=m
--CONFIG_USB_SERIAL_MCT_U232=m
--CONFIG_USB_SERIAL_MOS7720=m
--CONFIG_USB_SERIAL_MOS7840=m
--CONFIG_USB_SERIAL_MOTOROLA=m
--CONFIG_USB_SERIAL_NAVMAN=m
--CONFIG_USB_SERIAL_PL2303=m
--CONFIG_USB_SERIAL_OTI6858=m
--CONFIG_USB_SERIAL_QUALCOMM=m
--CONFIG_USB_SERIAL_SPCP8X5=m
--CONFIG_USB_SERIAL_HP4X=m
--CONFIG_USB_SERIAL_SAFE=m
--CONFIG_USB_SERIAL_SAFE_PADDED=y
--CONFIG_USB_SERIAL_SIERRAWIRELESS=m
--CONFIG_USB_SERIAL_TI=m
--CONFIG_USB_SERIAL_CYBERJACK=m
--CONFIG_USB_SERIAL_XIRCOM=m
--CONFIG_USB_SERIAL_OPTION=m
--CONFIG_USB_SERIAL_OMNINET=m
--CONFIG_USB_SERIAL_DEBUG=m
--
--#
--# USB Miscellaneous drivers
--#
--CONFIG_USB_EMI62=m
--CONFIG_USB_EMI26=m
--CONFIG_USB_ADUTUX=m
--CONFIG_USB_RIO500=m
--CONFIG_USB_LEGOTOWER=m
--CONFIG_USB_LCD=m
--CONFIG_USB_BERRY_CHARGE=m
--CONFIG_USB_LED=m
--CONFIG_USB_CYPRESS_CY7C63=m
--CONFIG_USB_CYTHERM=m
--CONFIG_USB_PHIDGET=m
--CONFIG_USB_PHIDGETKIT=m
--CONFIG_USB_PHIDGETMOTORCONTROL=m
--CONFIG_USB_PHIDGETSERVO=m
--CONFIG_USB_IDMOUSE=m
--CONFIG_USB_FTDI_ELAN=m
--CONFIG_USB_APPLEDISPLAY=m
--CONFIG_USB_SISUSBVGA=m
--CONFIG_USB_SISUSBVGA_CON=y
--CONFIG_USB_LD=m
--CONFIG_USB_TRANCEVIBRATOR=m
--CONFIG_USB_IOWARRIOR=m
--# CONFIG_USB_TEST is not set
--CONFIG_USB_ISIGHTFW=m
--CONFIG_USB_ATM=m
--CONFIG_USB_SPEEDTOUCH=m
--CONFIG_USB_CXACRU=m
--CONFIG_USB_UEAGLEATM=m
--CONFIG_USB_XUSBATM=m
--# CONFIG_USB_GADGET is not set
--CONFIG_MMC=m
--# CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
--
--#
--# MMC/SD Card Drivers
--#
--CONFIG_MMC_BLOCK=m
--CONFIG_MMC_BLOCK_BOUNCE=y
--CONFIG_SDIO_UART=m
--CONFIG_MMC_TEST=m
--
--#
--# MMC/SD Host Controller Drivers
--#
--CONFIG_MMC_SDHCI=m
--CONFIG_MMC_SDHCI_PCI=m
--CONFIG_MMC_RICOH_MMC=m
--CONFIG_MMC_WBSD=m
--CONFIG_MMC_TIFM_SD=m
--CONFIG_MMC_SDRICOH_CS=m
--CONFIG_MEMSTICK=m
--# CONFIG_MEMSTICK_DEBUG is not set
--
--#
--# MemoryStick drivers
--#
--# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
--CONFIG_MSPRO_BLOCK=m
--
--#
--# MemoryStick Host Controller Drivers
--#
--CONFIG_MEMSTICK_TIFM_MS=m
--CONFIG_MEMSTICK_JMICRON_38X=m
--CONFIG_NEW_LEDS=y
--CONFIG_LEDS_CLASS=m
--
--#
--# LED drivers
--#
--CONFIG_LEDS_NET48XX=m
--CONFIG_LEDS_WRAP=m
--CONFIG_LEDS_PCA9532=m
--CONFIG_LEDS_GPIO=m
--CONFIG_LEDS_CLEVO_MAIL=m
--CONFIG_LEDS_PCA955X=m
--
--#
--# LED Triggers
--#
--CONFIG_LEDS_TRIGGERS=y
--CONFIG_LEDS_TRIGGER_TIMER=m
--CONFIG_LEDS_TRIGGER_IDE_DISK=y
--CONFIG_LEDS_TRIGGER_HEARTBEAT=m
--CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
--# CONFIG_ACCESSIBILITY is not set
--CONFIG_INFINIBAND=m
--CONFIG_INFINIBAND_USER_MAD=m
--CONFIG_INFINIBAND_USER_ACCESS=m
--CONFIG_INFINIBAND_USER_MEM=y
--CONFIG_INFINIBAND_ADDR_TRANS=y
--CONFIG_INFINIBAND_MTHCA=m
--CONFIG_INFINIBAND_MTHCA_DEBUG=y
--CONFIG_INFINIBAND_AMSO1100=m
--# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
--CONFIG_INFINIBAND_CXGB3=m
--# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
--CONFIG_MLX4_INFINIBAND=m
--CONFIG_INFINIBAND_NES=m
--# CONFIG_INFINIBAND_NES_DEBUG is not set
--CONFIG_INFINIBAND_IPOIB=m
--CONFIG_INFINIBAND_IPOIB_CM=y
--CONFIG_INFINIBAND_IPOIB_DEBUG=y
--# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
--CONFIG_INFINIBAND_SRP=m
--CONFIG_INFINIBAND_ISER=m
--CONFIG_EDAC=y
--
--#
--# Reporting subsystems
--#
--# CONFIG_EDAC_DEBUG is not set
--CONFIG_EDAC_MM_EDAC=m
--CONFIG_EDAC_AMD76X=m
--CONFIG_EDAC_E7XXX=m
--CONFIG_EDAC_E752X=m
--CONFIG_EDAC_I82875P=m
--CONFIG_EDAC_I82975X=m
--CONFIG_EDAC_I3000=m
--CONFIG_EDAC_I82860=m
--CONFIG_EDAC_R82600=m
--CONFIG_EDAC_I5000=m
--CONFIG_EDAC_I5100=m
--CONFIG_RTC_LIB=m
--CONFIG_RTC_CLASS=m
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--CONFIG_RTC_DRV_TEST=m
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=m
--CONFIG_RTC_DRV_DS1374=m
--CONFIG_RTC_DRV_DS1672=m
--CONFIG_RTC_DRV_MAX6900=m
--CONFIG_RTC_DRV_RS5C372=m
--CONFIG_RTC_DRV_ISL1208=m
--CONFIG_RTC_DRV_X1205=m
--CONFIG_RTC_DRV_PCF8563=m
--CONFIG_RTC_DRV_PCF8583=m
--CONFIG_RTC_DRV_M41T80=m
--CONFIG_RTC_DRV_M41T80_WDT=y
--CONFIG_RTC_DRV_S35390A=m
--CONFIG_RTC_DRV_FM3130=m
--
--#
--# SPI RTC drivers
--#
--CONFIG_RTC_DRV_M41T94=m
--CONFIG_RTC_DRV_DS1305=m
--CONFIG_RTC_DRV_MAX6902=m
--CONFIG_RTC_DRV_R9701=m
--CONFIG_RTC_DRV_RS5C348=m
--
--#
--# Platform RTC drivers
--#
--CONFIG_RTC_DRV_CMOS=m
--CONFIG_RTC_DRV_DS1511=m
--CONFIG_RTC_DRV_DS1553=m
--CONFIG_RTC_DRV_DS1742=m
--CONFIG_RTC_DRV_STK17TA8=m
--CONFIG_RTC_DRV_M48T86=m
--CONFIG_RTC_DRV_M48T59=m
--CONFIG_RTC_DRV_V3020=m
--
--#
--# on-CPU RTC drivers
--#
--CONFIG_DMADEVICES=y
--
--#
--# DMA Devices
--#
--CONFIG_INTEL_IOATDMA=m
--CONFIG_DMA_ENGINE=y
--
--#
--# DMA Clients
--#
--CONFIG_NET_DMA=y
--CONFIG_DMATEST=m
--CONFIG_DCA=m
--CONFIG_AUXDISPLAY=y
--CONFIG_KS0108=m
--CONFIG_KS0108_PORT=0x378
--CONFIG_KS0108_DELAY=2
--CONFIG_CFAG12864B=m
--CONFIG_CFAG12864B_RATE=20
--CONFIG_UIO=m
--CONFIG_UIO_CIF=m
--CONFIG_UIO_PDRV=m
--CONFIG_UIO_PDRV_GENIRQ=m
--CONFIG_UIO_SMX=m
--CONFIG_STAGING=y
--CONFIG_ET131X=m
--# CONFIG_ET131X_DEBUG is not set
--CONFIG_SLICOSS=m
--CONFIG_SXG=m
--CONFIG_ME4000=m
--CONFIG_VIDEO_GO7007=m
--CONFIG_VIDEO_GO7007_USB=m
--CONFIG_USB_IP_COMMON=m
--CONFIG_USB_IP_VHCI_HCD=m
--CONFIG_USB_IP_HOST=m
--CONFIG_W35UND=m
--CONFIG_PRISM2_USB=m
--CONFIG_ECHO=m
--CONFIG_USB_ATMEL=m
--CONFIG_AGNX=m
--CONFIG_OTUS=m
--CONFIG_RT2860=m
--CONFIG_RT2870=m
--CONFIG_RT3070=m
--CONFIG_BENET=m
--CONFIG_RTL8187SE=m
--CONFIG_DRM_PSB=m
--
--#
--# Firmware Drivers
--#
--CONFIG_EDD=m
--# CONFIG_EDD_OFF is not set
--CONFIG_FIRMWARE_MEMMAP=y
--CONFIG_DELL_RBU=m
--CONFIG_DCDBAS=m
--CONFIG_DMIID=y
--CONFIG_ISCSI_IBFT_FIND=y
--CONFIG_ISCSI_IBFT=m
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=m
--CONFIG_EXT2_FS_XATTR=y
--CONFIG_EXT2_FS_POSIX_ACL=y
--CONFIG_EXT2_FS_SECURITY=y
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=m
--CONFIG_EXT3_FS_XATTR=y
--CONFIG_EXT3_FS_POSIX_ACL=y
--CONFIG_EXT3_FS_NFS4ACL=y
--CONFIG_EXT3_FS_SECURITY=y
--CONFIG_EXT4DEV_FS=m
--CONFIG_EXT4DEV_FS_XATTR=y
--CONFIG_EXT4DEV_FS_POSIX_ACL=y
--CONFIG_EXT4DEV_FS_SECURITY=y
--CONFIG_JBD=m
--CONFIG_JBD_DEBUG=y
--CONFIG_JBD2=m
--CONFIG_JBD2_DEBUG=y
--CONFIG_FS_MBCACHE=m
--CONFIG_REISERFS_FS=m
--# CONFIG_REISERFS_CHECK is not set
--# CONFIG_REISERFS_PROC_INFO is not set
--CONFIG_REISERFS_FS_XATTR=y
--CONFIG_REISERFS_FS_POSIX_ACL=y
--CONFIG_REISERFS_FS_SECURITY=y
--CONFIG_JFS_FS=m
--CONFIG_JFS_POSIX_ACL=y
--CONFIG_JFS_SECURITY=y
--# CONFIG_JFS_DEBUG is not set
--CONFIG_JFS_STATISTICS=y
--CONFIG_FS_POSIX_ACL=y
--CONFIG_FS_NFS4ACL=y
--CONFIG_XFS_FS=m
--CONFIG_XFS_QUOTA=y
--CONFIG_XFS_DMAPI=m
--CONFIG_XFS_POSIX_ACL=y
--CONFIG_XFS_RT=y
--# CONFIG_XFS_DEBUG is not set
--CONFIG_GFS2_FS=m
--CONFIG_GFS2_FS_LOCKING_DLM=m
--CONFIG_OCFS2_FS=m
--CONFIG_OCFS2_FS_O2CB=m
--CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
--CONFIG_OCFS2_FS_STATS=y
--# CONFIG_OCFS2_DEBUG_MASKLOG is not set
--# CONFIG_OCFS2_DEBUG_FS is not set
--# CONFIG_OCFS2_COMPAT_JBD is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--CONFIG_DMAPI=m
--# CONFIG_DMAPI_DEBUG is not set
--CONFIG_QUOTA=y
--CONFIG_QUOTA_NETLINK_INTERFACE=y
--CONFIG_PRINT_QUOTA_WARNING=y
--CONFIG_QUOTA_TREE=m
--CONFIG_QFMT_V1=m
--CONFIG_QFMT_V2=m
--CONFIG_QUOTACTL=y
--CONFIG_AUTOFS_FS=m
--CONFIG_AUTOFS4_FS=m
--CONFIG_FUSE_FS=m
--CONFIG_GENERIC_ACL=y
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=y
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=m
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=m
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=m
--# CONFIG_NTFS_DEBUG is not set
--CONFIG_NTFS_RW=y
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_VMCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--CONFIG_TMPFS_POSIX_ACL=y
--CONFIG_HUGETLBFS=y
--CONFIG_HUGETLB_PAGE=y
--CONFIG_CONFIGFS_FS=m
--
--#
--# Miscellaneous filesystems
--#
--CONFIG_ADFS_FS=m
--# CONFIG_ADFS_FS_RW is not set
--CONFIG_AFFS_FS=m
--CONFIG_ECRYPT_FS=m
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--CONFIG_BEFS_FS=m
--# CONFIG_BEFS_DEBUG is not set
--CONFIG_BFS_FS=m
--CONFIG_EFS_FS=m
--CONFIG_JFFS2_FS=m
--CONFIG_JFFS2_FS_DEBUG=0
--CONFIG_JFFS2_FS_WRITEBUFFER=y
--# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
--CONFIG_JFFS2_SUMMARY=y
--CONFIG_JFFS2_FS_XATTR=y
--CONFIG_JFFS2_FS_POSIX_ACL=y
--CONFIG_JFFS2_FS_SECURITY=y
--CONFIG_JFFS2_COMPRESSION_OPTIONS=y
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--# CONFIG_JFFS2_CMODE_NONE is not set
--CONFIG_JFFS2_CMODE_PRIORITY=y
--# CONFIG_JFFS2_CMODE_SIZE is not set
--# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
--CONFIG_UBIFS_FS=m
--CONFIG_UBIFS_FS_XATTR=y
--CONFIG_UBIFS_FS_ADVANCED_COMPR=y
--CONFIG_UBIFS_FS_LZO=y
--CONFIG_UBIFS_FS_ZLIB=y
--# CONFIG_UBIFS_FS_DEBUG is not set
--CONFIG_CRAMFS=m
--CONFIG_SQUASHFS=m
--# CONFIG_SQUASHFS_EMBEDDED is not set
--CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
--CONFIG_VXFS_FS=m
--CONFIG_MINIX_FS=y
--CONFIG_OMFS_FS=m
--CONFIG_HPFS_FS=m
--CONFIG_QNX4FS_FS=m
--CONFIG_ROMFS_FS=m
--CONFIG_SYSV_FS=m
--CONFIG_UFS_FS=m
--CONFIG_UFS_FS_WRITE=y
--# CONFIG_UFS_DEBUG is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=m
--CONFIG_NFS_V3=y
--CONFIG_NFS_V3_ACL=y
--CONFIG_NFS_V4=y
--CONFIG_NFS_SWAP=y
--CONFIG_NFSD=m
--CONFIG_NFSD_V2_ACL=y
--CONFIG_NFSD_V3=y
--CONFIG_NFSD_V3_ACL=y
--CONFIG_NFSD_V4=y
--CONFIG_LOCKD=m
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=m
--CONFIG_NFS_ACL_SUPPORT=m
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=m
--CONFIG_SUNRPC_GSS=m
--CONFIG_SUNRPC_XPRT_RDMA=m
--CONFIG_SUNRPC_SWAP=y
--CONFIG_RPCSEC_GSS_KRB5=m
--CONFIG_RPCSEC_GSS_SPKM3=m
--# CONFIG_SMB_FS is not set
--CONFIG_CIFS=m
--CONFIG_CIFS_STATS=y
--CONFIG_CIFS_STATS2=y
--CONFIG_CIFS_WEAK_PW_HASH=y
--CONFIG_CIFS_UPCALL=y
--CONFIG_CIFS_XATTR=y
--CONFIG_CIFS_POSIX=y
--# CONFIG_CIFS_DEBUG2 is not set
--CONFIG_CIFS_EXPERIMENTAL=y
--CONFIG_CIFS_DFS_UPCALL=y
--CONFIG_NCP_FS=m
--CONFIG_NCPFS_PACKET_SIGNING=y
--CONFIG_NCPFS_IOCTL_LOCKING=y
--CONFIG_NCPFS_STRONG=y
--CONFIG_NCPFS_NFS_NS=y
--CONFIG_NCPFS_OS2_NS=y
--CONFIG_NCPFS_SMALLDOS=y
--CONFIG_NCPFS_NLS=y
--CONFIG_NCPFS_EXTRAS=y
--CONFIG_CODA_FS=m
--CONFIG_AFS_FS=m
--# CONFIG_AFS_DEBUG is not set
--CONFIG_9P_FS=m
--CONFIG_NOVFS=m
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--CONFIG_OSF_PARTITION=y
--# CONFIG_AMIGA_PARTITION is not set
--CONFIG_ATARI_PARTITION=y
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--CONFIG_BSD_DISKLABEL=y
--# CONFIG_MINIX_SUBPARTITION is not set
--CONFIG_SOLARIS_X86_PARTITION=y
--CONFIG_UNIXWARE_DISKLABEL=y
--CONFIG_LDM_PARTITION=y
--# CONFIG_LDM_DEBUG is not set
--CONFIG_SGI_PARTITION=y
--CONFIG_ULTRIX_PARTITION=y
--CONFIG_SUN_PARTITION=y
--CONFIG_KARMA_PARTITION=y
--CONFIG_EFI_PARTITION=y
--CONFIG_SYSV68_PARTITION=y
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="utf8"
--CONFIG_NLS_CODEPAGE_437=m
--CONFIG_NLS_CODEPAGE_737=m
--CONFIG_NLS_CODEPAGE_775=m
--CONFIG_NLS_CODEPAGE_850=m
--CONFIG_NLS_CODEPAGE_852=m
--CONFIG_NLS_CODEPAGE_855=m
--CONFIG_NLS_CODEPAGE_857=m
--CONFIG_NLS_CODEPAGE_860=m
--CONFIG_NLS_CODEPAGE_861=m
--CONFIG_NLS_CODEPAGE_862=m
--CONFIG_NLS_CODEPAGE_863=m
--CONFIG_NLS_CODEPAGE_864=m
--CONFIG_NLS_CODEPAGE_865=m
--CONFIG_NLS_CODEPAGE_866=m
--CONFIG_NLS_CODEPAGE_869=m
--CONFIG_NLS_CODEPAGE_936=m
--CONFIG_NLS_CODEPAGE_950=m
--CONFIG_NLS_CODEPAGE_932=m
--CONFIG_NLS_CODEPAGE_949=m
--CONFIG_NLS_CODEPAGE_874=m
--CONFIG_NLS_ISO8859_8=m
--CONFIG_NLS_CODEPAGE_1250=m
--CONFIG_NLS_CODEPAGE_1251=m
--CONFIG_NLS_ASCII=m
--CONFIG_NLS_ISO8859_1=m
--CONFIG_NLS_ISO8859_2=m
--CONFIG_NLS_ISO8859_3=m
--CONFIG_NLS_ISO8859_4=m
--CONFIG_NLS_ISO8859_5=m
--CONFIG_NLS_ISO8859_6=m
--CONFIG_NLS_ISO8859_7=m
--CONFIG_NLS_ISO8859_9=m
--CONFIG_NLS_ISO8859_13=m
--CONFIG_NLS_ISO8859_14=m
--CONFIG_NLS_ISO8859_15=m
--CONFIG_NLS_KOI8_R=m
--CONFIG_NLS_KOI8_U=m
--CONFIG_NLS_UTF8=m
--CONFIG_DLM=m
--# CONFIG_DLM_DEBUG is not set
--
--#
--# Kernel hacking
--#
--CONFIG_TRACE_IRQFLAGS_SUPPORT=y
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--# CONFIG_ENABLE_MUST_CHECK is not set
--CONFIG_FRAME_WARN=1024
--CONFIG_MAGIC_SYSRQ=y
--CONFIG_UNUSED_SYMBOLS=y
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--# CONFIG_DETECT_SOFTLOCKUP is not set
--CONFIG_SCHED_DEBUG=y
--CONFIG_SCHEDSTATS=y
--CONFIG_TIMER_STATS=y
--# CONFIG_DEBUG_OBJECTS is not set
--# CONFIG_DEBUG_SLAB is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--# CONFIG_DEBUG_MUTEXES is not set
--# CONFIG_DEBUG_LOCK_ALLOC is not set
--# CONFIG_PROVE_LOCKING is not set
--# CONFIG_LOCK_STAT is not set
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--CONFIG_STACKTRACE=y
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_HIGHMEM is not set
--CONFIG_DEBUG_BUGVERBOSE=y
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_WRITECOUNT is not set
--CONFIG_DEBUG_MEMORY_INIT=y
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_FRAME_POINTER is not set
--CONFIG_UNWIND_INFO=y
--CONFIG_STACK_UNWIND=y
--# CONFIG_BOOT_PRINTK_DELAY is not set
--CONFIG_RCU_TORTURE_TEST=m
--# CONFIG_KPROBES_SANITY_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--CONFIG_LKDTM=m
--# CONFIG_FAULT_INJECTION is not set
--CONFIG_LATENCYTOP=y
--CONFIG_SYSCTL_SYSCALL_CHECK=y
--CONFIG_HAVE_FTRACE=y
--CONFIG_HAVE_DYNAMIC_FTRACE=y
--# CONFIG_FTRACE is not set
--# CONFIG_IRQSOFF_TRACER is not set
--# CONFIG_SYSPROF_TRACER is not set
--# CONFIG_SCHED_TRACER is not set
--# CONFIG_CONTEXT_SWITCH_TRACER is not set
--CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
--CONFIG_DYNAMIC_PRINTK_DEBUG=y
--# CONFIG_SAMPLES is not set
--CONFIG_HAVE_ARCH_KGDB=y
--# CONFIG_KGDB is not set
--# CONFIG_STRICT_DEVMEM is not set
--# CONFIG_X86_VERBOSE_BOOTUP is not set
--CONFIG_EARLY_PRINTK=y
--CONFIG_EARLY_PRINTK_DBGP=y
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUG_PER_CPU_MAPS is not set
--# CONFIG_X86_PTDUMP is not set
--CONFIG_DEBUG_RODATA=y
--# CONFIG_DEBUG_RODATA_TEST is not set
--# CONFIG_DEBUG_NX_TEST is not set
--# CONFIG_4KSTACKS is not set
--CONFIG_DOUBLEFAULT=y
--# CONFIG_MMIOTRACE is not set
--CONFIG_IO_DELAY_TYPE_0X80=0
--CONFIG_IO_DELAY_TYPE_0XED=1
--CONFIG_IO_DELAY_TYPE_UDELAY=2
--CONFIG_IO_DELAY_TYPE_NONE=3
--CONFIG_IO_DELAY_0X80=y
--# CONFIG_IO_DELAY_0XED is not set
--# CONFIG_IO_DELAY_UDELAY is not set
--# CONFIG_IO_DELAY_NONE is not set
--CONFIG_DEFAULT_IO_DELAY_TYPE=0
--# CONFIG_DEBUG_BOOT_PARAMS is not set
--# CONFIG_CPA_DEBUG is not set
--# CONFIG_OPTIMIZE_INLINING is not set
--CONFIG_KDB=y
--CONFIG_KDB_MODULES=m
--CONFIG_KDB_OFF=y
--CONFIG_KDB_CONTINUE_CATASTROPHIC=0
--CONFIG_KDB_USB=y
--CONFIG_KDB_KDUMP=y
--
--#
--# Security options
--#
--CONFIG_KEYS=y
--CONFIG_KEYS_DEBUG_PROC_KEYS=y
--CONFIG_SECURITY=y
--CONFIG_SECURITY_DEFAULT="apparmor"
--CONFIG_SECURITY_NETWORK=y
--# CONFIG_SECURITY_NETWORK_XFRM is not set
--CONFIG_SECURITY_FILE_CAPABILITIES=y
--CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
--CONFIG_SECURITY_SELINUX=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
--CONFIG_SECURITY_SELINUX_DISABLE=y
--CONFIG_SECURITY_SELINUX_DEVELOP=y
--CONFIG_SECURITY_SELINUX_AVC_STATS=y
--CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
--CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
--# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
--CONFIG_SECURITY_APPARMOR=y
--CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
--CONFIG_SECURITY_APPARMOR_DISABLE=y
--CONFIG_XOR_BLOCKS=m
--CONFIG_ASYNC_CORE=m
--CONFIG_ASYNC_MEMCPY=m
--CONFIG_ASYNC_XOR=m
--CONFIG_CRYPTO=y
--
--#
--# Crypto core or helper
--#
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_AEAD=m
--CONFIG_CRYPTO_BLKCIPHER=m
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_GF128MUL=m
--CONFIG_CRYPTO_NULL=m
--CONFIG_CRYPTO_CRYPTD=m
--CONFIG_CRYPTO_AUTHENC=m
--CONFIG_CRYPTO_TEST=m
--
--#
--# Authenticated Encryption with Associated Data
--#
--CONFIG_CRYPTO_CCM=m
--CONFIG_CRYPTO_GCM=m
--CONFIG_CRYPTO_SEQIV=m
--
--#
--# Block modes
--#
--CONFIG_CRYPTO_CBC=m
--CONFIG_CRYPTO_CTR=m
--CONFIG_CRYPTO_CTS=m
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_LRW=m
--CONFIG_CRYPTO_PCBC=m
--CONFIG_CRYPTO_XTS=m
--
--#
--# Hash modes
--#
--CONFIG_CRYPTO_HMAC=y
--CONFIG_CRYPTO_XCBC=m
--
--#
--# Digest
--#
--CONFIG_CRYPTO_CRC32C=m
--CONFIG_CRYPTO_MD4=m
--CONFIG_CRYPTO_MD5=m
--CONFIG_CRYPTO_MICHAEL_MIC=m
--CONFIG_CRYPTO_RMD128=m
--CONFIG_CRYPTO_RMD160=m
--CONFIG_CRYPTO_RMD256=m
--CONFIG_CRYPTO_RMD320=m
--CONFIG_CRYPTO_SHA1=m
--CONFIG_CRYPTO_SHA256=m
--CONFIG_CRYPTO_SHA512=m
--CONFIG_CRYPTO_TGR192=m
--CONFIG_CRYPTO_WP512=m
--
--#
--# Ciphers
--#
--CONFIG_CRYPTO_AES=m
--CONFIG_CRYPTO_AES_586=m
--CONFIG_CRYPTO_ANUBIS=m
--CONFIG_CRYPTO_ARC4=m
--CONFIG_CRYPTO_BLOWFISH=m
--CONFIG_CRYPTO_CAMELLIA=m
--CONFIG_CRYPTO_CAST5=m
--CONFIG_CRYPTO_CAST6=m
--CONFIG_CRYPTO_DES=m
--CONFIG_CRYPTO_FCRYPT=m
--CONFIG_CRYPTO_KHAZAD=m
--CONFIG_CRYPTO_SALSA20=m
--CONFIG_CRYPTO_SALSA20_586=m
--CONFIG_CRYPTO_SEED=m
--CONFIG_CRYPTO_SERPENT=m
--CONFIG_CRYPTO_TEA=m
--# CONFIG_CRYPTO_TWOFISH is not set
--CONFIG_CRYPTO_TWOFISH_COMMON=m
--CONFIG_CRYPTO_TWOFISH_586=m
--
--#
--# Compression
--#
--CONFIG_CRYPTO_DEFLATE=m
--CONFIG_CRYPTO_LZO=m
--CONFIG_CRYPTO_HW=y
--CONFIG_CRYPTO_DEV_PADLOCK=m
--CONFIG_CRYPTO_DEV_PADLOCK_AES=m
--CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
--CONFIG_CRYPTO_DEV_GEODE=m
--CONFIG_CRYPTO_DEV_HIFN_795X=m
--CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
--CONFIG_HAVE_KVM=y
--CONFIG_VIRTUALIZATION=y
--CONFIG_KVM_KMP=y
--# CONFIG_KVM is not set
--# CONFIG_LGUEST is not set
--CONFIG_VIRTIO=m
--CONFIG_VIRTIO_RING=m
--CONFIG_VIRTIO_PCI=m
--CONFIG_VIRTIO_BALLOON=m
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--CONFIG_GENERIC_FIND_FIRST_BIT=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--CONFIG_CRC_CCITT=m
--CONFIG_CRC16=m
--CONFIG_CRC_T10DIF=m
--CONFIG_CRC_ITU_T=m
--CONFIG_CRC32=y
--CONFIG_CRC7=m
--CONFIG_LIBCRC32C=m
--CONFIG_AUDIT_GENERIC=y
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=m
--CONFIG_LZO_COMPRESS=m
--CONFIG_LZO_DECOMPRESS=m
--CONFIG_GENERIC_ALLOCATOR=y
--CONFIG_REED_SOLOMON=m
--CONFIG_REED_SOLOMON_DEC16=y
--CONFIG_TEXTSEARCH=y
--CONFIG_TEXTSEARCH_KMP=m
--CONFIG_TEXTSEARCH_BM=m
--CONFIG_TEXTSEARCH_FSM=m
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--CONFIG_CHECK_SIGNATURE=y
-diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config
-deleted file mode 100644
-index 81bc07f..0000000
---- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config
-+++ /dev/null
-@@ -1,4409 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.27.21
--# Wed May 13 22:15:21 2009
--#
--# CONFIG_64BIT is not set
--CONFIG_X86_32=y
--# CONFIG_X86_64 is not set
--CONFIG_X86=y
--CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
--# CONFIG_GENERIC_LOCKBREAK is not set
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_CLOCKSOURCE_WATCHDOG=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
--CONFIG_LOCKDEP_SUPPORT=y
--CONFIG_STACKTRACE_SUPPORT=y
--CONFIG_HAVE_LATENCYTOP_SUPPORT=y
--CONFIG_FAST_CMPXCHG_LOCAL=y
--CONFIG_MMU=y
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_GENERIC_IOMAP=y
--CONFIG_GENERIC_BUG=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_GPIO=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--# CONFIG_ARCH_HAS_ILOG2_U32 is not set
--# CONFIG_ARCH_HAS_ILOG2_U64 is not set
--CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--# CONFIG_GENERIC_TIME_VSYSCALL is not set
--CONFIG_ARCH_HAS_CPU_RELAX=y
--CONFIG_ARCH_HAS_DEFAULT_IDLE=y
--CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
--CONFIG_HAVE_SETUP_PER_CPU_AREA=y
--# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
--CONFIG_ARCH_HIBERNATION_POSSIBLE=y
--CONFIG_ARCH_SUSPEND_POSSIBLE=y
--# CONFIG_ZONE_DMA32 is not set
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--# CONFIG_AUDIT_ARCH is not set
--CONFIG_ARCH_SUPPORTS_AOUT=y
--CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
--CONFIG_GENERIC_HARDIRQS=y
--CONFIG_GENERIC_IRQ_PROBE=y
--CONFIG_GENERIC_PENDING_IRQ=y
--CONFIG_X86_SMP=y
--CONFIG_X86_32_SMP=y
--CONFIG_X86_HT=y
--CONFIG_X86_BIOS_REBOOT=y
--CONFIG_X86_TRAMPOLINE=y
--CONFIG_KTIME_SCALAR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_LOCK_KERNEL=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION="-0.1-default"
--# CONFIG_LOCALVERSION_AUTO is not set
--CONFIG_SUSE_KERNEL=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--CONFIG_BSD_PROCESS_ACCT_V3=y
--CONFIG_TASKSTATS=y
--CONFIG_TASK_DELAY_ACCT=y
--CONFIG_TASK_XACCT=y
--CONFIG_TASK_IO_ACCOUNTING=y
--CONFIG_AUDIT=y
--CONFIG_AUDITSYSCALL=y
--CONFIG_AUDIT_TREE=y
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_LOG_BUF_SHIFT=17
--CONFIG_CGROUPS=y
--# CONFIG_CGROUP_DEBUG is not set
--CONFIG_CGROUP_NS=y
--CONFIG_CGROUP_FREEZER=y
--CONFIG_CGROUP_DEVICE=y
--CONFIG_CPUSETS=y
--CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--CONFIG_CGROUP_SCHED=y
--CONFIG_CGROUP_CPUACCT=y
--CONFIG_RESOURCE_COUNTERS=y
--CONFIG_MM_OWNER=y
--CONFIG_CGROUP_MEM_RES_CTLR=y
--# CONFIG_SYSFS_DEPRECATED_V2 is not set
--CONFIG_PROC_PID_CPUSET=y
--CONFIG_RELAY=y
--CONFIG_NAMESPACES=y
--CONFIG_UTS_NS=y
--CONFIG_IPC_NS=y
--CONFIG_USER_NS=y
--CONFIG_PID_NS=y
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--CONFIG_CC_OPTIMIZE_FOR_SIZE=y
--CONFIG_SYSCTL=y
--# CONFIG_EMBEDDED is not set
--CONFIG_UID16=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_PCSPKR_PLATFORM=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--CONFIG_PROFILING=y
--# CONFIG_TRACEPOINTS is not set
--CONFIG_MARKERS=y
--CONFIG_OPROFILE=m
--CONFIG_HAVE_OPROFILE=y
--CONFIG_KPROBES=y
--CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
--CONFIG_KRETPROBES=y
--CONFIG_HAVE_IOREMAP_PROT=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_HAVE_ARCH_TRACEHOOK=y
--# CONFIG_HAVE_DMA_ATTRS is not set
--CONFIG_USE_GENERIC_SMP_HELPERS=y
--# CONFIG_HAVE_CLK is not set
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_HAVE_GENERIC_DMA_COHERENT=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_FORCE_LOAD=y
--CONFIG_MODULE_UNLOAD=y
--CONFIG_MODULE_FORCE_UNLOAD=y
--CONFIG_MODVERSIONS=y
--CONFIG_MODULE_SRCVERSION_ALL=y
--CONFIG_KMOD=y
--CONFIG_STOP_MACHINE=y
--# CONFIG_UTRACE is not set
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--CONFIG_BLK_DEV_IO_TRACE=y
--CONFIG_LSF=y
--CONFIG_BLK_DEV_BSG=y
--CONFIG_BLK_DEV_INTEGRITY=y
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--CONFIG_DEFAULT_DEADLINE=y
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="deadline"
--CONFIG_PREEMPT_NOTIFIERS=y
--CONFIG_CLASSIC_RCU=y
--CONFIG_FREEZER=y
--
--#
--# Processor type and features
--#
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--CONFIG_SMP=y
--CONFIG_X86_FIND_SMP_CONFIG=y
--CONFIG_X86_MPPARSE=y
--# CONFIG_X86_PC is not set
--# CONFIG_X86_XEN is not set
--# CONFIG_X86_ELAN is not set
--# CONFIG_X86_VOYAGER is not set
--CONFIG_X86_GENERICARCH=y
--# CONFIG_X86_NUMAQ is not set
--CONFIG_X86_SUMMIT=y
--CONFIG_X86_ES7000=y
--CONFIG_X86_BIGSMP=y
--# CONFIG_X86_64_XEN is not set
--# CONFIG_X86_VSMP is not set
--# CONFIG_X86_RDC321X is not set
--# CONFIG_PARAVIRT_GUEST is not set
--CONFIG_MEMTEST=y
--CONFIG_X86_CYCLONE_TIMER=y
--# CONFIG_M386 is not set
--# CONFIG_M486 is not set
--CONFIG_M586=y
--# CONFIG_M586TSC is not set
--# CONFIG_M586MMX is not set
--# CONFIG_M686 is not set
--# CONFIG_MPENTIUMII is not set
--# CONFIG_MPENTIUMIII is not set
--# CONFIG_MPENTIUMM is not set
--# CONFIG_MPENTIUM4 is not set
--# CONFIG_MK6 is not set
--# CONFIG_MK7 is not set
--# CONFIG_MK8 is not set
--# CONFIG_MCRUSOE is not set
--# CONFIG_MEFFICEON is not set
--# CONFIG_MWINCHIPC6 is not set
--# CONFIG_MWINCHIP2 is not set
--# CONFIG_MWINCHIP3D is not set
--# CONFIG_MGEODEGX1 is not set
--# CONFIG_MGEODE_LX is not set
--# CONFIG_MCYRIXIII is not set
--# CONFIG_MVIAC3_2 is not set
--# CONFIG_MVIAC7 is not set
--# CONFIG_MPSC is not set
--# CONFIG_MCORE2 is not set
--# CONFIG_GENERIC_CPU is not set
--CONFIG_X86_GENERIC=y
--CONFIG_X86_CPU=y
--CONFIG_X86_CMPXCHG=y
--CONFIG_X86_L1_CACHE_SHIFT=7
--CONFIG_X86_XADD=y
--CONFIG_X86_PPRO_FENCE=y
--CONFIG_X86_F00F_BUG=y
--CONFIG_X86_WP_WORKS_OK=y
--CONFIG_X86_INVLPG=y
--CONFIG_X86_BSWAP=y
--CONFIG_X86_POPAD_OK=y
--CONFIG_X86_ALIGNMENT_16=y
--CONFIG_X86_INTEL_USERCOPY=y
--CONFIG_X86_MINIMUM_CPU_FAMILY=4
--CONFIG_HPET_TIMER=y
--CONFIG_HPET_EMULATE_RTC=y
--CONFIG_DMI=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_NR_CPUS=32
--CONFIG_SCHED_SMT=y
--CONFIG_SCHED_MC=y
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
--CONFIG_X86_LOCAL_APIC=y
--CONFIG_X86_IO_APIC=y
--CONFIG_X86_MCE=y
--CONFIG_X86_MCE_NONFATAL=y
--CONFIG_X86_MCE_P4THERMAL=y
--CONFIG_VM86=y
--CONFIG_TOSHIBA=m
--CONFIG_I8K=m
--CONFIG_X86_REBOOTFIXUPS=y
--CONFIG_MICROCODE=m
--CONFIG_MICROCODE_OLD_INTERFACE=y
--CONFIG_X86_MSR=m
--CONFIG_X86_CPUID=m
--# CONFIG_NOHIGHMEM is not set
--CONFIG_HIGHMEM4G=y
--# CONFIG_HIGHMEM64G is not set
--CONFIG_PAGE_OFFSET=0xC0000000
--CONFIG_HIGHMEM=y
--
--#
--# NUMA (Summit) requires SMP, 64GB highmem support, ACPI
--#
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_PAGEFLAGS_EXTENDED=y
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_MMU_NOTIFIER=y
--CONFIG_HIGHPTE=y
--CONFIG_X86_RESERVE_LOW_64K=y
--# CONFIG_MATH_EMULATION is not set
--CONFIG_MTRR=y
--# CONFIG_MTRR_SANITIZER is not set
--CONFIG_X86_PAT=y
--# CONFIG_EFI is not set
--# CONFIG_IRQBALANCE is not set
--CONFIG_SECCOMP=y
--# CONFIG_SECCOMP_DISABLE_TSC is not set
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--CONFIG_SCHED_HRTICK=y
--CONFIG_KEXEC=y
--CONFIG_CRASH_DUMP=y
--# CONFIG_KEXEC_JUMP is not set
--CONFIG_PHYSICAL_START=0x100000
--CONFIG_RELOCATABLE=y
--CONFIG_PHYSICAL_ALIGN=0x100000
--CONFIG_HOTPLUG_CPU=y
--CONFIG_COMPAT_VDSO=y
--
--#
--# Hardware Performance Monitoring support
--#
--CONFIG_PERFMON=y
--# CONFIG_PERFMON_DEBUG is not set
--CONFIG_PERFMON_DEBUG_FS=y
--CONFIG_X86_PERFMON_P6=m
--CONFIG_X86_PERFMON_P4=m
--CONFIG_X86_PERFMON_PEBS_P4=m
--CONFIG_X86_PERFMON_CORE=m
--CONFIG_X86_PERFMON_PEBS_CORE=m
--CONFIG_X86_PERFMON_INTEL_ATOM=m
--CONFIG_X86_PERFMON_INTEL_ARCH=m
--CONFIG_X86_PERFMON_AMD64=m
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--
--#
--# Power management options
--#
--CONFIG_PM=y
--# CONFIG_PM_DEBUG is not set
--CONFIG_PM_SLEEP_SMP=y
--CONFIG_PM_SLEEP=y
--CONFIG_SUSPEND=y
--CONFIG_SUSPEND_FREEZER=y
--CONFIG_HIBERNATION=y
--CONFIG_PM_STD_PARTITION=""
--CONFIG_ACPI=y
--CONFIG_ACPI_SLEEP=y
--CONFIG_ACPI_PROCFS=y
--CONFIG_ACPI_PROCFS_POWER=y
--CONFIG_ACPI_SYSFS_POWER=y
--CONFIG_ACPI_PROC_EVENT=y
--CONFIG_ACPI_AC=m
--CONFIG_ACPI_BATTERY=m
--CONFIG_ACPI_BUTTON=m
--CONFIG_ACPI_VIDEO=m
--CONFIG_ACPI_FAN=m
--CONFIG_ACPI_DOCK=m
--CONFIG_ACPI_PROCESSOR=m
--CONFIG_ACPI_HOTPLUG_CPU=y
--CONFIG_ACPI_THERMAL=m
--CONFIG_ACPI_WMI=m
--# CONFIG_ACPI_ASUS is not set
--CONFIG_ACPI_TOSHIBA=m
--CONFIG_ACPI_CUSTOM_DSDT_FILE=""
--# CONFIG_ACPI_CUSTOM_DSDT is not set
--CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
--CONFIG_ACPI_BLACKLIST_YEAR=2001
--CONFIG_ACPI_DEBUG=y
--# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
--CONFIG_ACPI_EC=y
--CONFIG_ACPI_PCI_SLOT=m
--CONFIG_ACPI_POWER=y
--CONFIG_ACPI_SYSTEM=y
--CONFIG_X86_PM_TIMER=y
--CONFIG_ACPI_CONTAINER=m
--CONFIG_ACPI_SBS=m
--CONFIG_X86_APM_BOOT=y
--CONFIG_APM=m
--# CONFIG_APM_IGNORE_USER_SUSPEND is not set
--CONFIG_APM_DO_ENABLE=y
--# CONFIG_APM_CPU_IDLE is not set
--CONFIG_APM_DISPLAY_BLANK=y
--CONFIG_APM_ALLOW_INTS=y
--# CONFIG_APM_REAL_MODE_POWER_OFF is not set
--
--#
--# CPU Frequency scaling
--#
--CONFIG_CPU_FREQ=y
--CONFIG_CPU_FREQ_TABLE=y
--# CONFIG_CPU_FREQ_DEBUG is not set
--CONFIG_CPU_FREQ_STAT=m
--CONFIG_CPU_FREQ_STAT_DETAILS=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
--CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
--CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
--CONFIG_CPU_FREQ_GOV_POWERSAVE=m
--CONFIG_CPU_FREQ_GOV_USERSPACE=m
--CONFIG_CPU_FREQ_GOV_ONDEMAND=y
--CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
--
--#
--# CPUFreq processor drivers
--#
--CONFIG_X86_ACPI_CPUFREQ=m
--CONFIG_X86_POWERNOW_K6=m
--CONFIG_X86_POWERNOW_K7=m
--CONFIG_X86_POWERNOW_K7_ACPI=y
--CONFIG_X86_POWERNOW_K8=m
--CONFIG_X86_POWERNOW_K8_ACPI=y
--CONFIG_X86_GX_SUSPMOD=m
--CONFIG_X86_SPEEDSTEP_CENTRINO=m
--CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
--CONFIG_X86_SPEEDSTEP_ICH=m
--CONFIG_X86_SPEEDSTEP_SMI=m
--CONFIG_X86_P4_CLOCKMOD=m
--CONFIG_X86_CPUFREQ_NFORCE2=m
--CONFIG_X86_LONGRUN=m
--CONFIG_X86_LONGHAUL=m
--CONFIG_X86_E_POWERSAVER=m
--
--#
--# shared options
--#
--# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
--CONFIG_X86_SPEEDSTEP_LIB=m
--CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
--CONFIG_CPU_IDLE=y
--CONFIG_CPU_IDLE_GOV_LADDER=y
--CONFIG_CPU_IDLE_GOV_MENU=y
--
--#
--# Bus options (PCI etc.)
--#
--CONFIG_PCI=y
--# CONFIG_PCI_GOBIOS is not set
--# CONFIG_PCI_GOMMCONFIG is not set
--# CONFIG_PCI_GODIRECT is not set
--# CONFIG_PCI_GOOLPC is not set
--# CONFIG_PCI_GOXEN_FE is not set
--CONFIG_PCI_GOANY=y
--CONFIG_PCI_BIOS=y
--CONFIG_PCI_DIRECT=y
--CONFIG_PCI_MMCONFIG=y
--CONFIG_PCI_OLPC=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCIEPORTBUS=y
--CONFIG_HOTPLUG_PCI_PCIE=m
--CONFIG_PCIEAER=y
--CONFIG_PCIEASPM=y
--# CONFIG_PCIEASPM_DEBUG is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--CONFIG_HT_IRQ=y
--CONFIG_ISA_DMA_API=y
--CONFIG_ISA=y
--# CONFIG_EISA is not set
--# CONFIG_MCA is not set
--CONFIG_SCx200=m
--CONFIG_SCx200HR_TIMER=m
--CONFIG_OLPC=y
--CONFIG_K8_NB=y
--CONFIG_PCCARD=m
--# CONFIG_PCMCIA_DEBUG is not set
--CONFIG_PCMCIA=m
--CONFIG_PCMCIA_LOAD_CIS=y
--CONFIG_PCMCIA_IOCTL=y
--CONFIG_CARDBUS=y
--
--#
--# PC-card bridges
--#
--CONFIG_YENTA=m
--CONFIG_YENTA_O2=y
--CONFIG_YENTA_RICOH=y
--CONFIG_YENTA_TI=y
--CONFIG_YENTA_ENE_TUNE=y
--CONFIG_YENTA_TOSHIBA=y
--CONFIG_PD6729=m
--CONFIG_I82092=m
--CONFIG_I82365=m
--CONFIG_TCIC=m
--CONFIG_PCMCIA_PROBE=y
--CONFIG_PCCARD_NONSTATIC=m
--CONFIG_HOTPLUG_PCI=m
--CONFIG_HOTPLUG_PCI_FAKE=m
--CONFIG_HOTPLUG_PCI_COMPAQ=m
--CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y
--CONFIG_HOTPLUG_PCI_IBM=m
--CONFIG_HOTPLUG_PCI_ACPI=m
--CONFIG_HOTPLUG_PCI_ACPI_IBM=m
--CONFIG_HOTPLUG_PCI_CPCI=y
--CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
--CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
--CONFIG_HOTPLUG_PCI_SHPC=m
--
--#
--# Executable file formats / Emulations
--#
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_AOUT=m
--CONFIG_BINFMT_MISC=m
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=m
--CONFIG_PACKET_MMAP=y
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--CONFIG_XFRM_SUB_POLICY=y
--CONFIG_XFRM_MIGRATE=y
--# CONFIG_XFRM_STATISTICS is not set
--CONFIG_XFRM_IPCOMP=m
--CONFIG_NET_KEY=m
--CONFIG_NET_KEY_MIGRATE=y
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--CONFIG_IP_ROUTE_MULTIPATH=y
--CONFIG_IP_ROUTE_VERBOSE=y
--# CONFIG_IP_PNP is not set
--CONFIG_NET_IPIP=m
--CONFIG_NET_IPGRE=m
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--CONFIG_INET_AH=m
--CONFIG_INET_ESP=m
--CONFIG_INET_IPCOMP=m
--CONFIG_INET_XFRM_TUNNEL=m
--CONFIG_INET_TUNNEL=m
--CONFIG_INET_XFRM_MODE_TRANSPORT=m
--CONFIG_INET_XFRM_MODE_TUNNEL=m
--CONFIG_INET_XFRM_MODE_BEET=m
--CONFIG_INET_LRO=y
--CONFIG_INET_DIAG=m
--CONFIG_INET_TCP_DIAG=m
--CONFIG_TCP_CONG_ADVANCED=y
--CONFIG_TCP_CONG_BIC=m
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_TCP_CONG_WESTWOOD=m
--CONFIG_TCP_CONG_HTCP=m
--CONFIG_TCP_CONG_HSTCP=m
--CONFIG_TCP_CONG_HYBLA=m
--CONFIG_TCP_CONG_VEGAS=m
--CONFIG_TCP_CONG_SCALABLE=m
--CONFIG_TCP_CONG_LP=m
--CONFIG_TCP_CONG_VENO=m
--CONFIG_TCP_CONG_YEAH=m
--CONFIG_TCP_CONG_ILLINOIS=m
--# CONFIG_DEFAULT_BIC is not set
--CONFIG_DEFAULT_CUBIC=y
--# CONFIG_DEFAULT_HTCP is not set
--# CONFIG_DEFAULT_VEGAS is not set
--# CONFIG_DEFAULT_WESTWOOD is not set
--# CONFIG_DEFAULT_RENO is not set
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--CONFIG_IP_VS=m
--# CONFIG_IP_VS_DEBUG is not set
--CONFIG_IP_VS_TAB_BITS=12
--
--#
--# IPVS transport protocol load balancing support
--#
--CONFIG_IP_VS_PROTO_TCP=y
--CONFIG_IP_VS_PROTO_UDP=y
--CONFIG_IP_VS_PROTO_ESP=y
--CONFIG_IP_VS_PROTO_AH=y
--
--#
--# IPVS scheduler
--#
--CONFIG_IP_VS_RR=m
--CONFIG_IP_VS_WRR=m
--CONFIG_IP_VS_LC=m
--CONFIG_IP_VS_WLC=m
--CONFIG_IP_VS_LBLC=m
--CONFIG_IP_VS_LBLCR=m
--CONFIG_IP_VS_DH=m
--CONFIG_IP_VS_SH=m
--CONFIG_IP_VS_SED=m
--CONFIG_IP_VS_NQ=m
--
--#
--# IPVS application helper
--#
--CONFIG_IP_VS_FTP=m
--CONFIG_IPV6=m
--CONFIG_IPV6_PRIVACY=y
--CONFIG_IPV6_ROUTER_PREF=y
--CONFIG_IPV6_ROUTE_INFO=y
--# CONFIG_IPV6_OPTIMISTIC_DAD is not set
--CONFIG_INET6_AH=m
--CONFIG_INET6_ESP=m
--CONFIG_INET6_IPCOMP=m
--CONFIG_IPV6_MIP6=m
--CONFIG_INET6_XFRM_TUNNEL=m
--CONFIG_INET6_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_TRANSPORT=m
--CONFIG_INET6_XFRM_MODE_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_BEET=m
--CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
--CONFIG_IPV6_SIT=m
--CONFIG_IPV6_NDISC_NODETYPE=y
--CONFIG_IPV6_TUNNEL=m
--CONFIG_IPV6_MULTIPLE_TABLES=y
--CONFIG_IPV6_SUBTREES=y
--# CONFIG_IPV6_MROUTE is not set
--# CONFIG_NETLABEL is not set
--CONFIG_NETWORK_SECMARK=y
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_NETFILTER_ADVANCED=y
--CONFIG_BRIDGE_NETFILTER=y
--
--#
--# Core Netfilter Configuration
--#
--CONFIG_NETFILTER_NETLINK=m
--CONFIG_NETFILTER_NETLINK_QUEUE=m
--CONFIG_NETFILTER_NETLINK_LOG=m
--CONFIG_NF_CONNTRACK=m
--CONFIG_NF_CT_ACCT=y
--CONFIG_NF_CONNTRACK_MARK=y
--CONFIG_NF_CONNTRACK_SECMARK=y
--CONFIG_NF_CONNTRACK_EVENTS=y
--CONFIG_NF_CT_PROTO_DCCP=m
--CONFIG_NF_CT_PROTO_GRE=m
--CONFIG_NF_CT_PROTO_SCTP=m
--CONFIG_NF_CT_PROTO_UDPLITE=m
--CONFIG_NF_CONNTRACK_AMANDA=m
--CONFIG_NF_CONNTRACK_FTP=m
--CONFIG_NF_CONNTRACK_H323=m
--CONFIG_NF_CONNTRACK_IRC=m
--CONFIG_NF_CONNTRACK_NETBIOS_NS=m
--CONFIG_NF_CONNTRACK_PPTP=m
--CONFIG_NF_CONNTRACK_SANE=m
--CONFIG_NF_CONNTRACK_SIP=m
--CONFIG_NF_CONNTRACK_TFTP=m
--CONFIG_NF_CONNTRACK_SLP=m
--CONFIG_NF_CT_NETLINK=m
--CONFIG_NETFILTER_XTABLES=m
--CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
--CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
--CONFIG_NETFILTER_XT_TARGET_DSCP=m
--CONFIG_NETFILTER_XT_TARGET_MARK=m
--CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
--CONFIG_NETFILTER_XT_TARGET_NFLOG=m
--CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
--CONFIG_NETFILTER_XT_TARGET_RATEEST=m
--CONFIG_NETFILTER_XT_TARGET_TRACE=m
--CONFIG_NETFILTER_XT_TARGET_SECMARK=m
--CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
--CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
--CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
--CONFIG_NETFILTER_XT_MATCH_COMMENT=m
--CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
--CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
--CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
--CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
--CONFIG_NETFILTER_XT_MATCH_DCCP=m
--CONFIG_NETFILTER_XT_MATCH_DSCP=m
--CONFIG_NETFILTER_XT_MATCH_ESP=m
--CONFIG_NETFILTER_XT_MATCH_HELPER=m
--CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
--CONFIG_NETFILTER_XT_MATCH_LENGTH=m
--CONFIG_NETFILTER_XT_MATCH_LIMIT=m
--CONFIG_NETFILTER_XT_MATCH_MAC=m
--CONFIG_NETFILTER_XT_MATCH_MARK=m
--CONFIG_NETFILTER_XT_MATCH_OWNER=m
--CONFIG_NETFILTER_XT_MATCH_POLICY=m
--CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
--CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
--CONFIG_NETFILTER_XT_MATCH_QUOTA=m
--CONFIG_NETFILTER_XT_MATCH_RATEEST=m
--CONFIG_NETFILTER_XT_MATCH_REALM=m
--CONFIG_NETFILTER_XT_MATCH_SCTP=m
--CONFIG_NETFILTER_XT_MATCH_STATE=m
--CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
--CONFIG_NETFILTER_XT_MATCH_STRING=m
--CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
--CONFIG_NETFILTER_XT_MATCH_TIME=m
--CONFIG_NETFILTER_XT_MATCH_U32=m
--CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
--
--#
--# IP: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV4=m
--# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
--CONFIG_IP_NF_QUEUE=m
--CONFIG_IP_NF_IPTABLES=m
--CONFIG_IP_NF_MATCH_RECENT=m
--CONFIG_IP_NF_MATCH_ECN=m
--CONFIG_IP_NF_MATCH_AH=m
--CONFIG_IP_NF_MATCH_TTL=m
--CONFIG_IP_NF_MATCH_ADDRTYPE=m
--CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
--CONFIG_IP_NF_FILTER=m
--CONFIG_IP_NF_TARGET_REJECT=m
--CONFIG_IP_NF_TARGET_LOG=m
--CONFIG_IP_NF_TARGET_ULOG=m
--CONFIG_NF_NAT=m
--CONFIG_NF_NAT_NEEDED=y
--CONFIG_IP_NF_TARGET_MASQUERADE=m
--CONFIG_IP_NF_TARGET_REDIRECT=m
--CONFIG_IP_NF_TARGET_NETMAP=m
--CONFIG_NF_NAT_SNMP_BASIC=m
--CONFIG_NF_NAT_PROTO_DCCP=m
--CONFIG_NF_NAT_PROTO_GRE=m
--CONFIG_NF_NAT_PROTO_UDPLITE=m
--CONFIG_NF_NAT_PROTO_SCTP=m
--CONFIG_NF_NAT_FTP=m
--CONFIG_NF_NAT_IRC=m
--CONFIG_NF_NAT_TFTP=m
--CONFIG_NF_NAT_AMANDA=m
--CONFIG_NF_NAT_PPTP=m
--CONFIG_NF_NAT_H323=m
--CONFIG_NF_NAT_SIP=m
--CONFIG_IP_NF_MANGLE=m
--CONFIG_IP_NF_TARGET_ECN=m
--CONFIG_IP_NF_TARGET_TTL=m
--CONFIG_IP_NF_TARGET_CLUSTERIP=m
--CONFIG_IP_NF_RAW=m
--CONFIG_IP_NF_SECURITY=m
--CONFIG_IP_NF_ARPTABLES=m
--CONFIG_IP_NF_ARPFILTER=m
--CONFIG_IP_NF_ARP_MANGLE=m
--
--#
--# IPv6: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV6=m
--CONFIG_IP6_NF_QUEUE=m
--CONFIG_IP6_NF_IPTABLES=m
--CONFIG_IP6_NF_MATCH_RT=m
--CONFIG_IP6_NF_MATCH_OPTS=m
--CONFIG_IP6_NF_MATCH_FRAG=m
--CONFIG_IP6_NF_MATCH_HL=m
--CONFIG_IP6_NF_MATCH_IPV6HEADER=m
--CONFIG_IP6_NF_MATCH_AH=m
--CONFIG_IP6_NF_MATCH_MH=m
--CONFIG_IP6_NF_MATCH_EUI64=m
--CONFIG_IP6_NF_FILTER=m
--CONFIG_IP6_NF_TARGET_LOG=m
--CONFIG_IP6_NF_TARGET_REJECT=m
--CONFIG_IP6_NF_MANGLE=m
--CONFIG_IP6_NF_TARGET_HL=m
--CONFIG_IP6_NF_RAW=m
--CONFIG_IP6_NF_SECURITY=m
--
--#
--# DECnet: Netfilter Configuration
--#
--CONFIG_DECNET_NF_GRABULATOR=m
--
--#
--# Bridge: Netfilter Configuration
--#
--CONFIG_BRIDGE_NF_EBTABLES=m
--CONFIG_BRIDGE_EBT_BROUTE=m
--CONFIG_BRIDGE_EBT_T_FILTER=m
--CONFIG_BRIDGE_EBT_T_NAT=m
--CONFIG_BRIDGE_EBT_802_3=m
--CONFIG_BRIDGE_EBT_AMONG=m
--CONFIG_BRIDGE_EBT_ARP=m
--CONFIG_BRIDGE_EBT_IP=m
--CONFIG_BRIDGE_EBT_IP6=m
--CONFIG_BRIDGE_EBT_LIMIT=m
--CONFIG_BRIDGE_EBT_MARK=m
--CONFIG_BRIDGE_EBT_PKTTYPE=m
--CONFIG_BRIDGE_EBT_STP=m
--CONFIG_BRIDGE_EBT_VLAN=m
--CONFIG_BRIDGE_EBT_ARPREPLY=m
--CONFIG_BRIDGE_EBT_DNAT=m
--CONFIG_BRIDGE_EBT_MARK_T=m
--CONFIG_BRIDGE_EBT_REDIRECT=m
--CONFIG_BRIDGE_EBT_SNAT=m
--CONFIG_BRIDGE_EBT_LOG=m
--CONFIG_BRIDGE_EBT_ULOG=m
--CONFIG_BRIDGE_EBT_NFLOG=m
--CONFIG_IP_DCCP=m
--CONFIG_INET_DCCP_DIAG=m
--CONFIG_IP_DCCP_ACKVEC=y
--
--#
--# DCCP CCIDs Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_DCCP_CCID2=m
--# CONFIG_IP_DCCP_CCID2_DEBUG is not set
--CONFIG_IP_DCCP_CCID3=m
--# CONFIG_IP_DCCP_CCID3_DEBUG is not set
--CONFIG_IP_DCCP_CCID3_RTO=100
--CONFIG_IP_DCCP_TFRC_LIB=m
--
--#
--# DCCP Kernel Hacking
--#
--# CONFIG_IP_DCCP_DEBUG is not set
--# CONFIG_NET_DCCPPROBE is not set
--CONFIG_IP_SCTP=m
--# CONFIG_SCTP_DBG_MSG is not set
--# CONFIG_SCTP_DBG_OBJCNT is not set
--# CONFIG_SCTP_HMAC_NONE is not set
--# CONFIG_SCTP_HMAC_SHA1 is not set
--CONFIG_SCTP_HMAC_MD5=y
--# CONFIG_TIPC is not set
--CONFIG_ATM=m
--CONFIG_ATM_CLIP=m
--CONFIG_ATM_CLIP_NO_ICMP=y
--CONFIG_ATM_LANE=m
--CONFIG_ATM_MPOA=m
--CONFIG_ATM_BR2684=m
--# CONFIG_ATM_BR2684_IPFILTER is not set
--CONFIG_STP=m
--CONFIG_GARP=m
--CONFIG_BRIDGE=m
--CONFIG_VLAN_8021Q=m
--CONFIG_VLAN_8021Q_GVRP=y
--CONFIG_DECNET=m
--CONFIG_DECNET_ROUTER=y
--CONFIG_LLC=y
--CONFIG_LLC2=m
--CONFIG_IPX=m
--# CONFIG_IPX_INTERN is not set
--CONFIG_ATALK=m
--CONFIG_DEV_APPLETALK=m
--CONFIG_LTPC=m
--CONFIG_COPS=m
--CONFIG_COPS_DAYNA=y
--CONFIG_COPS_TANGENT=y
--CONFIG_IPDDP=m
--CONFIG_IPDDP_ENCAP=y
--CONFIG_IPDDP_DECAP=y
--CONFIG_X25=m
--CONFIG_LAPB=m
--CONFIG_ECONET=m
--# CONFIG_ECONET_AUNUDP is not set
--# CONFIG_ECONET_NATIVE is not set
--CONFIG_WAN_ROUTER=m
--CONFIG_NET_SCHED=y
--
--#
--# Queueing/Scheduling
--#
--CONFIG_NET_SCH_CBQ=m
--CONFIG_NET_SCH_HTB=m
--CONFIG_NET_SCH_HFSC=m
--CONFIG_NET_SCH_ATM=m
--CONFIG_NET_SCH_PRIO=m
--CONFIG_NET_SCH_MULTIQ=m
--CONFIG_NET_SCH_RED=m
--CONFIG_NET_SCH_SFQ=m
--CONFIG_NET_SCH_TEQL=m
--CONFIG_NET_SCH_TBF=m
--CONFIG_NET_SCH_GRED=m
--CONFIG_NET_SCH_DSMARK=m
--CONFIG_NET_SCH_NETEM=m
--CONFIG_NET_SCH_INGRESS=m
--
--#
--# Classification
--#
--CONFIG_NET_CLS=y
--CONFIG_NET_CLS_BASIC=m
--CONFIG_NET_CLS_TCINDEX=m
--CONFIG_NET_CLS_ROUTE4=m
--CONFIG_NET_CLS_ROUTE=y
--CONFIG_NET_CLS_FW=m
--CONFIG_NET_CLS_U32=m
--CONFIG_CLS_U32_PERF=y
--CONFIG_CLS_U32_MARK=y
--CONFIG_NET_CLS_RSVP=m
--CONFIG_NET_CLS_RSVP6=m
--CONFIG_NET_CLS_FLOW=m
--# CONFIG_NET_EMATCH is not set
--CONFIG_NET_CLS_ACT=y
--CONFIG_NET_ACT_POLICE=m
--CONFIG_NET_ACT_GACT=m
--CONFIG_GACT_PROB=y
--CONFIG_NET_ACT_MIRRED=m
--CONFIG_NET_ACT_IPT=m
--CONFIG_NET_ACT_NAT=m
--CONFIG_NET_ACT_PEDIT=m
--CONFIG_NET_ACT_SIMP=m
--CONFIG_NET_ACT_SKBEDIT=m
--# CONFIG_NET_CLS_IND is not set
--CONFIG_NET_SCH_FIFO=y
--CONFIG_DCB=m
--CONFIG_DCBNL=y
--
--#
--# Network testing
--#
--CONFIG_NET_PKTGEN=m
--CONFIG_NET_TCPPROBE=m
--CONFIG_HAMRADIO=y
--
--#
--# Packet Radio protocols
--#
--CONFIG_AX25=m
--CONFIG_AX25_DAMA_SLAVE=y
--CONFIG_NETROM=m
--CONFIG_ROSE=m
--
--#
--# AX.25 network device drivers
--#
--CONFIG_MKISS=m
--CONFIG_6PACK=m
--CONFIG_BPQETHER=m
--CONFIG_SCC=m
--CONFIG_SCC_DELAY=y
--CONFIG_SCC_TRXECHO=y
--CONFIG_BAYCOM_SER_FDX=m
--CONFIG_BAYCOM_SER_HDX=m
--CONFIG_BAYCOM_PAR=m
--CONFIG_BAYCOM_EPP=m
--CONFIG_YAM=m
--CONFIG_CAN=m
--CONFIG_CAN_RAW=m
--CONFIG_CAN_BCM=m
--
--#
--# CAN Device Drivers
--#
--CONFIG_CAN_VCAN=m
--# CONFIG_CAN_DEBUG_DEVICES is not set
--CONFIG_IRDA=m
--
--#
--# IrDA protocols
--#
--CONFIG_IRLAN=m
--CONFIG_IRNET=m
--CONFIG_IRCOMM=m
--CONFIG_IRDA_ULTRA=y
--
--#
--# IrDA options
--#
--CONFIG_IRDA_CACHE_LAST_LSAP=y
--# CONFIG_IRDA_FAST_RR is not set
--# CONFIG_IRDA_DEBUG is not set
--
--#
--# Infrared-port device drivers
--#
--
--#
--# SIR device drivers
--#
--CONFIG_IRTTY_SIR=m
--
--#
--# Dongle support
--#
--CONFIG_DONGLE=y
--CONFIG_ESI_DONGLE=m
--CONFIG_ACTISYS_DONGLE=m
--CONFIG_TEKRAM_DONGLE=m
--CONFIG_TOIM3232_DONGLE=m
--CONFIG_LITELINK_DONGLE=m
--CONFIG_MA600_DONGLE=m
--CONFIG_GIRBIL_DONGLE=m
--CONFIG_MCP2120_DONGLE=m
--CONFIG_OLD_BELKIN_DONGLE=m
--CONFIG_ACT200L_DONGLE=m
--CONFIG_KINGSUN_DONGLE=m
--CONFIG_KSDAZZLE_DONGLE=m
--CONFIG_KS959_DONGLE=m
--
--#
--# FIR device drivers
--#
--CONFIG_USB_IRDA=m
--CONFIG_SIGMATEL_FIR=m
--CONFIG_NSC_FIR=m
--CONFIG_WINBOND_FIR=m
--CONFIG_TOSHIBA_FIR=m
--CONFIG_SMC_IRCC_FIR=m
--CONFIG_ALI_FIR=m
--CONFIG_VLSI_FIR=m
--CONFIG_VIA_FIR=m
--CONFIG_MCS_FIR=m
--CONFIG_BT=m
--CONFIG_BT_L2CAP=m
--CONFIG_BT_SCO=m
--CONFIG_BT_RFCOMM=m
--CONFIG_BT_RFCOMM_TTY=y
--CONFIG_BT_BNEP=m
--CONFIG_BT_BNEP_MC_FILTER=y
--CONFIG_BT_BNEP_PROTO_FILTER=y
--CONFIG_BT_CMTP=m
--CONFIG_BT_HIDP=m
--
--#
--# Bluetooth device drivers
--#
--CONFIG_BT_HCIBTUSB=m
--CONFIG_BT_HCIBTSDIO=m
--CONFIG_BT_HCIUART=m
--CONFIG_BT_HCIUART_H4=y
--CONFIG_BT_HCIUART_BCSP=y
--CONFIG_BT_HCIUART_LL=y
--CONFIG_BT_HCIBCM203X=m
--CONFIG_BT_HCIBPA10X=m
--CONFIG_BT_HCIBFUSB=m
--CONFIG_BT_HCIDTL1=m
--CONFIG_BT_HCIBT3C=m
--CONFIG_BT_HCIBLUECARD=m
--CONFIG_BT_HCIBTUART=m
--CONFIG_BT_HCIVHCI=m
--CONFIG_AF_RXRPC=m
--# CONFIG_AF_RXRPC_DEBUG is not set
--CONFIG_RXKAD=m
--CONFIG_FIB_RULES=y
--
--#
--# Wireless
--#
--CONFIG_CFG80211=m
--CONFIG_NL80211=y
--CONFIG_WIRELESS_EXT=y
--CONFIG_WIRELESS_EXT_SYSFS=y
--CONFIG_MAC80211=m
--
--#
--# Rate control algorithm selection
--#
--CONFIG_MAC80211_RC_PID=y
--CONFIG_MAC80211_RC_DEFAULT_PID=y
--CONFIG_MAC80211_RC_DEFAULT="pid"
--CONFIG_MAC80211_MESH=y
--CONFIG_MAC80211_LEDS=y
--CONFIG_MAC80211_DEBUGFS=y
--# CONFIG_MAC80211_DEBUG_MENU is not set
--CONFIG_IEEE80211=m
--# CONFIG_IEEE80211_DEBUG is not set
--CONFIG_IEEE80211_CRYPT_WEP=m
--CONFIG_IEEE80211_CRYPT_CCMP=m
--CONFIG_IEEE80211_CRYPT_TKIP=m
--CONFIG_RFKILL=m
--CONFIG_RFKILL_INPUT=m
--CONFIG_RFKILL_LEDS=y
--CONFIG_NET_9P=m
--# CONFIG_NET_9P_VIRTIO is not set
--# CONFIG_NET_9P_DEBUG is not set
--CONFIG_NETVM=y
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH=""
--# CONFIG_STANDALONE is not set
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--CONFIG_FIRMWARE_IN_KERNEL=y
--CONFIG_EXTRA_FIRMWARE=""
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=m
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=m
--CONFIG_MTD_PARTITIONS=y
--CONFIG_MTD_REDBOOT_PARTS=m
--CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
--# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
--# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
--CONFIG_MTD_AR7_PARTS=m
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=m
--CONFIG_MTD_BLKDEVS=m
--CONFIG_MTD_BLOCK=m
--# CONFIG_MTD_BLOCK_RO is not set
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--CONFIG_RFD_FTL=m
--# CONFIG_SSFDC is not set
--CONFIG_MTD_OOPS=m
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=m
--CONFIG_MTD_JEDECPROBE=m
--CONFIG_MTD_GEN_PROBE=m
--CONFIG_MTD_CFI_ADV_OPTIONS=y
--CONFIG_MTD_CFI_NOSWAP=y
--# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_GEOMETRY is not set
--CONFIG_MTD_MAP_BANK_WIDTH_1=y
--CONFIG_MTD_MAP_BANK_WIDTH_2=y
--CONFIG_MTD_MAP_BANK_WIDTH_4=y
--# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
--CONFIG_MTD_CFI_I1=y
--CONFIG_MTD_CFI_I2=y
--# CONFIG_MTD_CFI_I4 is not set
--# CONFIG_MTD_CFI_I8 is not set
--# CONFIG_MTD_OTP is not set
--CONFIG_MTD_CFI_INTELEXT=m
--CONFIG_MTD_CFI_AMDSTD=m
--CONFIG_MTD_CFI_STAA=m
--CONFIG_MTD_CFI_UTIL=m
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--CONFIG_MTD_ABSENT=m
--
--#
--# Mapping drivers for chip access
--#
--CONFIG_MTD_COMPLEX_MAPPINGS=y
--CONFIG_MTD_PHYSMAP=m
--CONFIG_MTD_PHYSMAP_START=0x8000000
--CONFIG_MTD_PHYSMAP_LEN=0x4000000
--CONFIG_MTD_PHYSMAP_BANKWIDTH=2
--CONFIG_MTD_SC520CDP=m
--CONFIG_MTD_NETSC520=m
--CONFIG_MTD_TS5500=m
--CONFIG_MTD_SBC_GXX=m
--CONFIG_MTD_SCx200_DOCFLASH=m
--CONFIG_MTD_AMD76XROM=m
--CONFIG_MTD_ICHXROM=m
--CONFIG_MTD_ESB2ROM=m
--CONFIG_MTD_CK804XROM=m
--CONFIG_MTD_SCB2_FLASH=m
--CONFIG_MTD_NETtel=m
--CONFIG_MTD_DILNETPC=m
--CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000
--CONFIG_MTD_L440GX=m
--CONFIG_MTD_PCI=m
--CONFIG_MTD_INTEL_VR_NOR=m
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--CONFIG_MTD_PMC551=m
--CONFIG_MTD_PMC551_BUGFIX=y
--# CONFIG_MTD_PMC551_DEBUG is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--CONFIG_MTD_SLRAM=m
--CONFIG_MTD_PHRAM=m
--CONFIG_MTD_MTDRAM=m
--CONFIG_MTDRAM_TOTAL_SIZE=4096
--CONFIG_MTDRAM_ERASE_SIZE=128
--CONFIG_MTD_BLOCK2MTD=m
--
--#
--# Disk-On-Chip Device Drivers
--#
--CONFIG_MTD_DOC2000=m
--CONFIG_MTD_DOC2001=m
--CONFIG_MTD_DOC2001PLUS=m
--CONFIG_MTD_DOCPROBE=m
--CONFIG_MTD_DOCECC=m
--CONFIG_MTD_DOCPROBE_ADVANCED=y
--CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
--CONFIG_MTD_DOCPROBE_HIGH=y
--CONFIG_MTD_DOCPROBE_55AA=y
--CONFIG_MTD_NAND=m
--# CONFIG_MTD_NAND_VERIFY_WRITE is not set
--CONFIG_MTD_NAND_ECC_SMC=y
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=m
--CONFIG_MTD_NAND_DISKONCHIP=m
--# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
--CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
--CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
--CONFIG_MTD_NAND_CAFE=m
--CONFIG_MTD_NAND_CS553X=m
--CONFIG_MTD_NAND_NANDSIM=m
--CONFIG_MTD_NAND_PLATFORM=m
--CONFIG_MTD_ALAUDA=m
--CONFIG_MTD_ONENAND=m
--# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
--CONFIG_MTD_ONENAND_OTP=y
--CONFIG_MTD_ONENAND_2X_PROGRAM=y
--CONFIG_MTD_ONENAND_SIM=m
--
--#
--# UBI - Unsorted block images
--#
--CONFIG_MTD_UBI=m
--CONFIG_MTD_UBI_WL_THRESHOLD=4096
--CONFIG_MTD_UBI_BEB_RESERVE=1
--# CONFIG_MTD_UBI_GLUEBI is not set
--
--#
--# UBI debugging options
--#
--# CONFIG_MTD_UBI_DEBUG is not set
--CONFIG_PARPORT=m
--CONFIG_PARPORT_PC=m
--CONFIG_PARPORT_SERIAL=m
--CONFIG_PARPORT_PC_FIFO=y
--CONFIG_PARPORT_PC_SUPERIO=y
--CONFIG_PARPORT_PC_PCMCIA=m
--# CONFIG_PARPORT_GSC is not set
--CONFIG_PARPORT_AX88796=m
--CONFIG_PARPORT_1284=y
--CONFIG_PARPORT_NOT_PC=y
--CONFIG_PNP=y
--# CONFIG_PNP_DEBUG is not set
--
--#
--# Protocols
--#
--CONFIG_ISAPNP=y
--CONFIG_PNPBIOS=y
--CONFIG_PNPBIOS_PROC_FS=y
--CONFIG_PNPACPI=y
--CONFIG_BLK_DEV=y
--CONFIG_BLK_DEV_FD=m
--CONFIG_BLK_DEV_XD=m
--CONFIG_PARIDE=m
--
--#
--# Parallel IDE high-level drivers
--#
--CONFIG_PARIDE_PD=m
--CONFIG_PARIDE_PCD=m
--CONFIG_PARIDE_PF=m
--CONFIG_PARIDE_PT=m
--CONFIG_PARIDE_PG=m
--
--#
--# Parallel IDE protocol modules
--#
--CONFIG_PARIDE_ATEN=m
--CONFIG_PARIDE_BPCK=m
--CONFIG_PARIDE_BPCK6=m
--CONFIG_PARIDE_COMM=m
--CONFIG_PARIDE_DSTR=m
--CONFIG_PARIDE_FIT2=m
--CONFIG_PARIDE_FIT3=m
--CONFIG_PARIDE_EPAT=m
--CONFIG_PARIDE_EPATC8=y
--CONFIG_PARIDE_EPIA=m
--CONFIG_PARIDE_FRIQ=m
--CONFIG_PARIDE_FRPW=m
--CONFIG_PARIDE_KBIC=m
--CONFIG_PARIDE_KTTI=m
--CONFIG_PARIDE_ON20=m
--CONFIG_PARIDE_ON26=m
--CONFIG_BLK_CPQ_DA=m
--CONFIG_BLK_CPQ_CISS_DA=m
--CONFIG_CISS_SCSI_TAPE=y
--CONFIG_BLK_DEV_DAC960=m
--CONFIG_BLK_DEV_UMEM=m
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=m
--CONFIG_BLK_DEV_CRYPTOLOOP=m
--CONFIG_BLK_DEV_NBD=m
--CONFIG_BLK_DEV_SX8=m
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=m
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=64000
--CONFIG_BLK_DEV_XIP=y
--CONFIG_CDROM_PKTCDVD=m
--CONFIG_CDROM_PKTCDVD_BUFFERS=8
--CONFIG_CDROM_PKTCDVD_WCACHE=y
--CONFIG_ATA_OVER_ETH=m
--CONFIG_CIPHER_TWOFISH=m
--CONFIG_VIRTIO_BLK=m
--# CONFIG_BLK_DEV_HD is not set
--CONFIG_MISC_DEVICES=y
--CONFIG_IBM_ASM=m
--CONFIG_PHANTOM=m
--CONFIG_EEPROM_93CX6=m
--# CONFIG_SGI_IOC4 is not set
--CONFIG_TIFM_CORE=m
--CONFIG_TIFM_7XX1=m
--CONFIG_ACER_WMI=m
--CONFIG_ASUS_LAPTOP=m
--CONFIG_FUJITSU_LAPTOP=m
--# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
--CONFIG_TC1100_WMI=m
--CONFIG_HP_WMI=m
--CONFIG_MSI_LAPTOP=m
--CONFIG_PANASONIC_LAPTOP=m
--CONFIG_COMPAL_LAPTOP=m
--CONFIG_SONY_LAPTOP=m
--CONFIG_SONYPI_COMPAT=y
--CONFIG_THINKPAD_ACPI=m
--# CONFIG_THINKPAD_ACPI_DEBUG is not set
--CONFIG_THINKPAD_ACPI_BAY=y
--CONFIG_THINKPAD_ACPI_VIDEO=y
--CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
--CONFIG_INTEL_MENLOW=m
--CONFIG_EEEPC_LAPTOP=m
--CONFIG_ENCLOSURE_SERVICES=m
--CONFIG_HP_ILO=m
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=m
--CONFIG_BLK_DEV_IDE=m
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--CONFIG_IDE_TIMINGS=y
--CONFIG_IDE_ATAPI=y
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=m
--CONFIG_IDEDISK_MULTI_MODE=y
--CONFIG_BLK_DEV_IDECS=m
--CONFIG_BLK_DEV_DELKIN=m
--CONFIG_BLK_DEV_IDECD=m
--CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
--CONFIG_BLK_DEV_IDETAPE=m
--CONFIG_BLK_DEV_IDEFLOPPY=m
--CONFIG_BLK_DEV_IDESCSI=m
--CONFIG_BLK_DEV_IDEACPI=y
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=m
--CONFIG_BLK_DEV_PLATFORM=m
--CONFIG_BLK_DEV_CMD640=m
--CONFIG_BLK_DEV_CMD640_ENHANCED=y
--CONFIG_BLK_DEV_IDEPNP=m
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_BLK_DEV_OFFBOARD=y
--CONFIG_BLK_DEV_GENERIC=m
--CONFIG_BLK_DEV_OPTI621=m
--CONFIG_BLK_DEV_RZ1000=m
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--CONFIG_BLK_DEV_AEC62XX=m
--CONFIG_BLK_DEV_ALI15X3=m
--CONFIG_BLK_DEV_AMD74XX=m
--CONFIG_BLK_DEV_ATIIXP=m
--CONFIG_BLK_DEV_CMD64X=m
--CONFIG_BLK_DEV_TRIFLEX=m
--CONFIG_BLK_DEV_CS5520=m
--CONFIG_BLK_DEV_CS5530=m
--CONFIG_BLK_DEV_CS5535=m
--CONFIG_BLK_DEV_HPT366=m
--CONFIG_BLK_DEV_JMICRON=m
--CONFIG_BLK_DEV_SC1200=m
--CONFIG_BLK_DEV_PIIX=m
--CONFIG_BLK_DEV_IT8213=m
--CONFIG_BLK_DEV_IT821X=m
--CONFIG_BLK_DEV_NS87415=m
--CONFIG_BLK_DEV_PDC202XX_OLD=m
--CONFIG_BLK_DEV_PDC202XX_NEW=m
--CONFIG_BLK_DEV_SVWKS=m
--CONFIG_BLK_DEV_SIIMAGE=m
--CONFIG_BLK_DEV_SIS5513=m
--CONFIG_BLK_DEV_SLC90E66=m
--CONFIG_BLK_DEV_TRM290=m
--CONFIG_BLK_DEV_VIA82CXXX=m
--# CONFIG_BLK_DEV_TC86C001 is not set
--
--#
--# Other IDE chipsets support
--#
--
--#
--# Note: most of these also require special kernel boot parameters
--#
--CONFIG_BLK_DEV_4DRIVES=m
--CONFIG_BLK_DEV_ALI14XX=m
--CONFIG_BLK_DEV_DTC2278=m
--CONFIG_BLK_DEV_HT6560B=m
--CONFIG_BLK_DEV_QD65XX=m
--CONFIG_BLK_DEV_UMC8672=m
--CONFIG_BLK_DEV_IDEDMA=y
--
--#
--# SCSI device support
--#
--CONFIG_RAID_ATTRS=m
--CONFIG_SCSI=m
--CONFIG_SCSI_DMA=y
--CONFIG_SCSI_TGT=m
--CONFIG_SCSI_NETLINK=y
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=m
--CONFIG_SD_IOSTATS=y
--CONFIG_CHR_DEV_ST=m
--CONFIG_CHR_DEV_OSST=m
--CONFIG_BLK_DEV_SR=m
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=m
--CONFIG_CHR_DEV_SCH=m
--CONFIG_SCSI_ENCLOSURE=m
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--CONFIG_SCSI_CONSTANTS=y
--CONFIG_SCSI_LOGGING=y
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=m
--CONFIG_SCSI_FC_ATTRS=m
--CONFIG_SCSI_FC_TGT_ATTRS=y
--CONFIG_SCSI_ISCSI_ATTRS=m
--CONFIG_SCSI_SAS_ATTRS=m
--CONFIG_SCSI_SAS_LIBSAS=m
--CONFIG_SCSI_SAS_ATA=y
--CONFIG_SCSI_SAS_HOST_SMP=y
--CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
--CONFIG_SCSI_SRP_ATTRS=m
--CONFIG_SCSI_SRP_TGT_ATTRS=y
--CONFIG_SCSI_LOWLEVEL=y
--CONFIG_ISCSI_TCP=m
--CONFIG_SCSI_CXGB3_ISCSI=m
--CONFIG_BLK_DEV_3W_XXXX_RAID=m
--CONFIG_SCSI_3W_9XXX=m
--CONFIG_SCSI_7000FASST=m
--CONFIG_SCSI_ACARD=m
--CONFIG_SCSI_AHA152X=m
--CONFIG_SCSI_AHA1542=m
--CONFIG_SCSI_AACRAID=m
--CONFIG_SCSI_AIC7XXX=m
--CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
--CONFIG_AIC7XXX_RESET_DELAY_MS=5000
--# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
--CONFIG_AIC7XXX_DEBUG_MASK=0
--CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC7XXX_OLD=m
--CONFIG_SCSI_AIC79XX=m
--CONFIG_AIC79XX_CMDS_PER_DEVICE=32
--CONFIG_AIC79XX_RESET_DELAY_MS=15000
--# CONFIG_AIC79XX_DEBUG_ENABLE is not set
--CONFIG_AIC79XX_DEBUG_MASK=0
--CONFIG_AIC79XX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC94XX=m
--CONFIG_AIC94XX_DEBUG=y
--CONFIG_SCSI_DPT_I2O=m
--CONFIG_SCSI_ADVANSYS=m
--CONFIG_SCSI_IN2000=m
--CONFIG_SCSI_ARCMSR=m
--CONFIG_SCSI_ARCMSR_AER=y
--CONFIG_MEGARAID_NEWGEN=y
--CONFIG_MEGARAID_MM=m
--CONFIG_MEGARAID_MAILBOX=m
--CONFIG_MEGARAID_LEGACY=m
--CONFIG_MEGARAID_SAS=m
--CONFIG_SCSI_HPTIOP=m
--CONFIG_SCSI_BUSLOGIC=m
--CONFIG_SCSI_FLASHPOINT=y
--CONFIG_LIBFC=m
--CONFIG_FCOE=m
--CONFIG_SCSI_DMX3191D=m
--CONFIG_SCSI_DTC3280=m
--CONFIG_SCSI_EATA=m
--CONFIG_SCSI_EATA_TAGGED_QUEUE=y
--CONFIG_SCSI_EATA_LINKED_COMMANDS=y
--CONFIG_SCSI_EATA_MAX_TAGS=16
--CONFIG_SCSI_FUTURE_DOMAIN=m
--CONFIG_SCSI_GDTH=m
--CONFIG_SCSI_GENERIC_NCR5380=m
--CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
--CONFIG_SCSI_GENERIC_NCR53C400=y
--CONFIG_SCSI_IPS=m
--CONFIG_SCSI_INITIO=m
--CONFIG_SCSI_INIA100=m
--CONFIG_SCSI_PPA=m
--CONFIG_SCSI_IMM=m
--# CONFIG_SCSI_IZIP_EPP16 is not set
--# CONFIG_SCSI_IZIP_SLOW_CTR is not set
--CONFIG_SCSI_MVSAS=m
--CONFIG_SCSI_NCR53C406A=m
--CONFIG_SCSI_STEX=m
--CONFIG_SCSI_SYM53C8XX_2=m
--CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
--CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
--CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
--CONFIG_SCSI_SYM53C8XX_MMIO=y
--CONFIG_SCSI_IPR=m
--CONFIG_SCSI_IPR_TRACE=y
--CONFIG_SCSI_IPR_DUMP=y
--CONFIG_SCSI_PAS16=m
--CONFIG_SCSI_QLOGIC_FAS=m
--CONFIG_SCSI_QLOGIC_1280=m
--CONFIG_SCSI_QLA_FC=m
--CONFIG_SCSI_QLA_ISCSI=m
--CONFIG_SCSI_LPFC=m
--CONFIG_SCSI_SYM53C416=m
--CONFIG_SCSI_DC395x=m
--CONFIG_SCSI_DC390T=m
--CONFIG_SCSI_T128=m
--CONFIG_SCSI_U14_34F=m
--CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y
--CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y
--CONFIG_SCSI_U14_34F_MAX_TAGS=8
--CONFIG_SCSI_ULTRASTOR=m
--CONFIG_SCSI_NSP32=m
--CONFIG_SCSI_DEBUG=m
--CONFIG_SCSI_SRP=m
--CONFIG_SCSI_LOWLEVEL_PCMCIA=y
--CONFIG_PCMCIA_AHA152X=m
--CONFIG_PCMCIA_FDOMAIN=m
--CONFIG_PCMCIA_NINJA_SCSI=m
--CONFIG_PCMCIA_QLOGIC=m
--CONFIG_PCMCIA_SYM53C500=m
--CONFIG_SCSI_DH=m
--CONFIG_SCSI_DH_RDAC=m
--CONFIG_SCSI_DH_HP_SW=m
--CONFIG_SCSI_DH_EMC=m
--CONFIG_SCSI_DH_ALUA=m
--CONFIG_ATA=m
--# CONFIG_ATA_NONSTANDARD is not set
--CONFIG_ATA_ACPI=y
--CONFIG_SATA_PMP=y
--CONFIG_SATA_AHCI=m
--CONFIG_SATA_SIL24=m
--CONFIG_ATA_SFF=y
--CONFIG_SATA_SVW=m
--CONFIG_ATA_PIIX=m
--CONFIG_SATA_MV=m
--CONFIG_SATA_NV=m
--CONFIG_PDC_ADMA=m
--CONFIG_SATA_QSTOR=m
--CONFIG_SATA_PROMISE=m
--CONFIG_SATA_SX4=m
--CONFIG_SATA_SIL=m
--CONFIG_SATA_SIS=m
--CONFIG_SATA_ULI=m
--CONFIG_SATA_VIA=m
--CONFIG_SATA_VITESSE=m
--CONFIG_SATA_INIC162X=m
--CONFIG_PATA_ACPI=m
--CONFIG_PATA_ALI=m
--CONFIG_PATA_AMD=m
--CONFIG_PATA_ARTOP=m
--CONFIG_PATA_ATIIXP=m
--CONFIG_PATA_CMD640_PCI=m
--CONFIG_PATA_CMD64X=m
--CONFIG_PATA_CS5520=m
--CONFIG_PATA_CS5530=m
--CONFIG_PATA_CS5535=m
--CONFIG_PATA_CS5536=m
--CONFIG_PATA_CYPRESS=m
--CONFIG_PATA_EFAR=m
--CONFIG_ATA_GENERIC=m
--CONFIG_PATA_HPT366=m
--CONFIG_PATA_HPT37X=m
--CONFIG_PATA_HPT3X2N=m
--CONFIG_PATA_HPT3X3=m
--# CONFIG_PATA_HPT3X3_DMA is not set
--CONFIG_PATA_ISAPNP=m
--CONFIG_PATA_IT821X=m
--CONFIG_PATA_IT8213=m
--CONFIG_PATA_JMICRON=m
--CONFIG_PATA_LEGACY=m
--CONFIG_PATA_TRIFLEX=m
--CONFIG_PATA_MARVELL=m
--CONFIG_PATA_MPIIX=m
--CONFIG_PATA_OLDPIIX=m
--CONFIG_PATA_NETCELL=m
--CONFIG_PATA_NINJA32=m
--CONFIG_PATA_NS87410=m
--CONFIG_PATA_NS87415=m
--CONFIG_PATA_OPTI=m
--CONFIG_PATA_OPTIDMA=m
--CONFIG_PATA_PCMCIA=m
--CONFIG_PATA_PDC_OLD=m
--CONFIG_PATA_QDI=m
--CONFIG_PATA_RADISYS=m
--CONFIG_PATA_RZ1000=m
--CONFIG_PATA_SC1200=m
--CONFIG_PATA_SERVERWORKS=m
--CONFIG_PATA_PDC2027X=m
--CONFIG_PATA_SIL680=m
--CONFIG_PATA_SIS=m
--CONFIG_PATA_VIA=m
--CONFIG_PATA_WINBOND=m
--CONFIG_PATA_WINBOND_VLB=m
--CONFIG_PATA_SCH=m
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=m
--CONFIG_MD_RAID0=m
--CONFIG_MD_RAID1=m
--CONFIG_MD_RAID10=m
--CONFIG_MD_RAID456=m
--CONFIG_MD_RAID5_RESHAPE=y
--CONFIG_MD_MULTIPATH=m
--CONFIG_MD_FAULTY=m
--CONFIG_BLK_DEV_DM=m
--# CONFIG_DM_DEBUG is not set
--CONFIG_DM_CRYPT=m
--CONFIG_DM_SNAPSHOT=m
--CONFIG_DM_MIRROR=m
--CONFIG_DM_ZERO=m
--CONFIG_DM_MULTIPATH=m
--CONFIG_DM_DELAY=m
--CONFIG_DM_RAID45=m
--CONFIG_DM_UEVENT=y
--CONFIG_FUSION=y
--CONFIG_FUSION_SPI=m
--CONFIG_FUSION_FC=m
--CONFIG_FUSION_SAS=m
--CONFIG_FUSION_MAX_SGE=128
--CONFIG_FUSION_MAX_FC_SGE=256
--CONFIG_FUSION_CTL=m
--CONFIG_FUSION_LAN=m
--# CONFIG_FUSION_LOGGING is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--
--#
--# Enable only one of the two stacks, unless you know what you are doing
--#
--# CONFIG_FIREWIRE is not set
--CONFIG_IEEE1394=m
--CONFIG_IEEE1394_OHCI1394=m
--CONFIG_IEEE1394_PCILYNX=m
--CONFIG_IEEE1394_SBP2=m
--# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
--CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
--CONFIG_IEEE1394_ETH1394=m
--CONFIG_IEEE1394_RAWIO=m
--CONFIG_IEEE1394_VIDEO1394=m
--CONFIG_IEEE1394_DV1394=m
--# CONFIG_IEEE1394_VERBOSEDEBUG is not set
--CONFIG_I2O=m
--CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
--CONFIG_I2O_EXT_ADAPTEC=y
--CONFIG_I2O_CONFIG=m
--CONFIG_I2O_CONFIG_OLD_IOCTL=y
--CONFIG_I2O_BUS=m
--CONFIG_I2O_BLOCK=m
--CONFIG_I2O_SCSI=m
--CONFIG_I2O_PROC=m
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--CONFIG_IFB=m
--CONFIG_DUMMY=m
--CONFIG_BONDING=m
--CONFIG_MACVLAN=m
--CONFIG_EQUALIZER=m
--CONFIG_TUN=m
--CONFIG_VETH=m
--CONFIG_NET_SB1000=m
--CONFIG_ARCNET=m
--CONFIG_ARCNET_1201=m
--CONFIG_ARCNET_1051=m
--CONFIG_ARCNET_RAW=m
--CONFIG_ARCNET_CAP=m
--CONFIG_ARCNET_COM90xx=m
--CONFIG_ARCNET_COM90xxIO=m
--CONFIG_ARCNET_RIM_I=m
--# CONFIG_ARCNET_COM20020 is not set
--CONFIG_PHYLIB=m
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=m
--CONFIG_DAVICOM_PHY=m
--CONFIG_QSEMI_PHY=m
--CONFIG_LXT_PHY=m
--CONFIG_CICADA_PHY=m
--CONFIG_VITESSE_PHY=m
--CONFIG_SMSC_PHY=m
--CONFIG_BROADCOM_PHY=m
--CONFIG_ICPLUS_PHY=m
--CONFIG_REALTEK_PHY=m
--CONFIG_MDIO_BITBANG=m
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=m
--CONFIG_HAPPYMEAL=m
--CONFIG_SUNGEM=m
--CONFIG_CASSINI=m
--CONFIG_NET_VENDOR_3COM=y
--CONFIG_EL1=m
--CONFIG_EL2=m
--CONFIG_ELPLUS=m
--CONFIG_EL16=m
--CONFIG_EL3=m
--CONFIG_3C515=m
--CONFIG_VORTEX=m
--CONFIG_TYPHOON=m
--CONFIG_LANCE=m
--CONFIG_NET_VENDOR_SMC=y
--CONFIG_WD80x3=m
--CONFIG_ULTRA=m
--CONFIG_SMC9194=m
--CONFIG_ENC28J60=m
--# CONFIG_ENC28J60_WRITEVERIFY is not set
--CONFIG_NET_VENDOR_RACAL=y
--CONFIG_NI52=m
--CONFIG_NI65=m
--CONFIG_NET_TULIP=y
--CONFIG_DE2104X=m
--CONFIG_TULIP=m
--# CONFIG_TULIP_MWI is not set
--# CONFIG_TULIP_MMIO is not set
--CONFIG_TULIP_NAPI=y
--CONFIG_TULIP_NAPI_HW_MITIGATION=y
--CONFIG_DE4X5=m
--CONFIG_WINBOND_840=m
--CONFIG_DM9102=m
--CONFIG_ULI526X=m
--CONFIG_PCMCIA_XIRCOM=m
--CONFIG_AT1700=m
--CONFIG_DEPCA=m
--CONFIG_HP100=m
--CONFIG_NET_ISA=y
--CONFIG_E2100=m
--CONFIG_EWRK3=m
--CONFIG_EEXPRESS=m
--CONFIG_EEXPRESS_PRO=m
--CONFIG_HPLAN_PLUS=m
--CONFIG_HPLAN=m
--CONFIG_LP486E=m
--CONFIG_ETH16I=m
--CONFIG_NE2000=m
--CONFIG_ZNET=m
--CONFIG_SEEQ8005=m
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--CONFIG_PCNET32=m
--CONFIG_AMD8111_ETH=m
--CONFIG_ADAPTEC_STARFIRE=m
--CONFIG_AC3200=m
--CONFIG_APRICOT=m
--CONFIG_B44=m
--CONFIG_B44_PCI_AUTOSELECT=y
--CONFIG_B44_PCICORE_AUTOSELECT=y
--CONFIG_B44_PCI=y
--CONFIG_FORCEDETH=m
--CONFIG_FORCEDETH_NAPI=y
--CONFIG_CS89x0=m
--CONFIG_EEPRO100=m
--CONFIG_E100=m
--CONFIG_FEALNX=m
--CONFIG_NATSEMI=m
--CONFIG_NE2K_PCI=m
--CONFIG_8139CP=m
--CONFIG_8139TOO=m
--# CONFIG_8139TOO_PIO is not set
--# CONFIG_8139TOO_TUNE_TWISTER is not set
--CONFIG_8139TOO_8129=y
--# CONFIG_8139_OLD_RX_RESET is not set
--CONFIG_R6040=m
--CONFIG_SIS900=m
--CONFIG_EPIC100=m
--CONFIG_SUNDANCE=m
--# CONFIG_SUNDANCE_MMIO is not set
--CONFIG_TLAN=m
--CONFIG_VIA_RHINE=m
--# CONFIG_VIA_RHINE_MMIO is not set
--CONFIG_SC92031=m
--CONFIG_NET_POCKET=y
--CONFIG_ATP=m
--CONFIG_DE600=m
--CONFIG_DE620=m
--CONFIG_ATL2=m
--CONFIG_NETDEV_1000=y
--CONFIG_ACENIC=m
--# CONFIG_ACENIC_OMIT_TIGON_I is not set
--CONFIG_DL2K=m
--CONFIG_E1000=m
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--CONFIG_E1000E=m
--CONFIG_IP1000=m
--CONFIG_IGB=m
--CONFIG_IGB_LRO=y
--CONFIG_NS83820=m
--CONFIG_HAMACHI=m
--CONFIG_YELLOWFIN=m
--CONFIG_R8169=m
--CONFIG_R8169_VLAN=y
--CONFIG_SIS190=m
--CONFIG_SKGE=m
--# CONFIG_SKGE_DEBUG is not set
--CONFIG_SKY2=m
--# CONFIG_SKY2_DEBUG is not set
--CONFIG_VIA_VELOCITY=m
--CONFIG_TIGON3=m
--CONFIG_BNX2=m
--CONFIG_QLA3XXX=m
--CONFIG_ATL1=m
--CONFIG_ATL1E=m
--CONFIG_NETDEV_10000=y
--CONFIG_CHELSIO_T1=m
--CONFIG_CHELSIO_T1_1G=y
--CONFIG_CHELSIO_T3=m
--CONFIG_IXGBE=m
--CONFIG_IXGBE_LRO=y
--CONFIG_IXGBE_DCB=y
--CONFIG_IXGB=m
--CONFIG_S2IO=m
--CONFIG_MYRI10GE=m
--CONFIG_NETXEN_NIC=m
--CONFIG_NIU=m
--CONFIG_MLX4_CORE=m
--CONFIG_MLX4_DEBUG=y
--CONFIG_TEHUTI=m
--CONFIG_BNX2X=m
--CONFIG_SFC=m
--# CONFIG_SFC_RESOURCE is not set
--CONFIG_TR=y
--CONFIG_IBMTR=m
--CONFIG_IBMOL=m
--CONFIG_IBMLS=m
--CONFIG_3C359=m
--CONFIG_TMS380TR=m
--CONFIG_TMSPCI=m
--CONFIG_SKISA=m
--CONFIG_PROTEON=m
--CONFIG_ABYSS=m
--CONFIG_SMCTR=m
--
--#
--# Wireless LAN
--#
--CONFIG_WLAN_PRE80211=y
--CONFIG_STRIP=m
--# CONFIG_ARLAN is not set
--CONFIG_WAVELAN=m
--CONFIG_PCMCIA_WAVELAN=m
--CONFIG_PCMCIA_NETWAVE=m
--CONFIG_WLAN_80211=y
--CONFIG_PCMCIA_RAYCS=m
--CONFIG_IPW2100=m
--CONFIG_IPW2100_MONITOR=y
--# CONFIG_IPW2100_DEBUG is not set
--CONFIG_IPW2200=m
--CONFIG_IPW2200_MONITOR=y
--CONFIG_IPW2200_RADIOTAP=y
--CONFIG_IPW2200_PROMISCUOUS=y
--CONFIG_IPW2200_QOS=y
--# CONFIG_IPW2200_DEBUG is not set
--CONFIG_LIBERTAS=m
--CONFIG_LIBERTAS_USB=m
--CONFIG_LIBERTAS_CS=m
--CONFIG_LIBERTAS_SDIO=m
--# CONFIG_LIBERTAS_DEBUG is not set
--CONFIG_AIRO=m
--CONFIG_HERMES=m
--CONFIG_PLX_HERMES=m
--CONFIG_TMD_HERMES=m
--CONFIG_NORTEL_HERMES=m
--CONFIG_PCI_HERMES=m
--CONFIG_PCMCIA_HERMES=m
--CONFIG_PCMCIA_SPECTRUM=m
--CONFIG_ATMEL=m
--CONFIG_PCI_ATMEL=m
--CONFIG_PCMCIA_ATMEL=m
--CONFIG_AIRO_CS=m
--CONFIG_PCMCIA_WL3501=m
--CONFIG_PRISM54=m
--CONFIG_USB_ZD1201=m
--CONFIG_USB_NET_RNDIS_WLAN=m
--CONFIG_RTL8180=m
--CONFIG_RTL8187=m
--CONFIG_ADM8211=m
--CONFIG_MAC80211_HWSIM=m
--CONFIG_P54_COMMON=m
--CONFIG_P54_USB=m
--CONFIG_P54_PCI=m
--CONFIG_ATH5K=m
--# CONFIG_ATH5K_DEBUG is not set
--CONFIG_ATH9K=m
--CONFIG_IWLWIFI=m
--CONFIG_IWLCORE=m
--CONFIG_IWLWIFI_LEDS=y
--CONFIG_IWLWIFI_RFKILL=y
--# CONFIG_IWLWIFI_DEBUG is not set
--CONFIG_IWLAGN=m
--CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
--CONFIG_IWLAGN_LEDS=y
--CONFIG_IWL4965=y
--CONFIG_IWL5000=y
--CONFIG_IWL3945=m
--CONFIG_IWL3945_RFKILL=y
--CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
--CONFIG_IWL3945_LEDS=y
--# CONFIG_IWL3945_DEBUG is not set
--CONFIG_HOSTAP=m
--CONFIG_HOSTAP_FIRMWARE=y
--CONFIG_HOSTAP_FIRMWARE_NVRAM=y
--CONFIG_HOSTAP_PLX=m
--CONFIG_HOSTAP_PCI=m
--CONFIG_HOSTAP_CS=m
--CONFIG_B43=m
--CONFIG_B43_PCI_AUTOSELECT=y
--CONFIG_B43_PCICORE_AUTOSELECT=y
--CONFIG_B43_PCMCIA=y
--CONFIG_B43_PIO=y
--CONFIG_B43_LEDS=y
--CONFIG_B43_RFKILL=y
--# CONFIG_B43_DEBUG is not set
--CONFIG_B43LEGACY=m
--CONFIG_B43LEGACY_PCI_AUTOSELECT=y
--CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
--CONFIG_B43LEGACY_LEDS=y
--CONFIG_B43LEGACY_RFKILL=y
--# CONFIG_B43LEGACY_DEBUG is not set
--CONFIG_B43LEGACY_DMA=y
--CONFIG_B43LEGACY_PIO=y
--CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
--# CONFIG_B43LEGACY_DMA_MODE is not set
--# CONFIG_B43LEGACY_PIO_MODE is not set
--CONFIG_ZD1211RW=m
--# CONFIG_ZD1211RW_DEBUG is not set
--CONFIG_RT2X00=m
--CONFIG_RT2X00_LIB=m
--CONFIG_RT2X00_LIB_PCI=m
--CONFIG_RT2X00_LIB_USB=m
--CONFIG_RT2X00_LIB_FIRMWARE=y
--CONFIG_RT2X00_LIB_RFKILL=y
--CONFIG_RT2X00_LIB_LEDS=y
--CONFIG_RT2400PCI=m
--CONFIG_RT2400PCI_RFKILL=y
--CONFIG_RT2400PCI_LEDS=y
--CONFIG_RT2500PCI=m
--CONFIG_RT2500PCI_RFKILL=y
--CONFIG_RT2500PCI_LEDS=y
--CONFIG_RT61PCI=m
--CONFIG_RT61PCI_RFKILL=y
--CONFIG_RT61PCI_LEDS=y
--CONFIG_RT2500USB=m
--CONFIG_RT2500USB_LEDS=y
--CONFIG_RT73USB=m
--CONFIG_RT73USB_LEDS=y
--# CONFIG_RT2X00_LIB_DEBUGFS is not set
--# CONFIG_RT2X00_DEBUG is not set
--
--#
--# USB Network Adapters
--#
--CONFIG_USB_CATC=m
--CONFIG_USB_KAWETH=m
--CONFIG_USB_PEGASUS=m
--CONFIG_USB_RTL8150=m
--CONFIG_USB_USBNET=m
--CONFIG_USB_NET_AX8817X=m
--CONFIG_USB_NET_CDCETHER=m
--CONFIG_USB_NET_DM9601=m
--CONFIG_USB_NET_GL620A=m
--CONFIG_USB_NET_NET1080=m
--CONFIG_USB_NET_PLUSB=m
--CONFIG_USB_NET_MCS7830=m
--CONFIG_USB_NET_RNDIS_HOST=m
--CONFIG_USB_NET_CDC_SUBSET=m
--CONFIG_USB_ALI_M5632=y
--CONFIG_USB_AN2720=y
--CONFIG_USB_BELKIN=y
--CONFIG_USB_ARMLINUX=y
--CONFIG_USB_EPSON2888=y
--CONFIG_USB_KC2190=y
--CONFIG_USB_NET_ZAURUS=m
--CONFIG_USB_HSO=m
--CONFIG_NET_PCMCIA=y
--CONFIG_PCMCIA_3C589=m
--CONFIG_PCMCIA_3C574=m
--CONFIG_PCMCIA_FMVJ18X=m
--CONFIG_PCMCIA_PCNET=m
--CONFIG_PCMCIA_NMCLAN=m
--CONFIG_PCMCIA_SMC91C92=m
--CONFIG_PCMCIA_XIRC2PS=m
--CONFIG_PCMCIA_AXNET=m
--CONFIG_PCMCIA_IBMTR=m
--CONFIG_WAN=y
--CONFIG_HOSTESS_SV11=m
--# CONFIG_COSA is not set
--CONFIG_LANMEDIA=m
--CONFIG_SEALEVEL_4021=m
--CONFIG_HDLC=m
--CONFIG_HDLC_RAW=m
--CONFIG_HDLC_RAW_ETH=m
--CONFIG_HDLC_CISCO=m
--CONFIG_HDLC_FR=m
--CONFIG_HDLC_PPP=m
--CONFIG_HDLC_X25=m
--CONFIG_PCI200SYN=m
--CONFIG_WANXL=m
--# CONFIG_PC300 is not set
--CONFIG_PC300TOO=m
--CONFIG_N2=m
--CONFIG_C101=m
--CONFIG_FARSYNC=m
--# CONFIG_DSCC4 is not set
--CONFIG_DLCI=m
--CONFIG_DLCI_MAX=8
--CONFIG_SDLA=m
--# CONFIG_WAN_ROUTER_DRIVERS is not set
--CONFIG_LAPBETHER=m
--CONFIG_X25_ASY=m
--# CONFIG_SBNI is not set
--CONFIG_ATM_DRIVERS=y
--CONFIG_ATM_DUMMY=m
--CONFIG_ATM_TCP=m
--CONFIG_ATM_LANAI=m
--CONFIG_ATM_ENI=m
--# CONFIG_ATM_ENI_DEBUG is not set
--# CONFIG_ATM_ENI_TUNE_BURST is not set
--CONFIG_ATM_FIRESTREAM=m
--CONFIG_ATM_ZATM=m
--# CONFIG_ATM_ZATM_DEBUG is not set
--CONFIG_ATM_NICSTAR=m
--CONFIG_ATM_NICSTAR_USE_SUNI=y
--CONFIG_ATM_NICSTAR_USE_IDT77105=y
--CONFIG_ATM_IDT77252=m
--# CONFIG_ATM_IDT77252_DEBUG is not set
--CONFIG_ATM_IDT77252_RCV_ALL=y
--CONFIG_ATM_IDT77252_USE_SUNI=y
--CONFIG_ATM_AMBASSADOR=m
--# CONFIG_ATM_AMBASSADOR_DEBUG is not set
--CONFIG_ATM_HORIZON=m
--# CONFIG_ATM_HORIZON_DEBUG is not set
--CONFIG_ATM_IA=m
--# CONFIG_ATM_IA_DEBUG is not set
--CONFIG_ATM_FORE200E=m
--CONFIG_ATM_FORE200E_USE_TASKLET=y
--CONFIG_ATM_FORE200E_TX_RETRY=16
--CONFIG_ATM_FORE200E_DEBUG=0
--CONFIG_ATM_HE=m
--CONFIG_ATM_HE_USE_SUNI=y
--CONFIG_FDDI=y
--# CONFIG_DEFXX is not set
--CONFIG_SKFP=m
--CONFIG_HIPPI=y
--CONFIG_ROADRUNNER=m
--CONFIG_ROADRUNNER_LARGE_RINGS=y
--CONFIG_PLIP=m
--CONFIG_PPP=m
--CONFIG_PPP_MULTILINK=y
--CONFIG_PPP_FILTER=y
--CONFIG_PPP_ASYNC=m
--CONFIG_PPP_SYNC_TTY=m
--CONFIG_PPP_DEFLATE=m
--CONFIG_PPP_BSDCOMP=m
--CONFIG_PPP_MPPE=m
--CONFIG_PPPOE=m
--CONFIG_PPPOATM=m
--CONFIG_PPPOL2TP=m
--CONFIG_SLIP=m
--CONFIG_SLIP_COMPRESSED=y
--CONFIG_SLHC=m
--CONFIG_SLIP_SMART=y
--CONFIG_SLIP_MODE_SLIP6=y
--CONFIG_NET_FC=y
--CONFIG_NETCONSOLE=m
--CONFIG_NETCONSOLE_DYNAMIC=y
--CONFIG_NETPOLL=y
--CONFIG_NETPOLL_TRAP=y
--CONFIG_NET_POLL_CONTROLLER=y
--CONFIG_VIRTIO_NET=m
--CONFIG_ISDN=y
--CONFIG_MISDN=m
--CONFIG_MISDN_DSP=m
--CONFIG_MISDN_L1OIP=m
--
--#
--# mISDN hardware drivers
--#
--CONFIG_MISDN_HFCPCI=m
--CONFIG_MISDN_HFCMULTI=m
--CONFIG_ISDN_I4L=m
--CONFIG_ISDN_PPP=y
--CONFIG_ISDN_PPP_VJ=y
--CONFIG_ISDN_MPP=y
--CONFIG_IPPP_FILTER=y
--CONFIG_ISDN_PPP_BSDCOMP=m
--CONFIG_ISDN_AUDIO=y
--CONFIG_ISDN_TTY_FAX=y
--CONFIG_ISDN_X25=y
--
--#
--# ISDN feature submodules
--#
--CONFIG_ISDN_DIVERSION=m
--
--#
--# ISDN4Linux hardware drivers
--#
--
--#
--# Passive cards
--#
--CONFIG_ISDN_DRV_HISAX=m
--
--#
--# D-channel protocol features
--#
--CONFIG_HISAX_EURO=y
--CONFIG_DE_AOC=y
--# CONFIG_HISAX_NO_SENDCOMPLETE is not set
--# CONFIG_HISAX_NO_LLC is not set
--# CONFIG_HISAX_NO_KEYPAD is not set
--CONFIG_HISAX_1TR6=y
--CONFIG_HISAX_NI1=y
--CONFIG_HISAX_MAX_CARDS=8
--
--#
--# HiSax supported cards
--#
--CONFIG_HISAX_16_0=y
--CONFIG_HISAX_16_3=y
--CONFIG_HISAX_TELESPCI=y
--CONFIG_HISAX_S0BOX=y
--CONFIG_HISAX_AVM_A1=y
--CONFIG_HISAX_FRITZPCI=y
--CONFIG_HISAX_AVM_A1_PCMCIA=y
--CONFIG_HISAX_ELSA=y
--CONFIG_HISAX_IX1MICROR2=y
--CONFIG_HISAX_DIEHLDIVA=y
--CONFIG_HISAX_ASUSCOM=y
--CONFIG_HISAX_TELEINT=y
--CONFIG_HISAX_HFCS=y
--CONFIG_HISAX_SEDLBAUER=y
--CONFIG_HISAX_SPORTSTER=y
--CONFIG_HISAX_MIC=y
--CONFIG_HISAX_NETJET=y
--CONFIG_HISAX_NETJET_U=y
--CONFIG_HISAX_NICCY=y
--CONFIG_HISAX_ISURF=y
--CONFIG_HISAX_HSTSAPHIR=y
--CONFIG_HISAX_BKM_A4T=y
--CONFIG_HISAX_SCT_QUADRO=y
--CONFIG_HISAX_GAZEL=y
--CONFIG_HISAX_HFC_PCI=y
--CONFIG_HISAX_W6692=y
--CONFIG_HISAX_HFC_SX=y
--CONFIG_HISAX_ENTERNOW_PCI=y
--CONFIG_HISAX_DEBUG=y
--
--#
--# HiSax PCMCIA card service modules
--#
--CONFIG_HISAX_SEDLBAUER_CS=m
--CONFIG_HISAX_ELSA_CS=m
--CONFIG_HISAX_AVM_A1_CS=m
--CONFIG_HISAX_TELES_CS=m
--
--#
--# HiSax sub driver modules
--#
--CONFIG_HISAX_ST5481=m
--CONFIG_HISAX_HFCUSB=m
--CONFIG_HISAX_HFC4S8S=m
--CONFIG_HISAX_FRITZ_PCIPNP=m
--CONFIG_HISAX_HDLC=y
--
--#
--# Active cards
--#
--CONFIG_ISDN_DRV_ICN=m
--CONFIG_ISDN_DRV_PCBIT=m
--CONFIG_ISDN_DRV_SC=m
--CONFIG_ISDN_DRV_ACT2000=m
--CONFIG_HYSDN=m
--CONFIG_HYSDN_CAPI=y
--CONFIG_ISDN_DRV_GIGASET=m
--CONFIG_GIGASET_BASE=m
--CONFIG_GIGASET_M105=m
--CONFIG_GIGASET_M101=m
--# CONFIG_GIGASET_DEBUG is not set
--CONFIG_GIGASET_UNDOCREQ=y
--CONFIG_ISDN_CAPI=m
--CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
--CONFIG_CAPI_TRACE=y
--CONFIG_ISDN_CAPI_MIDDLEWARE=y
--CONFIG_ISDN_CAPI_CAPI20=m
--CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
--CONFIG_ISDN_CAPI_CAPIFS=m
--CONFIG_ISDN_CAPI_CAPIDRV=m
--
--#
--# CAPI hardware drivers
--#
--CONFIG_CAPI_AVM=y
--CONFIG_ISDN_DRV_AVMB1_B1ISA=m
--CONFIG_ISDN_DRV_AVMB1_B1PCI=m
--CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
--CONFIG_ISDN_DRV_AVMB1_T1ISA=m
--CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
--CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
--CONFIG_ISDN_DRV_AVMB1_T1PCI=m
--CONFIG_ISDN_DRV_AVMB1_C4=m
--CONFIG_CAPI_EICON=y
--CONFIG_ISDN_DIVAS=m
--CONFIG_ISDN_DIVAS_BRIPCI=y
--CONFIG_ISDN_DIVAS_PRIPCI=y
--CONFIG_ISDN_DIVAS_DIVACAPI=m
--CONFIG_ISDN_DIVAS_USERIDI=m
--CONFIG_ISDN_DIVAS_MAINT=m
--CONFIG_PHONE=m
--CONFIG_PHONE_IXJ=m
--CONFIG_PHONE_IXJ_PCMCIA=m
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--CONFIG_INPUT_FF_MEMLESS=m
--CONFIG_INPUT_POLLDEV=m
--
--#
--# Userland interfaces
--#
--CONFIG_INPUT_MOUSEDEV=y
--CONFIG_INPUT_MOUSEDEV_PSAUX=y
--CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
--CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
--CONFIG_INPUT_JOYDEV=m
--CONFIG_INPUT_EVDEV=y
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
--CONFIG_KEYBOARD_SUNKBD=m
--# CONFIG_KEYBOARD_LKKBD is not set
--CONFIG_KEYBOARD_XTKBD=m
--CONFIG_KEYBOARD_NEWTON=m
--# CONFIG_KEYBOARD_STOWAWAY is not set
--CONFIG_KEYBOARD_GPIO=m
--CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
--CONFIG_MOUSE_PS2_ALPS=y
--CONFIG_MOUSE_PS2_LOGIPS2PP=y
--CONFIG_MOUSE_PS2_SYNAPTICS=y
--CONFIG_MOUSE_PS2_LIFEBOOK=y
--CONFIG_MOUSE_PS2_TRACKPOINT=y
--# CONFIG_MOUSE_PS2_TOUCHKIT is not set
--CONFIG_MOUSE_SERIAL=m
--CONFIG_MOUSE_APPLETOUCH=m
--CONFIG_MOUSE_BCM5974=m
--CONFIG_MOUSE_INPORT=m
--CONFIG_MOUSE_ATIXL=y
--CONFIG_MOUSE_LOGIBM=m
--CONFIG_MOUSE_PC110PAD=m
--# CONFIG_MOUSE_VSXXXAA is not set
--CONFIG_MOUSE_GPIO=m
--CONFIG_INPUT_JOYSTICK=y
--CONFIG_JOYSTICK_ANALOG=m
--CONFIG_JOYSTICK_A3D=m
--CONFIG_JOYSTICK_ADI=m
--CONFIG_JOYSTICK_COBRA=m
--CONFIG_JOYSTICK_GF2K=m
--CONFIG_JOYSTICK_GRIP=m
--CONFIG_JOYSTICK_GRIP_MP=m
--CONFIG_JOYSTICK_GUILLEMOT=m
--CONFIG_JOYSTICK_INTERACT=m
--CONFIG_JOYSTICK_SIDEWINDER=m
--CONFIG_JOYSTICK_TMDC=m
--CONFIG_JOYSTICK_IFORCE=m
--CONFIG_JOYSTICK_IFORCE_USB=y
--CONFIG_JOYSTICK_IFORCE_232=y
--CONFIG_JOYSTICK_WARRIOR=m
--CONFIG_JOYSTICK_MAGELLAN=m
--CONFIG_JOYSTICK_SPACEORB=m
--CONFIG_JOYSTICK_SPACEBALL=m
--CONFIG_JOYSTICK_STINGER=m
--CONFIG_JOYSTICK_TWIDJOY=m
--CONFIG_JOYSTICK_ZHENHUA=m
--CONFIG_JOYSTICK_DB9=m
--CONFIG_JOYSTICK_GAMECON=m
--CONFIG_JOYSTICK_TURBOGRAFX=m
--CONFIG_JOYSTICK_JOYDUMP=m
--CONFIG_JOYSTICK_XPAD=m
--CONFIG_JOYSTICK_XPAD_FF=y
--CONFIG_JOYSTICK_XPAD_LEDS=y
--CONFIG_INPUT_TABLET=y
--CONFIG_TABLET_USB_ACECAD=m
--CONFIG_TABLET_USB_AIPTEK=m
--CONFIG_TABLET_USB_GTCO=m
--CONFIG_TABLET_USB_KBTAB=m
--CONFIG_TABLET_USB_WACOM=m
--CONFIG_INPUT_TOUCHSCREEN=y
--CONFIG_TOUCHSCREEN_ADS7846=m
--CONFIG_TOUCHSCREEN_FUJITSU=m
--CONFIG_TOUCHSCREEN_GUNZE=m
--CONFIG_TOUCHSCREEN_ELO=m
--CONFIG_TOUCHSCREEN_ELOUSB=m
--CONFIG_TOUCHSCREEN_MTOUCH=m
--CONFIG_TOUCHSCREEN_INEXIO=m
--CONFIG_TOUCHSCREEN_MK712=m
--CONFIG_TOUCHSCREEN_HTCPEN=m
--CONFIG_TOUCHSCREEN_PENMOUNT=m
--CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
--CONFIG_TOUCHSCREEN_TOUCHWIN=m
--CONFIG_TOUCHSCREEN_UCB1400=m
--CONFIG_TOUCHSCREEN_WM97XX=m
--CONFIG_TOUCHSCREEN_WM9705=y
--CONFIG_TOUCHSCREEN_WM9712=y
--CONFIG_TOUCHSCREEN_WM9713=y
--CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
--CONFIG_TOUCHSCREEN_USB_EGALAX=y
--CONFIG_TOUCHSCREEN_USB_PANJIT=y
--CONFIG_TOUCHSCREEN_USB_3M=y
--CONFIG_TOUCHSCREEN_USB_ITM=y
--CONFIG_TOUCHSCREEN_USB_ETURBO=y
--CONFIG_TOUCHSCREEN_USB_GUNZE=y
--CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
--CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
--CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
--CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
--CONFIG_TOUCHSCREEN_USB_GOTOP=y
--CONFIG_TOUCHSCREEN_TOUCHIT213=m
--CONFIG_INPUT_MISC=y
--CONFIG_INPUT_PCSPKR=m
--CONFIG_INPUT_APANEL=m
--CONFIG_INPUT_WISTRON_BTNS=m
--CONFIG_INPUT_ATLAS_BTNS=m
--CONFIG_INPUT_ATI_REMOTE=m
--CONFIG_INPUT_ATI_REMOTE2=m
--CONFIG_INPUT_KEYSPAN_REMOTE=m
--CONFIG_INPUT_POWERMATE=m
--CONFIG_INPUT_YEALINK=m
--CONFIG_INPUT_UINPUT=m
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=m
--CONFIG_SERIO_CT82C710=m
--CONFIG_SERIO_PARKBD=m
--CONFIG_SERIO_PCIPS2=m
--CONFIG_SERIO_LIBPS2=y
--CONFIG_SERIO_RAW=m
--CONFIG_GAMEPORT=m
--CONFIG_GAMEPORT_NS558=m
--CONFIG_GAMEPORT_L4=m
--CONFIG_GAMEPORT_EMU10K1=m
--CONFIG_GAMEPORT_FM801=m
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_CONSOLE_TRANSLATIONS=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--CONFIG_VT_HW_CONSOLE_BINDING=y
--CONFIG_DEVKMEM=y
--CONFIG_SERIAL_NONSTANDARD=y
--CONFIG_COMPUTONE=m
--CONFIG_ROCKETPORT=m
--CONFIG_CYCLADES=m
--CONFIG_CYZ_INTR=y
--CONFIG_DIGIEPCA=m
--CONFIG_ESPSERIAL=m
--CONFIG_MOXA_INTELLIO=m
--CONFIG_MOXA_SMARTIO=m
--CONFIG_ISI=m
--CONFIG_SYNCLINK=m
--CONFIG_SYNCLINKMP=m
--CONFIG_SYNCLINK_GT=m
--CONFIG_N_HDLC=m
--CONFIG_RISCOM8=m
--CONFIG_SPECIALIX=m
--CONFIG_SX=m
--CONFIG_RIO=m
--CONFIG_RIO_OLDPCI=y
--CONFIG_STALDRV=y
--CONFIG_NOZOMI=m
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_FIX_EARLYCON_MEM=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_PNP=y
--CONFIG_SERIAL_8250_CS=m
--CONFIG_SERIAL_8250_NR_UARTS=16
--CONFIG_SERIAL_8250_RUNTIME_UARTS=8
--CONFIG_SERIAL_8250_EXTENDED=y
--CONFIG_SERIAL_8250_MANY_PORTS=y
--CONFIG_SERIAL_8250_FOURPORT=m
--CONFIG_SERIAL_8250_ACCENT=m
--CONFIG_SERIAL_8250_BOCA=m
--CONFIG_SERIAL_8250_EXAR_ST16C554=m
--CONFIG_SERIAL_8250_HUB6=m
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--CONFIG_SERIAL_8250_RSA=y
--
--#
--# Non-8250 serial port support
--#
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_JSM=m
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=0
--CONFIG_PRINTER=m
--# CONFIG_LP_CONSOLE is not set
--CONFIG_PPDEV=m
--CONFIG_HVC_DRIVER=y
--CONFIG_VIRTIO_CONSOLE=m
--CONFIG_IPMI_HANDLER=m
--CONFIG_IPMI_PANIC_EVENT=y
--CONFIG_IPMI_PANIC_STRING=y
--CONFIG_IPMI_DEVICE_INTERFACE=m
--CONFIG_IPMI_SI=m
--CONFIG_IPMI_WATCHDOG=m
--CONFIG_IPMI_POWEROFF=m
--CONFIG_HW_RANDOM=y
--CONFIG_HW_RANDOM_INTEL=m
--CONFIG_HW_RANDOM_AMD=m
--CONFIG_HW_RANDOM_GEODE=m
--CONFIG_HW_RANDOM_VIA=m
--CONFIG_HW_RANDOM_VIRTIO=m
--CONFIG_NVRAM=m
--CONFIG_DTLK=m
--CONFIG_R3964=m
--CONFIG_APPLICOM=m
--CONFIG_SONYPI=m
--
--#
--# PCMCIA character devices
--#
--CONFIG_SYNCLINK_CS=m
--CONFIG_CARDMAN_4000=m
--CONFIG_CARDMAN_4040=m
--CONFIG_IPWIRELESS=m
--CONFIG_MWAVE=m
--CONFIG_SCx200_GPIO=m
--CONFIG_PC8736x_GPIO=m
--CONFIG_NSC_GPIO=m
--CONFIG_CS5535_GPIO=m
--CONFIG_RAW_DRIVER=m
--CONFIG_MAX_RAW_DEVS=4096
--CONFIG_HPET=y
--CONFIG_HPET_MMAP=y
--CONFIG_HANGCHECK_TIMER=m
--CONFIG_TCG_TPM=m
--CONFIG_TCG_TIS=m
--CONFIG_TCG_NSC=m
--CONFIG_TCG_ATMEL=m
--CONFIG_TCG_INFINEON=m
--CONFIG_TELCLOCK=m
--CONFIG_DEVPORT=y
--CONFIG_CRASHER=m
--CONFIG_I2C=m
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=m
--CONFIG_I2C_HELPER_AUTO=y
--CONFIG_I2C_ALGOBIT=m
--CONFIG_I2C_ALGOPCA=m
--
--#
--# I2C Hardware Bus support
--#
--
--#
--# PC SMBus host controller drivers
--#
--CONFIG_I2C_ALI1535=m
--CONFIG_I2C_ALI1563=m
--CONFIG_I2C_ALI15X3=m
--CONFIG_I2C_AMD756=m
--CONFIG_I2C_AMD756_S4882=m
--CONFIG_I2C_AMD8111=m
--CONFIG_I2C_I801=m
--CONFIG_I2C_ISCH=m
--CONFIG_I2C_PIIX4=m
--CONFIG_I2C_NFORCE2=m
--CONFIG_I2C_NFORCE2_S4985=m
--CONFIG_I2C_SIS5595=m
--CONFIG_I2C_SIS630=m
--CONFIG_I2C_SIS96X=m
--CONFIG_I2C_VIA=m
--CONFIG_I2C_VIAPRO=m
--
--#
--# I2C system bus drivers (mostly embedded / system-on-chip)
--#
--CONFIG_I2C_GPIO=m
--CONFIG_I2C_OCORES=m
--# CONFIG_I2C_SIMTEC is not set
--
--#
--# External I2C/SMBus adapter drivers
--#
--CONFIG_I2C_PARPORT=m
--CONFIG_I2C_PARPORT_LIGHT=m
--CONFIG_I2C_TAOS_EVM=m
--CONFIG_I2C_TINY_USB=m
--
--#
--# Graphics adapter I2C/DDC channel drivers
--#
--CONFIG_I2C_VOODOO3=m
--
--#
--# Other I2C/SMBus bus drivers
--#
--CONFIG_I2C_PCA_ISA=m
--CONFIG_I2C_PCA_PLATFORM=m
--CONFIG_I2C_STUB=m
--CONFIG_SCx200_I2C=m
--CONFIG_SCx200_I2C_SCL=12
--CONFIG_SCx200_I2C_SDA=13
--CONFIG_SCx200_ACB=m
--
--#
--# Miscellaneous I2C Chip support
--#
--CONFIG_DS1682=m
--CONFIG_AT24=m
--CONFIG_SENSORS_EEPROM=m
--CONFIG_SENSORS_PCF8591=m
--# CONFIG_TPS65010 is not set
--CONFIG_SENSORS_MAX6875=m
--CONFIG_SENSORS_TSL2550=m
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--CONFIG_SPI=y
--CONFIG_SPI_DEBUG=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=m
--CONFIG_SPI_BUTTERFLY=m
--CONFIG_SPI_LM70_LLP=m
--
--#
--# SPI Protocol Masters
--#
--CONFIG_SPI_AT25=m
--CONFIG_SPI_SPIDEV=m
--CONFIG_SPI_TLE62X0=m
--CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
--CONFIG_GPIOLIB=y
--# CONFIG_DEBUG_GPIO is not set
--CONFIG_GPIO_SYSFS=y
--
--#
--# I2C GPIO expanders:
--#
--CONFIG_GPIO_MAX732X=m
--CONFIG_GPIO_PCA953X=m
--CONFIG_GPIO_PCF857X=m
--
--#
--# PCI GPIO expanders:
--#
--
--#
--# SPI GPIO expanders:
--#
--CONFIG_GPIO_MAX7301=m
--CONFIG_GPIO_MCP23S08=m
--CONFIG_W1=m
--CONFIG_W1_CON=y
--
--#
--# 1-wire Bus Masters
--#
--CONFIG_W1_MASTER_MATROX=m
--CONFIG_W1_MASTER_DS2490=m
--CONFIG_W1_MASTER_DS2482=m
--CONFIG_W1_MASTER_GPIO=m
--
--#
--# 1-wire Slaves
--#
--CONFIG_W1_SLAVE_THERM=m
--CONFIG_W1_SLAVE_SMEM=m
--CONFIG_W1_SLAVE_DS2433=m
--CONFIG_W1_SLAVE_DS2433_CRC=y
--CONFIG_W1_SLAVE_DS2760=m
--CONFIG_POWER_SUPPLY=y
--# CONFIG_POWER_SUPPLY_DEBUG is not set
--CONFIG_PDA_POWER=m
--CONFIG_BATTERY_DS2760=m
--CONFIG_BATTERY_OLPC=m
--CONFIG_HWMON=m
--CONFIG_HWMON_VID=m
--CONFIG_SENSORS_ABITUGURU=m
--CONFIG_SENSORS_ABITUGURU3=m
--CONFIG_SENSORS_AD7414=m
--CONFIG_SENSORS_AD7418=m
--CONFIG_SENSORS_ADCXX=m
--CONFIG_SENSORS_ADM1021=m
--CONFIG_SENSORS_ADM1025=m
--CONFIG_SENSORS_ADM1026=m
--CONFIG_SENSORS_ADM1029=m
--CONFIG_SENSORS_ADM1031=m
--CONFIG_SENSORS_ADM9240=m
--CONFIG_SENSORS_ADT7470=m
--CONFIG_SENSORS_ADT7473=m
--CONFIG_SENSORS_K8TEMP=m
--CONFIG_SENSORS_ASB100=m
--CONFIG_SENSORS_ATXP1=m
--CONFIG_SENSORS_DS1621=m
--CONFIG_SENSORS_I5K_AMB=m
--CONFIG_SENSORS_F71805F=m
--CONFIG_SENSORS_F71882FG=m
--CONFIG_SENSORS_F75375S=m
--CONFIG_SENSORS_FSCHER=m
--CONFIG_SENSORS_FSCPOS=m
--CONFIG_SENSORS_FSCHMD=m
--CONFIG_SENSORS_GL518SM=m
--CONFIG_SENSORS_GL520SM=m
--CONFIG_SENSORS_CORETEMP=m
--CONFIG_SENSORS_IBMAEM=m
--CONFIG_SENSORS_IBMPEX=m
--CONFIG_SENSORS_IT87=m
--CONFIG_SENSORS_LM63=m
--CONFIG_SENSORS_LM70=m
--CONFIG_SENSORS_LM75=m
--CONFIG_SENSORS_LM77=m
--CONFIG_SENSORS_LM78=m
--CONFIG_SENSORS_LM80=m
--CONFIG_SENSORS_LM83=m
--CONFIG_SENSORS_LM85=m
--CONFIG_SENSORS_LM87=m
--CONFIG_SENSORS_LM90=m
--CONFIG_SENSORS_LM92=m
--CONFIG_SENSORS_LM93=m
--CONFIG_SENSORS_MAX1619=m
--CONFIG_SENSORS_MAX6650=m
--CONFIG_SENSORS_PC87360=m
--CONFIG_SENSORS_PC87427=m
--CONFIG_SENSORS_SIS5595=m
--CONFIG_SENSORS_DME1737=m
--CONFIG_SENSORS_SMSC47M1=m
--CONFIG_SENSORS_SMSC47M192=m
--CONFIG_SENSORS_SMSC47B397=m
--CONFIG_SENSORS_ADS7828=m
--CONFIG_SENSORS_THMC50=m
--CONFIG_SENSORS_VIA686A=m
--CONFIG_SENSORS_VT1211=m
--CONFIG_SENSORS_VT8231=m
--CONFIG_SENSORS_W83781D=m
--CONFIG_SENSORS_W83791D=m
--CONFIG_SENSORS_W83792D=m
--CONFIG_SENSORS_W83793=m
--CONFIG_SENSORS_W83L785TS=m
--CONFIG_SENSORS_W83L786NG=m
--CONFIG_SENSORS_W83627HF=m
--CONFIG_SENSORS_W83627EHF=m
--CONFIG_SENSORS_HDAPS=m
--CONFIG_SENSORS_APPLESMC=m
--# CONFIG_HWMON_DEBUG_CHIP is not set
--CONFIG_THERMAL=m
--CONFIG_THERMAL_HWMON=y
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--CONFIG_SOFT_WATCHDOG=m
--CONFIG_ACQUIRE_WDT=m
--CONFIG_ADVANTECH_WDT=m
--CONFIG_ALIM1535_WDT=m
--CONFIG_ALIM7101_WDT=m
--CONFIG_SC520_WDT=m
--CONFIG_EUROTECH_WDT=m
--CONFIG_IB700_WDT=m
--CONFIG_IBMASR=m
--CONFIG_WAFER_WDT=m
--CONFIG_I6300ESB_WDT=m
--CONFIG_ITCO_WDT=m
--CONFIG_ITCO_VENDOR_SUPPORT=y
--CONFIG_IT8712F_WDT=m
--CONFIG_HP_WATCHDOG=m
--CONFIG_SC1200_WDT=m
--CONFIG_SCx200_WDT=m
--CONFIG_PC87413_WDT=m
--CONFIG_60XX_WDT=m
--CONFIG_SBC8360_WDT=m
--CONFIG_SBC7240_WDT=m
--CONFIG_CPU5_WDT=m
--CONFIG_SMSC37B787_WDT=m
--CONFIG_W83627HF_WDT=m
--CONFIG_W83697HF_WDT=m
--CONFIG_W83877F_WDT=m
--CONFIG_W83977F_WDT=m
--CONFIG_MACHZ_WDT=m
--CONFIG_SBC_EPX_C3_WATCHDOG=m
--
--#
--# ISA-based Watchdog Cards
--#
--CONFIG_PCWATCHDOG=m
--CONFIG_MIXCOMWD=m
--CONFIG_WDT=m
--CONFIG_WDT_501=y
--
--#
--# PCI-based Watchdog Cards
--#
--CONFIG_PCIPCWATCHDOG=m
--CONFIG_WDTPCI=m
--CONFIG_WDT_501_PCI=y
--
--#
--# USB-based Watchdog Cards
--#
--CONFIG_USBPCWATCHDOG=m
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--CONFIG_SSB=m
--CONFIG_SSB_SPROM=y
--CONFIG_SSB_BLOCKIO=y
--CONFIG_SSB_PCIHOST_POSSIBLE=y
--CONFIG_SSB_PCIHOST=y
--CONFIG_SSB_B43_PCI_BRIDGE=y
--CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
--CONFIG_SSB_PCMCIAHOST=y
--# CONFIG_SSB_DEBUG is not set
--CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
--CONFIG_SSB_DRIVER_PCICORE=y
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_CORE is not set
--CONFIG_MFD_SM501=m
--CONFIG_MFD_SM501_GPIO=y
--CONFIG_HTC_PASIC3=m
--# CONFIG_MFD_TMIO is not set
--
--#
--# Multimedia devices
--#
--
--#
--# Multimedia core support
--#
--CONFIG_VIDEO_DEV=m
--CONFIG_VIDEO_V4L2_COMMON=m
--CONFIG_VIDEO_ALLOW_V4L1=y
--CONFIG_VIDEO_V4L1_COMPAT=y
--CONFIG_DVB_CORE=m
--CONFIG_VIDEO_MEDIA=m
--
--#
--# Multimedia drivers
--#
--CONFIG_VIDEO_SAA7146=m
--CONFIG_VIDEO_SAA7146_VV=m
--CONFIG_MEDIA_ATTACH=y
--CONFIG_MEDIA_TUNER=m
--# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
--CONFIG_MEDIA_TUNER_SIMPLE=m
--CONFIG_MEDIA_TUNER_TDA8290=m
--CONFIG_MEDIA_TUNER_TDA827X=m
--CONFIG_MEDIA_TUNER_TDA18271=m
--CONFIG_MEDIA_TUNER_TDA9887=m
--CONFIG_MEDIA_TUNER_TEA5761=m
--CONFIG_MEDIA_TUNER_TEA5767=m
--CONFIG_MEDIA_TUNER_MT20XX=m
--CONFIG_MEDIA_TUNER_MT2060=m
--CONFIG_MEDIA_TUNER_MT2266=m
--CONFIG_MEDIA_TUNER_MT2131=m
--CONFIG_MEDIA_TUNER_QT1010=m
--CONFIG_MEDIA_TUNER_XC2028=m
--CONFIG_MEDIA_TUNER_XC5000=m
--CONFIG_MEDIA_TUNER_MXL5005S=m
--CONFIG_MEDIA_TUNER_MXL5007T=m
--CONFIG_VIDEO_V4L2=m
--CONFIG_VIDEO_V4L1=m
--CONFIG_VIDEOBUF_GEN=m
--CONFIG_VIDEOBUF_DMA_SG=m
--CONFIG_VIDEOBUF_VMALLOC=m
--CONFIG_VIDEOBUF_DMA_CONTIG=m
--CONFIG_VIDEOBUF_DVB=m
--CONFIG_VIDEO_BTCX=m
--CONFIG_VIDEO_IR=m
--CONFIG_VIDEO_TVEEPROM=m
--CONFIG_VIDEO_TUNER=m
--CONFIG_VIDEO_CAPTURE_DRIVERS=y
--# CONFIG_VIDEO_ADV_DEBUG is not set
--CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
--CONFIG_VIDEO_IR_I2C=m
--CONFIG_VIDEO_TVAUDIO=m
--CONFIG_VIDEO_TDA7432=m
--CONFIG_VIDEO_TDA9840=m
--CONFIG_VIDEO_TDA9875=m
--CONFIG_VIDEO_TEA6415C=m
--CONFIG_VIDEO_TEA6420=m
--CONFIG_VIDEO_MSP3400=m
--CONFIG_VIDEO_CS5345=m
--CONFIG_VIDEO_CS53L32A=m
--CONFIG_VIDEO_M52790=m
--CONFIG_VIDEO_WM8775=m
--CONFIG_VIDEO_WM8739=m
--CONFIG_VIDEO_VP27SMPX=m
--CONFIG_VIDEO_BT819=m
--CONFIG_VIDEO_BT856=m
--CONFIG_VIDEO_KS0127=m
--CONFIG_VIDEO_OV7670=m
--CONFIG_VIDEO_SAA7110=m
--CONFIG_VIDEO_SAA7111=m
--CONFIG_VIDEO_SAA7114=m
--CONFIG_VIDEO_SAA711X=m
--CONFIG_VIDEO_SAA717X=m
--CONFIG_VIDEO_TVP5150=m
--CONFIG_VIDEO_VPX3220=m
--CONFIG_VIDEO_CX25840=m
--CONFIG_VIDEO_CX2341X=m
--CONFIG_VIDEO_SAA7127=m
--CONFIG_VIDEO_SAA7185=m
--CONFIG_VIDEO_ADV7170=m
--CONFIG_VIDEO_ADV7175=m
--CONFIG_VIDEO_UPD64031A=m
--CONFIG_VIDEO_UPD64083=m
--CONFIG_VIDEO_VIVI=m
--CONFIG_VIDEO_BT848=m
--CONFIG_VIDEO_BT848_DVB=y
--CONFIG_VIDEO_SAA6588=m
--CONFIG_VIDEO_PMS=m
--CONFIG_VIDEO_BWQCAM=m
--CONFIG_VIDEO_CQCAM=m
--CONFIG_VIDEO_W9966=m
--CONFIG_VIDEO_CPIA=m
--CONFIG_VIDEO_CPIA_PP=m
--CONFIG_VIDEO_CPIA_USB=m
--CONFIG_VIDEO_CPIA2=m
--CONFIG_VIDEO_SAA5246A=m
--CONFIG_VIDEO_SAA5249=m
--# CONFIG_TUNER_3036 is not set
--CONFIG_VIDEO_STRADIS=m
--CONFIG_VIDEO_ZORAN=m
--CONFIG_VIDEO_ZORAN_DC30=m
--CONFIG_VIDEO_ZORAN_ZR36060=m
--CONFIG_VIDEO_ZORAN_BUZ=m
--CONFIG_VIDEO_ZORAN_DC10=m
--CONFIG_VIDEO_ZORAN_LML33=m
--CONFIG_VIDEO_ZORAN_LML33R10=m
--CONFIG_VIDEO_ZORAN_AVS6EYES=m
--CONFIG_VIDEO_MEYE=m
--CONFIG_VIDEO_SAA7134=m
--CONFIG_VIDEO_SAA7134_ALSA=m
--CONFIG_VIDEO_SAA7134_DVB=m
--CONFIG_VIDEO_MXB=m
--# CONFIG_VIDEO_DPC is not set
--CONFIG_VIDEO_HEXIUM_ORION=m
--CONFIG_VIDEO_HEXIUM_GEMINI=m
--CONFIG_VIDEO_CX88=m
--CONFIG_VIDEO_CX88_ALSA=m
--CONFIG_VIDEO_CX88_BLACKBIRD=m
--CONFIG_VIDEO_CX88_DVB=m
--CONFIG_VIDEO_CX88_VP3054=m
--CONFIG_VIDEO_CX23885=m
--CONFIG_VIDEO_AU0828=m
--CONFIG_VIDEO_IVTV=m
--CONFIG_VIDEO_FB_IVTV=m
--CONFIG_VIDEO_CX18=m
--CONFIG_VIDEO_CAFE_CCIC=m
--CONFIG_V4L_USB_DRIVERS=y
--CONFIG_USB_VIDEO_CLASS=m
--CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
--CONFIG_USB_GSPCA=m
--CONFIG_VIDEO_PVRUSB2=m
--CONFIG_VIDEO_PVRUSB2_SYSFS=y
--CONFIG_VIDEO_PVRUSB2_DVB=y
--# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
--CONFIG_VIDEO_EM28XX=m
--CONFIG_VIDEO_EM28XX_ALSA=m
--CONFIG_VIDEO_EM28XX_DVB=m
--CONFIG_VIDEO_USBVISION=m
--CONFIG_VIDEO_USBVIDEO=m
--CONFIG_USB_VICAM=m
--CONFIG_USB_IBMCAM=m
--CONFIG_USB_KONICAWC=m
--CONFIG_USB_QUICKCAM_MESSENGER=m
--CONFIG_USB_ET61X251=m
--CONFIG_VIDEO_OVCAMCHIP=m
--CONFIG_USB_W9968CF=m
--CONFIG_USB_OV511=m
--CONFIG_USB_SE401=m
--CONFIG_USB_SN9C102=m
--CONFIG_USB_STV680=m
--CONFIG_USB_ZC0301=m
--CONFIG_USB_PWC=m
--# CONFIG_USB_PWC_DEBUG is not set
--CONFIG_USB_ZR364XX=m
--CONFIG_USB_STKWEBCAM=m
--CONFIG_USB_S2255=m
--CONFIG_SOC_CAMERA=m
--CONFIG_SOC_CAMERA_MT9M001=m
--CONFIG_MT9M001_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_MT9V022=m
--CONFIG_MT9V022_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_PLATFORM=m
--CONFIG_VIDEO_SH_MOBILE_CEU=m
--CONFIG_RADIO_ADAPTERS=y
--CONFIG_RADIO_CADET=m
--CONFIG_RADIO_RTRACK=m
--CONFIG_RADIO_RTRACK2=m
--CONFIG_RADIO_AZTECH=m
--CONFIG_RADIO_GEMTEK=m
--CONFIG_RADIO_GEMTEK_PCI=m
--CONFIG_RADIO_MAXIRADIO=m
--CONFIG_RADIO_MAESTRO=m
--CONFIG_RADIO_SF16FMI=m
--CONFIG_RADIO_SF16FMR2=m
--CONFIG_RADIO_TERRATEC=m
--CONFIG_RADIO_TRUST=m
--CONFIG_RADIO_TYPHOON=m
--CONFIG_RADIO_TYPHOON_PROC_FS=y
--CONFIG_RADIO_ZOLTRIX=m
--CONFIG_USB_DSBR=m
--CONFIG_USB_SI470X=m
--CONFIG_DVB_CAPTURE_DRIVERS=y
--
--#
--# Supported SAA7146 based PCI Adapters
--#
--CONFIG_TTPCI_EEPROM=m
--CONFIG_DVB_AV7110=m
--# CONFIG_DVB_AV7110_FIRMWARE is not set
--CONFIG_DVB_AV7110_OSD=y
--CONFIG_DVB_BUDGET_CORE=m
--CONFIG_DVB_BUDGET=m
--CONFIG_DVB_BUDGET_CI=m
--CONFIG_DVB_BUDGET_AV=m
--CONFIG_DVB_BUDGET_PATCH=m
--
--#
--# Supported USB Adapters
--#
--CONFIG_DVB_USB=m
--# CONFIG_DVB_USB_DEBUG is not set
--CONFIG_DVB_USB_A800=m
--CONFIG_DVB_USB_DIBUSB_MB=m
--# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
--CONFIG_DVB_USB_DIBUSB_MC=m
--CONFIG_DVB_USB_DIB0700=m
--CONFIG_DVB_USB_UMT_010=m
--# CONFIG_DVB_USB_CXUSB is not set
--CONFIG_DVB_USB_M920X=m
--CONFIG_DVB_USB_GL861=m
--CONFIG_DVB_USB_AU6610=m
--CONFIG_DVB_USB_DIGITV=m
--CONFIG_DVB_USB_VP7045=m
--CONFIG_DVB_USB_VP702X=m
--CONFIG_DVB_USB_GP8PSK=m
--CONFIG_DVB_USB_NOVA_T_USB2=m
--CONFIG_DVB_USB_TTUSB2=m
--CONFIG_DVB_USB_DTT200U=m
--CONFIG_DVB_USB_OPERA1=m
--CONFIG_DVB_USB_AF9005=m
--CONFIG_DVB_USB_AF9005_REMOTE=m
--CONFIG_DVB_USB_DW2102=m
--CONFIG_DVB_USB_ANYSEE=m
--CONFIG_DVB_TTUSB_BUDGET=m
--CONFIG_DVB_TTUSB_DEC=m
--CONFIG_DVB_CINERGYT2=m
--# CONFIG_DVB_CINERGYT2_TUNING is not set
--CONFIG_DVB_SIANO_SMS1XXX=m
--CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
--
--#
--# Supported FlexCopII (B2C2) Adapters
--#
--CONFIG_DVB_B2C2_FLEXCOP=m
--CONFIG_DVB_B2C2_FLEXCOP_PCI=m
--CONFIG_DVB_B2C2_FLEXCOP_USB=m
--# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
--
--#
--# Supported BT878 Adapters
--#
--CONFIG_DVB_BT8XX=m
--
--#
--# Supported Pluto2 Adapters
--#
--CONFIG_DVB_PLUTO2=m
--
--#
--# Supported DVB Frontends
--#
--
--#
--# Customise DVB Frontends
--#
--# CONFIG_DVB_FE_CUSTOMISE is not set
--
--#
--# DVB-S (satellite) frontends
--#
--CONFIG_DVB_CX24110=m
--CONFIG_DVB_CX24123=m
--CONFIG_DVB_MT312=m
--CONFIG_DVB_S5H1420=m
--CONFIG_DVB_STV0299=m
--CONFIG_DVB_TDA8083=m
--CONFIG_DVB_TDA10086=m
--CONFIG_DVB_VES1X93=m
--CONFIG_DVB_TUNER_ITD1000=m
--CONFIG_DVB_TDA826X=m
--CONFIG_DVB_TUA6100=m
--
--#
--# DVB-T (terrestrial) frontends
--#
--CONFIG_DVB_SP8870=m
--CONFIG_DVB_SP887X=m
--CONFIG_DVB_CX22700=m
--CONFIG_DVB_CX22702=m
--CONFIG_DVB_DRX397XD=m
--CONFIG_DVB_L64781=m
--CONFIG_DVB_TDA1004X=m
--CONFIG_DVB_NXT6000=m
--CONFIG_DVB_MT352=m
--CONFIG_DVB_ZL10353=m
--CONFIG_DVB_DIB3000MB=m
--CONFIG_DVB_DIB3000MC=m
--CONFIG_DVB_DIB7000M=m
--CONFIG_DVB_DIB7000P=m
--CONFIG_DVB_TDA10048=m
--
--#
--# DVB-C (cable) frontends
--#
--CONFIG_DVB_VES1820=m
--CONFIG_DVB_TDA10021=m
--CONFIG_DVB_TDA10023=m
--CONFIG_DVB_STV0297=m
--
--#
--# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
--#
--CONFIG_DVB_NXT200X=m
--CONFIG_DVB_OR51211=m
--CONFIG_DVB_OR51132=m
--CONFIG_DVB_BCM3510=m
--CONFIG_DVB_LGDT330X=m
--CONFIG_DVB_S5H1409=m
--CONFIG_DVB_AU8522=m
--CONFIG_DVB_S5H1411=m
--
--#
--# Digital terrestrial only tuners/PLL
--#
--CONFIG_DVB_PLL=m
--CONFIG_DVB_TUNER_DIB0070=m
--
--#
--# SEC control devices for DVB-S
--#
--CONFIG_DVB_LNBP21=m
--CONFIG_DVB_ISL6405=m
--CONFIG_DVB_ISL6421=m
--CONFIG_DAB=y
--CONFIG_USB_DABUSB=m
--
--#
--# Graphics support
--#
--CONFIG_AGP=m
--CONFIG_AGP_ALI=m
--CONFIG_AGP_ATI=m
--CONFIG_AGP_AMD=m
--CONFIG_AGP_AMD64=m
--CONFIG_AGP_INTEL=m
--CONFIG_AGP_NVIDIA=m
--CONFIG_AGP_SIS=m
--CONFIG_AGP_SWORKS=m
--CONFIG_AGP_VIA=m
--CONFIG_AGP_EFFICEON=m
--CONFIG_DRM=m
--CONFIG_DRM_TDFX=m
--CONFIG_DRM_R128=m
--CONFIG_DRM_RADEON=m
--CONFIG_DRM_I810=m
--CONFIG_DRM_I830=m
--CONFIG_DRM_I915=m
--CONFIG_DRM_MGA=m
--CONFIG_DRM_SIS=m
--CONFIG_DRM_VIA=m
--CONFIG_DRM_VIA_CHROME9=m
--CONFIG_DRM_SAVAGE=m
--CONFIG_VGASTATE=m
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--CONFIG_FB=y
--CONFIG_FIRMWARE_EDID=y
--CONFIG_FB_DDC=m
--CONFIG_FB_CFB_FILLRECT=y
--CONFIG_FB_CFB_COPYAREA=y
--CONFIG_FB_CFB_IMAGEBLIT=y
--# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
--CONFIG_FB_SYS_FILLRECT=m
--CONFIG_FB_SYS_COPYAREA=m
--CONFIG_FB_SYS_IMAGEBLIT=m
--# CONFIG_FB_FOREIGN_ENDIAN is not set
--CONFIG_FB_SYS_FOPS=m
--CONFIG_FB_DEFERRED_IO=y
--CONFIG_FB_HECUBA=m
--CONFIG_FB_SVGALIB=m
--# CONFIG_FB_MACMODES is not set
--CONFIG_FB_BACKLIGHT=y
--CONFIG_FB_MODE_HELPERS=y
--CONFIG_FB_TILEBLITTING=y
--
--#
--# Frame buffer hardware drivers
--#
--CONFIG_FB_CIRRUS=m
--CONFIG_FB_PM2=m
--CONFIG_FB_PM2_FIFO_DISCONNECT=y
--CONFIG_FB_CYBER2000=m
--CONFIG_FB_ARC=m
--# CONFIG_FB_ASILIANT is not set
--CONFIG_FB_IMSTT=y
--CONFIG_FB_VGA16=m
--CONFIG_FB_UVESA=m
--CONFIG_FB_VESA=y
--CONFIG_FB_EFI=y
--CONFIG_FB_N411=m
--CONFIG_FB_HGA=m
--CONFIG_FB_HGA_ACCEL=y
--CONFIG_FB_S1D13XXX=m
--CONFIG_FB_NVIDIA=m
--CONFIG_FB_NVIDIA_I2C=y
--# CONFIG_FB_NVIDIA_DEBUG is not set
--CONFIG_FB_NVIDIA_BACKLIGHT=y
--CONFIG_FB_RIVA=m
--CONFIG_FB_RIVA_I2C=y
--# CONFIG_FB_RIVA_DEBUG is not set
--CONFIG_FB_RIVA_BACKLIGHT=y
--CONFIG_FB_I810=m
--CONFIG_FB_I810_GTF=y
--CONFIG_FB_I810_I2C=y
--CONFIG_FB_LE80578=m
--CONFIG_FB_CARILLO_RANCH=m
--CONFIG_FB_INTEL=m
--# CONFIG_FB_INTEL_DEBUG is not set
--CONFIG_FB_INTEL_I2C=y
--CONFIG_FB_MATROX=m
--CONFIG_FB_MATROX_MILLENIUM=y
--CONFIG_FB_MATROX_MYSTIQUE=y
--CONFIG_FB_MATROX_G=y
--# CONFIG_FB_MATROX_I2C is not set
--CONFIG_FB_MATROX_MULTIHEAD=y
--CONFIG_FB_RADEON=m
--CONFIG_FB_RADEON_I2C=y
--CONFIG_FB_RADEON_BACKLIGHT=y
--# CONFIG_FB_RADEON_DEBUG is not set
--# CONFIG_FB_ATY128 is not set
--CONFIG_FB_ATY=m
--CONFIG_FB_ATY_CT=y
--CONFIG_FB_ATY_GENERIC_LCD=y
--CONFIG_FB_ATY_GX=y
--CONFIG_FB_ATY_BACKLIGHT=y
--CONFIG_FB_S3=m
--CONFIG_FB_SAVAGE=m
--CONFIG_FB_SAVAGE_I2C=y
--CONFIG_FB_SAVAGE_ACCEL=y
--CONFIG_FB_SIS=m
--CONFIG_FB_SIS_300=y
--CONFIG_FB_SIS_315=y
--CONFIG_FB_NEOMAGIC=m
--CONFIG_FB_KYRO=m
--CONFIG_FB_3DFX=m
--CONFIG_FB_3DFX_ACCEL=y
--CONFIG_FB_VOODOO1=m
--CONFIG_FB_VT8623=m
--CONFIG_FB_CYBLA=m
--CONFIG_FB_TRIDENT=m
--CONFIG_FB_TRIDENT_ACCEL=y
--CONFIG_FB_ARK=m
--CONFIG_FB_PM3=m
--CONFIG_FB_CARMINE=m
--CONFIG_FB_CARMINE_DRAM_EVAL=y
--# CONFIG_CARMINE_DRAM_CUSTOM is not set
--CONFIG_FB_GEODE=y
--CONFIG_FB_GEODE_LX=m
--CONFIG_FB_GEODE_GX=m
--CONFIG_FB_GEODE_GX1=m
--CONFIG_FB_SM501=m
--# CONFIG_FB_VIRTUAL is not set
--CONFIG_BACKLIGHT_LCD_SUPPORT=y
--CONFIG_LCD_CLASS_DEVICE=m
--CONFIG_LCD_LTV350QV=m
--CONFIG_LCD_ILI9320=m
--CONFIG_LCD_VGG2432A4=m
--CONFIG_LCD_PLATFORM=m
--CONFIG_BACKLIGHT_CLASS_DEVICE=y
--CONFIG_BACKLIGHT_CORGI=m
--CONFIG_BACKLIGHT_PROGEAR=m
--CONFIG_BACKLIGHT_CARILLO_RANCH=m
--CONFIG_BACKLIGHT_MBP_NVIDIA=m
--
--#
--# Display device support
--#
--CONFIG_DISPLAY_SUPPORT=m
--
--#
--# Display hardware drivers
--#
--
--#
--# Console display driver support
--#
--CONFIG_VGA_CONSOLE=y
--CONFIG_VGACON_SOFT_SCROLLBACK=y
--CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
--CONFIG_VIDEO_SELECT=y
--CONFIG_MDA_CONSOLE=m
--CONFIG_DUMMY_CONSOLE=y
--CONFIG_FRAMEBUFFER_CONSOLE=y
--# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
--CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
--# CONFIG_FONTS is not set
--CONFIG_FONT_8x8=y
--CONFIG_FONT_8x16=y
--# CONFIG_LOGO is not set
--
--#
--# Bootsplash configuration
--#
--CONFIG_BOOTSPLASH=y
--CONFIG_SOUND=m
--CONFIG_SND=m
--CONFIG_SND_TIMER=m
--CONFIG_SND_PCM=m
--CONFIG_SND_HWDEP=m
--CONFIG_SND_RAWMIDI=m
--CONFIG_SND_SEQUENCER=m
--CONFIG_SND_SEQ_DUMMY=m
--CONFIG_SND_OSSEMUL=y
--CONFIG_SND_MIXER_OSS=m
--CONFIG_SND_PCM_OSS=m
--CONFIG_SND_PCM_OSS_PLUGINS=y
--CONFIG_SND_SEQUENCER_OSS=y
--CONFIG_SND_DYNAMIC_MINORS=y
--CONFIG_SND_SUPPORT_OLD_API=y
--CONFIG_SND_VERBOSE_PROCFS=y
--CONFIG_SND_VERBOSE_PRINTK=y
--CONFIG_SND_DEBUG=y
--# CONFIG_SND_DEBUG_VERBOSE is not set
--# CONFIG_SND_PCM_XRUN_DEBUG is not set
--CONFIG_SND_VMASTER=y
--CONFIG_SND_MPU401_UART=m
--CONFIG_SND_OPL3_LIB=m
--CONFIG_SND_OPL4_LIB=m
--CONFIG_SND_VX_LIB=m
--CONFIG_SND_AC97_CODEC=m
--CONFIG_SND_DRIVERS=y
--CONFIG_SND_DUMMY=m
--CONFIG_SND_VIRMIDI=m
--CONFIG_SND_MTPAV=m
--CONFIG_SND_MTS64=m
--CONFIG_SND_SERIAL_U16550=m
--CONFIG_SND_MPU401=m
--CONFIG_SND_PORTMAN2X4=m
--CONFIG_SND_AC97_POWER_SAVE=y
--CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
--CONFIG_SND_AD1848_LIB=m
--CONFIG_SND_CS4231_LIB=m
--CONFIG_SND_SB_COMMON=m
--CONFIG_SND_SB8_DSP=m
--CONFIG_SND_SB16_DSP=m
--CONFIG_SND_ISA=y
--CONFIG_SND_ADLIB=m
--CONFIG_SND_AD1816A=m
--CONFIG_SND_AD1848=m
--CONFIG_SND_ALS100=m
--CONFIG_SND_AZT2320=m
--CONFIG_SND_CMI8330=m
--CONFIG_SND_CS4231=m
--CONFIG_SND_CS4232=m
--CONFIG_SND_CS4236=m
--CONFIG_SND_DT019X=m
--CONFIG_SND_ES968=m
--CONFIG_SND_ES1688=m
--CONFIG_SND_ES18XX=m
--CONFIG_SND_SC6000=m
--CONFIG_SND_GUSCLASSIC=m
--CONFIG_SND_GUSEXTREME=m
--CONFIG_SND_GUSMAX=m
--CONFIG_SND_INTERWAVE=m
--CONFIG_SND_INTERWAVE_STB=m
--CONFIG_SND_OPL3SA2=m
--CONFIG_SND_OPTI92X_AD1848=m
--CONFIG_SND_OPTI92X_CS4231=m
--CONFIG_SND_OPTI93X=m
--CONFIG_SND_MIRO=m
--CONFIG_SND_SB8=m
--CONFIG_SND_SB16=m
--CONFIG_SND_SBAWE=m
--CONFIG_SND_SB16_CSP=y
--CONFIG_SND_SGALAXY=m
--CONFIG_SND_SSCAPE=m
--CONFIG_SND_WAVEFRONT=m
--# CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL is not set
--CONFIG_SND_PCI=y
--CONFIG_SND_AD1889=m
--CONFIG_SND_ALS300=m
--CONFIG_SND_ALS4000=m
--CONFIG_SND_ALI5451=m
--CONFIG_SND_ATIIXP=m
--CONFIG_SND_ATIIXP_MODEM=m
--CONFIG_SND_AU8810=m
--CONFIG_SND_AU8820=m
--CONFIG_SND_AU8830=m
--CONFIG_SND_AW2=m
--CONFIG_SND_AZT3328=m
--CONFIG_SND_BT87X=m
--# CONFIG_SND_BT87X_OVERCLOCK is not set
--CONFIG_SND_CA0106=m
--CONFIG_SND_CMIPCI=m
--CONFIG_SND_OXYGEN_LIB=m
--CONFIG_SND_OXYGEN=m
--CONFIG_SND_CS4281=m
--CONFIG_SND_CS46XX=m
--CONFIG_SND_CS46XX_NEW_DSP=y
--CONFIG_SND_CS5530=m
--CONFIG_SND_CS5535AUDIO=m
--CONFIG_SND_DARLA20=m
--CONFIG_SND_GINA20=m
--CONFIG_SND_LAYLA20=m
--CONFIG_SND_DARLA24=m
--CONFIG_SND_GINA24=m
--CONFIG_SND_LAYLA24=m
--CONFIG_SND_MONA=m
--CONFIG_SND_MIA=m
--CONFIG_SND_ECHO3G=m
--CONFIG_SND_INDIGO=m
--CONFIG_SND_INDIGOIO=m
--CONFIG_SND_INDIGODJ=m
--CONFIG_SND_EMU10K1=m
--CONFIG_SND_EMU10K1X=m
--CONFIG_SND_ENS1370=m
--CONFIG_SND_ENS1371=m
--CONFIG_SND_ES1938=m
--CONFIG_SND_ES1968=m
--CONFIG_SND_FM801=m
--CONFIG_SND_FM801_TEA575X_BOOL=y
--CONFIG_SND_FM801_TEA575X=m
--CONFIG_SND_HDA_INTEL=m
--CONFIG_SND_HDA_HWDEP=y
--CONFIG_SND_HDA_INPUT_BEEP=y
--CONFIG_SND_HDA_CODEC_REALTEK=y
--CONFIG_SND_HDA_CODEC_ANALOG=y
--CONFIG_SND_HDA_CODEC_SIGMATEL=y
--CONFIG_SND_HDA_CODEC_VIA=y
--CONFIG_SND_HDA_CODEC_ATIHDMI=y
--CONFIG_SND_HDA_CODEC_NVHDMI=y
--CONFIG_SND_HDA_CODEC_CONEXANT=y
--CONFIG_SND_HDA_CODEC_CMEDIA=y
--CONFIG_SND_HDA_CODEC_SI3054=y
--CONFIG_SND_HDA_GENERIC=y
--CONFIG_SND_HDA_POWER_SAVE=y
--CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
--CONFIG_SND_HDSP=m
--CONFIG_SND_HDSPM=m
--CONFIG_SND_HIFIER=m
--CONFIG_SND_ICE1712=m
--CONFIG_SND_ICE1724=m
--CONFIG_SND_INTEL8X0=m
--CONFIG_SND_INTEL8X0M=m
--CONFIG_SND_KORG1212=m
--CONFIG_SND_MAESTRO3=m
--CONFIG_SND_MIXART=m
--CONFIG_SND_NM256=m
--CONFIG_SND_PCXHR=m
--CONFIG_SND_RIPTIDE=m
--CONFIG_SND_RME32=m
--CONFIG_SND_RME96=m
--CONFIG_SND_RME9652=m
--CONFIG_SND_SIS7019=m
--CONFIG_SND_SONICVIBES=m
--CONFIG_SND_TRIDENT=m
--CONFIG_SND_VIA82XX=m
--CONFIG_SND_VIA82XX_MODEM=m
--CONFIG_SND_VIRTUOSO=m
--CONFIG_SND_VX222=m
--CONFIG_SND_YMFPCI=m
--CONFIG_SND_SPI=y
--CONFIG_SND_USB=y
--CONFIG_SND_USB_AUDIO=m
--CONFIG_SND_USB_USX2Y=m
--CONFIG_SND_USB_CAIAQ=m
--CONFIG_SND_USB_CAIAQ_INPUT=y
--CONFIG_SND_PCMCIA=y
--CONFIG_SND_VXPOCKET=m
--CONFIG_SND_PDAUDIOCF=m
--# CONFIG_SND_SOC is not set
--CONFIG_SOUND_PRIME=m
--# CONFIG_SOUND_MSNDCLAS is not set
--# CONFIG_SOUND_MSNDPIN is not set
--CONFIG_SOUND_OSS=m
--CONFIG_SOUND_TRACEINIT=y
--CONFIG_SOUND_DMAP=y
--CONFIG_SOUND_SSCAPE=m
--CONFIG_SOUND_VMIDI=m
--CONFIG_SOUND_TRIX=m
--CONFIG_SOUND_MSS=m
--CONFIG_SOUND_MPU401=m
--CONFIG_SOUND_PAS=m
--CONFIG_SOUND_PSS=m
--CONFIG_PSS_MIXER=y
--# CONFIG_PSS_HAVE_BOOT is not set
--CONFIG_SOUND_SB=m
--CONFIG_SOUND_YM3812=m
--CONFIG_SOUND_UART6850=m
--CONFIG_SOUND_AEDSP16=m
--CONFIG_SC6600=y
--CONFIG_SC6600_JOY=y
--CONFIG_SC6600_CDROM=4
--CONFIG_SC6600_CDROMBASE=0x0
--# CONFIG_AEDSP16_MSS is not set
--# CONFIG_AEDSP16_SBPRO is not set
--CONFIG_SOUND_KAHLUA=m
--CONFIG_AC97_BUS=m
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=m
--# CONFIG_HID_DEBUG is not set
--CONFIG_HIDRAW=y
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=m
--CONFIG_USB_HIDINPUT_POWERBOOK=y
--CONFIG_HID_FF=y
--CONFIG_HID_PID=y
--CONFIG_LOGITECH_FF=y
--# CONFIG_LOGIRUMBLEPAD2_FF is not set
--CONFIG_PANTHERLORD_FF=y
--CONFIG_THRUSTMASTER_FF=y
--CONFIG_ZEROPLUS_FF=y
--CONFIG_USB_HIDDEV=y
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=m
--# CONFIG_USB_DEBUG is not set
--CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--# CONFIG_USB_DEVICE_CLASS is not set
--# CONFIG_USB_DYNAMIC_MINORS is not set
--CONFIG_USB_SUSPEND=y
--# CONFIG_USB_OTG is not set
--CONFIG_USB_MON=y
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_C67X00_HCD=m
--CONFIG_USB_EHCI_HCD=m
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--CONFIG_USB_EHCI_TT_NEWSCHED=y
--CONFIG_USB_ISP116X_HCD=m
--CONFIG_USB_ISP1760_HCD=m
--CONFIG_USB_OHCI_HCD=m
--# CONFIG_USB_OHCI_HCD_SSB is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=m
--# CONFIG_USB_U132_HCD is not set
--CONFIG_USB_SL811_HCD=m
--CONFIG_USB_SL811_CS=m
--CONFIG_USB_R8A66597_HCD=m
--
--#
--# Enable Host or Gadget support to see Inventra options
--#
--
--#
--# USB Device Class drivers
--#
--CONFIG_USB_ACM=m
--CONFIG_USB_PRINTER=m
--CONFIG_USB_WDM=m
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=m
--# CONFIG_USB_STORAGE_DEBUG is not set
--CONFIG_USB_STORAGE_DATAFAB=y
--CONFIG_USB_STORAGE_FREECOM=y
--CONFIG_USB_STORAGE_ISD200=y
--CONFIG_USB_STORAGE_DPCM=y
--CONFIG_USB_STORAGE_USBAT=y
--CONFIG_USB_STORAGE_SDDR09=y
--CONFIG_USB_STORAGE_SDDR55=y
--CONFIG_USB_STORAGE_JUMPSHOT=y
--CONFIG_USB_STORAGE_ALAUDA=y
--CONFIG_USB_STORAGE_ONETOUCH=y
--CONFIG_USB_STORAGE_KARMA=y
--CONFIG_USB_STORAGE_CYPRESS_ATACB=y
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--CONFIG_USB_MDC800=m
--CONFIG_USB_MICROTEK=m
--
--#
--# USB port drivers
--#
--CONFIG_USB_USS720=m
--CONFIG_USB_SERIAL=m
--CONFIG_USB_EZUSB=y
--CONFIG_USB_SERIAL_GENERIC=y
--CONFIG_USB_SERIAL_AIRCABLE=m
--CONFIG_USB_SERIAL_ARK3116=m
--CONFIG_USB_SERIAL_BELKIN=m
--CONFIG_USB_SERIAL_CH341=m
--CONFIG_USB_SERIAL_WHITEHEAT=m
--CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
--CONFIG_USB_SERIAL_CP2101=m
--CONFIG_USB_SERIAL_CYPRESS_M8=m
--CONFIG_USB_SERIAL_EMPEG=m
--CONFIG_USB_SERIAL_FTDI_SIO=m
--CONFIG_USB_SERIAL_FUNSOFT=m
--CONFIG_USB_SERIAL_VISOR=m
--CONFIG_USB_SERIAL_IPAQ=m
--CONFIG_USB_SERIAL_IR=m
--CONFIG_USB_SERIAL_EDGEPORT=m
--CONFIG_USB_SERIAL_EDGEPORT_TI=m
--CONFIG_USB_SERIAL_GARMIN=m
--CONFIG_USB_SERIAL_IPW=m
--CONFIG_USB_SERIAL_IUU=m
--CONFIG_USB_SERIAL_KEYSPAN_PDA=m
--CONFIG_USB_SERIAL_KEYSPAN=m
--CONFIG_USB_SERIAL_KEYSPAN_MPR=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19=y
--CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
--CONFIG_USB_SERIAL_KLSI=m
--CONFIG_USB_SERIAL_KOBIL_SCT=m
--CONFIG_USB_SERIAL_MCT_U232=m
--CONFIG_USB_SERIAL_MOS7720=m
--CONFIG_USB_SERIAL_MOS7840=m
--CONFIG_USB_SERIAL_MOTOROLA=m
--CONFIG_USB_SERIAL_NAVMAN=m
--CONFIG_USB_SERIAL_PL2303=m
--CONFIG_USB_SERIAL_OTI6858=m
--CONFIG_USB_SERIAL_QUALCOMM=m
--CONFIG_USB_SERIAL_SPCP8X5=m
--CONFIG_USB_SERIAL_HP4X=m
--CONFIG_USB_SERIAL_SAFE=m
--CONFIG_USB_SERIAL_SAFE_PADDED=y
--CONFIG_USB_SERIAL_SIERRAWIRELESS=m
--CONFIG_USB_SERIAL_TI=m
--CONFIG_USB_SERIAL_CYBERJACK=m
--CONFIG_USB_SERIAL_XIRCOM=m
--CONFIG_USB_SERIAL_OPTION=m
--CONFIG_USB_SERIAL_OMNINET=m
--CONFIG_USB_SERIAL_DEBUG=m
--
--#
--# USB Miscellaneous drivers
--#
--CONFIG_USB_EMI62=m
--CONFIG_USB_EMI26=m
--CONFIG_USB_ADUTUX=m
--CONFIG_USB_RIO500=m
--CONFIG_USB_LEGOTOWER=m
--CONFIG_USB_LCD=m
--CONFIG_USB_BERRY_CHARGE=m
--CONFIG_USB_LED=m
--CONFIG_USB_CYPRESS_CY7C63=m
--CONFIG_USB_CYTHERM=m
--CONFIG_USB_PHIDGET=m
--CONFIG_USB_PHIDGETKIT=m
--CONFIG_USB_PHIDGETMOTORCONTROL=m
--CONFIG_USB_PHIDGETSERVO=m
--CONFIG_USB_IDMOUSE=m
--CONFIG_USB_FTDI_ELAN=m
--CONFIG_USB_APPLEDISPLAY=m
--CONFIG_USB_SISUSBVGA=m
--CONFIG_USB_SISUSBVGA_CON=y
--CONFIG_USB_LD=m
--CONFIG_USB_TRANCEVIBRATOR=m
--CONFIG_USB_IOWARRIOR=m
--# CONFIG_USB_TEST is not set
--CONFIG_USB_ISIGHTFW=m
--CONFIG_USB_ATM=m
--CONFIG_USB_SPEEDTOUCH=m
--CONFIG_USB_CXACRU=m
--CONFIG_USB_UEAGLEATM=m
--CONFIG_USB_XUSBATM=m
--# CONFIG_USB_GADGET is not set
--CONFIG_MMC=m
--# CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
--
--#
--# MMC/SD Card Drivers
--#
--CONFIG_MMC_BLOCK=m
--CONFIG_MMC_BLOCK_BOUNCE=y
--CONFIG_SDIO_UART=m
--CONFIG_MMC_TEST=m
--
--#
--# MMC/SD Host Controller Drivers
--#
--CONFIG_MMC_SDHCI=m
--CONFIG_MMC_SDHCI_PCI=m
--CONFIG_MMC_RICOH_MMC=m
--CONFIG_MMC_WBSD=m
--CONFIG_MMC_TIFM_SD=m
--CONFIG_MMC_SDRICOH_CS=m
--CONFIG_MEMSTICK=m
--# CONFIG_MEMSTICK_DEBUG is not set
--
--#
--# MemoryStick drivers
--#
--# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
--CONFIG_MSPRO_BLOCK=m
--
--#
--# MemoryStick Host Controller Drivers
--#
--CONFIG_MEMSTICK_TIFM_MS=m
--CONFIG_MEMSTICK_JMICRON_38X=m
--CONFIG_NEW_LEDS=y
--CONFIG_LEDS_CLASS=m
--
--#
--# LED drivers
--#
--CONFIG_LEDS_NET48XX=m
--CONFIG_LEDS_WRAP=m
--CONFIG_LEDS_PCA9532=m
--CONFIG_LEDS_GPIO=m
--CONFIG_LEDS_CLEVO_MAIL=m
--CONFIG_LEDS_PCA955X=m
--
--#
--# LED Triggers
--#
--CONFIG_LEDS_TRIGGERS=y
--CONFIG_LEDS_TRIGGER_TIMER=m
--CONFIG_LEDS_TRIGGER_IDE_DISK=y
--CONFIG_LEDS_TRIGGER_HEARTBEAT=m
--CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
--# CONFIG_ACCESSIBILITY is not set
--CONFIG_INFINIBAND=m
--CONFIG_INFINIBAND_USER_MAD=m
--CONFIG_INFINIBAND_USER_ACCESS=m
--CONFIG_INFINIBAND_USER_MEM=y
--CONFIG_INFINIBAND_ADDR_TRANS=y
--CONFIG_INFINIBAND_MTHCA=m
--CONFIG_INFINIBAND_MTHCA_DEBUG=y
--CONFIG_INFINIBAND_AMSO1100=m
--# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
--CONFIG_INFINIBAND_CXGB3=m
--# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
--CONFIG_MLX4_INFINIBAND=m
--CONFIG_INFINIBAND_NES=m
--# CONFIG_INFINIBAND_NES_DEBUG is not set
--CONFIG_INFINIBAND_IPOIB=m
--CONFIG_INFINIBAND_IPOIB_CM=y
--CONFIG_INFINIBAND_IPOIB_DEBUG=y
--# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
--CONFIG_INFINIBAND_SRP=m
--CONFIG_INFINIBAND_ISER=m
--CONFIG_EDAC=y
--
--#
--# Reporting subsystems
--#
--# CONFIG_EDAC_DEBUG is not set
--CONFIG_EDAC_MM_EDAC=m
--CONFIG_EDAC_AMD76X=m
--CONFIG_EDAC_E7XXX=m
--CONFIG_EDAC_E752X=m
--CONFIG_EDAC_I82875P=m
--CONFIG_EDAC_I82975X=m
--CONFIG_EDAC_I3000=m
--CONFIG_EDAC_I82860=m
--CONFIG_EDAC_R82600=m
--CONFIG_EDAC_I5000=m
--CONFIG_EDAC_I5100=m
--CONFIG_RTC_LIB=m
--CONFIG_RTC_CLASS=m
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--CONFIG_RTC_DRV_TEST=m
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=m
--CONFIG_RTC_DRV_DS1374=m
--CONFIG_RTC_DRV_DS1672=m
--CONFIG_RTC_DRV_MAX6900=m
--CONFIG_RTC_DRV_RS5C372=m
--CONFIG_RTC_DRV_ISL1208=m
--CONFIG_RTC_DRV_X1205=m
--CONFIG_RTC_DRV_PCF8563=m
--CONFIG_RTC_DRV_PCF8583=m
--CONFIG_RTC_DRV_M41T80=m
--CONFIG_RTC_DRV_M41T80_WDT=y
--CONFIG_RTC_DRV_S35390A=m
--CONFIG_RTC_DRV_FM3130=m
--
--#
--# SPI RTC drivers
--#
--CONFIG_RTC_DRV_M41T94=m
--CONFIG_RTC_DRV_DS1305=m
--CONFIG_RTC_DRV_MAX6902=m
--CONFIG_RTC_DRV_R9701=m
--CONFIG_RTC_DRV_RS5C348=m
--
--#
--# Platform RTC drivers
--#
--CONFIG_RTC_DRV_CMOS=m
--CONFIG_RTC_DRV_DS1511=m
--CONFIG_RTC_DRV_DS1553=m
--CONFIG_RTC_DRV_DS1742=m
--CONFIG_RTC_DRV_STK17TA8=m
--CONFIG_RTC_DRV_M48T86=m
--CONFIG_RTC_DRV_M48T59=m
--CONFIG_RTC_DRV_V3020=m
--
--#
--# on-CPU RTC drivers
--#
--CONFIG_DMADEVICES=y
--
--#
--# DMA Devices
--#
--CONFIG_INTEL_IOATDMA=m
--CONFIG_DMA_ENGINE=y
--
--#
--# DMA Clients
--#
--CONFIG_NET_DMA=y
--CONFIG_DMATEST=m
--CONFIG_DCA=m
--CONFIG_AUXDISPLAY=y
--CONFIG_KS0108=m
--CONFIG_KS0108_PORT=0x378
--CONFIG_KS0108_DELAY=2
--CONFIG_CFAG12864B=m
--CONFIG_CFAG12864B_RATE=20
--CONFIG_UIO=m
--CONFIG_UIO_CIF=m
--CONFIG_UIO_PDRV=m
--CONFIG_UIO_PDRV_GENIRQ=m
--CONFIG_UIO_SMX=m
--CONFIG_STAGING=y
--CONFIG_ET131X=m
--# CONFIG_ET131X_DEBUG is not set
--CONFIG_SLICOSS=m
--CONFIG_SXG=m
--CONFIG_ME4000=m
--CONFIG_VIDEO_GO7007=m
--CONFIG_VIDEO_GO7007_USB=m
--CONFIG_USB_IP_COMMON=m
--CONFIG_USB_IP_VHCI_HCD=m
--CONFIG_USB_IP_HOST=m
--CONFIG_W35UND=m
--CONFIG_PRISM2_USB=m
--CONFIG_ECHO=m
--CONFIG_USB_ATMEL=m
--CONFIG_AGNX=m
--CONFIG_OTUS=m
--CONFIG_RT2860=m
--CONFIG_RT2870=m
--CONFIG_RT3070=m
--CONFIG_BENET=m
--CONFIG_RTL8187SE=m
--CONFIG_DRM_PSB=m
--
--#
--# Firmware Drivers
--#
--CONFIG_EDD=m
--# CONFIG_EDD_OFF is not set
--CONFIG_FIRMWARE_MEMMAP=y
--CONFIG_DELL_RBU=m
--CONFIG_DCDBAS=m
--CONFIG_DMIID=y
--CONFIG_ISCSI_IBFT_FIND=y
--CONFIG_ISCSI_IBFT=m
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=m
--CONFIG_EXT2_FS_XATTR=y
--CONFIG_EXT2_FS_POSIX_ACL=y
--CONFIG_EXT2_FS_SECURITY=y
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=m
--CONFIG_EXT3_FS_XATTR=y
--CONFIG_EXT3_FS_POSIX_ACL=y
--CONFIG_EXT3_FS_NFS4ACL=y
--CONFIG_EXT3_FS_SECURITY=y
--CONFIG_EXT4DEV_FS=m
--CONFIG_EXT4DEV_FS_XATTR=y
--CONFIG_EXT4DEV_FS_POSIX_ACL=y
--CONFIG_EXT4DEV_FS_SECURITY=y
--CONFIG_JBD=m
--CONFIG_JBD_DEBUG=y
--CONFIG_JBD2=m
--CONFIG_JBD2_DEBUG=y
--CONFIG_FS_MBCACHE=m
--CONFIG_REISERFS_FS=m
--# CONFIG_REISERFS_CHECK is not set
--# CONFIG_REISERFS_PROC_INFO is not set
--CONFIG_REISERFS_FS_XATTR=y
--CONFIG_REISERFS_FS_POSIX_ACL=y
--CONFIG_REISERFS_FS_SECURITY=y
--CONFIG_JFS_FS=m
--CONFIG_JFS_POSIX_ACL=y
--CONFIG_JFS_SECURITY=y
--# CONFIG_JFS_DEBUG is not set
--CONFIG_JFS_STATISTICS=y
--CONFIG_FS_POSIX_ACL=y
--CONFIG_FS_NFS4ACL=y
--CONFIG_XFS_FS=m
--CONFIG_XFS_QUOTA=y
--CONFIG_XFS_DMAPI=m
--CONFIG_XFS_POSIX_ACL=y
--CONFIG_XFS_RT=y
--# CONFIG_XFS_DEBUG is not set
--CONFIG_GFS2_FS=m
--CONFIG_GFS2_FS_LOCKING_DLM=m
--CONFIG_OCFS2_FS=m
--CONFIG_OCFS2_FS_O2CB=m
--CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
--CONFIG_OCFS2_FS_STATS=y
--# CONFIG_OCFS2_DEBUG_MASKLOG is not set
--# CONFIG_OCFS2_DEBUG_FS is not set
--# CONFIG_OCFS2_COMPAT_JBD is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--CONFIG_DMAPI=m
--# CONFIG_DMAPI_DEBUG is not set
--CONFIG_QUOTA=y
--CONFIG_QUOTA_NETLINK_INTERFACE=y
--CONFIG_PRINT_QUOTA_WARNING=y
--CONFIG_QUOTA_TREE=m
--CONFIG_QFMT_V1=m
--CONFIG_QFMT_V2=m
--CONFIG_QUOTACTL=y
--CONFIG_AUTOFS_FS=m
--CONFIG_AUTOFS4_FS=m
--CONFIG_FUSE_FS=m
--CONFIG_GENERIC_ACL=y
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=y
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=m
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=m
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=m
--# CONFIG_NTFS_DEBUG is not set
--CONFIG_NTFS_RW=y
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_VMCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--CONFIG_TMPFS_POSIX_ACL=y
--CONFIG_HUGETLBFS=y
--CONFIG_HUGETLB_PAGE=y
--CONFIG_CONFIGFS_FS=m
--
--#
--# Miscellaneous filesystems
--#
--CONFIG_ADFS_FS=m
--# CONFIG_ADFS_FS_RW is not set
--CONFIG_AFFS_FS=m
--CONFIG_ECRYPT_FS=m
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--CONFIG_BEFS_FS=m
--# CONFIG_BEFS_DEBUG is not set
--CONFIG_BFS_FS=m
--CONFIG_EFS_FS=m
--CONFIG_JFFS2_FS=m
--CONFIG_JFFS2_FS_DEBUG=0
--CONFIG_JFFS2_FS_WRITEBUFFER=y
--# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
--CONFIG_JFFS2_SUMMARY=y
--CONFIG_JFFS2_FS_XATTR=y
--CONFIG_JFFS2_FS_POSIX_ACL=y
--CONFIG_JFFS2_FS_SECURITY=y
--CONFIG_JFFS2_COMPRESSION_OPTIONS=y
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--# CONFIG_JFFS2_CMODE_NONE is not set
--CONFIG_JFFS2_CMODE_PRIORITY=y
--# CONFIG_JFFS2_CMODE_SIZE is not set
--# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
--CONFIG_UBIFS_FS=m
--CONFIG_UBIFS_FS_XATTR=y
--CONFIG_UBIFS_FS_ADVANCED_COMPR=y
--CONFIG_UBIFS_FS_LZO=y
--CONFIG_UBIFS_FS_ZLIB=y
--# CONFIG_UBIFS_FS_DEBUG is not set
--CONFIG_CRAMFS=m
--CONFIG_SQUASHFS=m
--# CONFIG_SQUASHFS_EMBEDDED is not set
--CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
--CONFIG_VXFS_FS=m
--CONFIG_MINIX_FS=y
--CONFIG_OMFS_FS=m
--CONFIG_HPFS_FS=m
--CONFIG_QNX4FS_FS=m
--CONFIG_ROMFS_FS=m
--CONFIG_SYSV_FS=m
--CONFIG_UFS_FS=m
--CONFIG_UFS_FS_WRITE=y
--# CONFIG_UFS_DEBUG is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=m
--CONFIG_NFS_V3=y
--CONFIG_NFS_V3_ACL=y
--CONFIG_NFS_V4=y
--CONFIG_NFS_SWAP=y
--CONFIG_NFSD=m
--CONFIG_NFSD_V2_ACL=y
--CONFIG_NFSD_V3=y
--CONFIG_NFSD_V3_ACL=y
--CONFIG_NFSD_V4=y
--CONFIG_LOCKD=m
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=m
--CONFIG_NFS_ACL_SUPPORT=m
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=m
--CONFIG_SUNRPC_GSS=m
--CONFIG_SUNRPC_XPRT_RDMA=m
--CONFIG_SUNRPC_SWAP=y
--CONFIG_RPCSEC_GSS_KRB5=m
--CONFIG_RPCSEC_GSS_SPKM3=m
--# CONFIG_SMB_FS is not set
--CONFIG_CIFS=m
--CONFIG_CIFS_STATS=y
--CONFIG_CIFS_STATS2=y
--CONFIG_CIFS_WEAK_PW_HASH=y
--CONFIG_CIFS_UPCALL=y
--CONFIG_CIFS_XATTR=y
--CONFIG_CIFS_POSIX=y
--# CONFIG_CIFS_DEBUG2 is not set
--CONFIG_CIFS_EXPERIMENTAL=y
--CONFIG_CIFS_DFS_UPCALL=y
--CONFIG_NCP_FS=m
--CONFIG_NCPFS_PACKET_SIGNING=y
--CONFIG_NCPFS_IOCTL_LOCKING=y
--CONFIG_NCPFS_STRONG=y
--CONFIG_NCPFS_NFS_NS=y
--CONFIG_NCPFS_OS2_NS=y
--CONFIG_NCPFS_SMALLDOS=y
--CONFIG_NCPFS_NLS=y
--CONFIG_NCPFS_EXTRAS=y
--CONFIG_CODA_FS=m
--CONFIG_AFS_FS=m
--# CONFIG_AFS_DEBUG is not set
--CONFIG_9P_FS=m
--CONFIG_NOVFS=m
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--CONFIG_OSF_PARTITION=y
--# CONFIG_AMIGA_PARTITION is not set
--CONFIG_ATARI_PARTITION=y
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--CONFIG_BSD_DISKLABEL=y
--# CONFIG_MINIX_SUBPARTITION is not set
--CONFIG_SOLARIS_X86_PARTITION=y
--CONFIG_UNIXWARE_DISKLABEL=y
--CONFIG_LDM_PARTITION=y
--# CONFIG_LDM_DEBUG is not set
--CONFIG_SGI_PARTITION=y
--CONFIG_ULTRIX_PARTITION=y
--CONFIG_SUN_PARTITION=y
--CONFIG_KARMA_PARTITION=y
--CONFIG_EFI_PARTITION=y
--CONFIG_SYSV68_PARTITION=y
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="utf8"
--CONFIG_NLS_CODEPAGE_437=m
--CONFIG_NLS_CODEPAGE_737=m
--CONFIG_NLS_CODEPAGE_775=m
--CONFIG_NLS_CODEPAGE_850=m
--CONFIG_NLS_CODEPAGE_852=m
--CONFIG_NLS_CODEPAGE_855=m
--CONFIG_NLS_CODEPAGE_857=m
--CONFIG_NLS_CODEPAGE_860=m
--CONFIG_NLS_CODEPAGE_861=m
--CONFIG_NLS_CODEPAGE_862=m
--CONFIG_NLS_CODEPAGE_863=m
--CONFIG_NLS_CODEPAGE_864=m
--CONFIG_NLS_CODEPAGE_865=m
--CONFIG_NLS_CODEPAGE_866=m
--CONFIG_NLS_CODEPAGE_869=m
--CONFIG_NLS_CODEPAGE_936=m
--CONFIG_NLS_CODEPAGE_950=m
--CONFIG_NLS_CODEPAGE_932=m
--CONFIG_NLS_CODEPAGE_949=m
--CONFIG_NLS_CODEPAGE_874=m
--CONFIG_NLS_ISO8859_8=m
--CONFIG_NLS_CODEPAGE_1250=m
--CONFIG_NLS_CODEPAGE_1251=m
--CONFIG_NLS_ASCII=m
--CONFIG_NLS_ISO8859_1=m
--CONFIG_NLS_ISO8859_2=m
--CONFIG_NLS_ISO8859_3=m
--CONFIG_NLS_ISO8859_4=m
--CONFIG_NLS_ISO8859_5=m
--CONFIG_NLS_ISO8859_6=m
--CONFIG_NLS_ISO8859_7=m
--CONFIG_NLS_ISO8859_9=m
--CONFIG_NLS_ISO8859_13=m
--CONFIG_NLS_ISO8859_14=m
--CONFIG_NLS_ISO8859_15=m
--CONFIG_NLS_KOI8_R=m
--CONFIG_NLS_KOI8_U=m
--CONFIG_NLS_UTF8=m
--CONFIG_DLM=m
--# CONFIG_DLM_DEBUG is not set
--
--#
--# Kernel hacking
--#
--CONFIG_TRACE_IRQFLAGS_SUPPORT=y
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--# CONFIG_ENABLE_MUST_CHECK is not set
--CONFIG_FRAME_WARN=1024
--CONFIG_MAGIC_SYSRQ=y
--CONFIG_UNUSED_SYMBOLS=y
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--# CONFIG_DETECT_SOFTLOCKUP is not set
--CONFIG_SCHED_DEBUG=y
--CONFIG_SCHEDSTATS=y
--CONFIG_TIMER_STATS=y
--# CONFIG_DEBUG_OBJECTS is not set
--# CONFIG_DEBUG_SLAB is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--# CONFIG_DEBUG_MUTEXES is not set
--# CONFIG_DEBUG_LOCK_ALLOC is not set
--# CONFIG_PROVE_LOCKING is not set
--# CONFIG_LOCK_STAT is not set
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--CONFIG_STACKTRACE=y
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_HIGHMEM is not set
--CONFIG_DEBUG_BUGVERBOSE=y
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_WRITECOUNT is not set
--CONFIG_DEBUG_MEMORY_INIT=y
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_FRAME_POINTER is not set
--CONFIG_UNWIND_INFO=y
--CONFIG_STACK_UNWIND=y
--# CONFIG_BOOT_PRINTK_DELAY is not set
--CONFIG_RCU_TORTURE_TEST=m
--# CONFIG_KPROBES_SANITY_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--CONFIG_LKDTM=m
--# CONFIG_FAULT_INJECTION is not set
--CONFIG_LATENCYTOP=y
--CONFIG_SYSCTL_SYSCALL_CHECK=y
--CONFIG_HAVE_FTRACE=y
--CONFIG_HAVE_DYNAMIC_FTRACE=y
--# CONFIG_FTRACE is not set
--# CONFIG_IRQSOFF_TRACER is not set
--# CONFIG_SYSPROF_TRACER is not set
--# CONFIG_SCHED_TRACER is not set
--# CONFIG_CONTEXT_SWITCH_TRACER is not set
--CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
--CONFIG_DYNAMIC_PRINTK_DEBUG=y
--# CONFIG_SAMPLES is not set
--CONFIG_HAVE_ARCH_KGDB=y
--# CONFIG_KGDB is not set
--# CONFIG_STRICT_DEVMEM is not set
--# CONFIG_X86_VERBOSE_BOOTUP is not set
--CONFIG_EARLY_PRINTK=y
--CONFIG_EARLY_PRINTK_DBGP=y
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUG_PER_CPU_MAPS is not set
--# CONFIG_X86_PTDUMP is not set
--CONFIG_DEBUG_RODATA=y
--# CONFIG_DEBUG_RODATA_TEST is not set
--# CONFIG_DEBUG_NX_TEST is not set
--# CONFIG_4KSTACKS is not set
--CONFIG_DOUBLEFAULT=y
--# CONFIG_MMIOTRACE is not set
--CONFIG_IO_DELAY_TYPE_0X80=0
--CONFIG_IO_DELAY_TYPE_0XED=1
--CONFIG_IO_DELAY_TYPE_UDELAY=2
--CONFIG_IO_DELAY_TYPE_NONE=3
--CONFIG_IO_DELAY_0X80=y
--# CONFIG_IO_DELAY_0XED is not set
--# CONFIG_IO_DELAY_UDELAY is not set
--# CONFIG_IO_DELAY_NONE is not set
--CONFIG_DEFAULT_IO_DELAY_TYPE=0
--# CONFIG_DEBUG_BOOT_PARAMS is not set
--# CONFIG_CPA_DEBUG is not set
--# CONFIG_OPTIMIZE_INLINING is not set
--CONFIG_KDB=y
--CONFIG_KDB_MODULES=m
--CONFIG_KDB_OFF=y
--CONFIG_KDB_CONTINUE_CATASTROPHIC=0
--CONFIG_KDB_USB=y
--CONFIG_KDB_KDUMP=y
--
--#
--# Security options
--#
--CONFIG_KEYS=y
--CONFIG_KEYS_DEBUG_PROC_KEYS=y
--CONFIG_SECURITY=y
--CONFIG_SECURITY_DEFAULT="apparmor"
--CONFIG_SECURITY_NETWORK=y
--# CONFIG_SECURITY_NETWORK_XFRM is not set
--CONFIG_SECURITY_FILE_CAPABILITIES=y
--CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
--CONFIG_SECURITY_SELINUX=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
--CONFIG_SECURITY_SELINUX_DISABLE=y
--CONFIG_SECURITY_SELINUX_DEVELOP=y
--CONFIG_SECURITY_SELINUX_AVC_STATS=y
--CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
--CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
--# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
--CONFIG_SECURITY_APPARMOR=y
--CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
--CONFIG_SECURITY_APPARMOR_DISABLE=y
--CONFIG_XOR_BLOCKS=m
--CONFIG_ASYNC_CORE=m
--CONFIG_ASYNC_MEMCPY=m
--CONFIG_ASYNC_XOR=m
--CONFIG_CRYPTO=y
--
--#
--# Crypto core or helper
--#
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_AEAD=m
--CONFIG_CRYPTO_BLKCIPHER=m
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_GF128MUL=m
--CONFIG_CRYPTO_NULL=m
--CONFIG_CRYPTO_CRYPTD=m
--CONFIG_CRYPTO_AUTHENC=m
--CONFIG_CRYPTO_TEST=m
--
--#
--# Authenticated Encryption with Associated Data
--#
--CONFIG_CRYPTO_CCM=m
--CONFIG_CRYPTO_GCM=m
--CONFIG_CRYPTO_SEQIV=m
--
--#
--# Block modes
--#
--CONFIG_CRYPTO_CBC=m
--CONFIG_CRYPTO_CTR=m
--CONFIG_CRYPTO_CTS=m
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_LRW=m
--CONFIG_CRYPTO_PCBC=m
--CONFIG_CRYPTO_XTS=m
--
--#
--# Hash modes
--#
--CONFIG_CRYPTO_HMAC=y
--CONFIG_CRYPTO_XCBC=m
--
--#
--# Digest
--#
--CONFIG_CRYPTO_CRC32C=m
--CONFIG_CRYPTO_MD4=m
--CONFIG_CRYPTO_MD5=m
--CONFIG_CRYPTO_MICHAEL_MIC=m
--CONFIG_CRYPTO_RMD128=m
--CONFIG_CRYPTO_RMD160=m
--CONFIG_CRYPTO_RMD256=m
--CONFIG_CRYPTO_RMD320=m
--CONFIG_CRYPTO_SHA1=m
--CONFIG_CRYPTO_SHA256=m
--CONFIG_CRYPTO_SHA512=m
--CONFIG_CRYPTO_TGR192=m
--CONFIG_CRYPTO_WP512=m
--
--#
--# Ciphers
--#
--CONFIG_CRYPTO_AES=m
--CONFIG_CRYPTO_AES_586=m
--CONFIG_CRYPTO_ANUBIS=m
--CONFIG_CRYPTO_ARC4=m
--CONFIG_CRYPTO_BLOWFISH=m
--CONFIG_CRYPTO_CAMELLIA=m
--CONFIG_CRYPTO_CAST5=m
--CONFIG_CRYPTO_CAST6=m
--CONFIG_CRYPTO_DES=m
--CONFIG_CRYPTO_FCRYPT=m
--CONFIG_CRYPTO_KHAZAD=m
--CONFIG_CRYPTO_SALSA20=m
--CONFIG_CRYPTO_SALSA20_586=m
--CONFIG_CRYPTO_SEED=m
--CONFIG_CRYPTO_SERPENT=m
--CONFIG_CRYPTO_TEA=m
--# CONFIG_CRYPTO_TWOFISH is not set
--CONFIG_CRYPTO_TWOFISH_COMMON=m
--CONFIG_CRYPTO_TWOFISH_586=m
--
--#
--# Compression
--#
--CONFIG_CRYPTO_DEFLATE=m
--CONFIG_CRYPTO_LZO=m
--CONFIG_CRYPTO_HW=y
--CONFIG_CRYPTO_DEV_PADLOCK=m
--CONFIG_CRYPTO_DEV_PADLOCK_AES=m
--CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
--CONFIG_CRYPTO_DEV_GEODE=m
--CONFIG_CRYPTO_DEV_HIFN_795X=m
--CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
--CONFIG_HAVE_KVM=y
--CONFIG_VIRTUALIZATION=y
--CONFIG_KVM_KMP=y
--# CONFIG_KVM is not set
--# CONFIG_LGUEST is not set
--CONFIG_VIRTIO=m
--CONFIG_VIRTIO_RING=m
--CONFIG_VIRTIO_PCI=m
--CONFIG_VIRTIO_BALLOON=m
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--CONFIG_GENERIC_FIND_FIRST_BIT=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--CONFIG_CRC_CCITT=m
--CONFIG_CRC16=m
--CONFIG_CRC_T10DIF=m
--CONFIG_CRC_ITU_T=m
--CONFIG_CRC32=y
--CONFIG_CRC7=m
--CONFIG_LIBCRC32C=m
--CONFIG_AUDIT_GENERIC=y
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=m
--CONFIG_LZO_COMPRESS=m
--CONFIG_LZO_DECOMPRESS=m
--CONFIG_GENERIC_ALLOCATOR=y
--CONFIG_REED_SOLOMON=m
--CONFIG_REED_SOLOMON_DEC16=y
--CONFIG_TEXTSEARCH=y
--CONFIG_TEXTSEARCH_KMP=m
--CONFIG_TEXTSEARCH_BM=m
--CONFIG_TEXTSEARCH_FSM=m
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--CONFIG_CHECK_SIGNATURE=y
-diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config
-deleted file mode 100644
-index 69bca9a..0000000
---- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config
-+++ /dev/null
-@@ -1,4143 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.27.21
--# Wed May 13 22:02:04 2009
--#
--CONFIG_64BIT=y
--# CONFIG_X86_32 is not set
--CONFIG_X86_64=y
--CONFIG_X86=y
--CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
--# CONFIG_GENERIC_LOCKBREAK is not set
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_CLOCKSOURCE_WATCHDOG=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
--CONFIG_LOCKDEP_SUPPORT=y
--CONFIG_STACKTRACE_SUPPORT=y
--CONFIG_HAVE_LATENCYTOP_SUPPORT=y
--CONFIG_FAST_CMPXCHG_LOCAL=y
--CONFIG_MMU=y
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_GENERIC_IOMAP=y
--CONFIG_GENERIC_BUG=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_GPIO=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_RWSEM_GENERIC_SPINLOCK=y
--# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
--# CONFIG_ARCH_HAS_ILOG2_U32 is not set
--# CONFIG_ARCH_HAS_ILOG2_U64 is not set
--CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_ARCH_HAS_CPU_RELAX=y
--CONFIG_ARCH_HAS_DEFAULT_IDLE=y
--CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
--CONFIG_HAVE_SETUP_PER_CPU_AREA=y
--CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
--CONFIG_ARCH_HIBERNATION_POSSIBLE=y
--CONFIG_ARCH_SUSPEND_POSSIBLE=y
--CONFIG_ZONE_DMA32=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_AUDIT_ARCH=y
--CONFIG_ARCH_SUPPORTS_AOUT=y
--CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
--CONFIG_GENERIC_HARDIRQS=y
--CONFIG_GENERIC_IRQ_PROBE=y
--CONFIG_GENERIC_PENDING_IRQ=y
--CONFIG_X86_SMP=y
--CONFIG_X86_64_SMP=y
--CONFIG_X86_HT=y
--CONFIG_X86_BIOS_REBOOT=y
--CONFIG_X86_TRAMPOLINE=y
--# CONFIG_KTIME_SCALAR is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_LOCK_KERNEL=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION="-0.1-default"
--# CONFIG_LOCALVERSION_AUTO is not set
--CONFIG_SUSE_KERNEL=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--CONFIG_BSD_PROCESS_ACCT_V3=y
--CONFIG_TASKSTATS=y
--CONFIG_TASK_DELAY_ACCT=y
--CONFIG_TASK_XACCT=y
--CONFIG_TASK_IO_ACCOUNTING=y
--CONFIG_AUDIT=y
--CONFIG_AUDITSYSCALL=y
--CONFIG_AUDIT_TREE=y
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_LOG_BUF_SHIFT=18
--CONFIG_CGROUPS=y
--# CONFIG_CGROUP_DEBUG is not set
--CONFIG_CGROUP_NS=y
--CONFIG_CGROUP_FREEZER=y
--CONFIG_CGROUP_DEVICE=y
--CONFIG_CPUSETS=y
--CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--CONFIG_CGROUP_SCHED=y
--CONFIG_CGROUP_CPUACCT=y
--CONFIG_RESOURCE_COUNTERS=y
--CONFIG_MM_OWNER=y
--CONFIG_CGROUP_MEM_RES_CTLR=y
--# CONFIG_SYSFS_DEPRECATED_V2 is not set
--CONFIG_PROC_PID_CPUSET=y
--CONFIG_RELAY=y
--CONFIG_NAMESPACES=y
--CONFIG_UTS_NS=y
--CONFIG_IPC_NS=y
--CONFIG_USER_NS=y
--CONFIG_PID_NS=y
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--CONFIG_CC_OPTIMIZE_FOR_SIZE=y
--CONFIG_SYSCTL=y
--# CONFIG_EMBEDDED is not set
--CONFIG_UID16=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_PCSPKR_PLATFORM=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--CONFIG_PROFILING=y
--# CONFIG_TRACEPOINTS is not set
--CONFIG_MARKERS=y
--CONFIG_OPROFILE=m
--CONFIG_HAVE_OPROFILE=y
--CONFIG_KPROBES=y
--CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
--CONFIG_KRETPROBES=y
--CONFIG_HAVE_IOREMAP_PROT=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_HAVE_ARCH_TRACEHOOK=y
--# CONFIG_HAVE_DMA_ATTRS is not set
--CONFIG_USE_GENERIC_SMP_HELPERS=y
--# CONFIG_HAVE_CLK is not set
--CONFIG_PROC_PAGE_MONITOR=y
--# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_FORCE_LOAD=y
--CONFIG_MODULE_UNLOAD=y
--CONFIG_MODULE_FORCE_UNLOAD=y
--CONFIG_MODVERSIONS=y
--CONFIG_MODULE_SRCVERSION_ALL=y
--CONFIG_KMOD=y
--CONFIG_STOP_MACHINE=y
--# CONFIG_UTRACE is not set
--CONFIG_BLOCK=y
--CONFIG_BLK_DEV_IO_TRACE=y
--CONFIG_BLK_DEV_BSG=y
--CONFIG_BLK_DEV_INTEGRITY=y
--CONFIG_BLOCK_COMPAT=y
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--CONFIG_DEFAULT_DEADLINE=y
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="deadline"
--CONFIG_PREEMPT_NOTIFIERS=y
--CONFIG_CLASSIC_RCU=y
--CONFIG_FREEZER=y
--
--#
--# Processor type and features
--#
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--CONFIG_SMP=y
--CONFIG_X86_FIND_SMP_CONFIG=y
--CONFIG_X86_MPPARSE=y
--CONFIG_X86_PC=y
--# CONFIG_X86_XEN is not set
--# CONFIG_X86_ELAN is not set
--# CONFIG_X86_VOYAGER is not set
--# CONFIG_X86_GENERICARCH is not set
--# CONFIG_X86_64_XEN is not set
--# CONFIG_X86_VSMP is not set
--# CONFIG_PARAVIRT_GUEST is not set
--CONFIG_MEMTEST=y
--# CONFIG_M386 is not set
--# CONFIG_M486 is not set
--# CONFIG_M586 is not set
--# CONFIG_M586TSC is not set
--# CONFIG_M586MMX is not set
--# CONFIG_M686 is not set
--# CONFIG_MPENTIUMII is not set
--# CONFIG_MPENTIUMIII is not set
--# CONFIG_MPENTIUMM is not set
--# CONFIG_MPENTIUM4 is not set
--# CONFIG_MK6 is not set
--# CONFIG_MK7 is not set
--# CONFIG_MK8 is not set
--# CONFIG_MCRUSOE is not set
--# CONFIG_MEFFICEON is not set
--# CONFIG_MWINCHIPC6 is not set
--# CONFIG_MWINCHIP2 is not set
--# CONFIG_MWINCHIP3D is not set
--# CONFIG_MGEODEGX1 is not set
--# CONFIG_MGEODE_LX is not set
--# CONFIG_MCYRIXIII is not set
--# CONFIG_MVIAC3_2 is not set
--# CONFIG_MVIAC7 is not set
--# CONFIG_MPSC is not set
--# CONFIG_MCORE2 is not set
--CONFIG_GENERIC_CPU=y
--CONFIG_X86_CPU=y
--CONFIG_X86_L1_CACHE_BYTES=128
--CONFIG_X86_INTERNODE_CACHE_BYTES=128
--CONFIG_X86_CMPXCHG=y
--CONFIG_X86_L1_CACHE_SHIFT=7
--CONFIG_X86_WP_WORKS_OK=y
--CONFIG_X86_TSC=y
--CONFIG_X86_CMPXCHG64=y
--CONFIG_X86_CMOV=y
--CONFIG_X86_MINIMUM_CPU_FAMILY=64
--CONFIG_X86_DEBUGCTLMSR=y
--CONFIG_HPET_TIMER=y
--CONFIG_HPET_EMULATE_RTC=y
--CONFIG_DMI=y
--CONFIG_GART_IOMMU=y
--CONFIG_CALGARY_IOMMU=y
--# CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT is not set
--CONFIG_AMD_IOMMU=y
--CONFIG_SWIOTLB=y
--CONFIG_IOMMU_HELPER=y
--CONFIG_MAXSMP=y
--CONFIG_NR_CPUS=512
--CONFIG_SCHED_SMT=y
--CONFIG_SCHED_MC=y
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
--CONFIG_X86_LOCAL_APIC=y
--CONFIG_X86_IO_APIC=y
--CONFIG_X86_MCE=y
--CONFIG_X86_MCE_INTEL=y
--CONFIG_X86_MCE_AMD=y
--CONFIG_I8K=m
--CONFIG_MICROCODE=m
--CONFIG_MICROCODE_OLD_INTERFACE=y
--CONFIG_X86_MSR=m
--CONFIG_X86_CPUID=m
--CONFIG_DIRECT_GBPAGES=y
--CONFIG_NUMA=y
--CONFIG_K8_NUMA=y
--CONFIG_X86_64_ACPI_NUMA=y
--CONFIG_NODES_SPAN_OTHER_NODES=y
--CONFIG_NUMA_EMU=y
--CONFIG_NODES_SHIFT=9
--CONFIG_ARCH_SPARSEMEM_DEFAULT=y
--CONFIG_ARCH_SPARSEMEM_ENABLE=y
--CONFIG_ARCH_SELECT_MEMORY_MODEL=y
--CONFIG_ARCH_MEMORY_PROBE=y
--CONFIG_SELECT_MEMORY_MODEL=y
--# CONFIG_FLATMEM_MANUAL is not set
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--CONFIG_SPARSEMEM_MANUAL=y
--CONFIG_SPARSEMEM=y
--CONFIG_NEED_MULTIPLE_NODES=y
--CONFIG_HAVE_MEMORY_PRESENT=y
--# CONFIG_SPARSEMEM_STATIC is not set
--CONFIG_SPARSEMEM_EXTREME=y
--CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
--CONFIG_SPARSEMEM_VMEMMAP=y
--CONFIG_MEMORY_HOTPLUG=y
--CONFIG_MEMORY_HOTPLUG_SPARSE=y
--CONFIG_PAGEFLAGS_EXTENDED=y
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_MIGRATION=y
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_MMU_NOTIFIER=y
--CONFIG_X86_RESERVE_LOW_64K=y
--CONFIG_MTRR=y
--# CONFIG_MTRR_SANITIZER is not set
--CONFIG_X86_PAT=y
--CONFIG_EFI=y
--CONFIG_SECCOMP=y
--# CONFIG_SECCOMP_DISABLE_TSC is not set
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--CONFIG_SCHED_HRTICK=y
--CONFIG_KEXEC=y
--CONFIG_CRASH_DUMP=y
--CONFIG_PHYSICAL_START=0x200000
--CONFIG_RELOCATABLE=y
--CONFIG_PHYSICAL_ALIGN=0x200000
--CONFIG_HOTPLUG_CPU=y
--CONFIG_COMPAT_VDSO=y
--
--#
--# Hardware Performance Monitoring support
--#
--CONFIG_PERFMON=y
--# CONFIG_PERFMON_DEBUG is not set
--CONFIG_PERFMON_DEBUG_FS=y
--CONFIG_X86_PERFMON_P4=m
--CONFIG_X86_PERFMON_PEBS_P4=m
--CONFIG_X86_PERFMON_CORE=m
--CONFIG_X86_PERFMON_PEBS_CORE=m
--CONFIG_X86_PERFMON_INTEL_ATOM=m
--CONFIG_X86_PERFMON_INTEL_ARCH=m
--CONFIG_X86_PERFMON_AMD64=m
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
--
--#
--# Power management options
--#
--CONFIG_ARCH_HIBERNATION_HEADER=y
--CONFIG_PM=y
--# CONFIG_PM_DEBUG is not set
--CONFIG_PM_SLEEP_SMP=y
--CONFIG_PM_SLEEP=y
--CONFIG_SUSPEND=y
--CONFIG_SUSPEND_FREEZER=y
--CONFIG_HIBERNATION=y
--CONFIG_PM_STD_PARTITION=""
--CONFIG_ACPI=y
--CONFIG_ACPI_SLEEP=y
--CONFIG_ACPI_PROCFS=y
--CONFIG_ACPI_PROCFS_POWER=y
--CONFIG_ACPI_SYSFS_POWER=y
--CONFIG_ACPI_PROC_EVENT=y
--CONFIG_ACPI_AC=m
--CONFIG_ACPI_BATTERY=m
--CONFIG_ACPI_BUTTON=m
--CONFIG_ACPI_VIDEO=m
--CONFIG_ACPI_FAN=m
--CONFIG_ACPI_DOCK=m
--CONFIG_ACPI_PROCESSOR=m
--CONFIG_ACPI_HOTPLUG_CPU=y
--CONFIG_ACPI_THERMAL=m
--CONFIG_ACPI_NUMA=y
--CONFIG_ACPI_WMI=m
--# CONFIG_ACPI_ASUS is not set
--CONFIG_ACPI_TOSHIBA=m
--CONFIG_ACPI_CUSTOM_DSDT_FILE=""
--# CONFIG_ACPI_CUSTOM_DSDT is not set
--CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
--CONFIG_ACPI_BLACKLIST_YEAR=0
--CONFIG_ACPI_DEBUG=y
--# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
--CONFIG_ACPI_EC=y
--CONFIG_ACPI_PCI_SLOT=m
--CONFIG_ACPI_POWER=y
--CONFIG_ACPI_SYSTEM=y
--CONFIG_X86_PM_TIMER=y
--CONFIG_ACPI_CONTAINER=m
--CONFIG_ACPI_HOTPLUG_MEMORY=m
--CONFIG_ACPI_SBS=m
--
--#
--# CPU Frequency scaling
--#
--CONFIG_CPU_FREQ=y
--CONFIG_CPU_FREQ_TABLE=y
--# CONFIG_CPU_FREQ_DEBUG is not set
--CONFIG_CPU_FREQ_STAT=m
--CONFIG_CPU_FREQ_STAT_DETAILS=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
--CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
--CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
--CONFIG_CPU_FREQ_GOV_POWERSAVE=m
--CONFIG_CPU_FREQ_GOV_USERSPACE=m
--CONFIG_CPU_FREQ_GOV_ONDEMAND=y
--CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
--
--#
--# CPUFreq processor drivers
--#
--CONFIG_X86_ACPI_CPUFREQ=m
--CONFIG_X86_POWERNOW_K8=m
--CONFIG_X86_POWERNOW_K8_ACPI=y
--# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
--# CONFIG_X86_P4_CLOCKMOD is not set
--
--#
--# shared options
--#
--# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
--# CONFIG_X86_SPEEDSTEP_LIB is not set
--CONFIG_CPU_IDLE=y
--CONFIG_CPU_IDLE_GOV_LADDER=y
--CONFIG_CPU_IDLE_GOV_MENU=y
--
--#
--# Bus options (PCI etc.)
--#
--CONFIG_PCI=y
--CONFIG_PCI_DIRECT=y
--CONFIG_PCI_MMCONFIG=y
--CONFIG_PCI_DOMAINS=y
--# CONFIG_DMAR is not set
--CONFIG_INTR_REMAP=y
--CONFIG_PCIEPORTBUS=y
--CONFIG_HOTPLUG_PCI_PCIE=m
--CONFIG_PCIEAER=y
--CONFIG_PCIEASPM=y
--# CONFIG_PCIEASPM_DEBUG is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--CONFIG_HT_IRQ=y
--CONFIG_ISA_DMA_API=y
--CONFIG_K8_NB=y
--CONFIG_PCCARD=m
--# CONFIG_PCMCIA_DEBUG is not set
--CONFIG_PCMCIA=m
--CONFIG_PCMCIA_LOAD_CIS=y
--CONFIG_PCMCIA_IOCTL=y
--CONFIG_CARDBUS=y
--
--#
--# PC-card bridges
--#
--CONFIG_YENTA=m
--CONFIG_YENTA_O2=y
--CONFIG_YENTA_RICOH=y
--CONFIG_YENTA_TI=y
--CONFIG_YENTA_ENE_TUNE=y
--CONFIG_YENTA_TOSHIBA=y
--CONFIG_PD6729=m
--CONFIG_I82092=m
--CONFIG_PCCARD_NONSTATIC=m
--CONFIG_HOTPLUG_PCI=m
--CONFIG_HOTPLUG_PCI_FAKE=m
--CONFIG_HOTPLUG_PCI_ACPI=m
--CONFIG_HOTPLUG_PCI_ACPI_IBM=m
--CONFIG_HOTPLUG_PCI_CPCI=y
--CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
--CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
--CONFIG_HOTPLUG_PCI_SHPC=m
--
--#
--# Executable file formats / Emulations
--#
--CONFIG_BINFMT_ELF=y
--CONFIG_COMPAT_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=m
--CONFIG_IA32_EMULATION=y
--CONFIG_IA32_AOUT=y
--CONFIG_COMPAT=y
--CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
--CONFIG_SYSVIPC_COMPAT=y
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=m
--CONFIG_PACKET_MMAP=y
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--CONFIG_XFRM_SUB_POLICY=y
--CONFIG_XFRM_MIGRATE=y
--# CONFIG_XFRM_STATISTICS is not set
--CONFIG_XFRM_IPCOMP=m
--CONFIG_NET_KEY=m
--CONFIG_NET_KEY_MIGRATE=y
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--CONFIG_IP_ROUTE_MULTIPATH=y
--CONFIG_IP_ROUTE_VERBOSE=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--CONFIG_IP_PNP_RARP=y
--CONFIG_NET_IPIP=m
--CONFIG_NET_IPGRE=m
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--CONFIG_INET_AH=m
--CONFIG_INET_ESP=m
--CONFIG_INET_IPCOMP=m
--CONFIG_INET_XFRM_TUNNEL=m
--CONFIG_INET_TUNNEL=m
--CONFIG_INET_XFRM_MODE_TRANSPORT=m
--CONFIG_INET_XFRM_MODE_TUNNEL=m
--CONFIG_INET_XFRM_MODE_BEET=m
--CONFIG_INET_LRO=y
--CONFIG_INET_DIAG=m
--CONFIG_INET_TCP_DIAG=m
--CONFIG_TCP_CONG_ADVANCED=y
--CONFIG_TCP_CONG_BIC=m
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_TCP_CONG_WESTWOOD=m
--CONFIG_TCP_CONG_HTCP=m
--CONFIG_TCP_CONG_HSTCP=m
--CONFIG_TCP_CONG_HYBLA=m
--CONFIG_TCP_CONG_VEGAS=m
--CONFIG_TCP_CONG_SCALABLE=m
--CONFIG_TCP_CONG_LP=m
--CONFIG_TCP_CONG_VENO=m
--CONFIG_TCP_CONG_YEAH=m
--CONFIG_TCP_CONG_ILLINOIS=m
--# CONFIG_DEFAULT_BIC is not set
--CONFIG_DEFAULT_CUBIC=y
--# CONFIG_DEFAULT_HTCP is not set
--# CONFIG_DEFAULT_VEGAS is not set
--# CONFIG_DEFAULT_WESTWOOD is not set
--# CONFIG_DEFAULT_RENO is not set
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--CONFIG_IP_VS=m
--# CONFIG_IP_VS_DEBUG is not set
--CONFIG_IP_VS_TAB_BITS=12
--
--#
--# IPVS transport protocol load balancing support
--#
--CONFIG_IP_VS_PROTO_TCP=y
--CONFIG_IP_VS_PROTO_UDP=y
--CONFIG_IP_VS_PROTO_ESP=y
--CONFIG_IP_VS_PROTO_AH=y
--
--#
--# IPVS scheduler
--#
--CONFIG_IP_VS_RR=m
--CONFIG_IP_VS_WRR=m
--CONFIG_IP_VS_LC=m
--CONFIG_IP_VS_WLC=m
--CONFIG_IP_VS_LBLC=m
--CONFIG_IP_VS_LBLCR=m
--CONFIG_IP_VS_DH=m
--CONFIG_IP_VS_SH=m
--CONFIG_IP_VS_SED=m
--CONFIG_IP_VS_NQ=m
--
--#
--# IPVS application helper
--#
--CONFIG_IP_VS_FTP=m
--CONFIG_IPV6=m
--CONFIG_IPV6_PRIVACY=y
--CONFIG_IPV6_ROUTER_PREF=y
--CONFIG_IPV6_ROUTE_INFO=y
--# CONFIG_IPV6_OPTIMISTIC_DAD is not set
--CONFIG_INET6_AH=m
--CONFIG_INET6_ESP=m
--CONFIG_INET6_IPCOMP=m
--CONFIG_IPV6_MIP6=m
--CONFIG_INET6_XFRM_TUNNEL=m
--CONFIG_INET6_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_TRANSPORT=m
--CONFIG_INET6_XFRM_MODE_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_BEET=m
--CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
--CONFIG_IPV6_SIT=m
--CONFIG_IPV6_NDISC_NODETYPE=y
--CONFIG_IPV6_TUNNEL=m
--CONFIG_IPV6_MULTIPLE_TABLES=y
--CONFIG_IPV6_SUBTREES=y
--# CONFIG_IPV6_MROUTE is not set
--# CONFIG_NETLABEL is not set
--CONFIG_NETWORK_SECMARK=y
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_NETFILTER_ADVANCED=y
--CONFIG_BRIDGE_NETFILTER=y
--
--#
--# Core Netfilter Configuration
--#
--CONFIG_NETFILTER_NETLINK=m
--CONFIG_NETFILTER_NETLINK_QUEUE=m
--CONFIG_NETFILTER_NETLINK_LOG=m
--CONFIG_NF_CONNTRACK=m
--CONFIG_NF_CT_ACCT=y
--CONFIG_NF_CONNTRACK_MARK=y
--CONFIG_NF_CONNTRACK_SECMARK=y
--CONFIG_NF_CONNTRACK_EVENTS=y
--CONFIG_NF_CT_PROTO_DCCP=m
--CONFIG_NF_CT_PROTO_GRE=m
--CONFIG_NF_CT_PROTO_SCTP=m
--CONFIG_NF_CT_PROTO_UDPLITE=m
--CONFIG_NF_CONNTRACK_AMANDA=m
--CONFIG_NF_CONNTRACK_FTP=m
--CONFIG_NF_CONNTRACK_H323=m
--CONFIG_NF_CONNTRACK_IRC=m
--CONFIG_NF_CONNTRACK_NETBIOS_NS=m
--CONFIG_NF_CONNTRACK_PPTP=m
--CONFIG_NF_CONNTRACK_SANE=m
--CONFIG_NF_CONNTRACK_SIP=m
--CONFIG_NF_CONNTRACK_TFTP=m
--CONFIG_NF_CONNTRACK_SLP=m
--CONFIG_NF_CT_NETLINK=m
--CONFIG_NETFILTER_XTABLES=m
--CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
--CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
--CONFIG_NETFILTER_XT_TARGET_DSCP=m
--CONFIG_NETFILTER_XT_TARGET_MARK=m
--CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
--CONFIG_NETFILTER_XT_TARGET_NFLOG=m
--CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
--CONFIG_NETFILTER_XT_TARGET_RATEEST=m
--CONFIG_NETFILTER_XT_TARGET_TRACE=m
--CONFIG_NETFILTER_XT_TARGET_SECMARK=m
--CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
--CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
--CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
--CONFIG_NETFILTER_XT_MATCH_COMMENT=m
--CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
--CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
--CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
--CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
--CONFIG_NETFILTER_XT_MATCH_DCCP=m
--CONFIG_NETFILTER_XT_MATCH_DSCP=m
--CONFIG_NETFILTER_XT_MATCH_ESP=m
--CONFIG_NETFILTER_XT_MATCH_HELPER=m
--CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
--CONFIG_NETFILTER_XT_MATCH_LENGTH=m
--CONFIG_NETFILTER_XT_MATCH_LIMIT=m
--CONFIG_NETFILTER_XT_MATCH_MAC=m
--CONFIG_NETFILTER_XT_MATCH_MARK=m
--CONFIG_NETFILTER_XT_MATCH_OWNER=m
--CONFIG_NETFILTER_XT_MATCH_POLICY=m
--CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
--CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
--CONFIG_NETFILTER_XT_MATCH_QUOTA=m
--CONFIG_NETFILTER_XT_MATCH_RATEEST=m
--CONFIG_NETFILTER_XT_MATCH_REALM=m
--CONFIG_NETFILTER_XT_MATCH_SCTP=m
--CONFIG_NETFILTER_XT_MATCH_STATE=m
--CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
--CONFIG_NETFILTER_XT_MATCH_STRING=m
--CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
--CONFIG_NETFILTER_XT_MATCH_TIME=m
--CONFIG_NETFILTER_XT_MATCH_U32=m
--CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
--
--#
--# IP: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV4=m
--# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
--CONFIG_IP_NF_QUEUE=m
--CONFIG_IP_NF_IPTABLES=m
--CONFIG_IP_NF_MATCH_RECENT=m
--CONFIG_IP_NF_MATCH_ECN=m
--CONFIG_IP_NF_MATCH_AH=m
--CONFIG_IP_NF_MATCH_TTL=m
--CONFIG_IP_NF_MATCH_ADDRTYPE=m
--CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
--CONFIG_IP_NF_FILTER=m
--CONFIG_IP_NF_TARGET_REJECT=m
--CONFIG_IP_NF_TARGET_LOG=m
--CONFIG_IP_NF_TARGET_ULOG=m
--CONFIG_NF_NAT=m
--CONFIG_NF_NAT_NEEDED=y
--CONFIG_IP_NF_TARGET_MASQUERADE=m
--CONFIG_IP_NF_TARGET_REDIRECT=m
--CONFIG_IP_NF_TARGET_NETMAP=m
--CONFIG_NF_NAT_SNMP_BASIC=m
--CONFIG_NF_NAT_PROTO_DCCP=m
--CONFIG_NF_NAT_PROTO_GRE=m
--CONFIG_NF_NAT_PROTO_UDPLITE=m
--CONFIG_NF_NAT_PROTO_SCTP=m
--CONFIG_NF_NAT_FTP=m
--CONFIG_NF_NAT_IRC=m
--CONFIG_NF_NAT_TFTP=m
--CONFIG_NF_NAT_AMANDA=m
--CONFIG_NF_NAT_PPTP=m
--CONFIG_NF_NAT_H323=m
--CONFIG_NF_NAT_SIP=m
--CONFIG_IP_NF_MANGLE=m
--CONFIG_IP_NF_TARGET_ECN=m
--CONFIG_IP_NF_TARGET_TTL=m
--CONFIG_IP_NF_TARGET_CLUSTERIP=m
--CONFIG_IP_NF_RAW=m
--CONFIG_IP_NF_SECURITY=m
--CONFIG_IP_NF_ARPTABLES=m
--CONFIG_IP_NF_ARPFILTER=m
--CONFIG_IP_NF_ARP_MANGLE=m
--
--#
--# IPv6: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV6=m
--CONFIG_IP6_NF_QUEUE=m
--CONFIG_IP6_NF_IPTABLES=m
--CONFIG_IP6_NF_MATCH_RT=m
--CONFIG_IP6_NF_MATCH_OPTS=m
--CONFIG_IP6_NF_MATCH_FRAG=m
--CONFIG_IP6_NF_MATCH_HL=m
--CONFIG_IP6_NF_MATCH_IPV6HEADER=m
--CONFIG_IP6_NF_MATCH_AH=m
--CONFIG_IP6_NF_MATCH_MH=m
--CONFIG_IP6_NF_MATCH_EUI64=m
--CONFIG_IP6_NF_FILTER=m
--CONFIG_IP6_NF_TARGET_LOG=m
--CONFIG_IP6_NF_TARGET_REJECT=m
--CONFIG_IP6_NF_MANGLE=m
--CONFIG_IP6_NF_TARGET_HL=m
--CONFIG_IP6_NF_RAW=m
--CONFIG_IP6_NF_SECURITY=m
--
--#
--# DECnet: Netfilter Configuration
--#
--# CONFIG_DECNET_NF_GRABULATOR is not set
--
--#
--# Bridge: Netfilter Configuration
--#
--CONFIG_BRIDGE_NF_EBTABLES=m
--CONFIG_BRIDGE_EBT_BROUTE=m
--CONFIG_BRIDGE_EBT_T_FILTER=m
--CONFIG_BRIDGE_EBT_T_NAT=m
--CONFIG_BRIDGE_EBT_802_3=m
--CONFIG_BRIDGE_EBT_AMONG=m
--CONFIG_BRIDGE_EBT_ARP=m
--CONFIG_BRIDGE_EBT_IP=m
--CONFIG_BRIDGE_EBT_IP6=m
--CONFIG_BRIDGE_EBT_LIMIT=m
--CONFIG_BRIDGE_EBT_MARK=m
--CONFIG_BRIDGE_EBT_PKTTYPE=m
--CONFIG_BRIDGE_EBT_STP=m
--CONFIG_BRIDGE_EBT_VLAN=m
--CONFIG_BRIDGE_EBT_ARPREPLY=m
--CONFIG_BRIDGE_EBT_DNAT=m
--CONFIG_BRIDGE_EBT_MARK_T=m
--CONFIG_BRIDGE_EBT_REDIRECT=m
--CONFIG_BRIDGE_EBT_SNAT=m
--CONFIG_BRIDGE_EBT_LOG=m
--CONFIG_BRIDGE_EBT_ULOG=m
--CONFIG_BRIDGE_EBT_NFLOG=m
--CONFIG_IP_DCCP=m
--CONFIG_INET_DCCP_DIAG=m
--CONFIG_IP_DCCP_ACKVEC=y
--
--#
--# DCCP CCIDs Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_DCCP_CCID2=m
--# CONFIG_IP_DCCP_CCID2_DEBUG is not set
--CONFIG_IP_DCCP_CCID3=m
--# CONFIG_IP_DCCP_CCID3_DEBUG is not set
--CONFIG_IP_DCCP_CCID3_RTO=100
--CONFIG_IP_DCCP_TFRC_LIB=m
--
--#
--# DCCP Kernel Hacking
--#
--# CONFIG_IP_DCCP_DEBUG is not set
--# CONFIG_NET_DCCPPROBE is not set
--CONFIG_IP_SCTP=m
--# CONFIG_SCTP_DBG_MSG is not set
--# CONFIG_SCTP_DBG_OBJCNT is not set
--# CONFIG_SCTP_HMAC_NONE is not set
--# CONFIG_SCTP_HMAC_SHA1 is not set
--CONFIG_SCTP_HMAC_MD5=y
--# CONFIG_TIPC is not set
--CONFIG_ATM=m
--CONFIG_ATM_CLIP=m
--# CONFIG_ATM_CLIP_NO_ICMP is not set
--CONFIG_ATM_LANE=m
--CONFIG_ATM_MPOA=m
--CONFIG_ATM_BR2684=m
--# CONFIG_ATM_BR2684_IPFILTER is not set
--CONFIG_STP=m
--CONFIG_GARP=m
--CONFIG_BRIDGE=m
--CONFIG_VLAN_8021Q=m
--CONFIG_VLAN_8021Q_GVRP=y
--CONFIG_DECNET=m
--# CONFIG_DECNET_ROUTER is not set
--CONFIG_LLC=y
--CONFIG_LLC2=m
--CONFIG_IPX=m
--CONFIG_IPX_INTERN=y
--CONFIG_ATALK=m
--CONFIG_DEV_APPLETALK=m
--CONFIG_IPDDP=m
--CONFIG_IPDDP_ENCAP=y
--CONFIG_IPDDP_DECAP=y
--CONFIG_X25=m
--CONFIG_LAPB=m
--CONFIG_ECONET=m
--# CONFIG_ECONET_AUNUDP is not set
--# CONFIG_ECONET_NATIVE is not set
--CONFIG_WAN_ROUTER=m
--CONFIG_NET_SCHED=y
--
--#
--# Queueing/Scheduling
--#
--CONFIG_NET_SCH_CBQ=m
--CONFIG_NET_SCH_HTB=m
--CONFIG_NET_SCH_HFSC=m
--CONFIG_NET_SCH_ATM=m
--CONFIG_NET_SCH_PRIO=m
--CONFIG_NET_SCH_MULTIQ=m
--CONFIG_NET_SCH_RED=m
--CONFIG_NET_SCH_SFQ=m
--CONFIG_NET_SCH_TEQL=m
--CONFIG_NET_SCH_TBF=m
--CONFIG_NET_SCH_GRED=m
--CONFIG_NET_SCH_DSMARK=m
--CONFIG_NET_SCH_NETEM=m
--CONFIG_NET_SCH_INGRESS=m
--
--#
--# Classification
--#
--CONFIG_NET_CLS=y
--CONFIG_NET_CLS_BASIC=m
--CONFIG_NET_CLS_TCINDEX=m
--CONFIG_NET_CLS_ROUTE4=m
--CONFIG_NET_CLS_ROUTE=y
--CONFIG_NET_CLS_FW=m
--CONFIG_NET_CLS_U32=m
--CONFIG_CLS_U32_PERF=y
--CONFIG_CLS_U32_MARK=y
--CONFIG_NET_CLS_RSVP=m
--CONFIG_NET_CLS_RSVP6=m
--CONFIG_NET_CLS_FLOW=m
--CONFIG_NET_EMATCH=y
--CONFIG_NET_EMATCH_STACK=32
--CONFIG_NET_EMATCH_CMP=m
--CONFIG_NET_EMATCH_NBYTE=m
--CONFIG_NET_EMATCH_U32=m
--CONFIG_NET_EMATCH_META=m
--CONFIG_NET_EMATCH_TEXT=m
--CONFIG_NET_CLS_ACT=y
--CONFIG_NET_ACT_POLICE=m
--CONFIG_NET_ACT_GACT=m
--CONFIG_GACT_PROB=y
--CONFIG_NET_ACT_MIRRED=m
--CONFIG_NET_ACT_IPT=m
--CONFIG_NET_ACT_NAT=m
--CONFIG_NET_ACT_PEDIT=m
--CONFIG_NET_ACT_SIMP=m
--CONFIG_NET_ACT_SKBEDIT=m
--# CONFIG_NET_CLS_IND is not set
--CONFIG_NET_SCH_FIFO=y
--CONFIG_DCB=m
--CONFIG_DCBNL=y
--
--#
--# Network testing
--#
--CONFIG_NET_PKTGEN=m
--CONFIG_NET_TCPPROBE=m
--CONFIG_HAMRADIO=y
--
--#
--# Packet Radio protocols
--#
--CONFIG_AX25=m
--CONFIG_AX25_DAMA_SLAVE=y
--CONFIG_NETROM=m
--CONFIG_ROSE=m
--
--#
--# AX.25 network device drivers
--#
--CONFIG_MKISS=m
--CONFIG_6PACK=m
--CONFIG_BPQETHER=m
--CONFIG_BAYCOM_SER_FDX=m
--CONFIG_BAYCOM_SER_HDX=m
--CONFIG_BAYCOM_PAR=m
--CONFIG_YAM=m
--CONFIG_CAN=m
--CONFIG_CAN_RAW=m
--CONFIG_CAN_BCM=m
--
--#
--# CAN Device Drivers
--#
--CONFIG_CAN_VCAN=m
--# CONFIG_CAN_DEBUG_DEVICES is not set
--CONFIG_IRDA=m
--
--#
--# IrDA protocols
--#
--CONFIG_IRLAN=m
--CONFIG_IRNET=m
--CONFIG_IRCOMM=m
--CONFIG_IRDA_ULTRA=y
--
--#
--# IrDA options
--#
--CONFIG_IRDA_CACHE_LAST_LSAP=y
--# CONFIG_IRDA_FAST_RR is not set
--# CONFIG_IRDA_DEBUG is not set
--
--#
--# Infrared-port device drivers
--#
--
--#
--# SIR device drivers
--#
--CONFIG_IRTTY_SIR=m
--
--#
--# Dongle support
--#
--CONFIG_DONGLE=y
--CONFIG_ESI_DONGLE=m
--CONFIG_ACTISYS_DONGLE=m
--CONFIG_TEKRAM_DONGLE=m
--CONFIG_TOIM3232_DONGLE=m
--CONFIG_LITELINK_DONGLE=m
--CONFIG_MA600_DONGLE=m
--CONFIG_GIRBIL_DONGLE=m
--CONFIG_MCP2120_DONGLE=m
--CONFIG_OLD_BELKIN_DONGLE=m
--CONFIG_ACT200L_DONGLE=m
--CONFIG_KINGSUN_DONGLE=m
--CONFIG_KSDAZZLE_DONGLE=m
--CONFIG_KS959_DONGLE=m
--
--#
--# FIR device drivers
--#
--CONFIG_USB_IRDA=m
--CONFIG_SIGMATEL_FIR=m
--CONFIG_NSC_FIR=m
--CONFIG_WINBOND_FIR=m
--CONFIG_SMC_IRCC_FIR=m
--CONFIG_ALI_FIR=m
--CONFIG_VLSI_FIR=m
--CONFIG_VIA_FIR=m
--CONFIG_MCS_FIR=m
--CONFIG_BT=m
--CONFIG_BT_L2CAP=m
--CONFIG_BT_SCO=m
--CONFIG_BT_RFCOMM=m
--CONFIG_BT_RFCOMM_TTY=y
--CONFIG_BT_BNEP=m
--CONFIG_BT_BNEP_MC_FILTER=y
--CONFIG_BT_BNEP_PROTO_FILTER=y
--CONFIG_BT_CMTP=m
--CONFIG_BT_HIDP=m
--
--#
--# Bluetooth device drivers
--#
--CONFIG_BT_HCIBTUSB=m
--CONFIG_BT_HCIBTSDIO=m
--CONFIG_BT_HCIUART=m
--CONFIG_BT_HCIUART_H4=y
--CONFIG_BT_HCIUART_BCSP=y
--CONFIG_BT_HCIUART_LL=y
--CONFIG_BT_HCIBCM203X=m
--CONFIG_BT_HCIBPA10X=m
--CONFIG_BT_HCIBFUSB=m
--CONFIG_BT_HCIDTL1=m
--CONFIG_BT_HCIBT3C=m
--CONFIG_BT_HCIBLUECARD=m
--CONFIG_BT_HCIBTUART=m
--CONFIG_BT_HCIVHCI=m
--CONFIG_AF_RXRPC=m
--# CONFIG_AF_RXRPC_DEBUG is not set
--CONFIG_RXKAD=m
--CONFIG_FIB_RULES=y
--
--#
--# Wireless
--#
--CONFIG_CFG80211=m
--CONFIG_NL80211=y
--CONFIG_WIRELESS_EXT=y
--CONFIG_WIRELESS_EXT_SYSFS=y
--CONFIG_MAC80211=m
--
--#
--# Rate control algorithm selection
--#
--CONFIG_MAC80211_RC_PID=y
--CONFIG_MAC80211_RC_DEFAULT_PID=y
--CONFIG_MAC80211_RC_DEFAULT="pid"
--CONFIG_MAC80211_MESH=y
--CONFIG_MAC80211_LEDS=y
--CONFIG_MAC80211_DEBUGFS=y
--# CONFIG_MAC80211_DEBUG_MENU is not set
--CONFIG_IEEE80211=m
--# CONFIG_IEEE80211_DEBUG is not set
--CONFIG_IEEE80211_CRYPT_WEP=m
--CONFIG_IEEE80211_CRYPT_CCMP=m
--CONFIG_IEEE80211_CRYPT_TKIP=m
--CONFIG_RFKILL=m
--CONFIG_RFKILL_INPUT=m
--CONFIG_RFKILL_LEDS=y
--CONFIG_NET_9P=m
--CONFIG_NET_9P_VIRTIO=m
--# CONFIG_NET_9P_DEBUG is not set
--CONFIG_NETVM=y
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH=""
--# CONFIG_STANDALONE is not set
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--CONFIG_FIRMWARE_IN_KERNEL=y
--CONFIG_EXTRA_FIRMWARE=""
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=m
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=m
--CONFIG_MTD_PARTITIONS=y
--CONFIG_MTD_REDBOOT_PARTS=m
--CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
--# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
--# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
--CONFIG_MTD_AR7_PARTS=m
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=m
--CONFIG_MTD_BLKDEVS=m
--CONFIG_MTD_BLOCK=m
--# CONFIG_MTD_BLOCK_RO is not set
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--CONFIG_RFD_FTL=m
--# CONFIG_SSFDC is not set
--CONFIG_MTD_OOPS=m
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=m
--CONFIG_MTD_JEDECPROBE=m
--CONFIG_MTD_GEN_PROBE=m
--CONFIG_MTD_CFI_ADV_OPTIONS=y
--CONFIG_MTD_CFI_NOSWAP=y
--# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_GEOMETRY is not set
--CONFIG_MTD_MAP_BANK_WIDTH_1=y
--CONFIG_MTD_MAP_BANK_WIDTH_2=y
--CONFIG_MTD_MAP_BANK_WIDTH_4=y
--# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
--CONFIG_MTD_CFI_I1=y
--CONFIG_MTD_CFI_I2=y
--# CONFIG_MTD_CFI_I4 is not set
--# CONFIG_MTD_CFI_I8 is not set
--# CONFIG_MTD_OTP is not set
--CONFIG_MTD_CFI_INTELEXT=m
--CONFIG_MTD_CFI_AMDSTD=m
--CONFIG_MTD_CFI_STAA=m
--CONFIG_MTD_CFI_UTIL=m
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--CONFIG_MTD_ABSENT=m
--
--#
--# Mapping drivers for chip access
--#
--CONFIG_MTD_COMPLEX_MAPPINGS=y
--CONFIG_MTD_PHYSMAP=m
--CONFIG_MTD_PHYSMAP_START=0x8000000
--CONFIG_MTD_PHYSMAP_LEN=0x4000000
--CONFIG_MTD_PHYSMAP_BANKWIDTH=2
--# CONFIG_MTD_SC520CDP is not set
--# CONFIG_MTD_NETSC520 is not set
--CONFIG_MTD_TS5500=m
--# CONFIG_MTD_SBC_GXX is not set
--CONFIG_MTD_AMD76XROM=m
--CONFIG_MTD_ICHXROM=m
--CONFIG_MTD_ESB2ROM=m
--CONFIG_MTD_CK804XROM=m
--CONFIG_MTD_SCB2_FLASH=m
--# CONFIG_MTD_NETtel is not set
--# CONFIG_MTD_DILNETPC is not set
--# CONFIG_MTD_L440GX is not set
--CONFIG_MTD_PCI=m
--CONFIG_MTD_INTEL_VR_NOR=m
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--CONFIG_MTD_PMC551=m
--CONFIG_MTD_PMC551_BUGFIX=y
--# CONFIG_MTD_PMC551_DEBUG is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--CONFIG_MTD_SLRAM=m
--CONFIG_MTD_PHRAM=m
--CONFIG_MTD_MTDRAM=m
--CONFIG_MTDRAM_TOTAL_SIZE=4096
--CONFIG_MTDRAM_ERASE_SIZE=128
--CONFIG_MTD_BLOCK2MTD=m
--
--#
--# Disk-On-Chip Device Drivers
--#
--CONFIG_MTD_DOC2000=m
--CONFIG_MTD_DOC2001=m
--CONFIG_MTD_DOC2001PLUS=m
--CONFIG_MTD_DOCPROBE=m
--CONFIG_MTD_DOCECC=m
--CONFIG_MTD_DOCPROBE_ADVANCED=y
--CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
--CONFIG_MTD_DOCPROBE_HIGH=y
--CONFIG_MTD_DOCPROBE_55AA=y
--CONFIG_MTD_NAND=m
--# CONFIG_MTD_NAND_VERIFY_WRITE is not set
--CONFIG_MTD_NAND_ECC_SMC=y
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=m
--CONFIG_MTD_NAND_DISKONCHIP=m
--# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
--CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
--CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
--CONFIG_MTD_NAND_CAFE=m
--CONFIG_MTD_NAND_NANDSIM=m
--CONFIG_MTD_NAND_PLATFORM=m
--CONFIG_MTD_ALAUDA=m
--CONFIG_MTD_ONENAND=m
--# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
--CONFIG_MTD_ONENAND_OTP=y
--CONFIG_MTD_ONENAND_2X_PROGRAM=y
--CONFIG_MTD_ONENAND_SIM=m
--
--#
--# UBI - Unsorted block images
--#
--CONFIG_MTD_UBI=m
--CONFIG_MTD_UBI_WL_THRESHOLD=4096
--CONFIG_MTD_UBI_BEB_RESERVE=1
--# CONFIG_MTD_UBI_GLUEBI is not set
--
--#
--# UBI debugging options
--#
--# CONFIG_MTD_UBI_DEBUG is not set
--CONFIG_PARPORT=m
--CONFIG_PARPORT_PC=m
--CONFIG_PARPORT_SERIAL=m
--CONFIG_PARPORT_PC_FIFO=y
--CONFIG_PARPORT_PC_SUPERIO=y
--CONFIG_PARPORT_PC_PCMCIA=m
--# CONFIG_PARPORT_GSC is not set
--CONFIG_PARPORT_AX88796=m
--CONFIG_PARPORT_1284=y
--CONFIG_PARPORT_NOT_PC=y
--CONFIG_PNP=y
--# CONFIG_PNP_DEBUG is not set
--
--#
--# Protocols
--#
--CONFIG_PNPACPI=y
--CONFIG_BLK_DEV=y
--CONFIG_BLK_DEV_FD=m
--CONFIG_PARIDE=m
--
--#
--# Parallel IDE high-level drivers
--#
--CONFIG_PARIDE_PD=m
--CONFIG_PARIDE_PCD=m
--CONFIG_PARIDE_PF=m
--CONFIG_PARIDE_PT=m
--CONFIG_PARIDE_PG=m
--
--#
--# Parallel IDE protocol modules
--#
--CONFIG_PARIDE_ATEN=m
--CONFIG_PARIDE_BPCK=m
--CONFIG_PARIDE_COMM=m
--CONFIG_PARIDE_DSTR=m
--CONFIG_PARIDE_FIT2=m
--CONFIG_PARIDE_FIT3=m
--CONFIG_PARIDE_EPAT=m
--CONFIG_PARIDE_EPATC8=y
--CONFIG_PARIDE_EPIA=m
--CONFIG_PARIDE_FRIQ=m
--CONFIG_PARIDE_FRPW=m
--CONFIG_PARIDE_KBIC=m
--CONFIG_PARIDE_KTTI=m
--CONFIG_PARIDE_ON20=m
--CONFIG_PARIDE_ON26=m
--CONFIG_BLK_CPQ_DA=m
--CONFIG_BLK_CPQ_CISS_DA=m
--CONFIG_CISS_SCSI_TAPE=y
--CONFIG_BLK_DEV_DAC960=m
--CONFIG_BLK_DEV_UMEM=m
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=m
--CONFIG_BLK_DEV_CRYPTOLOOP=m
--CONFIG_BLK_DEV_NBD=m
--CONFIG_BLK_DEV_SX8=m
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=m
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=128000
--CONFIG_BLK_DEV_XIP=y
--CONFIG_CDROM_PKTCDVD=m
--CONFIG_CDROM_PKTCDVD_BUFFERS=8
--CONFIG_CDROM_PKTCDVD_WCACHE=y
--CONFIG_ATA_OVER_ETH=m
--CONFIG_CIPHER_TWOFISH=m
--CONFIG_VIRTIO_BLK=m
--# CONFIG_BLK_DEV_HD is not set
--CONFIG_MISC_DEVICES=y
--CONFIG_IBM_ASM=m
--CONFIG_PHANTOM=m
--CONFIG_EEPROM_93CX6=m
--CONFIG_SGI_IOC4=m
--CONFIG_TIFM_CORE=m
--CONFIG_TIFM_7XX1=m
--CONFIG_ACER_WMI=m
--CONFIG_ASUS_LAPTOP=m
--CONFIG_FUJITSU_LAPTOP=m
--# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
--CONFIG_HP_WMI=m
--CONFIG_MSI_LAPTOP=m
--CONFIG_PANASONIC_LAPTOP=m
--CONFIG_COMPAL_LAPTOP=m
--CONFIG_SONY_LAPTOP=m
--CONFIG_SONYPI_COMPAT=y
--CONFIG_THINKPAD_ACPI=m
--# CONFIG_THINKPAD_ACPI_DEBUG is not set
--CONFIG_THINKPAD_ACPI_BAY=y
--CONFIG_THINKPAD_ACPI_VIDEO=y
--CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
--CONFIG_INTEL_MENLOW=m
--CONFIG_EEEPC_LAPTOP=m
--CONFIG_ENCLOSURE_SERVICES=m
--CONFIG_SGI_XP=m
--CONFIG_HP_ILO=m
--CONFIG_SGI_GRU=m
--# CONFIG_SGI_GRU_DEBUG is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=m
--CONFIG_BLK_DEV_IDE=m
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--CONFIG_IDE_TIMINGS=y
--CONFIG_IDE_ATAPI=y
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=m
--CONFIG_IDEDISK_MULTI_MODE=y
--CONFIG_BLK_DEV_IDECS=m
--CONFIG_BLK_DEV_DELKIN=m
--CONFIG_BLK_DEV_IDECD=m
--CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
--CONFIG_BLK_DEV_IDETAPE=m
--CONFIG_BLK_DEV_IDEFLOPPY=m
--CONFIG_BLK_DEV_IDESCSI=m
--CONFIG_BLK_DEV_IDEACPI=y
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=m
--CONFIG_BLK_DEV_PLATFORM=m
--CONFIG_BLK_DEV_CMD640=m
--CONFIG_BLK_DEV_CMD640_ENHANCED=y
--CONFIG_BLK_DEV_IDEPNP=m
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_BLK_DEV_OFFBOARD=y
--CONFIG_BLK_DEV_GENERIC=m
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_RZ1000=m
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--CONFIG_BLK_DEV_AEC62XX=m
--CONFIG_BLK_DEV_ALI15X3=m
--CONFIG_BLK_DEV_AMD74XX=m
--CONFIG_BLK_DEV_ATIIXP=m
--CONFIG_BLK_DEV_CMD64X=m
--CONFIG_BLK_DEV_TRIFLEX=m
--CONFIG_BLK_DEV_CS5520=m
--CONFIG_BLK_DEV_CS5530=m
--CONFIG_BLK_DEV_HPT366=m
--CONFIG_BLK_DEV_JMICRON=m
--CONFIG_BLK_DEV_SC1200=m
--CONFIG_BLK_DEV_PIIX=m
--CONFIG_BLK_DEV_IT8213=m
--CONFIG_BLK_DEV_IT821X=m
--CONFIG_BLK_DEV_NS87415=m
--CONFIG_BLK_DEV_PDC202XX_OLD=m
--CONFIG_BLK_DEV_PDC202XX_NEW=m
--CONFIG_BLK_DEV_SVWKS=m
--CONFIG_BLK_DEV_SIIMAGE=m
--CONFIG_BLK_DEV_SIS5513=m
--CONFIG_BLK_DEV_SLC90E66=m
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=m
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--
--#
--# SCSI device support
--#
--CONFIG_RAID_ATTRS=m
--CONFIG_SCSI=m
--CONFIG_SCSI_DMA=y
--CONFIG_SCSI_TGT=m
--CONFIG_SCSI_NETLINK=y
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=m
--CONFIG_SD_IOSTATS=y
--CONFIG_CHR_DEV_ST=m
--CONFIG_CHR_DEV_OSST=m
--CONFIG_BLK_DEV_SR=m
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=m
--CONFIG_CHR_DEV_SCH=m
--CONFIG_SCSI_ENCLOSURE=m
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--CONFIG_SCSI_CONSTANTS=y
--CONFIG_SCSI_LOGGING=y
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=m
--CONFIG_SCSI_FC_ATTRS=m
--CONFIG_SCSI_FC_TGT_ATTRS=y
--CONFIG_SCSI_ISCSI_ATTRS=m
--CONFIG_SCSI_SAS_ATTRS=m
--CONFIG_SCSI_SAS_LIBSAS=m
--CONFIG_SCSI_SAS_ATA=y
--CONFIG_SCSI_SAS_HOST_SMP=y
--CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
--CONFIG_SCSI_SRP_ATTRS=m
--CONFIG_SCSI_SRP_TGT_ATTRS=y
--CONFIG_SCSI_LOWLEVEL=y
--CONFIG_ISCSI_TCP=m
--CONFIG_SCSI_CXGB3_ISCSI=m
--CONFIG_BLK_DEV_3W_XXXX_RAID=m
--CONFIG_SCSI_3W_9XXX=m
--CONFIG_SCSI_ACARD=m
--CONFIG_SCSI_AACRAID=m
--CONFIG_SCSI_AIC7XXX=m
--CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
--CONFIG_AIC7XXX_RESET_DELAY_MS=5000
--# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
--CONFIG_AIC7XXX_DEBUG_MASK=0
--CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC7XXX_OLD=m
--CONFIG_SCSI_AIC79XX=m
--CONFIG_AIC79XX_CMDS_PER_DEVICE=32
--CONFIG_AIC79XX_RESET_DELAY_MS=15000
--# CONFIG_AIC79XX_DEBUG_ENABLE is not set
--CONFIG_AIC79XX_DEBUG_MASK=0
--CONFIG_AIC79XX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC94XX=m
--CONFIG_AIC94XX_DEBUG=y
--CONFIG_SCSI_DPT_I2O=m
--CONFIG_SCSI_ADVANSYS=m
--CONFIG_SCSI_ARCMSR=m
--CONFIG_SCSI_ARCMSR_AER=y
--CONFIG_MEGARAID_NEWGEN=y
--CONFIG_MEGARAID_MM=m
--CONFIG_MEGARAID_MAILBOX=m
--CONFIG_MEGARAID_LEGACY=m
--CONFIG_MEGARAID_SAS=m
--CONFIG_SCSI_HPTIOP=m
--CONFIG_SCSI_BUSLOGIC=m
--CONFIG_LIBFC=m
--CONFIG_FCOE=m
--CONFIG_SCSI_DMX3191D=m
--CONFIG_SCSI_EATA=m
--CONFIG_SCSI_EATA_TAGGED_QUEUE=y
--CONFIG_SCSI_EATA_LINKED_COMMANDS=y
--CONFIG_SCSI_EATA_MAX_TAGS=16
--CONFIG_SCSI_FUTURE_DOMAIN=m
--CONFIG_SCSI_GDTH=m
--CONFIG_SCSI_IPS=m
--CONFIG_SCSI_INITIO=m
--# CONFIG_SCSI_INIA100 is not set
--CONFIG_SCSI_PPA=m
--CONFIG_SCSI_IMM=m
--# CONFIG_SCSI_IZIP_EPP16 is not set
--# CONFIG_SCSI_IZIP_SLOW_CTR is not set
--CONFIG_SCSI_MVSAS=m
--CONFIG_SCSI_STEX=m
--CONFIG_SCSI_SYM53C8XX_2=m
--CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
--CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
--CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
--CONFIG_SCSI_SYM53C8XX_MMIO=y
--# CONFIG_SCSI_IPR is not set
--CONFIG_SCSI_QLOGIC_1280=m
--CONFIG_SCSI_QLA_FC=m
--CONFIG_SCSI_QLA_ISCSI=m
--CONFIG_SCSI_LPFC=m
--CONFIG_SCSI_DC395x=m
--CONFIG_SCSI_DC390T=m
--CONFIG_SCSI_DEBUG=m
--CONFIG_SCSI_SRP=m
--CONFIG_SCSI_LOWLEVEL_PCMCIA=y
--CONFIG_PCMCIA_FDOMAIN=m
--CONFIG_PCMCIA_QLOGIC=m
--CONFIG_PCMCIA_SYM53C500=m
--CONFIG_SCSI_DH=m
--CONFIG_SCSI_DH_RDAC=m
--CONFIG_SCSI_DH_HP_SW=m
--CONFIG_SCSI_DH_EMC=m
--CONFIG_SCSI_DH_ALUA=m
--CONFIG_ATA=m
--# CONFIG_ATA_NONSTANDARD is not set
--CONFIG_ATA_ACPI=y
--CONFIG_SATA_PMP=y
--CONFIG_SATA_AHCI=m
--CONFIG_SATA_SIL24=m
--CONFIG_ATA_SFF=y
--CONFIG_SATA_SVW=m
--CONFIG_ATA_PIIX=m
--CONFIG_SATA_MV=m
--CONFIG_SATA_NV=m
--CONFIG_PDC_ADMA=m
--CONFIG_SATA_QSTOR=m
--CONFIG_SATA_PROMISE=m
--CONFIG_SATA_SX4=m
--CONFIG_SATA_SIL=m
--CONFIG_SATA_SIS=m
--CONFIG_SATA_ULI=m
--CONFIG_SATA_VIA=m
--CONFIG_SATA_VITESSE=m
--CONFIG_SATA_INIC162X=m
--CONFIG_PATA_ACPI=m
--CONFIG_PATA_ALI=m
--CONFIG_PATA_AMD=m
--CONFIG_PATA_ARTOP=m
--CONFIG_PATA_ATIIXP=m
--CONFIG_PATA_CMD640_PCI=m
--CONFIG_PATA_CMD64X=m
--CONFIG_PATA_CS5520=m
--CONFIG_PATA_CS5530=m
--CONFIG_PATA_CYPRESS=m
--CONFIG_PATA_EFAR=m
--CONFIG_ATA_GENERIC=m
--CONFIG_PATA_HPT366=m
--CONFIG_PATA_HPT37X=m
--CONFIG_PATA_HPT3X2N=m
--CONFIG_PATA_HPT3X3=m
--# CONFIG_PATA_HPT3X3_DMA is not set
--CONFIG_PATA_IT821X=m
--CONFIG_PATA_IT8213=m
--CONFIG_PATA_JMICRON=m
--CONFIG_PATA_TRIFLEX=m
--CONFIG_PATA_MARVELL=m
--CONFIG_PATA_MPIIX=m
--CONFIG_PATA_OLDPIIX=m
--CONFIG_PATA_NETCELL=m
--CONFIG_PATA_NINJA32=m
--CONFIG_PATA_NS87410=m
--CONFIG_PATA_NS87415=m
--CONFIG_PATA_OPTI=m
--CONFIG_PATA_OPTIDMA=m
--CONFIG_PATA_PCMCIA=m
--CONFIG_PATA_PDC_OLD=m
--CONFIG_PATA_RADISYS=m
--CONFIG_PATA_RZ1000=m
--CONFIG_PATA_SC1200=m
--CONFIG_PATA_SERVERWORKS=m
--CONFIG_PATA_PDC2027X=m
--CONFIG_PATA_SIL680=m
--CONFIG_PATA_SIS=m
--CONFIG_PATA_VIA=m
--CONFIG_PATA_WINBOND=m
--CONFIG_PATA_SCH=m
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=m
--CONFIG_MD_RAID0=m
--CONFIG_MD_RAID1=m
--CONFIG_MD_RAID10=m
--CONFIG_MD_RAID456=m
--CONFIG_MD_RAID5_RESHAPE=y
--CONFIG_MD_MULTIPATH=m
--CONFIG_MD_FAULTY=m
--CONFIG_BLK_DEV_DM=m
--# CONFIG_DM_DEBUG is not set
--CONFIG_DM_CRYPT=m
--CONFIG_DM_SNAPSHOT=m
--CONFIG_DM_MIRROR=m
--CONFIG_DM_ZERO=m
--CONFIG_DM_MULTIPATH=m
--CONFIG_DM_DELAY=m
--CONFIG_DM_RAID45=m
--CONFIG_DM_UEVENT=y
--CONFIG_FUSION=y
--CONFIG_FUSION_SPI=m
--CONFIG_FUSION_FC=m
--CONFIG_FUSION_SAS=m
--CONFIG_FUSION_MAX_SGE=128
--CONFIG_FUSION_MAX_FC_SGE=256
--CONFIG_FUSION_CTL=m
--CONFIG_FUSION_LAN=m
--# CONFIG_FUSION_LOGGING is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--
--#
--# Enable only one of the two stacks, unless you know what you are doing
--#
--# CONFIG_FIREWIRE is not set
--CONFIG_IEEE1394=m
--CONFIG_IEEE1394_OHCI1394=m
--CONFIG_IEEE1394_PCILYNX=m
--CONFIG_IEEE1394_SBP2=m
--# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
--CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
--CONFIG_IEEE1394_ETH1394=m
--CONFIG_IEEE1394_RAWIO=m
--CONFIG_IEEE1394_VIDEO1394=m
--CONFIG_IEEE1394_DV1394=m
--# CONFIG_IEEE1394_VERBOSEDEBUG is not set
--CONFIG_I2O=m
--CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
--CONFIG_I2O_EXT_ADAPTEC=y
--CONFIG_I2O_EXT_ADAPTEC_DMA64=y
--CONFIG_I2O_CONFIG=m
--CONFIG_I2O_CONFIG_OLD_IOCTL=y
--CONFIG_I2O_BUS=m
--CONFIG_I2O_BLOCK=m
--CONFIG_I2O_SCSI=m
--CONFIG_I2O_PROC=m
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--CONFIG_IFB=m
--CONFIG_DUMMY=m
--CONFIG_BONDING=m
--CONFIG_MACVLAN=m
--CONFIG_EQUALIZER=m
--CONFIG_TUN=m
--CONFIG_VETH=m
--# CONFIG_NET_SB1000 is not set
--CONFIG_ARCNET=m
--CONFIG_ARCNET_1201=m
--CONFIG_ARCNET_1051=m
--CONFIG_ARCNET_RAW=m
--CONFIG_ARCNET_CAP=m
--CONFIG_ARCNET_COM90xx=m
--CONFIG_ARCNET_COM90xxIO=m
--CONFIG_ARCNET_RIM_I=m
--# CONFIG_ARCNET_COM20020 is not set
--CONFIG_PHYLIB=m
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=m
--CONFIG_DAVICOM_PHY=m
--CONFIG_QSEMI_PHY=m
--CONFIG_LXT_PHY=m
--CONFIG_CICADA_PHY=m
--CONFIG_VITESSE_PHY=m
--CONFIG_SMSC_PHY=m
--CONFIG_BROADCOM_PHY=m
--CONFIG_ICPLUS_PHY=m
--CONFIG_REALTEK_PHY=m
--CONFIG_MDIO_BITBANG=m
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=m
--CONFIG_HAPPYMEAL=m
--CONFIG_SUNGEM=m
--CONFIG_CASSINI=m
--CONFIG_NET_VENDOR_3COM=y
--CONFIG_VORTEX=m
--CONFIG_TYPHOON=m
--CONFIG_ENC28J60=m
--# CONFIG_ENC28J60_WRITEVERIFY is not set
--CONFIG_NET_TULIP=y
--CONFIG_DE2104X=m
--CONFIG_TULIP=m
--# CONFIG_TULIP_MWI is not set
--# CONFIG_TULIP_MMIO is not set
--CONFIG_TULIP_NAPI=y
--CONFIG_TULIP_NAPI_HW_MITIGATION=y
--CONFIG_DE4X5=m
--CONFIG_WINBOND_840=m
--CONFIG_DM9102=m
--CONFIG_ULI526X=m
--CONFIG_PCMCIA_XIRCOM=m
--CONFIG_HP100=m
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--CONFIG_PCNET32=m
--CONFIG_AMD8111_ETH=m
--CONFIG_ADAPTEC_STARFIRE=m
--CONFIG_B44=m
--CONFIG_B44_PCI_AUTOSELECT=y
--CONFIG_B44_PCICORE_AUTOSELECT=y
--CONFIG_B44_PCI=y
--CONFIG_FORCEDETH=m
--CONFIG_FORCEDETH_NAPI=y
--CONFIG_EEPRO100=m
--CONFIG_E100=m
--CONFIG_FEALNX=m
--CONFIG_NATSEMI=m
--CONFIG_NE2K_PCI=m
--CONFIG_8139CP=m
--CONFIG_8139TOO=m
--# CONFIG_8139TOO_PIO is not set
--# CONFIG_8139TOO_TUNE_TWISTER is not set
--CONFIG_8139TOO_8129=y
--# CONFIG_8139_OLD_RX_RESET is not set
--CONFIG_R6040=m
--CONFIG_SIS900=m
--CONFIG_EPIC100=m
--CONFIG_SUNDANCE=m
--# CONFIG_SUNDANCE_MMIO is not set
--CONFIG_TLAN=m
--CONFIG_VIA_RHINE=m
--# CONFIG_VIA_RHINE_MMIO is not set
--CONFIG_SC92031=m
--# CONFIG_NET_POCKET is not set
--CONFIG_ATL2=m
--CONFIG_NETDEV_1000=y
--CONFIG_ACENIC=m
--# CONFIG_ACENIC_OMIT_TIGON_I is not set
--CONFIG_DL2K=m
--CONFIG_E1000=m
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--CONFIG_E1000E=m
--CONFIG_IP1000=m
--CONFIG_IGB=m
--CONFIG_IGB_LRO=y
--CONFIG_NS83820=m
--CONFIG_HAMACHI=m
--CONFIG_YELLOWFIN=m
--CONFIG_R8169=m
--CONFIG_R8169_VLAN=y
--CONFIG_SIS190=m
--CONFIG_SKGE=m
--# CONFIG_SKGE_DEBUG is not set
--CONFIG_SKY2=m
--# CONFIG_SKY2_DEBUG is not set
--CONFIG_VIA_VELOCITY=m
--CONFIG_TIGON3=m
--CONFIG_BNX2=m
--CONFIG_QLA3XXX=m
--CONFIG_ATL1=m
--CONFIG_ATL1E=m
--CONFIG_NETDEV_10000=y
--CONFIG_CHELSIO_T1=m
--CONFIG_CHELSIO_T1_1G=y
--CONFIG_CHELSIO_T3=m
--CONFIG_IXGBE=m
--CONFIG_IXGBE_LRO=y
--CONFIG_IXGBE_DCB=y
--CONFIG_IXGB=m
--CONFIG_S2IO=m
--CONFIG_MYRI10GE=m
--CONFIG_NETXEN_NIC=m
--CONFIG_NIU=m
--CONFIG_MLX4_CORE=m
--CONFIG_MLX4_DEBUG=y
--CONFIG_TEHUTI=m
--CONFIG_BNX2X=m
--CONFIG_SFC=m
--# CONFIG_SFC_RESOURCE is not set
--CONFIG_TR=y
--CONFIG_IBMOL=m
--CONFIG_3C359=m
--CONFIG_TMS380TR=m
--CONFIG_TMSPCI=m
--CONFIG_ABYSS=m
--
--#
--# Wireless LAN
--#
--CONFIG_WLAN_PRE80211=y
--CONFIG_STRIP=m
--CONFIG_PCMCIA_WAVELAN=m
--CONFIG_PCMCIA_NETWAVE=m
--CONFIG_WLAN_80211=y
--CONFIG_PCMCIA_RAYCS=m
--CONFIG_IPW2100=m
--CONFIG_IPW2100_MONITOR=y
--# CONFIG_IPW2100_DEBUG is not set
--CONFIG_IPW2200=m
--CONFIG_IPW2200_MONITOR=y
--CONFIG_IPW2200_RADIOTAP=y
--CONFIG_IPW2200_PROMISCUOUS=y
--CONFIG_IPW2200_QOS=y
--# CONFIG_IPW2200_DEBUG is not set
--CONFIG_LIBERTAS=m
--CONFIG_LIBERTAS_USB=m
--CONFIG_LIBERTAS_CS=m
--CONFIG_LIBERTAS_SDIO=m
--# CONFIG_LIBERTAS_DEBUG is not set
--CONFIG_AIRO=m
--CONFIG_HERMES=m
--CONFIG_PLX_HERMES=m
--CONFIG_TMD_HERMES=m
--CONFIG_NORTEL_HERMES=m
--CONFIG_PCI_HERMES=m
--CONFIG_PCMCIA_HERMES=m
--CONFIG_PCMCIA_SPECTRUM=m
--CONFIG_ATMEL=m
--CONFIG_PCI_ATMEL=m
--CONFIG_PCMCIA_ATMEL=m
--CONFIG_AIRO_CS=m
--CONFIG_PCMCIA_WL3501=m
--CONFIG_PRISM54=m
--CONFIG_USB_ZD1201=m
--CONFIG_USB_NET_RNDIS_WLAN=m
--CONFIG_RTL8180=m
--CONFIG_RTL8187=m
--CONFIG_ADM8211=m
--CONFIG_MAC80211_HWSIM=m
--CONFIG_P54_COMMON=m
--CONFIG_P54_USB=m
--CONFIG_P54_PCI=m
--CONFIG_ATH5K=m
--# CONFIG_ATH5K_DEBUG is not set
--CONFIG_ATH9K=m
--CONFIG_IWLWIFI=m
--CONFIG_IWLCORE=m
--CONFIG_IWLWIFI_LEDS=y
--CONFIG_IWLWIFI_RFKILL=y
--# CONFIG_IWLWIFI_DEBUG is not set
--CONFIG_IWLAGN=m
--CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
--CONFIG_IWLAGN_LEDS=y
--CONFIG_IWL4965=y
--CONFIG_IWL5000=y
--CONFIG_IWL3945=m
--CONFIG_IWL3945_RFKILL=y
--CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
--CONFIG_IWL3945_LEDS=y
--# CONFIG_IWL3945_DEBUG is not set
--CONFIG_HOSTAP=m
--CONFIG_HOSTAP_FIRMWARE=y
--CONFIG_HOSTAP_FIRMWARE_NVRAM=y
--CONFIG_HOSTAP_PLX=m
--CONFIG_HOSTAP_PCI=m
--CONFIG_HOSTAP_CS=m
--CONFIG_B43=m
--CONFIG_B43_PCI_AUTOSELECT=y
--CONFIG_B43_PCICORE_AUTOSELECT=y
--CONFIG_B43_PCMCIA=y
--CONFIG_B43_PIO=y
--CONFIG_B43_LEDS=y
--CONFIG_B43_RFKILL=y
--# CONFIG_B43_DEBUG is not set
--CONFIG_B43LEGACY=m
--CONFIG_B43LEGACY_PCI_AUTOSELECT=y
--CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
--CONFIG_B43LEGACY_LEDS=y
--CONFIG_B43LEGACY_RFKILL=y
--# CONFIG_B43LEGACY_DEBUG is not set
--CONFIG_B43LEGACY_DMA=y
--CONFIG_B43LEGACY_PIO=y
--CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
--# CONFIG_B43LEGACY_DMA_MODE is not set
--# CONFIG_B43LEGACY_PIO_MODE is not set
--CONFIG_ZD1211RW=m
--# CONFIG_ZD1211RW_DEBUG is not set
--CONFIG_RT2X00=m
--CONFIG_RT2X00_LIB=m
--CONFIG_RT2X00_LIB_PCI=m
--CONFIG_RT2X00_LIB_USB=m
--CONFIG_RT2X00_LIB_FIRMWARE=y
--CONFIG_RT2X00_LIB_RFKILL=y
--CONFIG_RT2X00_LIB_LEDS=y
--CONFIG_RT2400PCI=m
--CONFIG_RT2400PCI_RFKILL=y
--CONFIG_RT2400PCI_LEDS=y
--CONFIG_RT2500PCI=m
--CONFIG_RT2500PCI_RFKILL=y
--CONFIG_RT2500PCI_LEDS=y
--CONFIG_RT61PCI=m
--CONFIG_RT61PCI_RFKILL=y
--CONFIG_RT61PCI_LEDS=y
--CONFIG_RT2500USB=m
--CONFIG_RT2500USB_LEDS=y
--CONFIG_RT73USB=m
--CONFIG_RT73USB_LEDS=y
--# CONFIG_RT2X00_LIB_DEBUGFS is not set
--# CONFIG_RT2X00_DEBUG is not set
--
--#
--# USB Network Adapters
--#
--CONFIG_USB_CATC=m
--CONFIG_USB_KAWETH=m
--CONFIG_USB_PEGASUS=m
--CONFIG_USB_RTL8150=m
--CONFIG_USB_USBNET=m
--CONFIG_USB_NET_AX8817X=m
--CONFIG_USB_NET_CDCETHER=m
--CONFIG_USB_NET_DM9601=m
--CONFIG_USB_NET_GL620A=m
--CONFIG_USB_NET_NET1080=m
--CONFIG_USB_NET_PLUSB=m
--CONFIG_USB_NET_MCS7830=m
--CONFIG_USB_NET_RNDIS_HOST=m
--CONFIG_USB_NET_CDC_SUBSET=m
--CONFIG_USB_ALI_M5632=y
--CONFIG_USB_AN2720=y
--CONFIG_USB_BELKIN=y
--CONFIG_USB_ARMLINUX=y
--CONFIG_USB_EPSON2888=y
--CONFIG_USB_KC2190=y
--CONFIG_USB_NET_ZAURUS=m
--CONFIG_USB_HSO=m
--CONFIG_NET_PCMCIA=y
--CONFIG_PCMCIA_3C589=m
--CONFIG_PCMCIA_3C574=m
--CONFIG_PCMCIA_FMVJ18X=m
--CONFIG_PCMCIA_PCNET=m
--CONFIG_PCMCIA_NMCLAN=m
--CONFIG_PCMCIA_SMC91C92=m
--CONFIG_PCMCIA_XIRC2PS=m
--CONFIG_PCMCIA_AXNET=m
--CONFIG_WAN=y
--CONFIG_LANMEDIA=m
--CONFIG_HDLC=m
--CONFIG_HDLC_RAW=m
--CONFIG_HDLC_RAW_ETH=m
--CONFIG_HDLC_CISCO=m
--CONFIG_HDLC_FR=m
--CONFIG_HDLC_PPP=m
--CONFIG_HDLC_X25=m
--CONFIG_PCI200SYN=m
--CONFIG_WANXL=m
--# CONFIG_PC300 is not set
--CONFIG_PC300TOO=m
--CONFIG_FARSYNC=m
--# CONFIG_DSCC4 is not set
--CONFIG_DLCI=m
--CONFIG_DLCI_MAX=8
--# CONFIG_WAN_ROUTER_DRIVERS is not set
--CONFIG_LAPBETHER=m
--CONFIG_X25_ASY=m
--# CONFIG_SBNI is not set
--CONFIG_ATM_DRIVERS=y
--CONFIG_ATM_DUMMY=m
--CONFIG_ATM_TCP=m
--CONFIG_ATM_LANAI=m
--CONFIG_ATM_ENI=m
--# CONFIG_ATM_ENI_DEBUG is not set
--CONFIG_ATM_ENI_TUNE_BURST=y
--# CONFIG_ATM_ENI_BURST_TX_16W is not set
--CONFIG_ATM_ENI_BURST_TX_8W=y
--CONFIG_ATM_ENI_BURST_TX_4W=y
--CONFIG_ATM_ENI_BURST_TX_2W=y
--# CONFIG_ATM_ENI_BURST_RX_16W is not set
--# CONFIG_ATM_ENI_BURST_RX_8W is not set
--CONFIG_ATM_ENI_BURST_RX_4W=y
--CONFIG_ATM_ENI_BURST_RX_2W=y
--CONFIG_ATM_FIRESTREAM=m
--CONFIG_ATM_ZATM=m
--# CONFIG_ATM_ZATM_DEBUG is not set
--CONFIG_ATM_IDT77252=m
--# CONFIG_ATM_IDT77252_DEBUG is not set
--# CONFIG_ATM_IDT77252_RCV_ALL is not set
--CONFIG_ATM_IDT77252_USE_SUNI=y
--CONFIG_ATM_AMBASSADOR=m
--# CONFIG_ATM_AMBASSADOR_DEBUG is not set
--CONFIG_ATM_HORIZON=m
--# CONFIG_ATM_HORIZON_DEBUG is not set
--CONFIG_ATM_IA=m
--# CONFIG_ATM_IA_DEBUG is not set
--CONFIG_ATM_FORE200E=m
--CONFIG_ATM_FORE200E_USE_TASKLET=y
--CONFIG_ATM_FORE200E_TX_RETRY=16
--CONFIG_ATM_FORE200E_DEBUG=0
--CONFIG_ATM_HE=m
--CONFIG_ATM_HE_USE_SUNI=y
--CONFIG_FDDI=y
--# CONFIG_DEFXX is not set
--CONFIG_SKFP=m
--CONFIG_HIPPI=y
--CONFIG_ROADRUNNER=m
--CONFIG_ROADRUNNER_LARGE_RINGS=y
--CONFIG_PLIP=m
--CONFIG_PPP=m
--CONFIG_PPP_MULTILINK=y
--CONFIG_PPP_FILTER=y
--CONFIG_PPP_ASYNC=m
--CONFIG_PPP_SYNC_TTY=m
--CONFIG_PPP_DEFLATE=m
--CONFIG_PPP_BSDCOMP=m
--CONFIG_PPP_MPPE=m
--CONFIG_PPPOE=m
--CONFIG_PPPOATM=m
--CONFIG_PPPOL2TP=m
--CONFIG_SLIP=m
--CONFIG_SLIP_COMPRESSED=y
--CONFIG_SLHC=m
--CONFIG_SLIP_SMART=y
--CONFIG_SLIP_MODE_SLIP6=y
--CONFIG_NET_FC=y
--CONFIG_NETCONSOLE=m
--CONFIG_NETCONSOLE_DYNAMIC=y
--CONFIG_NETPOLL=y
--CONFIG_NETPOLL_TRAP=y
--CONFIG_NET_POLL_CONTROLLER=y
--CONFIG_VIRTIO_NET=m
--CONFIG_ISDN=y
--CONFIG_MISDN=m
--CONFIG_MISDN_DSP=m
--CONFIG_MISDN_L1OIP=m
--
--#
--# mISDN hardware drivers
--#
--CONFIG_MISDN_HFCPCI=m
--CONFIG_MISDN_HFCMULTI=m
--CONFIG_ISDN_I4L=m
--CONFIG_ISDN_PPP=y
--CONFIG_ISDN_PPP_VJ=y
--CONFIG_ISDN_MPP=y
--CONFIG_IPPP_FILTER=y
--CONFIG_ISDN_PPP_BSDCOMP=m
--CONFIG_ISDN_AUDIO=y
--CONFIG_ISDN_TTY_FAX=y
--CONFIG_ISDN_X25=y
--
--#
--# ISDN feature submodules
--#
--CONFIG_ISDN_DIVERSION=m
--
--#
--# ISDN4Linux hardware drivers
--#
--
--#
--# Passive cards
--#
--CONFIG_ISDN_DRV_HISAX=m
--
--#
--# D-channel protocol features
--#
--CONFIG_HISAX_EURO=y
--CONFIG_DE_AOC=y
--# CONFIG_HISAX_NO_SENDCOMPLETE is not set
--# CONFIG_HISAX_NO_LLC is not set
--# CONFIG_HISAX_NO_KEYPAD is not set
--CONFIG_HISAX_1TR6=y
--CONFIG_HISAX_NI1=y
--CONFIG_HISAX_MAX_CARDS=8
--
--#
--# HiSax supported cards
--#
--CONFIG_HISAX_16_3=y
--CONFIG_HISAX_TELESPCI=y
--CONFIG_HISAX_S0BOX=y
--CONFIG_HISAX_FRITZPCI=y
--CONFIG_HISAX_AVM_A1_PCMCIA=y
--CONFIG_HISAX_ELSA=y
--CONFIG_HISAX_DIEHLDIVA=y
--CONFIG_HISAX_SEDLBAUER=y
--CONFIG_HISAX_NETJET=y
--CONFIG_HISAX_NETJET_U=y
--CONFIG_HISAX_NICCY=y
--CONFIG_HISAX_BKM_A4T=y
--CONFIG_HISAX_SCT_QUADRO=y
--CONFIG_HISAX_GAZEL=y
--CONFIG_HISAX_HFC_PCI=y
--CONFIG_HISAX_W6692=y
--CONFIG_HISAX_HFC_SX=y
--CONFIG_HISAX_ENTERNOW_PCI=y
--CONFIG_HISAX_DEBUG=y
--
--#
--# HiSax PCMCIA card service modules
--#
--CONFIG_HISAX_SEDLBAUER_CS=m
--CONFIG_HISAX_ELSA_CS=m
--CONFIG_HISAX_AVM_A1_CS=m
--CONFIG_HISAX_TELES_CS=m
--
--#
--# HiSax sub driver modules
--#
--CONFIG_HISAX_ST5481=m
--CONFIG_HISAX_HFCUSB=m
--CONFIG_HISAX_HFC4S8S=m
--CONFIG_HISAX_FRITZ_PCIPNP=m
--CONFIG_HISAX_HDLC=y
--
--#
--# Active cards
--#
--CONFIG_HYSDN=m
--CONFIG_HYSDN_CAPI=y
--CONFIG_ISDN_DRV_GIGASET=m
--CONFIG_GIGASET_BASE=m
--CONFIG_GIGASET_M105=m
--CONFIG_GIGASET_M101=m
--# CONFIG_GIGASET_DEBUG is not set
--CONFIG_GIGASET_UNDOCREQ=y
--CONFIG_ISDN_CAPI=m
--CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
--CONFIG_CAPI_TRACE=y
--CONFIG_ISDN_CAPI_MIDDLEWARE=y
--CONFIG_ISDN_CAPI_CAPI20=m
--CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
--CONFIG_ISDN_CAPI_CAPIFS=m
--CONFIG_ISDN_CAPI_CAPIDRV=m
--
--#
--# CAPI hardware drivers
--#
--CONFIG_CAPI_AVM=y
--CONFIG_ISDN_DRV_AVMB1_B1PCI=m
--CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
--CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
--CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
--CONFIG_ISDN_DRV_AVMB1_T1PCI=m
--CONFIG_ISDN_DRV_AVMB1_C4=m
--# CONFIG_CAPI_EICON is not set
--CONFIG_PHONE=m
--CONFIG_PHONE_IXJ=m
--CONFIG_PHONE_IXJ_PCMCIA=m
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--CONFIG_INPUT_FF_MEMLESS=m
--CONFIG_INPUT_POLLDEV=m
--
--#
--# Userland interfaces
--#
--CONFIG_INPUT_MOUSEDEV=y
--CONFIG_INPUT_MOUSEDEV_PSAUX=y
--CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
--CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
--CONFIG_INPUT_JOYDEV=m
--CONFIG_INPUT_EVDEV=y
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
--CONFIG_KEYBOARD_SUNKBD=m
--# CONFIG_KEYBOARD_LKKBD is not set
--CONFIG_KEYBOARD_XTKBD=m
--CONFIG_KEYBOARD_NEWTON=m
--# CONFIG_KEYBOARD_STOWAWAY is not set
--CONFIG_KEYBOARD_GPIO=m
--CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
--CONFIG_MOUSE_PS2_ALPS=y
--CONFIG_MOUSE_PS2_LOGIPS2PP=y
--CONFIG_MOUSE_PS2_SYNAPTICS=y
--CONFIG_MOUSE_PS2_LIFEBOOK=y
--CONFIG_MOUSE_PS2_TRACKPOINT=y
--# CONFIG_MOUSE_PS2_TOUCHKIT is not set
--CONFIG_MOUSE_SERIAL=m
--CONFIG_MOUSE_APPLETOUCH=m
--CONFIG_MOUSE_BCM5974=m
--# CONFIG_MOUSE_VSXXXAA is not set
--CONFIG_MOUSE_GPIO=m
--CONFIG_INPUT_JOYSTICK=y
--CONFIG_JOYSTICK_ANALOG=m
--CONFIG_JOYSTICK_A3D=m
--CONFIG_JOYSTICK_ADI=m
--CONFIG_JOYSTICK_COBRA=m
--CONFIG_JOYSTICK_GF2K=m
--CONFIG_JOYSTICK_GRIP=m
--CONFIG_JOYSTICK_GRIP_MP=m
--CONFIG_JOYSTICK_GUILLEMOT=m
--CONFIG_JOYSTICK_INTERACT=m
--CONFIG_JOYSTICK_SIDEWINDER=m
--CONFIG_JOYSTICK_TMDC=m
--CONFIG_JOYSTICK_IFORCE=m
--CONFIG_JOYSTICK_IFORCE_USB=y
--CONFIG_JOYSTICK_IFORCE_232=y
--CONFIG_JOYSTICK_WARRIOR=m
--CONFIG_JOYSTICK_MAGELLAN=m
--CONFIG_JOYSTICK_SPACEORB=m
--CONFIG_JOYSTICK_SPACEBALL=m
--CONFIG_JOYSTICK_STINGER=m
--CONFIG_JOYSTICK_TWIDJOY=m
--CONFIG_JOYSTICK_ZHENHUA=m
--CONFIG_JOYSTICK_DB9=m
--CONFIG_JOYSTICK_GAMECON=m
--CONFIG_JOYSTICK_TURBOGRAFX=m
--CONFIG_JOYSTICK_JOYDUMP=m
--CONFIG_JOYSTICK_XPAD=m
--CONFIG_JOYSTICK_XPAD_FF=y
--CONFIG_JOYSTICK_XPAD_LEDS=y
--CONFIG_INPUT_TABLET=y
--CONFIG_TABLET_USB_ACECAD=m
--CONFIG_TABLET_USB_AIPTEK=m
--CONFIG_TABLET_USB_GTCO=m
--CONFIG_TABLET_USB_KBTAB=m
--CONFIG_TABLET_USB_WACOM=m
--CONFIG_INPUT_TOUCHSCREEN=y
--CONFIG_TOUCHSCREEN_ADS7846=m
--CONFIG_TOUCHSCREEN_FUJITSU=m
--CONFIG_TOUCHSCREEN_GUNZE=m
--CONFIG_TOUCHSCREEN_ELO=m
--CONFIG_TOUCHSCREEN_ELOUSB=m
--CONFIG_TOUCHSCREEN_MTOUCH=m
--CONFIG_TOUCHSCREEN_INEXIO=m
--CONFIG_TOUCHSCREEN_MK712=m
--CONFIG_TOUCHSCREEN_PENMOUNT=m
--CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
--CONFIG_TOUCHSCREEN_TOUCHWIN=m
--CONFIG_TOUCHSCREEN_UCB1400=m
--CONFIG_TOUCHSCREEN_WM97XX=m
--CONFIG_TOUCHSCREEN_WM9705=y
--CONFIG_TOUCHSCREEN_WM9712=y
--CONFIG_TOUCHSCREEN_WM9713=y
--CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
--CONFIG_TOUCHSCREEN_USB_EGALAX=y
--CONFIG_TOUCHSCREEN_USB_PANJIT=y
--CONFIG_TOUCHSCREEN_USB_3M=y
--CONFIG_TOUCHSCREEN_USB_ITM=y
--CONFIG_TOUCHSCREEN_USB_ETURBO=y
--CONFIG_TOUCHSCREEN_USB_GUNZE=y
--CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
--CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
--CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
--CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
--CONFIG_TOUCHSCREEN_USB_GOTOP=y
--CONFIG_TOUCHSCREEN_TOUCHIT213=m
--CONFIG_INPUT_MISC=y
--CONFIG_INPUT_PCSPKR=m
--CONFIG_INPUT_APANEL=m
--CONFIG_INPUT_ATLAS_BTNS=m
--CONFIG_INPUT_ATI_REMOTE=m
--CONFIG_INPUT_ATI_REMOTE2=m
--CONFIG_INPUT_KEYSPAN_REMOTE=m
--CONFIG_INPUT_POWERMATE=m
--CONFIG_INPUT_YEALINK=m
--CONFIG_INPUT_UINPUT=m
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=m
--CONFIG_SERIO_CT82C710=m
--CONFIG_SERIO_PARKBD=m
--CONFIG_SERIO_PCIPS2=m
--CONFIG_SERIO_LIBPS2=y
--CONFIG_SERIO_RAW=m
--CONFIG_GAMEPORT=m
--CONFIG_GAMEPORT_NS558=m
--CONFIG_GAMEPORT_L4=m
--CONFIG_GAMEPORT_EMU10K1=m
--CONFIG_GAMEPORT_FM801=m
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_CONSOLE_TRANSLATIONS=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--CONFIG_VT_HW_CONSOLE_BINDING=y
--CONFIG_DEVKMEM=y
--CONFIG_SERIAL_NONSTANDARD=y
--CONFIG_COMPUTONE=m
--CONFIG_ROCKETPORT=m
--CONFIG_CYCLADES=m
--# CONFIG_CYZ_INTR is not set
--CONFIG_DIGIEPCA=m
--CONFIG_MOXA_INTELLIO=m
--CONFIG_MOXA_SMARTIO=m
--CONFIG_ISI=m
--CONFIG_SYNCLINK=m
--CONFIG_SYNCLINKMP=m
--CONFIG_SYNCLINK_GT=m
--CONFIG_N_HDLC=m
--CONFIG_RISCOM8=m
--CONFIG_SPECIALIX=m
--CONFIG_SX=m
--CONFIG_RIO=m
--CONFIG_RIO_OLDPCI=y
--CONFIG_STALDRV=y
--CONFIG_NOZOMI=m
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_FIX_EARLYCON_MEM=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_PNP=y
--CONFIG_SERIAL_8250_CS=m
--CONFIG_SERIAL_8250_NR_UARTS=16
--CONFIG_SERIAL_8250_RUNTIME_UARTS=8
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_JSM=m
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=0
--CONFIG_PRINTER=m
--# CONFIG_LP_CONSOLE is not set
--CONFIG_PPDEV=m
--CONFIG_HVC_DRIVER=y
--CONFIG_VIRTIO_CONSOLE=m
--CONFIG_IPMI_HANDLER=m
--CONFIG_IPMI_PANIC_EVENT=y
--# CONFIG_IPMI_PANIC_STRING is not set
--CONFIG_IPMI_DEVICE_INTERFACE=m
--CONFIG_IPMI_SI=m
--CONFIG_IPMI_WATCHDOG=m
--CONFIG_IPMI_POWEROFF=m
--CONFIG_HW_RANDOM=y
--CONFIG_HW_RANDOM_INTEL=m
--CONFIG_HW_RANDOM_AMD=m
--CONFIG_HW_RANDOM_VIRTIO=m
--CONFIG_NVRAM=y
--CONFIG_R3964=m
--CONFIG_APPLICOM=m
--
--#
--# PCMCIA character devices
--#
--CONFIG_SYNCLINK_CS=m
--CONFIG_CARDMAN_4000=m
--CONFIG_CARDMAN_4040=m
--CONFIG_IPWIRELESS=m
--# CONFIG_MWAVE is not set
--CONFIG_PC8736x_GPIO=m
--CONFIG_NSC_GPIO=m
--CONFIG_RAW_DRIVER=m
--CONFIG_MAX_RAW_DEVS=4096
--CONFIG_HPET=y
--CONFIG_HPET_MMAP=y
--CONFIG_HANGCHECK_TIMER=m
--CONFIG_TCG_TPM=m
--CONFIG_TCG_TIS=m
--CONFIG_TCG_NSC=m
--CONFIG_TCG_ATMEL=m
--CONFIG_TCG_INFINEON=m
--CONFIG_TELCLOCK=m
--CONFIG_DEVPORT=y
--CONFIG_CRASHER=m
--CONFIG_I2C=m
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=m
--CONFIG_I2C_HELPER_AUTO=y
--CONFIG_I2C_ALGOBIT=m
--CONFIG_I2C_ALGOPCA=m
--
--#
--# I2C Hardware Bus support
--#
--
--#
--# PC SMBus host controller drivers
--#
--CONFIG_I2C_ALI1535=m
--CONFIG_I2C_ALI1563=m
--CONFIG_I2C_ALI15X3=m
--CONFIG_I2C_AMD756=m
--CONFIG_I2C_AMD756_S4882=m
--CONFIG_I2C_AMD8111=m
--CONFIG_I2C_I801=m
--CONFIG_I2C_ISCH=m
--CONFIG_I2C_PIIX4=m
--CONFIG_I2C_NFORCE2=m
--CONFIG_I2C_NFORCE2_S4985=m
--CONFIG_I2C_SIS5595=m
--CONFIG_I2C_SIS630=m
--CONFIG_I2C_SIS96X=m
--CONFIG_I2C_VIA=m
--CONFIG_I2C_VIAPRO=m
--
--#
--# I2C system bus drivers (mostly embedded / system-on-chip)
--#
--CONFIG_I2C_GPIO=m
--CONFIG_I2C_OCORES=m
--# CONFIG_I2C_SIMTEC is not set
--
--#
--# External I2C/SMBus adapter drivers
--#
--CONFIG_I2C_PARPORT=m
--CONFIG_I2C_PARPORT_LIGHT=m
--CONFIG_I2C_TAOS_EVM=m
--CONFIG_I2C_TINY_USB=m
--
--#
--# Graphics adapter I2C/DDC channel drivers
--#
--CONFIG_I2C_VOODOO3=m
--
--#
--# Other I2C/SMBus bus drivers
--#
--CONFIG_I2C_PCA_PLATFORM=m
--CONFIG_I2C_STUB=m
--
--#
--# Miscellaneous I2C Chip support
--#
--CONFIG_DS1682=m
--CONFIG_AT24=m
--CONFIG_SENSORS_EEPROM=m
--CONFIG_SENSORS_PCF8591=m
--# CONFIG_TPS65010 is not set
--CONFIG_SENSORS_MAX6875=m
--CONFIG_SENSORS_TSL2550=m
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--CONFIG_SPI=y
--CONFIG_SPI_DEBUG=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=m
--CONFIG_SPI_BUTTERFLY=m
--CONFIG_SPI_LM70_LLP=m
--
--#
--# SPI Protocol Masters
--#
--CONFIG_SPI_AT25=m
--CONFIG_SPI_SPIDEV=m
--CONFIG_SPI_TLE62X0=m
--CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
--CONFIG_GPIOLIB=y
--# CONFIG_DEBUG_GPIO is not set
--CONFIG_GPIO_SYSFS=y
--
--#
--# I2C GPIO expanders:
--#
--CONFIG_GPIO_MAX732X=m
--CONFIG_GPIO_PCA953X=m
--CONFIG_GPIO_PCF857X=m
--
--#
--# PCI GPIO expanders:
--#
--
--#
--# SPI GPIO expanders:
--#
--CONFIG_GPIO_MAX7301=m
--CONFIG_GPIO_MCP23S08=m
--CONFIG_W1=m
--CONFIG_W1_CON=y
--
--#
--# 1-wire Bus Masters
--#
--CONFIG_W1_MASTER_MATROX=m
--CONFIG_W1_MASTER_DS2490=m
--CONFIG_W1_MASTER_DS2482=m
--CONFIG_W1_MASTER_GPIO=m
--
--#
--# 1-wire Slaves
--#
--CONFIG_W1_SLAVE_THERM=m
--CONFIG_W1_SLAVE_SMEM=m
--CONFIG_W1_SLAVE_DS2433=m
--CONFIG_W1_SLAVE_DS2433_CRC=y
--CONFIG_W1_SLAVE_DS2760=m
--CONFIG_POWER_SUPPLY=y
--# CONFIG_POWER_SUPPLY_DEBUG is not set
--CONFIG_PDA_POWER=m
--CONFIG_BATTERY_DS2760=m
--CONFIG_HWMON=m
--CONFIG_HWMON_VID=m
--CONFIG_SENSORS_ABITUGURU=m
--CONFIG_SENSORS_ABITUGURU3=m
--CONFIG_SENSORS_AD7414=m
--CONFIG_SENSORS_AD7418=m
--CONFIG_SENSORS_ADCXX=m
--CONFIG_SENSORS_ADM1021=m
--CONFIG_SENSORS_ADM1025=m
--CONFIG_SENSORS_ADM1026=m
--CONFIG_SENSORS_ADM1029=m
--CONFIG_SENSORS_ADM1031=m
--CONFIG_SENSORS_ADM9240=m
--CONFIG_SENSORS_ADT7470=m
--CONFIG_SENSORS_ADT7473=m
--CONFIG_SENSORS_K8TEMP=m
--CONFIG_SENSORS_ASB100=m
--CONFIG_SENSORS_ATXP1=m
--CONFIG_SENSORS_DS1621=m
--CONFIG_SENSORS_I5K_AMB=m
--CONFIG_SENSORS_F71805F=m
--CONFIG_SENSORS_F71882FG=m
--CONFIG_SENSORS_F75375S=m
--CONFIG_SENSORS_FSCHER=m
--CONFIG_SENSORS_FSCPOS=m
--CONFIG_SENSORS_FSCHMD=m
--CONFIG_SENSORS_GL518SM=m
--CONFIG_SENSORS_GL520SM=m
--CONFIG_SENSORS_CORETEMP=m
--CONFIG_SENSORS_IBMAEM=m
--CONFIG_SENSORS_IBMPEX=m
--CONFIG_SENSORS_IT87=m
--CONFIG_SENSORS_LM63=m
--CONFIG_SENSORS_LM70=m
--CONFIG_SENSORS_LM75=m
--CONFIG_SENSORS_LM77=m
--CONFIG_SENSORS_LM78=m
--CONFIG_SENSORS_LM80=m
--CONFIG_SENSORS_LM83=m
--CONFIG_SENSORS_LM85=m
--CONFIG_SENSORS_LM87=m
--CONFIG_SENSORS_LM90=m
--CONFIG_SENSORS_LM92=m
--CONFIG_SENSORS_LM93=m
--CONFIG_SENSORS_MAX1619=m
--CONFIG_SENSORS_MAX6650=m
--CONFIG_SENSORS_PC87360=m
--CONFIG_SENSORS_PC87427=m
--CONFIG_SENSORS_SIS5595=m
--CONFIG_SENSORS_DME1737=m
--CONFIG_SENSORS_SMSC47M1=m
--CONFIG_SENSORS_SMSC47M192=m
--CONFIG_SENSORS_SMSC47B397=m
--CONFIG_SENSORS_ADS7828=m
--CONFIG_SENSORS_THMC50=m
--CONFIG_SENSORS_VIA686A=m
--CONFIG_SENSORS_VT1211=m
--CONFIG_SENSORS_VT8231=m
--CONFIG_SENSORS_W83781D=m
--CONFIG_SENSORS_W83791D=m
--CONFIG_SENSORS_W83792D=m
--CONFIG_SENSORS_W83793=m
--CONFIG_SENSORS_W83L785TS=m
--CONFIG_SENSORS_W83L786NG=m
--CONFIG_SENSORS_W83627HF=m
--CONFIG_SENSORS_W83627EHF=m
--CONFIG_SENSORS_HDAPS=m
--CONFIG_SENSORS_APPLESMC=m
--# CONFIG_HWMON_DEBUG_CHIP is not set
--CONFIG_THERMAL=m
--CONFIG_THERMAL_HWMON=y
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--CONFIG_SOFT_WATCHDOG=m
--CONFIG_ACQUIRE_WDT=m
--CONFIG_ADVANTECH_WDT=m
--CONFIG_ALIM1535_WDT=m
--CONFIG_ALIM7101_WDT=m
--CONFIG_SC520_WDT=m
--CONFIG_EUROTECH_WDT=m
--CONFIG_IB700_WDT=m
--CONFIG_IBMASR=m
--CONFIG_WAFER_WDT=m
--CONFIG_I6300ESB_WDT=m
--CONFIG_ITCO_WDT=m
--CONFIG_ITCO_VENDOR_SUPPORT=y
--CONFIG_IT8712F_WDT=m
--CONFIG_HP_WATCHDOG=m
--CONFIG_SC1200_WDT=m
--CONFIG_PC87413_WDT=m
--CONFIG_60XX_WDT=m
--CONFIG_SBC8360_WDT=m
--CONFIG_CPU5_WDT=m
--CONFIG_SMSC37B787_WDT=m
--CONFIG_W83627HF_WDT=m
--CONFIG_W83697HF_WDT=m
--CONFIG_W83877F_WDT=m
--CONFIG_W83977F_WDT=m
--CONFIG_MACHZ_WDT=m
--CONFIG_SBC_EPX_C3_WATCHDOG=m
--
--#
--# PCI-based Watchdog Cards
--#
--CONFIG_PCIPCWATCHDOG=m
--CONFIG_WDTPCI=m
--CONFIG_WDT_501_PCI=y
--
--#
--# USB-based Watchdog Cards
--#
--CONFIG_USBPCWATCHDOG=m
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--CONFIG_SSB=m
--CONFIG_SSB_SPROM=y
--CONFIG_SSB_BLOCKIO=y
--CONFIG_SSB_PCIHOST_POSSIBLE=y
--CONFIG_SSB_PCIHOST=y
--CONFIG_SSB_B43_PCI_BRIDGE=y
--CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
--CONFIG_SSB_PCMCIAHOST=y
--# CONFIG_SSB_DEBUG is not set
--CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
--CONFIG_SSB_DRIVER_PCICORE=y
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_CORE is not set
--CONFIG_MFD_SM501=m
--CONFIG_MFD_SM501_GPIO=y
--CONFIG_HTC_PASIC3=m
--# CONFIG_MFD_TMIO is not set
--
--#
--# Multimedia devices
--#
--
--#
--# Multimedia core support
--#
--CONFIG_VIDEO_DEV=m
--CONFIG_VIDEO_V4L2_COMMON=m
--CONFIG_VIDEO_ALLOW_V4L1=y
--CONFIG_VIDEO_V4L1_COMPAT=y
--CONFIG_DVB_CORE=m
--CONFIG_VIDEO_MEDIA=m
--
--#
--# Multimedia drivers
--#
--CONFIG_VIDEO_SAA7146=m
--CONFIG_VIDEO_SAA7146_VV=m
--CONFIG_MEDIA_ATTACH=y
--CONFIG_MEDIA_TUNER=m
--# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
--CONFIG_MEDIA_TUNER_SIMPLE=m
--CONFIG_MEDIA_TUNER_TDA8290=m
--CONFIG_MEDIA_TUNER_TDA827X=m
--CONFIG_MEDIA_TUNER_TDA18271=m
--CONFIG_MEDIA_TUNER_TDA9887=m
--CONFIG_MEDIA_TUNER_TEA5761=m
--CONFIG_MEDIA_TUNER_TEA5767=m
--CONFIG_MEDIA_TUNER_MT20XX=m
--CONFIG_MEDIA_TUNER_MT2060=m
--CONFIG_MEDIA_TUNER_MT2266=m
--CONFIG_MEDIA_TUNER_MT2131=m
--CONFIG_MEDIA_TUNER_QT1010=m
--CONFIG_MEDIA_TUNER_XC2028=m
--CONFIG_MEDIA_TUNER_XC5000=m
--CONFIG_MEDIA_TUNER_MXL5005S=m
--CONFIG_MEDIA_TUNER_MXL5007T=m
--CONFIG_VIDEO_V4L2=m
--CONFIG_VIDEO_V4L1=m
--CONFIG_VIDEOBUF_GEN=m
--CONFIG_VIDEOBUF_DMA_SG=m
--CONFIG_VIDEOBUF_VMALLOC=m
--CONFIG_VIDEOBUF_DMA_CONTIG=m
--CONFIG_VIDEOBUF_DVB=m
--CONFIG_VIDEO_BTCX=m
--CONFIG_VIDEO_IR=m
--CONFIG_VIDEO_TVEEPROM=m
--CONFIG_VIDEO_TUNER=m
--CONFIG_VIDEO_CAPTURE_DRIVERS=y
--# CONFIG_VIDEO_ADV_DEBUG is not set
--CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
--CONFIG_VIDEO_IR_I2C=m
--CONFIG_VIDEO_TVAUDIO=m
--CONFIG_VIDEO_TDA7432=m
--CONFIG_VIDEO_TDA9840=m
--CONFIG_VIDEO_TDA9875=m
--CONFIG_VIDEO_TEA6415C=m
--CONFIG_VIDEO_TEA6420=m
--CONFIG_VIDEO_MSP3400=m
--CONFIG_VIDEO_CS5345=m
--CONFIG_VIDEO_CS53L32A=m
--CONFIG_VIDEO_M52790=m
--CONFIG_VIDEO_WM8775=m
--CONFIG_VIDEO_WM8739=m
--CONFIG_VIDEO_VP27SMPX=m
--CONFIG_VIDEO_BT819=m
--CONFIG_VIDEO_BT856=m
--CONFIG_VIDEO_KS0127=m
--CONFIG_VIDEO_OV7670=m
--CONFIG_VIDEO_SAA7110=m
--CONFIG_VIDEO_SAA7111=m
--CONFIG_VIDEO_SAA7114=m
--CONFIG_VIDEO_SAA711X=m
--CONFIG_VIDEO_SAA717X=m
--CONFIG_VIDEO_TVP5150=m
--CONFIG_VIDEO_VPX3220=m
--CONFIG_VIDEO_CX25840=m
--CONFIG_VIDEO_CX2341X=m
--CONFIG_VIDEO_SAA7127=m
--CONFIG_VIDEO_SAA7185=m
--CONFIG_VIDEO_ADV7170=m
--CONFIG_VIDEO_ADV7175=m
--CONFIG_VIDEO_UPD64031A=m
--CONFIG_VIDEO_UPD64083=m
--CONFIG_VIDEO_VIVI=m
--CONFIG_VIDEO_BT848=m
--CONFIG_VIDEO_BT848_DVB=y
--CONFIG_VIDEO_SAA6588=m
--CONFIG_VIDEO_BWQCAM=m
--CONFIG_VIDEO_CQCAM=m
--CONFIG_VIDEO_W9966=m
--CONFIG_VIDEO_CPIA=m
--CONFIG_VIDEO_CPIA_PP=m
--CONFIG_VIDEO_CPIA_USB=m
--CONFIG_VIDEO_CPIA2=m
--CONFIG_VIDEO_SAA5246A=m
--CONFIG_VIDEO_SAA5249=m
--# CONFIG_TUNER_3036 is not set
--CONFIG_VIDEO_STRADIS=m
--CONFIG_VIDEO_ZORAN=m
--CONFIG_VIDEO_ZORAN_DC30=m
--CONFIG_VIDEO_ZORAN_ZR36060=m
--CONFIG_VIDEO_ZORAN_BUZ=m
--CONFIG_VIDEO_ZORAN_DC10=m
--CONFIG_VIDEO_ZORAN_LML33=m
--CONFIG_VIDEO_ZORAN_LML33R10=m
--CONFIG_VIDEO_ZORAN_AVS6EYES=m
--CONFIG_VIDEO_MEYE=m
--CONFIG_VIDEO_SAA7134=m
--CONFIG_VIDEO_SAA7134_ALSA=m
--CONFIG_VIDEO_SAA7134_DVB=m
--CONFIG_VIDEO_MXB=m
--# CONFIG_VIDEO_DPC is not set
--CONFIG_VIDEO_HEXIUM_ORION=m
--CONFIG_VIDEO_HEXIUM_GEMINI=m
--CONFIG_VIDEO_CX88=m
--CONFIG_VIDEO_CX88_ALSA=m
--CONFIG_VIDEO_CX88_BLACKBIRD=m
--CONFIG_VIDEO_CX88_DVB=m
--CONFIG_VIDEO_CX88_VP3054=m
--CONFIG_VIDEO_CX23885=m
--CONFIG_VIDEO_AU0828=m
--CONFIG_VIDEO_IVTV=m
--CONFIG_VIDEO_FB_IVTV=m
--CONFIG_VIDEO_CX18=m
--CONFIG_VIDEO_CAFE_CCIC=m
--CONFIG_V4L_USB_DRIVERS=y
--CONFIG_USB_VIDEO_CLASS=m
--CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
--CONFIG_USB_GSPCA=m
--CONFIG_VIDEO_PVRUSB2=m
--CONFIG_VIDEO_PVRUSB2_SYSFS=y
--CONFIG_VIDEO_PVRUSB2_DVB=y
--# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
--CONFIG_VIDEO_EM28XX=m
--CONFIG_VIDEO_EM28XX_ALSA=m
--CONFIG_VIDEO_EM28XX_DVB=m
--CONFIG_VIDEO_USBVISION=m
--CONFIG_VIDEO_USBVIDEO=m
--CONFIG_USB_VICAM=m
--CONFIG_USB_IBMCAM=m
--CONFIG_USB_KONICAWC=m
--CONFIG_USB_QUICKCAM_MESSENGER=m
--CONFIG_USB_ET61X251=m
--CONFIG_VIDEO_OVCAMCHIP=m
--CONFIG_USB_W9968CF=m
--CONFIG_USB_OV511=m
--CONFIG_USB_SE401=m
--CONFIG_USB_SN9C102=m
--CONFIG_USB_STV680=m
--CONFIG_USB_ZC0301=m
--CONFIG_USB_PWC=m
--# CONFIG_USB_PWC_DEBUG is not set
--CONFIG_USB_ZR364XX=m
--CONFIG_USB_STKWEBCAM=m
--CONFIG_USB_S2255=m
--CONFIG_SOC_CAMERA=m
--CONFIG_SOC_CAMERA_MT9M001=m
--CONFIG_MT9M001_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_MT9V022=m
--CONFIG_MT9V022_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_PLATFORM=m
--CONFIG_VIDEO_SH_MOBILE_CEU=m
--CONFIG_RADIO_ADAPTERS=y
--CONFIG_RADIO_GEMTEK_PCI=m
--CONFIG_RADIO_MAXIRADIO=m
--CONFIG_RADIO_MAESTRO=m
--CONFIG_USB_DSBR=m
--CONFIG_USB_SI470X=m
--CONFIG_DVB_CAPTURE_DRIVERS=y
--
--#
--# Supported SAA7146 based PCI Adapters
--#
--CONFIG_TTPCI_EEPROM=m
--CONFIG_DVB_AV7110=m
--# CONFIG_DVB_AV7110_FIRMWARE is not set
--CONFIG_DVB_AV7110_OSD=y
--CONFIG_DVB_BUDGET_CORE=m
--CONFIG_DVB_BUDGET=m
--CONFIG_DVB_BUDGET_CI=m
--CONFIG_DVB_BUDGET_AV=m
--CONFIG_DVB_BUDGET_PATCH=m
--
--#
--# Supported USB Adapters
--#
--CONFIG_DVB_USB=m
--# CONFIG_DVB_USB_DEBUG is not set
--CONFIG_DVB_USB_A800=m
--CONFIG_DVB_USB_DIBUSB_MB=m
--# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
--CONFIG_DVB_USB_DIBUSB_MC=m
--CONFIG_DVB_USB_DIB0700=m
--CONFIG_DVB_USB_UMT_010=m
--CONFIG_DVB_USB_CXUSB=m
--CONFIG_DVB_USB_M920X=m
--CONFIG_DVB_USB_GL861=m
--CONFIG_DVB_USB_AU6610=m
--CONFIG_DVB_USB_DIGITV=m
--CONFIG_DVB_USB_VP7045=m
--CONFIG_DVB_USB_VP702X=m
--CONFIG_DVB_USB_GP8PSK=m
--CONFIG_DVB_USB_NOVA_T_USB2=m
--CONFIG_DVB_USB_TTUSB2=m
--CONFIG_DVB_USB_DTT200U=m
--CONFIG_DVB_USB_OPERA1=m
--CONFIG_DVB_USB_AF9005=m
--CONFIG_DVB_USB_AF9005_REMOTE=m
--CONFIG_DVB_USB_DW2102=m
--CONFIG_DVB_USB_ANYSEE=m
--CONFIG_DVB_TTUSB_BUDGET=m
--CONFIG_DVB_TTUSB_DEC=m
--CONFIG_DVB_CINERGYT2=m
--# CONFIG_DVB_CINERGYT2_TUNING is not set
--CONFIG_DVB_SIANO_SMS1XXX=m
--CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
--
--#
--# Supported FlexCopII (B2C2) Adapters
--#
--CONFIG_DVB_B2C2_FLEXCOP=m
--CONFIG_DVB_B2C2_FLEXCOP_PCI=m
--CONFIG_DVB_B2C2_FLEXCOP_USB=m
--# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
--
--#
--# Supported BT878 Adapters
--#
--CONFIG_DVB_BT8XX=m
--
--#
--# Supported Pluto2 Adapters
--#
--CONFIG_DVB_PLUTO2=m
--
--#
--# Supported DVB Frontends
--#
--
--#
--# Customise DVB Frontends
--#
--# CONFIG_DVB_FE_CUSTOMISE is not set
--
--#
--# DVB-S (satellite) frontends
--#
--CONFIG_DVB_CX24110=m
--CONFIG_DVB_CX24123=m
--CONFIG_DVB_MT312=m
--CONFIG_DVB_S5H1420=m
--CONFIG_DVB_STV0299=m
--CONFIG_DVB_TDA8083=m
--CONFIG_DVB_TDA10086=m
--CONFIG_DVB_VES1X93=m
--CONFIG_DVB_TUNER_ITD1000=m
--CONFIG_DVB_TDA826X=m
--CONFIG_DVB_TUA6100=m
--
--#
--# DVB-T (terrestrial) frontends
--#
--CONFIG_DVB_SP8870=m
--CONFIG_DVB_SP887X=m
--CONFIG_DVB_CX22700=m
--CONFIG_DVB_CX22702=m
--CONFIG_DVB_DRX397XD=m
--CONFIG_DVB_L64781=m
--CONFIG_DVB_TDA1004X=m
--CONFIG_DVB_NXT6000=m
--CONFIG_DVB_MT352=m
--CONFIG_DVB_ZL10353=m
--CONFIG_DVB_DIB3000MB=m
--CONFIG_DVB_DIB3000MC=m
--CONFIG_DVB_DIB7000M=m
--CONFIG_DVB_DIB7000P=m
--CONFIG_DVB_TDA10048=m
--
--#
--# DVB-C (cable) frontends
--#
--CONFIG_DVB_VES1820=m
--CONFIG_DVB_TDA10021=m
--CONFIG_DVB_TDA10023=m
--CONFIG_DVB_STV0297=m
--
--#
--# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
--#
--CONFIG_DVB_NXT200X=m
--CONFIG_DVB_OR51211=m
--CONFIG_DVB_OR51132=m
--CONFIG_DVB_BCM3510=m
--CONFIG_DVB_LGDT330X=m
--CONFIG_DVB_S5H1409=m
--CONFIG_DVB_AU8522=m
--CONFIG_DVB_S5H1411=m
--
--#
--# Digital terrestrial only tuners/PLL
--#
--CONFIG_DVB_PLL=m
--CONFIG_DVB_TUNER_DIB0070=m
--
--#
--# SEC control devices for DVB-S
--#
--CONFIG_DVB_LNBP21=m
--CONFIG_DVB_ISL6405=m
--CONFIG_DVB_ISL6421=m
--CONFIG_DAB=y
--CONFIG_USB_DABUSB=m
--
--#
--# Graphics support
--#
--CONFIG_AGP=y
--CONFIG_AGP_AMD64=y
--CONFIG_AGP_INTEL=m
--CONFIG_AGP_SIS=m
--CONFIG_AGP_VIA=m
--CONFIG_DRM=m
--CONFIG_DRM_TDFX=m
--CONFIG_DRM_R128=m
--CONFIG_DRM_RADEON=m
--CONFIG_DRM_I810=m
--# CONFIG_DRM_I830 is not set
--CONFIG_DRM_I915=m
--CONFIG_DRM_MGA=m
--CONFIG_DRM_SIS=m
--CONFIG_DRM_VIA=m
--CONFIG_DRM_VIA_CHROME9=m
--CONFIG_DRM_SAVAGE=m
--CONFIG_VGASTATE=m
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--CONFIG_FB=y
--CONFIG_FIRMWARE_EDID=y
--CONFIG_FB_DDC=m
--CONFIG_FB_CFB_FILLRECT=y
--CONFIG_FB_CFB_COPYAREA=y
--CONFIG_FB_CFB_IMAGEBLIT=y
--# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
--CONFIG_FB_SYS_FILLRECT=m
--CONFIG_FB_SYS_COPYAREA=m
--CONFIG_FB_SYS_IMAGEBLIT=m
--# CONFIG_FB_FOREIGN_ENDIAN is not set
--CONFIG_FB_SYS_FOPS=m
--CONFIG_FB_DEFERRED_IO=y
--CONFIG_FB_HECUBA=m
--CONFIG_FB_SVGALIB=m
--# CONFIG_FB_MACMODES is not set
--CONFIG_FB_BACKLIGHT=y
--CONFIG_FB_MODE_HELPERS=y
--CONFIG_FB_TILEBLITTING=y
--
--#
--# Frame buffer hardware drivers
--#
--CONFIG_FB_CIRRUS=m
--# CONFIG_FB_PM2 is not set
--CONFIG_FB_CYBER2000=m
--CONFIG_FB_ARC=m
--# CONFIG_FB_ASILIANT is not set
--# CONFIG_FB_IMSTT is not set
--CONFIG_FB_VGA16=m
--CONFIG_FB_UVESA=m
--CONFIG_FB_VESA=y
--CONFIG_FB_EFI=y
--CONFIG_FB_IMAC=y
--CONFIG_FB_N411=m
--CONFIG_FB_HGA=m
--CONFIG_FB_HGA_ACCEL=y
--CONFIG_FB_S1D13XXX=m
--CONFIG_FB_NVIDIA=m
--CONFIG_FB_NVIDIA_I2C=y
--# CONFIG_FB_NVIDIA_DEBUG is not set
--CONFIG_FB_NVIDIA_BACKLIGHT=y
--CONFIG_FB_RIVA=m
--CONFIG_FB_RIVA_I2C=y
--# CONFIG_FB_RIVA_DEBUG is not set
--CONFIG_FB_RIVA_BACKLIGHT=y
--CONFIG_FB_LE80578=m
--CONFIG_FB_CARILLO_RANCH=m
--CONFIG_FB_INTEL=m
--# CONFIG_FB_INTEL_DEBUG is not set
--CONFIG_FB_INTEL_I2C=y
--CONFIG_FB_MATROX=m
--CONFIG_FB_MATROX_MILLENIUM=y
--CONFIG_FB_MATROX_MYSTIQUE=y
--CONFIG_FB_MATROX_G=y
--CONFIG_FB_MATROX_I2C=m
--CONFIG_FB_MATROX_MAVEN=m
--CONFIG_FB_MATROX_MULTIHEAD=y
--CONFIG_FB_RADEON=m
--CONFIG_FB_RADEON_I2C=y
--CONFIG_FB_RADEON_BACKLIGHT=y
--# CONFIG_FB_RADEON_DEBUG is not set
--CONFIG_FB_ATY128=m
--CONFIG_FB_ATY128_BACKLIGHT=y
--CONFIG_FB_ATY=m
--CONFIG_FB_ATY_CT=y
--CONFIG_FB_ATY_GENERIC_LCD=y
--CONFIG_FB_ATY_GX=y
--CONFIG_FB_ATY_BACKLIGHT=y
--# CONFIG_FB_S3 is not set
--CONFIG_FB_SAVAGE=m
--CONFIG_FB_SAVAGE_I2C=y
--CONFIG_FB_SAVAGE_ACCEL=y
--CONFIG_FB_SIS=m
--CONFIG_FB_SIS_300=y
--CONFIG_FB_SIS_315=y
--CONFIG_FB_NEOMAGIC=m
--CONFIG_FB_KYRO=m
--CONFIG_FB_3DFX=m
--CONFIG_FB_3DFX_ACCEL=y
--CONFIG_FB_VOODOO1=m
--CONFIG_FB_VT8623=m
--CONFIG_FB_TRIDENT=m
--CONFIG_FB_TRIDENT_ACCEL=y
--CONFIG_FB_ARK=m
--CONFIG_FB_PM3=m
--CONFIG_FB_CARMINE=m
--CONFIG_FB_CARMINE_DRAM_EVAL=y
--# CONFIG_CARMINE_DRAM_CUSTOM is not set
--CONFIG_FB_GEODE=y
--CONFIG_FB_GEODE_LX=m
--CONFIG_FB_GEODE_GX=m
--CONFIG_FB_GEODE_GX1=m
--CONFIG_FB_SM501=m
--CONFIG_FB_VIRTUAL=m
--CONFIG_BACKLIGHT_LCD_SUPPORT=y
--CONFIG_LCD_CLASS_DEVICE=m
--CONFIG_LCD_LTV350QV=m
--CONFIG_LCD_ILI9320=m
--CONFIG_LCD_VGG2432A4=m
--CONFIG_LCD_PLATFORM=m
--CONFIG_BACKLIGHT_CLASS_DEVICE=y
--CONFIG_BACKLIGHT_CORGI=m
--CONFIG_BACKLIGHT_PROGEAR=m
--CONFIG_BACKLIGHT_CARILLO_RANCH=m
--CONFIG_BACKLIGHT_MBP_NVIDIA=m
--
--#
--# Display device support
--#
--CONFIG_DISPLAY_SUPPORT=m
--
--#
--# Display hardware drivers
--#
--
--#
--# Console display driver support
--#
--CONFIG_VGA_CONSOLE=y
--CONFIG_VGACON_SOFT_SCROLLBACK=y
--CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
--CONFIG_VIDEO_SELECT=y
--CONFIG_DUMMY_CONSOLE=y
--CONFIG_FRAMEBUFFER_CONSOLE=y
--# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
--CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
--# CONFIG_FONTS is not set
--CONFIG_FONT_8x8=y
--CONFIG_FONT_8x16=y
--# CONFIG_LOGO is not set
--
--#
--# Bootsplash configuration
--#
--CONFIG_BOOTSPLASH=y
--CONFIG_SOUND=m
--CONFIG_SND=m
--CONFIG_SND_TIMER=m
--CONFIG_SND_PCM=m
--CONFIG_SND_HWDEP=m
--CONFIG_SND_RAWMIDI=m
--CONFIG_SND_SEQUENCER=m
--CONFIG_SND_SEQ_DUMMY=m
--CONFIG_SND_OSSEMUL=y
--CONFIG_SND_MIXER_OSS=m
--CONFIG_SND_PCM_OSS=m
--CONFIG_SND_PCM_OSS_PLUGINS=y
--CONFIG_SND_SEQUENCER_OSS=y
--CONFIG_SND_DYNAMIC_MINORS=y
--CONFIG_SND_SUPPORT_OLD_API=y
--CONFIG_SND_VERBOSE_PROCFS=y
--CONFIG_SND_VERBOSE_PRINTK=y
--CONFIG_SND_DEBUG=y
--# CONFIG_SND_DEBUG_VERBOSE is not set
--# CONFIG_SND_PCM_XRUN_DEBUG is not set
--CONFIG_SND_VMASTER=y
--CONFIG_SND_MPU401_UART=m
--CONFIG_SND_OPL3_LIB=m
--CONFIG_SND_VX_LIB=m
--CONFIG_SND_AC97_CODEC=m
--CONFIG_SND_DRIVERS=y
--# CONFIG_SND_PCSP is not set
--CONFIG_SND_DUMMY=m
--CONFIG_SND_VIRMIDI=m
--CONFIG_SND_MTPAV=m
--CONFIG_SND_MTS64=m
--CONFIG_SND_SERIAL_U16550=m
--CONFIG_SND_MPU401=m
--CONFIG_SND_PORTMAN2X4=m
--CONFIG_SND_AC97_POWER_SAVE=y
--CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
--CONFIG_SND_SB_COMMON=m
--CONFIG_SND_PCI=y
--CONFIG_SND_AD1889=m
--CONFIG_SND_ALS300=m
--CONFIG_SND_ALS4000=m
--CONFIG_SND_ALI5451=m
--CONFIG_SND_ATIIXP=m
--CONFIG_SND_ATIIXP_MODEM=m
--CONFIG_SND_AU8810=m
--CONFIG_SND_AU8820=m
--CONFIG_SND_AU8830=m
--CONFIG_SND_AW2=m
--CONFIG_SND_AZT3328=m
--CONFIG_SND_BT87X=m
--# CONFIG_SND_BT87X_OVERCLOCK is not set
--CONFIG_SND_CA0106=m
--CONFIG_SND_CMIPCI=m
--CONFIG_SND_OXYGEN_LIB=m
--CONFIG_SND_OXYGEN=m
--CONFIG_SND_CS4281=m
--CONFIG_SND_CS46XX=m
--CONFIG_SND_CS46XX_NEW_DSP=y
--# CONFIG_SND_CS5530 is not set
--CONFIG_SND_DARLA20=m
--CONFIG_SND_GINA20=m
--CONFIG_SND_LAYLA20=m
--CONFIG_SND_DARLA24=m
--CONFIG_SND_GINA24=m
--CONFIG_SND_LAYLA24=m
--CONFIG_SND_MONA=m
--CONFIG_SND_MIA=m
--CONFIG_SND_ECHO3G=m
--CONFIG_SND_INDIGO=m
--CONFIG_SND_INDIGOIO=m
--CONFIG_SND_INDIGODJ=m
--CONFIG_SND_EMU10K1=m
--CONFIG_SND_EMU10K1X=m
--CONFIG_SND_ENS1370=m
--CONFIG_SND_ENS1371=m
--CONFIG_SND_ES1938=m
--CONFIG_SND_ES1968=m
--CONFIG_SND_FM801=m
--CONFIG_SND_FM801_TEA575X_BOOL=y
--CONFIG_SND_FM801_TEA575X=m
--CONFIG_SND_HDA_INTEL=m
--CONFIG_SND_HDA_HWDEP=y
--CONFIG_SND_HDA_INPUT_BEEP=y
--CONFIG_SND_HDA_CODEC_REALTEK=y
--CONFIG_SND_HDA_CODEC_ANALOG=y
--CONFIG_SND_HDA_CODEC_SIGMATEL=y
--CONFIG_SND_HDA_CODEC_VIA=y
--CONFIG_SND_HDA_CODEC_ATIHDMI=y
--CONFIG_SND_HDA_CODEC_NVHDMI=y
--CONFIG_SND_HDA_CODEC_CONEXANT=y
--CONFIG_SND_HDA_CODEC_CMEDIA=y
--CONFIG_SND_HDA_CODEC_SI3054=y
--CONFIG_SND_HDA_GENERIC=y
--CONFIG_SND_HDA_POWER_SAVE=y
--CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
--CONFIG_SND_HDSP=m
--CONFIG_SND_HDSPM=m
--CONFIG_SND_HIFIER=m
--CONFIG_SND_ICE1712=m
--CONFIG_SND_ICE1724=m
--CONFIG_SND_INTEL8X0=m
--CONFIG_SND_INTEL8X0M=m
--CONFIG_SND_KORG1212=m
--CONFIG_SND_MAESTRO3=m
--CONFIG_SND_MIXART=m
--CONFIG_SND_NM256=m
--CONFIG_SND_PCXHR=m
--CONFIG_SND_RIPTIDE=m
--CONFIG_SND_RME32=m
--CONFIG_SND_RME96=m
--CONFIG_SND_RME9652=m
--CONFIG_SND_SONICVIBES=m
--CONFIG_SND_TRIDENT=m
--CONFIG_SND_VIA82XX=m
--CONFIG_SND_VIA82XX_MODEM=m
--CONFIG_SND_VIRTUOSO=m
--CONFIG_SND_VX222=m
--CONFIG_SND_YMFPCI=m
--CONFIG_SND_SPI=y
--CONFIG_SND_USB=y
--CONFIG_SND_USB_AUDIO=m
--CONFIG_SND_USB_USX2Y=m
--CONFIG_SND_USB_CAIAQ=m
--CONFIG_SND_USB_CAIAQ_INPUT=y
--CONFIG_SND_PCMCIA=y
--CONFIG_SND_VXPOCKET=m
--CONFIG_SND_PDAUDIOCF=m
--# CONFIG_SND_SOC is not set
--CONFIG_SOUND_PRIME=m
--CONFIG_SOUND_OSS=m
--CONFIG_SOUND_TRACEINIT=y
--CONFIG_SOUND_DMAP=y
--CONFIG_SOUND_SSCAPE=m
--CONFIG_SOUND_VMIDI=m
--CONFIG_SOUND_TRIX=m
--CONFIG_SOUND_MSS=m
--CONFIG_SOUND_MPU401=m
--CONFIG_SOUND_PAS=m
--CONFIG_SOUND_PSS=m
--CONFIG_PSS_MIXER=y
--# CONFIG_PSS_HAVE_BOOT is not set
--# CONFIG_SOUND_SB is not set
--CONFIG_SOUND_YM3812=m
--CONFIG_SOUND_UART6850=m
--CONFIG_SOUND_AEDSP16=m
--CONFIG_SC6600=y
--CONFIG_SC6600_JOY=y
--CONFIG_SC6600_CDROM=4
--CONFIG_SC6600_CDROMBASE=0x0
--CONFIG_AEDSP16_MSS=y
--# CONFIG_AEDSP16_SBPRO is not set
--CONFIG_AC97_BUS=m
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=m
--# CONFIG_HID_DEBUG is not set
--CONFIG_HIDRAW=y
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=m
--CONFIG_USB_HIDINPUT_POWERBOOK=y
--CONFIG_HID_FF=y
--CONFIG_HID_PID=y
--CONFIG_LOGITECH_FF=y
--# CONFIG_LOGIRUMBLEPAD2_FF is not set
--CONFIG_PANTHERLORD_FF=y
--CONFIG_THRUSTMASTER_FF=y
--CONFIG_ZEROPLUS_FF=y
--CONFIG_USB_HIDDEV=y
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=m
--# CONFIG_USB_DEBUG is not set
--CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--# CONFIG_USB_DEVICE_CLASS is not set
--# CONFIG_USB_DYNAMIC_MINORS is not set
--CONFIG_USB_SUSPEND=y
--# CONFIG_USB_OTG is not set
--CONFIG_USB_MON=y
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_C67X00_HCD=m
--CONFIG_USB_EHCI_HCD=m
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--CONFIG_USB_EHCI_TT_NEWSCHED=y
--CONFIG_USB_ISP116X_HCD=m
--CONFIG_USB_ISP1760_HCD=m
--CONFIG_USB_OHCI_HCD=m
--# CONFIG_USB_OHCI_HCD_SSB is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=m
--# CONFIG_USB_U132_HCD is not set
--CONFIG_USB_SL811_HCD=m
--CONFIG_USB_SL811_CS=m
--CONFIG_USB_R8A66597_HCD=m
--
--#
--# Enable Host or Gadget support to see Inventra options
--#
--
--#
--# USB Device Class drivers
--#
--CONFIG_USB_ACM=m
--CONFIG_USB_PRINTER=m
--CONFIG_USB_WDM=m
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=m
--# CONFIG_USB_STORAGE_DEBUG is not set
--CONFIG_USB_STORAGE_DATAFAB=y
--CONFIG_USB_STORAGE_FREECOM=y
--CONFIG_USB_STORAGE_ISD200=y
--CONFIG_USB_STORAGE_DPCM=y
--CONFIG_USB_STORAGE_USBAT=y
--CONFIG_USB_STORAGE_SDDR09=y
--CONFIG_USB_STORAGE_SDDR55=y
--CONFIG_USB_STORAGE_JUMPSHOT=y
--CONFIG_USB_STORAGE_ALAUDA=y
--CONFIG_USB_STORAGE_ONETOUCH=y
--CONFIG_USB_STORAGE_KARMA=y
--CONFIG_USB_STORAGE_CYPRESS_ATACB=y
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--CONFIG_USB_MDC800=m
--CONFIG_USB_MICROTEK=m
--
--#
--# USB port drivers
--#
--CONFIG_USB_USS720=m
--CONFIG_USB_SERIAL=m
--CONFIG_USB_EZUSB=y
--CONFIG_USB_SERIAL_GENERIC=y
--CONFIG_USB_SERIAL_AIRCABLE=m
--CONFIG_USB_SERIAL_ARK3116=m
--CONFIG_USB_SERIAL_BELKIN=m
--CONFIG_USB_SERIAL_CH341=m
--CONFIG_USB_SERIAL_WHITEHEAT=m
--CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
--CONFIG_USB_SERIAL_CP2101=m
--CONFIG_USB_SERIAL_CYPRESS_M8=m
--CONFIG_USB_SERIAL_EMPEG=m
--CONFIG_USB_SERIAL_FTDI_SIO=m
--CONFIG_USB_SERIAL_FUNSOFT=m
--CONFIG_USB_SERIAL_VISOR=m
--CONFIG_USB_SERIAL_IPAQ=m
--CONFIG_USB_SERIAL_IR=m
--CONFIG_USB_SERIAL_EDGEPORT=m
--CONFIG_USB_SERIAL_EDGEPORT_TI=m
--CONFIG_USB_SERIAL_GARMIN=m
--CONFIG_USB_SERIAL_IPW=m
--CONFIG_USB_SERIAL_IUU=m
--CONFIG_USB_SERIAL_KEYSPAN_PDA=m
--CONFIG_USB_SERIAL_KEYSPAN=m
--CONFIG_USB_SERIAL_KEYSPAN_MPR=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19=y
--CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
--CONFIG_USB_SERIAL_KLSI=m
--CONFIG_USB_SERIAL_KOBIL_SCT=m
--CONFIG_USB_SERIAL_MCT_U232=m
--CONFIG_USB_SERIAL_MOS7720=m
--CONFIG_USB_SERIAL_MOS7840=m
--CONFIG_USB_SERIAL_MOTOROLA=m
--CONFIG_USB_SERIAL_NAVMAN=m
--CONFIG_USB_SERIAL_PL2303=m
--CONFIG_USB_SERIAL_OTI6858=m
--CONFIG_USB_SERIAL_QUALCOMM=m
--CONFIG_USB_SERIAL_SPCP8X5=m
--CONFIG_USB_SERIAL_HP4X=m
--CONFIG_USB_SERIAL_SAFE=m
--CONFIG_USB_SERIAL_SAFE_PADDED=y
--CONFIG_USB_SERIAL_SIERRAWIRELESS=m
--CONFIG_USB_SERIAL_TI=m
--CONFIG_USB_SERIAL_CYBERJACK=m
--CONFIG_USB_SERIAL_XIRCOM=m
--CONFIG_USB_SERIAL_OPTION=m
--CONFIG_USB_SERIAL_OMNINET=m
--CONFIG_USB_SERIAL_DEBUG=m
--
--#
--# USB Miscellaneous drivers
--#
--CONFIG_USB_EMI62=m
--CONFIG_USB_EMI26=m
--CONFIG_USB_ADUTUX=m
--CONFIG_USB_RIO500=m
--CONFIG_USB_LEGOTOWER=m
--CONFIG_USB_LCD=m
--CONFIG_USB_BERRY_CHARGE=m
--CONFIG_USB_LED=m
--CONFIG_USB_CYPRESS_CY7C63=m
--CONFIG_USB_CYTHERM=m
--CONFIG_USB_PHIDGET=m
--CONFIG_USB_PHIDGETKIT=m
--CONFIG_USB_PHIDGETMOTORCONTROL=m
--CONFIG_USB_PHIDGETSERVO=m
--CONFIG_USB_IDMOUSE=m
--CONFIG_USB_FTDI_ELAN=m
--CONFIG_USB_APPLEDISPLAY=m
--CONFIG_USB_SISUSBVGA=m
--CONFIG_USB_SISUSBVGA_CON=y
--CONFIG_USB_LD=m
--CONFIG_USB_TRANCEVIBRATOR=m
--CONFIG_USB_IOWARRIOR=m
--# CONFIG_USB_TEST is not set
--CONFIG_USB_ISIGHTFW=m
--CONFIG_USB_ATM=m
--CONFIG_USB_SPEEDTOUCH=m
--CONFIG_USB_CXACRU=m
--CONFIG_USB_UEAGLEATM=m
--CONFIG_USB_XUSBATM=m
--# CONFIG_USB_GADGET is not set
--CONFIG_MMC=m
--# CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
--
--#
--# MMC/SD Card Drivers
--#
--CONFIG_MMC_BLOCK=m
--CONFIG_MMC_BLOCK_BOUNCE=y
--CONFIG_SDIO_UART=m
--CONFIG_MMC_TEST=m
--
--#
--# MMC/SD Host Controller Drivers
--#
--CONFIG_MMC_SDHCI=m
--CONFIG_MMC_SDHCI_PCI=m
--CONFIG_MMC_RICOH_MMC=m
--CONFIG_MMC_WBSD=m
--CONFIG_MMC_TIFM_SD=m
--CONFIG_MMC_SPI=m
--CONFIG_MMC_SDRICOH_CS=m
--CONFIG_MEMSTICK=m
--# CONFIG_MEMSTICK_DEBUG is not set
--
--#
--# MemoryStick drivers
--#
--# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
--CONFIG_MSPRO_BLOCK=m
--
--#
--# MemoryStick Host Controller Drivers
--#
--CONFIG_MEMSTICK_TIFM_MS=m
--CONFIG_MEMSTICK_JMICRON_38X=m
--CONFIG_NEW_LEDS=y
--CONFIG_LEDS_CLASS=m
--
--#
--# LED drivers
--#
--CONFIG_LEDS_PCA9532=m
--CONFIG_LEDS_GPIO=m
--CONFIG_LEDS_CLEVO_MAIL=m
--CONFIG_LEDS_PCA955X=m
--
--#
--# LED Triggers
--#
--CONFIG_LEDS_TRIGGERS=y
--CONFIG_LEDS_TRIGGER_TIMER=m
--CONFIG_LEDS_TRIGGER_IDE_DISK=y
--CONFIG_LEDS_TRIGGER_HEARTBEAT=m
--CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
--# CONFIG_ACCESSIBILITY is not set
--CONFIG_INFINIBAND=m
--CONFIG_INFINIBAND_USER_MAD=m
--CONFIG_INFINIBAND_USER_ACCESS=m
--CONFIG_INFINIBAND_USER_MEM=y
--CONFIG_INFINIBAND_ADDR_TRANS=y
--CONFIG_INFINIBAND_MTHCA=m
--CONFIG_INFINIBAND_MTHCA_DEBUG=y
--CONFIG_INFINIBAND_IPATH=m
--CONFIG_INFINIBAND_AMSO1100=m
--# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
--CONFIG_INFINIBAND_CXGB3=m
--# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
--CONFIG_MLX4_INFINIBAND=m
--CONFIG_INFINIBAND_NES=m
--# CONFIG_INFINIBAND_NES_DEBUG is not set
--CONFIG_INFINIBAND_IPOIB=m
--CONFIG_INFINIBAND_IPOIB_CM=y
--CONFIG_INFINIBAND_IPOIB_DEBUG=y
--# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
--CONFIG_INFINIBAND_SRP=m
--CONFIG_INFINIBAND_ISER=m
--CONFIG_EDAC=y
--
--#
--# Reporting subsystems
--#
--# CONFIG_EDAC_DEBUG is not set
--CONFIG_EDAC_MM_EDAC=m
--CONFIG_EDAC_E752X=m
--CONFIG_EDAC_I82975X=m
--CONFIG_EDAC_I3000=m
--CONFIG_EDAC_I5000=m
--CONFIG_EDAC_I5100=m
--CONFIG_RTC_LIB=m
--CONFIG_RTC_CLASS=m
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--CONFIG_RTC_DRV_TEST=m
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=m
--CONFIG_RTC_DRV_DS1374=m
--CONFIG_RTC_DRV_DS1672=m
--CONFIG_RTC_DRV_MAX6900=m
--CONFIG_RTC_DRV_RS5C372=m
--CONFIG_RTC_DRV_ISL1208=m
--CONFIG_RTC_DRV_X1205=m
--CONFIG_RTC_DRV_PCF8563=m
--CONFIG_RTC_DRV_PCF8583=m
--CONFIG_RTC_DRV_M41T80=m
--CONFIG_RTC_DRV_M41T80_WDT=y
--CONFIG_RTC_DRV_S35390A=m
--CONFIG_RTC_DRV_FM3130=m
--
--#
--# SPI RTC drivers
--#
--CONFIG_RTC_DRV_M41T94=m
--CONFIG_RTC_DRV_DS1305=m
--CONFIG_RTC_DRV_MAX6902=m
--CONFIG_RTC_DRV_R9701=m
--CONFIG_RTC_DRV_RS5C348=m
--
--#
--# Platform RTC drivers
--#
--CONFIG_RTC_DRV_CMOS=m
--CONFIG_RTC_DRV_DS1511=m
--CONFIG_RTC_DRV_DS1553=m
--CONFIG_RTC_DRV_DS1742=m
--CONFIG_RTC_DRV_STK17TA8=m
--CONFIG_RTC_DRV_M48T86=m
--CONFIG_RTC_DRV_M48T59=m
--CONFIG_RTC_DRV_V3020=m
--
--#
--# on-CPU RTC drivers
--#
--CONFIG_DMADEVICES=y
--
--#
--# DMA Devices
--#
--CONFIG_INTEL_IOATDMA=m
--CONFIG_DMA_ENGINE=y
--
--#
--# DMA Clients
--#
--CONFIG_NET_DMA=y
--CONFIG_DMATEST=m
--CONFIG_DCA=m
--CONFIG_AUXDISPLAY=y
--# CONFIG_KS0108 is not set
--CONFIG_UIO=m
--CONFIG_UIO_CIF=m
--CONFIG_UIO_PDRV=m
--CONFIG_UIO_PDRV_GENIRQ=m
--CONFIG_UIO_SMX=m
--CONFIG_STAGING=y
--CONFIG_ET131X=m
--# CONFIG_ET131X_DEBUG is not set
--CONFIG_SLICOSS=m
--CONFIG_SXG=m
--CONFIG_ME4000=m
--CONFIG_VIDEO_GO7007=m
--CONFIG_VIDEO_GO7007_USB=m
--CONFIG_USB_IP_COMMON=m
--CONFIG_USB_IP_VHCI_HCD=m
--CONFIG_USB_IP_HOST=m
--CONFIG_W35UND=m
--CONFIG_PRISM2_USB=m
--CONFIG_ECHO=m
--CONFIG_USB_ATMEL=m
--CONFIG_AGNX=m
--CONFIG_OTUS=m
--CONFIG_RT2860=m
--CONFIG_RT2870=m
--CONFIG_RT3070=m
--CONFIG_BENET=m
--CONFIG_RTL8187SE=m
--CONFIG_DRM_PSB=m
--
--#
--# Firmware Drivers
--#
--CONFIG_EDD=m
--# CONFIG_EDD_OFF is not set
--CONFIG_FIRMWARE_MEMMAP=y
--CONFIG_EFI_VARS=m
--CONFIG_DELL_RBU=m
--CONFIG_DCDBAS=m
--CONFIG_DMIID=y
--CONFIG_ISCSI_IBFT_FIND=y
--CONFIG_ISCSI_IBFT=m
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=m
--CONFIG_EXT2_FS_XATTR=y
--CONFIG_EXT2_FS_POSIX_ACL=y
--CONFIG_EXT2_FS_SECURITY=y
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=m
--CONFIG_EXT3_FS_XATTR=y
--CONFIG_EXT3_FS_POSIX_ACL=y
--CONFIG_EXT3_FS_NFS4ACL=y
--CONFIG_EXT3_FS_SECURITY=y
--CONFIG_EXT4DEV_FS=m
--CONFIG_EXT4DEV_FS_XATTR=y
--CONFIG_EXT4DEV_FS_POSIX_ACL=y
--CONFIG_EXT4DEV_FS_SECURITY=y
--CONFIG_JBD=m
--CONFIG_JBD_DEBUG=y
--CONFIG_JBD2=m
--CONFIG_JBD2_DEBUG=y
--CONFIG_FS_MBCACHE=m
--CONFIG_REISERFS_FS=m
--# CONFIG_REISERFS_CHECK is not set
--# CONFIG_REISERFS_PROC_INFO is not set
--CONFIG_REISERFS_FS_XATTR=y
--CONFIG_REISERFS_FS_POSIX_ACL=y
--CONFIG_REISERFS_FS_SECURITY=y
--CONFIG_JFS_FS=m
--CONFIG_JFS_POSIX_ACL=y
--CONFIG_JFS_SECURITY=y
--# CONFIG_JFS_DEBUG is not set
--CONFIG_JFS_STATISTICS=y
--CONFIG_FS_POSIX_ACL=y
--CONFIG_FS_NFS4ACL=y
--CONFIG_XFS_FS=m
--CONFIG_XFS_QUOTA=y
--CONFIG_XFS_DMAPI=m
--CONFIG_XFS_POSIX_ACL=y
--CONFIG_XFS_RT=y
--# CONFIG_XFS_DEBUG is not set
--CONFIG_GFS2_FS=m
--CONFIG_GFS2_FS_LOCKING_DLM=m
--CONFIG_OCFS2_FS=m
--CONFIG_OCFS2_FS_O2CB=m
--CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
--CONFIG_OCFS2_FS_STATS=y
--# CONFIG_OCFS2_DEBUG_MASKLOG is not set
--# CONFIG_OCFS2_DEBUG_FS is not set
--# CONFIG_OCFS2_COMPAT_JBD is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--CONFIG_DMAPI=m
--# CONFIG_DMAPI_DEBUG is not set
--CONFIG_QUOTA=y
--CONFIG_QUOTA_NETLINK_INTERFACE=y
--CONFIG_PRINT_QUOTA_WARNING=y
--CONFIG_QUOTA_TREE=m
--CONFIG_QFMT_V1=m
--CONFIG_QFMT_V2=m
--CONFIG_QUOTACTL=y
--CONFIG_AUTOFS_FS=m
--CONFIG_AUTOFS4_FS=m
--CONFIG_FUSE_FS=m
--CONFIG_GENERIC_ACL=y
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=y
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=m
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=m
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=m
--# CONFIG_NTFS_DEBUG is not set
--CONFIG_NTFS_RW=y
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_VMCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--CONFIG_TMPFS_POSIX_ACL=y
--CONFIG_HUGETLBFS=y
--CONFIG_HUGETLB_PAGE=y
--CONFIG_CONFIGFS_FS=m
--
--#
--# Miscellaneous filesystems
--#
--CONFIG_ADFS_FS=m
--# CONFIG_ADFS_FS_RW is not set
--CONFIG_AFFS_FS=m
--CONFIG_ECRYPT_FS=m
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--CONFIG_BEFS_FS=m
--# CONFIG_BEFS_DEBUG is not set
--CONFIG_BFS_FS=m
--CONFIG_EFS_FS=m
--CONFIG_JFFS2_FS=m
--CONFIG_JFFS2_FS_DEBUG=0
--CONFIG_JFFS2_FS_WRITEBUFFER=y
--# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
--CONFIG_JFFS2_SUMMARY=y
--CONFIG_JFFS2_FS_XATTR=y
--CONFIG_JFFS2_FS_POSIX_ACL=y
--CONFIG_JFFS2_FS_SECURITY=y
--CONFIG_JFFS2_COMPRESSION_OPTIONS=y
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--# CONFIG_JFFS2_CMODE_NONE is not set
--CONFIG_JFFS2_CMODE_PRIORITY=y
--# CONFIG_JFFS2_CMODE_SIZE is not set
--# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
--CONFIG_UBIFS_FS=m
--CONFIG_UBIFS_FS_XATTR=y
--CONFIG_UBIFS_FS_ADVANCED_COMPR=y
--CONFIG_UBIFS_FS_LZO=y
--CONFIG_UBIFS_FS_ZLIB=y
--# CONFIG_UBIFS_FS_DEBUG is not set
--CONFIG_CRAMFS=m
--CONFIG_SQUASHFS=m
--# CONFIG_SQUASHFS_EMBEDDED is not set
--CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
--CONFIG_VXFS_FS=m
--CONFIG_MINIX_FS=y
--CONFIG_OMFS_FS=m
--CONFIG_HPFS_FS=m
--CONFIG_QNX4FS_FS=m
--CONFIG_ROMFS_FS=m
--CONFIG_SYSV_FS=m
--CONFIG_UFS_FS=m
--CONFIG_UFS_FS_WRITE=y
--# CONFIG_UFS_DEBUG is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=m
--CONFIG_NFS_V3=y
--CONFIG_NFS_V3_ACL=y
--CONFIG_NFS_V4=y
--CONFIG_NFS_SWAP=y
--CONFIG_NFSD=m
--CONFIG_NFSD_V2_ACL=y
--CONFIG_NFSD_V3=y
--CONFIG_NFSD_V3_ACL=y
--CONFIG_NFSD_V4=y
--CONFIG_LOCKD=m
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=m
--CONFIG_NFS_ACL_SUPPORT=m
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=m
--CONFIG_SUNRPC_GSS=m
--CONFIG_SUNRPC_XPRT_RDMA=m
--CONFIG_SUNRPC_SWAP=y
--CONFIG_RPCSEC_GSS_KRB5=m
--CONFIG_RPCSEC_GSS_SPKM3=m
--# CONFIG_SMB_FS is not set
--CONFIG_CIFS=m
--CONFIG_CIFS_STATS=y
--CONFIG_CIFS_STATS2=y
--CONFIG_CIFS_WEAK_PW_HASH=y
--CONFIG_CIFS_UPCALL=y
--CONFIG_CIFS_XATTR=y
--CONFIG_CIFS_POSIX=y
--# CONFIG_CIFS_DEBUG2 is not set
--CONFIG_CIFS_EXPERIMENTAL=y
--CONFIG_CIFS_DFS_UPCALL=y
--CONFIG_NCP_FS=m
--CONFIG_NCPFS_PACKET_SIGNING=y
--CONFIG_NCPFS_IOCTL_LOCKING=y
--CONFIG_NCPFS_STRONG=y
--CONFIG_NCPFS_NFS_NS=y
--CONFIG_NCPFS_OS2_NS=y
--CONFIG_NCPFS_SMALLDOS=y
--CONFIG_NCPFS_NLS=y
--CONFIG_NCPFS_EXTRAS=y
--CONFIG_CODA_FS=m
--CONFIG_AFS_FS=m
--# CONFIG_AFS_DEBUG is not set
--CONFIG_9P_FS=m
--CONFIG_NOVFS=m
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--CONFIG_OSF_PARTITION=y
--# CONFIG_AMIGA_PARTITION is not set
--CONFIG_ATARI_PARTITION=y
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--CONFIG_BSD_DISKLABEL=y
--# CONFIG_MINIX_SUBPARTITION is not set
--CONFIG_SOLARIS_X86_PARTITION=y
--CONFIG_UNIXWARE_DISKLABEL=y
--CONFIG_LDM_PARTITION=y
--# CONFIG_LDM_DEBUG is not set
--CONFIG_SGI_PARTITION=y
--CONFIG_ULTRIX_PARTITION=y
--CONFIG_SUN_PARTITION=y
--CONFIG_KARMA_PARTITION=y
--CONFIG_EFI_PARTITION=y
--CONFIG_SYSV68_PARTITION=y
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="utf8"
--CONFIG_NLS_CODEPAGE_437=m
--CONFIG_NLS_CODEPAGE_737=m
--CONFIG_NLS_CODEPAGE_775=m
--CONFIG_NLS_CODEPAGE_850=m
--CONFIG_NLS_CODEPAGE_852=m
--CONFIG_NLS_CODEPAGE_855=m
--CONFIG_NLS_CODEPAGE_857=m
--CONFIG_NLS_CODEPAGE_860=m
--CONFIG_NLS_CODEPAGE_861=m
--CONFIG_NLS_CODEPAGE_862=m
--CONFIG_NLS_CODEPAGE_863=m
--CONFIG_NLS_CODEPAGE_864=m
--CONFIG_NLS_CODEPAGE_865=m
--CONFIG_NLS_CODEPAGE_866=m
--CONFIG_NLS_CODEPAGE_869=m
--CONFIG_NLS_CODEPAGE_936=m
--CONFIG_NLS_CODEPAGE_950=m
--CONFIG_NLS_CODEPAGE_932=m
--CONFIG_NLS_CODEPAGE_949=m
--CONFIG_NLS_CODEPAGE_874=m
--CONFIG_NLS_ISO8859_8=m
--CONFIG_NLS_CODEPAGE_1250=m
--CONFIG_NLS_CODEPAGE_1251=m
--CONFIG_NLS_ASCII=m
--CONFIG_NLS_ISO8859_1=m
--CONFIG_NLS_ISO8859_2=m
--CONFIG_NLS_ISO8859_3=m
--CONFIG_NLS_ISO8859_4=m
--CONFIG_NLS_ISO8859_5=m
--CONFIG_NLS_ISO8859_6=m
--CONFIG_NLS_ISO8859_7=m
--CONFIG_NLS_ISO8859_9=m
--CONFIG_NLS_ISO8859_13=m
--CONFIG_NLS_ISO8859_14=m
--CONFIG_NLS_ISO8859_15=m
--CONFIG_NLS_KOI8_R=m
--CONFIG_NLS_KOI8_U=m
--CONFIG_NLS_UTF8=m
--CONFIG_DLM=m
--# CONFIG_DLM_DEBUG is not set
--
--#
--# Kernel hacking
--#
--CONFIG_TRACE_IRQFLAGS_SUPPORT=y
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--# CONFIG_ENABLE_MUST_CHECK is not set
--CONFIG_FRAME_WARN=1024
--CONFIG_MAGIC_SYSRQ=y
--CONFIG_UNUSED_SYMBOLS=y
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--# CONFIG_DETECT_SOFTLOCKUP is not set
--CONFIG_SCHED_DEBUG=y
--CONFIG_SCHEDSTATS=y
--CONFIG_TIMER_STATS=y
--# CONFIG_DEBUG_OBJECTS is not set
--# CONFIG_DEBUG_SLAB is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--# CONFIG_DEBUG_MUTEXES is not set
--# CONFIG_DEBUG_LOCK_ALLOC is not set
--# CONFIG_PROVE_LOCKING is not set
--# CONFIG_LOCK_STAT is not set
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--CONFIG_STACKTRACE=y
--# CONFIG_DEBUG_KOBJECT is not set
--CONFIG_DEBUG_BUGVERBOSE=y
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_WRITECOUNT is not set
--CONFIG_DEBUG_MEMORY_INIT=y
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_FRAME_POINTER is not set
--CONFIG_UNWIND_INFO=y
--CONFIG_STACK_UNWIND=y
--# CONFIG_BOOT_PRINTK_DELAY is not set
--CONFIG_RCU_TORTURE_TEST=m
--# CONFIG_KPROBES_SANITY_TEST is not set
--CONFIG_BACKTRACE_SELF_TEST=m
--CONFIG_LKDTM=m
--# CONFIG_FAULT_INJECTION is not set
--CONFIG_LATENCYTOP=y
--CONFIG_SYSCTL_SYSCALL_CHECK=y
--CONFIG_HAVE_FTRACE=y
--CONFIG_HAVE_DYNAMIC_FTRACE=y
--# CONFIG_FTRACE is not set
--# CONFIG_IRQSOFF_TRACER is not set
--# CONFIG_SYSPROF_TRACER is not set
--# CONFIG_SCHED_TRACER is not set
--# CONFIG_CONTEXT_SWITCH_TRACER is not set
--CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
--CONFIG_DYNAMIC_PRINTK_DEBUG=y
--# CONFIG_SAMPLES is not set
--CONFIG_HAVE_ARCH_KGDB=y
--# CONFIG_KGDB is not set
--# CONFIG_STRICT_DEVMEM is not set
--# CONFIG_X86_VERBOSE_BOOTUP is not set
--CONFIG_EARLY_PRINTK=y
--CONFIG_EARLY_PRINTK_DBGP=y
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUG_PER_CPU_MAPS is not set
--# CONFIG_X86_PTDUMP is not set
--CONFIG_DEBUG_RODATA=y
--# CONFIG_DEBUG_RODATA_TEST is not set
--# CONFIG_DEBUG_NX_TEST is not set
--# CONFIG_IOMMU_DEBUG is not set
--# CONFIG_MMIOTRACE is not set
--CONFIG_IO_DELAY_TYPE_0X80=0
--CONFIG_IO_DELAY_TYPE_0XED=1
--CONFIG_IO_DELAY_TYPE_UDELAY=2
--CONFIG_IO_DELAY_TYPE_NONE=3
--CONFIG_IO_DELAY_0X80=y
--# CONFIG_IO_DELAY_0XED is not set
--# CONFIG_IO_DELAY_UDELAY is not set
--# CONFIG_IO_DELAY_NONE is not set
--CONFIG_DEFAULT_IO_DELAY_TYPE=0
--# CONFIG_DEBUG_BOOT_PARAMS is not set
--# CONFIG_CPA_DEBUG is not set
--# CONFIG_OPTIMIZE_INLINING is not set
--CONFIG_KDB=y
--CONFIG_KDB_MODULES=m
--CONFIG_KDB_OFF=y
--CONFIG_KDB_CONTINUE_CATASTROPHIC=0
--CONFIG_KDB_USB=y
--CONFIG_KDB_KDUMP=y
--
--#
--# Security options
--#
--CONFIG_KEYS=y
--CONFIG_KEYS_DEBUG_PROC_KEYS=y
--CONFIG_SECURITY=y
--CONFIG_SECURITY_DEFAULT="apparmor"
--CONFIG_SECURITY_NETWORK=y
--# CONFIG_SECURITY_NETWORK_XFRM is not set
--CONFIG_SECURITY_FILE_CAPABILITIES=y
--CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
--CONFIG_SECURITY_SELINUX=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
--CONFIG_SECURITY_SELINUX_DISABLE=y
--CONFIG_SECURITY_SELINUX_DEVELOP=y
--CONFIG_SECURITY_SELINUX_AVC_STATS=y
--CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
--CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
--# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
--CONFIG_SECURITY_APPARMOR=y
--CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
--CONFIG_SECURITY_APPARMOR_DISABLE=y
--CONFIG_XOR_BLOCKS=m
--CONFIG_ASYNC_CORE=m
--CONFIG_ASYNC_MEMCPY=m
--CONFIG_ASYNC_XOR=m
--CONFIG_CRYPTO=y
--
--#
--# Crypto core or helper
--#
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_AEAD=m
--CONFIG_CRYPTO_BLKCIPHER=m
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_GF128MUL=m
--CONFIG_CRYPTO_NULL=m
--CONFIG_CRYPTO_CRYPTD=m
--CONFIG_CRYPTO_AUTHENC=m
--CONFIG_CRYPTO_TEST=m
--
--#
--# Authenticated Encryption with Associated Data
--#
--CONFIG_CRYPTO_CCM=m
--CONFIG_CRYPTO_GCM=m
--CONFIG_CRYPTO_SEQIV=m
--
--#
--# Block modes
--#
--CONFIG_CRYPTO_CBC=m
--CONFIG_CRYPTO_CTR=m
--CONFIG_CRYPTO_CTS=m
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_LRW=m
--CONFIG_CRYPTO_PCBC=m
--CONFIG_CRYPTO_XTS=m
--
--#
--# Hash modes
--#
--CONFIG_CRYPTO_HMAC=y
--CONFIG_CRYPTO_XCBC=m
--
--#
--# Digest
--#
--CONFIG_CRYPTO_CRC32C=m
--CONFIG_CRYPTO_MD4=m
--CONFIG_CRYPTO_MD5=m
--CONFIG_CRYPTO_MICHAEL_MIC=m
--CONFIG_CRYPTO_RMD128=m
--CONFIG_CRYPTO_RMD160=m
--CONFIG_CRYPTO_RMD256=m
--CONFIG_CRYPTO_RMD320=m
--CONFIG_CRYPTO_SHA1=m
--CONFIG_CRYPTO_SHA256=m
--CONFIG_CRYPTO_SHA512=m
--CONFIG_CRYPTO_TGR192=m
--CONFIG_CRYPTO_WP512=m
--
--#
--# Ciphers
--#
--CONFIG_CRYPTO_AES=m
--CONFIG_CRYPTO_AES_X86_64=m
--CONFIG_CRYPTO_ANUBIS=m
--CONFIG_CRYPTO_ARC4=m
--CONFIG_CRYPTO_BLOWFISH=m
--CONFIG_CRYPTO_CAMELLIA=m
--CONFIG_CRYPTO_CAST5=m
--CONFIG_CRYPTO_CAST6=m
--CONFIG_CRYPTO_DES=m
--CONFIG_CRYPTO_FCRYPT=m
--CONFIG_CRYPTO_KHAZAD=m
--CONFIG_CRYPTO_SALSA20=m
--CONFIG_CRYPTO_SALSA20_X86_64=m
--CONFIG_CRYPTO_SEED=m
--CONFIG_CRYPTO_SERPENT=m
--CONFIG_CRYPTO_TEA=m
--# CONFIG_CRYPTO_TWOFISH is not set
--CONFIG_CRYPTO_TWOFISH_COMMON=m
--CONFIG_CRYPTO_TWOFISH_X86_64=m
--
--#
--# Compression
--#
--CONFIG_CRYPTO_DEFLATE=m
--CONFIG_CRYPTO_LZO=m
--CONFIG_CRYPTO_HW=y
--CONFIG_CRYPTO_DEV_HIFN_795X=m
--CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
--CONFIG_HAVE_KVM=y
--CONFIG_VIRTUALIZATION=y
--CONFIG_KVM_KMP=y
--# CONFIG_KVM is not set
--CONFIG_VIRTIO=m
--CONFIG_VIRTIO_RING=m
--CONFIG_VIRTIO_PCI=m
--CONFIG_VIRTIO_BALLOON=m
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--CONFIG_GENERIC_FIND_FIRST_BIT=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--CONFIG_CRC_CCITT=m
--CONFIG_CRC16=m
--CONFIG_CRC_T10DIF=m
--CONFIG_CRC_ITU_T=m
--CONFIG_CRC32=y
--CONFIG_CRC7=m
--CONFIG_LIBCRC32C=m
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=m
--CONFIG_LZO_COMPRESS=m
--CONFIG_LZO_DECOMPRESS=m
--CONFIG_GENERIC_ALLOCATOR=y
--CONFIG_REED_SOLOMON=m
--CONFIG_REED_SOLOMON_DEC16=y
--CONFIG_TEXTSEARCH=y
--CONFIG_TEXTSEARCH_KMP=m
--CONFIG_TEXTSEARCH_BM=m
--CONFIG_TEXTSEARCH_FSM=m
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--CONFIG_CHECK_SIGNATURE=y
-diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config
-deleted file mode 100644
-index 69bca9a..0000000
---- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config
-+++ /dev/null
-@@ -1,4143 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.27.21
--# Wed May 13 22:02:04 2009
--#
--CONFIG_64BIT=y
--# CONFIG_X86_32 is not set
--CONFIG_X86_64=y
--CONFIG_X86=y
--CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
--# CONFIG_GENERIC_LOCKBREAK is not set
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_CLOCKSOURCE_WATCHDOG=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
--CONFIG_LOCKDEP_SUPPORT=y
--CONFIG_STACKTRACE_SUPPORT=y
--CONFIG_HAVE_LATENCYTOP_SUPPORT=y
--CONFIG_FAST_CMPXCHG_LOCAL=y
--CONFIG_MMU=y
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_GENERIC_IOMAP=y
--CONFIG_GENERIC_BUG=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_GPIO=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_RWSEM_GENERIC_SPINLOCK=y
--# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
--# CONFIG_ARCH_HAS_ILOG2_U32 is not set
--# CONFIG_ARCH_HAS_ILOG2_U64 is not set
--CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_ARCH_HAS_CPU_RELAX=y
--CONFIG_ARCH_HAS_DEFAULT_IDLE=y
--CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
--CONFIG_HAVE_SETUP_PER_CPU_AREA=y
--CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
--CONFIG_ARCH_HIBERNATION_POSSIBLE=y
--CONFIG_ARCH_SUSPEND_POSSIBLE=y
--CONFIG_ZONE_DMA32=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_AUDIT_ARCH=y
--CONFIG_ARCH_SUPPORTS_AOUT=y
--CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
--CONFIG_GENERIC_HARDIRQS=y
--CONFIG_GENERIC_IRQ_PROBE=y
--CONFIG_GENERIC_PENDING_IRQ=y
--CONFIG_X86_SMP=y
--CONFIG_X86_64_SMP=y
--CONFIG_X86_HT=y
--CONFIG_X86_BIOS_REBOOT=y
--CONFIG_X86_TRAMPOLINE=y
--# CONFIG_KTIME_SCALAR is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_LOCK_KERNEL=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION="-0.1-default"
--# CONFIG_LOCALVERSION_AUTO is not set
--CONFIG_SUSE_KERNEL=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--CONFIG_BSD_PROCESS_ACCT_V3=y
--CONFIG_TASKSTATS=y
--CONFIG_TASK_DELAY_ACCT=y
--CONFIG_TASK_XACCT=y
--CONFIG_TASK_IO_ACCOUNTING=y
--CONFIG_AUDIT=y
--CONFIG_AUDITSYSCALL=y
--CONFIG_AUDIT_TREE=y
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_LOG_BUF_SHIFT=18
--CONFIG_CGROUPS=y
--# CONFIG_CGROUP_DEBUG is not set
--CONFIG_CGROUP_NS=y
--CONFIG_CGROUP_FREEZER=y
--CONFIG_CGROUP_DEVICE=y
--CONFIG_CPUSETS=y
--CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--CONFIG_CGROUP_SCHED=y
--CONFIG_CGROUP_CPUACCT=y
--CONFIG_RESOURCE_COUNTERS=y
--CONFIG_MM_OWNER=y
--CONFIG_CGROUP_MEM_RES_CTLR=y
--# CONFIG_SYSFS_DEPRECATED_V2 is not set
--CONFIG_PROC_PID_CPUSET=y
--CONFIG_RELAY=y
--CONFIG_NAMESPACES=y
--CONFIG_UTS_NS=y
--CONFIG_IPC_NS=y
--CONFIG_USER_NS=y
--CONFIG_PID_NS=y
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--CONFIG_CC_OPTIMIZE_FOR_SIZE=y
--CONFIG_SYSCTL=y
--# CONFIG_EMBEDDED is not set
--CONFIG_UID16=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_PCSPKR_PLATFORM=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--CONFIG_PROFILING=y
--# CONFIG_TRACEPOINTS is not set
--CONFIG_MARKERS=y
--CONFIG_OPROFILE=m
--CONFIG_HAVE_OPROFILE=y
--CONFIG_KPROBES=y
--CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
--CONFIG_KRETPROBES=y
--CONFIG_HAVE_IOREMAP_PROT=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_HAVE_ARCH_TRACEHOOK=y
--# CONFIG_HAVE_DMA_ATTRS is not set
--CONFIG_USE_GENERIC_SMP_HELPERS=y
--# CONFIG_HAVE_CLK is not set
--CONFIG_PROC_PAGE_MONITOR=y
--# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_FORCE_LOAD=y
--CONFIG_MODULE_UNLOAD=y
--CONFIG_MODULE_FORCE_UNLOAD=y
--CONFIG_MODVERSIONS=y
--CONFIG_MODULE_SRCVERSION_ALL=y
--CONFIG_KMOD=y
--CONFIG_STOP_MACHINE=y
--# CONFIG_UTRACE is not set
--CONFIG_BLOCK=y
--CONFIG_BLK_DEV_IO_TRACE=y
--CONFIG_BLK_DEV_BSG=y
--CONFIG_BLK_DEV_INTEGRITY=y
--CONFIG_BLOCK_COMPAT=y
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--CONFIG_DEFAULT_DEADLINE=y
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="deadline"
--CONFIG_PREEMPT_NOTIFIERS=y
--CONFIG_CLASSIC_RCU=y
--CONFIG_FREEZER=y
--
--#
--# Processor type and features
--#
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--CONFIG_SMP=y
--CONFIG_X86_FIND_SMP_CONFIG=y
--CONFIG_X86_MPPARSE=y
--CONFIG_X86_PC=y
--# CONFIG_X86_XEN is not set
--# CONFIG_X86_ELAN is not set
--# CONFIG_X86_VOYAGER is not set
--# CONFIG_X86_GENERICARCH is not set
--# CONFIG_X86_64_XEN is not set
--# CONFIG_X86_VSMP is not set
--# CONFIG_PARAVIRT_GUEST is not set
--CONFIG_MEMTEST=y
--# CONFIG_M386 is not set
--# CONFIG_M486 is not set
--# CONFIG_M586 is not set
--# CONFIG_M586TSC is not set
--# CONFIG_M586MMX is not set
--# CONFIG_M686 is not set
--# CONFIG_MPENTIUMII is not set
--# CONFIG_MPENTIUMIII is not set
--# CONFIG_MPENTIUMM is not set
--# CONFIG_MPENTIUM4 is not set
--# CONFIG_MK6 is not set
--# CONFIG_MK7 is not set
--# CONFIG_MK8 is not set
--# CONFIG_MCRUSOE is not set
--# CONFIG_MEFFICEON is not set
--# CONFIG_MWINCHIPC6 is not set
--# CONFIG_MWINCHIP2 is not set
--# CONFIG_MWINCHIP3D is not set
--# CONFIG_MGEODEGX1 is not set
--# CONFIG_MGEODE_LX is not set
--# CONFIG_MCYRIXIII is not set
--# CONFIG_MVIAC3_2 is not set
--# CONFIG_MVIAC7 is not set
--# CONFIG_MPSC is not set
--# CONFIG_MCORE2 is not set
--CONFIG_GENERIC_CPU=y
--CONFIG_X86_CPU=y
--CONFIG_X86_L1_CACHE_BYTES=128
--CONFIG_X86_INTERNODE_CACHE_BYTES=128
--CONFIG_X86_CMPXCHG=y
--CONFIG_X86_L1_CACHE_SHIFT=7
--CONFIG_X86_WP_WORKS_OK=y
--CONFIG_X86_TSC=y
--CONFIG_X86_CMPXCHG64=y
--CONFIG_X86_CMOV=y
--CONFIG_X86_MINIMUM_CPU_FAMILY=64
--CONFIG_X86_DEBUGCTLMSR=y
--CONFIG_HPET_TIMER=y
--CONFIG_HPET_EMULATE_RTC=y
--CONFIG_DMI=y
--CONFIG_GART_IOMMU=y
--CONFIG_CALGARY_IOMMU=y
--# CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT is not set
--CONFIG_AMD_IOMMU=y
--CONFIG_SWIOTLB=y
--CONFIG_IOMMU_HELPER=y
--CONFIG_MAXSMP=y
--CONFIG_NR_CPUS=512
--CONFIG_SCHED_SMT=y
--CONFIG_SCHED_MC=y
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
--CONFIG_X86_LOCAL_APIC=y
--CONFIG_X86_IO_APIC=y
--CONFIG_X86_MCE=y
--CONFIG_X86_MCE_INTEL=y
--CONFIG_X86_MCE_AMD=y
--CONFIG_I8K=m
--CONFIG_MICROCODE=m
--CONFIG_MICROCODE_OLD_INTERFACE=y
--CONFIG_X86_MSR=m
--CONFIG_X86_CPUID=m
--CONFIG_DIRECT_GBPAGES=y
--CONFIG_NUMA=y
--CONFIG_K8_NUMA=y
--CONFIG_X86_64_ACPI_NUMA=y
--CONFIG_NODES_SPAN_OTHER_NODES=y
--CONFIG_NUMA_EMU=y
--CONFIG_NODES_SHIFT=9
--CONFIG_ARCH_SPARSEMEM_DEFAULT=y
--CONFIG_ARCH_SPARSEMEM_ENABLE=y
--CONFIG_ARCH_SELECT_MEMORY_MODEL=y
--CONFIG_ARCH_MEMORY_PROBE=y
--CONFIG_SELECT_MEMORY_MODEL=y
--# CONFIG_FLATMEM_MANUAL is not set
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--CONFIG_SPARSEMEM_MANUAL=y
--CONFIG_SPARSEMEM=y
--CONFIG_NEED_MULTIPLE_NODES=y
--CONFIG_HAVE_MEMORY_PRESENT=y
--# CONFIG_SPARSEMEM_STATIC is not set
--CONFIG_SPARSEMEM_EXTREME=y
--CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
--CONFIG_SPARSEMEM_VMEMMAP=y
--CONFIG_MEMORY_HOTPLUG=y
--CONFIG_MEMORY_HOTPLUG_SPARSE=y
--CONFIG_PAGEFLAGS_EXTENDED=y
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_MIGRATION=y
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_MMU_NOTIFIER=y
--CONFIG_X86_RESERVE_LOW_64K=y
--CONFIG_MTRR=y
--# CONFIG_MTRR_SANITIZER is not set
--CONFIG_X86_PAT=y
--CONFIG_EFI=y
--CONFIG_SECCOMP=y
--# CONFIG_SECCOMP_DISABLE_TSC is not set
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--CONFIG_SCHED_HRTICK=y
--CONFIG_KEXEC=y
--CONFIG_CRASH_DUMP=y
--CONFIG_PHYSICAL_START=0x200000
--CONFIG_RELOCATABLE=y
--CONFIG_PHYSICAL_ALIGN=0x200000
--CONFIG_HOTPLUG_CPU=y
--CONFIG_COMPAT_VDSO=y
--
--#
--# Hardware Performance Monitoring support
--#
--CONFIG_PERFMON=y
--# CONFIG_PERFMON_DEBUG is not set
--CONFIG_PERFMON_DEBUG_FS=y
--CONFIG_X86_PERFMON_P4=m
--CONFIG_X86_PERFMON_PEBS_P4=m
--CONFIG_X86_PERFMON_CORE=m
--CONFIG_X86_PERFMON_PEBS_CORE=m
--CONFIG_X86_PERFMON_INTEL_ATOM=m
--CONFIG_X86_PERFMON_INTEL_ARCH=m
--CONFIG_X86_PERFMON_AMD64=m
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
--
--#
--# Power management options
--#
--CONFIG_ARCH_HIBERNATION_HEADER=y
--CONFIG_PM=y
--# CONFIG_PM_DEBUG is not set
--CONFIG_PM_SLEEP_SMP=y
--CONFIG_PM_SLEEP=y
--CONFIG_SUSPEND=y
--CONFIG_SUSPEND_FREEZER=y
--CONFIG_HIBERNATION=y
--CONFIG_PM_STD_PARTITION=""
--CONFIG_ACPI=y
--CONFIG_ACPI_SLEEP=y
--CONFIG_ACPI_PROCFS=y
--CONFIG_ACPI_PROCFS_POWER=y
--CONFIG_ACPI_SYSFS_POWER=y
--CONFIG_ACPI_PROC_EVENT=y
--CONFIG_ACPI_AC=m
--CONFIG_ACPI_BATTERY=m
--CONFIG_ACPI_BUTTON=m
--CONFIG_ACPI_VIDEO=m
--CONFIG_ACPI_FAN=m
--CONFIG_ACPI_DOCK=m
--CONFIG_ACPI_PROCESSOR=m
--CONFIG_ACPI_HOTPLUG_CPU=y
--CONFIG_ACPI_THERMAL=m
--CONFIG_ACPI_NUMA=y
--CONFIG_ACPI_WMI=m
--# CONFIG_ACPI_ASUS is not set
--CONFIG_ACPI_TOSHIBA=m
--CONFIG_ACPI_CUSTOM_DSDT_FILE=""
--# CONFIG_ACPI_CUSTOM_DSDT is not set
--CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
--CONFIG_ACPI_BLACKLIST_YEAR=0
--CONFIG_ACPI_DEBUG=y
--# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
--CONFIG_ACPI_EC=y
--CONFIG_ACPI_PCI_SLOT=m
--CONFIG_ACPI_POWER=y
--CONFIG_ACPI_SYSTEM=y
--CONFIG_X86_PM_TIMER=y
--CONFIG_ACPI_CONTAINER=m
--CONFIG_ACPI_HOTPLUG_MEMORY=m
--CONFIG_ACPI_SBS=m
--
--#
--# CPU Frequency scaling
--#
--CONFIG_CPU_FREQ=y
--CONFIG_CPU_FREQ_TABLE=y
--# CONFIG_CPU_FREQ_DEBUG is not set
--CONFIG_CPU_FREQ_STAT=m
--CONFIG_CPU_FREQ_STAT_DETAILS=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
--# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
--CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
--# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
--CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
--CONFIG_CPU_FREQ_GOV_POWERSAVE=m
--CONFIG_CPU_FREQ_GOV_USERSPACE=m
--CONFIG_CPU_FREQ_GOV_ONDEMAND=y
--CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
--
--#
--# CPUFreq processor drivers
--#
--CONFIG_X86_ACPI_CPUFREQ=m
--CONFIG_X86_POWERNOW_K8=m
--CONFIG_X86_POWERNOW_K8_ACPI=y
--# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
--# CONFIG_X86_P4_CLOCKMOD is not set
--
--#
--# shared options
--#
--# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
--# CONFIG_X86_SPEEDSTEP_LIB is not set
--CONFIG_CPU_IDLE=y
--CONFIG_CPU_IDLE_GOV_LADDER=y
--CONFIG_CPU_IDLE_GOV_MENU=y
--
--#
--# Bus options (PCI etc.)
--#
--CONFIG_PCI=y
--CONFIG_PCI_DIRECT=y
--CONFIG_PCI_MMCONFIG=y
--CONFIG_PCI_DOMAINS=y
--# CONFIG_DMAR is not set
--CONFIG_INTR_REMAP=y
--CONFIG_PCIEPORTBUS=y
--CONFIG_HOTPLUG_PCI_PCIE=m
--CONFIG_PCIEAER=y
--CONFIG_PCIEASPM=y
--# CONFIG_PCIEASPM_DEBUG is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--CONFIG_HT_IRQ=y
--CONFIG_ISA_DMA_API=y
--CONFIG_K8_NB=y
--CONFIG_PCCARD=m
--# CONFIG_PCMCIA_DEBUG is not set
--CONFIG_PCMCIA=m
--CONFIG_PCMCIA_LOAD_CIS=y
--CONFIG_PCMCIA_IOCTL=y
--CONFIG_CARDBUS=y
--
--#
--# PC-card bridges
--#
--CONFIG_YENTA=m
--CONFIG_YENTA_O2=y
--CONFIG_YENTA_RICOH=y
--CONFIG_YENTA_TI=y
--CONFIG_YENTA_ENE_TUNE=y
--CONFIG_YENTA_TOSHIBA=y
--CONFIG_PD6729=m
--CONFIG_I82092=m
--CONFIG_PCCARD_NONSTATIC=m
--CONFIG_HOTPLUG_PCI=m
--CONFIG_HOTPLUG_PCI_FAKE=m
--CONFIG_HOTPLUG_PCI_ACPI=m
--CONFIG_HOTPLUG_PCI_ACPI_IBM=m
--CONFIG_HOTPLUG_PCI_CPCI=y
--CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
--CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
--CONFIG_HOTPLUG_PCI_SHPC=m
--
--#
--# Executable file formats / Emulations
--#
--CONFIG_BINFMT_ELF=y
--CONFIG_COMPAT_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=m
--CONFIG_IA32_EMULATION=y
--CONFIG_IA32_AOUT=y
--CONFIG_COMPAT=y
--CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
--CONFIG_SYSVIPC_COMPAT=y
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=m
--CONFIG_PACKET_MMAP=y
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--CONFIG_XFRM_SUB_POLICY=y
--CONFIG_XFRM_MIGRATE=y
--# CONFIG_XFRM_STATISTICS is not set
--CONFIG_XFRM_IPCOMP=m
--CONFIG_NET_KEY=m
--CONFIG_NET_KEY_MIGRATE=y
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--CONFIG_IP_ROUTE_MULTIPATH=y
--CONFIG_IP_ROUTE_VERBOSE=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--CONFIG_IP_PNP_RARP=y
--CONFIG_NET_IPIP=m
--CONFIG_NET_IPGRE=m
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--CONFIG_INET_AH=m
--CONFIG_INET_ESP=m
--CONFIG_INET_IPCOMP=m
--CONFIG_INET_XFRM_TUNNEL=m
--CONFIG_INET_TUNNEL=m
--CONFIG_INET_XFRM_MODE_TRANSPORT=m
--CONFIG_INET_XFRM_MODE_TUNNEL=m
--CONFIG_INET_XFRM_MODE_BEET=m
--CONFIG_INET_LRO=y
--CONFIG_INET_DIAG=m
--CONFIG_INET_TCP_DIAG=m
--CONFIG_TCP_CONG_ADVANCED=y
--CONFIG_TCP_CONG_BIC=m
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_TCP_CONG_WESTWOOD=m
--CONFIG_TCP_CONG_HTCP=m
--CONFIG_TCP_CONG_HSTCP=m
--CONFIG_TCP_CONG_HYBLA=m
--CONFIG_TCP_CONG_VEGAS=m
--CONFIG_TCP_CONG_SCALABLE=m
--CONFIG_TCP_CONG_LP=m
--CONFIG_TCP_CONG_VENO=m
--CONFIG_TCP_CONG_YEAH=m
--CONFIG_TCP_CONG_ILLINOIS=m
--# CONFIG_DEFAULT_BIC is not set
--CONFIG_DEFAULT_CUBIC=y
--# CONFIG_DEFAULT_HTCP is not set
--# CONFIG_DEFAULT_VEGAS is not set
--# CONFIG_DEFAULT_WESTWOOD is not set
--# CONFIG_DEFAULT_RENO is not set
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--CONFIG_IP_VS=m
--# CONFIG_IP_VS_DEBUG is not set
--CONFIG_IP_VS_TAB_BITS=12
--
--#
--# IPVS transport protocol load balancing support
--#
--CONFIG_IP_VS_PROTO_TCP=y
--CONFIG_IP_VS_PROTO_UDP=y
--CONFIG_IP_VS_PROTO_ESP=y
--CONFIG_IP_VS_PROTO_AH=y
--
--#
--# IPVS scheduler
--#
--CONFIG_IP_VS_RR=m
--CONFIG_IP_VS_WRR=m
--CONFIG_IP_VS_LC=m
--CONFIG_IP_VS_WLC=m
--CONFIG_IP_VS_LBLC=m
--CONFIG_IP_VS_LBLCR=m
--CONFIG_IP_VS_DH=m
--CONFIG_IP_VS_SH=m
--CONFIG_IP_VS_SED=m
--CONFIG_IP_VS_NQ=m
--
--#
--# IPVS application helper
--#
--CONFIG_IP_VS_FTP=m
--CONFIG_IPV6=m
--CONFIG_IPV6_PRIVACY=y
--CONFIG_IPV6_ROUTER_PREF=y
--CONFIG_IPV6_ROUTE_INFO=y
--# CONFIG_IPV6_OPTIMISTIC_DAD is not set
--CONFIG_INET6_AH=m
--CONFIG_INET6_ESP=m
--CONFIG_INET6_IPCOMP=m
--CONFIG_IPV6_MIP6=m
--CONFIG_INET6_XFRM_TUNNEL=m
--CONFIG_INET6_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_TRANSPORT=m
--CONFIG_INET6_XFRM_MODE_TUNNEL=m
--CONFIG_INET6_XFRM_MODE_BEET=m
--CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
--CONFIG_IPV6_SIT=m
--CONFIG_IPV6_NDISC_NODETYPE=y
--CONFIG_IPV6_TUNNEL=m
--CONFIG_IPV6_MULTIPLE_TABLES=y
--CONFIG_IPV6_SUBTREES=y
--# CONFIG_IPV6_MROUTE is not set
--# CONFIG_NETLABEL is not set
--CONFIG_NETWORK_SECMARK=y
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_NETFILTER_ADVANCED=y
--CONFIG_BRIDGE_NETFILTER=y
--
--#
--# Core Netfilter Configuration
--#
--CONFIG_NETFILTER_NETLINK=m
--CONFIG_NETFILTER_NETLINK_QUEUE=m
--CONFIG_NETFILTER_NETLINK_LOG=m
--CONFIG_NF_CONNTRACK=m
--CONFIG_NF_CT_ACCT=y
--CONFIG_NF_CONNTRACK_MARK=y
--CONFIG_NF_CONNTRACK_SECMARK=y
--CONFIG_NF_CONNTRACK_EVENTS=y
--CONFIG_NF_CT_PROTO_DCCP=m
--CONFIG_NF_CT_PROTO_GRE=m
--CONFIG_NF_CT_PROTO_SCTP=m
--CONFIG_NF_CT_PROTO_UDPLITE=m
--CONFIG_NF_CONNTRACK_AMANDA=m
--CONFIG_NF_CONNTRACK_FTP=m
--CONFIG_NF_CONNTRACK_H323=m
--CONFIG_NF_CONNTRACK_IRC=m
--CONFIG_NF_CONNTRACK_NETBIOS_NS=m
--CONFIG_NF_CONNTRACK_PPTP=m
--CONFIG_NF_CONNTRACK_SANE=m
--CONFIG_NF_CONNTRACK_SIP=m
--CONFIG_NF_CONNTRACK_TFTP=m
--CONFIG_NF_CONNTRACK_SLP=m
--CONFIG_NF_CT_NETLINK=m
--CONFIG_NETFILTER_XTABLES=m
--CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
--CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
--CONFIG_NETFILTER_XT_TARGET_DSCP=m
--CONFIG_NETFILTER_XT_TARGET_MARK=m
--CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
--CONFIG_NETFILTER_XT_TARGET_NFLOG=m
--CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
--CONFIG_NETFILTER_XT_TARGET_RATEEST=m
--CONFIG_NETFILTER_XT_TARGET_TRACE=m
--CONFIG_NETFILTER_XT_TARGET_SECMARK=m
--CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
--CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
--CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
--CONFIG_NETFILTER_XT_MATCH_COMMENT=m
--CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
--CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
--CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
--CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
--CONFIG_NETFILTER_XT_MATCH_DCCP=m
--CONFIG_NETFILTER_XT_MATCH_DSCP=m
--CONFIG_NETFILTER_XT_MATCH_ESP=m
--CONFIG_NETFILTER_XT_MATCH_HELPER=m
--CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
--CONFIG_NETFILTER_XT_MATCH_LENGTH=m
--CONFIG_NETFILTER_XT_MATCH_LIMIT=m
--CONFIG_NETFILTER_XT_MATCH_MAC=m
--CONFIG_NETFILTER_XT_MATCH_MARK=m
--CONFIG_NETFILTER_XT_MATCH_OWNER=m
--CONFIG_NETFILTER_XT_MATCH_POLICY=m
--CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
--CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
--CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
--CONFIG_NETFILTER_XT_MATCH_QUOTA=m
--CONFIG_NETFILTER_XT_MATCH_RATEEST=m
--CONFIG_NETFILTER_XT_MATCH_REALM=m
--CONFIG_NETFILTER_XT_MATCH_SCTP=m
--CONFIG_NETFILTER_XT_MATCH_STATE=m
--CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
--CONFIG_NETFILTER_XT_MATCH_STRING=m
--CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
--CONFIG_NETFILTER_XT_MATCH_TIME=m
--CONFIG_NETFILTER_XT_MATCH_U32=m
--CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
--
--#
--# IP: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV4=m
--# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
--CONFIG_IP_NF_QUEUE=m
--CONFIG_IP_NF_IPTABLES=m
--CONFIG_IP_NF_MATCH_RECENT=m
--CONFIG_IP_NF_MATCH_ECN=m
--CONFIG_IP_NF_MATCH_AH=m
--CONFIG_IP_NF_MATCH_TTL=m
--CONFIG_IP_NF_MATCH_ADDRTYPE=m
--CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
--CONFIG_IP_NF_FILTER=m
--CONFIG_IP_NF_TARGET_REJECT=m
--CONFIG_IP_NF_TARGET_LOG=m
--CONFIG_IP_NF_TARGET_ULOG=m
--CONFIG_NF_NAT=m
--CONFIG_NF_NAT_NEEDED=y
--CONFIG_IP_NF_TARGET_MASQUERADE=m
--CONFIG_IP_NF_TARGET_REDIRECT=m
--CONFIG_IP_NF_TARGET_NETMAP=m
--CONFIG_NF_NAT_SNMP_BASIC=m
--CONFIG_NF_NAT_PROTO_DCCP=m
--CONFIG_NF_NAT_PROTO_GRE=m
--CONFIG_NF_NAT_PROTO_UDPLITE=m
--CONFIG_NF_NAT_PROTO_SCTP=m
--CONFIG_NF_NAT_FTP=m
--CONFIG_NF_NAT_IRC=m
--CONFIG_NF_NAT_TFTP=m
--CONFIG_NF_NAT_AMANDA=m
--CONFIG_NF_NAT_PPTP=m
--CONFIG_NF_NAT_H323=m
--CONFIG_NF_NAT_SIP=m
--CONFIG_IP_NF_MANGLE=m
--CONFIG_IP_NF_TARGET_ECN=m
--CONFIG_IP_NF_TARGET_TTL=m
--CONFIG_IP_NF_TARGET_CLUSTERIP=m
--CONFIG_IP_NF_RAW=m
--CONFIG_IP_NF_SECURITY=m
--CONFIG_IP_NF_ARPTABLES=m
--CONFIG_IP_NF_ARPFILTER=m
--CONFIG_IP_NF_ARP_MANGLE=m
--
--#
--# IPv6: Netfilter Configuration
--#
--CONFIG_NF_CONNTRACK_IPV6=m
--CONFIG_IP6_NF_QUEUE=m
--CONFIG_IP6_NF_IPTABLES=m
--CONFIG_IP6_NF_MATCH_RT=m
--CONFIG_IP6_NF_MATCH_OPTS=m
--CONFIG_IP6_NF_MATCH_FRAG=m
--CONFIG_IP6_NF_MATCH_HL=m
--CONFIG_IP6_NF_MATCH_IPV6HEADER=m
--CONFIG_IP6_NF_MATCH_AH=m
--CONFIG_IP6_NF_MATCH_MH=m
--CONFIG_IP6_NF_MATCH_EUI64=m
--CONFIG_IP6_NF_FILTER=m
--CONFIG_IP6_NF_TARGET_LOG=m
--CONFIG_IP6_NF_TARGET_REJECT=m
--CONFIG_IP6_NF_MANGLE=m
--CONFIG_IP6_NF_TARGET_HL=m
--CONFIG_IP6_NF_RAW=m
--CONFIG_IP6_NF_SECURITY=m
--
--#
--# DECnet: Netfilter Configuration
--#
--# CONFIG_DECNET_NF_GRABULATOR is not set
--
--#
--# Bridge: Netfilter Configuration
--#
--CONFIG_BRIDGE_NF_EBTABLES=m
--CONFIG_BRIDGE_EBT_BROUTE=m
--CONFIG_BRIDGE_EBT_T_FILTER=m
--CONFIG_BRIDGE_EBT_T_NAT=m
--CONFIG_BRIDGE_EBT_802_3=m
--CONFIG_BRIDGE_EBT_AMONG=m
--CONFIG_BRIDGE_EBT_ARP=m
--CONFIG_BRIDGE_EBT_IP=m
--CONFIG_BRIDGE_EBT_IP6=m
--CONFIG_BRIDGE_EBT_LIMIT=m
--CONFIG_BRIDGE_EBT_MARK=m
--CONFIG_BRIDGE_EBT_PKTTYPE=m
--CONFIG_BRIDGE_EBT_STP=m
--CONFIG_BRIDGE_EBT_VLAN=m
--CONFIG_BRIDGE_EBT_ARPREPLY=m
--CONFIG_BRIDGE_EBT_DNAT=m
--CONFIG_BRIDGE_EBT_MARK_T=m
--CONFIG_BRIDGE_EBT_REDIRECT=m
--CONFIG_BRIDGE_EBT_SNAT=m
--CONFIG_BRIDGE_EBT_LOG=m
--CONFIG_BRIDGE_EBT_ULOG=m
--CONFIG_BRIDGE_EBT_NFLOG=m
--CONFIG_IP_DCCP=m
--CONFIG_INET_DCCP_DIAG=m
--CONFIG_IP_DCCP_ACKVEC=y
--
--#
--# DCCP CCIDs Configuration (EXPERIMENTAL)
--#
--CONFIG_IP_DCCP_CCID2=m
--# CONFIG_IP_DCCP_CCID2_DEBUG is not set
--CONFIG_IP_DCCP_CCID3=m
--# CONFIG_IP_DCCP_CCID3_DEBUG is not set
--CONFIG_IP_DCCP_CCID3_RTO=100
--CONFIG_IP_DCCP_TFRC_LIB=m
--
--#
--# DCCP Kernel Hacking
--#
--# CONFIG_IP_DCCP_DEBUG is not set
--# CONFIG_NET_DCCPPROBE is not set
--CONFIG_IP_SCTP=m
--# CONFIG_SCTP_DBG_MSG is not set
--# CONFIG_SCTP_DBG_OBJCNT is not set
--# CONFIG_SCTP_HMAC_NONE is not set
--# CONFIG_SCTP_HMAC_SHA1 is not set
--CONFIG_SCTP_HMAC_MD5=y
--# CONFIG_TIPC is not set
--CONFIG_ATM=m
--CONFIG_ATM_CLIP=m
--# CONFIG_ATM_CLIP_NO_ICMP is not set
--CONFIG_ATM_LANE=m
--CONFIG_ATM_MPOA=m
--CONFIG_ATM_BR2684=m
--# CONFIG_ATM_BR2684_IPFILTER is not set
--CONFIG_STP=m
--CONFIG_GARP=m
--CONFIG_BRIDGE=m
--CONFIG_VLAN_8021Q=m
--CONFIG_VLAN_8021Q_GVRP=y
--CONFIG_DECNET=m
--# CONFIG_DECNET_ROUTER is not set
--CONFIG_LLC=y
--CONFIG_LLC2=m
--CONFIG_IPX=m
--CONFIG_IPX_INTERN=y
--CONFIG_ATALK=m
--CONFIG_DEV_APPLETALK=m
--CONFIG_IPDDP=m
--CONFIG_IPDDP_ENCAP=y
--CONFIG_IPDDP_DECAP=y
--CONFIG_X25=m
--CONFIG_LAPB=m
--CONFIG_ECONET=m
--# CONFIG_ECONET_AUNUDP is not set
--# CONFIG_ECONET_NATIVE is not set
--CONFIG_WAN_ROUTER=m
--CONFIG_NET_SCHED=y
--
--#
--# Queueing/Scheduling
--#
--CONFIG_NET_SCH_CBQ=m
--CONFIG_NET_SCH_HTB=m
--CONFIG_NET_SCH_HFSC=m
--CONFIG_NET_SCH_ATM=m
--CONFIG_NET_SCH_PRIO=m
--CONFIG_NET_SCH_MULTIQ=m
--CONFIG_NET_SCH_RED=m
--CONFIG_NET_SCH_SFQ=m
--CONFIG_NET_SCH_TEQL=m
--CONFIG_NET_SCH_TBF=m
--CONFIG_NET_SCH_GRED=m
--CONFIG_NET_SCH_DSMARK=m
--CONFIG_NET_SCH_NETEM=m
--CONFIG_NET_SCH_INGRESS=m
--
--#
--# Classification
--#
--CONFIG_NET_CLS=y
--CONFIG_NET_CLS_BASIC=m
--CONFIG_NET_CLS_TCINDEX=m
--CONFIG_NET_CLS_ROUTE4=m
--CONFIG_NET_CLS_ROUTE=y
--CONFIG_NET_CLS_FW=m
--CONFIG_NET_CLS_U32=m
--CONFIG_CLS_U32_PERF=y
--CONFIG_CLS_U32_MARK=y
--CONFIG_NET_CLS_RSVP=m
--CONFIG_NET_CLS_RSVP6=m
--CONFIG_NET_CLS_FLOW=m
--CONFIG_NET_EMATCH=y
--CONFIG_NET_EMATCH_STACK=32
--CONFIG_NET_EMATCH_CMP=m
--CONFIG_NET_EMATCH_NBYTE=m
--CONFIG_NET_EMATCH_U32=m
--CONFIG_NET_EMATCH_META=m
--CONFIG_NET_EMATCH_TEXT=m
--CONFIG_NET_CLS_ACT=y
--CONFIG_NET_ACT_POLICE=m
--CONFIG_NET_ACT_GACT=m
--CONFIG_GACT_PROB=y
--CONFIG_NET_ACT_MIRRED=m
--CONFIG_NET_ACT_IPT=m
--CONFIG_NET_ACT_NAT=m
--CONFIG_NET_ACT_PEDIT=m
--CONFIG_NET_ACT_SIMP=m
--CONFIG_NET_ACT_SKBEDIT=m
--# CONFIG_NET_CLS_IND is not set
--CONFIG_NET_SCH_FIFO=y
--CONFIG_DCB=m
--CONFIG_DCBNL=y
--
--#
--# Network testing
--#
--CONFIG_NET_PKTGEN=m
--CONFIG_NET_TCPPROBE=m
--CONFIG_HAMRADIO=y
--
--#
--# Packet Radio protocols
--#
--CONFIG_AX25=m
--CONFIG_AX25_DAMA_SLAVE=y
--CONFIG_NETROM=m
--CONFIG_ROSE=m
--
--#
--# AX.25 network device drivers
--#
--CONFIG_MKISS=m
--CONFIG_6PACK=m
--CONFIG_BPQETHER=m
--CONFIG_BAYCOM_SER_FDX=m
--CONFIG_BAYCOM_SER_HDX=m
--CONFIG_BAYCOM_PAR=m
--CONFIG_YAM=m
--CONFIG_CAN=m
--CONFIG_CAN_RAW=m
--CONFIG_CAN_BCM=m
--
--#
--# CAN Device Drivers
--#
--CONFIG_CAN_VCAN=m
--# CONFIG_CAN_DEBUG_DEVICES is not set
--CONFIG_IRDA=m
--
--#
--# IrDA protocols
--#
--CONFIG_IRLAN=m
--CONFIG_IRNET=m
--CONFIG_IRCOMM=m
--CONFIG_IRDA_ULTRA=y
--
--#
--# IrDA options
--#
--CONFIG_IRDA_CACHE_LAST_LSAP=y
--# CONFIG_IRDA_FAST_RR is not set
--# CONFIG_IRDA_DEBUG is not set
--
--#
--# Infrared-port device drivers
--#
--
--#
--# SIR device drivers
--#
--CONFIG_IRTTY_SIR=m
--
--#
--# Dongle support
--#
--CONFIG_DONGLE=y
--CONFIG_ESI_DONGLE=m
--CONFIG_ACTISYS_DONGLE=m
--CONFIG_TEKRAM_DONGLE=m
--CONFIG_TOIM3232_DONGLE=m
--CONFIG_LITELINK_DONGLE=m
--CONFIG_MA600_DONGLE=m
--CONFIG_GIRBIL_DONGLE=m
--CONFIG_MCP2120_DONGLE=m
--CONFIG_OLD_BELKIN_DONGLE=m
--CONFIG_ACT200L_DONGLE=m
--CONFIG_KINGSUN_DONGLE=m
--CONFIG_KSDAZZLE_DONGLE=m
--CONFIG_KS959_DONGLE=m
--
--#
--# FIR device drivers
--#
--CONFIG_USB_IRDA=m
--CONFIG_SIGMATEL_FIR=m
--CONFIG_NSC_FIR=m
--CONFIG_WINBOND_FIR=m
--CONFIG_SMC_IRCC_FIR=m
--CONFIG_ALI_FIR=m
--CONFIG_VLSI_FIR=m
--CONFIG_VIA_FIR=m
--CONFIG_MCS_FIR=m
--CONFIG_BT=m
--CONFIG_BT_L2CAP=m
--CONFIG_BT_SCO=m
--CONFIG_BT_RFCOMM=m
--CONFIG_BT_RFCOMM_TTY=y
--CONFIG_BT_BNEP=m
--CONFIG_BT_BNEP_MC_FILTER=y
--CONFIG_BT_BNEP_PROTO_FILTER=y
--CONFIG_BT_CMTP=m
--CONFIG_BT_HIDP=m
--
--#
--# Bluetooth device drivers
--#
--CONFIG_BT_HCIBTUSB=m
--CONFIG_BT_HCIBTSDIO=m
--CONFIG_BT_HCIUART=m
--CONFIG_BT_HCIUART_H4=y
--CONFIG_BT_HCIUART_BCSP=y
--CONFIG_BT_HCIUART_LL=y
--CONFIG_BT_HCIBCM203X=m
--CONFIG_BT_HCIBPA10X=m
--CONFIG_BT_HCIBFUSB=m
--CONFIG_BT_HCIDTL1=m
--CONFIG_BT_HCIBT3C=m
--CONFIG_BT_HCIBLUECARD=m
--CONFIG_BT_HCIBTUART=m
--CONFIG_BT_HCIVHCI=m
--CONFIG_AF_RXRPC=m
--# CONFIG_AF_RXRPC_DEBUG is not set
--CONFIG_RXKAD=m
--CONFIG_FIB_RULES=y
--
--#
--# Wireless
--#
--CONFIG_CFG80211=m
--CONFIG_NL80211=y
--CONFIG_WIRELESS_EXT=y
--CONFIG_WIRELESS_EXT_SYSFS=y
--CONFIG_MAC80211=m
--
--#
--# Rate control algorithm selection
--#
--CONFIG_MAC80211_RC_PID=y
--CONFIG_MAC80211_RC_DEFAULT_PID=y
--CONFIG_MAC80211_RC_DEFAULT="pid"
--CONFIG_MAC80211_MESH=y
--CONFIG_MAC80211_LEDS=y
--CONFIG_MAC80211_DEBUGFS=y
--# CONFIG_MAC80211_DEBUG_MENU is not set
--CONFIG_IEEE80211=m
--# CONFIG_IEEE80211_DEBUG is not set
--CONFIG_IEEE80211_CRYPT_WEP=m
--CONFIG_IEEE80211_CRYPT_CCMP=m
--CONFIG_IEEE80211_CRYPT_TKIP=m
--CONFIG_RFKILL=m
--CONFIG_RFKILL_INPUT=m
--CONFIG_RFKILL_LEDS=y
--CONFIG_NET_9P=m
--CONFIG_NET_9P_VIRTIO=m
--# CONFIG_NET_9P_DEBUG is not set
--CONFIG_NETVM=y
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH=""
--# CONFIG_STANDALONE is not set
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--CONFIG_FIRMWARE_IN_KERNEL=y
--CONFIG_EXTRA_FIRMWARE=""
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=m
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=m
--CONFIG_MTD_PARTITIONS=y
--CONFIG_MTD_REDBOOT_PARTS=m
--CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
--# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
--# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
--CONFIG_MTD_AR7_PARTS=m
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=m
--CONFIG_MTD_BLKDEVS=m
--CONFIG_MTD_BLOCK=m
--# CONFIG_MTD_BLOCK_RO is not set
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--CONFIG_RFD_FTL=m
--# CONFIG_SSFDC is not set
--CONFIG_MTD_OOPS=m
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=m
--CONFIG_MTD_JEDECPROBE=m
--CONFIG_MTD_GEN_PROBE=m
--CONFIG_MTD_CFI_ADV_OPTIONS=y
--CONFIG_MTD_CFI_NOSWAP=y
--# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
--# CONFIG_MTD_CFI_GEOMETRY is not set
--CONFIG_MTD_MAP_BANK_WIDTH_1=y
--CONFIG_MTD_MAP_BANK_WIDTH_2=y
--CONFIG_MTD_MAP_BANK_WIDTH_4=y
--# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
--# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
--CONFIG_MTD_CFI_I1=y
--CONFIG_MTD_CFI_I2=y
--# CONFIG_MTD_CFI_I4 is not set
--# CONFIG_MTD_CFI_I8 is not set
--# CONFIG_MTD_OTP is not set
--CONFIG_MTD_CFI_INTELEXT=m
--CONFIG_MTD_CFI_AMDSTD=m
--CONFIG_MTD_CFI_STAA=m
--CONFIG_MTD_CFI_UTIL=m
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--CONFIG_MTD_ABSENT=m
--
--#
--# Mapping drivers for chip access
--#
--CONFIG_MTD_COMPLEX_MAPPINGS=y
--CONFIG_MTD_PHYSMAP=m
--CONFIG_MTD_PHYSMAP_START=0x8000000
--CONFIG_MTD_PHYSMAP_LEN=0x4000000
--CONFIG_MTD_PHYSMAP_BANKWIDTH=2
--# CONFIG_MTD_SC520CDP is not set
--# CONFIG_MTD_NETSC520 is not set
--CONFIG_MTD_TS5500=m
--# CONFIG_MTD_SBC_GXX is not set
--CONFIG_MTD_AMD76XROM=m
--CONFIG_MTD_ICHXROM=m
--CONFIG_MTD_ESB2ROM=m
--CONFIG_MTD_CK804XROM=m
--CONFIG_MTD_SCB2_FLASH=m
--# CONFIG_MTD_NETtel is not set
--# CONFIG_MTD_DILNETPC is not set
--# CONFIG_MTD_L440GX is not set
--CONFIG_MTD_PCI=m
--CONFIG_MTD_INTEL_VR_NOR=m
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--CONFIG_MTD_PMC551=m
--CONFIG_MTD_PMC551_BUGFIX=y
--# CONFIG_MTD_PMC551_DEBUG is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--CONFIG_MTD_SLRAM=m
--CONFIG_MTD_PHRAM=m
--CONFIG_MTD_MTDRAM=m
--CONFIG_MTDRAM_TOTAL_SIZE=4096
--CONFIG_MTDRAM_ERASE_SIZE=128
--CONFIG_MTD_BLOCK2MTD=m
--
--#
--# Disk-On-Chip Device Drivers
--#
--CONFIG_MTD_DOC2000=m
--CONFIG_MTD_DOC2001=m
--CONFIG_MTD_DOC2001PLUS=m
--CONFIG_MTD_DOCPROBE=m
--CONFIG_MTD_DOCECC=m
--CONFIG_MTD_DOCPROBE_ADVANCED=y
--CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
--CONFIG_MTD_DOCPROBE_HIGH=y
--CONFIG_MTD_DOCPROBE_55AA=y
--CONFIG_MTD_NAND=m
--# CONFIG_MTD_NAND_VERIFY_WRITE is not set
--CONFIG_MTD_NAND_ECC_SMC=y
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=m
--CONFIG_MTD_NAND_DISKONCHIP=m
--# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
--CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
--CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
--CONFIG_MTD_NAND_CAFE=m
--CONFIG_MTD_NAND_NANDSIM=m
--CONFIG_MTD_NAND_PLATFORM=m
--CONFIG_MTD_ALAUDA=m
--CONFIG_MTD_ONENAND=m
--# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
--CONFIG_MTD_ONENAND_OTP=y
--CONFIG_MTD_ONENAND_2X_PROGRAM=y
--CONFIG_MTD_ONENAND_SIM=m
--
--#
--# UBI - Unsorted block images
--#
--CONFIG_MTD_UBI=m
--CONFIG_MTD_UBI_WL_THRESHOLD=4096
--CONFIG_MTD_UBI_BEB_RESERVE=1
--# CONFIG_MTD_UBI_GLUEBI is not set
--
--#
--# UBI debugging options
--#
--# CONFIG_MTD_UBI_DEBUG is not set
--CONFIG_PARPORT=m
--CONFIG_PARPORT_PC=m
--CONFIG_PARPORT_SERIAL=m
--CONFIG_PARPORT_PC_FIFO=y
--CONFIG_PARPORT_PC_SUPERIO=y
--CONFIG_PARPORT_PC_PCMCIA=m
--# CONFIG_PARPORT_GSC is not set
--CONFIG_PARPORT_AX88796=m
--CONFIG_PARPORT_1284=y
--CONFIG_PARPORT_NOT_PC=y
--CONFIG_PNP=y
--# CONFIG_PNP_DEBUG is not set
--
--#
--# Protocols
--#
--CONFIG_PNPACPI=y
--CONFIG_BLK_DEV=y
--CONFIG_BLK_DEV_FD=m
--CONFIG_PARIDE=m
--
--#
--# Parallel IDE high-level drivers
--#
--CONFIG_PARIDE_PD=m
--CONFIG_PARIDE_PCD=m
--CONFIG_PARIDE_PF=m
--CONFIG_PARIDE_PT=m
--CONFIG_PARIDE_PG=m
--
--#
--# Parallel IDE protocol modules
--#
--CONFIG_PARIDE_ATEN=m
--CONFIG_PARIDE_BPCK=m
--CONFIG_PARIDE_COMM=m
--CONFIG_PARIDE_DSTR=m
--CONFIG_PARIDE_FIT2=m
--CONFIG_PARIDE_FIT3=m
--CONFIG_PARIDE_EPAT=m
--CONFIG_PARIDE_EPATC8=y
--CONFIG_PARIDE_EPIA=m
--CONFIG_PARIDE_FRIQ=m
--CONFIG_PARIDE_FRPW=m
--CONFIG_PARIDE_KBIC=m
--CONFIG_PARIDE_KTTI=m
--CONFIG_PARIDE_ON20=m
--CONFIG_PARIDE_ON26=m
--CONFIG_BLK_CPQ_DA=m
--CONFIG_BLK_CPQ_CISS_DA=m
--CONFIG_CISS_SCSI_TAPE=y
--CONFIG_BLK_DEV_DAC960=m
--CONFIG_BLK_DEV_UMEM=m
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=m
--CONFIG_BLK_DEV_CRYPTOLOOP=m
--CONFIG_BLK_DEV_NBD=m
--CONFIG_BLK_DEV_SX8=m
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=m
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=128000
--CONFIG_BLK_DEV_XIP=y
--CONFIG_CDROM_PKTCDVD=m
--CONFIG_CDROM_PKTCDVD_BUFFERS=8
--CONFIG_CDROM_PKTCDVD_WCACHE=y
--CONFIG_ATA_OVER_ETH=m
--CONFIG_CIPHER_TWOFISH=m
--CONFIG_VIRTIO_BLK=m
--# CONFIG_BLK_DEV_HD is not set
--CONFIG_MISC_DEVICES=y
--CONFIG_IBM_ASM=m
--CONFIG_PHANTOM=m
--CONFIG_EEPROM_93CX6=m
--CONFIG_SGI_IOC4=m
--CONFIG_TIFM_CORE=m
--CONFIG_TIFM_7XX1=m
--CONFIG_ACER_WMI=m
--CONFIG_ASUS_LAPTOP=m
--CONFIG_FUJITSU_LAPTOP=m
--# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
--CONFIG_HP_WMI=m
--CONFIG_MSI_LAPTOP=m
--CONFIG_PANASONIC_LAPTOP=m
--CONFIG_COMPAL_LAPTOP=m
--CONFIG_SONY_LAPTOP=m
--CONFIG_SONYPI_COMPAT=y
--CONFIG_THINKPAD_ACPI=m
--# CONFIG_THINKPAD_ACPI_DEBUG is not set
--CONFIG_THINKPAD_ACPI_BAY=y
--CONFIG_THINKPAD_ACPI_VIDEO=y
--CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
--CONFIG_INTEL_MENLOW=m
--CONFIG_EEEPC_LAPTOP=m
--CONFIG_ENCLOSURE_SERVICES=m
--CONFIG_SGI_XP=m
--CONFIG_HP_ILO=m
--CONFIG_SGI_GRU=m
--# CONFIG_SGI_GRU_DEBUG is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=m
--CONFIG_BLK_DEV_IDE=m
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--CONFIG_IDE_TIMINGS=y
--CONFIG_IDE_ATAPI=y
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=m
--CONFIG_IDEDISK_MULTI_MODE=y
--CONFIG_BLK_DEV_IDECS=m
--CONFIG_BLK_DEV_DELKIN=m
--CONFIG_BLK_DEV_IDECD=m
--CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
--CONFIG_BLK_DEV_IDETAPE=m
--CONFIG_BLK_DEV_IDEFLOPPY=m
--CONFIG_BLK_DEV_IDESCSI=m
--CONFIG_BLK_DEV_IDEACPI=y
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=m
--CONFIG_BLK_DEV_PLATFORM=m
--CONFIG_BLK_DEV_CMD640=m
--CONFIG_BLK_DEV_CMD640_ENHANCED=y
--CONFIG_BLK_DEV_IDEPNP=m
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_BLK_DEV_OFFBOARD=y
--CONFIG_BLK_DEV_GENERIC=m
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_RZ1000=m
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--CONFIG_BLK_DEV_AEC62XX=m
--CONFIG_BLK_DEV_ALI15X3=m
--CONFIG_BLK_DEV_AMD74XX=m
--CONFIG_BLK_DEV_ATIIXP=m
--CONFIG_BLK_DEV_CMD64X=m
--CONFIG_BLK_DEV_TRIFLEX=m
--CONFIG_BLK_DEV_CS5520=m
--CONFIG_BLK_DEV_CS5530=m
--CONFIG_BLK_DEV_HPT366=m
--CONFIG_BLK_DEV_JMICRON=m
--CONFIG_BLK_DEV_SC1200=m
--CONFIG_BLK_DEV_PIIX=m
--CONFIG_BLK_DEV_IT8213=m
--CONFIG_BLK_DEV_IT821X=m
--CONFIG_BLK_DEV_NS87415=m
--CONFIG_BLK_DEV_PDC202XX_OLD=m
--CONFIG_BLK_DEV_PDC202XX_NEW=m
--CONFIG_BLK_DEV_SVWKS=m
--CONFIG_BLK_DEV_SIIMAGE=m
--CONFIG_BLK_DEV_SIS5513=m
--CONFIG_BLK_DEV_SLC90E66=m
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=m
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--
--#
--# SCSI device support
--#
--CONFIG_RAID_ATTRS=m
--CONFIG_SCSI=m
--CONFIG_SCSI_DMA=y
--CONFIG_SCSI_TGT=m
--CONFIG_SCSI_NETLINK=y
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=m
--CONFIG_SD_IOSTATS=y
--CONFIG_CHR_DEV_ST=m
--CONFIG_CHR_DEV_OSST=m
--CONFIG_BLK_DEV_SR=m
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=m
--CONFIG_CHR_DEV_SCH=m
--CONFIG_SCSI_ENCLOSURE=m
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--CONFIG_SCSI_CONSTANTS=y
--CONFIG_SCSI_LOGGING=y
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=m
--CONFIG_SCSI_FC_ATTRS=m
--CONFIG_SCSI_FC_TGT_ATTRS=y
--CONFIG_SCSI_ISCSI_ATTRS=m
--CONFIG_SCSI_SAS_ATTRS=m
--CONFIG_SCSI_SAS_LIBSAS=m
--CONFIG_SCSI_SAS_ATA=y
--CONFIG_SCSI_SAS_HOST_SMP=y
--CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
--CONFIG_SCSI_SRP_ATTRS=m
--CONFIG_SCSI_SRP_TGT_ATTRS=y
--CONFIG_SCSI_LOWLEVEL=y
--CONFIG_ISCSI_TCP=m
--CONFIG_SCSI_CXGB3_ISCSI=m
--CONFIG_BLK_DEV_3W_XXXX_RAID=m
--CONFIG_SCSI_3W_9XXX=m
--CONFIG_SCSI_ACARD=m
--CONFIG_SCSI_AACRAID=m
--CONFIG_SCSI_AIC7XXX=m
--CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
--CONFIG_AIC7XXX_RESET_DELAY_MS=5000
--# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
--CONFIG_AIC7XXX_DEBUG_MASK=0
--CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC7XXX_OLD=m
--CONFIG_SCSI_AIC79XX=m
--CONFIG_AIC79XX_CMDS_PER_DEVICE=32
--CONFIG_AIC79XX_RESET_DELAY_MS=15000
--# CONFIG_AIC79XX_DEBUG_ENABLE is not set
--CONFIG_AIC79XX_DEBUG_MASK=0
--CONFIG_AIC79XX_REG_PRETTY_PRINT=y
--CONFIG_SCSI_AIC94XX=m
--CONFIG_AIC94XX_DEBUG=y
--CONFIG_SCSI_DPT_I2O=m
--CONFIG_SCSI_ADVANSYS=m
--CONFIG_SCSI_ARCMSR=m
--CONFIG_SCSI_ARCMSR_AER=y
--CONFIG_MEGARAID_NEWGEN=y
--CONFIG_MEGARAID_MM=m
--CONFIG_MEGARAID_MAILBOX=m
--CONFIG_MEGARAID_LEGACY=m
--CONFIG_MEGARAID_SAS=m
--CONFIG_SCSI_HPTIOP=m
--CONFIG_SCSI_BUSLOGIC=m
--CONFIG_LIBFC=m
--CONFIG_FCOE=m
--CONFIG_SCSI_DMX3191D=m
--CONFIG_SCSI_EATA=m
--CONFIG_SCSI_EATA_TAGGED_QUEUE=y
--CONFIG_SCSI_EATA_LINKED_COMMANDS=y
--CONFIG_SCSI_EATA_MAX_TAGS=16
--CONFIG_SCSI_FUTURE_DOMAIN=m
--CONFIG_SCSI_GDTH=m
--CONFIG_SCSI_IPS=m
--CONFIG_SCSI_INITIO=m
--# CONFIG_SCSI_INIA100 is not set
--CONFIG_SCSI_PPA=m
--CONFIG_SCSI_IMM=m
--# CONFIG_SCSI_IZIP_EPP16 is not set
--# CONFIG_SCSI_IZIP_SLOW_CTR is not set
--CONFIG_SCSI_MVSAS=m
--CONFIG_SCSI_STEX=m
--CONFIG_SCSI_SYM53C8XX_2=m
--CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
--CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
--CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
--CONFIG_SCSI_SYM53C8XX_MMIO=y
--# CONFIG_SCSI_IPR is not set
--CONFIG_SCSI_QLOGIC_1280=m
--CONFIG_SCSI_QLA_FC=m
--CONFIG_SCSI_QLA_ISCSI=m
--CONFIG_SCSI_LPFC=m
--CONFIG_SCSI_DC395x=m
--CONFIG_SCSI_DC390T=m
--CONFIG_SCSI_DEBUG=m
--CONFIG_SCSI_SRP=m
--CONFIG_SCSI_LOWLEVEL_PCMCIA=y
--CONFIG_PCMCIA_FDOMAIN=m
--CONFIG_PCMCIA_QLOGIC=m
--CONFIG_PCMCIA_SYM53C500=m
--CONFIG_SCSI_DH=m
--CONFIG_SCSI_DH_RDAC=m
--CONFIG_SCSI_DH_HP_SW=m
--CONFIG_SCSI_DH_EMC=m
--CONFIG_SCSI_DH_ALUA=m
--CONFIG_ATA=m
--# CONFIG_ATA_NONSTANDARD is not set
--CONFIG_ATA_ACPI=y
--CONFIG_SATA_PMP=y
--CONFIG_SATA_AHCI=m
--CONFIG_SATA_SIL24=m
--CONFIG_ATA_SFF=y
--CONFIG_SATA_SVW=m
--CONFIG_ATA_PIIX=m
--CONFIG_SATA_MV=m
--CONFIG_SATA_NV=m
--CONFIG_PDC_ADMA=m
--CONFIG_SATA_QSTOR=m
--CONFIG_SATA_PROMISE=m
--CONFIG_SATA_SX4=m
--CONFIG_SATA_SIL=m
--CONFIG_SATA_SIS=m
--CONFIG_SATA_ULI=m
--CONFIG_SATA_VIA=m
--CONFIG_SATA_VITESSE=m
--CONFIG_SATA_INIC162X=m
--CONFIG_PATA_ACPI=m
--CONFIG_PATA_ALI=m
--CONFIG_PATA_AMD=m
--CONFIG_PATA_ARTOP=m
--CONFIG_PATA_ATIIXP=m
--CONFIG_PATA_CMD640_PCI=m
--CONFIG_PATA_CMD64X=m
--CONFIG_PATA_CS5520=m
--CONFIG_PATA_CS5530=m
--CONFIG_PATA_CYPRESS=m
--CONFIG_PATA_EFAR=m
--CONFIG_ATA_GENERIC=m
--CONFIG_PATA_HPT366=m
--CONFIG_PATA_HPT37X=m
--CONFIG_PATA_HPT3X2N=m
--CONFIG_PATA_HPT3X3=m
--# CONFIG_PATA_HPT3X3_DMA is not set
--CONFIG_PATA_IT821X=m
--CONFIG_PATA_IT8213=m
--CONFIG_PATA_JMICRON=m
--CONFIG_PATA_TRIFLEX=m
--CONFIG_PATA_MARVELL=m
--CONFIG_PATA_MPIIX=m
--CONFIG_PATA_OLDPIIX=m
--CONFIG_PATA_NETCELL=m
--CONFIG_PATA_NINJA32=m
--CONFIG_PATA_NS87410=m
--CONFIG_PATA_NS87415=m
--CONFIG_PATA_OPTI=m
--CONFIG_PATA_OPTIDMA=m
--CONFIG_PATA_PCMCIA=m
--CONFIG_PATA_PDC_OLD=m
--CONFIG_PATA_RADISYS=m
--CONFIG_PATA_RZ1000=m
--CONFIG_PATA_SC1200=m
--CONFIG_PATA_SERVERWORKS=m
--CONFIG_PATA_PDC2027X=m
--CONFIG_PATA_SIL680=m
--CONFIG_PATA_SIS=m
--CONFIG_PATA_VIA=m
--CONFIG_PATA_WINBOND=m
--CONFIG_PATA_SCH=m
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=m
--CONFIG_MD_RAID0=m
--CONFIG_MD_RAID1=m
--CONFIG_MD_RAID10=m
--CONFIG_MD_RAID456=m
--CONFIG_MD_RAID5_RESHAPE=y
--CONFIG_MD_MULTIPATH=m
--CONFIG_MD_FAULTY=m
--CONFIG_BLK_DEV_DM=m
--# CONFIG_DM_DEBUG is not set
--CONFIG_DM_CRYPT=m
--CONFIG_DM_SNAPSHOT=m
--CONFIG_DM_MIRROR=m
--CONFIG_DM_ZERO=m
--CONFIG_DM_MULTIPATH=m
--CONFIG_DM_DELAY=m
--CONFIG_DM_RAID45=m
--CONFIG_DM_UEVENT=y
--CONFIG_FUSION=y
--CONFIG_FUSION_SPI=m
--CONFIG_FUSION_FC=m
--CONFIG_FUSION_SAS=m
--CONFIG_FUSION_MAX_SGE=128
--CONFIG_FUSION_MAX_FC_SGE=256
--CONFIG_FUSION_CTL=m
--CONFIG_FUSION_LAN=m
--# CONFIG_FUSION_LOGGING is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--
--#
--# Enable only one of the two stacks, unless you know what you are doing
--#
--# CONFIG_FIREWIRE is not set
--CONFIG_IEEE1394=m
--CONFIG_IEEE1394_OHCI1394=m
--CONFIG_IEEE1394_PCILYNX=m
--CONFIG_IEEE1394_SBP2=m
--# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
--CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
--CONFIG_IEEE1394_ETH1394=m
--CONFIG_IEEE1394_RAWIO=m
--CONFIG_IEEE1394_VIDEO1394=m
--CONFIG_IEEE1394_DV1394=m
--# CONFIG_IEEE1394_VERBOSEDEBUG is not set
--CONFIG_I2O=m
--CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
--CONFIG_I2O_EXT_ADAPTEC=y
--CONFIG_I2O_EXT_ADAPTEC_DMA64=y
--CONFIG_I2O_CONFIG=m
--CONFIG_I2O_CONFIG_OLD_IOCTL=y
--CONFIG_I2O_BUS=m
--CONFIG_I2O_BLOCK=m
--CONFIG_I2O_SCSI=m
--CONFIG_I2O_PROC=m
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--CONFIG_IFB=m
--CONFIG_DUMMY=m
--CONFIG_BONDING=m
--CONFIG_MACVLAN=m
--CONFIG_EQUALIZER=m
--CONFIG_TUN=m
--CONFIG_VETH=m
--# CONFIG_NET_SB1000 is not set
--CONFIG_ARCNET=m
--CONFIG_ARCNET_1201=m
--CONFIG_ARCNET_1051=m
--CONFIG_ARCNET_RAW=m
--CONFIG_ARCNET_CAP=m
--CONFIG_ARCNET_COM90xx=m
--CONFIG_ARCNET_COM90xxIO=m
--CONFIG_ARCNET_RIM_I=m
--# CONFIG_ARCNET_COM20020 is not set
--CONFIG_PHYLIB=m
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=m
--CONFIG_DAVICOM_PHY=m
--CONFIG_QSEMI_PHY=m
--CONFIG_LXT_PHY=m
--CONFIG_CICADA_PHY=m
--CONFIG_VITESSE_PHY=m
--CONFIG_SMSC_PHY=m
--CONFIG_BROADCOM_PHY=m
--CONFIG_ICPLUS_PHY=m
--CONFIG_REALTEK_PHY=m
--CONFIG_MDIO_BITBANG=m
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=m
--CONFIG_HAPPYMEAL=m
--CONFIG_SUNGEM=m
--CONFIG_CASSINI=m
--CONFIG_NET_VENDOR_3COM=y
--CONFIG_VORTEX=m
--CONFIG_TYPHOON=m
--CONFIG_ENC28J60=m
--# CONFIG_ENC28J60_WRITEVERIFY is not set
--CONFIG_NET_TULIP=y
--CONFIG_DE2104X=m
--CONFIG_TULIP=m
--# CONFIG_TULIP_MWI is not set
--# CONFIG_TULIP_MMIO is not set
--CONFIG_TULIP_NAPI=y
--CONFIG_TULIP_NAPI_HW_MITIGATION=y
--CONFIG_DE4X5=m
--CONFIG_WINBOND_840=m
--CONFIG_DM9102=m
--CONFIG_ULI526X=m
--CONFIG_PCMCIA_XIRCOM=m
--CONFIG_HP100=m
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--CONFIG_PCNET32=m
--CONFIG_AMD8111_ETH=m
--CONFIG_ADAPTEC_STARFIRE=m
--CONFIG_B44=m
--CONFIG_B44_PCI_AUTOSELECT=y
--CONFIG_B44_PCICORE_AUTOSELECT=y
--CONFIG_B44_PCI=y
--CONFIG_FORCEDETH=m
--CONFIG_FORCEDETH_NAPI=y
--CONFIG_EEPRO100=m
--CONFIG_E100=m
--CONFIG_FEALNX=m
--CONFIG_NATSEMI=m
--CONFIG_NE2K_PCI=m
--CONFIG_8139CP=m
--CONFIG_8139TOO=m
--# CONFIG_8139TOO_PIO is not set
--# CONFIG_8139TOO_TUNE_TWISTER is not set
--CONFIG_8139TOO_8129=y
--# CONFIG_8139_OLD_RX_RESET is not set
--CONFIG_R6040=m
--CONFIG_SIS900=m
--CONFIG_EPIC100=m
--CONFIG_SUNDANCE=m
--# CONFIG_SUNDANCE_MMIO is not set
--CONFIG_TLAN=m
--CONFIG_VIA_RHINE=m
--# CONFIG_VIA_RHINE_MMIO is not set
--CONFIG_SC92031=m
--# CONFIG_NET_POCKET is not set
--CONFIG_ATL2=m
--CONFIG_NETDEV_1000=y
--CONFIG_ACENIC=m
--# CONFIG_ACENIC_OMIT_TIGON_I is not set
--CONFIG_DL2K=m
--CONFIG_E1000=m
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--CONFIG_E1000E=m
--CONFIG_IP1000=m
--CONFIG_IGB=m
--CONFIG_IGB_LRO=y
--CONFIG_NS83820=m
--CONFIG_HAMACHI=m
--CONFIG_YELLOWFIN=m
--CONFIG_R8169=m
--CONFIG_R8169_VLAN=y
--CONFIG_SIS190=m
--CONFIG_SKGE=m
--# CONFIG_SKGE_DEBUG is not set
--CONFIG_SKY2=m
--# CONFIG_SKY2_DEBUG is not set
--CONFIG_VIA_VELOCITY=m
--CONFIG_TIGON3=m
--CONFIG_BNX2=m
--CONFIG_QLA3XXX=m
--CONFIG_ATL1=m
--CONFIG_ATL1E=m
--CONFIG_NETDEV_10000=y
--CONFIG_CHELSIO_T1=m
--CONFIG_CHELSIO_T1_1G=y
--CONFIG_CHELSIO_T3=m
--CONFIG_IXGBE=m
--CONFIG_IXGBE_LRO=y
--CONFIG_IXGBE_DCB=y
--CONFIG_IXGB=m
--CONFIG_S2IO=m
--CONFIG_MYRI10GE=m
--CONFIG_NETXEN_NIC=m
--CONFIG_NIU=m
--CONFIG_MLX4_CORE=m
--CONFIG_MLX4_DEBUG=y
--CONFIG_TEHUTI=m
--CONFIG_BNX2X=m
--CONFIG_SFC=m
--# CONFIG_SFC_RESOURCE is not set
--CONFIG_TR=y
--CONFIG_IBMOL=m
--CONFIG_3C359=m
--CONFIG_TMS380TR=m
--CONFIG_TMSPCI=m
--CONFIG_ABYSS=m
--
--#
--# Wireless LAN
--#
--CONFIG_WLAN_PRE80211=y
--CONFIG_STRIP=m
--CONFIG_PCMCIA_WAVELAN=m
--CONFIG_PCMCIA_NETWAVE=m
--CONFIG_WLAN_80211=y
--CONFIG_PCMCIA_RAYCS=m
--CONFIG_IPW2100=m
--CONFIG_IPW2100_MONITOR=y
--# CONFIG_IPW2100_DEBUG is not set
--CONFIG_IPW2200=m
--CONFIG_IPW2200_MONITOR=y
--CONFIG_IPW2200_RADIOTAP=y
--CONFIG_IPW2200_PROMISCUOUS=y
--CONFIG_IPW2200_QOS=y
--# CONFIG_IPW2200_DEBUG is not set
--CONFIG_LIBERTAS=m
--CONFIG_LIBERTAS_USB=m
--CONFIG_LIBERTAS_CS=m
--CONFIG_LIBERTAS_SDIO=m
--# CONFIG_LIBERTAS_DEBUG is not set
--CONFIG_AIRO=m
--CONFIG_HERMES=m
--CONFIG_PLX_HERMES=m
--CONFIG_TMD_HERMES=m
--CONFIG_NORTEL_HERMES=m
--CONFIG_PCI_HERMES=m
--CONFIG_PCMCIA_HERMES=m
--CONFIG_PCMCIA_SPECTRUM=m
--CONFIG_ATMEL=m
--CONFIG_PCI_ATMEL=m
--CONFIG_PCMCIA_ATMEL=m
--CONFIG_AIRO_CS=m
--CONFIG_PCMCIA_WL3501=m
--CONFIG_PRISM54=m
--CONFIG_USB_ZD1201=m
--CONFIG_USB_NET_RNDIS_WLAN=m
--CONFIG_RTL8180=m
--CONFIG_RTL8187=m
--CONFIG_ADM8211=m
--CONFIG_MAC80211_HWSIM=m
--CONFIG_P54_COMMON=m
--CONFIG_P54_USB=m
--CONFIG_P54_PCI=m
--CONFIG_ATH5K=m
--# CONFIG_ATH5K_DEBUG is not set
--CONFIG_ATH9K=m
--CONFIG_IWLWIFI=m
--CONFIG_IWLCORE=m
--CONFIG_IWLWIFI_LEDS=y
--CONFIG_IWLWIFI_RFKILL=y
--# CONFIG_IWLWIFI_DEBUG is not set
--CONFIG_IWLAGN=m
--CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
--CONFIG_IWLAGN_LEDS=y
--CONFIG_IWL4965=y
--CONFIG_IWL5000=y
--CONFIG_IWL3945=m
--CONFIG_IWL3945_RFKILL=y
--CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
--CONFIG_IWL3945_LEDS=y
--# CONFIG_IWL3945_DEBUG is not set
--CONFIG_HOSTAP=m
--CONFIG_HOSTAP_FIRMWARE=y
--CONFIG_HOSTAP_FIRMWARE_NVRAM=y
--CONFIG_HOSTAP_PLX=m
--CONFIG_HOSTAP_PCI=m
--CONFIG_HOSTAP_CS=m
--CONFIG_B43=m
--CONFIG_B43_PCI_AUTOSELECT=y
--CONFIG_B43_PCICORE_AUTOSELECT=y
--CONFIG_B43_PCMCIA=y
--CONFIG_B43_PIO=y
--CONFIG_B43_LEDS=y
--CONFIG_B43_RFKILL=y
--# CONFIG_B43_DEBUG is not set
--CONFIG_B43LEGACY=m
--CONFIG_B43LEGACY_PCI_AUTOSELECT=y
--CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
--CONFIG_B43LEGACY_LEDS=y
--CONFIG_B43LEGACY_RFKILL=y
--# CONFIG_B43LEGACY_DEBUG is not set
--CONFIG_B43LEGACY_DMA=y
--CONFIG_B43LEGACY_PIO=y
--CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
--# CONFIG_B43LEGACY_DMA_MODE is not set
--# CONFIG_B43LEGACY_PIO_MODE is not set
--CONFIG_ZD1211RW=m
--# CONFIG_ZD1211RW_DEBUG is not set
--CONFIG_RT2X00=m
--CONFIG_RT2X00_LIB=m
--CONFIG_RT2X00_LIB_PCI=m
--CONFIG_RT2X00_LIB_USB=m
--CONFIG_RT2X00_LIB_FIRMWARE=y
--CONFIG_RT2X00_LIB_RFKILL=y
--CONFIG_RT2X00_LIB_LEDS=y
--CONFIG_RT2400PCI=m
--CONFIG_RT2400PCI_RFKILL=y
--CONFIG_RT2400PCI_LEDS=y
--CONFIG_RT2500PCI=m
--CONFIG_RT2500PCI_RFKILL=y
--CONFIG_RT2500PCI_LEDS=y
--CONFIG_RT61PCI=m
--CONFIG_RT61PCI_RFKILL=y
--CONFIG_RT61PCI_LEDS=y
--CONFIG_RT2500USB=m
--CONFIG_RT2500USB_LEDS=y
--CONFIG_RT73USB=m
--CONFIG_RT73USB_LEDS=y
--# CONFIG_RT2X00_LIB_DEBUGFS is not set
--# CONFIG_RT2X00_DEBUG is not set
--
--#
--# USB Network Adapters
--#
--CONFIG_USB_CATC=m
--CONFIG_USB_KAWETH=m
--CONFIG_USB_PEGASUS=m
--CONFIG_USB_RTL8150=m
--CONFIG_USB_USBNET=m
--CONFIG_USB_NET_AX8817X=m
--CONFIG_USB_NET_CDCETHER=m
--CONFIG_USB_NET_DM9601=m
--CONFIG_USB_NET_GL620A=m
--CONFIG_USB_NET_NET1080=m
--CONFIG_USB_NET_PLUSB=m
--CONFIG_USB_NET_MCS7830=m
--CONFIG_USB_NET_RNDIS_HOST=m
--CONFIG_USB_NET_CDC_SUBSET=m
--CONFIG_USB_ALI_M5632=y
--CONFIG_USB_AN2720=y
--CONFIG_USB_BELKIN=y
--CONFIG_USB_ARMLINUX=y
--CONFIG_USB_EPSON2888=y
--CONFIG_USB_KC2190=y
--CONFIG_USB_NET_ZAURUS=m
--CONFIG_USB_HSO=m
--CONFIG_NET_PCMCIA=y
--CONFIG_PCMCIA_3C589=m
--CONFIG_PCMCIA_3C574=m
--CONFIG_PCMCIA_FMVJ18X=m
--CONFIG_PCMCIA_PCNET=m
--CONFIG_PCMCIA_NMCLAN=m
--CONFIG_PCMCIA_SMC91C92=m
--CONFIG_PCMCIA_XIRC2PS=m
--CONFIG_PCMCIA_AXNET=m
--CONFIG_WAN=y
--CONFIG_LANMEDIA=m
--CONFIG_HDLC=m
--CONFIG_HDLC_RAW=m
--CONFIG_HDLC_RAW_ETH=m
--CONFIG_HDLC_CISCO=m
--CONFIG_HDLC_FR=m
--CONFIG_HDLC_PPP=m
--CONFIG_HDLC_X25=m
--CONFIG_PCI200SYN=m
--CONFIG_WANXL=m
--# CONFIG_PC300 is not set
--CONFIG_PC300TOO=m
--CONFIG_FARSYNC=m
--# CONFIG_DSCC4 is not set
--CONFIG_DLCI=m
--CONFIG_DLCI_MAX=8
--# CONFIG_WAN_ROUTER_DRIVERS is not set
--CONFIG_LAPBETHER=m
--CONFIG_X25_ASY=m
--# CONFIG_SBNI is not set
--CONFIG_ATM_DRIVERS=y
--CONFIG_ATM_DUMMY=m
--CONFIG_ATM_TCP=m
--CONFIG_ATM_LANAI=m
--CONFIG_ATM_ENI=m
--# CONFIG_ATM_ENI_DEBUG is not set
--CONFIG_ATM_ENI_TUNE_BURST=y
--# CONFIG_ATM_ENI_BURST_TX_16W is not set
--CONFIG_ATM_ENI_BURST_TX_8W=y
--CONFIG_ATM_ENI_BURST_TX_4W=y
--CONFIG_ATM_ENI_BURST_TX_2W=y
--# CONFIG_ATM_ENI_BURST_RX_16W is not set
--# CONFIG_ATM_ENI_BURST_RX_8W is not set
--CONFIG_ATM_ENI_BURST_RX_4W=y
--CONFIG_ATM_ENI_BURST_RX_2W=y
--CONFIG_ATM_FIRESTREAM=m
--CONFIG_ATM_ZATM=m
--# CONFIG_ATM_ZATM_DEBUG is not set
--CONFIG_ATM_IDT77252=m
--# CONFIG_ATM_IDT77252_DEBUG is not set
--# CONFIG_ATM_IDT77252_RCV_ALL is not set
--CONFIG_ATM_IDT77252_USE_SUNI=y
--CONFIG_ATM_AMBASSADOR=m
--# CONFIG_ATM_AMBASSADOR_DEBUG is not set
--CONFIG_ATM_HORIZON=m
--# CONFIG_ATM_HORIZON_DEBUG is not set
--CONFIG_ATM_IA=m
--# CONFIG_ATM_IA_DEBUG is not set
--CONFIG_ATM_FORE200E=m
--CONFIG_ATM_FORE200E_USE_TASKLET=y
--CONFIG_ATM_FORE200E_TX_RETRY=16
--CONFIG_ATM_FORE200E_DEBUG=0
--CONFIG_ATM_HE=m
--CONFIG_ATM_HE_USE_SUNI=y
--CONFIG_FDDI=y
--# CONFIG_DEFXX is not set
--CONFIG_SKFP=m
--CONFIG_HIPPI=y
--CONFIG_ROADRUNNER=m
--CONFIG_ROADRUNNER_LARGE_RINGS=y
--CONFIG_PLIP=m
--CONFIG_PPP=m
--CONFIG_PPP_MULTILINK=y
--CONFIG_PPP_FILTER=y
--CONFIG_PPP_ASYNC=m
--CONFIG_PPP_SYNC_TTY=m
--CONFIG_PPP_DEFLATE=m
--CONFIG_PPP_BSDCOMP=m
--CONFIG_PPP_MPPE=m
--CONFIG_PPPOE=m
--CONFIG_PPPOATM=m
--CONFIG_PPPOL2TP=m
--CONFIG_SLIP=m
--CONFIG_SLIP_COMPRESSED=y
--CONFIG_SLHC=m
--CONFIG_SLIP_SMART=y
--CONFIG_SLIP_MODE_SLIP6=y
--CONFIG_NET_FC=y
--CONFIG_NETCONSOLE=m
--CONFIG_NETCONSOLE_DYNAMIC=y
--CONFIG_NETPOLL=y
--CONFIG_NETPOLL_TRAP=y
--CONFIG_NET_POLL_CONTROLLER=y
--CONFIG_VIRTIO_NET=m
--CONFIG_ISDN=y
--CONFIG_MISDN=m
--CONFIG_MISDN_DSP=m
--CONFIG_MISDN_L1OIP=m
--
--#
--# mISDN hardware drivers
--#
--CONFIG_MISDN_HFCPCI=m
--CONFIG_MISDN_HFCMULTI=m
--CONFIG_ISDN_I4L=m
--CONFIG_ISDN_PPP=y
--CONFIG_ISDN_PPP_VJ=y
--CONFIG_ISDN_MPP=y
--CONFIG_IPPP_FILTER=y
--CONFIG_ISDN_PPP_BSDCOMP=m
--CONFIG_ISDN_AUDIO=y
--CONFIG_ISDN_TTY_FAX=y
--CONFIG_ISDN_X25=y
--
--#
--# ISDN feature submodules
--#
--CONFIG_ISDN_DIVERSION=m
--
--#
--# ISDN4Linux hardware drivers
--#
--
--#
--# Passive cards
--#
--CONFIG_ISDN_DRV_HISAX=m
--
--#
--# D-channel protocol features
--#
--CONFIG_HISAX_EURO=y
--CONFIG_DE_AOC=y
--# CONFIG_HISAX_NO_SENDCOMPLETE is not set
--# CONFIG_HISAX_NO_LLC is not set
--# CONFIG_HISAX_NO_KEYPAD is not set
--CONFIG_HISAX_1TR6=y
--CONFIG_HISAX_NI1=y
--CONFIG_HISAX_MAX_CARDS=8
--
--#
--# HiSax supported cards
--#
--CONFIG_HISAX_16_3=y
--CONFIG_HISAX_TELESPCI=y
--CONFIG_HISAX_S0BOX=y
--CONFIG_HISAX_FRITZPCI=y
--CONFIG_HISAX_AVM_A1_PCMCIA=y
--CONFIG_HISAX_ELSA=y
--CONFIG_HISAX_DIEHLDIVA=y
--CONFIG_HISAX_SEDLBAUER=y
--CONFIG_HISAX_NETJET=y
--CONFIG_HISAX_NETJET_U=y
--CONFIG_HISAX_NICCY=y
--CONFIG_HISAX_BKM_A4T=y
--CONFIG_HISAX_SCT_QUADRO=y
--CONFIG_HISAX_GAZEL=y
--CONFIG_HISAX_HFC_PCI=y
--CONFIG_HISAX_W6692=y
--CONFIG_HISAX_HFC_SX=y
--CONFIG_HISAX_ENTERNOW_PCI=y
--CONFIG_HISAX_DEBUG=y
--
--#
--# HiSax PCMCIA card service modules
--#
--CONFIG_HISAX_SEDLBAUER_CS=m
--CONFIG_HISAX_ELSA_CS=m
--CONFIG_HISAX_AVM_A1_CS=m
--CONFIG_HISAX_TELES_CS=m
--
--#
--# HiSax sub driver modules
--#
--CONFIG_HISAX_ST5481=m
--CONFIG_HISAX_HFCUSB=m
--CONFIG_HISAX_HFC4S8S=m
--CONFIG_HISAX_FRITZ_PCIPNP=m
--CONFIG_HISAX_HDLC=y
--
--#
--# Active cards
--#
--CONFIG_HYSDN=m
--CONFIG_HYSDN_CAPI=y
--CONFIG_ISDN_DRV_GIGASET=m
--CONFIG_GIGASET_BASE=m
--CONFIG_GIGASET_M105=m
--CONFIG_GIGASET_M101=m
--# CONFIG_GIGASET_DEBUG is not set
--CONFIG_GIGASET_UNDOCREQ=y
--CONFIG_ISDN_CAPI=m
--CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
--CONFIG_CAPI_TRACE=y
--CONFIG_ISDN_CAPI_MIDDLEWARE=y
--CONFIG_ISDN_CAPI_CAPI20=m
--CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
--CONFIG_ISDN_CAPI_CAPIFS=m
--CONFIG_ISDN_CAPI_CAPIDRV=m
--
--#
--# CAPI hardware drivers
--#
--CONFIG_CAPI_AVM=y
--CONFIG_ISDN_DRV_AVMB1_B1PCI=m
--CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
--CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
--CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
--CONFIG_ISDN_DRV_AVMB1_T1PCI=m
--CONFIG_ISDN_DRV_AVMB1_C4=m
--# CONFIG_CAPI_EICON is not set
--CONFIG_PHONE=m
--CONFIG_PHONE_IXJ=m
--CONFIG_PHONE_IXJ_PCMCIA=m
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--CONFIG_INPUT_FF_MEMLESS=m
--CONFIG_INPUT_POLLDEV=m
--
--#
--# Userland interfaces
--#
--CONFIG_INPUT_MOUSEDEV=y
--CONFIG_INPUT_MOUSEDEV_PSAUX=y
--CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
--CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
--CONFIG_INPUT_JOYDEV=m
--CONFIG_INPUT_EVDEV=y
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
--CONFIG_KEYBOARD_SUNKBD=m
--# CONFIG_KEYBOARD_LKKBD is not set
--CONFIG_KEYBOARD_XTKBD=m
--CONFIG_KEYBOARD_NEWTON=m
--# CONFIG_KEYBOARD_STOWAWAY is not set
--CONFIG_KEYBOARD_GPIO=m
--CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
--CONFIG_MOUSE_PS2_ALPS=y
--CONFIG_MOUSE_PS2_LOGIPS2PP=y
--CONFIG_MOUSE_PS2_SYNAPTICS=y
--CONFIG_MOUSE_PS2_LIFEBOOK=y
--CONFIG_MOUSE_PS2_TRACKPOINT=y
--# CONFIG_MOUSE_PS2_TOUCHKIT is not set
--CONFIG_MOUSE_SERIAL=m
--CONFIG_MOUSE_APPLETOUCH=m
--CONFIG_MOUSE_BCM5974=m
--# CONFIG_MOUSE_VSXXXAA is not set
--CONFIG_MOUSE_GPIO=m
--CONFIG_INPUT_JOYSTICK=y
--CONFIG_JOYSTICK_ANALOG=m
--CONFIG_JOYSTICK_A3D=m
--CONFIG_JOYSTICK_ADI=m
--CONFIG_JOYSTICK_COBRA=m
--CONFIG_JOYSTICK_GF2K=m
--CONFIG_JOYSTICK_GRIP=m
--CONFIG_JOYSTICK_GRIP_MP=m
--CONFIG_JOYSTICK_GUILLEMOT=m
--CONFIG_JOYSTICK_INTERACT=m
--CONFIG_JOYSTICK_SIDEWINDER=m
--CONFIG_JOYSTICK_TMDC=m
--CONFIG_JOYSTICK_IFORCE=m
--CONFIG_JOYSTICK_IFORCE_USB=y
--CONFIG_JOYSTICK_IFORCE_232=y
--CONFIG_JOYSTICK_WARRIOR=m
--CONFIG_JOYSTICK_MAGELLAN=m
--CONFIG_JOYSTICK_SPACEORB=m
--CONFIG_JOYSTICK_SPACEBALL=m
--CONFIG_JOYSTICK_STINGER=m
--CONFIG_JOYSTICK_TWIDJOY=m
--CONFIG_JOYSTICK_ZHENHUA=m
--CONFIG_JOYSTICK_DB9=m
--CONFIG_JOYSTICK_GAMECON=m
--CONFIG_JOYSTICK_TURBOGRAFX=m
--CONFIG_JOYSTICK_JOYDUMP=m
--CONFIG_JOYSTICK_XPAD=m
--CONFIG_JOYSTICK_XPAD_FF=y
--CONFIG_JOYSTICK_XPAD_LEDS=y
--CONFIG_INPUT_TABLET=y
--CONFIG_TABLET_USB_ACECAD=m
--CONFIG_TABLET_USB_AIPTEK=m
--CONFIG_TABLET_USB_GTCO=m
--CONFIG_TABLET_USB_KBTAB=m
--CONFIG_TABLET_USB_WACOM=m
--CONFIG_INPUT_TOUCHSCREEN=y
--CONFIG_TOUCHSCREEN_ADS7846=m
--CONFIG_TOUCHSCREEN_FUJITSU=m
--CONFIG_TOUCHSCREEN_GUNZE=m
--CONFIG_TOUCHSCREEN_ELO=m
--CONFIG_TOUCHSCREEN_ELOUSB=m
--CONFIG_TOUCHSCREEN_MTOUCH=m
--CONFIG_TOUCHSCREEN_INEXIO=m
--CONFIG_TOUCHSCREEN_MK712=m
--CONFIG_TOUCHSCREEN_PENMOUNT=m
--CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
--CONFIG_TOUCHSCREEN_TOUCHWIN=m
--CONFIG_TOUCHSCREEN_UCB1400=m
--CONFIG_TOUCHSCREEN_WM97XX=m
--CONFIG_TOUCHSCREEN_WM9705=y
--CONFIG_TOUCHSCREEN_WM9712=y
--CONFIG_TOUCHSCREEN_WM9713=y
--CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
--CONFIG_TOUCHSCREEN_USB_EGALAX=y
--CONFIG_TOUCHSCREEN_USB_PANJIT=y
--CONFIG_TOUCHSCREEN_USB_3M=y
--CONFIG_TOUCHSCREEN_USB_ITM=y
--CONFIG_TOUCHSCREEN_USB_ETURBO=y
--CONFIG_TOUCHSCREEN_USB_GUNZE=y
--CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
--CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
--CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
--CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
--CONFIG_TOUCHSCREEN_USB_GOTOP=y
--CONFIG_TOUCHSCREEN_TOUCHIT213=m
--CONFIG_INPUT_MISC=y
--CONFIG_INPUT_PCSPKR=m
--CONFIG_INPUT_APANEL=m
--CONFIG_INPUT_ATLAS_BTNS=m
--CONFIG_INPUT_ATI_REMOTE=m
--CONFIG_INPUT_ATI_REMOTE2=m
--CONFIG_INPUT_KEYSPAN_REMOTE=m
--CONFIG_INPUT_POWERMATE=m
--CONFIG_INPUT_YEALINK=m
--CONFIG_INPUT_UINPUT=m
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=m
--CONFIG_SERIO_CT82C710=m
--CONFIG_SERIO_PARKBD=m
--CONFIG_SERIO_PCIPS2=m
--CONFIG_SERIO_LIBPS2=y
--CONFIG_SERIO_RAW=m
--CONFIG_GAMEPORT=m
--CONFIG_GAMEPORT_NS558=m
--CONFIG_GAMEPORT_L4=m
--CONFIG_GAMEPORT_EMU10K1=m
--CONFIG_GAMEPORT_FM801=m
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_CONSOLE_TRANSLATIONS=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--CONFIG_VT_HW_CONSOLE_BINDING=y
--CONFIG_DEVKMEM=y
--CONFIG_SERIAL_NONSTANDARD=y
--CONFIG_COMPUTONE=m
--CONFIG_ROCKETPORT=m
--CONFIG_CYCLADES=m
--# CONFIG_CYZ_INTR is not set
--CONFIG_DIGIEPCA=m
--CONFIG_MOXA_INTELLIO=m
--CONFIG_MOXA_SMARTIO=m
--CONFIG_ISI=m
--CONFIG_SYNCLINK=m
--CONFIG_SYNCLINKMP=m
--CONFIG_SYNCLINK_GT=m
--CONFIG_N_HDLC=m
--CONFIG_RISCOM8=m
--CONFIG_SPECIALIX=m
--CONFIG_SX=m
--CONFIG_RIO=m
--CONFIG_RIO_OLDPCI=y
--CONFIG_STALDRV=y
--CONFIG_NOZOMI=m
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_FIX_EARLYCON_MEM=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_PNP=y
--CONFIG_SERIAL_8250_CS=m
--CONFIG_SERIAL_8250_NR_UARTS=16
--CONFIG_SERIAL_8250_RUNTIME_UARTS=8
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_JSM=m
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=0
--CONFIG_PRINTER=m
--# CONFIG_LP_CONSOLE is not set
--CONFIG_PPDEV=m
--CONFIG_HVC_DRIVER=y
--CONFIG_VIRTIO_CONSOLE=m
--CONFIG_IPMI_HANDLER=m
--CONFIG_IPMI_PANIC_EVENT=y
--# CONFIG_IPMI_PANIC_STRING is not set
--CONFIG_IPMI_DEVICE_INTERFACE=m
--CONFIG_IPMI_SI=m
--CONFIG_IPMI_WATCHDOG=m
--CONFIG_IPMI_POWEROFF=m
--CONFIG_HW_RANDOM=y
--CONFIG_HW_RANDOM_INTEL=m
--CONFIG_HW_RANDOM_AMD=m
--CONFIG_HW_RANDOM_VIRTIO=m
--CONFIG_NVRAM=y
--CONFIG_R3964=m
--CONFIG_APPLICOM=m
--
--#
--# PCMCIA character devices
--#
--CONFIG_SYNCLINK_CS=m
--CONFIG_CARDMAN_4000=m
--CONFIG_CARDMAN_4040=m
--CONFIG_IPWIRELESS=m
--# CONFIG_MWAVE is not set
--CONFIG_PC8736x_GPIO=m
--CONFIG_NSC_GPIO=m
--CONFIG_RAW_DRIVER=m
--CONFIG_MAX_RAW_DEVS=4096
--CONFIG_HPET=y
--CONFIG_HPET_MMAP=y
--CONFIG_HANGCHECK_TIMER=m
--CONFIG_TCG_TPM=m
--CONFIG_TCG_TIS=m
--CONFIG_TCG_NSC=m
--CONFIG_TCG_ATMEL=m
--CONFIG_TCG_INFINEON=m
--CONFIG_TELCLOCK=m
--CONFIG_DEVPORT=y
--CONFIG_CRASHER=m
--CONFIG_I2C=m
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=m
--CONFIG_I2C_HELPER_AUTO=y
--CONFIG_I2C_ALGOBIT=m
--CONFIG_I2C_ALGOPCA=m
--
--#
--# I2C Hardware Bus support
--#
--
--#
--# PC SMBus host controller drivers
--#
--CONFIG_I2C_ALI1535=m
--CONFIG_I2C_ALI1563=m
--CONFIG_I2C_ALI15X3=m
--CONFIG_I2C_AMD756=m
--CONFIG_I2C_AMD756_S4882=m
--CONFIG_I2C_AMD8111=m
--CONFIG_I2C_I801=m
--CONFIG_I2C_ISCH=m
--CONFIG_I2C_PIIX4=m
--CONFIG_I2C_NFORCE2=m
--CONFIG_I2C_NFORCE2_S4985=m
--CONFIG_I2C_SIS5595=m
--CONFIG_I2C_SIS630=m
--CONFIG_I2C_SIS96X=m
--CONFIG_I2C_VIA=m
--CONFIG_I2C_VIAPRO=m
--
--#
--# I2C system bus drivers (mostly embedded / system-on-chip)
--#
--CONFIG_I2C_GPIO=m
--CONFIG_I2C_OCORES=m
--# CONFIG_I2C_SIMTEC is not set
--
--#
--# External I2C/SMBus adapter drivers
--#
--CONFIG_I2C_PARPORT=m
--CONFIG_I2C_PARPORT_LIGHT=m
--CONFIG_I2C_TAOS_EVM=m
--CONFIG_I2C_TINY_USB=m
--
--#
--# Graphics adapter I2C/DDC channel drivers
--#
--CONFIG_I2C_VOODOO3=m
--
--#
--# Other I2C/SMBus bus drivers
--#
--CONFIG_I2C_PCA_PLATFORM=m
--CONFIG_I2C_STUB=m
--
--#
--# Miscellaneous I2C Chip support
--#
--CONFIG_DS1682=m
--CONFIG_AT24=m
--CONFIG_SENSORS_EEPROM=m
--CONFIG_SENSORS_PCF8591=m
--# CONFIG_TPS65010 is not set
--CONFIG_SENSORS_MAX6875=m
--CONFIG_SENSORS_TSL2550=m
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--CONFIG_SPI=y
--CONFIG_SPI_DEBUG=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=m
--CONFIG_SPI_BUTTERFLY=m
--CONFIG_SPI_LM70_LLP=m
--
--#
--# SPI Protocol Masters
--#
--CONFIG_SPI_AT25=m
--CONFIG_SPI_SPIDEV=m
--CONFIG_SPI_TLE62X0=m
--CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
--CONFIG_GPIOLIB=y
--# CONFIG_DEBUG_GPIO is not set
--CONFIG_GPIO_SYSFS=y
--
--#
--# I2C GPIO expanders:
--#
--CONFIG_GPIO_MAX732X=m
--CONFIG_GPIO_PCA953X=m
--CONFIG_GPIO_PCF857X=m
--
--#
--# PCI GPIO expanders:
--#
--
--#
--# SPI GPIO expanders:
--#
--CONFIG_GPIO_MAX7301=m
--CONFIG_GPIO_MCP23S08=m
--CONFIG_W1=m
--CONFIG_W1_CON=y
--
--#
--# 1-wire Bus Masters
--#
--CONFIG_W1_MASTER_MATROX=m
--CONFIG_W1_MASTER_DS2490=m
--CONFIG_W1_MASTER_DS2482=m
--CONFIG_W1_MASTER_GPIO=m
--
--#
--# 1-wire Slaves
--#
--CONFIG_W1_SLAVE_THERM=m
--CONFIG_W1_SLAVE_SMEM=m
--CONFIG_W1_SLAVE_DS2433=m
--CONFIG_W1_SLAVE_DS2433_CRC=y
--CONFIG_W1_SLAVE_DS2760=m
--CONFIG_POWER_SUPPLY=y
--# CONFIG_POWER_SUPPLY_DEBUG is not set
--CONFIG_PDA_POWER=m
--CONFIG_BATTERY_DS2760=m
--CONFIG_HWMON=m
--CONFIG_HWMON_VID=m
--CONFIG_SENSORS_ABITUGURU=m
--CONFIG_SENSORS_ABITUGURU3=m
--CONFIG_SENSORS_AD7414=m
--CONFIG_SENSORS_AD7418=m
--CONFIG_SENSORS_ADCXX=m
--CONFIG_SENSORS_ADM1021=m
--CONFIG_SENSORS_ADM1025=m
--CONFIG_SENSORS_ADM1026=m
--CONFIG_SENSORS_ADM1029=m
--CONFIG_SENSORS_ADM1031=m
--CONFIG_SENSORS_ADM9240=m
--CONFIG_SENSORS_ADT7470=m
--CONFIG_SENSORS_ADT7473=m
--CONFIG_SENSORS_K8TEMP=m
--CONFIG_SENSORS_ASB100=m
--CONFIG_SENSORS_ATXP1=m
--CONFIG_SENSORS_DS1621=m
--CONFIG_SENSORS_I5K_AMB=m
--CONFIG_SENSORS_F71805F=m
--CONFIG_SENSORS_F71882FG=m
--CONFIG_SENSORS_F75375S=m
--CONFIG_SENSORS_FSCHER=m
--CONFIG_SENSORS_FSCPOS=m
--CONFIG_SENSORS_FSCHMD=m
--CONFIG_SENSORS_GL518SM=m
--CONFIG_SENSORS_GL520SM=m
--CONFIG_SENSORS_CORETEMP=m
--CONFIG_SENSORS_IBMAEM=m
--CONFIG_SENSORS_IBMPEX=m
--CONFIG_SENSORS_IT87=m
--CONFIG_SENSORS_LM63=m
--CONFIG_SENSORS_LM70=m
--CONFIG_SENSORS_LM75=m
--CONFIG_SENSORS_LM77=m
--CONFIG_SENSORS_LM78=m
--CONFIG_SENSORS_LM80=m
--CONFIG_SENSORS_LM83=m
--CONFIG_SENSORS_LM85=m
--CONFIG_SENSORS_LM87=m
--CONFIG_SENSORS_LM90=m
--CONFIG_SENSORS_LM92=m
--CONFIG_SENSORS_LM93=m
--CONFIG_SENSORS_MAX1619=m
--CONFIG_SENSORS_MAX6650=m
--CONFIG_SENSORS_PC87360=m
--CONFIG_SENSORS_PC87427=m
--CONFIG_SENSORS_SIS5595=m
--CONFIG_SENSORS_DME1737=m
--CONFIG_SENSORS_SMSC47M1=m
--CONFIG_SENSORS_SMSC47M192=m
--CONFIG_SENSORS_SMSC47B397=m
--CONFIG_SENSORS_ADS7828=m
--CONFIG_SENSORS_THMC50=m
--CONFIG_SENSORS_VIA686A=m
--CONFIG_SENSORS_VT1211=m
--CONFIG_SENSORS_VT8231=m
--CONFIG_SENSORS_W83781D=m
--CONFIG_SENSORS_W83791D=m
--CONFIG_SENSORS_W83792D=m
--CONFIG_SENSORS_W83793=m
--CONFIG_SENSORS_W83L785TS=m
--CONFIG_SENSORS_W83L786NG=m
--CONFIG_SENSORS_W83627HF=m
--CONFIG_SENSORS_W83627EHF=m
--CONFIG_SENSORS_HDAPS=m
--CONFIG_SENSORS_APPLESMC=m
--# CONFIG_HWMON_DEBUG_CHIP is not set
--CONFIG_THERMAL=m
--CONFIG_THERMAL_HWMON=y
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--CONFIG_SOFT_WATCHDOG=m
--CONFIG_ACQUIRE_WDT=m
--CONFIG_ADVANTECH_WDT=m
--CONFIG_ALIM1535_WDT=m
--CONFIG_ALIM7101_WDT=m
--CONFIG_SC520_WDT=m
--CONFIG_EUROTECH_WDT=m
--CONFIG_IB700_WDT=m
--CONFIG_IBMASR=m
--CONFIG_WAFER_WDT=m
--CONFIG_I6300ESB_WDT=m
--CONFIG_ITCO_WDT=m
--CONFIG_ITCO_VENDOR_SUPPORT=y
--CONFIG_IT8712F_WDT=m
--CONFIG_HP_WATCHDOG=m
--CONFIG_SC1200_WDT=m
--CONFIG_PC87413_WDT=m
--CONFIG_60XX_WDT=m
--CONFIG_SBC8360_WDT=m
--CONFIG_CPU5_WDT=m
--CONFIG_SMSC37B787_WDT=m
--CONFIG_W83627HF_WDT=m
--CONFIG_W83697HF_WDT=m
--CONFIG_W83877F_WDT=m
--CONFIG_W83977F_WDT=m
--CONFIG_MACHZ_WDT=m
--CONFIG_SBC_EPX_C3_WATCHDOG=m
--
--#
--# PCI-based Watchdog Cards
--#
--CONFIG_PCIPCWATCHDOG=m
--CONFIG_WDTPCI=m
--CONFIG_WDT_501_PCI=y
--
--#
--# USB-based Watchdog Cards
--#
--CONFIG_USBPCWATCHDOG=m
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--CONFIG_SSB=m
--CONFIG_SSB_SPROM=y
--CONFIG_SSB_BLOCKIO=y
--CONFIG_SSB_PCIHOST_POSSIBLE=y
--CONFIG_SSB_PCIHOST=y
--CONFIG_SSB_B43_PCI_BRIDGE=y
--CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
--CONFIG_SSB_PCMCIAHOST=y
--# CONFIG_SSB_DEBUG is not set
--CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
--CONFIG_SSB_DRIVER_PCICORE=y
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_CORE is not set
--CONFIG_MFD_SM501=m
--CONFIG_MFD_SM501_GPIO=y
--CONFIG_HTC_PASIC3=m
--# CONFIG_MFD_TMIO is not set
--
--#
--# Multimedia devices
--#
--
--#
--# Multimedia core support
--#
--CONFIG_VIDEO_DEV=m
--CONFIG_VIDEO_V4L2_COMMON=m
--CONFIG_VIDEO_ALLOW_V4L1=y
--CONFIG_VIDEO_V4L1_COMPAT=y
--CONFIG_DVB_CORE=m
--CONFIG_VIDEO_MEDIA=m
--
--#
--# Multimedia drivers
--#
--CONFIG_VIDEO_SAA7146=m
--CONFIG_VIDEO_SAA7146_VV=m
--CONFIG_MEDIA_ATTACH=y
--CONFIG_MEDIA_TUNER=m
--# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
--CONFIG_MEDIA_TUNER_SIMPLE=m
--CONFIG_MEDIA_TUNER_TDA8290=m
--CONFIG_MEDIA_TUNER_TDA827X=m
--CONFIG_MEDIA_TUNER_TDA18271=m
--CONFIG_MEDIA_TUNER_TDA9887=m
--CONFIG_MEDIA_TUNER_TEA5761=m
--CONFIG_MEDIA_TUNER_TEA5767=m
--CONFIG_MEDIA_TUNER_MT20XX=m
--CONFIG_MEDIA_TUNER_MT2060=m
--CONFIG_MEDIA_TUNER_MT2266=m
--CONFIG_MEDIA_TUNER_MT2131=m
--CONFIG_MEDIA_TUNER_QT1010=m
--CONFIG_MEDIA_TUNER_XC2028=m
--CONFIG_MEDIA_TUNER_XC5000=m
--CONFIG_MEDIA_TUNER_MXL5005S=m
--CONFIG_MEDIA_TUNER_MXL5007T=m
--CONFIG_VIDEO_V4L2=m
--CONFIG_VIDEO_V4L1=m
--CONFIG_VIDEOBUF_GEN=m
--CONFIG_VIDEOBUF_DMA_SG=m
--CONFIG_VIDEOBUF_VMALLOC=m
--CONFIG_VIDEOBUF_DMA_CONTIG=m
--CONFIG_VIDEOBUF_DVB=m
--CONFIG_VIDEO_BTCX=m
--CONFIG_VIDEO_IR=m
--CONFIG_VIDEO_TVEEPROM=m
--CONFIG_VIDEO_TUNER=m
--CONFIG_VIDEO_CAPTURE_DRIVERS=y
--# CONFIG_VIDEO_ADV_DEBUG is not set
--CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
--CONFIG_VIDEO_IR_I2C=m
--CONFIG_VIDEO_TVAUDIO=m
--CONFIG_VIDEO_TDA7432=m
--CONFIG_VIDEO_TDA9840=m
--CONFIG_VIDEO_TDA9875=m
--CONFIG_VIDEO_TEA6415C=m
--CONFIG_VIDEO_TEA6420=m
--CONFIG_VIDEO_MSP3400=m
--CONFIG_VIDEO_CS5345=m
--CONFIG_VIDEO_CS53L32A=m
--CONFIG_VIDEO_M52790=m
--CONFIG_VIDEO_WM8775=m
--CONFIG_VIDEO_WM8739=m
--CONFIG_VIDEO_VP27SMPX=m
--CONFIG_VIDEO_BT819=m
--CONFIG_VIDEO_BT856=m
--CONFIG_VIDEO_KS0127=m
--CONFIG_VIDEO_OV7670=m
--CONFIG_VIDEO_SAA7110=m
--CONFIG_VIDEO_SAA7111=m
--CONFIG_VIDEO_SAA7114=m
--CONFIG_VIDEO_SAA711X=m
--CONFIG_VIDEO_SAA717X=m
--CONFIG_VIDEO_TVP5150=m
--CONFIG_VIDEO_VPX3220=m
--CONFIG_VIDEO_CX25840=m
--CONFIG_VIDEO_CX2341X=m
--CONFIG_VIDEO_SAA7127=m
--CONFIG_VIDEO_SAA7185=m
--CONFIG_VIDEO_ADV7170=m
--CONFIG_VIDEO_ADV7175=m
--CONFIG_VIDEO_UPD64031A=m
--CONFIG_VIDEO_UPD64083=m
--CONFIG_VIDEO_VIVI=m
--CONFIG_VIDEO_BT848=m
--CONFIG_VIDEO_BT848_DVB=y
--CONFIG_VIDEO_SAA6588=m
--CONFIG_VIDEO_BWQCAM=m
--CONFIG_VIDEO_CQCAM=m
--CONFIG_VIDEO_W9966=m
--CONFIG_VIDEO_CPIA=m
--CONFIG_VIDEO_CPIA_PP=m
--CONFIG_VIDEO_CPIA_USB=m
--CONFIG_VIDEO_CPIA2=m
--CONFIG_VIDEO_SAA5246A=m
--CONFIG_VIDEO_SAA5249=m
--# CONFIG_TUNER_3036 is not set
--CONFIG_VIDEO_STRADIS=m
--CONFIG_VIDEO_ZORAN=m
--CONFIG_VIDEO_ZORAN_DC30=m
--CONFIG_VIDEO_ZORAN_ZR36060=m
--CONFIG_VIDEO_ZORAN_BUZ=m
--CONFIG_VIDEO_ZORAN_DC10=m
--CONFIG_VIDEO_ZORAN_LML33=m
--CONFIG_VIDEO_ZORAN_LML33R10=m
--CONFIG_VIDEO_ZORAN_AVS6EYES=m
--CONFIG_VIDEO_MEYE=m
--CONFIG_VIDEO_SAA7134=m
--CONFIG_VIDEO_SAA7134_ALSA=m
--CONFIG_VIDEO_SAA7134_DVB=m
--CONFIG_VIDEO_MXB=m
--# CONFIG_VIDEO_DPC is not set
--CONFIG_VIDEO_HEXIUM_ORION=m
--CONFIG_VIDEO_HEXIUM_GEMINI=m
--CONFIG_VIDEO_CX88=m
--CONFIG_VIDEO_CX88_ALSA=m
--CONFIG_VIDEO_CX88_BLACKBIRD=m
--CONFIG_VIDEO_CX88_DVB=m
--CONFIG_VIDEO_CX88_VP3054=m
--CONFIG_VIDEO_CX23885=m
--CONFIG_VIDEO_AU0828=m
--CONFIG_VIDEO_IVTV=m
--CONFIG_VIDEO_FB_IVTV=m
--CONFIG_VIDEO_CX18=m
--CONFIG_VIDEO_CAFE_CCIC=m
--CONFIG_V4L_USB_DRIVERS=y
--CONFIG_USB_VIDEO_CLASS=m
--CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
--CONFIG_USB_GSPCA=m
--CONFIG_VIDEO_PVRUSB2=m
--CONFIG_VIDEO_PVRUSB2_SYSFS=y
--CONFIG_VIDEO_PVRUSB2_DVB=y
--# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
--CONFIG_VIDEO_EM28XX=m
--CONFIG_VIDEO_EM28XX_ALSA=m
--CONFIG_VIDEO_EM28XX_DVB=m
--CONFIG_VIDEO_USBVISION=m
--CONFIG_VIDEO_USBVIDEO=m
--CONFIG_USB_VICAM=m
--CONFIG_USB_IBMCAM=m
--CONFIG_USB_KONICAWC=m
--CONFIG_USB_QUICKCAM_MESSENGER=m
--CONFIG_USB_ET61X251=m
--CONFIG_VIDEO_OVCAMCHIP=m
--CONFIG_USB_W9968CF=m
--CONFIG_USB_OV511=m
--CONFIG_USB_SE401=m
--CONFIG_USB_SN9C102=m
--CONFIG_USB_STV680=m
--CONFIG_USB_ZC0301=m
--CONFIG_USB_PWC=m
--# CONFIG_USB_PWC_DEBUG is not set
--CONFIG_USB_ZR364XX=m
--CONFIG_USB_STKWEBCAM=m
--CONFIG_USB_S2255=m
--CONFIG_SOC_CAMERA=m
--CONFIG_SOC_CAMERA_MT9M001=m
--CONFIG_MT9M001_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_MT9V022=m
--CONFIG_MT9V022_PCA9536_SWITCH=y
--CONFIG_SOC_CAMERA_PLATFORM=m
--CONFIG_VIDEO_SH_MOBILE_CEU=m
--CONFIG_RADIO_ADAPTERS=y
--CONFIG_RADIO_GEMTEK_PCI=m
--CONFIG_RADIO_MAXIRADIO=m
--CONFIG_RADIO_MAESTRO=m
--CONFIG_USB_DSBR=m
--CONFIG_USB_SI470X=m
--CONFIG_DVB_CAPTURE_DRIVERS=y
--
--#
--# Supported SAA7146 based PCI Adapters
--#
--CONFIG_TTPCI_EEPROM=m
--CONFIG_DVB_AV7110=m
--# CONFIG_DVB_AV7110_FIRMWARE is not set
--CONFIG_DVB_AV7110_OSD=y
--CONFIG_DVB_BUDGET_CORE=m
--CONFIG_DVB_BUDGET=m
--CONFIG_DVB_BUDGET_CI=m
--CONFIG_DVB_BUDGET_AV=m
--CONFIG_DVB_BUDGET_PATCH=m
--
--#
--# Supported USB Adapters
--#
--CONFIG_DVB_USB=m
--# CONFIG_DVB_USB_DEBUG is not set
--CONFIG_DVB_USB_A800=m
--CONFIG_DVB_USB_DIBUSB_MB=m
--# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
--CONFIG_DVB_USB_DIBUSB_MC=m
--CONFIG_DVB_USB_DIB0700=m
--CONFIG_DVB_USB_UMT_010=m
--CONFIG_DVB_USB_CXUSB=m
--CONFIG_DVB_USB_M920X=m
--CONFIG_DVB_USB_GL861=m
--CONFIG_DVB_USB_AU6610=m
--CONFIG_DVB_USB_DIGITV=m
--CONFIG_DVB_USB_VP7045=m
--CONFIG_DVB_USB_VP702X=m
--CONFIG_DVB_USB_GP8PSK=m
--CONFIG_DVB_USB_NOVA_T_USB2=m
--CONFIG_DVB_USB_TTUSB2=m
--CONFIG_DVB_USB_DTT200U=m
--CONFIG_DVB_USB_OPERA1=m
--CONFIG_DVB_USB_AF9005=m
--CONFIG_DVB_USB_AF9005_REMOTE=m
--CONFIG_DVB_USB_DW2102=m
--CONFIG_DVB_USB_ANYSEE=m
--CONFIG_DVB_TTUSB_BUDGET=m
--CONFIG_DVB_TTUSB_DEC=m
--CONFIG_DVB_CINERGYT2=m
--# CONFIG_DVB_CINERGYT2_TUNING is not set
--CONFIG_DVB_SIANO_SMS1XXX=m
--CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
--
--#
--# Supported FlexCopII (B2C2) Adapters
--#
--CONFIG_DVB_B2C2_FLEXCOP=m
--CONFIG_DVB_B2C2_FLEXCOP_PCI=m
--CONFIG_DVB_B2C2_FLEXCOP_USB=m
--# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
--
--#
--# Supported BT878 Adapters
--#
--CONFIG_DVB_BT8XX=m
--
--#
--# Supported Pluto2 Adapters
--#
--CONFIG_DVB_PLUTO2=m
--
--#
--# Supported DVB Frontends
--#
--
--#
--# Customise DVB Frontends
--#
--# CONFIG_DVB_FE_CUSTOMISE is not set
--
--#
--# DVB-S (satellite) frontends
--#
--CONFIG_DVB_CX24110=m
--CONFIG_DVB_CX24123=m
--CONFIG_DVB_MT312=m
--CONFIG_DVB_S5H1420=m
--CONFIG_DVB_STV0299=m
--CONFIG_DVB_TDA8083=m
--CONFIG_DVB_TDA10086=m
--CONFIG_DVB_VES1X93=m
--CONFIG_DVB_TUNER_ITD1000=m
--CONFIG_DVB_TDA826X=m
--CONFIG_DVB_TUA6100=m
--
--#
--# DVB-T (terrestrial) frontends
--#
--CONFIG_DVB_SP8870=m
--CONFIG_DVB_SP887X=m
--CONFIG_DVB_CX22700=m
--CONFIG_DVB_CX22702=m
--CONFIG_DVB_DRX397XD=m
--CONFIG_DVB_L64781=m
--CONFIG_DVB_TDA1004X=m
--CONFIG_DVB_NXT6000=m
--CONFIG_DVB_MT352=m
--CONFIG_DVB_ZL10353=m
--CONFIG_DVB_DIB3000MB=m
--CONFIG_DVB_DIB3000MC=m
--CONFIG_DVB_DIB7000M=m
--CONFIG_DVB_DIB7000P=m
--CONFIG_DVB_TDA10048=m
--
--#
--# DVB-C (cable) frontends
--#
--CONFIG_DVB_VES1820=m
--CONFIG_DVB_TDA10021=m
--CONFIG_DVB_TDA10023=m
--CONFIG_DVB_STV0297=m
--
--#
--# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
--#
--CONFIG_DVB_NXT200X=m
--CONFIG_DVB_OR51211=m
--CONFIG_DVB_OR51132=m
--CONFIG_DVB_BCM3510=m
--CONFIG_DVB_LGDT330X=m
--CONFIG_DVB_S5H1409=m
--CONFIG_DVB_AU8522=m
--CONFIG_DVB_S5H1411=m
--
--#
--# Digital terrestrial only tuners/PLL
--#
--CONFIG_DVB_PLL=m
--CONFIG_DVB_TUNER_DIB0070=m
--
--#
--# SEC control devices for DVB-S
--#
--CONFIG_DVB_LNBP21=m
--CONFIG_DVB_ISL6405=m
--CONFIG_DVB_ISL6421=m
--CONFIG_DAB=y
--CONFIG_USB_DABUSB=m
--
--#
--# Graphics support
--#
--CONFIG_AGP=y
--CONFIG_AGP_AMD64=y
--CONFIG_AGP_INTEL=m
--CONFIG_AGP_SIS=m
--CONFIG_AGP_VIA=m
--CONFIG_DRM=m
--CONFIG_DRM_TDFX=m
--CONFIG_DRM_R128=m
--CONFIG_DRM_RADEON=m
--CONFIG_DRM_I810=m
--# CONFIG_DRM_I830 is not set
--CONFIG_DRM_I915=m
--CONFIG_DRM_MGA=m
--CONFIG_DRM_SIS=m
--CONFIG_DRM_VIA=m
--CONFIG_DRM_VIA_CHROME9=m
--CONFIG_DRM_SAVAGE=m
--CONFIG_VGASTATE=m
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--CONFIG_FB=y
--CONFIG_FIRMWARE_EDID=y
--CONFIG_FB_DDC=m
--CONFIG_FB_CFB_FILLRECT=y
--CONFIG_FB_CFB_COPYAREA=y
--CONFIG_FB_CFB_IMAGEBLIT=y
--# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
--CONFIG_FB_SYS_FILLRECT=m
--CONFIG_FB_SYS_COPYAREA=m
--CONFIG_FB_SYS_IMAGEBLIT=m
--# CONFIG_FB_FOREIGN_ENDIAN is not set
--CONFIG_FB_SYS_FOPS=m
--CONFIG_FB_DEFERRED_IO=y
--CONFIG_FB_HECUBA=m
--CONFIG_FB_SVGALIB=m
--# CONFIG_FB_MACMODES is not set
--CONFIG_FB_BACKLIGHT=y
--CONFIG_FB_MODE_HELPERS=y
--CONFIG_FB_TILEBLITTING=y
--
--#
--# Frame buffer hardware drivers
--#
--CONFIG_FB_CIRRUS=m
--# CONFIG_FB_PM2 is not set
--CONFIG_FB_CYBER2000=m
--CONFIG_FB_ARC=m
--# CONFIG_FB_ASILIANT is not set
--# CONFIG_FB_IMSTT is not set
--CONFIG_FB_VGA16=m
--CONFIG_FB_UVESA=m
--CONFIG_FB_VESA=y
--CONFIG_FB_EFI=y
--CONFIG_FB_IMAC=y
--CONFIG_FB_N411=m
--CONFIG_FB_HGA=m
--CONFIG_FB_HGA_ACCEL=y
--CONFIG_FB_S1D13XXX=m
--CONFIG_FB_NVIDIA=m
--CONFIG_FB_NVIDIA_I2C=y
--# CONFIG_FB_NVIDIA_DEBUG is not set
--CONFIG_FB_NVIDIA_BACKLIGHT=y
--CONFIG_FB_RIVA=m
--CONFIG_FB_RIVA_I2C=y
--# CONFIG_FB_RIVA_DEBUG is not set
--CONFIG_FB_RIVA_BACKLIGHT=y
--CONFIG_FB_LE80578=m
--CONFIG_FB_CARILLO_RANCH=m
--CONFIG_FB_INTEL=m
--# CONFIG_FB_INTEL_DEBUG is not set
--CONFIG_FB_INTEL_I2C=y
--CONFIG_FB_MATROX=m
--CONFIG_FB_MATROX_MILLENIUM=y
--CONFIG_FB_MATROX_MYSTIQUE=y
--CONFIG_FB_MATROX_G=y
--CONFIG_FB_MATROX_I2C=m
--CONFIG_FB_MATROX_MAVEN=m
--CONFIG_FB_MATROX_MULTIHEAD=y
--CONFIG_FB_RADEON=m
--CONFIG_FB_RADEON_I2C=y
--CONFIG_FB_RADEON_BACKLIGHT=y
--# CONFIG_FB_RADEON_DEBUG is not set
--CONFIG_FB_ATY128=m
--CONFIG_FB_ATY128_BACKLIGHT=y
--CONFIG_FB_ATY=m
--CONFIG_FB_ATY_CT=y
--CONFIG_FB_ATY_GENERIC_LCD=y
--CONFIG_FB_ATY_GX=y
--CONFIG_FB_ATY_BACKLIGHT=y
--# CONFIG_FB_S3 is not set
--CONFIG_FB_SAVAGE=m
--CONFIG_FB_SAVAGE_I2C=y
--CONFIG_FB_SAVAGE_ACCEL=y
--CONFIG_FB_SIS=m
--CONFIG_FB_SIS_300=y
--CONFIG_FB_SIS_315=y
--CONFIG_FB_NEOMAGIC=m
--CONFIG_FB_KYRO=m
--CONFIG_FB_3DFX=m
--CONFIG_FB_3DFX_ACCEL=y
--CONFIG_FB_VOODOO1=m
--CONFIG_FB_VT8623=m
--CONFIG_FB_TRIDENT=m
--CONFIG_FB_TRIDENT_ACCEL=y
--CONFIG_FB_ARK=m
--CONFIG_FB_PM3=m
--CONFIG_FB_CARMINE=m
--CONFIG_FB_CARMINE_DRAM_EVAL=y
--# CONFIG_CARMINE_DRAM_CUSTOM is not set
--CONFIG_FB_GEODE=y
--CONFIG_FB_GEODE_LX=m
--CONFIG_FB_GEODE_GX=m
--CONFIG_FB_GEODE_GX1=m
--CONFIG_FB_SM501=m
--CONFIG_FB_VIRTUAL=m
--CONFIG_BACKLIGHT_LCD_SUPPORT=y
--CONFIG_LCD_CLASS_DEVICE=m
--CONFIG_LCD_LTV350QV=m
--CONFIG_LCD_ILI9320=m
--CONFIG_LCD_VGG2432A4=m
--CONFIG_LCD_PLATFORM=m
--CONFIG_BACKLIGHT_CLASS_DEVICE=y
--CONFIG_BACKLIGHT_CORGI=m
--CONFIG_BACKLIGHT_PROGEAR=m
--CONFIG_BACKLIGHT_CARILLO_RANCH=m
--CONFIG_BACKLIGHT_MBP_NVIDIA=m
--
--#
--# Display device support
--#
--CONFIG_DISPLAY_SUPPORT=m
--
--#
--# Display hardware drivers
--#
--
--#
--# Console display driver support
--#
--CONFIG_VGA_CONSOLE=y
--CONFIG_VGACON_SOFT_SCROLLBACK=y
--CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
--CONFIG_VIDEO_SELECT=y
--CONFIG_DUMMY_CONSOLE=y
--CONFIG_FRAMEBUFFER_CONSOLE=y
--# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
--CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
--# CONFIG_FONTS is not set
--CONFIG_FONT_8x8=y
--CONFIG_FONT_8x16=y
--# CONFIG_LOGO is not set
--
--#
--# Bootsplash configuration
--#
--CONFIG_BOOTSPLASH=y
--CONFIG_SOUND=m
--CONFIG_SND=m
--CONFIG_SND_TIMER=m
--CONFIG_SND_PCM=m
--CONFIG_SND_HWDEP=m
--CONFIG_SND_RAWMIDI=m
--CONFIG_SND_SEQUENCER=m
--CONFIG_SND_SEQ_DUMMY=m
--CONFIG_SND_OSSEMUL=y
--CONFIG_SND_MIXER_OSS=m
--CONFIG_SND_PCM_OSS=m
--CONFIG_SND_PCM_OSS_PLUGINS=y
--CONFIG_SND_SEQUENCER_OSS=y
--CONFIG_SND_DYNAMIC_MINORS=y
--CONFIG_SND_SUPPORT_OLD_API=y
--CONFIG_SND_VERBOSE_PROCFS=y
--CONFIG_SND_VERBOSE_PRINTK=y
--CONFIG_SND_DEBUG=y
--# CONFIG_SND_DEBUG_VERBOSE is not set
--# CONFIG_SND_PCM_XRUN_DEBUG is not set
--CONFIG_SND_VMASTER=y
--CONFIG_SND_MPU401_UART=m
--CONFIG_SND_OPL3_LIB=m
--CONFIG_SND_VX_LIB=m
--CONFIG_SND_AC97_CODEC=m
--CONFIG_SND_DRIVERS=y
--# CONFIG_SND_PCSP is not set
--CONFIG_SND_DUMMY=m
--CONFIG_SND_VIRMIDI=m
--CONFIG_SND_MTPAV=m
--CONFIG_SND_MTS64=m
--CONFIG_SND_SERIAL_U16550=m
--CONFIG_SND_MPU401=m
--CONFIG_SND_PORTMAN2X4=m
--CONFIG_SND_AC97_POWER_SAVE=y
--CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
--CONFIG_SND_SB_COMMON=m
--CONFIG_SND_PCI=y
--CONFIG_SND_AD1889=m
--CONFIG_SND_ALS300=m
--CONFIG_SND_ALS4000=m
--CONFIG_SND_ALI5451=m
--CONFIG_SND_ATIIXP=m
--CONFIG_SND_ATIIXP_MODEM=m
--CONFIG_SND_AU8810=m
--CONFIG_SND_AU8820=m
--CONFIG_SND_AU8830=m
--CONFIG_SND_AW2=m
--CONFIG_SND_AZT3328=m
--CONFIG_SND_BT87X=m
--# CONFIG_SND_BT87X_OVERCLOCK is not set
--CONFIG_SND_CA0106=m
--CONFIG_SND_CMIPCI=m
--CONFIG_SND_OXYGEN_LIB=m
--CONFIG_SND_OXYGEN=m
--CONFIG_SND_CS4281=m
--CONFIG_SND_CS46XX=m
--CONFIG_SND_CS46XX_NEW_DSP=y
--# CONFIG_SND_CS5530 is not set
--CONFIG_SND_DARLA20=m
--CONFIG_SND_GINA20=m
--CONFIG_SND_LAYLA20=m
--CONFIG_SND_DARLA24=m
--CONFIG_SND_GINA24=m
--CONFIG_SND_LAYLA24=m
--CONFIG_SND_MONA=m
--CONFIG_SND_MIA=m
--CONFIG_SND_ECHO3G=m
--CONFIG_SND_INDIGO=m
--CONFIG_SND_INDIGOIO=m
--CONFIG_SND_INDIGODJ=m
--CONFIG_SND_EMU10K1=m
--CONFIG_SND_EMU10K1X=m
--CONFIG_SND_ENS1370=m
--CONFIG_SND_ENS1371=m
--CONFIG_SND_ES1938=m
--CONFIG_SND_ES1968=m
--CONFIG_SND_FM801=m
--CONFIG_SND_FM801_TEA575X_BOOL=y
--CONFIG_SND_FM801_TEA575X=m
--CONFIG_SND_HDA_INTEL=m
--CONFIG_SND_HDA_HWDEP=y
--CONFIG_SND_HDA_INPUT_BEEP=y
--CONFIG_SND_HDA_CODEC_REALTEK=y
--CONFIG_SND_HDA_CODEC_ANALOG=y
--CONFIG_SND_HDA_CODEC_SIGMATEL=y
--CONFIG_SND_HDA_CODEC_VIA=y
--CONFIG_SND_HDA_CODEC_ATIHDMI=y
--CONFIG_SND_HDA_CODEC_NVHDMI=y
--CONFIG_SND_HDA_CODEC_CONEXANT=y
--CONFIG_SND_HDA_CODEC_CMEDIA=y
--CONFIG_SND_HDA_CODEC_SI3054=y
--CONFIG_SND_HDA_GENERIC=y
--CONFIG_SND_HDA_POWER_SAVE=y
--CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
--CONFIG_SND_HDSP=m
--CONFIG_SND_HDSPM=m
--CONFIG_SND_HIFIER=m
--CONFIG_SND_ICE1712=m
--CONFIG_SND_ICE1724=m
--CONFIG_SND_INTEL8X0=m
--CONFIG_SND_INTEL8X0M=m
--CONFIG_SND_KORG1212=m
--CONFIG_SND_MAESTRO3=m
--CONFIG_SND_MIXART=m
--CONFIG_SND_NM256=m
--CONFIG_SND_PCXHR=m
--CONFIG_SND_RIPTIDE=m
--CONFIG_SND_RME32=m
--CONFIG_SND_RME96=m
--CONFIG_SND_RME9652=m
--CONFIG_SND_SONICVIBES=m
--CONFIG_SND_TRIDENT=m
--CONFIG_SND_VIA82XX=m
--CONFIG_SND_VIA82XX_MODEM=m
--CONFIG_SND_VIRTUOSO=m
--CONFIG_SND_VX222=m
--CONFIG_SND_YMFPCI=m
--CONFIG_SND_SPI=y
--CONFIG_SND_USB=y
--CONFIG_SND_USB_AUDIO=m
--CONFIG_SND_USB_USX2Y=m
--CONFIG_SND_USB_CAIAQ=m
--CONFIG_SND_USB_CAIAQ_INPUT=y
--CONFIG_SND_PCMCIA=y
--CONFIG_SND_VXPOCKET=m
--CONFIG_SND_PDAUDIOCF=m
--# CONFIG_SND_SOC is not set
--CONFIG_SOUND_PRIME=m
--CONFIG_SOUND_OSS=m
--CONFIG_SOUND_TRACEINIT=y
--CONFIG_SOUND_DMAP=y
--CONFIG_SOUND_SSCAPE=m
--CONFIG_SOUND_VMIDI=m
--CONFIG_SOUND_TRIX=m
--CONFIG_SOUND_MSS=m
--CONFIG_SOUND_MPU401=m
--CONFIG_SOUND_PAS=m
--CONFIG_SOUND_PSS=m
--CONFIG_PSS_MIXER=y
--# CONFIG_PSS_HAVE_BOOT is not set
--# CONFIG_SOUND_SB is not set
--CONFIG_SOUND_YM3812=m
--CONFIG_SOUND_UART6850=m
--CONFIG_SOUND_AEDSP16=m
--CONFIG_SC6600=y
--CONFIG_SC6600_JOY=y
--CONFIG_SC6600_CDROM=4
--CONFIG_SC6600_CDROMBASE=0x0
--CONFIG_AEDSP16_MSS=y
--# CONFIG_AEDSP16_SBPRO is not set
--CONFIG_AC97_BUS=m
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=m
--# CONFIG_HID_DEBUG is not set
--CONFIG_HIDRAW=y
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=m
--CONFIG_USB_HIDINPUT_POWERBOOK=y
--CONFIG_HID_FF=y
--CONFIG_HID_PID=y
--CONFIG_LOGITECH_FF=y
--# CONFIG_LOGIRUMBLEPAD2_FF is not set
--CONFIG_PANTHERLORD_FF=y
--CONFIG_THRUSTMASTER_FF=y
--CONFIG_ZEROPLUS_FF=y
--CONFIG_USB_HIDDEV=y
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=m
--# CONFIG_USB_DEBUG is not set
--CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--# CONFIG_USB_DEVICE_CLASS is not set
--# CONFIG_USB_DYNAMIC_MINORS is not set
--CONFIG_USB_SUSPEND=y
--# CONFIG_USB_OTG is not set
--CONFIG_USB_MON=y
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_C67X00_HCD=m
--CONFIG_USB_EHCI_HCD=m
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--CONFIG_USB_EHCI_TT_NEWSCHED=y
--CONFIG_USB_ISP116X_HCD=m
--CONFIG_USB_ISP1760_HCD=m
--CONFIG_USB_OHCI_HCD=m
--# CONFIG_USB_OHCI_HCD_SSB is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
--# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=m
--# CONFIG_USB_U132_HCD is not set
--CONFIG_USB_SL811_HCD=m
--CONFIG_USB_SL811_CS=m
--CONFIG_USB_R8A66597_HCD=m
--
--#
--# Enable Host or Gadget support to see Inventra options
--#
--
--#
--# USB Device Class drivers
--#
--CONFIG_USB_ACM=m
--CONFIG_USB_PRINTER=m
--CONFIG_USB_WDM=m
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=m
--# CONFIG_USB_STORAGE_DEBUG is not set
--CONFIG_USB_STORAGE_DATAFAB=y
--CONFIG_USB_STORAGE_FREECOM=y
--CONFIG_USB_STORAGE_ISD200=y
--CONFIG_USB_STORAGE_DPCM=y
--CONFIG_USB_STORAGE_USBAT=y
--CONFIG_USB_STORAGE_SDDR09=y
--CONFIG_USB_STORAGE_SDDR55=y
--CONFIG_USB_STORAGE_JUMPSHOT=y
--CONFIG_USB_STORAGE_ALAUDA=y
--CONFIG_USB_STORAGE_ONETOUCH=y
--CONFIG_USB_STORAGE_KARMA=y
--CONFIG_USB_STORAGE_CYPRESS_ATACB=y
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--CONFIG_USB_MDC800=m
--CONFIG_USB_MICROTEK=m
--
--#
--# USB port drivers
--#
--CONFIG_USB_USS720=m
--CONFIG_USB_SERIAL=m
--CONFIG_USB_EZUSB=y
--CONFIG_USB_SERIAL_GENERIC=y
--CONFIG_USB_SERIAL_AIRCABLE=m
--CONFIG_USB_SERIAL_ARK3116=m
--CONFIG_USB_SERIAL_BELKIN=m
--CONFIG_USB_SERIAL_CH341=m
--CONFIG_USB_SERIAL_WHITEHEAT=m
--CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
--CONFIG_USB_SERIAL_CP2101=m
--CONFIG_USB_SERIAL_CYPRESS_M8=m
--CONFIG_USB_SERIAL_EMPEG=m
--CONFIG_USB_SERIAL_FTDI_SIO=m
--CONFIG_USB_SERIAL_FUNSOFT=m
--CONFIG_USB_SERIAL_VISOR=m
--CONFIG_USB_SERIAL_IPAQ=m
--CONFIG_USB_SERIAL_IR=m
--CONFIG_USB_SERIAL_EDGEPORT=m
--CONFIG_USB_SERIAL_EDGEPORT_TI=m
--CONFIG_USB_SERIAL_GARMIN=m
--CONFIG_USB_SERIAL_IPW=m
--CONFIG_USB_SERIAL_IUU=m
--CONFIG_USB_SERIAL_KEYSPAN_PDA=m
--CONFIG_USB_SERIAL_KEYSPAN=m
--CONFIG_USB_SERIAL_KEYSPAN_MPR=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
--CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19=y
--CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
--CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
--CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
--CONFIG_USB_SERIAL_KLSI=m
--CONFIG_USB_SERIAL_KOBIL_SCT=m
--CONFIG_USB_SERIAL_MCT_U232=m
--CONFIG_USB_SERIAL_MOS7720=m
--CONFIG_USB_SERIAL_MOS7840=m
--CONFIG_USB_SERIAL_MOTOROLA=m
--CONFIG_USB_SERIAL_NAVMAN=m
--CONFIG_USB_SERIAL_PL2303=m
--CONFIG_USB_SERIAL_OTI6858=m
--CONFIG_USB_SERIAL_QUALCOMM=m
--CONFIG_USB_SERIAL_SPCP8X5=m
--CONFIG_USB_SERIAL_HP4X=m
--CONFIG_USB_SERIAL_SAFE=m
--CONFIG_USB_SERIAL_SAFE_PADDED=y
--CONFIG_USB_SERIAL_SIERRAWIRELESS=m
--CONFIG_USB_SERIAL_TI=m
--CONFIG_USB_SERIAL_CYBERJACK=m
--CONFIG_USB_SERIAL_XIRCOM=m
--CONFIG_USB_SERIAL_OPTION=m
--CONFIG_USB_SERIAL_OMNINET=m
--CONFIG_USB_SERIAL_DEBUG=m
--
--#
--# USB Miscellaneous drivers
--#
--CONFIG_USB_EMI62=m
--CONFIG_USB_EMI26=m
--CONFIG_USB_ADUTUX=m
--CONFIG_USB_RIO500=m
--CONFIG_USB_LEGOTOWER=m
--CONFIG_USB_LCD=m
--CONFIG_USB_BERRY_CHARGE=m
--CONFIG_USB_LED=m
--CONFIG_USB_CYPRESS_CY7C63=m
--CONFIG_USB_CYTHERM=m
--CONFIG_USB_PHIDGET=m
--CONFIG_USB_PHIDGETKIT=m
--CONFIG_USB_PHIDGETMOTORCONTROL=m
--CONFIG_USB_PHIDGETSERVO=m
--CONFIG_USB_IDMOUSE=m
--CONFIG_USB_FTDI_ELAN=m
--CONFIG_USB_APPLEDISPLAY=m
--CONFIG_USB_SISUSBVGA=m
--CONFIG_USB_SISUSBVGA_CON=y
--CONFIG_USB_LD=m
--CONFIG_USB_TRANCEVIBRATOR=m
--CONFIG_USB_IOWARRIOR=m
--# CONFIG_USB_TEST is not set
--CONFIG_USB_ISIGHTFW=m
--CONFIG_USB_ATM=m
--CONFIG_USB_SPEEDTOUCH=m
--CONFIG_USB_CXACRU=m
--CONFIG_USB_UEAGLEATM=m
--CONFIG_USB_XUSBATM=m
--# CONFIG_USB_GADGET is not set
--CONFIG_MMC=m
--# CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
--
--#
--# MMC/SD Card Drivers
--#
--CONFIG_MMC_BLOCK=m
--CONFIG_MMC_BLOCK_BOUNCE=y
--CONFIG_SDIO_UART=m
--CONFIG_MMC_TEST=m
--
--#
--# MMC/SD Host Controller Drivers
--#
--CONFIG_MMC_SDHCI=m
--CONFIG_MMC_SDHCI_PCI=m
--CONFIG_MMC_RICOH_MMC=m
--CONFIG_MMC_WBSD=m
--CONFIG_MMC_TIFM_SD=m
--CONFIG_MMC_SPI=m
--CONFIG_MMC_SDRICOH_CS=m
--CONFIG_MEMSTICK=m
--# CONFIG_MEMSTICK_DEBUG is not set
--
--#
--# MemoryStick drivers
--#
--# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
--CONFIG_MSPRO_BLOCK=m
--
--#
--# MemoryStick Host Controller Drivers
--#
--CONFIG_MEMSTICK_TIFM_MS=m
--CONFIG_MEMSTICK_JMICRON_38X=m
--CONFIG_NEW_LEDS=y
--CONFIG_LEDS_CLASS=m
--
--#
--# LED drivers
--#
--CONFIG_LEDS_PCA9532=m
--CONFIG_LEDS_GPIO=m
--CONFIG_LEDS_CLEVO_MAIL=m
--CONFIG_LEDS_PCA955X=m
--
--#
--# LED Triggers
--#
--CONFIG_LEDS_TRIGGERS=y
--CONFIG_LEDS_TRIGGER_TIMER=m
--CONFIG_LEDS_TRIGGER_IDE_DISK=y
--CONFIG_LEDS_TRIGGER_HEARTBEAT=m
--CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
--# CONFIG_ACCESSIBILITY is not set
--CONFIG_INFINIBAND=m
--CONFIG_INFINIBAND_USER_MAD=m
--CONFIG_INFINIBAND_USER_ACCESS=m
--CONFIG_INFINIBAND_USER_MEM=y
--CONFIG_INFINIBAND_ADDR_TRANS=y
--CONFIG_INFINIBAND_MTHCA=m
--CONFIG_INFINIBAND_MTHCA_DEBUG=y
--CONFIG_INFINIBAND_IPATH=m
--CONFIG_INFINIBAND_AMSO1100=m
--# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
--CONFIG_INFINIBAND_CXGB3=m
--# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
--CONFIG_MLX4_INFINIBAND=m
--CONFIG_INFINIBAND_NES=m
--# CONFIG_INFINIBAND_NES_DEBUG is not set
--CONFIG_INFINIBAND_IPOIB=m
--CONFIG_INFINIBAND_IPOIB_CM=y
--CONFIG_INFINIBAND_IPOIB_DEBUG=y
--# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
--CONFIG_INFINIBAND_SRP=m
--CONFIG_INFINIBAND_ISER=m
--CONFIG_EDAC=y
--
--#
--# Reporting subsystems
--#
--# CONFIG_EDAC_DEBUG is not set
--CONFIG_EDAC_MM_EDAC=m
--CONFIG_EDAC_E752X=m
--CONFIG_EDAC_I82975X=m
--CONFIG_EDAC_I3000=m
--CONFIG_EDAC_I5000=m
--CONFIG_EDAC_I5100=m
--CONFIG_RTC_LIB=m
--CONFIG_RTC_CLASS=m
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--CONFIG_RTC_DRV_TEST=m
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=m
--CONFIG_RTC_DRV_DS1374=m
--CONFIG_RTC_DRV_DS1672=m
--CONFIG_RTC_DRV_MAX6900=m
--CONFIG_RTC_DRV_RS5C372=m
--CONFIG_RTC_DRV_ISL1208=m
--CONFIG_RTC_DRV_X1205=m
--CONFIG_RTC_DRV_PCF8563=m
--CONFIG_RTC_DRV_PCF8583=m
--CONFIG_RTC_DRV_M41T80=m
--CONFIG_RTC_DRV_M41T80_WDT=y
--CONFIG_RTC_DRV_S35390A=m
--CONFIG_RTC_DRV_FM3130=m
--
--#
--# SPI RTC drivers
--#
--CONFIG_RTC_DRV_M41T94=m
--CONFIG_RTC_DRV_DS1305=m
--CONFIG_RTC_DRV_MAX6902=m
--CONFIG_RTC_DRV_R9701=m
--CONFIG_RTC_DRV_RS5C348=m
--
--#
--# Platform RTC drivers
--#
--CONFIG_RTC_DRV_CMOS=m
--CONFIG_RTC_DRV_DS1511=m
--CONFIG_RTC_DRV_DS1553=m
--CONFIG_RTC_DRV_DS1742=m
--CONFIG_RTC_DRV_STK17TA8=m
--CONFIG_RTC_DRV_M48T86=m
--CONFIG_RTC_DRV_M48T59=m
--CONFIG_RTC_DRV_V3020=m
--
--#
--# on-CPU RTC drivers
--#
--CONFIG_DMADEVICES=y
--
--#
--# DMA Devices
--#
--CONFIG_INTEL_IOATDMA=m
--CONFIG_DMA_ENGINE=y
--
--#
--# DMA Clients
--#
--CONFIG_NET_DMA=y
--CONFIG_DMATEST=m
--CONFIG_DCA=m
--CONFIG_AUXDISPLAY=y
--# CONFIG_KS0108 is not set
--CONFIG_UIO=m
--CONFIG_UIO_CIF=m
--CONFIG_UIO_PDRV=m
--CONFIG_UIO_PDRV_GENIRQ=m
--CONFIG_UIO_SMX=m
--CONFIG_STAGING=y
--CONFIG_ET131X=m
--# CONFIG_ET131X_DEBUG is not set
--CONFIG_SLICOSS=m
--CONFIG_SXG=m
--CONFIG_ME4000=m
--CONFIG_VIDEO_GO7007=m
--CONFIG_VIDEO_GO7007_USB=m
--CONFIG_USB_IP_COMMON=m
--CONFIG_USB_IP_VHCI_HCD=m
--CONFIG_USB_IP_HOST=m
--CONFIG_W35UND=m
--CONFIG_PRISM2_USB=m
--CONFIG_ECHO=m
--CONFIG_USB_ATMEL=m
--CONFIG_AGNX=m
--CONFIG_OTUS=m
--CONFIG_RT2860=m
--CONFIG_RT2870=m
--CONFIG_RT3070=m
--CONFIG_BENET=m
--CONFIG_RTL8187SE=m
--CONFIG_DRM_PSB=m
--
--#
--# Firmware Drivers
--#
--CONFIG_EDD=m
--# CONFIG_EDD_OFF is not set
--CONFIG_FIRMWARE_MEMMAP=y
--CONFIG_EFI_VARS=m
--CONFIG_DELL_RBU=m
--CONFIG_DCDBAS=m
--CONFIG_DMIID=y
--CONFIG_ISCSI_IBFT_FIND=y
--CONFIG_ISCSI_IBFT=m
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=m
--CONFIG_EXT2_FS_XATTR=y
--CONFIG_EXT2_FS_POSIX_ACL=y
--CONFIG_EXT2_FS_SECURITY=y
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=m
--CONFIG_EXT3_FS_XATTR=y
--CONFIG_EXT3_FS_POSIX_ACL=y
--CONFIG_EXT3_FS_NFS4ACL=y
--CONFIG_EXT3_FS_SECURITY=y
--CONFIG_EXT4DEV_FS=m
--CONFIG_EXT4DEV_FS_XATTR=y
--CONFIG_EXT4DEV_FS_POSIX_ACL=y
--CONFIG_EXT4DEV_FS_SECURITY=y
--CONFIG_JBD=m
--CONFIG_JBD_DEBUG=y
--CONFIG_JBD2=m
--CONFIG_JBD2_DEBUG=y
--CONFIG_FS_MBCACHE=m
--CONFIG_REISERFS_FS=m
--# CONFIG_REISERFS_CHECK is not set
--# CONFIG_REISERFS_PROC_INFO is not set
--CONFIG_REISERFS_FS_XATTR=y
--CONFIG_REISERFS_FS_POSIX_ACL=y
--CONFIG_REISERFS_FS_SECURITY=y
--CONFIG_JFS_FS=m
--CONFIG_JFS_POSIX_ACL=y
--CONFIG_JFS_SECURITY=y
--# CONFIG_JFS_DEBUG is not set
--CONFIG_JFS_STATISTICS=y
--CONFIG_FS_POSIX_ACL=y
--CONFIG_FS_NFS4ACL=y
--CONFIG_XFS_FS=m
--CONFIG_XFS_QUOTA=y
--CONFIG_XFS_DMAPI=m
--CONFIG_XFS_POSIX_ACL=y
--CONFIG_XFS_RT=y
--# CONFIG_XFS_DEBUG is not set
--CONFIG_GFS2_FS=m
--CONFIG_GFS2_FS_LOCKING_DLM=m
--CONFIG_OCFS2_FS=m
--CONFIG_OCFS2_FS_O2CB=m
--CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
--CONFIG_OCFS2_FS_STATS=y
--# CONFIG_OCFS2_DEBUG_MASKLOG is not set
--# CONFIG_OCFS2_DEBUG_FS is not set
--# CONFIG_OCFS2_COMPAT_JBD is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--CONFIG_DMAPI=m
--# CONFIG_DMAPI_DEBUG is not set
--CONFIG_QUOTA=y
--CONFIG_QUOTA_NETLINK_INTERFACE=y
--CONFIG_PRINT_QUOTA_WARNING=y
--CONFIG_QUOTA_TREE=m
--CONFIG_QFMT_V1=m
--CONFIG_QFMT_V2=m
--CONFIG_QUOTACTL=y
--CONFIG_AUTOFS_FS=m
--CONFIG_AUTOFS4_FS=m
--CONFIG_FUSE_FS=m
--CONFIG_GENERIC_ACL=y
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=y
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=m
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=m
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=m
--# CONFIG_NTFS_DEBUG is not set
--CONFIG_NTFS_RW=y
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_VMCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--CONFIG_TMPFS_POSIX_ACL=y
--CONFIG_HUGETLBFS=y
--CONFIG_HUGETLB_PAGE=y
--CONFIG_CONFIGFS_FS=m
--
--#
--# Miscellaneous filesystems
--#
--CONFIG_ADFS_FS=m
--# CONFIG_ADFS_FS_RW is not set
--CONFIG_AFFS_FS=m
--CONFIG_ECRYPT_FS=m
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--CONFIG_BEFS_FS=m
--# CONFIG_BEFS_DEBUG is not set
--CONFIG_BFS_FS=m
--CONFIG_EFS_FS=m
--CONFIG_JFFS2_FS=m
--CONFIG_JFFS2_FS_DEBUG=0
--CONFIG_JFFS2_FS_WRITEBUFFER=y
--# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
--CONFIG_JFFS2_SUMMARY=y
--CONFIG_JFFS2_FS_XATTR=y
--CONFIG_JFFS2_FS_POSIX_ACL=y
--CONFIG_JFFS2_FS_SECURITY=y
--CONFIG_JFFS2_COMPRESSION_OPTIONS=y
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--# CONFIG_JFFS2_CMODE_NONE is not set
--CONFIG_JFFS2_CMODE_PRIORITY=y
--# CONFIG_JFFS2_CMODE_SIZE is not set
--# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
--CONFIG_UBIFS_FS=m
--CONFIG_UBIFS_FS_XATTR=y
--CONFIG_UBIFS_FS_ADVANCED_COMPR=y
--CONFIG_UBIFS_FS_LZO=y
--CONFIG_UBIFS_FS_ZLIB=y
--# CONFIG_UBIFS_FS_DEBUG is not set
--CONFIG_CRAMFS=m
--CONFIG_SQUASHFS=m
--# CONFIG_SQUASHFS_EMBEDDED is not set
--CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
--CONFIG_VXFS_FS=m
--CONFIG_MINIX_FS=y
--CONFIG_OMFS_FS=m
--CONFIG_HPFS_FS=m
--CONFIG_QNX4FS_FS=m
--CONFIG_ROMFS_FS=m
--CONFIG_SYSV_FS=m
--CONFIG_UFS_FS=m
--CONFIG_UFS_FS_WRITE=y
--# CONFIG_UFS_DEBUG is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=m
--CONFIG_NFS_V3=y
--CONFIG_NFS_V3_ACL=y
--CONFIG_NFS_V4=y
--CONFIG_NFS_SWAP=y
--CONFIG_NFSD=m
--CONFIG_NFSD_V2_ACL=y
--CONFIG_NFSD_V3=y
--CONFIG_NFSD_V3_ACL=y
--CONFIG_NFSD_V4=y
--CONFIG_LOCKD=m
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=m
--CONFIG_NFS_ACL_SUPPORT=m
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=m
--CONFIG_SUNRPC_GSS=m
--CONFIG_SUNRPC_XPRT_RDMA=m
--CONFIG_SUNRPC_SWAP=y
--CONFIG_RPCSEC_GSS_KRB5=m
--CONFIG_RPCSEC_GSS_SPKM3=m
--# CONFIG_SMB_FS is not set
--CONFIG_CIFS=m
--CONFIG_CIFS_STATS=y
--CONFIG_CIFS_STATS2=y
--CONFIG_CIFS_WEAK_PW_HASH=y
--CONFIG_CIFS_UPCALL=y
--CONFIG_CIFS_XATTR=y
--CONFIG_CIFS_POSIX=y
--# CONFIG_CIFS_DEBUG2 is not set
--CONFIG_CIFS_EXPERIMENTAL=y
--CONFIG_CIFS_DFS_UPCALL=y
--CONFIG_NCP_FS=m
--CONFIG_NCPFS_PACKET_SIGNING=y
--CONFIG_NCPFS_IOCTL_LOCKING=y
--CONFIG_NCPFS_STRONG=y
--CONFIG_NCPFS_NFS_NS=y
--CONFIG_NCPFS_OS2_NS=y
--CONFIG_NCPFS_SMALLDOS=y
--CONFIG_NCPFS_NLS=y
--CONFIG_NCPFS_EXTRAS=y
--CONFIG_CODA_FS=m
--CONFIG_AFS_FS=m
--# CONFIG_AFS_DEBUG is not set
--CONFIG_9P_FS=m
--CONFIG_NOVFS=m
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--CONFIG_OSF_PARTITION=y
--# CONFIG_AMIGA_PARTITION is not set
--CONFIG_ATARI_PARTITION=y
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--CONFIG_BSD_DISKLABEL=y
--# CONFIG_MINIX_SUBPARTITION is not set
--CONFIG_SOLARIS_X86_PARTITION=y
--CONFIG_UNIXWARE_DISKLABEL=y
--CONFIG_LDM_PARTITION=y
--# CONFIG_LDM_DEBUG is not set
--CONFIG_SGI_PARTITION=y
--CONFIG_ULTRIX_PARTITION=y
--CONFIG_SUN_PARTITION=y
--CONFIG_KARMA_PARTITION=y
--CONFIG_EFI_PARTITION=y
--CONFIG_SYSV68_PARTITION=y
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="utf8"
--CONFIG_NLS_CODEPAGE_437=m
--CONFIG_NLS_CODEPAGE_737=m
--CONFIG_NLS_CODEPAGE_775=m
--CONFIG_NLS_CODEPAGE_850=m
--CONFIG_NLS_CODEPAGE_852=m
--CONFIG_NLS_CODEPAGE_855=m
--CONFIG_NLS_CODEPAGE_857=m
--CONFIG_NLS_CODEPAGE_860=m
--CONFIG_NLS_CODEPAGE_861=m
--CONFIG_NLS_CODEPAGE_862=m
--CONFIG_NLS_CODEPAGE_863=m
--CONFIG_NLS_CODEPAGE_864=m
--CONFIG_NLS_CODEPAGE_865=m
--CONFIG_NLS_CODEPAGE_866=m
--CONFIG_NLS_CODEPAGE_869=m
--CONFIG_NLS_CODEPAGE_936=m
--CONFIG_NLS_CODEPAGE_950=m
--CONFIG_NLS_CODEPAGE_932=m
--CONFIG_NLS_CODEPAGE_949=m
--CONFIG_NLS_CODEPAGE_874=m
--CONFIG_NLS_ISO8859_8=m
--CONFIG_NLS_CODEPAGE_1250=m
--CONFIG_NLS_CODEPAGE_1251=m
--CONFIG_NLS_ASCII=m
--CONFIG_NLS_ISO8859_1=m
--CONFIG_NLS_ISO8859_2=m
--CONFIG_NLS_ISO8859_3=m
--CONFIG_NLS_ISO8859_4=m
--CONFIG_NLS_ISO8859_5=m
--CONFIG_NLS_ISO8859_6=m
--CONFIG_NLS_ISO8859_7=m
--CONFIG_NLS_ISO8859_9=m
--CONFIG_NLS_ISO8859_13=m
--CONFIG_NLS_ISO8859_14=m
--CONFIG_NLS_ISO8859_15=m
--CONFIG_NLS_KOI8_R=m
--CONFIG_NLS_KOI8_U=m
--CONFIG_NLS_UTF8=m
--CONFIG_DLM=m
--# CONFIG_DLM_DEBUG is not set
--
--#
--# Kernel hacking
--#
--CONFIG_TRACE_IRQFLAGS_SUPPORT=y
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--# CONFIG_ENABLE_MUST_CHECK is not set
--CONFIG_FRAME_WARN=1024
--CONFIG_MAGIC_SYSRQ=y
--CONFIG_UNUSED_SYMBOLS=y
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--# CONFIG_DETECT_SOFTLOCKUP is not set
--CONFIG_SCHED_DEBUG=y
--CONFIG_SCHEDSTATS=y
--CONFIG_TIMER_STATS=y
--# CONFIG_DEBUG_OBJECTS is not set
--# CONFIG_DEBUG_SLAB is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--# CONFIG_DEBUG_MUTEXES is not set
--# CONFIG_DEBUG_LOCK_ALLOC is not set
--# CONFIG_PROVE_LOCKING is not set
--# CONFIG_LOCK_STAT is not set
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--CONFIG_STACKTRACE=y
--# CONFIG_DEBUG_KOBJECT is not set
--CONFIG_DEBUG_BUGVERBOSE=y
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_WRITECOUNT is not set
--CONFIG_DEBUG_MEMORY_INIT=y
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_FRAME_POINTER is not set
--CONFIG_UNWIND_INFO=y
--CONFIG_STACK_UNWIND=y
--# CONFIG_BOOT_PRINTK_DELAY is not set
--CONFIG_RCU_TORTURE_TEST=m
--# CONFIG_KPROBES_SANITY_TEST is not set
--CONFIG_BACKTRACE_SELF_TEST=m
--CONFIG_LKDTM=m
--# CONFIG_FAULT_INJECTION is not set
--CONFIG_LATENCYTOP=y
--CONFIG_SYSCTL_SYSCALL_CHECK=y
--CONFIG_HAVE_FTRACE=y
--CONFIG_HAVE_DYNAMIC_FTRACE=y
--# CONFIG_FTRACE is not set
--# CONFIG_IRQSOFF_TRACER is not set
--# CONFIG_SYSPROF_TRACER is not set
--# CONFIG_SCHED_TRACER is not set
--# CONFIG_CONTEXT_SWITCH_TRACER is not set
--CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
--CONFIG_DYNAMIC_PRINTK_DEBUG=y
--# CONFIG_SAMPLES is not set
--CONFIG_HAVE_ARCH_KGDB=y
--# CONFIG_KGDB is not set
--# CONFIG_STRICT_DEVMEM is not set
--# CONFIG_X86_VERBOSE_BOOTUP is not set
--CONFIG_EARLY_PRINTK=y
--CONFIG_EARLY_PRINTK_DBGP=y
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUG_PER_CPU_MAPS is not set
--# CONFIG_X86_PTDUMP is not set
--CONFIG_DEBUG_RODATA=y
--# CONFIG_DEBUG_RODATA_TEST is not set
--# CONFIG_DEBUG_NX_TEST is not set
--# CONFIG_IOMMU_DEBUG is not set
--# CONFIG_MMIOTRACE is not set
--CONFIG_IO_DELAY_TYPE_0X80=0
--CONFIG_IO_DELAY_TYPE_0XED=1
--CONFIG_IO_DELAY_TYPE_UDELAY=2
--CONFIG_IO_DELAY_TYPE_NONE=3
--CONFIG_IO_DELAY_0X80=y
--# CONFIG_IO_DELAY_0XED is not set
--# CONFIG_IO_DELAY_UDELAY is not set
--# CONFIG_IO_DELAY_NONE is not set
--CONFIG_DEFAULT_IO_DELAY_TYPE=0
--# CONFIG_DEBUG_BOOT_PARAMS is not set
--# CONFIG_CPA_DEBUG is not set
--# CONFIG_OPTIMIZE_INLINING is not set
--CONFIG_KDB=y
--CONFIG_KDB_MODULES=m
--CONFIG_KDB_OFF=y
--CONFIG_KDB_CONTINUE_CATASTROPHIC=0
--CONFIG_KDB_USB=y
--CONFIG_KDB_KDUMP=y
--
--#
--# Security options
--#
--CONFIG_KEYS=y
--CONFIG_KEYS_DEBUG_PROC_KEYS=y
--CONFIG_SECURITY=y
--CONFIG_SECURITY_DEFAULT="apparmor"
--CONFIG_SECURITY_NETWORK=y
--# CONFIG_SECURITY_NETWORK_XFRM is not set
--CONFIG_SECURITY_FILE_CAPABILITIES=y
--CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
--CONFIG_SECURITY_SELINUX=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM=y
--CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
--CONFIG_SECURITY_SELINUX_DISABLE=y
--CONFIG_SECURITY_SELINUX_DEVELOP=y
--CONFIG_SECURITY_SELINUX_AVC_STATS=y
--CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
--CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
--# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
--CONFIG_SECURITY_APPARMOR=y
--CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
--CONFIG_SECURITY_APPARMOR_DISABLE=y
--CONFIG_XOR_BLOCKS=m
--CONFIG_ASYNC_CORE=m
--CONFIG_ASYNC_MEMCPY=m
--CONFIG_ASYNC_XOR=m
--CONFIG_CRYPTO=y
--
--#
--# Crypto core or helper
--#
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_AEAD=m
--CONFIG_CRYPTO_BLKCIPHER=m
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_GF128MUL=m
--CONFIG_CRYPTO_NULL=m
--CONFIG_CRYPTO_CRYPTD=m
--CONFIG_CRYPTO_AUTHENC=m
--CONFIG_CRYPTO_TEST=m
--
--#
--# Authenticated Encryption with Associated Data
--#
--CONFIG_CRYPTO_CCM=m
--CONFIG_CRYPTO_GCM=m
--CONFIG_CRYPTO_SEQIV=m
--
--#
--# Block modes
--#
--CONFIG_CRYPTO_CBC=m
--CONFIG_CRYPTO_CTR=m
--CONFIG_CRYPTO_CTS=m
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_LRW=m
--CONFIG_CRYPTO_PCBC=m
--CONFIG_CRYPTO_XTS=m
--
--#
--# Hash modes
--#
--CONFIG_CRYPTO_HMAC=y
--CONFIG_CRYPTO_XCBC=m
--
--#
--# Digest
--#
--CONFIG_CRYPTO_CRC32C=m
--CONFIG_CRYPTO_MD4=m
--CONFIG_CRYPTO_MD5=m
--CONFIG_CRYPTO_MICHAEL_MIC=m
--CONFIG_CRYPTO_RMD128=m
--CONFIG_CRYPTO_RMD160=m
--CONFIG_CRYPTO_RMD256=m
--CONFIG_CRYPTO_RMD320=m
--CONFIG_CRYPTO_SHA1=m
--CONFIG_CRYPTO_SHA256=m
--CONFIG_CRYPTO_SHA512=m
--CONFIG_CRYPTO_TGR192=m
--CONFIG_CRYPTO_WP512=m
--
--#
--# Ciphers
--#
--CONFIG_CRYPTO_AES=m
--CONFIG_CRYPTO_AES_X86_64=m
--CONFIG_CRYPTO_ANUBIS=m
--CONFIG_CRYPTO_ARC4=m
--CONFIG_CRYPTO_BLOWFISH=m
--CONFIG_CRYPTO_CAMELLIA=m
--CONFIG_CRYPTO_CAST5=m
--CONFIG_CRYPTO_CAST6=m
--CONFIG_CRYPTO_DES=m
--CONFIG_CRYPTO_FCRYPT=m
--CONFIG_CRYPTO_KHAZAD=m
--CONFIG_CRYPTO_SALSA20=m
--CONFIG_CRYPTO_SALSA20_X86_64=m
--CONFIG_CRYPTO_SEED=m
--CONFIG_CRYPTO_SERPENT=m
--CONFIG_CRYPTO_TEA=m
--# CONFIG_CRYPTO_TWOFISH is not set
--CONFIG_CRYPTO_TWOFISH_COMMON=m
--CONFIG_CRYPTO_TWOFISH_X86_64=m
--
--#
--# Compression
--#
--CONFIG_CRYPTO_DEFLATE=m
--CONFIG_CRYPTO_LZO=m
--CONFIG_CRYPTO_HW=y
--CONFIG_CRYPTO_DEV_HIFN_795X=m
--CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
--CONFIG_HAVE_KVM=y
--CONFIG_VIRTUALIZATION=y
--CONFIG_KVM_KMP=y
--# CONFIG_KVM is not set
--CONFIG_VIRTIO=m
--CONFIG_VIRTIO_RING=m
--CONFIG_VIRTIO_PCI=m
--CONFIG_VIRTIO_BALLOON=m
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--CONFIG_GENERIC_FIND_FIRST_BIT=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--CONFIG_CRC_CCITT=m
--CONFIG_CRC16=m
--CONFIG_CRC_T10DIF=m
--CONFIG_CRC_ITU_T=m
--CONFIG_CRC32=y
--CONFIG_CRC7=m
--CONFIG_LIBCRC32C=m
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=m
--CONFIG_LZO_COMPRESS=m
--CONFIG_LZO_DECOMPRESS=m
--CONFIG_GENERIC_ALLOCATOR=y
--CONFIG_REED_SOLOMON=m
--CONFIG_REED_SOLOMON_DEC16=y
--CONFIG_TEXTSEARCH=y
--CONFIG_TEXTSEARCH_KMP=m
--CONFIG_TEXTSEARCH_BM=m
--CONFIG_TEXTSEARCH_FSM=m
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--CONFIG_CHECK_SIGNATURE=y
-diff --git a/lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch b/lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch
-deleted file mode 100644
-index dea7372..0000000
---- a/lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch
-+++ /dev/null
-@@ -1,11 +0,0 @@
----- linux-2.6.27.19-5.orig/include/linux/blkdev.h	2009-03-17 12:48:06.000000000 -0400
--+++ linux-2.6.27.19-5/include/linux/blkdev.h	2009-09-04 18:04:43.000000000 -0400
--@@ -904,7 +904,7 @@ extern void blk_set_cmd_filter_defaults(
-- #define MAX_PHYS_SEGMENTS 128
-- #define MAX_HW_SEGMENTS 128
-- #define SAFE_MAX_SECTORS 255
---#define BLK_DEF_MAX_SECTORS 1024
--+#define BLK_DEF_MAX_SECTORS 2048
-- 
-- #define MAX_SEGMENT_SIZE	65536
-- 
-diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch
-new file mode 100644
-index 0000000..dd93552
---- /dev/null
-+++ b/lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch
-@@ -0,0 +1,119 @@
-+--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
-++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
-+@@ -19,6 +19,12 @@
-+ 
-+ unsigned long blk_max_pfn;
-+ 
-++int default_max_sectors = BLK_DEF_MAX_SECTORS;
-++module_param(default_max_sectors, int, 0);
-++
-++int default_max_segments = BLK_MAX_SEGMENTS;
-++module_param(default_max_segments, int, 0);
-++
-+ /**
-+  * blk_queue_prep_rq - set a prepare_request function for queue
-+  * @q:		queue
-+@@ -108,7 +114,7 @@
-+  */
-+ void blk_set_default_limits(struct queue_limits *lim)
-+ {
-+-	lim->max_segments = BLK_MAX_SEGMENTS;
-++	lim->max_segments = default_max_segments;
-+ 	lim->max_integrity_segments = 0;
-+ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
-+ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
-+@@ -255,7 +261,7 @@
-+ 
-+ 	limits->max_hw_sectors = max_hw_sectors;
-+ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
-+-				    BLK_DEF_MAX_SECTORS);
-++				    default_max_sectors);
-+ }
-+ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
-+ 
-+--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
-++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
-+@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
-+	  there should be no noticeable performance impact as long as you have
-+	  logging turned off.
-+ 
-++config SCSI_MAX_SG_SEGMENTS
-++	int "Maximum SCSI scatter gather segment size"
-++	range 32 256 
-++	default "128"
-++	depends on SCSI
-++	help
-++	  Control the maximum limit for scatter gather buffers for the
-++	  SCSI device.
-++
-+ config SCSI_SCAN_ASYNC
-+ 	bool "Asynchronous SCSI scanning"
-+ 	depends on SCSI
-+--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
-++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
-+@@ -20,7 +20,7 @@ struct scsi_cmnd;
-+  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
-+  * minimum value is 32
-+  */
-+-#define SCSI_MAX_SG_SEGMENTS	128
-++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
-+ 
-+ /*
-+  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
-+--- a/drivers/scsi/isci/init.c	2013-02-08 10:13:00.000000000 -0500
-++++ b/drivers/scsi/isci/init.c	2013-02-08 10:15:04.000000000 -0500
-+@@ -118,6 +118,10 @@ unsigned char phy_gen = 3;
-+ module_param(phy_gen, byte, 0);
-+ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
-+ 
-++u16 sg_table_size = SG_ALL;
-++module_param(sg_table_size, ushort, 0);
-++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
-++
-+ unsigned char max_concurr_spinup = 1;
-+ module_param(max_concurr_spinup, byte, 0);
-+ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
-+@@ -155,7 +159,6 @@ static struct scsi_host_template isci_sh
-+ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
-+ 	.cmd_per_lun			= 1,
-+ 	.this_id			= -1,
-+-	.sg_tablesize			= SG_ALL,
-+ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
-+ 	.use_clustering			= ENABLE_CLUSTERING,
-+ 	.eh_device_reset_handler	= sas_eh_device_reset_handler,
-+@@ -407,6 +410,7 @@ static struct isci_host *isci_host_alloc
-+ 	isci_host->pdev = pdev;
-+ 	isci_host->id = id;
-+ 
-++	isci_sht.sg_tablesize = sg_table_size;
-+ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
-+ 	if (!shost)
-+ 		return NULL;
-+--- a/drivers/message/fusion/Kconfig	2013-02-08 10:21:25.000000000 -0500
-++++ b/drivers/message/fusion/Kconfig	2013-02-08 10:22:37.000000000 -0500
-+@@ -61,9 +61,9 @@
-+ 	  LSISAS1078
-+ 
-+ config FUSION_MAX_SGE
-+-	int "Maximum number of scatter gather entries for SAS and SPI (16 - 128)"
-+-	default "128"
-+-	range 16 128
-++	int "Maximum number of scatter gather entries for SAS and SPI (16 - 256)"
-++	default "256"
-++	range 16 256 
-+ 	help
-+ 	  This option allows you to specify the maximum number of scatter-
-+ 	  gather entries per I/O. The driver default is 128, which matches
-+--- a/drivers/message/fusion/mptbase.h	2013-02-08 10:32:45.000000000 -0500
-++++ b/drivers/message/fusion/mptbase.h	2013-02-08 10:32:55.000000000 -0500
-+@@ -168,8 +168,8 @@
-+ #ifdef  CONFIG_FUSION_MAX_SGE
-+ #if     CONFIG_FUSION_MAX_SGE  < 16
-+ #define MPT_SCSI_SG_DEPTH	16
-+-#elif   CONFIG_FUSION_MAX_SGE  > 128
-+-#define MPT_SCSI_SG_DEPTH	128
-++#elif   CONFIG_FUSION_MAX_SGE  > 256
-++#define MPT_SCSI_SG_DEPTH	256
-+ #else
-+ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
-+ #endif
-diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
-new file mode 100644
-index 0000000..1a98fb5
---- /dev/null
-+++ b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
-@@ -0,0 +1,128 @@
-+--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
-++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
-+@@ -19,6 +19,12 @@
-+ 
-+ unsigned long blk_max_pfn;
-+ 
-++int default_max_sectors = BLK_DEF_MAX_SECTORS;
-++module_param(default_max_sectors, int, 0);
-++
-++int default_max_segments = BLK_MAX_SEGMENTS;
-++module_param(default_max_segments, int, 0);
-++
-+ /**
-+  * blk_queue_prep_rq - set a prepare_request function for queue
-+  * @q:		queue
-+@@ -108,7 +114,7 @@
-+  */
-+ void blk_set_default_limits(struct queue_limits *lim)
-+ {
-+-	lim->max_segments = BLK_MAX_SEGMENTS;
-++	lim->max_segments = default_max_segments;
-+ 	lim->max_integrity_segments = 0;
-+ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
-+ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
-+@@ -255,7 +261,7 @@
-+ 
-+ 	limits->max_hw_sectors = max_hw_sectors;
-+ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
-+-				    BLK_DEF_MAX_SECTORS);
-++				    default_max_sectors);
-+ }
-+ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
-+ 
-+--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
-++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
-+@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
-+	  there should be no noticeable performance impact as long as you have
-+	  logging turned off.
-+ 
-++config SCSI_MAX_SG_SEGMENTS
-++	int "Maximum SCSI scatter gather segment size"
-++	range 32 256 
-++	default "128"
-++	depends on SCSI
-++	help
-++	  Control the maximum limit for scatter gather buffers for the
-++	  SCSI device.
-++
-+ config SCSI_SCAN_ASYNC
-+ 	bool "Asynchronous SCSI scanning"
-+ 	depends on SCSI
-+--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
-++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
-+@@ -20,7 +20,7 @@ struct scsi_cmnd;
-+  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
-+  * minimum value is 32
-+  */
-+-#define SCSI_MAX_SG_SEGMENTS	128
-++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
-+ 
-+ /*
-+  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
-+--- a/drivers/scsi/isci/init.c	2013-02-07 09:59:49.000000000 -0500
-++++ b/drivers/scsi/isci/init.c	2013-02-07 10:01:51.000000000 -0500
-+@@ -119,6 +119,10 @@
-+ module_param(phy_gen, byte, 0);
-+ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
-+ 
-++u16 sg_table_size = SG_ALL;
-++module_param(sg_table_size, ushort, 0);
-++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
-++
-+ unsigned char max_concurr_spinup;
-+ module_param(max_concurr_spinup, byte, 0);
-+ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
-+@@ -163,7 +167,6 @@
-+ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
-+ 	.cmd_per_lun			= 1,
-+ 	.this_id			= -1,
-+-	.sg_tablesize			= SG_ALL,
-+ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
-+ 	.use_clustering			= ENABLE_CLUSTERING,
-+ 	.eh_abort_handler		= sas_eh_abort_handler,
-+@@ -573,6 +576,7 @@
-+ 
-+ 		INIT_LIST_HEAD(&idev->node);
-+ 	}
-++	isci_sht.sg_tablesize = sg_table_size;
-+ 
-+ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
-+ 	if (!shost)
-+Increase MAX_SGE for fusion mpt driver.
-+
-+Index: linux-2.6.32.i386/drivers/message/fusion/Kconfig
-+===================================================================
-+--- linux-2.6.32.i386.orig/drivers/message/fusion/Kconfig	2009-12-03 09:21:21.000000000 +0530
-++++ linux-2.6.32.i386/drivers/message/fusion/Kconfig	2010-03-16 16:45:08.000000000 +0530
-+@@ -61,9 +61,9 @@
-+ 	  LSISAS1078
-+ 
-+ config FUSION_MAX_SGE
-+-	int "Maximum number of scatter gather entries (16 - 128)"
-+-	default "128"
-+-	range 16 128
-++	int "Maximum number of scatter gather entries (16 - 256)"
-++	default "256"
-++	range 16 256
-+ 	help
-+ 	  This option allows you to specify the maximum number of scatter-
-+ 	  gather entries per I/O. The driver default is 128, which matches
-+Index: linux-2.6.32.i386/drivers/message/fusion/mptbase.h
-+===================================================================
-+--- linux-2.6.32.i386.orig/drivers/message/fusion/mptbase.h	2009-12-03 09:21:21.000000000 +0530
-++++ linux-2.6.32.i386/drivers/message/fusion/mptbase.h	2010-03-16 16:46:54.000000000 +0530
-+@@ -165,10 +165,10 @@
-+  * Set the MAX_SGE value based on user input.
-+  */
-+ #ifdef CONFIG_FUSION_MAX_SGE
-+-#if CONFIG_FUSION_MAX_SGE  < 16
-++#if CONFIG_FUSION_MAX_SGE < 16
-+ #define MPT_SCSI_SG_DEPTH	16
-+-#elif CONFIG_FUSION_MAX_SGE  > 128
-+-#define MPT_SCSI_SG_DEPTH	128
-++#elif CONFIG_FUSION_MAX_SGE > 256
-++#define MPT_SCSI_SG_DEPTH	256
-+ #else
-+ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
-+ #endif
-diff --git a/lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch b/lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch
-deleted file mode 100644
-index 8e465e2..0000000
---- a/lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch
-+++ /dev/null
-@@ -1,166 +0,0 @@
--This patch is no longer needed for Lustre.  It is only included
--for testing and ease of using the same kernel with older Lustre
--versions.  This testing functionality was replaced in Linux 3.0
--by the dm-flakey driver.
--
--This functionality is mainly used during testing, in order to
--simulate a server crash for ldiskfs by discarding all of the
--writes to the filesystem.  For recovery testing we could simulate
--this by using a special loopback or DM device that also discards
--writes to the device.
--
--This functionality is also used by target "failback" in order
--to speed up service shutdown and takeover by the other node
--during controlled operation.  However, it would also be possible
--to do this by simply allowing all of the in-flight requests to
--complete and then waiting for the service to stop.  This will
--also be needed by the DMU-OSD, because discarding of writes on
--a DMU-based target is not safe as it could trigger a storage
--failure if the data is ever read from disk again and the
--checksum does not match that expected by the block pointer.
--
--Index: linux-2.6.27.21-0.1/block/blk-core.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/block/blk-core.c	2009-04-23 02:12:51.000000000 -0600
--+++ linux-2.6.27.21-0.1/block/blk-core.c	2009-05-22 08:38:02.000000000 -0600
--@@ -1335,6 +1335,8 @@
-- 
-- #endif /* CONFIG_FAIL_MAKE_REQUEST */
-- 
--+int dev_check_rdonly(struct block_device *bdev);
--+
-- /*
--  * Check whether this bio extends beyond the end of the device.
--  */
--@@ -1436,6 +1438,12 @@
-- 
-- 		if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
-- 			goto end_io;
--
--+               /* this is cfs's dev_rdonly check */
--+               if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
--+                       bio_endio(bio, bio->bi_size, 0);
--+                       break;
--+               }
--+
-- 		if (should_fail_request(bio))
-- 			goto end_io;
--@@ -2189,6 +2197,91 @@
-- }
-- EXPORT_SYMBOL(kblockd_flush_work);
-- 
--+ /*
--+ * Debug code for turning block devices "read-only" (will discard writes
--+ * silently).  This is for filesystem crash/recovery testing.
--+ */
--+struct deventry {
--+	dev_t dev;
--+	struct deventry *next;
--+};
--+
--+static struct deventry *devlist = NULL;
--+static spinlock_t devlock = SPIN_LOCK_UNLOCKED; 
--+
--+int dev_check_rdonly(struct block_device *bdev) 
--+{
--+	struct deventry *cur;
--+	if (!bdev) return 0;
--+	spin_lock(&devlock);
--+	cur = devlist;
--+	while(cur) {
--+		if (bdev->bd_dev == cur->dev) {
--+			spin_unlock(&devlock);
--+			return 1;
--+	}
--+		cur = cur->next;
--+	}
--+	spin_unlock(&devlock);
--+	return 0;
--+}
--+
--+void dev_set_rdonly(struct block_device *bdev)
--+{
--+	struct deventry *newdev, *cur;
--+
--+	if (!bdev) 
--+		return;
--+	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
--+	if (!newdev) 
--+		return;
--+	
--+	spin_lock(&devlock);
--+	cur = devlist;
--+	while(cur) {
--+		if (bdev->bd_dev == cur->dev) {
--+			spin_unlock(&devlock);
--+			kfree(newdev);
--+			return;
--+		}
--+		cur = cur->next;
--+	}
--+	newdev->dev = bdev->bd_dev;
--+	newdev->next = devlist;
--+	devlist = newdev;
--+	spin_unlock(&devlock);
--+	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
--+	       bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
--+}
--+
--+void dev_clear_rdonly(struct block_device *bdev) 
--+{
--+	struct deventry *cur, *last = NULL;
--+	if (!bdev) return;
--+	spin_lock(&devlock);
--+	cur = devlist;
--+	while(cur) {
--+		if (bdev->bd_dev == cur->dev) {
--+			if (last) 
--+				last->next = cur->next;
--+			else
--+				devlist = cur->next;
--+			spin_unlock(&devlock);
--+			kfree(cur);
--+			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
--+			       bdev->bd_disk ? bdev->bd_disk->disk_name :
--+					       "unknown block", bdev->bd_dev);
--+			return;
--+		}
--+		last = cur;
--+		cur = cur->next;
--+	}
--+	spin_unlock(&devlock);
--+}
--+
--+EXPORT_SYMBOL(dev_set_rdonly);
--+EXPORT_SYMBOL(dev_clear_rdonly);
--+EXPORT_SYMBOL(dev_check_rdonly);
-- int __init blk_dev_init(void)
-- {
-- 	kblockd_workqueue = create_workqueue("kblockd");
--Index: linux-2.6.27.21-0.1/fs/block_dev.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/fs/block_dev.c	2009-04-23 02:12:56.000000000 -0600
--+++ linux-2.6.27.21-0.1/fs/block_dev.c	2009-05-22 08:38:02.000000000 -0600
--@@ -1208,6 +1208,7 @@
-- 		if (bdev != bdev->bd_contains)
-- 			victim = bdev->bd_contains;
-- 		bdev->bd_contains = NULL;
--+		dev_clear_rdonly(bdev);
-- 	}
-- 	unlock_kernel();
-- 	mutex_unlock(&bdev->bd_mutex);
--Index: linux-2.6.27.21-0.1/include/linux/fs.h
--===================================================================
----- linux-2.6.27.21-0.1.orig/include/linux/fs.h	2009-05-22 08:38:00.000000000 -0600
--+++ linux-2.6.27.21-0.1/include/linux/fs.h	2009-05-22 08:38:02.000000000 -0600
--@@ -1898,6 +1898,10 @@
-- extern void submit_bio(int, struct bio *);
-- extern int bdev_read_only(struct block_device *);
-- #endif
--+#define HAVE_CLEAR_RDONLY_ON_PUT
--+extern void dev_set_rdonly(struct block_device *bdev);
--+extern int dev_check_rdonly(struct block_device *bdev);
--+extern void dev_clear_rdonly(struct block_device *bdev);
-- extern int set_blocksize(struct block_device *, int);
-- extern int sb_set_blocksize(struct super_block *, int);
-- extern int sb_min_blocksize(struct super_block *, int);
-diff --git a/lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch b/lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch
-new file mode 100644
-index 0000000..8d03b19
---- /dev/null
-+++ b/lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch
-@@ -0,0 +1,174 @@
-+This patch is no longer needed for Lustre.  It is only included
-+for testing and ease of using the same kernel with older Lustre
-+versions.  This testing functionality was replaced in Linux 3.0
-+by the dm-flakey driver.
-+
-+This functionality is mainly used during testing, in order to
-+simulate a server crash for ldiskfs by discarding all of the
-+writes to the filesystem.  For recovery testing we could simulate
-+this by using a special loopback or DM device that also discards
-+writes to the device.
-+
-+This functionality is also used by target "failback" in order
-+to speed up service shutdown and takeover by the other node
-+during controlled operation.  However, it would also be possible
-+to do this by simply allowing all of the in-flight requests to
-+complete and then waiting for the service to stop.  This will
-+also be needed by the DMU-OSD, because discarding of writes on
-+a DMU-based target is not safe as it could trigger a storage
-+failure if the data is ever read from disk again and the
-+checksum does not match that expected by the block pointer.
-+
-+Index: linux-3.0/block/blk-core.c
-+===================================================================
-+--- linux-3.0.orig/block/blk-core.c	2013-01-25 11:25:32.000000000 -0500
-++++ linux-3.0/block/blk-core.c	2013-01-25 11:31:53.000000000 -0500
-+@@ -1390,6 +1390,8 @@
-+ 
-+ #endif /* CONFIG_FAIL_MAKE_REQUEST */
-+ 
-++int dev_check_rdonly(struct block_device *bdev);
-++
-+ /*
-+  * Check whether this bio extends beyond the end of the device.
-+  */
-+@@ -1491,6 +1493,12 @@
-+ 		if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
-+ 			goto end_io;
-+ 
-++		/* this is cfs's dev_rdonly check */
-++		if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
-++			err = 0;
-++			goto end_io;
-++		}
-++
-+ 		if (should_fail_request(bio))
-+ 			goto end_io;
-+ 
-+@@ -2796,6 +2804,99 @@
-+ }
-+ EXPORT_SYMBOL(blk_finish_plug);
-+ 
-++/*
-++ * Debug code for turning block devices "read-only" (will discard writes
-++ * silently).  This is for filesystem crash/recovery testing.
-++ */
-++struct deventry {
-++	dev_t dev;
-++	struct deventry *next;
-++};
-++
-++static struct deventry *devlist = NULL;
-++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
-++
-++int dev_check_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur;
-++
-++	if (!bdev)
-++		return 0;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			return 1;
-++		}
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++	return 0;
-++}
-++
-++void dev_set_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *newdev, *cur;
-++
-++	if (!bdev)
-++		return;
-++
-++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-++	if (!newdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			kfree(newdev);
-++			return;
-++		}
-++		cur = cur->next;
-++	}
-++	newdev->dev = bdev->bd_dev;
-++	newdev->next = devlist;
-++	devlist = newdev;
-++	spin_unlock(&devlock);
-++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
-++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
-++}
-++
-++void dev_clear_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur, *last = NULL;
-++
-++	if (!bdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			if (last)
-++				last->next = cur->next;
-++			else
-++				devlist = cur->next;
-++			spin_unlock(&devlock);
-++			kfree(cur);
-++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
-++				bdev->bd_disk ? bdev->bd_disk->disk_name :
-++				"unknown block", bdev->bd_dev);
-++			return;
-++		}
-++		last = cur;
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++}
-++
-++EXPORT_SYMBOL(dev_set_rdonly);
-++EXPORT_SYMBOL(dev_clear_rdonly);
-++EXPORT_SYMBOL(dev_check_rdonly);
-++
-+ int __init blk_dev_init(void)
-+ {
-+ 	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
-+Index: linux-2.6.32-131.0.15.el6.x86_64/fs/block_dev.c
-+===================================================================
-+--- linux-2.6.32-131.0.15.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
-++++ linux-2.6.32-131.0.15.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
-+@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
-+ 		if (bdev != bdev->bd_contains)
-+ 			victim = bdev->bd_contains;
-+ 		bdev->bd_contains = NULL;
-++		dev_clear_rdonly(bdev);
-+
-+		put_disk(disk);
-+		module_put(owner);
-+Index: linux-2.6.32-131.0.15.el6.x86_64/include/linux/fs.h
-+===================================================================
-+--- linux-2.6.32-131.0.15.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
-++++ linux-2.6.32-131.0.15.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
-+@@ -2244,6 +2244,10 @@ struct bio;
-+ extern void submit_bio(int, struct bio *);
-+ extern int bdev_read_only(struct block_device *);
-+ #endif
-++#define HAVE_CLEAR_RDONLY_ON_PUT
-++extern void dev_set_rdonly(struct block_device *bdev);
-++extern int dev_check_rdonly(struct block_device *bdev);
-++extern void dev_clear_rdonly(struct block_device *bdev);
-+ extern int set_blocksize(struct block_device *, int);
-+ extern int sb_set_blocksize(struct super_block *, int);
-+ extern int sb_min_blocksize(struct super_block *, int);
-diff --git a/lustre/kernel_patches/patches/dev_read_only-3.7.patch b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
-new file mode 100644
-index 0000000..7fb0b98
---- /dev/null
-+++ b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
-@@ -0,0 +1,174 @@
-+This patch is no longer needed for Lustre.  It is only included
-+for testing and ease of using the same kernel with older Lustre
-+versions.  This testing functionality was replaced in Linux 3.0
-+by the dm-flakey driver.
-+
-+This functionality is mainly used during testing, in order to
-+simulate a server crash for ldiskfs by discarding all of the
-+writes to the filesystem.  For recovery testing we could simulate
-+this by using a special loopback or DM device that also discards
-+writes to the device.
-+
-+This functionality is also used by target "failback" in order
-+to speed up service shutdown and takeover by the other node
-+during controlled operation.  However, it would also be possible
-+to do this by simply allowing all of the in-flight requests to
-+complete and then waiting for the service to stop.  This will
-+also be needed by the DMU-OSD, because discarding of writes on
-+a DMU-based target is not safe as it could trigger a storage
-+failure if the data is ever read from disk again and the
-+checksum does not match that expected by the block pointer.
-+
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/block/blk-core.c	2012-09-30 19:47:46.000000000 -0400
-++++ linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c	2012-11-16 11:35:04.419174277 -0500
-+@@ -1606,6 +1606,8 @@ static inline bool should_fail_request(s
-+
-+ #endif /* CONFIG_FAIL_MAKE_REQUEST */
-+
-++int dev_check_rdonly(struct block_device *bdev);
-++
-+ /*
-+  * Check whether this bio extends beyond the end of the device.
-+  */
-+@@ -1668,6 +1670,12 @@ generic_make_request_checks(struct bio *
-+		goto end_io;
-+	}
-+
-++	/* this is cfs's dev_rdonly check */
-++	if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
-++		err = 0;
-++		goto end_io;
-++	}
-++
-+	part = bio->bi_bdev->bd_part;
-+	if (should_fail_request(part, bio->bi_size) ||
-+	    should_fail_request(&part_to_disk(part)->part0,
-+@@ -3034,6 +3042,99 @@ void blk_finish_plug(struct blk_plug *pl
-+ }
-+ EXPORT_SYMBOL(blk_finish_plug);
-+
-++/*
-++ * Debug code for turning block devices "read-only" (will discard writes
-++ * silently).  This is for filesystem crash/recovery testing.
-++ */
-++struct deventry {
-++	dev_t dev;
-++	struct deventry *next;
-++};
-++
-++static struct deventry *devlist = NULL;
-++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
-++
-++int dev_check_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur;
-++
-++	if (!bdev)
-++		return 0;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			return 1;
-++		}
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++	return 0;
-++}
-++
-++void dev_set_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *newdev, *cur;
-++
-++	if (!bdev)
-++		return;
-++
-++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
-++	if (!newdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			spin_unlock(&devlock);
-++			kfree(newdev);
-++			return;
-++		}
-++		cur = cur->next;
-++	}
-++	newdev->dev = bdev->bd_dev;
-++	newdev->next = devlist;
-++	devlist = newdev;
-++	spin_unlock(&devlock);
-++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
-++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
-++}
-++
-++void dev_clear_rdonly(struct block_device *bdev)
-++{
-++	struct deventry *cur, *last = NULL;
-++
-++	if (!bdev)
-++		return;
-++
-++	spin_lock(&devlock);
-++	cur = devlist;
-++	while(cur) {
-++		if (bdev->bd_dev == cur->dev) {
-++			if (last)
-++				last->next = cur->next;
-++			else
-++				devlist = cur->next;
-++			spin_unlock(&devlock);
-++			kfree(cur);
-++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
-++				bdev->bd_disk ? bdev->bd_disk->disk_name :
-++				"unknown block", bdev->bd_dev);
-++			return;
-++		}
-++		last = cur;
-++		cur = cur->next;
-++	}
-++	spin_unlock(&devlock);
-++}
-++
-++EXPORT_SYMBOL(dev_set_rdonly);
-++EXPORT_SYMBOL(dev_clear_rdonly);
-++EXPORT_SYMBOL(dev_check_rdonly);
-++
-+ int __init blk_dev_init(void)
-+ {
-+	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
-++++ linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
-+@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
-+		if (bdev != bdev->bd_contains)
-+			victim = bdev->bd_contains;
-+		bdev->bd_contains = NULL;
-++		dev_clear_rdonly(bdev);
-+
-+		put_disk(disk);
-+		module_put(owner);
-+Index: linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h
-+===================================================================
-+--- linux-3.6.0-0.3.fc.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
-++++ linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
-+@@ -2244,6 +2244,10 @@ struct bio;
-+ extern void submit_bio(int, struct bio *);
-+ extern int bdev_read_only(struct block_device *);
-+ #endif
-++#define HAVE_CLEAR_RDONLY_ON_PUT
-++extern void dev_set_rdonly(struct block_device *bdev);
-++extern int dev_check_rdonly(struct block_device *bdev);
-++extern void dev_clear_rdonly(struct block_device *bdev);
-+ extern int set_blocksize(struct block_device *, int);
-+ extern int sb_set_blocksize(struct super_block *, int);
-+ extern int sb_min_blocksize(struct super_block *, int);
-diff --git a/lustre/kernel_patches/patches/export-2.6.27-vanilla.patch b/lustre/kernel_patches/patches/export-2.6.27-vanilla.patch
-deleted file mode 100644
-index 9575561..0000000
---- a/lustre/kernel_patches/patches/export-2.6.27-vanilla.patch
-+++ /dev/null
-@@ -1,24 +0,0 @@
--Index: linux-2.6/fs/jbd/journal.c
--===================================================================
----- linux-2.6.orig/fs/jbd2/journal.c	2006-07-15 16:13:50.000000000 +0800
--+++ linux-2.6/fs/jbd2/journal.c	2006-07-15 16:22:04.000000000 +0800
--@@ -74,6 +74,7 @@ EXPORT_SYMBOL(journal_abort);
-- 	spin_unlock(&journal->j_state_lock);
-- 	return ret;
-- }
--+EXPORT_SYMBOL(jbd2_log_start_commit);
-- 
-- /*
--  * Force and wait upon a commit if the calling process is not within
--Index: linux-2.6/kernel/sys.c
--===================================================================
----- linux-2.6.orig/security/security.c
--+++ linux-2.6/security/security.c
--@@ -74,6 +74,7 @@
-- 		return 0;
-- 	return security_ops->inode_unlink(dir, dentry, mnt);
-- }
--+EXPORT_SYMBOL(security_inode_unlink);
-- 
-- int security_inode_symlink(struct inode *dir, struct dentry *dentry,
-- 			   struct vfsmount *mnt, const char *old_name)
-diff --git a/lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch b/lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch
-deleted file mode 100644
-index 1940403..0000000
---- a/lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch
-+++ /dev/null
-@@ -1,70 +0,0 @@
--This patch is needed to allow sharing the kernel with 1.8, and until
--the MGS and llog code has been moved over to using the OSD interface.
--
--Index: linux-2.6.22.5/fs/dcache.c
--===================================================================
----- linux-2.6.22.5.orig/fs/dcache.c	2008-02-21 00:56:29.000000000 -0700
--+++ linux-2.6.22.5/fs/dcache.c	2008-02-21 00:57:02.000000000 -0700
--@@ -1441,13 +1441,22 @@
--  * Adds a dentry to the hash according to its name.
--  */
--  
---void d_rehash(struct dentry * entry)
--+void d_rehash_cond(struct dentry * entry, int lock)
-- {
---	spin_lock(&dcache_lock);
--+	if (lock)
--+		spin_lock(&dcache_lock);
-- 	spin_lock(&entry->d_lock);
-- 	_d_rehash(entry);
-- 	spin_unlock(&entry->d_lock);
---	spin_unlock(&dcache_lock);
--+	if (lock)
--+		spin_unlock(&dcache_lock);
--+}
--+
--+EXPORT_SYMBOL(d_rehash_cond);
--+
--+void d_rehash(struct dentry * entry)
--+{
--+	d_rehash_cond(entry, 1);
-- }
-- 
-- #define do_switch(x,y) do { \
--@@ -1537,7 +1546,7 @@
--  * Update the dcache to reflect the move of a file name. Negative
--  * dcache entries should not be moved in this way.
--  */
---static void d_move_locked(struct dentry * dentry, struct dentry * target)
--+void d_move_locked(struct dentry * dentry, struct dentry * target)
-- {
-- 	struct hlist_head *list;
-- 
--@@ -1595,6 +1604,7 @@
-- 	spin_unlock(&dentry->d_lock);
-- 	write_sequnlock(&rename_lock);
-- }
--+EXPORT_SYMBOL(d_move_locked);
-- 
-- /**
--  * d_move - move a dentry
--Index: linux-2.6.22.5/include/linux/dcache.h
--===================================================================
----- linux-2.6.22.5.orig/include/linux/dcache.h	2008-02-21 00:56:29.000000000 -0700
--+++ linux-2.6.22.5/include/linux/dcache.h	2008-02-21 00:57:02.000000000 -0700
--@@ -251,6 +251,7 @@ extern int have_submounts(struct dentry 
--  * This adds the entry to the hash queues.
--  */
-- extern void d_rehash(struct dentry *);
--+extern void d_rehash_cond(struct dentry *, int lock);
-- 
-- /**
--  * d_add - add dentry to hash queues
--@@ -286,6 +287,7 @@ static inline struct dentry *d_add_uniqu
-- 
-- /* used for rename() and baskets */
-- extern void d_move(struct dentry *, struct dentry *);
--+extern void d_move_locked(struct dentry *, struct dentry *);
-- 
-- /* appendix may either be NULL or be used for transname suffixes */
-- extern struct dentry * d_lookup(struct dentry *, struct qstr *);
-diff --git a/lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch b/lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch
-deleted file mode 100644
-index ee1f2df..0000000
---- a/lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch
-+++ /dev/null
-@@ -1,225 +0,0 @@
--This patch is no longer needed for Lustre, since Lustre 2.2.  It is kept
--in the kernel patch series for compatibility with older Lustre releases
--to simplify the upgrade process so that both the kernel and Lustre do
--not need to be upgraded at the same time.  See Jira issue LU-433.
--
--Index: linux-2.6.27.21-0.1/include/linux/jbd2.h
--===================================================================
----- linux-2.6.27.21-0.1.orig/include/linux/jbd2.h
--+++ linux-2.6.27.21-0.1/include/linux/jbd2.h
--@@ -413,6 +413,27 @@ struct jbd2_inode {
-- 	unsigned int i_flags;
-- };
-- 
--+#define HAVE_JOURNAL_CALLBACK_STATUS
--+/**
--+ *   struct journal_callback - Base structure for callback information.
--+ *   @jcb_list: list information for other callbacks attached to the same handle.
--+ *   @jcb_func: Function to call with this callback structure.
--+ *
--+ *   This struct is a 'seed' structure for a using with your own callback
--+ *   structs. If you are using callbacks you must allocate one of these
--+ *   or another struct of your own definition which has this struct
--+ *   as it's first element and pass it to journal_callback_set().
--+ *
--+ *   This is used internally by jbd2 to maintain callback information.
--+ *
--+ *   See journal_callback_set for more information.
--+ **/
--+struct journal_callback {
--+	struct list_head jcb_list;		/* t_jcb_lock */
--+	void (*jcb_func)(struct journal_callback *jcb, int error);
--+	/* user data goes here */
--+};
--+
-- struct jbd2_revoke_table_s;
-- 
-- /**
--@@ -421,6 +442,7 @@ struct jbd2_revoke_table_s;
--  * @h_transaction: Which compound transaction is this update a part of?
--  * @h_buffer_credits: Number of remaining buffers we are allowed to dirty.
--  * @h_ref: Reference count on this handle
--+ * @h_jcb: List of application registered callbacks for this handle.
--  * @h_err: Field for caller's use to track errors through large fs operations
--  * @h_sync: flag for sync-on-close
--  * @h_jdata: flag to force data journaling
--@@ -446,6 +468,13 @@ struct handle_s
-- 	/* operations */
-- 	int			h_err;
-- 
--+	/*
--+	 * List of application registered callbacks for this handle. The
--+	 * function(s) will be called after the transaction that this handle is
--+	 * part of has been committed to disk. [t_jcb_lock]
--+	 */
--+	struct list_head	h_jcb;
--+
-- 	/* Flags [no locking] */
-- 	unsigned int	h_sync:		1;	/* sync-on-close */
-- 	unsigned int	h_jdata:	1;	/* force data journaling */
--@@ -501,6 +530,8 @@ struct transaction_chp_stats_s {
--  *    j_state_lock
--  *    ->j_list_lock			(journal_unmap_buffer)
--  *
--+ *    t_handle_lock
--+ *    ->t_jcb_lock
--  */
-- 
-- struct transaction_s
--@@ -641,6 +672,15 @@ struct transaction_s
-- 	 */
-- 	int t_handle_count;
-- 
--+	/*
--+	 * Protects the callback list
--+	 */
--+	spinlock_t		t_jcb_lock;
--+	/*
--+	 * List of registered callback functions for this transaction.
--+	 * Called when the transaction is committed. [t_jcb_lock]
--+	 */
--+	struct list_head	t_jcb;
-- };
-- 
-- struct transaction_run_stats_s {
--@@ -1044,6 +1084,9 @@ extern int	 jbd2_journal_stop(handle_t *
-- extern int	 jbd2_journal_flush (journal_t *);
-- extern void	 jbd2_journal_lock_updates (journal_t *);
-- extern void	 jbd2_journal_unlock_updates (journal_t *);
--+extern void	 jbd2_journal_callback_set(handle_t *handle,
--+                                      void (*fn)(struct journal_callback *,int),
--+                                      struct journal_callback *jcb);
-- 
-- extern journal_t * jbd2_journal_init_dev(struct block_device *bdev,
-- 				struct block_device *fs_dev,
--Index: linux-2.6.27.21-0.1/fs/jbd2/checkpoint.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/fs/jbd2/checkpoint.c
--+++ linux-2.6.27.21-0.1/fs/jbd2/checkpoint.c
--@@ -728,6 +728,7 @@ void __jbd2_journal_drop_transaction(jou
-- 	J_ASSERT(transaction->t_checkpoint_list == NULL);
-- 	J_ASSERT(transaction->t_checkpoint_io_list == NULL);
-- 	J_ASSERT(transaction->t_updates == 0);
--+	J_ASSERT(list_empty(&transaction->t_jcb));
-- 	J_ASSERT(journal->j_committing_transaction != transaction);
-- 	J_ASSERT(journal->j_running_transaction != transaction);
-- 
--Index: linux-2.6.27.21-0.1/fs/jbd2/commit.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/fs/jbd2/commit.c
--+++ linux-2.6.27.21-0.1/fs/jbd2/commit.c
--@@ -805,6 +805,30 @@ wait_for_iobuf:
--            transaction can be removed from any checkpoint list it was on
--            before. */
-- 
--+	/*
--+	 * Call any callbacks that had been registered for handles in this
--+	 * transaction.  It is up to the callback to free any allocated
--+	 * memory.
--+	 *
--+	 * The spinlocking (t_jcb_lock) here is surely unnecessary...
--+	 */
--+	spin_lock(&commit_transaction->t_jcb_lock);
--+	if (!list_empty(&commit_transaction->t_jcb)) {
--+		struct list_head *p, *n;
--+		int error = is_journal_aborted(journal);
--+
--+		list_for_each_safe(p, n, &commit_transaction->t_jcb) {
--+			struct journal_callback *jcb;
--+
--+			jcb = list_entry(p, struct journal_callback, jcb_list);
--+			list_del(p);
--+			spin_unlock(&commit_transaction->t_jcb_lock);
--+			jcb->jcb_func(jcb, error);
--+			spin_lock(&commit_transaction->t_jcb_lock);
--+		}
--+	}
--+	spin_unlock(&commit_transaction->t_jcb_lock);
--+
-- 	jbd_debug(3, "JBD: commit phase 6\n");
-- 
-- 	J_ASSERT(list_empty(&commit_transaction->t_inode_list));
--Index: linux-2.6.27.21-0.1/fs/jbd2/journal.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/fs/jbd2/journal.c
--+++ linux-2.6.27.21-0.1/fs/jbd2/journal.c
--@@ -84,6 +84,8 @@ EXPORT_SYMBOL(jbd2_journal_file_inode);
-- EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
-- EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
-- EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
--+EXPORT_SYMBOL(jbd2_journal_callback_set);
--+EXPORT_SYMBOL(jbd2_journal_bmap);
-- 
-- static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
-- static void __journal_abort_soft (journal_t *journal, int errno);
--Index: linux-2.6.27.21-0.1/fs/jbd2/transaction.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/fs/jbd2/transaction.c
--+++ linux-2.6.27.21-0.1/fs/jbd2/transaction.c
--@@ -50,7 +50,9 @@ jbd2_get_transaction(journal_t *journal,
-- 	transaction->t_state = T_RUNNING;
-- 	transaction->t_tid = journal->j_transaction_sequence++;
-- 	transaction->t_expires = jiffies + journal->j_commit_interval;
--+	INIT_LIST_HEAD(&transaction->t_jcb);
-- 	spin_lock_init(&transaction->t_handle_lock);
--+	spin_lock_init(&transaction->t_jcb_lock);
-- 	INIT_LIST_HEAD(&transaction->t_inode_list);
-- 
-- 	/* Set up the commit timer for the new transaction. */
--@@ -252,6 +254,7 @@ static handle_t *new_handle(int nblocks)
-- 	memset(handle, 0, sizeof(*handle));
-- 	handle->h_buffer_credits = nblocks;
-- 	handle->h_ref = 1;
--+	INIT_LIST_HEAD(&handle->h_jcb);
-- 
-- 	lockdep_init_map(&handle->h_lockdep_map, "jbd2_handle",
-- 						&jbd2_handle_key, 0);
--@@ -1173,6 +1176,36 @@ drop:
-- }
-- 
-- /**
--+ * void jbd2_journal_callback_set() -  Register a callback function for this handle.
--+ * @handle: handle to attach the callback to.
--+ * @func: function to callback.
--+ * @jcb:  structure with additional information required by func() , and
--+ *	some space for jbd2 internal information.
--+ *
--+ * The function will be
--+ * called when the transaction that this handle is part of has been
--+ * committed to disk with the original callback data struct and the
--+ * error status of the journal as parameters.  There is no guarantee of
--+ * ordering between handles within a single transaction, nor between
--+ * callbacks registered on the same handle.
--+ *
--+ * The caller is responsible for allocating the journal_callback struct.
--+ * This is to allow the caller to add as much extra data to the callback
--+ * as needed, but reduce the overhead of multiple allocations.  The caller
--+ * allocated struct must start with a struct journal_callback at offset 0,
--+ * and has the caller-specific data afterwards.
--+ */
--+void jbd2_journal_callback_set(handle_t *handle,
--+		      void (*func)(struct journal_callback *jcb, int error),
--+		      struct journal_callback *jcb)
--+{
--+	spin_lock(&handle->h_transaction->t_jcb_lock);
--+	list_add_tail(&jcb->jcb_list, &handle->h_jcb);
--+	spin_unlock(&handle->h_transaction->t_jcb_lock);
--+	jcb->jcb_func = func;
--+}
--+
--+/**
--  * int jbd2_journal_stop() - complete a transaction
--  * @handle: tranaction to complete.
--  *
--@@ -1246,6 +1279,11 @@ int jbd2_journal_stop(handle_t *handle)
-- 			wake_up(&journal->j_wait_transaction_locked);
-- 	}
-- 
--+	/* Move callbacks from the handle to the transaction. */
--+	spin_lock(&transaction->t_jcb_lock);
--+	list_splice(&handle->h_jcb, &transaction->t_jcb);
--+	spin_unlock(&transaction->t_jcb_lock);
--+
-- 	/*
-- 	 * If the handle is marked SYNC, we need to set another commit
-- 	 * going!  We also want to force a commit if the current
-diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
-new file mode 100644
-index 0000000..70b9992
---- /dev/null
-+++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
-@@ -0,0 +1,21 @@
-+--- linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c.orig	2012-11-21 08:51:15.312175089 -0500
-++++ linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c		2012-11-21 09:02:38.415174560 -0500
-+@@ -2394,6 +2394,8 @@ static int add_stripe_bio(struct stripe_
-+		bi->bi_next = *bip;
-+	*bip = bi;
-+	raid5_inc_bi_active_stripes(bi);
-++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
-++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);	/* force to read from disk. */
-+
-+	if (forwrite) {
-+		/* check if page is covered */
-+@@ -4217,6 +4222,9 @@ static void make_request(struct mddev *m
-+
-+		bio_endio(bi, 0);
-+	}
-++
-++	if (bi->bi_rw & REQ_SYNC)
-++		md_wakeup_thread(mddev->thread);
-+ }
-+
-+ static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
-diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch
-new file mode 100644
-index 0000000..3b19291
---- /dev/null
-+++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch
-@@ -0,0 +1,29 @@
-+Force MD devices to pass SYNC reads directly to the disk
-+instead of handling from cache.  This is needed for MMP
-+on MD RAID devices, and in theory could be accepted in
-+the upstream kernel.  Not needed for DMU.
-+
-+Index: linux-3.0.35/drivers/md/raid5.c
-+===================================================================
-+--- linux-3.0.35.orig/drivers/md/raid5.c	2012-06-22 06:09:49.000000000 -0400
-++++ linux-3.0.35/drivers/md/raid5.c	2013-01-25 10:11:10.076431000 -0500
-+@@ -2169,6 +2169,9 @@ static int add_stripe_bio(struct stripe_
-+ 		bi->bi_next = *bip;
-+ 	*bip = bi;
-+ 	bi->bi_phys_segments++;
-++	/* force to read from disk. */
-++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
-++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);
-+ 	spin_unlock_irq(&conf->device_lock);
-+ 	spin_unlock(&sh->lock);
-+ 
-+@@ -4097,6 +4100,9 @@ static int make_request(mddev_t *mddev,
-+ 		bio_endio(bi, 0);
-+ 	}
-+ 
-++	if (bi->bi_rw & REQ_SYNC)
-++		md_wakeup_thread(mddev->thread);
-++
-+ 	return 0;
-+ }
-+ 
-diff --git a/lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch b/lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch
-deleted file mode 100644
-index 33faa8e..0000000
---- a/lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch
-+++ /dev/null
-@@ -1,579 +0,0 @@
--Index: linux-2.6.27.21-0.1/drivers/scsi/Kconfig
--===================================================================
----- linux-2.6.27.21-0.1.orig/drivers/scsi/Kconfig	2009-04-23 02:12:56.000000000 -0600
--+++ linux-2.6.27.21-0.1/drivers/scsi/Kconfig	2009-05-22 08:38:28.000000000 -0600
--@@ -82,6 +82,14 @@
-- 	  In this case, do not compile the driver for your SCSI host adapter
-- 	  (below) as a module either.
-- 
--+config SD_IOSTATS
--+   bool "Enable SCSI disk I/O stats"
--+   depends on BLK_DEV_SD
--+   default y
--+   ---help---
--+     This enables SCSI disk I/O stats collection.  You must also enable
--+     /proc file system support if you want this feature.
--+
-- config CHR_DEV_ST
-- 	tristate "SCSI tape support"
-- 	depends on SCSI
--Index: linux-2.6.27.21-0.1/drivers/scsi/scsi_proc.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/drivers/scsi/scsi_proc.c	2009-04-23 02:12:56.000000000 -0600
--+++ linux-2.6.27.21-0.1/drivers/scsi/scsi_proc.c	2009-05-22 08:38:28.000000000 -0600
--@@ -40,7 +40,8 @@
-- /* 4K page size, but our output routines, use some slack for overruns */
-- #define PROC_BLOCK_SIZE (3*1024)
-- 
---static struct proc_dir_entry *proc_scsi;
--+struct proc_dir_entry *proc_scsi;
--+EXPORT_SYMBOL(proc_scsi);
-- 
-- /* Protect sht->present and sht->proc_dir */
-- static DEFINE_MUTEX(global_host_template_mutex);
--Index: linux-2.6.27.21-0.1/drivers/scsi/sd.c
--===================================================================
----- linux-2.6.27.21-0.1.orig/drivers/scsi/sd.c	2009-04-23 02:12:56.000000000 -0600
--+++ linux-2.6.27.21-0.1/drivers/scsi/sd.c	2009-05-22 08:38:28.000000000 -0600
--@@ -108,6 +108,24 @@
--  * object after last put) */
-- static DEFINE_MUTEX(sd_ref_mutex);
-- 
--+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
--+# include <linux/proc_fs.h>
--+# include <linux/seq_file.h>
--+struct proc_dir_entry *sd_iostats_procdir = NULL;
--+char sd_iostats_procdir_name[] = "sd_iostats";
--+static struct file_operations sd_iostats_proc_fops;
--+
--+extern void sd_iostats_init(void);
--+extern void sd_iostats_fini(void);
--+void sd_iostats_start_req(struct scsi_cmnd *SCpnt);
--+void sd_iostats_finish_req(struct scsi_cmnd *SCpnt);
--+#else
--+static inline void sd_iostats_init(void) {}
--+static inline void sd_iostats_fini(void) {}
--+static inline void sd_iostats_start_req(struct scsi_cmnd *SCpnt) {}
--+static inline void sd_iostats_finish_req(struct scsi_cmnd *SCpnt) {}
--+#endif
--+
-- static const char *sd_cache_types[] = {
-- 	"write through", "none", "write back",
-- 	"write back, no read (daft)"
--@@ -571,6 +589,8 @@
-- 	if (sdkp->protection_type || scsi_prot_sg_count(SCpnt))
-- 		sd_dif_op(SCpnt, sdkp->protection_type, scsi_prot_sg_count(SCpnt));
-- 
--+	sd_iostats_start_req(SCpnt);
--+
-- 	/*
-- 	 * We shouldn't disconnect in the middle of a sector, so with a dumb
-- 	 * host adapter, it's safe to assume that we can at least transfer
--@@ -1091,6 +1111,7 @@
-- 		break;
-- 	}
--  out:
--+	sd_iostats_finish_req(SCpnt);
-- 	if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
-- 		sd_dif_complete(SCpnt, good_bytes);
-- 
--@@ -1873,6 +1894,36 @@
-- 	if (sdp->removable)
-- 		gd->flags |= GENHD_FL_REMOVABLE;
-- 
--+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
--+	sdkp->stats = kzalloc(sizeof(iostat_stats_t), GFP_KERNEL);
--+	if (!sdkp->stats) {
--+		printk(KERN_WARNING "cannot allocate iostat structure for"
--+				    "%s\n", gd->disk_name);
--+	} else {
--+		do_gettimeofday(&sdkp->stats->iostat_timeval);
--+		sdkp->stats->iostat_queue_stamp = jiffies;
--+		spin_lock_init(&sdkp->stats->iostat_lock);
--+		if (sd_iostats_procdir) {
--+			struct proc_dir_entry *pde;
--+			pde = create_proc_entry(gd->disk_name, S_IRUGO | S_IWUSR,
--+					        sd_iostats_procdir);
--+			if (!pde) {
--+				printk(KERN_WARNING "Can't create /proc/scsi/"
--+						    "%s/%s\n",
--+						    sd_iostats_procdir_name,
--+						    gd->disk_name);
--+				kfree(sdkp->stats);
--+				sdkp->stats = NULL;
--+			} else {
--+				pde->proc_fops = &sd_iostats_proc_fops;
--+				pde->data = gd;
--+			}
--+		} else {
--+			kfree(sdkp->stats);
--+			sdkp->stats = NULL;
--+		}
--+	}
--+#endif
-- 	dev_set_drvdata(dev, sdkp);
-- 	add_disk(gd);
-- 	sd_dif_config_host(sdkp);
--@@ -1923,6 +1974,366 @@
-- 	return 0;
-- }
-- 
--+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
--+static int
--+sd_iostats_seq_show(struct seq_file *seq, void *v)
--+{
--+	struct timeval     now;
--+	struct gendisk *disk = seq->private;
--+	iostat_stats_t    *stats;
--+	unsigned long long read_len;
--+	unsigned long long read_len_tot;
--+	unsigned long      read_num;
--+	unsigned long      read_num_tot;
--+	unsigned long long write_len;
--+	unsigned long long write_len_tot;
--+	unsigned long      write_num;
--+	unsigned long      write_num_tot;
--+	int                i;
--+	int                maxi;
--+
--+	stats = scsi_disk(disk)->stats;
--+	if (stats == NULL) {
--+		printk(KERN_ERR "sd_iostats_seq_show: NULL stats entry\n");
--+		BUG();
--+	}
--+
--+	do_gettimeofday(&now);
--+	now.tv_sec -= stats->iostat_timeval.tv_sec;
--+	now.tv_usec -= stats->iostat_timeval.tv_usec;
--+	if (now.tv_usec < 0) {
--+		now.tv_usec += 1000000;
--+		now.tv_sec--;
--+	}
--+
--+	/* this sampling races with updates */
--+	seq_printf(seq, "index:        %lu   snapshot_time:         %lu.%06lu\n",
--+			(unsigned long) scsi_disk(disk)->index,
--+			now.tv_sec, now.tv_usec);
--+
--+	for (i = IOSTAT_NCOUNTERS - 1; i > 0; i--)
--+		if (stats->iostat_read_histogram[i].iostat_count != 0 ||
--+				stats->iostat_write_histogram[i].iostat_count != 0)
--+			break;
--+	maxi = i;
--+
--+	seq_printf(seq, "%8s %8s %12s %8s %12s\n", "size", 
--+			"reads", "total", "writes", "total");
--+
--+	read_len_tot = write_len_tot = 0;
--+	read_num_tot = write_num_tot = 0;
--+	for (i = 0; i <= maxi; i++) {
--+		read_len = stats->iostat_read_histogram[i].iostat_size;
--+		read_len_tot += read_len;
--+		read_num = stats->iostat_read_histogram[i].iostat_count;
--+		read_num_tot += read_num;
--+
--+		write_len = stats->iostat_write_histogram[i].iostat_size;
--+		write_len_tot += write_len;
--+		write_num = stats->iostat_write_histogram[i].iostat_count;
--+		write_num_tot += write_num;
--+
--+		seq_printf (seq, "%8d %8lu %12llu %8lu %12llu\n", 
--+				512<<i, read_num, read_len, write_num, write_len);
--+	}
--+
--+	seq_printf(seq, "%8s %8lu %12llu %8lu %12llu\n\n", "total",
--+			read_num_tot, read_len_tot, 
--+			write_num_tot, write_len_tot);
--+
--+	seq_printf(seq, "%8s %8s %8s\n", "qdepth", "ticks", "%");
--+	for (i = 0; i < IOSTAT_NCOUNTERS; i++) {
--+		unsigned long long ticks, percent;
--+		ticks = stats->iostat_queue_ticks[i];
--+		if (ticks == 0)
--+			continue;
--+		percent = stats->iostat_queue_ticks[i] * 100;
--+		do_div(percent, stats->iostat_queue_ticks_sum);
--+		seq_printf(seq, "%8d %8llu %8llu\n", i, ticks, percent);
--+	}
--+
--+	if (stats->iostat_reqs != 0) {
--+		unsigned long long aveseek = 0, percent = 0;
--+
--+		if (stats->iostat_seeks) {
--+			aveseek = stats->iostat_seek_sectors;
--+			do_div(aveseek, stats->iostat_seeks);
--+			percent = stats->iostat_seeks * 100;
--+			do_div(percent, stats->iostat_reqs);
--+		}
--+
--+		seq_printf(seq, "\n%llu sectors in %llu reqs: %llu seek(s) over "
--+				"%llu sectors in ave, %llu%% of all reqs\n",
--+				stats->iostat_sectors, stats->iostat_reqs,
--+				stats->iostat_seeks, aveseek, percent);
--+	}
--+
--+	seq_printf(seq, "\n%16s %8s %8s %8s %8s\n", "process time", "reads",
--+			"%%", "writes", "%%");
--+	for (i = 0; i < IOSTAT_NCOUNTERS; i++) {
--+		unsigned long read_percent = 0, write_percent = 0;
--+		if (stats->iostat_wtime[i] == 0 &&
--+				stats->iostat_rtime[i] == 0)
--+			continue;
--+		if (stats->iostat_read_reqs)
--+			read_percent = stats->iostat_rtime[i] * 100 / 
--+				stats->iostat_read_reqs;
--+		if (stats->iostat_write_reqs)
--+			write_percent = stats->iostat_wtime[i] * 100 / 
--+				stats->iostat_write_reqs;
--+		seq_printf(seq, "%16u %8lu %8lu %8lu %8lu\n",
--+				jiffies_to_msecs(((1UL << i) >> 1) << 1),
--+				stats->iostat_rtime[i], read_percent,
--+				stats->iostat_wtime[i], write_percent);
--+	}
--+
--+	seq_printf(seq, "\n%16s %8s %8s %8s %8s\n", "time in queue", "reads",
--+			"%%", "writes", "%%");
--+	for (i = 0; i < IOSTAT_NCOUNTERS; i++) {
--+		unsigned long read_percent = 0, write_percent = 0;
--+		if (stats->iostat_wtime_in_queue[i] == 0 &&
--+				stats->iostat_rtime_in_queue[i] == 0)
--+			continue;
--+		if (stats->iostat_read_reqs)
--+			read_percent = stats->iostat_rtime_in_queue[i] * 100 / 
--+				stats->iostat_read_reqs;
--+		if (stats->iostat_write_reqs)
--+			write_percent = stats->iostat_wtime_in_queue[i] * 100 / 
--+				stats->iostat_write_reqs;
--+		seq_printf(seq, "%16u %8lu %8lu %8lu %8lu\n",
--+				jiffies_to_msecs(((1UL << i) >> 1) << 1),
--+				stats->iostat_rtime_in_queue[i],
--+				read_percent,
--+				stats->iostat_wtime_in_queue[i],
--+				write_percent);
--+	}
--+
--+	return 0;
--+}
--+
--+static void *
--+sd_iostats_seq_start(struct seq_file *p, loff_t *pos)
--+{
--+	return (*pos == 0) ? (void *)1 : NULL;
--+}
--+
--+static void *
--+sd_iostats_seq_next(struct seq_file *p, void *v, loff_t *pos)
--+{
--+	++*pos;
--+	return NULL;
--+}
--+
--+static void
--+sd_iostats_seq_stop(struct seq_file *p, void *v)
--+{
--+}
--+
--+static struct seq_operations sd_iostats_seqops = {
--+	.start = sd_iostats_seq_start,
--+	.stop  = sd_iostats_seq_stop,
--+	.next  = sd_iostats_seq_next,
--+	.show  = sd_iostats_seq_show,
--+};
--+
--+static int
--+sd_iostats_seq_open (struct inode *inode, struct file *file)
--+{
--+	int rc;
--+
--+	rc = seq_open(file, &sd_iostats_seqops);
--+	if (rc != 0)
--+		return rc;
--+
--+	((struct seq_file *)file->private_data)->private = PDE(inode)->data;
--+	return 0;
--+}
--+
--+static ssize_t
--+sd_iostats_seq_write(struct file *file, const char *buffer,
--+		     size_t len, loff_t *off)
--+{
--+	struct seq_file   *seq = file->private_data;
--+	struct gendisk *disk = seq->private;
--+	iostat_stats_t    *stats = scsi_disk(disk)->stats;
--+	unsigned long      flags;
--+	unsigned long      qdepth;
--+
--+
--+	spin_lock_irqsave (&stats->iostat_lock, flags);
--+	qdepth = stats->iostat_queue_depth;
--+	memset (stats, 0, offsetof(iostat_stats_t, iostat_lock));
--+	do_gettimeofday(&stats->iostat_timeval);
--+	stats->iostat_queue_stamp = jiffies;
--+	stats->iostat_queue_depth = qdepth;
--+	spin_unlock_irqrestore (&stats->iostat_lock, flags);
--+
--+	return len;
--+}
--+
--+static struct file_operations sd_iostats_proc_fops = {
--+	.owner   = THIS_MODULE,
--+	.open    = sd_iostats_seq_open,
--+	.read    = seq_read,
--+	.write   = sd_iostats_seq_write,
--+	.llseek  = seq_lseek,
--+	.release = seq_release,
--+};
--+
--+extern struct proc_dir_entry *proc_scsi;
--+
--+void
--+sd_iostats_init(void)
--+{
--+	if (proc_scsi == NULL) {
--+		printk(KERN_WARNING "No access to sd iostats: "
--+			"proc_scsi is NULL\n");
--+		return;
--+	}
--+
--+	sd_iostats_procdir = create_proc_entry(sd_iostats_procdir_name,
--+					       S_IFDIR | S_IRUGO | S_IXUGO,
--+					        proc_scsi);
--+	if (sd_iostats_procdir == NULL) {
--+		printk(KERN_WARNING "No access to sd iostats: "
--+			"can't create /proc/scsi/%s\n", sd_iostats_procdir_name);
--+		return;
--+	}
--+}
--+
--+void sd_iostats_fini(void)
--+{
--+	if (proc_scsi != NULL && sd_iostats_procdir != NULL)
--+		remove_proc_entry(sd_iostats_procdir_name, proc_scsi);
--+
--+	sd_iostats_procdir = NULL;
--+}
--+
--+void sd_iostats_finish_req(struct scsi_cmnd *SCpnt)
--+{
--+	struct request		*rq = SCpnt->request;
--+	iostat_stats_t		*stats;
--+	unsigned long		*tcounter;
--+	int			tbucket;
--+	int			tmp;
--+	unsigned long		irqflags;
--+	unsigned long		i;
--+
--+	stats = scsi_disk(rq->rq_disk)->stats;
--+	if (stats == NULL)
--+		return;
--+
--+	tmp = jiffies - rq->start_time;
--+	for (tbucket = 0; tmp > 1; tbucket++)
--+		tmp >>= 1;
--+	if (tbucket >= IOSTAT_NCOUNTERS)
--+		tbucket = IOSTAT_NCOUNTERS - 1;
--+	//printk("%u ticks in D to %u\n", jiffies - rq->start_time, tbucket);
--+
--+	tcounter = rq_data_dir(rq) == WRITE ?
--+		&stats->iostat_wtime[tbucket] : &stats->iostat_rtime[tbucket];
--+
--+	spin_lock_irqsave(&stats->iostat_lock, irqflags);
--+
--+	/* update delay stats */
--+	(*tcounter)++;
--+
--+	/* update queue depth stats */
--+	i = stats->iostat_queue_depth;
--+	if (i >= IOSTAT_NCOUNTERS)
--+		i = IOSTAT_NCOUNTERS - 1;
--+	stats->iostat_queue_ticks[i] += jiffies - stats->iostat_queue_stamp;
--+	stats->iostat_queue_ticks_sum += jiffies - stats->iostat_queue_stamp;
--+	BUG_ON(stats->iostat_queue_depth == 0);
--+	stats->iostat_queue_depth--;
--+
--+	/* update seek stats. XXX: not sure about nr_sectors */
--+	stats->iostat_sectors += rq->nr_sectors;
--+	stats->iostat_reqs++;
--+	if (rq->sector != stats->iostat_next_sector) {
--+		stats->iostat_seek_sectors +=
--+			rq->sector > stats->iostat_next_sector ?
--+			rq->sector - stats->iostat_next_sector :
--+			stats->iostat_next_sector - rq->sector;
--+		stats->iostat_seeks++;
--+	}
--+	stats->iostat_next_sector = rq->sector + rq->nr_sectors;
--+
--+	stats->iostat_queue_stamp = jiffies;
--+
--+	spin_unlock_irqrestore(&stats->iostat_lock, irqflags);
--+}
--+
--+void sd_iostats_start_req(struct scsi_cmnd *SCpnt)
--+{
--+	struct request		*rq = SCpnt->request;
--+	iostat_stats_t		*stats;
--+	iostat_counter_t	*counter;
--+	int			bucket;
--+	int			tbucket;
--+	int			tmp;
--+	unsigned long		irqflags;
--+	unsigned long		i;
--+	int			nsect;
--+
--+	stats = scsi_disk(rq->rq_disk)->stats;
--+	if (stats == NULL)
--+		return;
--+
--+	nsect = scsi_bufflen(SCpnt) >> 9;
--+	for (bucket = 0, tmp = nsect; tmp > 1; bucket++)
--+		tmp >>= 1;
--+
--+	if (bucket >= IOSTAT_NCOUNTERS) {
--+		printk (KERN_ERR "sd_iostats_bump: nsect %d too big\n", nsect);
--+		BUG();
--+	}
--+
--+	counter = rq_data_dir(rq) == WRITE ?
--+		&stats->iostat_write_histogram[bucket] :
--+		&stats->iostat_read_histogram[bucket];
--+
--+	tmp = jiffies - rq->start_time;
--+	for (tbucket = 0; tmp > 1; tbucket++)
--+		tmp >>= 1;
--+	if (tbucket >= IOSTAT_NCOUNTERS)
--+		tbucket = IOSTAT_NCOUNTERS - 1;
--+	//printk("%u ticks in Q to %u\n", jiffies - rq->start_time, tbucket);
--+
--+	/* an ugly hack to know exact processing time. the right
--+	 * solution is to add one more field to struct request
--+	 * hopefully it will break nothing ... */
--+	rq->start_time = jiffies;
--+
--+	spin_lock_irqsave(&stats->iostat_lock, irqflags);
--+
--+	/* update queue depth stats */
--+	i = stats->iostat_queue_depth;
--+	if (i >= IOSTAT_NCOUNTERS)
--+		i = IOSTAT_NCOUNTERS - 1;
--+	stats->iostat_queue_ticks[i] += jiffies - stats->iostat_queue_stamp;
--+	stats->iostat_queue_ticks_sum += jiffies - stats->iostat_queue_stamp;
--+	stats->iostat_queue_depth++;
--+
--+	/* update delay stats */
--+	if (rq_data_dir(rq) == WRITE) {
--+		stats->iostat_wtime_in_queue[tbucket]++;
--+		stats->iostat_write_reqs++;
--+	} else {
--+		stats->iostat_rtime_in_queue[tbucket]++;
--+		stats->iostat_read_reqs++;
--+	}
--+
--+	/* update size stats */
--+	counter->iostat_size += nsect;
--+	counter->iostat_count++;
--+
--+	stats->iostat_queue_stamp = jiffies;
--+
--+	spin_unlock_irqrestore(&stats->iostat_lock, irqflags);
--+}
--+#endif
--+
-- /**
--  *	scsi_disk_release - Called to free the scsi_disk structure
--  *	@dev: pointer to embedded class device
--@@ -1941,10 +2352,16 @@
-- 	ida_remove(&sd_index_ida, sdkp->index);
-- 	spin_unlock(&sd_index_lock);
-- 
--+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
--+	if (sdkp->stats) {
--+		remove_proc_entry(disk->disk_name, sd_iostats_procdir);
--+		kfree(sdkp->stats);
--+		sdkp->stats = NULL;
--+	}
--+#endif
-- 	disk->private_data = NULL;
-- 	put_disk(disk);
-- 	put_device(&sdkp->device->sdev_gendev);
---
-- 	kfree(sdkp);
-- }
-- 
--@@ -2061,6 +2478,8 @@
-- 	if (!majors)
-- 		return -ENODEV;
-- 
--+	sd_iostats_init();
--+
-- 	err = class_register(&sd_disk_class);
-- 	if (err)
-- 		goto err_out;
--@@ -2076,6 +2495,7 @@
-- err_out:
-- 	for (i = 0; i < SD_MAJORS; i++)
-- 		unregister_blkdev(sd_major(i), "sd");
--+	sd_iostats_fini();
-- 	return err;
-- }
-- 
--Index: linux-2.6.27.21-0.1/drivers/scsi/sd.h
--===================================================================
----- linux-2.6.27.21-0.1.orig/drivers/scsi/sd.h	2009-04-23 02:12:56.000000000 -0600
--+++ linux-2.6.27.21-0.1/drivers/scsi/sd.h	2009-05-22 08:38:28.000000000 -0600
--@@ -37,6 +37,46 @@
--  */
-- #define SD_LAST_BUGGY_SECTORS	8
-- 
--+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
--+typedef struct {
--+	unsigned long long iostat_size;
--+	unsigned long long iostat_count;
--+} iostat_counter_t;
--+
--+#define IOSTAT_NCOUNTERS 16
--+typedef struct {
--+	iostat_counter_t	iostat_read_histogram[IOSTAT_NCOUNTERS];
--+	iostat_counter_t	iostat_write_histogram[IOSTAT_NCOUNTERS];
--+	struct timeval		iostat_timeval;
--+
--+	/* queue depth: how well the pipe is filled up */
--+	unsigned long long	iostat_queue_ticks[IOSTAT_NCOUNTERS];
--+	unsigned long long	iostat_queue_ticks_sum;
--+	unsigned long		iostat_queue_depth;
--+	unsigned long		iostat_queue_stamp;
--+
--+	/* seeks: how linear the traffic is */
--+	unsigned long long	iostat_next_sector;
--+	unsigned long long	iostat_seek_sectors;
--+	unsigned long long	iostat_seeks;
--+	unsigned long long	iostat_sectors;
--+	unsigned long long	iostat_reqs;
--+	unsigned long		iostat_read_reqs;
--+	unsigned long		iostat_write_reqs;
--+
--+	/* process time: how long it takes to process requests */
--+	unsigned long		iostat_rtime[IOSTAT_NCOUNTERS];
--+	unsigned long		iostat_wtime[IOSTAT_NCOUNTERS];
--+
--+	/* queue time: how long process spent in elevator's queue */
--+	unsigned long		iostat_rtime_in_queue[IOSTAT_NCOUNTERS];
--+	unsigned long		iostat_wtime_in_queue[IOSTAT_NCOUNTERS];
--+
--+	/* must be the last field, as it's used to know size to be memset'ed */
--+	spinlock_t		iostat_lock;
--+} ____cacheline_aligned_in_smp iostat_stats_t;
--+#endif
--+
-- struct scsi_disk {
-- 	struct scsi_driver *driver;	/* always &sd_template */
-- 	struct scsi_device *device;
--@@ -53,6 +93,9 @@
-- 	unsigned	WCE : 1;	/* state of disk WCE bit */
-- 	unsigned	RCD : 1;	/* state of disk RCD bit, unused */
-- 	unsigned	DPOFUA : 1;	/* state of disk DPOFUA bit */
--+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
--+	iostat_stats_t	*stats;		/* scsi disk statistics */
--+#endif
-- };
-- #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
-- 
-diff --git a/lustre/kernel_patches/series/2.6-sles11.series b/lustre/kernel_patches/series/2.6-sles11.series
-index 7626923..f1af7d2 100644
---- a/lustre/kernel_patches/series/2.6-sles11.series
-+++ b/lustre/kernel_patches/series/2.6-sles11.series
-@@ -1,11 +1,6 @@
--iopen-misc-2.6.22-vanilla.patch
--export_symbols-2.6.22-vanilla.patch 
--dev_read_only-2.6.27-vanilla.patch 
--export-2.6.27-vanilla.patch 
--sd_iostats-2.6.27-vanilla.patch
--blkdev_tunables-2.6-sles11.patch
--md-mmp-unplug-dev-sles11.patch
--quota-support-64-bit-quota-format.patch
--jbd2-jcberr-2.6-sles11.patch
--jbd2-commit-timer-no-jiffies-rounding.diff
--bio_add_page.patch
-+lustre_version.patch
-+mpt-fusion-max-sge-rhel6.patch
-+raid5-mmp-unplug-dev-rhel6.patch
-+dev_read_only-2.6.32-rhel6.patch
-+blkdev_tunables-2.6-rhel6.patch
-+bh_lru_size_config.patch
-diff --git a/lustre/kernel_patches/series/3.0-sles11.series b/lustre/kernel_patches/series/3.0-sles11.series
-index de1a254..9abf8b1 100644
---- a/lustre/kernel_patches/series/3.0-sles11.series
-+++ b/lustre/kernel_patches/series/3.0-sles11.series
-@@ -1,3 +1,4 @@
--# This file is a place holder for the patch series file
--# The correct patches will be placed in here for SLES-SP2 3.x kernel server build
--# The changes for SLES server are beyond the scope of change request LU-1691
-+raid5-mmp-unplug-dev-sles11sp2.patch
-+dev_read_only-3.0-sles11.patch
-+blkdev_tunables-3.0-sles11.patch
-+bh_lru_size_config.patch
-diff --git a/lustre/kernel_patches/series/3.x-fc18.series b/lustre/kernel_patches/series/3.x-fc18.series
-new file mode 100644
-index 0000000..387a2dd
---- /dev/null
-+++ b/lustre/kernel_patches/series/3.x-fc18.series
-@@ -0,0 +1,4 @@
-+raid5-mmp-unplug-dev-3.7.patch
-+dev_read_only-3.7.patch
-+blkdev_tunables-3.7.patch
-+bh_lru_size_config.patch
-diff --git a/lustre/kernel_patches/targets/2.6-sles10.target.in b/lustre/kernel_patches/targets/2.6-sles10.target.in
-deleted file mode 100644
-index 2eb48dd..0000000
---- a/lustre/kernel_patches/targets/2.6-sles10.target.in
-+++ /dev/null
-@@ -1,41 +0,0 @@
--lnxmaj="2.6.16"
--lnxmin=".60"
--lnxrel="0.69.1"
--# use this when there is an "RPM fix" which means that the name of the
--# (source) RPM has been updated but the version of the kernel inside the
--# RPM is not also updated
--rpmfix=""
--
--# this is the delimeter that goes before the "smp" at the end of the version
--# defaults to empty
--FLAVOR_DELIMITER="-"
--
--KERNEL_SRPM=kernel-source-${lnxmaj}${lnxmin}-${lnxrel}${rpmfix}.src.rpm
--SERIES=""
--VERSION=$lnxmaj
--EXTRA_VERSION="${lnxmin#.}-${lnxrel}_lustre.@VERSION@"
--LUSTRE_VERSION=@VERSION@
--
--OFED_VERSION=inkernel
--# if using "inkernel" on sles10, we need to know which version of ofed-devel
--# to use
--OFED_DEVEL_VERSION="1.4.2-0.8.4.1682.0.PTF.578796"
--
--BASE_ARCHS="i686 ppc x86_64 ia64 ppc64"
--BIGMEM_ARCHS=""
--BOOT_ARCHS=""
--JENSEN_ARCHS=""
--SMP_ARCHS="x86_64 ia64"
--BIGSMP_ARCHS="i686"
--PSERIES64_ARCHS="ppc"
--PPC64_ARCHS="ppc64"
--UP_ARCHS=""
--SRC_ARCHS=""
--#RPMSMPTYPE="smp"
--
--for cc in gcc ; do
--    if which $cc >/dev/null 2>/dev/null ; then
--        export CC=$cc
--        break
--    fi
--done
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
similarity index 96%
rename from sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
rename to sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
index 1332ac8..ea382a8 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -1,7 +1,7 @@
-From 165b74cfea18405a1ad0a01ed1c3ea946f9d8ce5 Mon Sep 17 00:00:00 2001
+From 9798799dc437a49e099ee3e2a4056dbab29f7664 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:14:09 +0800
-Subject: [PATCH 03/13] LU-2686 kernel: sock_map_fd() replaced by
+Subject: [PATCH 02/12] LU-2686 kernel: sock_map_fd() replaced by
  sock_alloc_file()
 
 Use sock_alloc_file() replace sock_map_fd().

diff --git a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
similarity index 97%
rename from sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
rename to sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index f119c9b..b9e3865 100644
--- a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,7 +1,7 @@
-From dc6776e7aab810ff4db384de86c323e80649dc7c Mon Sep 17 00:00:00 2001
+From eb644ae44a7a7c1884ff9bb8b384730cedc17175 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:04:22 +0800
-Subject: [PATCH 04/13] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
+Subject: [PATCH 03/12] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
 Add uapi header to include search path.
 
@@ -29,7 +29,7 @@ index 79bcd65..bfec407 100644
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index 244d398..0ab7cdb 100644
+index ec77262..fe4f4da 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -96,7 +96,7 @@ index 244d398..0ab7cdb 100644
  	[_AC_MSG_LOG_CONFTEST
  m4_ifvaln([$5],[$5])dnl])
 diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
-index 2feec80..aee760e 100644
+index be144de..a978bcf 100644
 --- a/ldiskfs/config/ldiskfs-build.m4
 +++ b/ldiskfs/config/ldiskfs-build.m4
 @@ -4,12 +4,12 @@ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
@@ -152,7 +152,7 @@ index 2feec80..aee760e 100644
  	# enable extensive workarounds to get this to build
  	# modules
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 0354dd4..c71702b 100644
+index 7ac2b22..1972e17 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -328,6 +328,7 @@ AC_TRY_RUN([

diff --git a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
similarity index 95%
rename from sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
rename to sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 4d16377..9255c65 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From 6e14a93978fe30cbc424fc727f26354172756afd Mon Sep 17 00:00:00 2001
+From 1f4b6325b84ae71aca272904452c7751c84e1870 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 05/13] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 04/12] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
@@ -67,7 +67,7 @@ index 53975ab..fa4e4d4 100644
 +#endif
  #endif
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index c71702b..2f4265a 100644
+index 1972e17..d0efbf4 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2234,6 +2234,25 @@ LB_LINUX_TRY_COMPILE([
@@ -106,7 +106,7 @@ index c71702b..2f4265a 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index 14f3ef6..eb62458 100644
+index b93d805..ad88587 100644
 --- a/lustre/include/liblustre.h
 +++ b/lustre/include/liblustre.h
 @@ -458,6 +458,10 @@ struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
@@ -121,7 +121,7 @@ index 14f3ef6..eb62458 100644
  int posix_acl_valid(const struct posix_acl *acl)
  {
 diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index f9e425d..7e3eb53 100644
+index 8772b74..a08c58a 100644
 --- a/lustre/llite/xattr.c
 +++ b/lustre/llite/xattr.c
 @@ -345,7 +345,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
@@ -134,7 +134,7 @@ index f9e425d..7e3eb53 100644
                  RETURN(rc);
          }
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index f068026..ce18acf 100644
+index 3ea8996..5751460 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -41,6 +41,7 @@

diff --git a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
similarity index 88%
rename from sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
rename to sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
index 55bf18b..c66cea0 100644
--- a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0005-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From 5bde36648a5be0e425b93de1558cf91f3250ea65 Mon Sep 17 00:00:00 2001
+From 385173f27cbda04a7fef76ee37e20b8cbd810036 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 06/13] LU-2800 llite: introduce local getname()
+Subject: [PATCH 05/12] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is
@@ -16,10 +16,10 @@ Change-Id: If44cd9f9d14f26f220d5f0c52e8b804a49d3cf92
  1 file changed, 28 insertions(+), 4 deletions(-)
 
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 493996d..14ea720 100644
+index a3086d0..878f645 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
-@@ -1227,6 +1227,30 @@ out:
+@@ -1228,6 +1228,30 @@ out:
          RETURN(rc);
  }
  
@@ -50,7 +50,7 @@ index 493996d..14ea720 100644
  static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
  {
          struct inode *inode = file->f_dentry->d_inode;
-@@ -1429,7 +1453,7 @@ free_lmv:
+@@ -1430,7 +1454,7 @@ free_lmv:
  		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
  			return -ENOTSUPP;
  
@@ -59,7 +59,7 @@ index 493996d..14ea720 100644
  		if (IS_ERR(filename))
  			RETURN(PTR_ERR(filename));
  
-@@ -1440,7 +1464,7 @@ free_lmv:
+@@ -1441,7 +1465,7 @@ free_lmv:
  		rc = ll_rmdir_entry(inode, filename, namelen);
  out_rmdir:
                  if (filename)
@@ -68,7 +68,7 @@ index 493996d..14ea720 100644
  		RETURN(rc);
  	}
  	case LL_IOC_LOV_SWAP_LAYOUTS:
-@@ -1460,7 +1484,7 @@ out_rmdir:
+@@ -1461,7 +1485,7 @@ out_rmdir:
  
                  if (cmd == IOC_MDC_GETFILEINFO ||
                      cmd == IOC_MDC_GETFILESTRIPE) {
@@ -77,7 +77,7 @@ index 493996d..14ea720 100644
                          if (IS_ERR(filename))
                                  RETURN(PTR_ERR(filename));
  
-@@ -1527,7 +1551,7 @@ out_rmdir:
+@@ -1528,7 +1552,7 @@ out_rmdir:
          out_req:
                  ptlrpc_req_finished(request);
                  if (filename)

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
similarity index 92%
rename from sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
rename to sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
index a07c3db..7899dec 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0006-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From a6906bd6e814b95d37770f136bed99aa6481444c Mon Sep 17 00:00:00 2001
+From 8b87cde85f26ebf1a3607db89b406681b1e66721 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 07/13] LU-2987 llite: rcu-free inode
+Subject: [PATCH 06/12] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.
@@ -14,7 +14,7 @@ Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
  2 files changed, 37 insertions(+), 2 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 2f4265a..1731add 100644
+index d0efbf4..bd7ef11 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -1683,6 +1683,26 @@ LB_LINUX_TRY_COMPILE([
@@ -53,7 +53,7 @@ index 2f4265a..1731add 100644
           LC_D_DELETE_CONST
  
 diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
-index 3f6aadf..0c768d5 100644
+index 90949ff..0b9bdbc 100644
 --- a/lustre/llite/super25.c
 +++ b/lustre/llite/super25.c
 @@ -61,11 +61,25 @@ static struct inode *ll_alloc_inode(struct super_block *sb)

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
similarity index 90%
rename from sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
rename to sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 2cb9ddb..487e6bf 100644
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From 840f014f874952b091ae9a05c2d5e262549aad5e Mon Sep 17 00:00:00 2001
+From ca0935ac2c329ceab8e52681e688947b44a06f25 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 17 Apr 2013 13:27:55 +0400
-Subject: [PATCH 08/13] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 07/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
@@ -14,7 +14,7 @@ Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
  2 files changed, 33 insertions(+), 1 deletion(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 1731add..4305757 100644
+index bd7ef11..909fe8a 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2273,6 +2273,26 @@ LB_LINUX_TRY_COMPILE([
@@ -56,7 +56,7 @@ index 1731add..4305757 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index db53842..aef8e4b 100644
+index 3a64517..59a3bd8 100644
 --- a/lustre/llite/vvp_io.c
 +++ b/lustre/llite/vvp_io.c
 @@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
similarity index 96%
rename from sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
rename to sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 88a98e7..7c43e97 100644
--- a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
-From fe026adf859311df9a8b329e37d00fb4296aad46 Mon Sep 17 00:00:00 2001
+From 6788eaaadcd9e1cc48f991c4d120cf0665bf02bf Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
-Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 09/13] LU-2850 kernel: 3.8 upstream kills daemonize()
+Date: Tue, 23 Apr 2013 10:18:04 -0400
+Subject: [PATCH 08/12] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
@@ -9,15 +9,13 @@ to create new kernel threads, we should really switch to
 kthread_run() and elimilate daemonize().
 
 Conflicts:
-	libcfs/autoconf/lustre-libcfs.m4
 	lustre/mdd/mdd_lfsck.c
-	lustre/obdclass/llog_cat.c
-	lustre/ptlrpc/recov_thread.c
 
 Signed-off-by: Peng Tao <tao.peng@emc.com>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
 Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
 ---
- libcfs/autoconf/lustre-libcfs.m4           | 19 -------
+ libcfs/autoconf/lustre-libcfs.m4           | 28 -----------
  libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
  libcfs/include/libcfs/libcfs.h             | 13 +----
  libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
@@ -37,9 +35,9 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
  libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
  libcfs/libcfs/workitem.c                   | 26 +++++-----
- lnet/klnds/gnilnd/gnilnd_cb.c              |  3 --
+ lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
  lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
- lnet/klnds/gnilnd/gnilnd_stack.c           |  1 -
+ lnet/klnds/gnilnd/gnilnd_stack.c           |  2 -
  lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
  lnet/klnds/mxlnd/mxlnd_cb.c                | 11 ----
  lnet/klnds/o2iblnd/o2iblnd.c               | 13 +++--
@@ -81,18 +79,34 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/ptlrpc/pinger.c                     | 39 +++++++-------
  lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
  lustre/ptlrpc/sec_gc.c                     | 12 ++---
- lustre/ptlrpc/service.c                    | 19 ++++---
+ lustre/ptlrpc/service.c                    | 25 +++++----
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 515 insertions(+), 744 deletions(-)
+ 68 files changed, 516 insertions(+), 760 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 4545a7a..03a428c 100644
+index 4545a7a..0f53b9a 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -696,23 +696,6 @@ LB_LINUX_TRY_COMPILE([
+@@ -638,15 +638,6 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ ])
+ 
+-AC_DEFUN([LIBCFS_HAVE_OOM_H],
+-[LB_CHECK_FILE([$LINUX/include/linux/oom.h], [
+-        AC_DEFINE(HAVE_LINUX_OOM_H, 1,
+-                [kernel has include/oom.h])
+-],[
+-        AC_MSG_RESULT([no])
+-])
+-])
+-
+ AC_DEFUN([LIBCFS_HAVE_KEYTYPE_H],
+ [LB_CHECK_FILE([$LINUX/include/linux/key-type.h], [
+         AC_DEFINE(HAVE_LINUX_KEYTYPE_H, 1,
+@@ -696,23 +687,6 @@ LB_LINUX_TRY_COMPILE([
  ])
  ])
  
@@ -116,7 +130,7 @@ index 4545a7a..03a428c 100644
  #
  # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
  #
-@@ -865,8 +848,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
+@@ -865,8 +839,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
  # 2.6.32
  LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
  LC_SHRINKER_WANT_SHRINK_PTR
@@ -194,7 +208,7 @@ index 1aeb5aa..31298e1 100644
   * Task struct
   */
 diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 91158bc..c21e2e6 100644
+index 64cfbc7..305b74b 100644
 --- a/libcfs/include/libcfs/posix/libcfs.h
 +++ b/libcfs/include/libcfs/posix/libcfs.h
 @@ -110,6 +110,7 @@
@@ -459,7 +473,7 @@ index d9d4dc1..0000000
 -}
 -EXPORT_SYMBOL(cfs_create_thread);
 diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index afb4465..6da1744 100644
+index 43b172e..9e2de0e 100644
 --- a/libcfs/libcfs/linux/linux-prim.c
 +++ b/libcfs/libcfs/linux/linux-prim.c
 @@ -259,34 +259,20 @@ void cfs_enter_debugger(void)
@@ -519,7 +533,7 @@ index afb4465..6da1744 100644
  EXPORT_SYMBOL(cfs_block_sigs);
  EXPORT_SYMBOL(cfs_block_sigsinv);
 diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
-index d455e42..f874974 100644
+index 916bdc9..2049908 100644
 --- a/libcfs/libcfs/tracefile.c
 +++ b/libcfs/libcfs/tracefile.c
 @@ -992,7 +992,6 @@ static int tracefiled(void *arg)
@@ -824,7 +838,7 @@ index db839e5..309cfec 100644
  		CERROR("Failed to create thread for WI scheduler %s: %d\n",
  		       name, rc);
 diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
-index 381aa64..a4407de 100644
+index 381aa64..3c0f472 100644
 --- a/lnet/klnds/gnilnd/gnilnd_cb.c
 +++ b/lnet/klnds/gnilnd/gnilnd_cb.c
 @@ -2946,7 +2946,6 @@ kgnilnd_reaper(void *arg)
@@ -835,7 +849,14 @@ index 381aa64..a4407de 100644
  	cfs_block_allsigs();
  
  	/* all gnilnd threads need to run fairly urgently */
-@@ -4857,8 +4856,6 @@ kgnilnd_scheduler(void *arg)
+@@ -4850,15 +4849,12 @@ kgnilnd_scheduler(void *arg)
+ {
+ 	int               threadno = (long)arg;
+ 	kgn_device_t		*dev;
+-	char			name[16];
+ 	int			busy_loops = 0;
+ 	unsigned long	  deadline = 0;
+ 	DEFINE_WAIT(wait);
  
  	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
  
@@ -880,7 +901,7 @@ index 39716b8..a513ccd 100644
  	/* all gnilnd threads need to run fairly urgently */
  	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
 diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
-index 0dec950..7414233 100644
+index 0dec950..6b93025 100644
 --- a/lnet/klnds/gnilnd/gnilnd_stack.c
 +++ b/lnet/klnds/gnilnd/gnilnd_stack.c
 @@ -366,7 +366,6 @@ kgnilnd_ruhroh_thread(void *arg)
@@ -891,6 +912,14 @@ index 0dec950..7414233 100644
  	cfs_block_allsigs();
  	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
  	kgnilnd_data.kgn_ruhroh_running = 1;
+@@ -592,7 +591,6 @@ kgnilnd_rca(void *arg)
+ 	rs_event_t event;
+ 	lnet_nid_t nid;
+ 
+-	cfs_daemonize("kgnilnd_rca");
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
 diff --git a/lnet/klnds/mxlnd/mxlnd.c b/lnet/klnds/mxlnd/mxlnd.c
 index 558bfaf..dbe998f 100644
 --- a/lnet/klnds/mxlnd/mxlnd.c
@@ -1063,7 +1092,7 @@ index 7d3c025..86298dd 100644
  			continue;
  
 diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
-index 87c7cc0..7585657 100644
+index fee5273..1c92fee 100644
 --- a/lnet/klnds/o2iblnd/o2iblnd.h
 +++ b/lnet/klnds/o2iblnd/o2iblnd.h
 @@ -1067,7 +1067,7 @@ void kiblnd_tunables_fini(void);
@@ -1461,7 +1490,7 @@ index 9376b08..c70ceeb 100644
  			continue;
  
 diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
-index abdf25a..1094397 100644
+index c7f1bed..3fd04ac 100644
 --- a/lnet/klnds/socklnd/socklnd.h
 +++ b/lnet/klnds/socklnd/socklnd.h
 @@ -581,7 +581,7 @@ extern void ksocknal_txlist_done (lnet_ni_t *ni, cfs_list_t *txlist,
@@ -1626,7 +1655,7 @@ index 770345d..9d57479 100644
          RETURN(0);
  }
 diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c
-index 80c0a59..50495a6 100644
+index 34c94ae..4cef9e8 100644
 --- a/lnet/lnet/router.c
 +++ b/lnet/lnet/router.c
 @@ -1095,16 +1095,17 @@ lnet_router_checker_start(void)
@@ -1724,10 +1753,10 @@ index cc8c4c8..d4d5027 100644
          usock_data.ud_state = UD_STATE_INITIALIZED;
  
 diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
-index d89a90f..a497771 100644
+index 88b51a9..517b8e3 100644
 --- a/lustre/ldlm/ldlm_lib.c
 +++ b/lustre/ldlm/ldlm_lib.c
-@@ -1971,19 +1971,12 @@ static int target_recovery_thread(void *arg)
+@@ -1972,19 +1972,12 @@ static int target_recovery_thread(void *arg)
          struct ptlrpc_request *req;
          struct target_recovery_data *trd = &obd->obd_recovery_data;
          unsigned long delta;
@@ -1748,7 +1777,7 @@ index d89a90f..a497771 100644
          OBD_ALLOC_PTR(thread);
          if (thread == NULL)
                  RETURN(-ENOMEM);
-@@ -2108,22 +2101,24 @@ static int target_recovery_thread(void *arg)
+@@ -2109,22 +2102,24 @@ static int target_recovery_thread(void *arg)
  static int target_start_recovery_thread(struct lu_target *lut,
                                          svc_handler_t handler)
  {
@@ -1784,7 +1813,7 @@ index d89a90f..a497771 100644
  
  void target_stop_recovery_thread(struct obd_device *obd)
 diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index da54fcd..f4d05c3 100644
+index 211380a..01fe1ca 100644
 --- a/lustre/ldlm/ldlm_lockd.c
 +++ b/lustre/ldlm/ldlm_lockd.c
 @@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
@@ -1955,7 +1984,7 @@ index d724a2d..fa14f66 100644
  
  static void ldlm_pools_thread_stop(void)
 diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c
-index 1d489e6..5e269b3 100644
+index 7ab686c..1d1cded 100644
 --- a/lustre/llite/llite_capa.c
 +++ b/lustre/llite/llite_capa.c
 @@ -173,8 +173,6 @@ static int capa_thread_main(void *unused)
@@ -2054,7 +2083,7 @@ index 26a2c8c..f1a1415 100644
  
  	wait_for_completion(&lcq->lcq_comp);
 diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
-index 4c58181..1d4e2e8 100644
+index f94a7ca..c494dd2 100644
 --- a/lustre/llite/lloop.c
 +++ b/lustre/llite/lloop.c
 @@ -420,8 +420,6 @@ static int loop_thread(void *data)
@@ -2085,7 +2114,7 @@ index 4c58181..1d4e2e8 100644
          cfs_module_put(THIS_MODULE);
          return error;
 diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
-index 6d5b7af..3211557 100644
+index a2e48f4..19ca1b4 100644
 --- a/lustre/llite/statahead.c
 +++ b/lustre/llite/statahead.c
 @@ -981,12 +981,6 @@ static int ll_agl_thread(void *arg)
@@ -2188,7 +2217,7 @@ index 6d5b7af..3211557 100644
                  thread_set_flags(thread, SVC_STOPPED);
                  thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index ce18acf..b9ad1b9 100644
+index 5751460..2581b69 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -1571,13 +1571,6 @@ static int mdc_changelog_send_thread(void *csdata)
@@ -2247,20 +2276,20 @@ index ce18acf..b9ad1b9 100644
          CERROR("Failed to start changelog thread: %d\n", rc);
          OBD_FREE_PTR(cs);
 diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
-index 9d7b54c..7ced9dd 100644
+index 7ab15f9..6d6208b 100644
 --- a/lustre/mdd/mdd_lfsck.c
 +++ b/lustre/mdd/mdd_lfsck.c
-@@ -2525,8 +2525,7 @@ static int mdd_lfsck_main(void *args)
+@@ -2533,8 +2533,7 @@ static int mdd_lfsck_main(void *args)
  	int			 rc;
  	ENTRY;
  
 -	cfs_daemonize("lfsck");
--	rc = lu_env_init(&env, LCT_MD_THREAD);
-+	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
+-	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
++	rc = lu_env_init(&env, LCT_MD_THREAD);
  	if (rc != 0) {
  		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
  		       mdd_lfsck2name(lfsck), rc);
-@@ -2789,8 +2788,8 @@ trigger:
+@@ -2798,8 +2797,8 @@ trigger:
  
  	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
  	thread_set_flags(thread, 0);
@@ -2272,7 +2301,7 @@ index 9d7b54c..7ced9dd 100644
  		       mdd_lfsck2name(lfsck), rc);
  	else
 diff --git a/lustre/mdt/mdt_capa.c b/lustre/mdt/mdt_capa.c
-index 76e2c6f..d4a8bc4 100644
+index 567a0f8..6e13b42 100644
 --- a/lustre/mdt/mdt_capa.c
 +++ b/lustre/mdt/mdt_capa.c
 @@ -218,7 +218,7 @@ static int mdt_ck_thread_main(void *args)
@@ -2316,7 +2345,7 @@ index 76e2c6f..d4a8bc4 100644
  
  void mdt_ck_thread_stop(struct mdt_device *mdt)
 diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 6b84a29..f7e6514 100644
+index 83bd75e..b7dccf0 100644
 --- a/lustre/mgc/mgc_request.c
 +++ b/lustre/mgc/mgc_request.c
 @@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
@@ -2362,7 +2391,7 @@ index 6b84a29..f7e6514 100644
 +			       obd->obd_name, rc);
 +			GOTO(err_cleanup, rc);
 +		}
-+		/* rc is the pid of mgc_requeue_thread. */
++		/* rc is the task_struct pointer of mgc_requeue_thread. */
 +		rc = 0;
          }
  
@@ -2407,7 +2436,7 @@ index 781250f..e6abdc4 100644
  	mgs_nidtbl_init_fs(env, fsdb);
          return 0;
 diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index 436aa4d..0e29783 100644
+index e09f15e..6900bbc 100644
 --- a/lustre/obdclass/genops.c
 +++ b/lustre/obdclass/genops.c
 @@ -1744,14 +1744,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
@@ -2462,7 +2491,7 @@ index 436aa4d..0e29783 100644
  /**
   * stop destroy zombie import/export thread
 diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
-index 62c496b..d85b048 100644
+index 2ab3061..2cd9598 100644
 --- a/lustre/obdclass/llog.c
 +++ b/lustre/obdclass/llog.c
 @@ -438,7 +438,7 @@ static int llog_process_thread_daemonize(void *arg)
@@ -2488,10 +2517,10 @@ index 62c496b..d85b048 100644
  			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
  			OBD_FREE_PTR(lpi);
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 77acd9e..a9130be 100644
+index 6e9c37b..f0ad81d 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -979,7 +979,6 @@ static int osd_scrub_main(void *args)
+@@ -1027,7 +1027,6 @@ static int osd_scrub_main(void *args)
  	int		      rc;
  	ENTRY;
  
@@ -2499,7 +2528,7 @@ index 77acd9e..a9130be 100644
  	rc = lu_env_init(&env, LCT_DT_THREAD);
  	if (rc != 0) {
  		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
-@@ -1554,8 +1553,8 @@ again:
+@@ -1601,8 +1600,8 @@ again:
  
  	scrub->os_start_flags = flags;
  	thread_set_flags(thread, 0);
@@ -2511,7 +2540,7 @@ index 77acd9e..a9130be 100644
  		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
  		RETURN(rc);
 diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 914f988..d0d2ede 100644
+index 073bd4b..227a6ef 100644
 --- a/lustre/osp/osp_precreate.c
 +++ b/lustre/osp/osp_precreate.c
 @@ -872,15 +872,11 @@ static int osp_precreate_thread(void *_arg)
@@ -2530,7 +2559,7 @@ index 914f988..d0d2ede 100644
  	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
  	if (rc) {
  		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1251,7 +1247,7 @@ out:
+@@ -1239,7 +1235,7 @@ out:
  int osp_init_precreate(struct osp_device *d)
  {
  	struct l_wait_info	 lwi = { 0 };
@@ -2539,7 +2568,7 @@ index 914f988..d0d2ede 100644
  
  	ENTRY;
  
-@@ -1286,10 +1282,11 @@ int osp_init_precreate(struct osp_device *d)
+@@ -1274,10 +1270,11 @@ int osp_init_precreate(struct osp_device *d)
  	/*
  	 * start thread handling precreation and statfs updates
  	 */
@@ -2556,7 +2585,7 @@ index 914f988..d0d2ede 100644
  
  	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
 diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index 4bc9d58..a6952ce 100644
+index c845077..852f1ee 100644
 --- a/lustre/osp/osp_sync.c
 +++ b/lustre/osp/osp_sync.c
 @@ -823,7 +823,6 @@ static int osp_sync_thread(void *_arg)
@@ -2590,10 +2619,10 @@ index 4bc9d58..a6952ce 100644
  		       d->opd_obd->obd_name, rc);
  		GOTO(err_llog, rc);
 diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
-index 7eaee96..9d17417 100644
+index 6ab0248..0eb47d9 100644
 --- a/lustre/ptlrpc/import.c
 +++ b/lustre/ptlrpc/import.c
-@@ -1263,7 +1263,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
+@@ -1267,7 +1267,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
  
          ENTRY;
  
@@ -2602,7 +2631,7 @@ index 7eaee96..9d17417 100644
  
          CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
                 imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
-@@ -1333,20 +1333,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
+@@ -1337,20 +1337,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
  		spin_unlock(&imp->imp_lock);
  
  #ifdef __KERNEL__
@@ -2642,7 +2671,7 @@ index 7eaee96..9d17417 100644
                  ptlrpc_invalidate_import(imp);
  
 diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
-index 8b7d472..e18bc7d 100644
+index b42fb10..4c4ba01 100644
 --- a/lustre/ptlrpc/pinger.c
 +++ b/lustre/ptlrpc/pinger.c
 @@ -306,8 +306,6 @@ static int ptlrpc_pinger_main(void *arg)
@@ -2761,7 +2790,7 @@ index 669b0d7..b6486e0 100644
          pc->pc_wait_callback =
                  liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
 diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
-index 7634d22..595f710 100644
+index 40f16eb..4c6f20d 100644
 --- a/lustre/ptlrpc/sec_gc.c
 +++ b/lustre/ptlrpc/sec_gc.c
 @@ -169,7 +169,7 @@ static int sec_gc_main(void *arg)
@@ -2798,10 +2827,10 @@ index 7634d22..595f710 100644
  
          l_wait_event(sec_gc_thread.t_ctl_waitq,
 diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
-index c141f49..8d52419 100644
+index 7e176c0..c1e23fd 100644
 --- a/lustre/ptlrpc/service.c
 +++ b/lustre/ptlrpc/service.c
-@@ -2397,7 +2397,7 @@ static int ptlrpc_main(void *arg)
+@@ -2400,7 +2400,7 @@ static int ptlrpc_main(void *arg)
          ENTRY;
  
          thread->t_pid = cfs_curproc_pid();
@@ -2810,7 +2839,7 @@ index c141f49..8d52419 100644
  
  	/* NB: we will call cfs_cpt_bind() for all threads, because we
  	 * might want to run lustre server only on a subset of system CPUs,
-@@ -2592,7 +2592,7 @@ static int ptlrpc_hr_main(void *arg)
+@@ -2599,7 +2599,7 @@ static int ptlrpc_hr_main(void *arg)
  
  	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
  		 hrp->hrp_cpt, hrt->hrt_id);
@@ -2819,7 +2848,7 @@ index c141f49..8d52419 100644
  
  	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
  	if (rc != 0) {
-@@ -2658,10 +2658,13 @@ static int ptlrpc_start_hr_threads(void)
+@@ -2665,15 +2665,18 @@ static int ptlrpc_start_hr_threads(void)
  		int	rc = 0;
  
  		for (j = 0; j < hrp->hrp_nthrs; j++) {
@@ -2837,10 +2866,20 @@ index c141f49..8d52419 100644
  				break;
  		}
  		cfs_wait_event(ptlrpc_hr.hr_waitq,
-@@ -2853,8 +2856,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
- 	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
- 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
- 	 */
+ 			       cfs_atomic_read(&hrp->hrp_nstarted) == j);
+-		if (rc >= 0)
++		if (!IS_ERR_VALUE(rc))
+ 			continue;
+ 
+ 		CERROR("Reply handling thread %d:%d Failed on starting: "
+@@ -2856,12 +2859,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
+ 	}
+ 
+ 	CDEBUG(D_RPCTRACE, "starting thread '%s'\n", thread->t_name);
+-	/*
+-	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+-	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
+-	 */
 -	rc = cfs_create_thread(ptlrpc_main, thread, CFS_DAEMON_FLAGS);
 -	if (rc < 0) {
 +	rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name));
@@ -2849,7 +2888,7 @@ index c141f49..8d52419 100644
  		       thread->t_name, rc);
  		spin_lock(&svcpt->scp_lock);
 diff --git a/lustre/quota/qmt_lock.c b/lustre/quota/qmt_lock.c
-index 3236fb5..7c455fe 100644
+index 9339580..1f33aef 100644
 --- a/lustre/quota/qmt_lock.c
 +++ b/lustre/quota/qmt_lock.c
 @@ -716,7 +716,6 @@ static int qmt_reba_thread(void *arg)
@@ -2894,7 +2933,7 @@ index 3236fb5..7c455fe 100644
  
  	l_wait_event(thread->t_ctl_waitq,
 diff --git a/lustre/quota/qsd_reint.c b/lustre/quota/qsd_reint.c
-index ad2894f..070e535 100644
+index 0e0643f..6fec9e6 100644
 --- a/lustre/quota/qsd_reint.c
 +++ b/lustre/quota/qsd_reint.c
 @@ -417,8 +417,6 @@ static int qsd_reint_main(void *args)
@@ -2918,7 +2957,7 @@ index ad2894f..070e535 100644
  		write_lock(&qsd->qsd_lock);
  		qqi->qqi_reint = 0;
 diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c
-index 037fb2b..5ab39e4 100644
+index fdc1ef5..f9af987 100644
 --- a/lustre/quota/qsd_writeback.c
 +++ b/lustre/quota/qsd_writeback.c
 @@ -404,7 +404,6 @@ static int qsd_upd_thread(void *arg)

diff --git a/sys-cluster/lustre/files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
similarity index 87%
rename from sys-cluster/lustre/files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
rename to sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
index f6f3bbf..f7625d3 100644
--- a/sys-cluster/lustre/files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ b/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -1,7 +1,7 @@
-From 4d081a6db49068649612223a7d47c3a72c0875d0 Mon Sep 17 00:00:00 2001
+From be658d898d8985782db9aba0c0c65834507938fc Mon Sep 17 00:00:00 2001
 From: Brian Behlendorf <behlendorf1@llnl.gov>
 Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 13/13] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+Subject: [PATCH 09/12] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
 
 With the release of zfs-0.6.1 the default install location of
 the zfs kmod headers and objects has changed.  The kmod headers
@@ -50,11 +50,11 @@ Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
  autoMakefile.am                |   2 +-
  config/lustre-build-ldiskfs.m4 |   1 -
  config/lustre-build-zfs.m4     | 731 ++++++++++++++++++-----------------------
- contrib/lbuild/lbuild          |  83 ++---
+ contrib/lbuild/lbuild          | 147 +++++----
  lustre.spec.in                 |   2 +-
  lustre/osd-zfs/Makefile.in     |   3 +-
  lustre/utils/Makefile.am       |   6 +-
- 7 files changed, 351 insertions(+), 477 deletions(-)
+ 7 files changed, 407 insertions(+), 485 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
 index bfec407..27e16c1 100644
@@ -67,10 +67,10 @@ index bfec407..27e16c1 100644
  SOURCES_SUBDIRS := @LIBCFS_SUBDIR@ lnet lustre
  RPM_SUBDIRS := @LDISKFS_SUBDIR@ @LUSTREIOKIT_SUBDIR@
 diff --git a/config/lustre-build-ldiskfs.m4 b/config/lustre-build-ldiskfs.m4
-index cdcd10b..d680268 100644
+index d619d7c..f29fd39 100644
 --- a/config/lustre-build-ldiskfs.m4
 +++ b/config/lustre-build-ldiskfs.m4
-@@ -190,7 +190,6 @@ else
+@@ -189,7 +189,6 @@ else
  fi
  
  if test x$enable_ldiskfs_build = xno; then
@@ -847,10 +847,18 @@ index bfc647f..507afd8 100644
 +	AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
  ])
 diff --git a/contrib/lbuild/lbuild b/contrib/lbuild/lbuild
-index f389505..075fcb0 100755
+index d682f3c..b4a0a8d 100755
 --- a/contrib/lbuild/lbuild
 +++ b/contrib/lbuild/lbuild
-@@ -996,11 +996,14 @@ build_lustre() {
+@@ -993,36 +993,60 @@ build_lustre() {
+ #
+ # Fetch spl/zfs from the git repo and prepare for lustre build
+ #
++# Overrides:
++#   SPLZFSGITREPO - URI of directory where spl.git and zfs.git are located
++#   SPLZFSTAG     - Tag to checkout of clone repositories
++#   SPLZFSVER     - Version to checkout of both (format zfs/spl-$SPLZFSVER)
++#
  # return 0 if successful, else 255
  build_spl_zfs() {
      # make sure the RPM build environment is set up
@@ -862,54 +870,65 @@ index f389505..075fcb0 100755
      # destination for the rpms
      export RPM_BUILD_ROOT=$TOPDIR
 +    SPLZFSVER=${SPLZFSVER:-0.6.1}
++    SPLZFSTAG=${SPLZFSTAG:-lustre-zfs}
  
      # The files expect a kver to be set to the kernel version .
-     kver=$(cat ${LINUX}/include/config/kernel.release)
-@@ -1009,10 +1012,14 @@ build_spl_zfs() {
+-    kver=$(cat ${LINUX}/include/config/kernel.release)
++    local kver=$(find_linux_release ${LINUX})
+ 
+     # build and install the spl and zfs (and -devel) RPMs for lustre to use
      local pkg
      for pkg in spl zfs; do
  
 -        local rpmmod spldir
 +        local rpmpkg
  
-         [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/*)"
+-        [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/*)"
 -        rpmmod=$pkg-modules
-+	if [ -f $pkg-modules.spec.in ]; then
-+	    rpmpkg=$pkg-modules
-+	else
-+            rpmpkg=$pkg-dkms
-+	fi
++        [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/|tail -1)"
  
          # need to fetch the repo in order to build it.
          # default to github but allow override
-@@ -1020,6 +1027,14 @@ build_spl_zfs() {
+         git clone ${SPLZFSGITREPO:-"https://github.com/zfsonlinux"}/$pkg.git $pkg 2>&1
  
          pushd $pkg || return 255
- 
-+	if [ -n "$SPLZFSTAG" ];
+-
+-        # XXX - _having_ to give a package a kernel just to have it configure
+-        #       enough to do a "make dist" is truely bogus!
+-        if  ! ./configure --with-linux=${LINUX} \
++	if [ -n "$SPLZFSTAG" ]; then
 +	    git checkout $SPLZFSTAG
 +	else
-+	    git checkout -b $pkg-$SPLZFSVER $pkg-$SPLZFSVER
++	    git checkout -b lbuild $pkg-$SPLZFSVER
++	fi
++
++	# This differentiates between older zfs versions
++	if [ -f $pkg-modules.spec.in ]; then
++	    rpmpkg=$pkg-modules
++	    specdir=.
++	    speclist="$pkg.spec $rpmpkg.spec"
++	else
++            rpmpkg=kmod-$pkg-devel
++	    specdir=rpm/generic
++	    speclist="$pkg.spec $pkg-kmod.spec $pkg-dkms.spec"
 +	fi
 +
 +	sh autogen.sh || return 255
 +
-         # XXX - _having_ to give a package a kernel just to have it configure
-         #       enough to do a "make dist" is truely bogus!
-         if  ! ./configure --with-linux=${LINUX} \
-@@ -1028,66 +1043,22 @@ build_spl_zfs() {
++        if  ! ./configure --with-linux=${LINUX} --with-linux-obj=${LINUX} \
+                           ${spldir:+--with-spl="${spldir}"} 2>&1 ||
+             ! make dist 2>&1; then
              popd
-             return 255
+@@ -1030,71 +1054,57 @@ build_spl_zfs() {
          fi
--        popd
+         popd
  
 -        # XXX - dirty hack time.  ~sigh~
 -        #       because the spl tarball contains two .spec files, we cannot
 -        #       simply rebuild the tarball
 -        ln $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
 -            error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
-+	make rpm || return 255
- 
+-
 -        # First build the userspace tools RPMs
 -        if ! $RPMBUILD $targets -bb $pkg/$pkg.spec \
 -            --nodeps -v \
@@ -918,10 +937,7 @@ index f389505..075fcb0 100755
 -            --define "_topdir $TOPDIR" 2>&1; then
 -            return 255
 -        fi
-+	if $DO_SRC; then
-+	    make srpm || return 255
-+	fi
- 
+-
 -        if $DO_SRC; then
 -            if ! $RPMBUILD -bs $pkg/$pkg.spec \
 -                --nodeps -v \
@@ -929,11 +945,39 @@ index f389505..075fcb0 100755
 -                --define "_tmppath /var/tmp" \
 -                --define "_topdir $TOPDIR" 2>&1; then
 -                return 255
--            fi
++        ln -f $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
++           error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
++	if [ -f $pkg/scripts/kmodtool ]; then
++	    ln -f $pkg/scripts/kmodtool $TOPDIR/SOURCES/
++	fi
++
++	local rpmb
++	if $DO_SRC; then
++	    rpmb=-ba
++	else
++	    rpmb=-bb
++	fi
++
++	# set search dir for our own kmodtool to find correct
++	# directories
++	export KERNELSOURCE=$(dirname ${LINUX})
++	# Manually build rpms
++	for spec in $speclist; do
++	    echo "Building RPMs from $pkg/$specdir/$spec"
++            if ! $RPMBUILD $rpmb $pkg/$specdir/$spec \
++		--nodeps -v \
++		--define "require_kdir ${LINUX}" \
++		${LINUXOBJ:+--define "require_kobj ${LINUXOBJ}"} \
++		${spldir:+--define "require_spldir ${spldir}"} \
++		--define "kver $kver" \
++		--define "kernels $kver" \
++		--define "_tmppath /var/tmp" \
++		--define "kernelbuildroot $(find_linux_builddir $LINUX)" \
++		--define "_topdir $TOPDIR" 2>&1; then
++		return 255
+             fi
 -        fi
-+	$DO_SRC && mv $pkg*.src.rpm $TOPDIR/SRPMS/
-+	mv $pkg*.noarch.rpm $TOPDIR/RPMS/noarch/
-+	mv *$pkg*.$arch.rpm $TOPDIR/RPMS/$(basearch $arch)/
++	done
  
 -        # Now the kernel module RPMs
 -        # Need to provide pointers to the lustre kernel source, objects, usr/src
@@ -949,7 +993,10 @@ index f389505..075fcb0 100755
 -            --define "_topdir $TOPDIR" 2>&1; then
 -            return 255
 -        fi
--
++#	$DO_SRC && mv $pkg*.src.rpm $TOPDIR/SRPMS/
++#	mv $pkg*.noarch.rpm $TOPDIR/RPMS/noarch/
++#	mv *$pkg*.$TARGET_ARCH.rpm $TOPDIR/RPMS/$(basearch $TARGET_ARCH)/
+ 
 -        if $DO_SRC; then
 -            if ! $RPMBUILD -bs $pkg/$rpmmod.spec \
 -                --nodeps -v \
@@ -964,18 +1011,54 @@ index f389505..075fcb0 100755
 -                return 255
 -            fi
 -        fi
-+        popd
- 
+-
 -        # We have built the rpms for the package. No we need to extract the
 +        # We have built the rpms for the package. Now we need to extract the
          # contained files so we can build further things against them
 -        local rpm=$(ls $TOPDIR/RPMS/*/$rpmmod-devel-*.rpm)
-+        local rpm=$(ls $TOPDIR/RPMS/*/$rpmpkg-*.rpm)
++        local rpms=$(ls -1 $TOPDIR/RPMS/*/$rpmpkg-*.rpm)
  
          # cpio only extract to pwd so we need to go there.
          pushd $TOPDIR
+-        rpm2cpio < $rpm | cpio -id
++	local rpm
++	for rpm in $rpms; do
++            rpm2cpio $rpm | cpio -id
++	done
+         popd
+ 
+-        CONFIGURE_FLAGS="--with-$pkg=$(ls -d $TOPDIR/usr/src/$pkg-*/*) ${CONFIGURE_FLAGS}"
++        CONFIGURE_FLAGS="--with-$pkg=$(ls -d $TOPDIR/usr/src/$pkg-*/|tail -1) ${CONFIGURE_FLAGS}"
++        CONFIGURE_FLAGS="--with-$pkg-obj=$(ls -d $TOPDIR/usr/src/$pkg-*/$kver*|tail -1) ${CONFIGURE_FLAGS}"
+     done
+ 
+     OSDZFSRPM=true
+@@ -1177,7 +1187,15 @@ find_linux_release() {
+     fi
+ 
+     sed -ne 's/#define UTS_RELEASE "\(.*\)"$/\1/p' $LINUXRELEASEHEADER
++}
++
++# This funcition finds the buildroot directory for a given linux
++# kernel directory
++find_linux_builddir() {
++    local linux=${1:-${LINUX}}
++    local rel=$(find_linux_release $linux)
+ 
++    echo ${linux%/usr/src/kernels/${rel}*}
+ }
+ 
+ # unpack kernel(/source/devel) RPM
+@@ -1765,6 +1783,7 @@ create_rpmbuild_dirs() {
+         fi
+         [ -d RPMS/$arch ] || mkdir RPMS/$arch
+     done
++    [ -d RPMS/noarch ] || mkdir RPMS/noarch
+     [ -d BUILD ] || mkdir BUILD
+     [ -d SOURCES ] || mkdir SOURCES
+     [ -d SPECS ] || mkdir SPECS
 diff --git a/lustre.spec.in b/lustre.spec.in
-index edd02f5..11ff302 100644
+index afb5016..d07949a 100644
 --- a/lustre.spec.in
 +++ b/lustre.spec.in
 @@ -115,7 +115,7 @@ backing store of a Lustre server.
@@ -1003,19 +1086,19 @@ index 0a2dceb..7def377 100644
  
  @INCLUDE_RULES@
 diff --git a/lustre/utils/Makefile.am b/lustre/utils/Makefile.am
-index bc8d716..6ee11c6 100644
+index a353557..23bde35 100644
 --- a/lustre/utils/Makefile.am
 +++ b/lustre/utils/Makefile.am
-@@ -132,7 +132,7 @@ endif
+@@ -133,7 +133,7 @@ endif
  if ZFS_ENABLED
  mount_lustre_SOURCES += mount_utils_zfs.c
- mount_lustre_CPPFLAGS = -DHAVE_IOCTL_IN_UNISTD_H
+ mount_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
 -mount_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
 +mount_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
  mount_lustre_LDFLAGS = -pthread -rdynamic -ldl
  endif
  
-@@ -148,7 +148,7 @@ endif
+@@ -149,7 +149,7 @@ endif
  if ZFS_ENABLED
  mkfs_lustre_SOURCES += mount_utils_zfs.c
  mkfs_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
@@ -1024,7 +1107,7 @@ index bc8d716..6ee11c6 100644
  mkfs_lustre_LDFLAGS = -pthread -rdynamic -ldl
  endif
  
-@@ -162,7 +162,7 @@ endif
+@@ -163,7 +163,7 @@ endif
  if ZFS_ENABLED
  tunefs_lustre_SOURCES += mount_utils_zfs.c
  tunefs_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 91%
rename from sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index c4f19b0..6b02321 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From 29c00d6083612106ff71041f04c9c5d57a80f102 Mon Sep 17 00:00:00 2001
+From 9988e7ade168cf979b02e0cd840cf86b0e696666 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/13] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 10/12] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -14,10 +14,10 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
  1 file changed, 58 insertions(+), 8 deletions(-)
 
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index ec77262..244d398 100644
+index fe4f4da..0ab7cdb 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
-@@ -325,14 +325,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -330,14 +330,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 95%
rename from sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index 1e56bb0..f05aeaf 100644
--- a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From 25de8fa499a714c6ef1f1f7f160b2bb9ee999d1d Mon Sep 17 00:00:00 2001
+From ce1f67c5c62e85f4b64146563dcf365209592aaa Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 10/13] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+Subject: [PATCH 11/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 
@@ -49,7 +49,7 @@ index be06e74..b747804 100644
  #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
  #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 4305757..29fd787 100644
+index 909fe8a..e460935 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2293,6 +2293,29 @@ LB_LINUX_TRY_COMPILE([
@@ -93,7 +93,7 @@ index 4305757..29fd787 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index 54effc5..7571513 100644
+index 27139fb..da2b8c0 100644
 --- a/lustre/include/linux/lustre_compat25.h
 +++ b/lustre/include/linux/lustre_compat25.h
 @@ -617,8 +617,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)

diff --git a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
similarity index 87%
rename from sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
rename to sys-cluster/lustre/files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index c041399..4c7c7b0 100644
--- a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From 71c27957c6f925c571db9ea0850e0adcbbb1540a Mon Sep 17 00:00:00 2001
+From 339363a3e668585842a8a11ec141734521063e3e Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 11/13] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 12/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 
@@ -21,7 +21,7 @@ Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
  2 files changed, 27 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 29fd787..ea5b5fb 100644
+index e460935..0cc6ef4 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2316,6 +2316,28 @@ LB_LINUX_TRY_COMPILE([
@@ -62,10 +62,10 @@ index 29fd787..ea5b5fb 100644
  	 #
  	 if test x$enable_server = xyes ; then
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 14ea720..14d275c 100644
+index 878f645..f7f7938 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
-@@ -639,7 +639,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+@@ -640,7 +640,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
          }
  	filp->f_version = inode->i_version;
  #ifdef HAVE_TOUCH_ATIME_1ARG

diff --git a/sys-cluster/lustre/files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch b/sys-cluster/lustre/files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
deleted file mode 100644
index bca27ed..0000000
--- a/sys-cluster/lustre/files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-From b8082dba90589573713e521935f07dd78bf39461 Mon Sep 17 00:00:00 2001
-From: Alex Zhuravlev <alexey.zhuravlev@intel.com>
-Date: Tue, 16 Apr 2013 19:21:13 +0400
-Subject: [PATCH 12/13] LU-3179 fids: fix compilation error with gcc 4.7.2
-
-initialize oi.oi.oi_id which gcc 4.7.2 is afraid of being
-used later.
-
-Signed-off-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
-Change-Id: Iaeb6eac01340d80786463efe67ff74479017f074
----
- lustre/include/lustre_fid.h | 1 +
- 1 file changed, 1 insertion(+)
-
-diff --git a/lustre/include/lustre_fid.h b/lustre/include/lustre_fid.h
-index 1b6d0ff..1c37c7a 100644
---- a/lustre/include/lustre_fid.h
-+++ b/lustre/include/lustre_fid.h
-@@ -624,6 +624,7 @@ static inline void ost_fid_build_resid(const struct lu_fid *fid,
- {
- 	if (fid_is_mdt0(fid) || fid_is_idif(fid)) {
- 		struct ost_id oi;
-+		oi.oi.oi_id = 0; /* gcc 4.7.2 complains otherwise */
- 		if (fid_to_ostid(fid, &oi) != 0)
- 			return;
- 		ostid_build_res_name(&oi, resname);
--- 
-1.8.2.1
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 6905f89..063ef14 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -33,19 +33,18 @@ DEPEND="
 RDEPEND="${DEPEND}"
 
 PATCHES=(
-	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch"
-	"${FILESDIR}/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
-	"${FILESDIR}/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
-	"${FILESDIR}/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
-	"${FILESDIR}/0006-LU-2800-llite-introduce-local-getname.patch"
-	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
-	"${FILESDIR}/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
-	"${FILESDIR}/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch"
-	"${FILESDIR}/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
+	"${FILESDIR}/0001-LU-1812-kernel-3.7-FC18-server-patches.patch"
+	"${FILESDIR}/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
+	"${FILESDIR}/0003-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
+	"${FILESDIR}/0004-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
+	"${FILESDIR}/0005-LU-2800-llite-introduce-local-getname.patch"
+	"${FILESDIR}/0006-LU-2987-llite-rcu-free-inode.patch"
+	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
+	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
+	"${FILESDIR}/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
+	"${FILESDIR}/0010-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
+	"${FILESDIR}/0011-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0012-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-04-23  7:43 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-04-23  7:43 UTC (permalink / raw
  To: gentoo-commits

commit:     8f38247f6ea8e15806132f2b3ebc75f6d331d9e5
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 23 07:43:05 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue Apr 23 07:43:05 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=8f38247f

Add rebased patches

Package-Manager: portage-2.2.0_alpha173
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   19 +++++++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    2 +-
 ...rnel-3.0-SuSE-and-3.6-FC18-server-patches.patch |    2 +-
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |    2 +-
 ...6-kernel-Kernel-update-for-3.7.2-201.fc18.patch |    2 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    6 +-
 ...006-LU-2800-llite-introduce-local-getname.patch |    2 +-
 .../files/0007-LU-2987-llite-rcu-free-inode.patch  |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   55 +++++++++-----------
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |    2 +-
 ...79-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch |    2 +-
 ...ids-fix-compilation-error-with-gcc-4.7.2.patch} |    4 +-
 ...-build-zfs-0.6.1-kmod-dkms-compatibility.patch} |    4 +-
 sys-cluster/lustre/lustre-9999.ebuild              |   14 +----
 15 files changed, 62 insertions(+), 58 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index fa2cda8..418a4bf 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,25 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  23 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch,
+  +files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch,
+  files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0006-LU-2800-llite-introduce-local-getname.patch,
+  files/0007-LU-2987-llite-rcu-free-inode.patch,
+  files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  lustre-9999.ebuild:
+  Add rebased patches
+
   22 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Fix zfs-osd build
 

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index acb8aed..c4f19b0 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,4 +1,4 @@
-From affa65ad873b40c6955c05378f8281b76f152644 Mon Sep 17 00:00:00 2001
+From 29c00d6083612106ff71041f04c9c5d57a80f102 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
 Subject: [PATCH 01/13] LU-2982 build: make AC check for linux arch sandbox

diff --git a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
index 3820939..8ed8d9a 100644
--- a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
+++ b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
@@ -1,4 +1,4 @@
-From ac2426ce1a31fba4d47c3606622553e98867e7f3 Mon Sep 17 00:00:00 2001
+From 63af3a0a24703ae6a818c801ba70023995ebc7d3 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 9 Apr 2013 11:26:00 -0400
 Subject: [PATCH 02/13] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
index 3c8976d..1332ac8 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -1,4 +1,4 @@
-From 2b5c323ddaee25e6fae99dca6f042958903d1a5f Mon Sep 17 00:00:00 2001
+From 165b74cfea18405a1ad0a01ed1c3ea946f9d8ce5 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:14:09 +0800
 Subject: [PATCH 03/13] LU-2686 kernel: sock_map_fd() replaced by

diff --git a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index 44bd326..f119c9b 100644
--- a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,4 +1,4 @@
-From 5d200066e79329977b80dae1b824fb56f8a8e2c4 Mon Sep 17 00:00:00 2001
+From dc6776e7aab810ff4db384de86c323e80649dc7c Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:04:22 +0800
 Subject: [PATCH 04/13] LU-2686 kernel: Kernel update for 3.7.2-201.fc18

diff --git a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index fd11603..4d16377 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,4 +1,4 @@
-From 6ccd0a77a72119e7ac09978829a2ce1aa47863e0 Mon Sep 17 00:00:00 2001
+From 6e14a93978fe30cbc424fc727f26354172756afd Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
 Subject: [PATCH 05/13] LU-2850 compat: posix_acl_{to,from}_xattr take
@@ -134,7 +134,7 @@ index f9e425d..7e3eb53 100644
                  RETURN(rc);
          }
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 9f3dea4..c9aa7a0 100644
+index f068026..ce18acf 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -41,6 +41,7 @@
@@ -145,7 +145,7 @@ index 9f3dea4..c9aa7a0 100644
  #else
  # include <liblustre.h>
  #endif
-@@ -465,7 +466,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
+@@ -470,7 +471,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
          if (!buf)
                  RETURN(-EPROTO);
  

diff --git a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
index b1be5ad..55bf18b 100644
--- a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
@@ -1,4 +1,4 @@
-From 1e9898786864f75f45cd50c31148b08b5697647d Mon Sep 17 00:00:00 2001
+From 5bde36648a5be0e425b93de1558cf91f3250ea65 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
 Subject: [PATCH 06/13] LU-2800 llite: introduce local getname()

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
index b441c46..a07c3db 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -1,4 +1,4 @@
-From fe121caa09062ce512e7b4733d3f253dbae475dc Mon Sep 17 00:00:00 2001
+From a6906bd6e814b95d37770f136bed99aa6481444c Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
 Subject: [PATCH 07/13] LU-2987 llite: rcu-free inode

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 3f6fcd1..2cb9ddb 100644
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,4 +1,4 @@
-From 6cc1686b5c1fed6e7ddfd72cfd4e01dc3eac696e Mon Sep 17 00:00:00 2001
+From 840f014f874952b091ae9a05c2d5e262549aad5e Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 17 Apr 2013 13:27:55 +0400
 Subject: [PATCH 08/13] LU-2850 kernel: 3.8 upstream removes vmtruncate()

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 50480b4..88a98e7 100644
--- a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,4 +1,4 @@
-From 56d9f2bdeacf3d4f1a78cd5cac53436cce00014e Mon Sep 17 00:00:00 2001
+From fe026adf859311df9a8b329e37d00fb4296aad46 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
 Subject: [PATCH 09/13] LU-2850 kernel: 3.8 upstream kills daemonize()
@@ -37,7 +37,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
  libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
  libcfs/libcfs/workitem.c                   | 26 +++++-----
- lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
+ lnet/klnds/gnilnd/gnilnd_cb.c              |  3 --
  lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
  lnet/klnds/gnilnd/gnilnd_stack.c           |  1 -
  lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
@@ -85,7 +85,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 515 insertions(+), 745 deletions(-)
+ 68 files changed, 515 insertions(+), 744 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
@@ -824,10 +824,10 @@ index db839e5..309cfec 100644
  		CERROR("Failed to create thread for WI scheduler %s: %d\n",
  		       name, rc);
 diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
-index 56be88a..53d8337 100644
+index 381aa64..a4407de 100644
 --- a/lnet/klnds/gnilnd/gnilnd_cb.c
 +++ b/lnet/klnds/gnilnd/gnilnd_cb.c
-@@ -2609,7 +2609,6 @@ kgnilnd_reaper(void *arg)
+@@ -2946,7 +2946,6 @@ kgnilnd_reaper(void *arg)
  	struct timer_list  timer;
  	DEFINE_WAIT(wait);
  
@@ -835,13 +835,7 @@ index 56be88a..53d8337 100644
  	cfs_block_allsigs();
  
  	/* all gnilnd threads need to run fairly urgently */
-@@ -4247,14 +4246,11 @@ kgnilnd_scheduler(void *arg)
- {
- 	int               threadno = (long)arg;
- 	kgn_device_t     *dev;
--	char              name[16];
- 	int               busy_loops = 0;
- 	DEFINE_WAIT(wait);
+@@ -4857,8 +4856,6 @@ kgnilnd_scheduler(void *arg)
  
  	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
  
@@ -851,10 +845,10 @@ index 56be88a..53d8337 100644
  
  	/* all gnilnd threads need to run fairly urgently */
 diff --git a/lnet/klnds/gnilnd/gnilnd_conn.c b/lnet/klnds/gnilnd/gnilnd_conn.c
-index 38aee5b..a64ed3f 100644
+index 39716b8..a513ccd 100644
 --- a/lnet/klnds/gnilnd/gnilnd_conn.c
 +++ b/lnet/klnds/gnilnd/gnilnd_conn.c
-@@ -2157,13 +2157,10 @@ int
+@@ -2167,13 +2167,10 @@ int
  kgnilnd_dgram_waitq(void *arg)
  {
  	kgn_device_t     *dev = (kgn_device_t *) arg;
@@ -868,7 +862,7 @@ index 38aee5b..a64ed3f 100644
  	cfs_block_allsigs();
  
  	/* all gnilnd threads need to run fairly urgently */
-@@ -2312,15 +2309,12 @@ int
+@@ -2345,7 +2342,6 @@ int
  kgnilnd_dgram_mover(void *arg)
  {
  	kgn_device_t            *dev = (kgn_device_t *)arg;
@@ -876,7 +870,8 @@ index 38aee5b..a64ed3f 100644
  	int                      rc, did_something;
  	unsigned long            next_purge_check = jiffies - 1;
  	unsigned long            timeout;
- 	struct timer_list        timer;
+@@ -2353,8 +2349,6 @@ kgnilnd_dgram_mover(void *arg)
+ 	unsigned long		 deadline = 0;
  	DEFINE_WAIT(wait);
  
 -	snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
@@ -885,10 +880,10 @@ index 38aee5b..a64ed3f 100644
  	/* all gnilnd threads need to run fairly urgently */
  	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
 diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
-index 10ae493..9dbc3a1 100644
+index 0dec950..7414233 100644
 --- a/lnet/klnds/gnilnd/gnilnd_stack.c
 +++ b/lnet/klnds/gnilnd/gnilnd_stack.c
-@@ -362,7 +362,6 @@ kgnilnd_ruhroh_thread(void *arg)
+@@ -366,7 +366,6 @@ kgnilnd_ruhroh_thread(void *arg)
  	int                i = 1;
  	DEFINE_WAIT(wait);
  
@@ -1729,10 +1724,10 @@ index cc8c4c8..d4d5027 100644
          usock_data.ud_state = UD_STATE_INITIALIZED;
  
 diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
-index 2e3a1d5..e61583a 100644
+index d89a90f..a497771 100644
 --- a/lustre/ldlm/ldlm_lib.c
 +++ b/lustre/ldlm/ldlm_lib.c
-@@ -1975,19 +1975,12 @@ static int target_recovery_thread(void *arg)
+@@ -1971,19 +1971,12 @@ static int target_recovery_thread(void *arg)
          struct ptlrpc_request *req;
          struct target_recovery_data *trd = &obd->obd_recovery_data;
          unsigned long delta;
@@ -1753,7 +1748,7 @@ index 2e3a1d5..e61583a 100644
          OBD_ALLOC_PTR(thread);
          if (thread == NULL)
                  RETURN(-ENOMEM);
-@@ -2112,22 +2105,24 @@ static int target_recovery_thread(void *arg)
+@@ -2108,22 +2101,24 @@ static int target_recovery_thread(void *arg)
  static int target_start_recovery_thread(struct lu_target *lut,
                                          svc_handler_t handler)
  {
@@ -2193,10 +2188,10 @@ index 6d5b7af..3211557 100644
                  thread_set_flags(thread, SVC_STOPPED);
                  thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index c9aa7a0..ead4bcf 100644
+index ce18acf..b9ad1b9 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
-@@ -1566,13 +1566,6 @@ static int mdc_changelog_send_thread(void *csdata)
+@@ -1571,13 +1571,6 @@ static int mdc_changelog_send_thread(void *csdata)
          CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
                 cs->cs_fp, cs->cs_startrec);
  
@@ -2210,7 +2205,7 @@ index c9aa7a0..ead4bcf 100644
          OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
          if (cs->cs_buf == NULL)
                  GOTO(out, rc = -ENOMEM);
-@@ -1609,12 +1602,10 @@ out:
+@@ -1614,12 +1607,10 @@ out:
  		llog_cat_close(NULL, llh);
          if (ctxt)
                  llog_ctxt_put(ctxt);
@@ -2227,7 +2222,7 @@ index c9aa7a0..ead4bcf 100644
  }
  
  static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1634,13 +1625,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
+@@ -1639,13 +1630,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
  	cs->cs_fp = fget(icc->icc_id);
  	cs->cs_flags = icc->icc_flags;
  
@@ -2803,10 +2798,10 @@ index 7634d22..595f710 100644
  
          l_wait_event(sec_gc_thread.t_ctl_waitq,
 diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
-index 63fee6d..7d73b13 100644
+index c141f49..8d52419 100644
 --- a/lustre/ptlrpc/service.c
 +++ b/lustre/ptlrpc/service.c
-@@ -2362,7 +2362,7 @@ static int ptlrpc_main(void *arg)
+@@ -2397,7 +2397,7 @@ static int ptlrpc_main(void *arg)
          ENTRY;
  
          thread->t_pid = cfs_curproc_pid();
@@ -2815,7 +2810,7 @@ index 63fee6d..7d73b13 100644
  
  	/* NB: we will call cfs_cpt_bind() for all threads, because we
  	 * might want to run lustre server only on a subset of system CPUs,
-@@ -2557,7 +2557,7 @@ static int ptlrpc_hr_main(void *arg)
+@@ -2592,7 +2592,7 @@ static int ptlrpc_hr_main(void *arg)
  
  	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
  		 hrp->hrp_cpt, hrt->hrt_id);
@@ -2824,7 +2819,7 @@ index 63fee6d..7d73b13 100644
  
  	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
  	if (rc != 0) {
-@@ -2623,10 +2623,13 @@ static int ptlrpc_start_hr_threads(void)
+@@ -2658,10 +2658,13 @@ static int ptlrpc_start_hr_threads(void)
  		int	rc = 0;
  
  		for (j = 0; j < hrp->hrp_nthrs; j++) {
@@ -2842,7 +2837,7 @@ index 63fee6d..7d73b13 100644
  				break;
  		}
  		cfs_wait_event(ptlrpc_hr.hr_waitq,
-@@ -2818,8 +2821,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
+@@ -2853,8 +2856,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
  	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
  	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
  	 */

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index c5df7b0..1e56bb0 100644
--- a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,4 +1,4 @@
-From 5e887c3185fc9d121da608d5e5733825edda72d9 Mon Sep 17 00:00:00 2001
+From 25de8fa499a714c6ef1f1f7f160b2bb9ee999d1d Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 19:32:30 +0400
 Subject: [PATCH 10/13] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args

diff --git a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index d6a199c..c041399 100644
--- a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,4 +1,4 @@
-From 74b8489747394fe4aee90912a0f5718eaa368f6c Mon Sep 17 00:00:00 2001
+From 71c27957c6f925c571db9ea0850e0adcbbb1540a Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
 Subject: [PATCH 11/13] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt

diff --git a/sys-cluster/lustre/files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch b/sys-cluster/lustre/files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
similarity index 86%
rename from sys-cluster/lustre/files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
rename to sys-cluster/lustre/files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
index df8f482..bca27ed 100644
--- a/sys-cluster/lustre/files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
+++ b/sys-cluster/lustre/files/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
@@ -1,7 +1,7 @@
-From 1eeb196b3315447fe81b2aa5a916f791e32b4fd5 Mon Sep 17 00:00:00 2001
+From b8082dba90589573713e521935f07dd78bf39461 Mon Sep 17 00:00:00 2001
 From: Alex Zhuravlev <alexey.zhuravlev@intel.com>
 Date: Tue, 16 Apr 2013 19:21:13 +0400
-Subject: [PATCH 13/13] LU-3179 fids: fix compilation error with gcc 4.7.2
+Subject: [PATCH 12/13] LU-3179 fids: fix compilation error with gcc 4.7.2
 
 initialize oi.oi.oi_id which gcc 4.7.2 is afraid of being
 used later.

diff --git a/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
similarity index 99%
rename from sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
rename to sys-cluster/lustre/files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
index 31e5f6a..f6f3bbf 100644
--- a/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ b/sys-cluster/lustre/files/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -1,7 +1,7 @@
-From a450f84644df523d0473305219ed81a300d743cc Mon Sep 17 00:00:00 2001
+From 4d081a6db49068649612223a7d47c3a72c0875d0 Mon Sep 17 00:00:00 2001
 From: Brian Behlendorf <behlendorf1@llnl.gov>
 Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 12/13] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+Subject: [PATCH 13/13] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
 
 With the release of zfs-0.6.1 the default install location of
 the zfs kmod headers and objects has changed.  The kmod headers

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index bac140d..6905f89 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -44,8 +44,8 @@ PATCHES=(
 	"${FILESDIR}/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
 	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
-	"${FILESDIR}/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
-	"${FILESDIR}/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch"
+	"${FILESDIR}/0012-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch"
+	"${FILESDIR}/0013-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
 )
 
 pkg_setup() {
@@ -56,16 +56,6 @@ pkg_setup() {
 
 src_prepare() {
 	epatch ${PATCHES[@]}
-	# fix libzfs lib name we have it as libzfs.so.1
-	sed -e 's:libzfs.so:libzfs.so.1:g' \
-		-e 's:libnvpair.so:libnvpair.so.1:g' \
-		-i lustre/utils/mount_utils_zfs.c || die
-
-	# fix some install paths
-	sed -e "s:$\(sysconfdir\)/udev:$(get_udevdir):g" \
-		-e "s:$\(sysconfdir\)/sysconfig:$\(sysconfdir\)/conf.d:g" \
-		-i lustre/conf/Makefile.am || die
-
 	# replace upstream autogen.sh by our src_prepare()
 	local DIRS="libcfs lnet lustre snmp"
 	local ACLOCAL_FLAGS


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-04-22  9:25 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-04-22  9:25 UTC (permalink / raw
  To: gentoo-commits

commit:     cdadd8bebbf14c415a0839cb3f2c7a9abe969102
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 22 09:24:41 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Apr 22 09:24:41 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=cdadd8be

Update lustre patches

Package-Manager: portage-2.2.0_alpha173
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   17 +++++++++++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    6 ++--
 ...rnel-3.0-SuSE-and-3.6-FC18-server-patches.patch |    6 ++--
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |    6 ++--
 ...6-kernel-Kernel-update-for-3.7.2-201.fc18.patch |    6 ++--
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    6 ++--
 ...006-LU-2800-llite-introduce-local-getname.patch |    6 ++--
 .../files/0007-LU-2987-llite-rcu-free-inode.patch  |    6 ++--
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    6 ++--
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   14 +++++-----
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |    6 ++--
 ...79-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch |    6 ++--
 ...7-build-zfs-0.6.1-kmod-dkms-compatibility.patch |    6 ++--
 ...fids-fix-compilation-error-with-gcc-4.7.2.patch |   29 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    1 +
 15 files changed, 87 insertions(+), 40 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 7ff1c93..3e0ef9d 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,23 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  22 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch,
+  files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0006-LU-2800-llite-introduce-local-getname.patch,
+  files/0007-LU-2987-llite-rcu-free-inode.patch,
+  files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   17 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Fix client build
 

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index d0ce05a..acb8aed 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From bb7a4a452a917bb998eb237af6c472aea7c70856 Mon Sep 17 00:00:00 2001
+From affa65ad873b40c6955c05378f8281b76f152644 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/13] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
@@ -91,5 +91,5 @@ index ec77262..244d398 100644
  #
  # LB_LINUX_TRY_COMPILE
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
index a2bd812..3820939 100644
--- a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
+++ b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
@@ -1,7 +1,7 @@
-From bbf10f6ddeb01a6653a5ffa77769aeb349741ee3 Mon Sep 17 00:00:00 2001
+From ac2426ce1a31fba4d47c3606622553e98867e7f3 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 9 Apr 2013 11:26:00 -0400
-Subject: [PATCH 02/12] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches
+Subject: [PATCH 02/13] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches
 
 This patch extends lustre server support to FC18 and
 SLES11 SP2 with a ZFS. At this time ldiskfs is not
@@ -21298,5 +21298,5 @@ index 2eb48dd..0000000
 -    fi
 -done
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
index 0d5f385..3c8976d 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -1,7 +1,7 @@
-From 6b3e1409cb327ab840c890e2bf01a55badaf720d Mon Sep 17 00:00:00 2001
+From 2b5c323ddaee25e6fae99dca6f042958903d1a5f Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:14:09 +0800
-Subject: [PATCH 03/12] LU-2686 kernel: sock_map_fd() replaced by
+Subject: [PATCH 03/13] LU-2686 kernel: sock_map_fd() replaced by
  sock_alloc_file()
 
 Use sock_alloc_file() replace sock_map_fd().
@@ -133,5 +133,5 @@ index 0a31b55..3be0f68 100644
  }
  
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index f96f6f5..44bd326 100644
--- a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,7 +1,7 @@
-From def3a96c6a0755136d13796e5ca4b620a22b125b Mon Sep 17 00:00:00 2001
+From 5d200066e79329977b80dae1b824fb56f8a8e2c4 Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:04:22 +0800
-Subject: [PATCH 04/12] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
+Subject: [PATCH 04/13] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
 Add uapi header to include search path.
 
@@ -180,5 +180,5 @@ index 61796c9..07cbdf8 100644
          !$ver->open("$dir/include/linux/version.h")) {
              die "Run make dep on '$dir'\n";
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index fef2787..fd11603 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From 55b8ccf5de7c8666695245ad95b528185b6c4cf3 Mon Sep 17 00:00:00 2001
+From 6ccd0a77a72119e7ac09978829a2ce1aa47863e0 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 05/12] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 05/13] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
@@ -155,5 +155,5 @@ index 9f3dea4..c9aa7a0 100644
                  rc = PTR_ERR(acl);
                  CERROR("convert xattr to acl: %d\n", rc);
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
index ca5daba..b1be5ad 100644
--- a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From dcecd2b8def2c9d034f4d3e02edcdac5373e47ef Mon Sep 17 00:00:00 2001
+From 1e9898786864f75f45cd50c31148b08b5697647d Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 06/12] LU-2800 llite: introduce local getname()
+Subject: [PATCH 06/13] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is
@@ -87,5 +87,5 @@ index 493996d..14ea720 100644
          }
          case IOC_LOV_GETINFO: {
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
index 75864b4..b441c46 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From 77a1e2d9c3339f42e9b9617501c126362c3d6088 Mon Sep 17 00:00:00 2001
+From fe121caa09062ce512e7b4733d3f253dbae475dc Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 07/12] LU-2987 llite: rcu-free inode
+Subject: [PATCH 07/13] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.
@@ -85,5 +85,5 @@ index 3f6aadf..0c768d5 100644
  int ll_init_inodecache(void)
  {
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index b9b4a43..3f6fcd1 100644
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From 42de9a90abb62598e77cd5ae03f88edf889dfb7c Mon Sep 17 00:00:00 2001
+From 6cc1686b5c1fed6e7ddfd72cfd4e01dc3eac696e Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 17 Apr 2013 13:27:55 +0400
-Subject: [PATCH 08/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 08/13] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
@@ -79,5 +79,5 @@ index db53842..aef8e4b 100644
  }
  
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index c82eb36..50480b4 100644
--- a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
-From f5d1ce5309c4bb7b39f6e49970a3d0e0a4e8a40e Mon Sep 17 00:00:00 2001
+From 56d9f2bdeacf3d4f1a78cd5cac53436cce00014e Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 09/12] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 09/13] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
@@ -1789,7 +1789,7 @@ index 2e3a1d5..e61583a 100644
  
  void target_stop_recovery_thread(struct obd_device *obd)
 diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 31925ff..3a9bf14 100644
+index da54fcd..f4d05c3 100644
 --- a/lustre/ldlm/ldlm_lockd.c
 +++ b/lustre/ldlm/ldlm_lockd.c
 @@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
@@ -1800,7 +1800,7 @@ index 31925ff..3a9bf14 100644
  
          expired_lock_thread.elt_state = ELT_READY;
          cfs_waitq_signal(&expired_lock_thread.elt_waitq);
-@@ -2570,14 +2569,17 @@ static int ldlm_bl_thread_main(void *arg);
+@@ -2577,14 +2576,17 @@ static int ldlm_bl_thread_main(void *arg);
  static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
  {
  	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
@@ -1824,7 +1824,7 @@ index 31925ff..3a9bf14 100644
  	}
  	wait_for_completion(&bltd.bltd_comp);
  
-@@ -2601,14 +2603,9 @@ static int ldlm_bl_thread_main(void *arg)
+@@ -2608,14 +2610,9 @@ static int ldlm_bl_thread_main(void *arg)
  
                  blp = bltd->bltd_blp;
  
@@ -1840,7 +1840,7 @@ index 31925ff..3a9bf14 100644
  		complete(&bltd->bltd_comp);
                  /* cannot use bltd after this, it is only on caller's stack */
          }
-@@ -2948,22 +2945,22 @@ static int ldlm_setup(void)
+@@ -2955,22 +2952,22 @@ static int ldlm_setup(void)
  	}
  
  # ifdef HAVE_SERVER_SUPPORT
@@ -2967,5 +2967,5 @@ index 037fb2b..5ab39e4 100644
  
  	l_wait_event(thread->t_ctl_waitq,
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index 600a96f..c5df7b0 100644
--- a/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From 127cc837cc6e8268e220288ed7a0209d944cc3f5 Mon Sep 17 00:00:00 2001
+From 5e887c3185fc9d121da608d5e5733825edda72d9 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 10/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+Subject: [PATCH 10/13] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 
@@ -111,5 +111,5 @@ index 54effc5..7571513 100644
  #define ll_d_hlist_node list_head
  #define ll_d_hlist_empty(list) list_empty(list)
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index 9c45f85..d6a199c 100644
--- a/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From ed04e52a97a68601eef0b426e32850bf0b0f2dda Mon Sep 17 00:00:00 2001
+From 74b8489747394fe4aee90912a0f5718eaa368f6c Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 11/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 11/13] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 
@@ -78,5 +78,5 @@ index 14ea720..14d275c 100644
  	touch_atime(&path);
  #else
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
index f9b70ff..31e5f6a 100644
--- a/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ b/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -1,7 +1,7 @@
-From a706113ecda6efa8186bfe8cf6ff94a845f56603 Mon Sep 17 00:00:00 2001
+From a450f84644df523d0473305219ed81a300d743cc Mon Sep 17 00:00:00 2001
 From: Brian Behlendorf <behlendorf1@llnl.gov>
 Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 12/12] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+Subject: [PATCH 12/13] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
 
 With the release of zfs-0.6.1 the default install location of
 the zfs kmod headers and objects has changed.  The kmod headers
@@ -1034,5 +1034,5 @@ index bc8d716..6ee11c6 100644
  endif
  
 -- 
-1.8.1.5
+1.8.2.1
 

diff --git a/sys-cluster/lustre/files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch b/sys-cluster/lustre/files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
new file mode 100644
index 0000000..df8f482
--- /dev/null
+++ b/sys-cluster/lustre/files/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch
@@ -0,0 +1,29 @@
+From 1eeb196b3315447fe81b2aa5a916f791e32b4fd5 Mon Sep 17 00:00:00 2001
+From: Alex Zhuravlev <alexey.zhuravlev@intel.com>
+Date: Tue, 16 Apr 2013 19:21:13 +0400
+Subject: [PATCH 13/13] LU-3179 fids: fix compilation error with gcc 4.7.2
+
+initialize oi.oi.oi_id which gcc 4.7.2 is afraid of being
+used later.
+
+Signed-off-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
+Change-Id: Iaeb6eac01340d80786463efe67ff74479017f074
+---
+ lustre/include/lustre_fid.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/lustre/include/lustre_fid.h b/lustre/include/lustre_fid.h
+index 1b6d0ff..1c37c7a 100644
+--- a/lustre/include/lustre_fid.h
++++ b/lustre/include/lustre_fid.h
+@@ -624,6 +624,7 @@ static inline void ost_fid_build_resid(const struct lu_fid *fid,
+ {
+ 	if (fid_is_mdt0(fid) || fid_is_idif(fid)) {
+ 		struct ost_id oi;
++		oi.oi.oi_id = 0; /* gcc 4.7.2 complains otherwise */
+ 		if (fid_to_ostid(fid, &oi) != 0)
+ 			return;
+ 		ostid_build_res_name(&oi, resname);
+-- 
+1.8.2.1
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 875a197..520927e 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -45,6 +45,7 @@ PATCHES=(
 	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
 	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
 	"${FILESDIR}/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
+	"${FILESDIR}/0013-LU-3179-fids-fix-compilation-error-with-gcc-4.7.2.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-04-17  9:59 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-04-17  9:59 UTC (permalink / raw
  To: gentoo-commits

commit:     e29c61718352489c6ca834d47f7ecba8629557f7
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 17 09:58:46 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Apr 17 09:58:46 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=e29c6171

forget to add one patch

Package-Manager: portage-2.2.0_alpha173
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   19 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    2 +-
 ...rnel-3.0-SuSE-and-3.6-FC18-server-patches.patch |    2 +-
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |    2 +-
 ...6-kernel-Kernel-update-for-3.7.2-201.fc18.patch |    2 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    2 +-
 ...006-LU-2800-llite-introduce-local-getname.patch |    2 +-
 .../files/0007-LU-2987-llite-rcu-free-inode.patch  |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch | 2971 ++++++++++++++++++++
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |    4 +-
 ...9-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch} |    4 +-
 ...-build-zfs-0.6.1-kmod-dkms-compatibility.patch} |    4 +-
 sys-cluster/lustre/lustre-9999.ebuild              |    7 +-
 14 files changed, 3008 insertions(+), 17 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index a0c78db..d4315a2 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,25 @@
 # $Header: $
 
   17 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  +files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  +files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch,
+  files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0006-LU-2800-llite-introduce-local-getname.patch,
+  files/0007-LU-2987-llite-rcu-free-inode.patch,
+  files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  lustre-9999.ebuild:
+  forget to add one patch
+
+  17 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch,
   +files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
   +files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index eb3bc8e..d0ce05a 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From bb7a4a452a917bb998eb237af6c472aea7c70856 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/11] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
index 6cc1365..a2bd812 100644
--- a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
+++ b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
@@ -1,7 +1,7 @@
 From bbf10f6ddeb01a6653a5ffa77769aeb349741ee3 Mon Sep 17 00:00:00 2001
 From: James Simmons <uja.ornl@gmail.com>
 Date: Tue, 9 Apr 2013 11:26:00 -0400
-Subject: [PATCH 02/11] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches
+Subject: [PATCH 02/12] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches
 
 This patch extends lustre server support to FC18 and
 SLES11 SP2 with a ZFS. At this time ldiskfs is not

diff --git a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
index 6ecd22d..0d5f385 100644
--- a/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -1,7 +1,7 @@
 From 6b3e1409cb327ab840c890e2bf01a55badaf720d Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:14:09 +0800
-Subject: [PATCH 03/11] LU-2686 kernel: sock_map_fd() replaced by
+Subject: [PATCH 03/12] LU-2686 kernel: sock_map_fd() replaced by
  sock_alloc_file()
 
 Use sock_alloc_file() replace sock_map_fd().

diff --git a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index 30bee1e..f96f6f5 100644
--- a/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,7 +1,7 @@
 From def3a96c6a0755136d13796e5ca4b620a22b125b Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:04:22 +0800
-Subject: [PATCH 04/11] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
+Subject: [PATCH 04/12] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
 Add uapi header to include search path.
 

diff --git a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 3f2b644..fef2787 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
 From 55b8ccf5de7c8666695245ad95b528185b6c4cf3 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 05/11] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 05/12] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to

diff --git a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
index 59b81d4..ca5daba 100644
--- a/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
 From dcecd2b8def2c9d034f4d3e02edcdac5373e47ef Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 06/11] LU-2800 llite: introduce local getname()
+Subject: [PATCH 06/12] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
index 9d9c836..75864b4 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
 From 77a1e2d9c3339f42e9b9617501c126362c3d6088 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 07/11] LU-2987 llite: rcu-free inode
+Subject: [PATCH 07/12] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 5335b32..b9b4a43 100644
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
 From 42de9a90abb62598e77cd5ae03f88edf889dfb7c Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 17 Apr 2013 13:27:55 +0400
-Subject: [PATCH 08/11] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 08/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
new file mode 100644
index 0000000..c82eb36
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -0,0 +1,2971 @@
+From f5d1ce5309c4bb7b39f6e49970a3d0e0a4e8a40e Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Mon, 18 Mar 2013 10:47:57 +0800
+Subject: [PATCH 09/12] LU-2850 kernel: 3.8 upstream kills daemonize()
+
+kernel_thread() is a low level kernel function.
+Instead of calling kernel_thread() and relying on daemonize()
+to create new kernel threads, we should really switch to
+kthread_run() and elimilate daemonize().
+
+Conflicts:
+	libcfs/autoconf/lustre-libcfs.m4
+	lustre/mdd/mdd_lfsck.c
+	lustre/obdclass/llog_cat.c
+	lustre/ptlrpc/recov_thread.c
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
+---
+ libcfs/autoconf/lustre-libcfs.m4           | 19 -------
+ libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
+ libcfs/include/libcfs/libcfs.h             | 13 +----
+ libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
+ libcfs/include/libcfs/posix/libcfs.h       |  1 +
+ libcfs/include/libcfs/user-prim.h          |  5 +-
+ libcfs/include/libcfs/winnt/winnt-prim.h   |  4 --
+ libcfs/libcfs/Makefile.in                  |  4 +-
+ libcfs/libcfs/darwin/darwin-prim.c         | 39 +++++++-------
+ libcfs/libcfs/darwin/darwin-utils.c        |  2 +-
+ libcfs/libcfs/debug.c                      | 20 ++++----
+ libcfs/libcfs/linux/Makefile.am            |  2 +-
+ libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
+ libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
+ libcfs/libcfs/tracefile.c                  | 15 +++---
+ libcfs/libcfs/user-prim.c                  | 38 +++++++-------
+ libcfs/libcfs/watchdog.c                   | 25 ++++-----
+ libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
+ libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
+ libcfs/libcfs/workitem.c                   | 26 +++++-----
+ lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
+ lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
+ lnet/klnds/gnilnd/gnilnd_stack.c           |  1 -
+ lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
+ lnet/klnds/mxlnd/mxlnd_cb.c                | 11 ----
+ lnet/klnds/o2iblnd/o2iblnd.c               | 13 +++--
+ lnet/klnds/o2iblnd/o2iblnd.h               |  2 +-
+ lnet/klnds/o2iblnd/o2iblnd_cb.c            | 23 +++------
+ lnet/klnds/ptllnd/ptllnd.c                 |  5 +-
+ lnet/klnds/ptllnd/ptllnd_cb.c              | 25 ++++-----
+ lnet/klnds/qswlnd/qswlnd.c                 |  3 +-
+ lnet/klnds/qswlnd/qswlnd_cb.c              | 13 +++--
+ lnet/klnds/ralnd/ralnd.c                   | 10 ++--
+ lnet/klnds/ralnd/ralnd.h                   |  2 +-
+ lnet/klnds/ralnd/ralnd_cb.c                | 19 ++-----
+ lnet/klnds/socklnd/socklnd.c               | 19 +++++--
+ lnet/klnds/socklnd/socklnd.h               |  2 +-
+ lnet/klnds/socklnd/socklnd_cb.c            | 30 ++++-------
+ lnet/lnet/acceptor.c                       | 11 ++--
+ lnet/lnet/module.c                         | 10 ++--
+ lnet/lnet/router.c                         | 20 ++++----
+ lnet/selftest/timer.c                      | 11 ++--
+ lnet/ulnds/socklnd/usocklnd.c              | 17 ++++---
+ lustre/ldlm/ldlm_lib.c                     | 31 +++++-------
+ lustre/ldlm/ldlm_lockd.c                   | 41 +++++++--------
+ lustre/ldlm/ldlm_pool.c                    | 53 +++++++++----------
+ lustre/llite/llite_capa.c                  | 25 +++++----
+ lustre/llite/llite_close.c                 | 26 ++++------
+ lustre/llite/lloop.c                       | 10 ++--
+ lustre/llite/statahead.c                   | 61 +++++++++++-----------
+ lustre/mdc/mdc_request.c                   | 34 ++++++-------
+ lustre/mdd/mdd_lfsck.c                     |  7 ++-
+ lustre/mdt/mdt_capa.c                      | 26 +++++-----
+ lustre/mgc/mgc_request.c                   | 31 ++++++------
+ lustre/mgs/mgs_nids.c                      | 13 ++---
+ lustre/obdclass/genops.c                   | 22 +++-----
+ lustre/obdclass/llog.c                     |  8 +--
+ lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
+ lustre/osp/osp_precreate.c                 | 15 +++---
+ lustre/osp/osp_sync.c                      |  9 ++--
+ lustre/ptlrpc/import.c                     | 34 +++++++------
+ lustre/ptlrpc/pinger.c                     | 39 +++++++-------
+ lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
+ lustre/ptlrpc/sec_gc.c                     | 12 ++---
+ lustre/ptlrpc/service.c                    | 19 ++++---
+ lustre/quota/qmt_lock.c                    | 17 +++----
+ lustre/quota/qsd_reint.c                   |  6 +--
+ lustre/quota/qsd_writeback.c               | 16 +++---
+ 68 files changed, 515 insertions(+), 745 deletions(-)
+ delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
+
+diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
+index 4545a7a..03a428c 100644
+--- a/libcfs/autoconf/lustre-libcfs.m4
++++ b/libcfs/autoconf/lustre-libcfs.m4
+@@ -696,23 +696,6 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ ])
+ 
+-# 2.6.18 store oom parameters in task struct.
+-# 2.6.32 store oom parameters in signal struct
+-AC_DEFUN([LIBCFS_OOMADJ_IN_SIG],
+-[AC_MSG_CHECKING([kernel store oom parameters in task])
+-LB_LINUX_TRY_COMPILE([
+-        #include <linux/sched.h>
+-],[
+-        ((struct signal_struct *)0)->oom_adj = 0;
+-],[
+-        AC_MSG_RESULT(yes)
+-        AC_DEFINE(HAVE_OOMADJ_IN_SIG, 1,
+-                  [kernel store a oom parameters in signal struct])
+-],[
+-        AC_MSG_RESULT(no)
+-])
+-])
+-
+ #
+ # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
+ #
+@@ -865,8 +848,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
+ # 2.6.32
+ LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
+ LC_SHRINKER_WANT_SHRINK_PTR
+-LIBCFS_HAVE_OOM_H
+-LIBCFS_OOMADJ_IN_SIG
+ # 2.6.33
+ LIBCFS_SYSCTL_CTLNAME
+ # 2.6.34
+diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
+index 7bc7af3..583e257 100644
+--- a/libcfs/include/libcfs/darwin/darwin-prim.h
++++ b/libcfs/include/libcfs/darwin/darwin-prim.h
+@@ -202,10 +202,8 @@ extern task_t	kernel_task;
+ 
+ #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
+ 
+-#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
+-
+-extern int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flag);
+-
++extern cfs_task_t kthread_run(cfs_thread_t func, void *arg,
++			      const char namefmt[], ...);
+ 
+ /*
+  * Wait Queue implementation
+diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h
+index 2375ed9..34c36a3 100644
+--- a/libcfs/include/libcfs/libcfs.h
++++ b/libcfs/include/libcfs/libcfs.h
+@@ -226,8 +226,7 @@ void cfs_enter_debugger(void);
+ /*
+  * Defined by platform
+  */
+-void cfs_daemonize(char *str);
+-int cfs_daemonize_ctxt(char *str);
++int unshare_fs_struct(void);
+ cfs_sigset_t cfs_get_blocked_sigs(void);
+ cfs_sigset_t cfs_block_allsigs(void);
+ cfs_sigset_t cfs_block_sigs(unsigned long sigs);
+@@ -236,16 +235,6 @@ void cfs_restore_sigs(cfs_sigset_t);
+ int cfs_signal_pending(void);
+ void cfs_clear_sigpending(void);
+ 
+-/*
+- * XXX Liang:
+- * these macros should be removed in the future,
+- * we keep them just for keeping libcfs compatible
+- * with other branches.
+- */
+-#define libcfs_daemonize(s)     cfs_daemonize(s)
+-#define cfs_sigmask_lock(f)     do { f= 0; } while (0)
+-#define cfs_sigmask_unlock(f)   do { f= 0; } while (0)
+-
+ int convert_server_error(__u64 ecode);
+ int convert_client_oflag(int cflag, int *result);
+ 
+diff --git a/libcfs/include/libcfs/linux/linux-prim.h b/libcfs/include/libcfs/linux/linux-prim.h
+index 1aeb5aa..31298e1 100644
+--- a/libcfs/include/libcfs/linux/linux-prim.h
++++ b/libcfs/include/libcfs/linux/linux-prim.h
+@@ -183,15 +183,6 @@ typedef long                            cfs_task_state_t;
+ 
+ #define CFS_DECL_WAITQ(wq)		DECLARE_WAIT_QUEUE_HEAD(wq)
+ 
+-#define cfs_kthread_run(fn, data, fmt, arg...) kthread_run(fn, data, fmt, ##arg)
+-
+-/* Kernel thread */
+-typedef int (*cfs_thread_t)(void *);
+-
+-#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
+-extern int cfs_create_thread(int (*fn)(void *),
+-                             void *arg, unsigned long flags);
+-
+ /*
+  * Task struct
+  */
+diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
+index 91158bc..c21e2e6 100644
+--- a/libcfs/include/libcfs/posix/libcfs.h
++++ b/libcfs/include/libcfs/posix/libcfs.h
+@@ -110,6 +110,7 @@
+ typedef unsigned long long cfs_cycles_t;
+ 
+ #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L)
++#define IS_ERR_VALUE(a) (IS_ERR(a))
+ #define PTR_ERR(a) ((long)(a))
+ #define ERR_PTR(a) ((void*)((long)(a)))
+ 
+diff --git a/libcfs/include/libcfs/user-prim.h b/libcfs/include/libcfs/user-prim.h
+index 85253d8..c4e806c 100644
+--- a/libcfs/include/libcfs/user-prim.h
++++ b/libcfs/include/libcfs/user-prim.h
+@@ -157,9 +157,10 @@ static inline int cfs_psdev_deregister(cfs_psdev_t *foo)
+ 
+ #ifdef HAVE_LIBPTHREAD
+ typedef int (*cfs_thread_t)(void *);
+-int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags);
++void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...);
+ #else
+-#define cfs_create_thread(l,m) LBUG()
++/* Fine, crash, but stop giving me compile warnings */
++#define kthread_run(f, a, n, ...) LBUG()
+ #endif
+ 
+ uid_t cfs_curproc_uid(void);
+diff --git a/libcfs/include/libcfs/winnt/winnt-prim.h b/libcfs/include/libcfs/winnt/winnt-prim.h
+index 985af01..e234bba 100644
+--- a/libcfs/include/libcfs/winnt/winnt-prim.h
++++ b/libcfs/include/libcfs/winnt/winnt-prim.h
+@@ -442,8 +442,6 @@ typedef struct _cfs_thread_context {
+     void *              arg;
+ } cfs_thread_context_t;
+ 
+-int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
+-
+ /*
+  * thread creation flags from Linux, not used in winnt
+  */
+@@ -461,8 +459,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
+ 
+ #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
+ 
+-#define CFS_DAEMON_FLAGS (CLONE_VM|CLONE_FILES)
+-
+ /*
+  * group_info: linux/sched.h
+  */
+diff --git a/libcfs/libcfs/Makefile.in b/libcfs/libcfs/Makefile.in
+index 71852cc..ddfadde 100644
+--- a/libcfs/libcfs/Makefile.in
++++ b/libcfs/libcfs/Makefile.in
+@@ -3,7 +3,7 @@ MODULES = libcfs
+ libcfs-linux-objs := linux-tracefile.o linux-debug.o
+ libcfs-linux-objs += linux-prim.o linux-mem.o linux-cpu.o
+ libcfs-linux-objs += linux-fs.o linux-sync.o linux-tcpip.o
+-libcfs-linux-objs += linux-lwt.o linux-proc.o linux-curproc.o
++libcfs-linux-objs += linux-proc.o linux-curproc.o
+ libcfs-linux-objs += linux-utils.o linux-module.o
+ libcfs-linux-objs += linux-crypto.o linux-crypto-crc32.o
+ libcfs-linux-objs += linux-crypto-adler.o
+@@ -29,7 +29,7 @@ sources:
+ 
+ libcfs-linux-objs := $(addprefix linux/,$(libcfs-linux-objs))
+ 
+-libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \
++libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \
+ 		   watchdog.o libcfs_string.o hash.o kernel_user_comm.o \
+ 		   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
+ 		   libcfs_mem.o libcfs_lock.o heap.o
+diff --git a/libcfs/libcfs/darwin/darwin-prim.c b/libcfs/libcfs/darwin/darwin-prim.c
+index 68d1c0d..8e0901f 100644
+--- a/libcfs/libcfs/darwin/darwin-prim.c
++++ b/libcfs/libcfs/darwin/darwin-prim.c
+@@ -333,24 +333,29 @@ cfs_thread_agent (void)
+ 
+ extern thread_t kernel_thread(task_t task, void (*start)(void));
+ 
+-int
+-cfs_create_thread(cfs_thread_t  func, void *arg, unsigned long flag)
+-{
+-        int ret = 0;
+-        thread_t th = NULL;
+-
+-        thread_arg_hold(&cfs_thread_arg, func, arg);
+-        th = kernel_thread(kernel_task, cfs_thread_agent);
+-        thread_arg_release(&cfs_thread_arg);
+-        if (th == THREAD_NULL)
++cfs_task_t
++kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
++{
++	int ret = 0;
++	thread_t th = NULL;
++
++	thread_arg_hold(&cfs_thread_arg, func, arg);
++	th = kernel_thread(kernel_task, cfs_thread_agent);
++	thread_arg_release(&cfs_thread_arg);
++	if (th != THREAD_NULL) {
++		/*
++		 * FIXME: change child thread name...
++		 * cfs_curproc_comm() is already broken. So it is left as is...
++		va_list args;
++		va_start(args, namefmt);
++		snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX,
++			 namefmt, args);
++		va_end(args);
++		 */
++	} else {
+                 ret = -1;
+-        return ret;
+-}
+-
+-void cfs_daemonize(char *str)
+-{
+-        snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX, "%s", str);
+-        return;
++	}
++	return (cfs_task_t)((long)ret);
+ }
+ 
+ /*
+diff --git a/libcfs/libcfs/darwin/darwin-utils.c b/libcfs/libcfs/darwin/darwin-utils.c
+index c66f8e8..909b586 100644
+--- a/libcfs/libcfs/darwin/darwin-utils.c
++++ b/libcfs/libcfs/darwin/darwin-utils.c
+@@ -531,7 +531,7 @@ static int is_last_frame(void *addr)
+ 		return 1;
+ 	else if (is_addr_in_range(addr, trap, syscall_trace))
+ 		return 1;
+-	else if (is_addr_in_range(addr, cfs_thread_agent, cfs_create_thread))
++	else if (is_addr_in_range(addr, cfs_thread_agent, kthread_run))
+ 		return 1;
+ 	else
+ 		return 0;
+diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c
+index f503781..16a8e99 100644
+--- a/libcfs/libcfs/debug.c
++++ b/libcfs/libcfs/debug.c
+@@ -367,16 +367,16 @@ void libcfs_debug_dumplog(void)
+         /* we're being careful to ensure that the kernel thread is
+          * able to set our state to running as it exits before we
+          * get to schedule() */
+-        cfs_waitlink_init(&wait);
+-        cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
+-        cfs_waitq_add(&debug_ctlwq, &wait);
+-
+-        dumper = cfs_kthread_run(libcfs_debug_dumplog_thread,
+-                                 (void*)(long)cfs_curproc_pid(),
+-                                 "libcfs_debug_dumper");
+-        if (IS_ERR(dumper))
+-                printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
+-                       " %ld\n", PTR_ERR(dumper));
++	cfs_waitlink_init(&wait);
++	cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
++	cfs_waitq_add(&debug_ctlwq, &wait);
++
++	dumper = kthread_run(libcfs_debug_dumplog_thread,
++			     (void *)(long)cfs_curproc_pid(),
++			     "libcfs_debug_dumper");
++	if (IS_ERR(dumper))
++		printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
++		       " %ld\n", PTR_ERR(dumper));
+         else
+                 cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
+ 
+diff --git a/libcfs/libcfs/linux/Makefile.am b/libcfs/libcfs/linux/Makefile.am
+index bb75462..3c0209f 100644
+--- a/libcfs/libcfs/linux/Makefile.am
++++ b/libcfs/libcfs/linux/Makefile.am
+@@ -1,4 +1,4 @@
+-EXTRA_DIST = linux-debug.c linux-lwt.c linux-prim.c linux-tracefile.c	\
++EXTRA_DIST = linux-debug.c linux-prim.c linux-tracefile.c	\
+ 	linux-fs.c linux-mem.c linux-proc.c linux-utils.c linux-lock.c	\
+ 	linux-module.c linux-sync.c linux-curproc.c linux-tcpip.c	\
+ 	linux-cpu.c linux-crypto.c linux-crypto-crc32.c linux-crypto-adler.c \
+diff --git a/libcfs/libcfs/linux/linux-lwt.c b/libcfs/libcfs/linux/linux-lwt.c
+deleted file mode 100644
+index d9d4dc1..0000000
+--- a/libcfs/libcfs/linux/linux-lwt.c
++++ /dev/null
+@@ -1,81 +0,0 @@
+-/*
+- * GPL HEADER START
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 only,
+- * as published by the Free Software Foundation.
+- *
+- * 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 version 2 for more details (a copy is included
+- * in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU General Public License
+- * version 2 along with this program; If not, see
+- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
+- *
+- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+- * CA 95054 USA or visit www.sun.com if you need additional information or
+- * have any questions.
+- *
+- * GPL HEADER END
+- */
+-/*
+- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+- * Use is subject to license terms.
+- *
+- * Copyright (c) 2012, Intel Corporation.
+- */
+-/*
+- * This file is part of Lustre, http://www.lustre.org/
+- * Lustre is a trademark of Sun Microsystems, Inc.
+- */
+-
+-# define DEBUG_SUBSYSTEM S_LNET
+-#include <linux/module.h>
+-#include <linux/sched.h>
+-#include <linux/spinlock.h>
+-
+-#ifdef HAVE_LINUX_OOM_H
+-#include <linux/oom.h>
+-#else
+-#include <linux/mm.h>
+-#endif
+-
+-int oom_get_adj(struct task_struct *task, int scope)
+-{
+-	int oom_adj;
+-#ifdef HAVE_OOMADJ_IN_SIG
+-	unsigned long flags;
+-
+-	spin_lock_irqsave(&task->sighand->siglock, flags);
+-	oom_adj = task->signal->oom_adj;
+-	task->signal->oom_adj = scope;
+-	spin_unlock_irqrestore(&task->sighand->siglock, flags);
+-
+-#else
+-	oom_adj = task->oomkilladj;
+-	task->oomkilladj = scope;
+-#endif
+-	return oom_adj;
+-}
+-
+-int cfs_create_thread(int (*fn)(void *),
+-                      void *arg, unsigned long flags)
+-{
+-        void *orig_info = current->journal_info;
+-        int rc;
+-        int old_oom;
+-
+-        old_oom = oom_get_adj(current, OOM_DISABLE);
+-        current->journal_info = NULL;
+-        rc = kernel_thread(fn, arg, flags);
+-        current->journal_info = orig_info;
+-        oom_get_adj(current, old_oom);
+-
+-        return rc;
+-}
+-EXPORT_SYMBOL(cfs_create_thread);
+diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
+index afb4465..6da1744 100644
+--- a/libcfs/libcfs/linux/linux-prim.c
++++ b/libcfs/libcfs/linux/linux-prim.c
+@@ -259,34 +259,20 @@ void cfs_enter_debugger(void)
+ #endif
+ }
+ 
+-void cfs_daemonize(char *str) {
+-        unsigned long flags;
+-
+-        daemonize(str);
+-        SIGNAL_MASK_LOCK(current, flags);
+-        sigfillset(&current->blocked);
+-        RECALC_SIGPENDING;
+-        SIGNAL_MASK_UNLOCK(current, flags);
+-}
+-
+-int cfs_daemonize_ctxt(char *str) {
+-
+-        cfs_daemonize(str);
+ #ifndef HAVE_UNSHARE_FS_STRUCT
+-        {
+-        struct task_struct *tsk = current;
+-        struct fs_struct *fs = NULL;
+-        fs = copy_fs_struct(tsk->fs);
+-        if (fs == NULL)
+-                return -ENOMEM;
+-        exit_fs(tsk);
+-        tsk->fs = fs;
+-        }
+-#else
+-        unshare_fs_struct();
++int unshare_fs_struct(void)
++{
++	struct task_struct *tsk = current;
++	struct fs_struct *fs = NULL;
++	fs = copy_fs_struct(tsk->fs);
++	if (fs == NULL)
++		return -ENOMEM;
++	exit_fs(tsk);
++	tsk->fs = fs;
++	return 0;
++}
++EXPORT_SYMBOL(unshare_fs_struct);
+ #endif
+-        return 0;
+-}
+ 
+ sigset_t
+ cfs_block_allsigs(void)
+@@ -373,8 +359,6 @@ libcfs_arch_cleanup(void)
+ EXPORT_SYMBOL(libcfs_arch_init);
+ EXPORT_SYMBOL(libcfs_arch_cleanup);
+ EXPORT_SYMBOL(cfs_enter_debugger);
+-EXPORT_SYMBOL(cfs_daemonize);
+-EXPORT_SYMBOL(cfs_daemonize_ctxt);
+ EXPORT_SYMBOL(cfs_block_allsigs);
+ EXPORT_SYMBOL(cfs_block_sigs);
+ EXPORT_SYMBOL(cfs_block_sigsinv);
+diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
+index d455e42..f874974 100644
+--- a/libcfs/libcfs/tracefile.c
++++ b/libcfs/libcfs/tracefile.c
+@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
+ 
+ 	/* we're started late enough that we pick up init's fs context */
+ 	/* this is so broken in uml?  what on earth is going on? */
+-	cfs_daemonize("ktracefiled");
+ 
+ 	spin_lock_init(&pc.pc_lock);
+ 	complete(&tctl->tctl_start);
+@@ -1106,16 +1105,16 @@ int cfs_trace_start_thread(void)
+ 
+ 	init_completion(&tctl->tctl_start);
+ 	init_completion(&tctl->tctl_stop);
+-        cfs_waitq_init(&tctl->tctl_waitq);
+-        cfs_atomic_set(&tctl->tctl_shutdown, 0);
++	cfs_waitq_init(&tctl->tctl_waitq);
++	cfs_atomic_set(&tctl->tctl_shutdown, 0);
+ 
+-        if (cfs_create_thread(tracefiled, tctl, 0) < 0) {
+-                rc = -ECHILD;
+-                goto out;
+-        }
++	if (IS_ERR(kthread_run(tracefiled, tctl, "ktracefiled"))) {
++		rc = -ECHILD;
++		goto out;
++	}
+ 
+ 	wait_for_completion(&tctl->tctl_start);
+-        thread_running = 1;
++	thread_running = 1;
+ out:
+ 	mutex_unlock(&cfs_trace_thread_mutex);
+         return rc;
+diff --git a/libcfs/libcfs/user-prim.c b/libcfs/libcfs/user-prim.c
+index eb21418..9f2b7b3 100644
+--- a/libcfs/libcfs/user-prim.c
++++ b/libcfs/libcfs/user-prim.c
+@@ -223,24 +223,25 @@ static void *cfs_thread_helper(void *data)
+         return NULL;
+ }
+ 
+-int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags)
++void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
+ {
+-        pthread_t tid;
+-        pthread_attr_t tattr;
+-        int rc;
+-        struct lustre_thread_arg *targ_p = malloc(sizeof(struct lustre_thread_arg));
++	pthread_t tid;
++	pthread_attr_t tattr;
++	int rc;
++	struct lustre_thread_arg *targ_p =
++				malloc(sizeof(struct lustre_thread_arg));
+ 
+-        if ( targ_p == NULL )
+-                return -ENOMEM;
++	if (targ_p == NULL)
++		return ERR_PTR(-ENOMEM);
+ 
+-        targ_p->f = func;
+-        targ_p->arg = arg;
++	targ_p->f = func;
++	targ_p->arg = arg;
+ 
+-        pthread_attr_init(&tattr);
+-        pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
+-        rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
+-        pthread_attr_destroy(&tattr);
+-        return -rc;
++	pthread_attr_init(&tattr);
++	pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
++	rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
++	pthread_attr_destroy(&tattr);
++	return ERR_PTR(rc);
+ }
+ #endif
+ 
+@@ -314,14 +315,9 @@ void cfs_enter_debugger(void)
+          */
+ }
+ 
+-void cfs_daemonize(char *str)
++int unshare_fs_struct()
+ {
+-        return;
+-}
+-
+-int cfs_daemonize_ctxt(char *str)
+-{
+-        return 0;
++	return 0;
+ }
+ 
+ cfs_sigset_t cfs_block_allsigs(void)
+diff --git a/libcfs/libcfs/watchdog.c b/libcfs/libcfs/watchdog.c
+index e08fe68..0981a2c 100644
+--- a/libcfs/libcfs/watchdog.c
++++ b/libcfs/libcfs/watchdog.c
+@@ -213,19 +213,11 @@ static void lcw_dump_stack(struct lc_watchdog *lcw)
+ static int lcw_dispatch_main(void *data)
+ {
+         int                 rc = 0;
+-        unsigned long       flags;
+         struct lc_watchdog *lcw;
+         CFS_LIST_HEAD      (zombies);
+ 
+         ENTRY;
+ 
+-        cfs_daemonize("lc_watchdogd");
+-
+-        SIGNAL_MASK_LOCK(current, flags);
+-        sigfillset(&current->blocked);
+-        RECALC_SIGPENDING;
+-        SIGNAL_MASK_UNLOCK(current, flags);
+-
+ 	complete(&lcw_start_completion);
+ 
+         while (1) {
+@@ -312,7 +304,7 @@ static int lcw_dispatch_main(void *data)
+ 
+ static void lcw_dispatch_start(void)
+ {
+-	int rc;
++	cfs_task_t *task;
+ 
+ 	ENTRY;
+ 	LASSERT(lcw_refcount == 1);
+@@ -321,13 +313,14 @@ static void lcw_dispatch_start(void)
+ 	init_completion(&lcw_start_completion);
+         cfs_waitq_init(&lcw_event_waitq);
+ 
+-        CDEBUG(D_INFO, "starting dispatch thread\n");
+-        rc = cfs_create_thread(lcw_dispatch_main, NULL, 0);
+-        if (rc < 0) {
+-                CERROR("error spawning watchdog dispatch thread: %d\n", rc);
+-                EXIT;
+-                return;
+-        }
++	CDEBUG(D_INFO, "starting dispatch thread\n");
++	task = kthread_run(lcw_dispatch_main, NULL, "lc_watchdogd");
++	if (IS_ERR(task)) {
++		CERROR("error spawning watchdog dispatch thread: %ld\n",
++			PTR_ERR(task));
++		EXIT;
++		return;
++	}
+ 	wait_for_completion(&lcw_start_completion);
+ 	CDEBUG(D_INFO, "watchdog dispatcher initialization complete.\n");
+ 
+diff --git a/libcfs/libcfs/winnt/winnt-prim.c b/libcfs/libcfs/winnt/winnt-prim.c
+index 8596a40..1d04567 100644
+--- a/libcfs/libcfs/winnt/winnt-prim.c
++++ b/libcfs/libcfs/winnt/winnt-prim.c
+@@ -82,22 +82,22 @@ cfs_thread_proc(
+ }
+ 
+ /*
+- * cfs_create_thread
++ * kthread_run
+  *   Create a system thread to execute the routine specified
+  *
+  * Arguments:
+  *   func:  function to be executed in the thread
+  *   arg:   argument transferred to func function
+- *   flag:  thread creation flags.
++ *   name:  thread name to create
+  *
+  * Return Value:
+- *   int:   0 on success or error codes
++ *   cfs_task_t:   0 on success or error codes
+  *
+  * Notes:
+  *   N/A
+  */
+ 
+-int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
++cfs_task_t kthread_run(int (*func)(void *), void *arg, char *name)
+ {
+     cfs_handle_t  thread = NULL;
+     NTSTATUS      status;
+@@ -108,7 +108,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
+     context = cfs_alloc(sizeof(cfs_thread_context_t), CFS_ALLOC_ZERO);
+ 
+     if (!context) {
+-        return -ENOMEM;
++	return ERR_PTR(-ENOMEM);
+     }
+ 
+     context->func  = func;
+@@ -130,7 +130,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
+ 
+         /* We need translate the nt status to linux error code */
+ 
+-        return cfs_error_code(status);
++	return ERR_PTR(cfs_error_code(status));
+     }
+ 
+     //
+@@ -139,7 +139,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
+ 
+     ZwClose(thread);
+ 
+-    return 0;
++	return (cfs_task_t)0;
+ }
+ 
+ 
+@@ -529,18 +529,9 @@ cfs_time_t cfs_timer_deadline(cfs_timer_t * timer)
+     return timer->deadline;
+ }
+ 
+-/*
+- * daemonize routine stub
+- */
+-
+-void cfs_daemonize(char *str)
++int unshare_fs_struct()
+ {
+-    return;
+-}
+-
+-int cfs_daemonize_ctxt(char *str) {
+-    cfs_daemonize(str);
+-    return 0;
++	return 0;
+ }
+ 
+ /*
+diff --git a/libcfs/libcfs/winnt/winnt-tcpip.c b/libcfs/libcfs/winnt/winnt-tcpip.c
+index 6fbf0a5..50d784f 100644
+--- a/libcfs/libcfs/winnt/winnt-tcpip.c
++++ b/libcfs/libcfs/winnt/winnt-tcpip.c
+@@ -5898,10 +5898,10 @@ ks_init_tdi_data()
+     }
+     for (i = 0; i < ks_data.ksnd_engine_nums; i++) {
+ 		spin_lock_init(&ks_data.ksnd_engine_mgr[i].lock);
+-        cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
+-        cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
+-        CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
+-        cfs_create_thread(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], 0);
++	cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
++	cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
++	CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
++	kthread_run(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], "");
+     }
+ 
+     /* register pnp handlers to watch network condition */
+diff --git a/libcfs/libcfs/workitem.c b/libcfs/libcfs/workitem.c
+index db839e5..309cfec 100644
+--- a/libcfs/libcfs/workitem.c
++++ b/libcfs/libcfs/workitem.c
+@@ -245,17 +245,7 @@ static int
+ cfs_wi_scheduler (void *arg)
+ {
+ 	struct cfs_wi_sched	*sched = (cfs_wi_sched_t *)arg;
+-	char			name[16];
+-
+-	if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
+-		snprintf(name, sizeof(name), "%s_%02d_%02d",
+-			 sched->ws_name, sched->ws_cpt, sched->ws_nthreads);
+-	} else {
+-		snprintf(name, sizeof(name), "%s_%02d",
+-			 sched->ws_name, sched->ws_nthreads);
+-	}
+ 
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	/* CPT affinity scheduler? */
+@@ -463,6 +453,8 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
+ 	rc = 0;
+ #ifdef __KERNEL__
+ 	while (nthrs > 0)  {
++		char	name[16];
++		cfs_task_t	*task;
+ 		spin_lock(&cfs_wi_data.wi_glock);
+ 		while (sched->ws_starting > 0) {
+ 			spin_unlock(&cfs_wi_data.wi_glock);
+@@ -473,11 +465,21 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
+ 		sched->ws_starting++;
+ 		spin_unlock(&cfs_wi_data.wi_glock);
+ 
+-		rc = cfs_create_thread(cfs_wi_scheduler, sched, 0);
+-		if (rc >= 0) {
++		if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
++			snprintf(name, sizeof(name), "%s_%02d_%02d",
++				 sched->ws_name, sched->ws_cpt,
++				 sched->ws_nthreads);
++		} else {
++			snprintf(name, sizeof(name), "%s_%02d",
++				 sched->ws_name, sched->ws_nthreads);
++		}
++
++		task = kthread_run(cfs_wi_scheduler, sched, name);
++		if (!IS_ERR(task)) {
+ 			nthrs--;
+ 			continue;
+ 		}
++		rc = PTR_ERR(task);
+ 
+ 		CERROR("Failed to create thread for WI scheduler %s: %d\n",
+ 		       name, rc);
+diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
+index 56be88a..53d8337 100644
+--- a/lnet/klnds/gnilnd/gnilnd_cb.c
++++ b/lnet/klnds/gnilnd/gnilnd_cb.c
+@@ -2609,7 +2609,6 @@ kgnilnd_reaper(void *arg)
+ 	struct timer_list  timer;
+ 	DEFINE_WAIT(wait);
+ 
+-	cfs_daemonize("kgnilnd_rpr");
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
+@@ -4247,14 +4246,11 @@ kgnilnd_scheduler(void *arg)
+ {
+ 	int               threadno = (long)arg;
+ 	kgn_device_t     *dev;
+-	char              name[16];
+ 	int               busy_loops = 0;
+ 	DEFINE_WAIT(wait);
+ 
+ 	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
+ 
+-	snprintf(name, sizeof(name), "kgnilnd_sd_%02d", threadno);
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
+diff --git a/lnet/klnds/gnilnd/gnilnd_conn.c b/lnet/klnds/gnilnd/gnilnd_conn.c
+index 38aee5b..a64ed3f 100644
+--- a/lnet/klnds/gnilnd/gnilnd_conn.c
++++ b/lnet/klnds/gnilnd/gnilnd_conn.c
+@@ -2157,13 +2157,10 @@ int
+ kgnilnd_dgram_waitq(void *arg)
+ {
+ 	kgn_device_t     *dev = (kgn_device_t *) arg;
+-	char              name[16];
+ 	gni_return_t      grc;
+ 	__u64             readyid;
+ 	DEFINE_WAIT(mover_done);
+ 
+-	snprintf(name, sizeof(name), "kgnilnd_dgn_%02d", dev->gnd_id);
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
+@@ -2312,15 +2309,12 @@ int
+ kgnilnd_dgram_mover(void *arg)
+ {
+ 	kgn_device_t            *dev = (kgn_device_t *)arg;
+-	char                     name[16];
+ 	int                      rc, did_something;
+ 	unsigned long            next_purge_check = jiffies - 1;
+ 	unsigned long            timeout;
+ 	struct timer_list        timer;
+ 	DEFINE_WAIT(wait);
+ 
+-	snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 	/* all gnilnd threads need to run fairly urgently */
+ 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
+diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
+index 10ae493..9dbc3a1 100644
+--- a/lnet/klnds/gnilnd/gnilnd_stack.c
++++ b/lnet/klnds/gnilnd/gnilnd_stack.c
+@@ -362,7 +362,6 @@ kgnilnd_ruhroh_thread(void *arg)
+ 	int                i = 1;
+ 	DEFINE_WAIT(wait);
+ 
+-	cfs_daemonize("kgnilnd_rr");
+ 	cfs_block_allsigs();
+ 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
+ 	kgnilnd_data.kgn_ruhroh_running = 1;
+diff --git a/lnet/klnds/mxlnd/mxlnd.c b/lnet/klnds/mxlnd/mxlnd.c
+index 558bfaf..dbe998f 100644
+--- a/lnet/klnds/mxlnd/mxlnd.c
++++ b/lnet/klnds/mxlnd/mxlnd.c
+@@ -385,24 +385,25 @@ failed_with_init:
+  * mxlnd_thread_start - spawn a kernel thread with this function
+  * @fn - function pointer
+  * @arg - pointer to the parameter data
++ * @name - name of new thread
+  *
+  * Returns 0 on success and a negative value on failure
+  */
+ int
+-mxlnd_thread_start(int (*fn)(void *arg), void *arg)
++mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        int     pid = 0;
++	cfs_task *task;
+         int     i   = (int) ((long) arg);
+ 
+         cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
+ 	init_completion(&kmxlnd_data.kmx_completions[i]);
+ 
+-        pid = cfs_create_thread(fn, arg, 0);
+-        if (pid < 0) {
+-                CERROR("cfs_create_thread() failed with %d\n", pid);
+-                cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
+-        }
+-        return pid;
++	task = kthread_run(fn, arg, name);
++	if (IS_ERR(task)) {
++		CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
++		cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
++	}
++	return PTR_ERR(task);
+ }
+ 
+ /**
+@@ -616,9 +617,13 @@ mxlnd_startup (lnet_ni_t *ni)
+                 *kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
+ 
+         for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
++		char                    name[24];
++		memset(name, 0, sizeof(name));
++		snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
+                 ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
+-                if (ret < 0) {
+-                        CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
++		if (ret < 0) {
++			CERROR("Starting mxlnd_request_waitd[%d] "
++				"failed with %d\n", i, ret);
+                         cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+                         mx_wakeup(kmxlnd_data.kmx_endpt);
+                         for (--i; i >= 0; i--) {
+@@ -631,7 +636,8 @@ mxlnd_startup (lnet_ni_t *ni)
+                         goto failed;
+                 }
+         }
+-        ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
++	ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
++				 "mxlnd_tx_queued");
+         if (ret < 0) {
+                 CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
+                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+@@ -644,7 +650,8 @@ mxlnd_startup (lnet_ni_t *ni)
+ 			nthreads * sizeof(struct completion));
+                 goto failed;
+         }
+-        ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
++	ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
++				 "mxlnd_timeoutd");
+         if (ret < 0) {
+                 CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
+                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+@@ -658,7 +665,8 @@ mxlnd_startup (lnet_ni_t *ni)
+ 			nthreads * sizeof(struct completion));
+                 goto failed;
+         }
+-        ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
++	ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
++				 "mxlnd_connd");
+         if (ret < 0) {
+                 CERROR("Starting mxlnd_connd failed with %d\n", ret);
+                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+diff --git a/lnet/klnds/mxlnd/mxlnd_cb.c b/lnet/klnds/mxlnd/mxlnd_cb.c
+index 5b67392..4b3961b 100644
+--- a/lnet/klnds/mxlnd/mxlnd_cb.c
++++ b/lnet/klnds/mxlnd/mxlnd_cb.c
+@@ -2554,8 +2554,6 @@ mxlnd_tx_queued(void *arg)
+ 	spinlock_t		*tx_q_lock = &kmxlnd_data.kmx_tx_queue_lock;
+ 	rwlock_t		*g_lock  = &kmxlnd_data.kmx_global_lock;
+ 
+-	cfs_daemonize("mxlnd_tx_queued");
+-
+ 	while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
+ 		ret = down_interruptible(&kmxlnd_data.kmx_tx_queue_sem);
+ 		if (cfs_atomic_read(&kmxlnd_data.kmx_shutdown))
+@@ -3485,7 +3483,6 @@ int
+ mxlnd_request_waitd(void *arg)
+ {
+         long                    id              = (long) arg;
+-        char                    name[24];
+         __u32                   result          = 0;
+         mx_return_t             mxret           = MX_SUCCESS;
+         mx_status_t             status;
+@@ -3497,10 +3494,6 @@ mxlnd_request_waitd(void *arg)
+         int                     count           = 0;
+ #endif
+ 
+-        memset(name, 0, sizeof(name));
+-        snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", id);
+-        cfs_daemonize(name);
+-
+         memset(&status, 0, sizeof(status));
+ 
+         CDEBUG(D_NET, "%s starting\n", name);
+@@ -3965,8 +3958,6 @@ mxlnd_connd(void *arg)
+ {
+         long                    id              = (long) arg;
+ 
+-        cfs_daemonize("mxlnd_connd");
+-
+         CDEBUG(D_NET, "connd starting\n");
+ 
+         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
+@@ -4040,8 +4031,6 @@ mxlnd_timeoutd(void *arg)
+         kmx_conn_t     *conn    = NULL;
+ 	rwlock_t   *g_lock  = &kmxlnd_data.kmx_global_lock;
+ 
+-        cfs_daemonize("mxlnd_timeoutd");
+-
+         CDEBUG(D_NET, "timeoutd starting\n");
+ 
+         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
+diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c
+index 7d3c025..86298dd 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd.c
++++ b/lnet/klnds/o2iblnd/o2iblnd.c
+@@ -3011,14 +3011,15 @@ kiblnd_base_startup(void)
+         kiblnd_data.kib_init = IBLND_INIT_DATA;
+         /*****************************************************/
+ 
+-        rc = kiblnd_thread_start(kiblnd_connd, NULL);
++	rc = kiblnd_thread_start(kiblnd_connd, NULL, "kiblnd_connd");
+         if (rc != 0) {
+                 CERROR("Can't spawn o2iblnd connd: %d\n", rc);
+                 goto failed;
+         }
+ 
+-        if (*kiblnd_tunables.kib_dev_failover != 0)
+-                rc = kiblnd_thread_start(kiblnd_failover_thread, NULL);
++	if (*kiblnd_tunables.kib_dev_failover != 0)
++		rc = kiblnd_thread_start(kiblnd_failover_thread, NULL,
++					 "kiblnd_failover");
+ 
+         if (rc != 0) {
+                 CERROR("Can't spawn o2iblnd failover thread: %d\n", rc);
+@@ -3060,9 +3061,11 @@ kiblnd_start_schedulers(struct kib_sched_info *sched)
+ 
+ 	for (i = 0; i < nthrs; i++) {
+ 		long	id;
+-
++		char	name[20];
+ 		id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
+-		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id);
++		snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
++			 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
++		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id, name);
+ 		if (rc == 0)
+ 			continue;
+ 
+diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
+index 87c7cc0..7585657 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd.h
++++ b/lnet/klnds/o2iblnd/o2iblnd.h
+@@ -1067,7 +1067,7 @@ void kiblnd_tunables_fini(void);
+ 
+ int  kiblnd_connd (void *arg);
+ int  kiblnd_scheduler(void *arg);
+-int  kiblnd_thread_start (int (*fn)(void *arg), void *arg);
++int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
+ int  kiblnd_failover_thread (void *arg);
+ 
+ int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
+diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c
+index 3cc7985..af92311 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd_cb.c
++++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c
+@@ -1805,15 +1805,15 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
+ }
+ 
+ int
+-kiblnd_thread_start (int (*fn)(void *arg), void *arg)
++kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long    pid = cfs_create_thread (fn, arg, 0);
++	cfs_task_t *task = kthread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return ((int)pid);
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+-        cfs_atomic_inc (&kiblnd_data.kib_nthreads);
+-        return (0);
++	cfs_atomic_inc(&kiblnd_data.kib_nthreads);
++	return 0;
+ }
+ 
+ void
+@@ -3135,7 +3135,6 @@ kiblnd_connd (void *arg)
+         int                peer_index = 0;
+         unsigned long      deadline = jiffies;
+ 
+-        cfs_daemonize ("kiblnd_connd");
+         cfs_block_allsigs ();
+ 
+         cfs_waitlink_init (&wait);
+@@ -3329,15 +3328,10 @@ kiblnd_scheduler(void *arg)
+ 	cfs_waitlink_t		wait;
+ 	unsigned long		flags;
+ 	struct ib_wc		wc;
+-	char			name[20];
+ 	int			did_something;
+ 	int			busy_loops = 0;
+ 	int			rc;
+ 
+-	snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
+-		 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
+-
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	cfs_waitlink_init(&wait);
+@@ -3346,10 +3340,10 @@ kiblnd_scheduler(void *arg)
+ 
+ 	rc = cfs_cpt_bind(lnet_cpt_table(), sched->ibs_cpt);
+ 	if (rc != 0) {
+-		CWARN("Failed to bind %s on CPT %d, please verify whether "
++		CWARN("Failed to bind on CPT %d, please verify whether "
+ 		      "all CPUs are healthy and reload modules if necessary, "
+ 		      "otherwise your system might under risk of low "
+-		      "performance\n", name, sched->ibs_cpt);
++		      "performance\n", sched->ibs_cpt);
+ 	}
+ 
+ 	spin_lock_irqsave(&sched->ibs_lock, flags);
+@@ -3464,7 +3458,6 @@ kiblnd_failover_thread(void *arg)
+ 
+         LASSERT (*kiblnd_tunables.kib_dev_failover != 0);
+ 
+-        cfs_daemonize ("kiblnd_failover");
+         cfs_block_allsigs ();
+ 
+         cfs_waitlink_init(&wait);
+diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c
+index 791f5c2..2edf87d 100644
+--- a/lnet/klnds/ptllnd/ptllnd.c
++++ b/lnet/klnds/ptllnd/ptllnd.c
+@@ -643,6 +643,7 @@ kptllnd_base_startup (void)
+         struct timeval  tv;
+         lnet_process_id_t  target;
+         ptl_err_t       ptl_rc;
++	char            name[16];
+ 
+         if (*kptllnd_tunables.kptl_max_procs_per_node < 1) {
+                 CERROR("max_procs_per_node must be >= 1\n");
+@@ -824,6 +825,7 @@ kptllnd_base_startup (void)
+          * now that PTLLND_INIT_DATA state has been entered */
+         CDEBUG(D_NET, "starting %d scheduler threads\n", PTLLND_N_SCHED);
+         for (i = 0; i < PTLLND_N_SCHED; i++) {
++		snprintf(name, sizeof(name), "kptllnd_sd_%02d", i);
+                 rc = kptllnd_thread_start(kptllnd_scheduler, (void *)((long)i));
+                 if (rc != 0) {
+                         CERROR("Can't spawn scheduler[%d]: %d\n", i, rc);
+@@ -831,7 +833,8 @@ kptllnd_base_startup (void)
+                 }
+         }
+ 
+-        rc = kptllnd_thread_start(kptllnd_watchdog, NULL);
++	snprintf(name, sizeof(name), "kptllnd_wd_%02d", i);
++	rc = kptllnd_thread_start(kptllnd_watchdog, NULL, name);
+         if (rc != 0) {
+                 CERROR("Can't spawn watchdog: %d\n", rc);
+                 goto failed;
+diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c
+index e815607..7be7e4d 100644
+--- a/lnet/klnds/ptllnd/ptllnd_cb.c
++++ b/lnet/klnds/ptllnd/ptllnd_cb.c
+@@ -651,26 +651,24 @@ kptllnd_thread_fini (void)
+ }
+ 
+ int
+-kptllnd_thread_start (int (*fn)(void *arg), void *arg)
++kptllnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long                pid;
++	cfs_task_t *task;
+ 
+-        cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
++	cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
+ 
+-        pid = cfs_create_thread (fn, arg, 0);
+-        if (pid >= 0)
+-                return 0;
+-
+-        CERROR("Failed to start thread: error %d\n", (int)pid);
+-        kptllnd_thread_fini();
+-        return (int)pid;
++	task = kthread_run(fn, arg, name);
++	if (IS_ERR(task)) {
++		CERROR("Failed to start thread: error %ld\n", PTR_ERR(task));
++		kptllnd_thread_fini();
++	}
++	return PTR_ERR(task);
+ }
+ 
+ int
+ kptllnd_watchdog(void *arg)
+ {
+         int                 id = (long)arg;
+-        char                name[16];
+         cfs_waitlink_t      waitlink;
+         int                 stamp = 0;
+         int                 peer_index = 0;
+@@ -678,8 +676,6 @@ kptllnd_watchdog(void *arg)
+         int                 timeout;
+         int                 i;
+ 
+-        snprintf(name, sizeof(name), "kptllnd_wd_%02d", id);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&waitlink);
+@@ -740,7 +736,6 @@ int
+ kptllnd_scheduler (void *arg)
+ {
+         int                 id = (long)arg;
+-        char                name[16];
+         cfs_waitlink_t      waitlink;
+         unsigned long       flags;
+         int                 did_something;
+@@ -749,8 +744,6 @@ kptllnd_scheduler (void *arg)
+         kptl_rx_buffer_t   *rxb;
+         kptl_tx_t          *tx;
+ 
+-        snprintf(name, sizeof(name), "kptllnd_sd_%02d", id);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&waitlink);
+diff --git a/lnet/klnds/qswlnd/qswlnd.c b/lnet/klnds/qswlnd/qswlnd.c
+index eb6c659..4df26ee 100644
+--- a/lnet/klnds/qswlnd/qswlnd.c
++++ b/lnet/klnds/qswlnd/qswlnd.c
+@@ -526,7 +526,8 @@ kqswnal_startup (lnet_ni_t *ni)
+ 	/**********************************************************************/
+ 	/* Spawn scheduling threads */
+ 	for (i = 0; i < cfs_num_online_cpus(); i++) {
+-		rc = kqswnal_thread_start (kqswnal_scheduler, NULL);
++		rc = kqswnal_thread_start(kqswnal_scheduler, NULL,
++					  "kqswnal_sched");
+ 		if (rc != 0)
+ 		{
+ 			CERROR ("failed to spawn scheduling thread: %d\n", rc);
+diff --git a/lnet/klnds/qswlnd/qswlnd_cb.c b/lnet/klnds/qswlnd/qswlnd_cb.c
+index 243918b..50cc744 100644
+--- a/lnet/klnds/qswlnd/qswlnd_cb.c
++++ b/lnet/klnds/qswlnd/qswlnd_cb.c
+@@ -1655,15 +1655,15 @@ kqswnal_recv (lnet_ni_t     *ni,
+ }
+ 
+ int
+-kqswnal_thread_start (int (*fn)(void *arg), void *arg)
++kqswnal_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long    pid = cfs_create_thread (fn, arg, 0);
++	cfs_task_t *task = cfs_thread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return ((int)pid);
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+-        cfs_atomic_inc (&kqswnal_data.kqn_nthreads);
+-        return (0);
++	cfs_atomic_inc(&kqswnal_data.kqn_nthreads);
++	return 0;
+ }
+ 
+ void
+@@ -1682,7 +1682,6 @@ kqswnal_scheduler (void *arg)
+         int              counter = 0;
+         int              did_something;
+ 
+-        cfs_daemonize ("kqswnal_sched");
+         cfs_block_allsigs ();
+ 
+ 	spin_lock_irqsave(&kqswnal_data.kqn_sched_lock, flags);
+diff --git a/lnet/klnds/ralnd/ralnd.c b/lnet/klnds/ralnd/ralnd.c
+index ca68fef..eabefae 100644
+--- a/lnet/klnds/ralnd/ralnd.c
++++ b/lnet/klnds/ralnd/ralnd.c
+@@ -1566,6 +1566,7 @@ kranal_startup (lnet_ni_t *ni)
+         int               rc;
+         int               i;
+         kra_device_t     *dev;
++	char		  name[16];
+ 
+         LASSERT (ni->ni_lnd == &the_kralnd);
+ 
+@@ -1658,14 +1659,16 @@ kranal_startup (lnet_ni_t *ni)
+         if (rc != 0)
+                 goto failed;
+ 
+-        rc = kranal_thread_start(kranal_reaper, NULL);
++	rc = kranal_thread_start(kranal_reaper, NULL, "kranal_reaper");
+         if (rc != 0) {
+                 CERROR("Can't spawn ranal reaper: %d\n", rc);
+                 goto failed;
+         }
+ 
+         for (i = 0; i < *kranal_tunables.kra_n_connd; i++) {
+-                rc = kranal_thread_start(kranal_connd, (void *)(unsigned long)i);
++		snprintf(name, sizeof(name), "kranal_connd_%02ld", i);
++		rc = kranal_thread_start(kranal_connd,
++					 (void *)(unsigned long)i, name);
+                 if (rc != 0) {
+                         CERROR("Can't spawn ranal connd[%d]: %d\n",
+                                i, rc);
+@@ -1691,7 +1694,8 @@ kranal_startup (lnet_ni_t *ni)
+         
+         for (i = 0; i < kranal_data.kra_ndevs; i++) {
+                 dev = &kranal_data.kra_devices[i];
+-                rc = kranal_thread_start(kranal_scheduler, dev);
++		snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
++		rc = kranal_thread_start(kranal_scheduler, dev, name);
+                 if (rc != 0) {
+                         CERROR("Can't spawn ranal scheduler[%d]: %d\n",
+                                i, rc);
+diff --git a/lnet/klnds/ralnd/ralnd.h b/lnet/klnds/ralnd/ralnd.h
+index d9fd100..8b92cdc 100644
+--- a/lnet/klnds/ralnd/ralnd.h
++++ b/lnet/klnds/ralnd/ralnd.h
+@@ -452,7 +452,7 @@ extern kra_peer_t *kranal_find_peer_locked (lnet_nid_t nid);
+ extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
+ extern int kranal_del_peer (lnet_nid_t nid);
+ extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
+-extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
++extern int kranal_thread_start(int(*fn)(void *arg), void *arg, char *name);
+ extern int kranal_connd (void *arg);
+ extern int kranal_reaper (void *arg);
+ extern int kranal_scheduler (void *arg);
+diff --git a/lnet/klnds/ralnd/ralnd_cb.c b/lnet/klnds/ralnd/ralnd_cb.c
+index 8c7f053..05de1c1 100644
+--- a/lnet/klnds/ralnd/ralnd_cb.c
++++ b/lnet/klnds/ralnd/ralnd_cb.c
+@@ -891,15 +891,13 @@ kranal_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
+ }
+ 
+ int
+-kranal_thread_start (int(*fn)(void *arg), void *arg)
++kranal_thread_start(int(*fn)(void *arg), void *arg, char *name)
+ {
+-        long    pid = cfs_create_thread(fn, arg, 0);
++	cfs_task_t *task = cfs_thread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return(int)pid;
+-
+-        cfs_atomic_inc(&kranal_data.kra_nthreads);
+-        return 0;
++	if (!IS_ERR(task))
++		cfs_atomic_inc(&kranal_data.kra_nthreads);
++	return PTR_ERR(task);
+ }
+ 
+ void
+@@ -1054,15 +1052,12 @@ int
+ kranal_connd (void *arg)
+ {
+         long               id = (long)arg;
+-        char               name[16];
+         cfs_waitlink_t     wait;
+         unsigned long      flags;
+         kra_peer_t        *peer;
+         kra_acceptsock_t  *ras;
+         int                did_something;
+ 
+-        snprintf(name, sizeof(name), "kranal_connd_%02ld", id);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&wait);
+@@ -1159,7 +1154,6 @@ kranal_reaper (void *arg)
+         long               next_min_timeout = CFS_MAX_SCHEDULE_TIMEOUT;
+         long               current_min_timeout = 1;
+ 
+-        cfs_daemonize("kranal_reaper");
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&wait);
+@@ -1932,7 +1926,6 @@ kranal_scheduler (void *arg)
+ {
+         kra_device_t     *dev = (kra_device_t *)arg;
+         cfs_waitlink_t    wait;
+-        char              name[16];
+         kra_conn_t       *conn;
+         unsigned long     flags;
+         unsigned long     deadline;
+@@ -1945,8 +1938,6 @@ kranal_scheduler (void *arg)
+         int               dropped_lock;
+         int               busy_loops = 0;
+ 
+-        snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         dev->rad_scheduler = current;
+diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c
+index 9376b08..c70ceeb 100644
+--- a/lnet/klnds/socklnd/socklnd.c
++++ b/lnet/klnds/socklnd/socklnd.c
+@@ -2465,12 +2465,15 @@ ksocknal_base_startup(void)
+         }
+ 
+         for (i = 0; i < *ksocknal_tunables.ksnd_nconnds; i++) {
++		char name[16];
+ 		spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+ 		ksocknal_data.ksnd_connd_starting++;
+ 		spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
+ 
++
++		snprintf(name, sizeof(name), "socknal_cd%02d", i);
+ 		rc = ksocknal_thread_start(ksocknal_connd,
+-					   (void *)((ulong_ptr_t)i));
++					   (void *)((ulong_ptr_t)i), name);
+ 		if (rc != 0) {
+ 			spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+ 			ksocknal_data.ksnd_connd_starting--;
+@@ -2480,7 +2483,7 @@ ksocknal_base_startup(void)
+                 }
+         }
+ 
+-        rc = ksocknal_thread_start (ksocknal_reaper, NULL);
++	rc = ksocknal_thread_start(ksocknal_reaper, NULL, "socknal_reaper");
+         if (rc != 0) {
+                 CERROR ("Can't spawn socknal reaper: %d\n", rc);
+                 goto failed;
+@@ -2724,10 +2727,16 @@ ksocknal_start_schedulers(struct ksock_sched_info *info)
+ 	}
+ 
+ 	for (i = 0; i < nthrs; i++) {
+-		long	id;
+-
++		long		id;
++		char		name[20];
++		ksock_sched_t	*sched;
+ 		id = KSOCK_THREAD_ID(info->ksi_cpt, info->ksi_nthreads + i);
+-		rc = ksocknal_thread_start(ksocknal_scheduler, (void *)id);
++		sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
++		snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
++			 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
++
++		rc = ksocknal_thread_start(ksocknal_scheduler,
++					   (void *)id, name);
+ 		if (rc == 0)
+ 			continue;
+ 
+diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
+index abdf25a..1094397 100644
+--- a/lnet/klnds/socklnd/socklnd.h
++++ b/lnet/klnds/socklnd/socklnd.h
+@@ -581,7 +581,7 @@ extern void ksocknal_txlist_done (lnet_ni_t *ni, cfs_list_t *txlist,
+                                   int error);
+ extern void ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive);
+ extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when);
+-extern int ksocknal_thread_start (int (*fn)(void *arg), void *arg);
++extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
+ extern void ksocknal_thread_fini (void);
+ extern void ksocknal_launch_all_connections_locked (ksock_peer_t *peer);
+ extern ksock_route_t *ksocknal_find_connectable_route_locked (ksock_peer_t *peer);
+diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c
+index b24127d..e624753 100644
+--- a/lnet/klnds/socklnd/socklnd_cb.c
++++ b/lnet/klnds/socklnd/socklnd_cb.c
+@@ -1007,17 +1007,17 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
+ }
+ 
+ int
+-ksocknal_thread_start (int (*fn)(void *arg), void *arg)
++ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long          pid = cfs_create_thread (fn, arg, 0);
++	cfs_task_t *task = kthread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return ((int)pid);
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+ 	write_lock_bh(&ksocknal_data.ksnd_global_lock);
+-        ksocknal_data.ksnd_nthreads++;
++	ksocknal_data.ksnd_nthreads++;
+ 	write_unlock_bh(&ksocknal_data.ksnd_global_lock);
+-        return (0);
++	return 0;
+ }
+ 
+ void
+@@ -1396,22 +1396,17 @@ int ksocknal_scheduler(void *arg)
+ 	ksock_tx_t		*tx;
+ 	int			rc;
+ 	int			nloops = 0;
+-	char			name[20];
+ 	long			id = (long)arg;
+ 
+ 	info = ksocknal_data.ksnd_sched_info[KSOCK_THREAD_CPT(id)];
+ 	sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
+ 
+-	snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
+-		 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
+-
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	rc = cfs_cpt_bind(lnet_cpt_table(), info->ksi_cpt);
+ 	if (rc != 0) {
+-		CERROR("Can't set CPT affinity for %s to %d: %d\n",
+-		       name, info->ksi_cpt, rc);
++		CERROR("Can't set CPT affinity to %d: %d\n",
++		       info->ksi_cpt, rc);
+ 	}
+ 
+ 	spin_lock_bh(&sched->kss_lock);
+@@ -2023,6 +2018,7 @@ ksocknal_connect (ksock_route_t *route)
+ static int
+ ksocknal_connd_check_start(long sec, long *timeout)
+ {
++	char name[16];
+         int rc;
+         int total = ksocknal_data.ksnd_connd_starting +
+                     ksocknal_data.ksnd_connd_running;
+@@ -2060,7 +2056,8 @@ ksocknal_connd_check_start(long sec, long *timeout)
+ 	spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
+ 
+ 	/* NB: total is the next id */
+-	rc = ksocknal_thread_start(ksocknal_connd, (void *)((long)total));
++	snprintf(name, sizeof(name), "socknal_cd%02d", total);
++	rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
+ 
+ 	spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+         if (rc == 0)
+@@ -2145,15 +2142,11 @@ int
+ ksocknal_connd (void *arg)
+ {
+ 	spinlock_t    *connd_lock = &ksocknal_data.ksnd_connd_lock;
+-        long               id = (long)(long_ptr_t)arg;
+-        char               name[16];
+         ksock_connreq_t   *cr;
+         cfs_waitlink_t     wait;
+         int                nloops = 0;
+         int                cons_retry = 0;
+ 
+-        snprintf (name, sizeof (name), "socknal_cd%02ld", id);
+-        cfs_daemonize (name);
+         cfs_block_allsigs ();
+ 
+         cfs_waitlink_init (&wait);
+@@ -2546,7 +2539,6 @@ ksocknal_reaper (void *arg)
+         int                peer_index = 0;
+         cfs_time_t         deadline = cfs_time_current();
+ 
+-        cfs_daemonize ("socknal_reaper");
+         cfs_block_allsigs ();
+ 
+         CFS_INIT_LIST_HEAD(&enomem_conns);
+diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
+index 9e9b236..9bdac05 100644
+--- a/lnet/lnet/acceptor.c
++++ b/lnet/lnet/acceptor.c
+@@ -389,7 +389,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
+ int
+ lnet_acceptor(void *arg)
+ {
+-        char           name[16];
+         cfs_socket_t  *newsock;
+         int            rc;
+         __u32          magic;
+@@ -399,8 +398,6 @@ lnet_acceptor(void *arg)
+ 
+         LASSERT (lnet_acceptor_state.pta_sock == NULL);
+ 
+-        snprintf(name, sizeof(name), "acceptor_%03d", accept_port);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock,
+@@ -532,9 +529,11 @@ lnet_acceptor_start(void)
+ 	if (lnet_count_acceptor_nis() == 0)  /* not required */
+ 		return 0;
+ 
+-	rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
+-	if (rc2 < 0) {
+-		CERROR("Can't start acceptor thread: %d\n", rc);
++	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
++				  (void *)(ulong_ptr_t)secure,
++				  "acceptor_%03ld", secure));
++	if (IS_ERR_VALUE(rc2)) {
++		CERROR("Can't start acceptor thread: %ld\n", rc2);
+ 		fini_completion(&lnet_acceptor_state.pta_signal);
+ 
+ 		return -ESRCH;
+diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c
+index 770345d..9d57479 100644
+--- a/lnet/lnet/module.c
++++ b/lnet/lnet/module.c
+@@ -127,11 +127,11 @@ init_lnet(void)
+         rc = libcfs_register_ioctl(&lnet_ioctl_handler);
+         LASSERT (rc == 0);
+ 
+-        if (config_on_load) {
+-                /* Have to schedule a separate thread to avoid deadlocking
+-                 * in modload */
+-                (void) cfs_create_thread(lnet_configure, NULL, 0);
+-        }
++	if (config_on_load) {
++		/* Have to schedule a separate thread to avoid deadlocking
++		 * in modload */
++		(void) kthread_run(lnet_configure, NULL, "lnet_initd");
++	}
+ 
+         RETURN(0);
+ }
+diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c
+index 80c0a59..50495a6 100644
+--- a/lnet/lnet/router.c
++++ b/lnet/lnet/router.c
+@@ -1095,16 +1095,17 @@ lnet_router_checker_start(void)
+ 
+         the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
+ #ifdef __KERNEL__
+-        rc = cfs_create_thread(lnet_router_checker, NULL, 0);
+-        if (rc < 0) {
+-                CERROR("Can't start router checker thread: %d\n", rc);
+-                /* block until event callback signals exit */
++	rc = PTR_ERR(kthread_run(lnet_router_checker,
++				 NULL, "router_checker"));
++	if (IS_ERR_VALUE(rc)) {
++		CERROR("Can't start router checker thread: %d\n", rc);
++		/* block until event callback signals exit */
+ 		down(&the_lnet.ln_rc_signal);
+-                rc = LNetEQFree(the_lnet.ln_rc_eqh);
+-                LASSERT (rc == 0);
+-                the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
+-                return -ENOMEM;
+-        }
++		rc = LNetEQFree(the_lnet.ln_rc_eqh);
++		LASSERT(rc == 0);
++		the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
++		return -ENOMEM;
++	}
+ #endif
+ 
+         if (check_routers_before_use) {
+@@ -1230,7 +1231,6 @@ lnet_router_checker(void *arg)
+         lnet_peer_t       *rtr;
+         cfs_list_t        *entry;
+ 
+-        cfs_daemonize("router_checker");
+         cfs_block_allsigs();
+ 
+         LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING);
+diff --git a/lnet/selftest/timer.c b/lnet/selftest/timer.c
+index a66a336..f2f8262 100644
+--- a/lnet/selftest/timer.c
++++ b/lnet/selftest/timer.c
+@@ -183,7 +183,6 @@ stt_timer_main (void *arg)
+ 
+         SET_BUT_UNUSED(rc);
+ 
+-        cfs_daemonize("st_timer");
+         cfs_block_allsigs();
+ 
+         while (!stt_data.stt_shuttingdown) {
+@@ -204,13 +203,13 @@ stt_timer_main (void *arg)
+ int
+ stt_start_timer_thread (void)
+ {
+-        long pid;
++	cfs_task_t *task;
+ 
+-        LASSERT (!stt_data.stt_shuttingdown);
++	LASSERT(!stt_data.stt_shuttingdown);
+ 
+-        pid = cfs_create_thread(stt_timer_main, NULL, 0);
+-        if (pid < 0)
+-                return (int)pid;
++	task = kthread_run(stt_timer_main, NULL, "st_timer");
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+ 	spin_lock(&stt_data.stt_lock);
+ 	stt_data.stt_nthreads++;
+diff --git a/lnet/ulnds/socklnd/usocklnd.c b/lnet/ulnds/socklnd/usocklnd.c
+index cc8c4c8..d4d5027 100644
+--- a/lnet/ulnds/socklnd/usocklnd.c
++++ b/lnet/ulnds/socklnd/usocklnd.c
+@@ -296,14 +296,15 @@ usocklnd_base_startup()
+         pthread_rwlock_init(&usock_data.ud_peers_lock, NULL);
+ 
+         /* Spawn poll threads */
+-        for (i = 0; i < usock_data.ud_npollthreads; i++) {
+-                rc = cfs_create_thread(usocklnd_poll_thread,
+-                                       &usock_data.ud_pollthreads[i], 0);
+-                if (rc) {
+-                        usocklnd_base_shutdown(i);
+-                        return rc;
+-                }
+-        }
++	for (i = 0; i < usock_data.ud_npollthreads; i++) {
++		rc = PTR_ERR(kthread_run(usocklnd_poll_thread,
++					     &usock_data.ud_pollthreads[i],
++					     ""));
++		if (IS_ERR_VALUE(rc)) {
++			usocklnd_base_shutdown(i);
++			return rc;
++		}
++	}
+ 
+         usock_data.ud_state = UD_STATE_INITIALIZED;
+ 
+diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
+index 2e3a1d5..e61583a 100644
+--- a/lustre/ldlm/ldlm_lib.c
++++ b/lustre/ldlm/ldlm_lib.c
+@@ -1975,19 +1975,12 @@ static int target_recovery_thread(void *arg)
+         struct ptlrpc_request *req;
+         struct target_recovery_data *trd = &obd->obd_recovery_data;
+         unsigned long delta;
+-        unsigned long flags;
+         struct lu_env *env;
+         struct ptlrpc_thread *thread = NULL;
+         int rc = 0;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("tgt_recov");
+-
+-        SIGNAL_MASK_LOCK(current, flags);
+-        sigfillset(&current->blocked);
+-        RECALC_SIGPENDING;
+-        SIGNAL_MASK_UNLOCK(current, flags);
+-
++	unshare_fs_struct();
+         OBD_ALLOC_PTR(thread);
+         if (thread == NULL)
+                 RETURN(-ENOMEM);
+@@ -2112,22 +2105,24 @@ static int target_recovery_thread(void *arg)
+ static int target_start_recovery_thread(struct lu_target *lut,
+                                         svc_handler_t handler)
+ {
+-        struct obd_device *obd = lut->lut_obd;
+-        int rc = 0;
+-        struct target_recovery_data *trd = &obd->obd_recovery_data;
++	struct obd_device *obd = lut->lut_obd;
++	int rc = 0;
++	struct target_recovery_data *trd = &obd->obd_recovery_data;
+ 
+-        memset(trd, 0, sizeof(*trd));
++	memset(trd, 0, sizeof(*trd));
+ 	init_completion(&trd->trd_starting);
+ 	init_completion(&trd->trd_finishing);
+-        trd->trd_recovery_handler = handler;
++	trd->trd_recovery_handler = handler;
+ 
+-        if (cfs_create_thread(target_recovery_thread, lut, 0) > 0) {
++	if (!IS_ERR(kthread_run(target_recovery_thread,
++				lut, "tgt_recov"))) {
+ 		wait_for_completion(&trd->trd_starting);
+-                LASSERT(obd->obd_recovering != 0);
+-        } else
+-                rc = -ECHILD;
++		LASSERT(obd->obd_recovering != 0);
++	} else {
++		rc = -ECHILD;
++	}
+ 
+-        return rc;
++	return rc;
+ }
+ 
+ void target_stop_recovery_thread(struct obd_device *obd)
+diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
+index 31925ff..3a9bf14 100644
+--- a/lustre/ldlm/ldlm_lockd.c
++++ b/lustre/ldlm/ldlm_lockd.c
+@@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
+         int do_dump;
+ 
+         ENTRY;
+-        cfs_daemonize("ldlm_elt");
+ 
+         expired_lock_thread.elt_state = ELT_READY;
+         cfs_waitq_signal(&expired_lock_thread.elt_waitq);
+@@ -2570,14 +2569,17 @@ static int ldlm_bl_thread_main(void *arg);
+ static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
+ {
+ 	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
+-	int rc;
++	cfs_task_t *task;
+ 
+ 	init_completion(&bltd.bltd_comp);
+-	rc = cfs_create_thread(ldlm_bl_thread_main, &bltd, 0);
+-	if (rc < 0) {
+-		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %d\n",
+-		       cfs_atomic_read(&blp->blp_num_threads), rc);
+-		return rc;
++	bltd.bltd_num = cfs_atomic_read(&blp->blp_num_threads);
++	snprintf(bltd.bltd_name, sizeof(bltd.bltd_name) - 1,
++		"ldlm_bl_%02d", bltd.bltd_num);
++	task = kthread_run(ldlm_bl_thread_main, &bltd, bltd.bltd_name);
++	if (IS_ERR(task)) {
++		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
++		       cfs_atomic_read(&blp->blp_num_threads), PTR_ERR(task));
++		return PTR_ERR(task);
+ 	}
+ 	wait_for_completion(&bltd.bltd_comp);
+ 
+@@ -2601,14 +2603,9 @@ static int ldlm_bl_thread_main(void *arg)
+ 
+                 blp = bltd->bltd_blp;
+ 
+-                bltd->bltd_num =
+-                        cfs_atomic_inc_return(&blp->blp_num_threads) - 1;
++		cfs_atomic_inc(&blp->blp_num_threads);
+                 cfs_atomic_inc(&blp->blp_busy_threads);
+ 
+-                snprintf(bltd->bltd_name, sizeof(bltd->bltd_name) - 1,
+-                        "ldlm_bl_%02d", bltd->bltd_num);
+-                cfs_daemonize(bltd->bltd_name);
+-
+ 		complete(&bltd->bltd_comp);
+                 /* cannot use bltd after this, it is only on caller's stack */
+         }
+@@ -2948,22 +2945,22 @@ static int ldlm_setup(void)
+ 	}
+ 
+ # ifdef HAVE_SERVER_SUPPORT
+-        CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
+-        expired_lock_thread.elt_state = ELT_STOPPED;
+-        cfs_waitq_init(&expired_lock_thread.elt_waitq);
++	CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
++	expired_lock_thread.elt_state = ELT_STOPPED;
++	cfs_waitq_init(&expired_lock_thread.elt_waitq);
+ 
+-        CFS_INIT_LIST_HEAD(&waiting_locks_list);
++	CFS_INIT_LIST_HEAD(&waiting_locks_list);
+ 	spin_lock_init(&waiting_locks_spinlock);
+-        cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
++	cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
+ 
+-        rc = cfs_create_thread(expired_lock_main, NULL, CFS_DAEMON_FLAGS);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(expired_lock_main, NULL, "ldlm_elt"));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("Cannot start ldlm expired-lock thread: %d\n", rc);
+ 		GOTO(out, rc);
+ 	}
+ 
+-        cfs_wait_event(expired_lock_thread.elt_waitq,
+-                       expired_lock_thread.elt_state == ELT_READY);
++	cfs_wait_event(expired_lock_thread.elt_waitq,
++		       expired_lock_thread.elt_state == ELT_READY);
+ # endif /* HAVE_SERVER_SUPPORT */
+ 
+ 	rc = ldlm_pools_init();
+diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
+index d724a2d..fa14f66 100644
+--- a/lustre/ldlm/ldlm_pool.c
++++ b/lustre/ldlm/ldlm_pool.c
+@@ -1295,15 +1295,13 @@ EXPORT_SYMBOL(ldlm_pools_recalc);
+ static int ldlm_pools_thread_main(void *arg)
+ {
+         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
+-        char *t_name = "ldlm_poold";
+         ENTRY;
+ 
+-        cfs_daemonize(t_name);
+         thread_set_flags(thread, SVC_RUNNING);
+         cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+         CDEBUG(D_DLMTRACE, "%s: pool thread starting, process %d\n",
+-               t_name, cfs_curproc_pid());
++		"ldlm_poold", cfs_curproc_pid());
+ 
+         while (1) {
+                 struct l_wait_info lwi;
+@@ -1335,43 +1333,38 @@ static int ldlm_pools_thread_main(void *arg)
+         cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+         CDEBUG(D_DLMTRACE, "%s: pool thread exiting, process %d\n",
+-               t_name, cfs_curproc_pid());
++		"ldlm_poold", cfs_curproc_pid());
+ 
+ 	complete_and_exit(&ldlm_pools_comp, 0);
+ }
+ 
+ static int ldlm_pools_thread_start(void)
+ {
+-        struct l_wait_info lwi = { 0 };
+-        int rc;
+-        ENTRY;
++	struct l_wait_info lwi = { 0 };
++	cfs_task_t *task;
++	ENTRY;
+ 
+-        if (ldlm_pools_thread != NULL)
+-                RETURN(-EALREADY);
++	if (ldlm_pools_thread != NULL)
++		RETURN(-EALREADY);
+ 
+-        OBD_ALLOC_PTR(ldlm_pools_thread);
+-        if (ldlm_pools_thread == NULL)
+-                RETURN(-ENOMEM);
++	OBD_ALLOC_PTR(ldlm_pools_thread);
++	if (ldlm_pools_thread == NULL)
++		RETURN(-ENOMEM);
+ 
+ 	init_completion(&ldlm_pools_comp);
+-        cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
+-
+-        /*
+-         * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+-         * just drop the VM and FILES in cfs_daemonize() right away.
+-         */
+-        rc = cfs_create_thread(ldlm_pools_thread_main, ldlm_pools_thread,
+-                               CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("Can't start pool thread, error %d\n",
+-                       rc);
+-                OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
+-                ldlm_pools_thread = NULL;
+-                RETURN(rc);
+-        }
+-        l_wait_event(ldlm_pools_thread->t_ctl_waitq,
+-                     thread_is_running(ldlm_pools_thread), &lwi);
+-        RETURN(0);
++	cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
++
++	task = kthread_run(ldlm_pools_thread_main, ldlm_pools_thread,
++			   "ldlm_poold");
++	if (IS_ERR(task)) {
++		CERROR("Can't start pool thread, error %ld\n", PTR_ERR(task));
++		OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
++		ldlm_pools_thread = NULL;
++		RETURN(PTR_ERR(task));
++	}
++	l_wait_event(ldlm_pools_thread->t_ctl_waitq,
++		     thread_is_running(ldlm_pools_thread), &lwi);
++	RETURN(0);
+ }
+ 
+ static void ldlm_pools_thread_stop(void)
+diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c
+index 1d489e6..5e269b3 100644
+--- a/lustre/llite/llite_capa.c
++++ b/lustre/llite/llite_capa.c
+@@ -173,8 +173,6 @@ static int capa_thread_main(void *unused)
+         int rc;
+         ENTRY;
+ 
+-        cfs_daemonize("ll_capa");
+-
+         thread_set_flags(&ll_capa_thread, SVC_RUNNING);
+         cfs_waitq_signal(&ll_capa_thread.t_ctl_waitq);
+ 
+@@ -293,20 +291,21 @@ void ll_capa_timer_callback(unsigned long unused)
+ 
+ int ll_capa_thread_start(void)
+ {
+-        int rc;
+-        ENTRY;
++	cfs_task_t *task;
++	ENTRY;
+ 
+-        cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
++	cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
+ 
+-        rc = cfs_create_thread(capa_thread_main, NULL, 0);
+-        if (rc < 0) {
+-                CERROR("cannot start expired capa thread: rc %d\n", rc);
+-                RETURN(rc);
+-        }
+-        cfs_wait_event(ll_capa_thread.t_ctl_waitq,
+-                       thread_is_running(&ll_capa_thread));
++	task = kthread_run(capa_thread_main, NULL, "ll_capa");
++	if (IS_ERR(task)) {
++		CERROR("cannot start expired capa thread: rc %ld\n",
++			PTR_ERR(task));
++		RETURN(PTR_ERR(task));
++	}
++	cfs_wait_event(ll_capa_thread.t_ctl_waitq,
++		       thread_is_running(&ll_capa_thread));
+ 
+-        RETURN(0);
++	RETURN(0);
+ }
+ 
+ void ll_capa_thread_stop(void)
+diff --git a/lustre/llite/llite_close.c b/lustre/llite/llite_close.c
+index 26a2c8c..f1a1415 100644
+--- a/lustre/llite/llite_close.c
++++ b/lustre/llite/llite_close.c
+@@ -349,12 +349,6 @@ static int ll_close_thread(void *arg)
+         struct ll_close_queue *lcq = arg;
+         ENTRY;
+ 
+-        {
+-                char name[CFS_CURPROC_COMM_MAX];
+-                snprintf(name, sizeof(name) - 1, "ll_close");
+-                cfs_daemonize(name);
+-        }
+-
+ 	complete(&lcq->lcq_comp);
+ 
+         while (1) {
+@@ -382,25 +376,25 @@ static int ll_close_thread(void *arg)
+ 
+ int ll_close_thread_start(struct ll_close_queue **lcq_ret)
+ {
+-        struct ll_close_queue *lcq;
+-        pid_t pid;
++	struct ll_close_queue *lcq;
++	cfs_task_t *task;
+ 
+-        if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
+-                return -EINTR;
++	if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
++		return -EINTR;
+ 
+-        OBD_ALLOC(lcq, sizeof(*lcq));
+-        if (lcq == NULL)
+-                return -ENOMEM;
++	OBD_ALLOC(lcq, sizeof(*lcq));
++	if (lcq == NULL)
++		return -ENOMEM;
+ 
+ 	spin_lock_init(&lcq->lcq_lock);
+ 	CFS_INIT_LIST_HEAD(&lcq->lcq_head);
+ 	cfs_waitq_init(&lcq->lcq_waitq);
+ 	init_completion(&lcq->lcq_comp);
+ 
+-	pid = cfs_create_thread(ll_close_thread, lcq, 0);
+-	if (pid < 0) {
++	task = kthread_run(ll_close_thread, lcq, "ll_close");
++	if (IS_ERR(task)) {
+ 		OBD_FREE(lcq, sizeof(*lcq));
+-		return pid;
++		return PTR_ERR(task);
+ 	}
+ 
+ 	wait_for_completion(&lcq->lcq_comp);
+diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
+index 4c58181..1d4e2e8 100644
+--- a/lustre/llite/lloop.c
++++ b/lustre/llite/lloop.c
+@@ -420,8 +420,6 @@ static int loop_thread(void *data)
+         int refcheck;
+         int ret = 0;
+ 
+-        daemonize("lloop%d", lo->lo_number);
+-
+         set_user_nice(current, -20);
+ 
+         lo->lo_state = LLOOP_BOUND;
+@@ -552,13 +550,13 @@ static int loop_set_fd(struct lloop_device *lo, struct file *unused,
+         set_capacity(disks[lo->lo_number], size);
+         bd_set_size(bdev, size << 9);
+ 
+-        set_blocksize(bdev, lo->lo_blocksize);
++	set_blocksize(bdev, lo->lo_blocksize);
+ 
+-        cfs_create_thread(loop_thread, lo, CLONE_KERNEL);
++	kthread_run(loop_thread, lo, "lloop%d", lo->lo_number);
+ 	down(&lo->lo_sem);
+-        return 0;
++	return 0;
+ 
+- out:
++out:
+         /* This is safe: open() is still holding a reference. */
+         cfs_module_put(THIS_MODULE);
+         return error;
+diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
+index 6d5b7af..3211557 100644
+--- a/lustre/llite/statahead.c
++++ b/lustre/llite/statahead.c
+@@ -981,12 +981,6 @@ static int ll_agl_thread(void *arg)
+         struct l_wait_info        lwi    = { 0 };
+         ENTRY;
+ 
+-        {
+-                char pname[16];
+-                snprintf(pname, 15, "ll_agl_%u", plli->lli_opendir_pid);
+-                cfs_daemonize(pname);
+-        }
+-
+         CDEBUG(D_READA, "agl thread started: [pid %d] [parent %.*s]\n",
+                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+@@ -1040,25 +1034,28 @@ static int ll_agl_thread(void *arg)
+ 
+ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
+ {
+-        struct ptlrpc_thread *thread = &sai->sai_agl_thread;
+-        struct l_wait_info    lwi    = { 0 };
+-        int                   rc;
+-        ENTRY;
++	struct ptlrpc_thread *thread = &sai->sai_agl_thread;
++	struct l_wait_info    lwi    = { 0 };
++	struct ll_inode_info  *plli;
++	cfs_task_t	      *task;
++	ENTRY;
+ 
+-        CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
+-               cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
++	CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
++	       cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+-        rc = cfs_create_thread(ll_agl_thread, parent, 0);
+-        if (rc < 0) {
+-                CERROR("can't start ll_agl thread, rc: %d\n", rc);
+-                thread_set_flags(thread, SVC_STOPPED);
+-                RETURN_EXIT;
+-        }
++	plli = ll_i2info(parent->d_inode);
++	task = kthread_run(ll_agl_thread, parent,
++			       "ll_agl_%u", plli->lli_opendir_pid);
++	if (IS_ERR(task)) {
++		CERROR("can't start ll_agl thread, rc: %ld\n", PTR_ERR(task));
++		thread_set_flags(thread, SVC_STOPPED);
++		RETURN_EXIT;
++	}
+ 
+-        l_wait_event(thread->t_ctl_waitq,
+-                     thread_is_running(thread) || thread_is_stopped(thread),
+-                     &lwi);
+-        EXIT;
++	l_wait_event(thread->t_ctl_waitq,
++		     thread_is_running(thread) || thread_is_stopped(thread),
++		     &lwi);
++	EXIT;
+ }
+ 
+ static int ll_statahead_thread(void *arg)
+@@ -1079,12 +1076,6 @@ static int ll_statahead_thread(void *arg)
+         struct l_wait_info        lwi    = { 0 };
+         ENTRY;
+ 
+-        {
+-                char pname[16];
+-                snprintf(pname, 15, "ll_sa_%u", plli->lli_opendir_pid);
+-                cfs_daemonize(pname);
+-        }
+-
+         CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
+                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+@@ -1548,6 +1539,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
+         struct ptlrpc_thread     *thread;
+         struct l_wait_info        lwi   = { 0 };
+         int                       rc    = 0;
++	struct ll_inode_info     *plli;
+         ENTRY;
+ 
+         LASSERT(lli->lli_opendir_pid == cfs_curproc_pid());
+@@ -1693,11 +1685,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
+                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+         lli->lli_sai = sai;
+-        rc = cfs_create_thread(ll_statahead_thread, parent, 0);
+-        thread = &sai->sai_thread;
+-        if (rc < 0) {
+-                CERROR("can't start ll_sa thread, rc: %d\n", rc);
+-                dput(parent);
++
++	plli = ll_i2info(parent->d_inode);
++	rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
++				 "ll_sa_%u", plli->lli_opendir_pid));
++	thread = &sai->sai_thread;
++	if (IS_ERR_VALUE(rc)) {
++		CERROR("can't start ll_sa thread, rc: %d\n", rc);
++		dput(parent);
+                 lli->lli_opendir_key = NULL;
+                 thread_set_flags(thread, SVC_STOPPED);
+                 thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
+diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
+index c9aa7a0..ead4bcf 100644
+--- a/lustre/mdc/mdc_request.c
++++ b/lustre/mdc/mdc_request.c
+@@ -1566,13 +1566,6 @@ static int mdc_changelog_send_thread(void *csdata)
+         CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
+                cs->cs_fp, cs->cs_startrec);
+ 
+-        /*
+-         * It's important to daemonize here to close unused FDs.
+-         * The write fd from pipe is already opened by the caller,
+-         * so it's fine to clear all files here
+-         */
+-        cfs_daemonize("mdc_clg_send_thread");
+-
+         OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
+         if (cs->cs_buf == NULL)
+                 GOTO(out, rc = -ENOMEM);
+@@ -1609,12 +1602,10 @@ out:
+ 		llog_cat_close(NULL, llh);
+         if (ctxt)
+                 llog_ctxt_put(ctxt);
+-        if (cs->cs_buf)
+-                OBD_FREE(cs->cs_buf, CR_MAXSIZE);
+-        OBD_FREE_PTR(cs);
+-        /* detach from parent process so we get cleaned up */
+-        cfs_daemonize("cl_send");
+-        return rc;
++	if (cs->cs_buf)
++		OBD_FREE(cs->cs_buf, CR_MAXSIZE);
++	OBD_FREE_PTR(cs);
++	return rc;
+ }
+ 
+ static int mdc_ioc_changelog_send(struct obd_device *obd,
+@@ -1634,13 +1625,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
+ 	cs->cs_fp = fget(icc->icc_id);
+ 	cs->cs_flags = icc->icc_flags;
+ 
+-        /* New thread because we should return to user app before
+-           writing into our pipe */
+-        rc = cfs_create_thread(mdc_changelog_send_thread, cs, CFS_DAEMON_FLAGS);
+-        if (rc >= 0) {
+-                CDEBUG(D_CHANGELOG, "start changelog thread: %d\n", rc);
+-                return 0;
+-        }
++	/*
++	 * New thread because we should return to user app before
++	 * writing into our pipe
++	 */
++        rc = PTR_ERR(kthread_run(mdc_changelog_send_thread, cs,
++				 "mdc_clg_send_thread"));
++	if (!IS_ERR_VALUE(rc)) {
++		CDEBUG(D_CHANGELOG, "start changelog thread\n");
++		return 0;
++	}
+ 
+         CERROR("Failed to start changelog thread: %d\n", rc);
+         OBD_FREE_PTR(cs);
+diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
+index 9d7b54c..7ced9dd 100644
+--- a/lustre/mdd/mdd_lfsck.c
++++ b/lustre/mdd/mdd_lfsck.c
+@@ -2525,8 +2525,7 @@ static int mdd_lfsck_main(void *args)
+ 	int			 rc;
+ 	ENTRY;
+ 
+-	cfs_daemonize("lfsck");
+-	rc = lu_env_init(&env, LCT_MD_THREAD);
++	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
+ 	if (rc != 0) {
+ 		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
+ 		       mdd_lfsck2name(lfsck), rc);
+@@ -2789,8 +2788,8 @@ trigger:
+ 
+ 	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
+ 	thread_set_flags(thread, 0);
+-	rc = cfs_create_thread(mdd_lfsck_main, lfsck, 0);
+-	if (rc < 0)
++	rc = PTR_ERR(kthread_run(mdd_lfsck_main, lfsck, "lfsck"));
++	if (IS_ERR_VALUE(rc))
+ 		CERROR("%s: cannot start LFSCK thread, rc = %d\n",
+ 		       mdd_lfsck2name(lfsck), rc);
+ 	else
+diff --git a/lustre/mdt/mdt_capa.c b/lustre/mdt/mdt_capa.c
+index 76e2c6f..d4a8bc4 100644
+--- a/lustre/mdt/mdt_capa.c
++++ b/lustre/mdt/mdt_capa.c
+@@ -218,7 +218,7 @@ static int mdt_ck_thread_main(void *args)
+         int                     rc;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("mdt_ck");
++	unshare_fs_struct();
+         cfs_block_allsigs();
+ 
+         thread_set_flags(thread, SVC_RUNNING);
+@@ -290,18 +290,18 @@ static int mdt_ck_thread_main(void *args)
+ 
+ int mdt_ck_thread_start(struct mdt_device *mdt)
+ {
+-        struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
+-        int rc;
+-
+-        cfs_waitq_init(&thread->t_ctl_waitq);
+-        rc = cfs_create_thread(mdt_ck_thread_main, mdt, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("cannot start mdt_ck thread, rc = %d\n", rc);
+-                return rc;
+-        }
+-
+-        l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
+-        return 0;
++	struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
++	cfs_task_t *task;
++
++	cfs_waitq_init(&thread->t_ctl_waitq);
++	task = kthread_run(mdt_ck_thread_main, mdt, "mdt_ck");
++	if (IS_ERR(task)) {
++		CERROR("cannot start mdt_ck thread, rc = %ld\n", PTR_ERR(task));
++		return PTR_ERR(task);
++	}
++
++	l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
++	return 0;
+ }
+ 
+ void mdt_ck_thread_stop(struct mdt_device *mdt)
+diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
+index 6b84a29..f7e6514 100644
+--- a/lustre/mgc/mgc_request.c
++++ b/lustre/mgc/mgc_request.c
+@@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
+ 
+ static int mgc_requeue_thread(void *data)
+ {
+-        char name[] = "ll_cfg_requeue";
+         int rc = 0;
+         ENTRY;
+ 
+-        cfs_daemonize(name);
+-
+         CDEBUG(D_MGC, "Starting requeue thread\n");
+ 
+         /* Keep trying failed locks periodically */
+@@ -776,20 +773,20 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+         sptlrpc_lprocfs_cliobd_attach(obd);
+ 
+         if (cfs_atomic_inc_return(&mgc_count) == 1) {
+-                rq_state = 0;
+-                cfs_waitq_init(&rq_waitq);
+-
+-                /* start requeue thread */
+-                rc = cfs_create_thread(mgc_requeue_thread, NULL,
+-                                       CFS_DAEMON_FLAGS);
+-                if (rc < 0) {
+-                        CERROR("%s: Cannot start requeue thread (%d),"
+-                               "no more log updates!\n",
+-                               obd->obd_name, rc);
+-                        GOTO(err_cleanup, rc);
+-                }
+-                /* rc is the pid of mgc_requeue_thread. */
+-                rc = 0;
++		rq_state = 0;
++		cfs_waitq_init(&rq_waitq);
++
++		/* start requeue thread */
++		rc = PTR_ERR(kthread_run(mgc_requeue_thread, NULL,
++					     "ll_cfg_requeue"));
++		if (IS_ERR_VALUE(rc)) {
++			CERROR("%s: Cannot start requeue thread (%d),"
++			       "no more log updates!\n",
++			       obd->obd_name, rc);
++			GOTO(err_cleanup, rc);
++		}
++		/* rc is the pid of mgc_requeue_thread. */
++		rc = 0;
+         }
+ 
+         RETURN(rc);
+diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
+index 781250f..e6abdc4 100644
+--- a/lustre/mgs/mgs_nids.c
++++ b/lustre/mgs/mgs_nids.c
+@@ -440,7 +440,6 @@ static int mgs_ir_notify(void *arg)
+ 
+         LASSERTF(sizeof(name) < 32, "name is too large to be in stack.\n");
+         sprintf(name, "mgs_%s_notify", fsdb->fsdb_name);
+-        cfs_daemonize(name);
+ 
+ 	complete(&fsdb->fsdb_notify_comp);
+ 
+@@ -471,7 +470,7 @@ static int mgs_ir_notify(void *arg)
+ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
+ 		   struct fs_db *fsdb)
+ {
+-        int rc;
++	cfs_task_t *task;
+ 
+         if (!ir_timeout)
+                 ir_timeout = OBD_IR_MGS_TIMEOUT;
+@@ -488,11 +487,13 @@ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
+         cfs_atomic_set(&fsdb->fsdb_notify_phase, 0);
+         cfs_waitq_init(&fsdb->fsdb_notify_waitq);
+ 	init_completion(&fsdb->fsdb_notify_comp);
+-        rc = cfs_create_thread(mgs_ir_notify, fsdb, CFS_DAEMON_FLAGS);
+-        if (rc > 0)
++
++	task = kthread_run(mgs_ir_notify, fsdb,
++			       "mgs_%s_notify", fsdb->fsdb_name);
++	if (IS_ERR(task))
+ 		wait_for_completion(&fsdb->fsdb_notify_comp);
+-        else
+-                CERROR("Start notify thread error %d\n", rc);
++	else
++		CERROR("Start notify thread error %ld\n", PTR_ERR(task));
+ 
+ 	mgs_nidtbl_init_fs(env, fsdb);
+         return 0;
+diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
+index 436aa4d..0e29783 100644
+--- a/lustre/obdclass/genops.c
++++ b/lustre/obdclass/genops.c
+@@ -1744,14 +1744,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
+  */
+ static int obd_zombie_impexp_thread(void *unused)
+ {
+-	int rc;
+-
+-	rc = cfs_daemonize_ctxt("obd_zombid");
+-	if (rc != 0) {
+-		complete(&obd_zombie_start);
+-		RETURN(rc);
+-	}
+-
++	unshare_fs_struct();
+ 	complete(&obd_zombie_start);
+ 
+ 	obd_zombie_pid = cfs_curproc_pid();
+@@ -1800,7 +1793,9 @@ int obd_zombie_impexp_kill(void *arg)
+  */
+ int obd_zombie_impexp_init(void)
+ {
+-	int rc;
++#ifdef __KERNEL__
++	cfs_task_t *task;
++#endif
+ 
+ 	CFS_INIT_LIST_HEAD(&obd_zombie_imports);
+ 	CFS_INIT_LIST_HEAD(&obd_zombie_exports);
+@@ -1811,9 +1806,9 @@ int obd_zombie_impexp_init(void)
+ 	obd_zombie_pid = 0;
+ 
+ #ifdef __KERNEL__
+-	rc = cfs_create_thread(obd_zombie_impexp_thread, NULL, 0);
+-	if (rc < 0)
+-		RETURN(rc);
++	task = kthread_run(obd_zombie_impexp_thread, NULL, "obd_zombid");
++	if (IS_ERR(task))
++		RETURN(PTR_ERR(task));
+ 
+ 	wait_for_completion(&obd_zombie_start);
+ #else
+@@ -1825,9 +1820,8 @@ int obd_zombie_impexp_init(void)
+         obd_zombie_impexp_idle_cb =
+                 liblustre_register_idle_callback("obd_zombi_impexp_check",
+                                                  &obd_zombie_impexp_check, NULL);
+-        rc = 0;
+ #endif
+-        RETURN(rc);
++	RETURN(0);
+ }
+ /**
+  * stop destroy zombie import/export thread
+diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
+index 62c496b..d85b048 100644
+--- a/lustre/obdclass/llog.c
++++ b/lustre/obdclass/llog.c
+@@ -438,7 +438,7 @@ static int llog_process_thread_daemonize(void *arg)
+ 	struct lu_env			 env;
+ 	int				 rc;
+ 
+-	cfs_daemonize_ctxt("llog_process_thread");
++	unshare_fs_struct();
+ 
+ 	/* client env has no keys, tags is just 0 */
+ 	rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
+@@ -480,9 +480,9 @@ int llog_process_or_fork(const struct lu_env *env,
+ 		 * init the new one in llog_process_thread_daemonize. */
+ 		lpi->lpi_env = NULL;
+ 		init_completion(&lpi->lpi_completion);
+-		rc = cfs_create_thread(llog_process_thread_daemonize, lpi,
+-				       CFS_DAEMON_FLAGS);
+-		if (rc < 0) {
++		rc = PTR_ERR(kthread_run(llog_process_thread_daemonize, lpi,
++					     "llog_process_thread"));
++		if (IS_ERR_VALUE(rc)) {
+ 			CERROR("%s: cannot start thread: rc = %d\n",
+ 			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
+ 			OBD_FREE_PTR(lpi);
+diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
+index 77acd9e..a9130be 100644
+--- a/lustre/osd-ldiskfs/osd_scrub.c
++++ b/lustre/osd-ldiskfs/osd_scrub.c
+@@ -979,7 +979,6 @@ static int osd_scrub_main(void *args)
+ 	int		      rc;
+ 	ENTRY;
+ 
+-	cfs_daemonize("OI_scrub");
+ 	rc = lu_env_init(&env, LCT_DT_THREAD);
+ 	if (rc != 0) {
+ 		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
+@@ -1554,8 +1553,8 @@ again:
+ 
+ 	scrub->os_start_flags = flags;
+ 	thread_set_flags(thread, 0);
+-	rc = cfs_create_thread(osd_scrub_main, dev, 0);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(osd_scrub_main, dev, "OI_scrub"));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("%.16s: cannot start iteration thread, rc = %d\n",
+ 		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
+ 		RETURN(rc);
+diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
+index 914f988..d0d2ede 100644
+--- a/lustre/osp/osp_precreate.c
++++ b/lustre/osp/osp_precreate.c
+@@ -872,15 +872,11 @@ static int osp_precreate_thread(void *_arg)
+ 	struct osp_device	*d = _arg;
+ 	struct ptlrpc_thread	*thread = &d->opd_pre_thread;
+ 	struct l_wait_info	 lwi = { 0 };
+-	char			 pname[16];
+ 	struct lu_env		 env;
+ 	int			 rc;
+ 
+ 	ENTRY;
+ 
+-	sprintf(pname, "osp-pre-%u", d->opd_index);
+-	cfs_daemonize(pname);
+-
+ 	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
+ 	if (rc) {
+ 		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
+@@ -1251,7 +1247,7 @@ out:
+ int osp_init_precreate(struct osp_device *d)
+ {
+ 	struct l_wait_info	 lwi = { 0 };
+-	int			 rc;
++	cfs_task_t		*task;
+ 
+ 	ENTRY;
+ 
+@@ -1286,10 +1282,11 @@ int osp_init_precreate(struct osp_device *d)
+ 	/*
+ 	 * start thread handling precreation and statfs updates
+ 	 */
+-	rc = cfs_create_thread(osp_precreate_thread, d, 0);
+-	if (rc < 0) {
+-		CERROR("can't start precreate thread %d\n", rc);
+-		RETURN(rc);
++	task = kthread_run(osp_precreate_thread, d,
++			       "osp-pre-%u", d->opd_index);
++	if (IS_ERR(task)) {
++		CERROR("can't start precreate thread %ld\n", PTR_ERR(task));
++		RETURN(PTR_ERR(task));
+ 	}
+ 
+ 	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
+diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
+index 4bc9d58..a6952ce 100644
+--- a/lustre/osp/osp_sync.c
++++ b/lustre/osp/osp_sync.c
+@@ -823,7 +823,6 @@ static int osp_sync_thread(void *_arg)
+ 	struct llog_handle	*llh;
+ 	struct lu_env		 env;
+ 	int			 rc, count;
+-	char			 pname[16];
+ 
+ 	ENTRY;
+ 
+@@ -834,9 +833,6 @@ static int osp_sync_thread(void *_arg)
+ 		RETURN(rc);
+ 	}
+ 
+-	sprintf(pname, "osp-syn-%u", d->opd_index);
+-	cfs_daemonize(pname);
+-
+ 	spin_lock(&d->opd_syn_lock);
+ 	thread->t_flags = SVC_RUNNING;
+ 	spin_unlock(&d->opd_syn_lock);
+@@ -1041,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
+ 	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
+ 	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
+ 
+-	rc = cfs_create_thread(osp_sync_thread, d, 0);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(osp_sync_thread, d,
++				 "osp-syn-%u", d->opd_index));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("%s: can't start sync thread: rc = %d\n",
+ 		       d->opd_obd->obd_name, rc);
+ 		GOTO(err_llog, rc);
+diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
+index 7eaee96..9d17417 100644
+--- a/lustre/ptlrpc/import.c
++++ b/lustre/ptlrpc/import.c
+@@ -1263,7 +1263,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
+ 
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("ll_imp_inval");
++	unshare_fs_struct();
+ 
+         CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
+                imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
+@@ -1333,20 +1333,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
+ 		spin_unlock(&imp->imp_lock);
+ 
+ #ifdef __KERNEL__
+-                /* bug 17802:  XXX client_disconnect_export vs connect request
+-                 * race. if client will evicted at this time, we start
+-                 * invalidate thread without reference to import and import can
+-                 * be freed at same time. */
+-                class_import_get(imp);
+-                rc = cfs_create_thread(ptlrpc_invalidate_import_thread, imp,
+-                                       CFS_DAEMON_FLAGS);
+-                if (rc < 0) {
+-                        class_import_put(imp);
+-                        CERROR("error starting invalidate thread: %d\n", rc);
+-                } else {
+-                        rc = 0;
+-                }
+-                RETURN(rc);
++		{
++		cfs_task_t *task;
++		/* bug 17802:  XXX client_disconnect_export vs connect request
++		 * race. if client will evicted at this time, we start
++		 * invalidate thread without reference to import and import can
++		 * be freed at same time. */
++		class_import_get(imp);
++		task = kthread_run(ptlrpc_invalidate_import_thread, imp,
++				     "ll_imp_inval");
++		if (IS_ERR(task)) {
++			class_import_put(imp);
++			CERROR("error starting invalidate thread: %d\n", rc);
++			rc = PTR_ERR(task);
++		} else {
++			rc = 0;
++		}
++		RETURN(rc);
++		}
+ #else
+                 ptlrpc_invalidate_import(imp);
+ 
+diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
+index 8b7d472..e18bc7d 100644
+--- a/lustre/ptlrpc/pinger.c
++++ b/lustre/ptlrpc/pinger.c
+@@ -306,8 +306,6 @@ static int ptlrpc_pinger_main(void *arg)
+         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
+ 	ENTRY;
+ 
+-        cfs_daemonize(thread->t_name);
+-
+         /* Record that the thread is running */
+         thread_set_flags(thread, SVC_RUNNING);
+         cfs_waitq_signal(&thread->t_ctl_waitq);
+@@ -402,14 +400,14 @@ int ptlrpc_start_pinger(void)
+ 
+ 	/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+ 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
+-        rc = cfs_create_thread(ptlrpc_pinger_main,
+-			       pinger_thread, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("cannot start thread: %d\n", rc);
+-                OBD_FREE(pinger_thread, sizeof(*pinger_thread));
+-                pinger_thread = NULL;
+-                RETURN(rc);
+-        }
++	rc = PTR_ERR(kthread_run(ptlrpc_pinger_main,
++				 pinger_thread, pinger_thread->t_name));
++	if (IS_ERR_VALUE(rc)) {
++		CERROR("cannot start thread: %d\n", rc);
++		OBD_FREE(pinger_thread, sizeof(*pinger_thread));
++		pinger_thread = NULL;
++		RETURN(rc);
++	}
+         l_wait_event(pinger_thread->t_ctl_waitq,
+                      thread_is_running(pinger_thread), &lwi);
+ 
+@@ -678,7 +676,7 @@ static int ping_evictor_main(void *arg)
+         time_t expire_time;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("ll_evictor");
++	unshare_fs_struct();
+ 
+         CDEBUG(D_HA, "Starting Ping Evictor\n");
+         pet_state = PET_READY;
+@@ -753,18 +751,19 @@ static int ping_evictor_main(void *arg)
+ 
+ void ping_evictor_start(void)
+ {
+-        int rc;
++	cfs_task_t *task;
+ 
+-        if (++pet_refcount > 1)
+-                return;
++	if (++pet_refcount > 1)
++		return;
+ 
+-        cfs_waitq_init(&pet_waitq);
++	cfs_waitq_init(&pet_waitq);
+ 
+-        rc = cfs_create_thread(ping_evictor_main, NULL, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                pet_refcount--;
+-                CERROR("Cannot start ping evictor thread: %d\n", rc);
+-        }
++	task = kthread_run(ping_evictor_main, NULL, "ll_evictor");
++	if (IS_ERR(task)) {
++		pet_refcount--;
++		CERROR("Cannot start ping evictor thread: %ld\n",
++			PTR_ERR(task));
++	}
+ }
+ EXPORT_SYMBOL(ping_evictor_start);
+ 
+diff --git a/lustre/ptlrpc/ptlrpcd.c b/lustre/ptlrpc/ptlrpcd.c
+index 669b0d7..b6486e0 100644
+--- a/lustre/ptlrpc/ptlrpcd.c
++++ b/lustre/ptlrpc/ptlrpcd.c
+@@ -410,7 +410,7 @@ static int ptlrpcd(void *arg)
+         int rc, exit = 0;
+         ENTRY;
+ 
+-	cfs_daemonize_ctxt(pc->pc_name);
++	unshare_fs_struct();
+ #if defined(CONFIG_SMP) && \
+ (defined(HAVE_CPUMASK_OF_NODE) || defined(HAVE_NODE_TO_CPUMASK))
+ 	if (test_bit(LIOD_BIND, &pc->pc_flags)) {
+@@ -709,18 +709,21 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
+ 
+         env = 1;
+ #ifdef __KERNEL__
+-        if (index >= 0) {
+-                rc = ptlrpcd_bind(index, max);
+-                if (rc < 0)
+-                        GOTO(out, rc);
+-        }
++	{
++		cfs_task_t *task;
++		if (index >= 0) {
++			rc = ptlrpcd_bind(index, max);
++			if (rc < 0)
++				GOTO(out, rc);
++		}
+ 
+-        rc = cfs_create_thread(ptlrpcd, pc, 0);
+-        if (rc < 0)
+-                GOTO(out, rc);
++		task = kthread_run(ptlrpcd, pc, pc->pc_name);
++		if (IS_ERR(task))
++			GOTO(out, rc = PTR_ERR(task));
+ 
+-        rc = 0;
+-	wait_for_completion(&pc->pc_starting);
++		rc = 0;
++		wait_for_completion(&pc->pc_starting);
++	}
+ #else
+         pc->pc_wait_callback =
+                 liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
+diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
+index 7634d22..595f710 100644
+--- a/lustre/ptlrpc/sec_gc.c
++++ b/lustre/ptlrpc/sec_gc.c
+@@ -169,7 +169,7 @@ static int sec_gc_main(void *arg)
+         struct ptlrpc_thread *thread = (struct ptlrpc_thread *) arg;
+         struct l_wait_info    lwi;
+ 
+-        cfs_daemonize_ctxt("sptlrpc_gc");
++	unshare_fs_struct();
+ 
+         /* Record that the thread is running */
+         thread_set_flags(thread, SVC_RUNNING);
+@@ -222,7 +222,7 @@ again:
+ int sptlrpc_gc_init(void)
+ {
+ 	struct l_wait_info lwi = { 0 };
+-	int                rc;
++	cfs_task_t *task;
+ 
+ 	mutex_init(&sec_gc_mutex);
+ 	spin_lock_init(&sec_gc_list_lock);
+@@ -232,10 +232,10 @@ int sptlrpc_gc_init(void)
+         memset(&sec_gc_thread, 0, sizeof(sec_gc_thread));
+         cfs_waitq_init(&sec_gc_thread.t_ctl_waitq);
+ 
+-        rc = cfs_create_thread(sec_gc_main, &sec_gc_thread, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("can't start gc thread: %d\n", rc);
+-                return rc;
++	task = kthread_run(sec_gc_main, &sec_gc_thread, "sptlrpc_gc");
++	if (IS_ERR(task)) {
++		CERROR("can't start gc thread: %ld\n", PTR_ERR(task));
++		return PTR_ERR(task);
+         }
+ 
+         l_wait_event(sec_gc_thread.t_ctl_waitq,
+diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
+index 63fee6d..7d73b13 100644
+--- a/lustre/ptlrpc/service.c
++++ b/lustre/ptlrpc/service.c
+@@ -2362,7 +2362,7 @@ static int ptlrpc_main(void *arg)
+         ENTRY;
+ 
+         thread->t_pid = cfs_curproc_pid();
+-        cfs_daemonize_ctxt(thread->t_name);
++	unshare_fs_struct();
+ 
+ 	/* NB: we will call cfs_cpt_bind() for all threads, because we
+ 	 * might want to run lustre server only on a subset of system CPUs,
+@@ -2557,7 +2557,7 @@ static int ptlrpc_hr_main(void *arg)
+ 
+ 	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
+ 		 hrp->hrp_cpt, hrt->hrt_id);
+-	cfs_daemonize_ctxt(threadname);
++	unshare_fs_struct();
+ 
+ 	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
+ 	if (rc != 0) {
+@@ -2623,10 +2623,13 @@ static int ptlrpc_start_hr_threads(void)
+ 		int	rc = 0;
+ 
+ 		for (j = 0; j < hrp->hrp_nthrs; j++) {
+-			rc = cfs_create_thread(ptlrpc_hr_main,
+-					       &hrp->hrp_thrs[j],
+-					       CLONE_VM | CLONE_FILES);
+-			if (rc < 0)
++			struct	ptlrpc_hr_thread *hrt = &hrp->hrp_thrs[j];
++			rc = PTR_ERR(kthread_run(ptlrpc_hr_main,
++						 &hrp->hrp_thrs[j],
++						 "ptlrpc_hr%02d_%03d",
++						 hrp->hrp_cpt,
++						 hrt->hrt_id));
++			if (IS_ERR_VALUE(rc))
+ 				break;
+ 		}
+ 		cfs_wait_event(ptlrpc_hr.hr_waitq,
+@@ -2818,8 +2821,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
+ 	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+ 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
+ 	 */
+-	rc = cfs_create_thread(ptlrpc_main, thread, CFS_DAEMON_FLAGS);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("cannot start thread '%s': rc %d\n",
+ 		       thread->t_name, rc);
+ 		spin_lock(&svcpt->scp_lock);
+diff --git a/lustre/quota/qmt_lock.c b/lustre/quota/qmt_lock.c
+index 3236fb5..7c455fe 100644
+--- a/lustre/quota/qmt_lock.c
++++ b/lustre/quota/qmt_lock.c
+@@ -716,7 +716,6 @@ static int qmt_reba_thread(void *arg)
+ 	struct l_wait_info	 lwi = { 0 };
+ 	struct lu_env		*env;
+ 	struct lquota_entry	*lqe, *tmp;
+-	char			 pname[MTI_NAME_MAXLEN];
+ 	int			 rc;
+ 	ENTRY;
+ 
+@@ -731,9 +730,6 @@ static int qmt_reba_thread(void *arg)
+ 		RETURN(rc);
+ 	}
+ 
+-	snprintf(pname, MTI_NAME_MAXLEN, "qmt_reba_%s", qmt->qmt_svname);
+-	cfs_daemonize(pname);
+-
+ 	thread_set_flags(thread, SVC_RUNNING);
+ 	cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+@@ -773,15 +769,16 @@ int qmt_start_reba_thread(struct qmt_device *qmt)
+ {
+ 	struct ptlrpc_thread	*thread = &qmt->qmt_reba_thread;
+ 	struct l_wait_info	 lwi    = { 0 };
+-	int			 rc;
++	cfs_task_t		*task;
+ 	ENTRY;
+ 
+-	rc = cfs_create_thread(qmt_reba_thread, (void *)qmt, 0);
+-	if (rc < 0) {
+-		CERROR("%s: failed to start rebalance thread (%d)\n",
+-		       qmt->qmt_svname, rc);
++	task = kthread_run(qmt_reba_thread, (void *)qmt,
++			       "qmt_reba_%s", qmt->qmt_svname);
++	if (IS_ERR(task)) {
++		CERROR("%s: failed to start rebalance thread (%ld)\n",
++		       qmt->qmt_svname, PTR_ERR(task));
+ 		thread_set_flags(thread, SVC_STOPPED);
+-		RETURN(rc);
++		RETURN(PTR_ERR(task));
+ 	}
+ 
+ 	l_wait_event(thread->t_ctl_waitq,
+diff --git a/lustre/quota/qsd_reint.c b/lustre/quota/qsd_reint.c
+index ad2894f..070e535 100644
+--- a/lustre/quota/qsd_reint.c
++++ b/lustre/quota/qsd_reint.c
+@@ -417,8 +417,6 @@ static int qsd_reint_main(void *args)
+ 	int			 rc;
+ 	ENTRY;
+ 
+-	cfs_daemonize("qsd_reint");
+-
+ 	CDEBUG(D_QUOTA, "%s: Starting reintegration thread for "DFID"\n",
+ 	       qsd->qsd_svname, PFID(&qqi->qqi_fid));
+ 
+@@ -662,8 +660,8 @@ int qsd_start_reint_thread(struct qsd_qtype_info *qqi)
+ 		RETURN(0);
+ 	}
+ 
+-	rc = cfs_create_thread(qsd_reint_main, (void *)qqi, 0);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(qsd_reint_main, (void *)qqi, "qsd_reint"));
++	if (IS_ERR_VALUE(rc)) {
+ 		thread_set_flags(thread, SVC_STOPPED);
+ 		write_lock(&qsd->qsd_lock);
+ 		qqi->qqi_reint = 0;
+diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c
+index 037fb2b..5ab39e4 100644
+--- a/lustre/quota/qsd_writeback.c
++++ b/lustre/quota/qsd_writeback.c
+@@ -404,7 +404,6 @@ static int qsd_upd_thread(void *arg)
+ 	struct l_wait_info	 lwi;
+ 	cfs_list_t		 queue;
+ 	struct qsd_upd_rec	*upd, *n;
+-	char			 pname[MTI_NAME_MAXLEN];
+ 	struct lu_env		*env;
+ 	int			 qtype, rc = 0;
+ 	bool			 uptodate;
+@@ -423,9 +422,6 @@ static int qsd_upd_thread(void *arg)
+ 		RETURN(rc);
+ 	}
+ 
+-	snprintf(pname, MTI_NAME_MAXLEN, "lquota_wb_%s", qsd->qsd_svname);
+-	cfs_daemonize(pname);
+-
+ 	thread_set_flags(thread, SVC_RUNNING);
+ 	cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+@@ -487,14 +483,16 @@ int qsd_start_upd_thread(struct qsd_instance *qsd)
+ {
+ 	struct ptlrpc_thread	*thread = &qsd->qsd_upd_thread;
+ 	struct l_wait_info	 lwi = { 0 };
+-	int			 rc;
++	cfs_task_t		*task;
+ 	ENTRY;
+ 
+-	rc = cfs_create_thread(qsd_upd_thread, (void *)qsd, 0);
+-	if (rc < 0) {
+-		CERROR("Fail to start quota update thread. rc: %d\n", rc);
++	task = kthread_run(qsd_upd_thread, (void *)qsd,
++			   "lquota_wb_%s", qsd->qsd_svname);
++	if (IS_ERR(task)) {
++		CERROR("Fail to start quota update thread. rc: %ld\n",
++			PTR_ERR(task));
+ 		thread_set_flags(thread, SVC_STOPPED);
+-		RETURN(rc);
++		RETURN(PTR_ERR(task));
+ 	}
+ 
+ 	l_wait_event(thread->t_ctl_waitq,
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 96%
rename from sys-cluster/lustre/files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index 6d8fe15..600a96f 100644
--- a/sys-cluster/lustre/files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From 6cbb83e217da670eba6c48d6a5a8c9248e11290d Mon Sep 17 00:00:00 2001
+From 127cc837cc6e8268e220288ed7a0209d944cc3f5 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 09/11] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+Subject: [PATCH 10/12] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
similarity index 93%
rename from sys-cluster/lustre/files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
rename to sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index 4e16cfb..9c45f85 100644
--- a/sys-cluster/lustre/files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From ebc9570b69d08bb308b2317486de3062a06f59d0 Mon Sep 17 00:00:00 2001
+From ed04e52a97a68601eef0b426e32850bf0b0f2dda Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 10/11] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 11/12] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 

diff --git a/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
similarity index 99%
rename from sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
rename to sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
index 6908caa..f9b70ff 100644
--- a/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ b/sys-cluster/lustre/files/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -1,7 +1,7 @@
-From b9af425cb67ad9d27a8319a308fecd794478479e Mon Sep 17 00:00:00 2001
+From a706113ecda6efa8186bfe8cf6ff94a845f56603 Mon Sep 17 00:00:00 2001
 From: Brian Behlendorf <behlendorf1@llnl.gov>
 Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 11/11] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+Subject: [PATCH 12/12] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
 
 With the release of zfs-0.6.1 the default install location of
 the zfs kmod headers and objects has changed.  The kmod headers

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index ef0f91d..6956df0 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -41,9 +41,10 @@ PATCHES=(
 	"${FILESDIR}/0006-LU-2800-llite-introduce-local-getname.patch"
 	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
 	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
-	"${FILESDIR}/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
-	"${FILESDIR}/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
+	"${FILESDIR}/0009-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
+	"${FILESDIR}/0010-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0011-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0012-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-04-17  9:45 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-04-17  9:45 UTC (permalink / raw
  To: gentoo-commits

commit:     6df780dfd57e8f38c6a59b932950a6525406534d
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Apr 17 09:45:19 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Apr 17 09:45:19 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=6df780df

Update lustre patches

Package-Manager: portage-2.2.0_alpha173
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   23 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    4 +-
 ...rnel-3.0-SuSE-and-3.6-FC18-server-patches.patch |21302 ++++++++++++++++++++
 ...el-sock_map_fd-replaced-by-sock_alloc_fi.patch} |    4 +-
 ...-kernel-Kernel-update-for-3.7.2-201.fc18.patch} |    6 +-
 ...at-posix_acl_-to-from-_xattr-take-user_n.patch} |   10 +-
 ...06-LU-2800-llite-introduce-local-getname.patch} |    4 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch | 2965 ---
 ...tch => 0007-LU-2987-llite-rcu-free-inode.patch} |    8 +-
 ...0-kernel-3.8-upstream-removes-vmtruncate.patch} |   27 +-
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |  115 +
 ...79-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch |   82 +
 ...-build-zfs-0.6.1-kmod-dkms-compatibility.patch} |   67 +-
 sys-cluster/lustre/lustre-9999.ebuild              |   18 +-
 14 files changed, 21610 insertions(+), 3025 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 32b0e92..a0c78db 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,29 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  17 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch,
+  +files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  +files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  +files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  +files/0006-LU-2800-llite-introduce-local-getname.patch,
+  +files/0007-LU-2987-llite-rcu-free-inode.patch,
+  +files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  +files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  +files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  -files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  -files/0004-LU-2800-llite-introduce-local-getname.patch,
+  -files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  -files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  -files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  -files/0008-LU-2987-llite-rcu-free-inode.patch,
+  -files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   16 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
   +files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 3c5b3f8..eb3bc8e 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From cd588ca78ac730769a98c105e7f878b3a712116b Mon Sep 17 00:00:00 2001
+From bb7a4a452a917bb998eb237af6c472aea7c70856 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 1/9] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/11] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
new file mode 100644
index 0000000..6cc1365
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch
@@ -0,0 +1,21302 @@
+From bbf10f6ddeb01a6653a5ffa77769aeb349741ee3 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 9 Apr 2013 11:26:00 -0400
+Subject: [PATCH 02/11] LU-1812 kernel: 3.0/SuSE and 3.6/FC18 server patches
+
+This patch extends lustre server support to FC18 and
+SLES11 SP2 with a ZFS. At this time ldiskfs is not
+supported on FC18. Several outdated patches for SLES10
+server server support also have been removed. The
+jbd2-jcberr patch was not ported to these new platforms
+for reasons described in LU-433
+
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I2a86d7ca4e068686372eb74f85b1443d24e245c4
+---
+ lustre/autoconf/lustre-core.m4                     |    1 -
+ lustre/include/linux/lustre_compat25.h             |    3 -
+ .../kernel-2.6.16-2.6-sles10-ppc64-ppc64.config    | 2190 ----------
+ .../kernel-2.6.27-2.6-sles11-i686-default.config   | 4409 --------------------
+ .../kernel-2.6.27-2.6-sles11-i686.config           | 4409 --------------------
+ .../kernel-2.6.27-2.6-sles11-x86_64-default.config | 4143 ------------------
+ .../kernel-2.6.27-2.6-sles11-x86_64.config         | 4143 ------------------
+ .../patches/blkdev_tunables-2.6-sles11.patch       |   11 -
+ .../patches/blkdev_tunables-3.0-sles11.patch       |  119 +
+ .../patches/blkdev_tunables-3.7.patch              |  128 +
+ .../patches/dev_read_only-2.6.27-vanilla.patch     |  166 -
+ .../patches/dev_read_only-3.0-sles11.patch         |  174 +
+ .../kernel_patches/patches/dev_read_only-3.7.patch |  174 +
+ .../patches/export-2.6.27-vanilla.patch            |   24 -
+ .../patches/iopen-misc-2.6.22-vanilla.patch        |   70 -
+ .../patches/jbd2-jcberr-2.6-sles11.patch           |  225 -
+ .../patches/raid5-mmp-unplug-dev-3.7.patch         |   21 +
+ .../patches/raid5-mmp-unplug-dev-sles11sp2.patch   |   29 +
+ .../patches/sd_iostats-2.6.27-vanilla.patch        |  579 ---
+ lustre/kernel_patches/series/2.6-sles11.series     |   17 +-
+ lustre/kernel_patches/series/3.0-sles11.series     |    7 +-
+ lustre/kernel_patches/series/3.x-fc18.series       |    4 +
+ lustre/kernel_patches/targets/2.6-sles10.target.in |   41 -
+ 23 files changed, 659 insertions(+), 20428 deletions(-)
+ delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config
+ delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config
+ delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config
+ delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config
+ delete mode 100644 lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config
+ delete mode 100644 lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch
+ create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch
+ create mode 100644 lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
+ delete mode 100644 lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch
+ create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch
+ create mode 100644 lustre/kernel_patches/patches/dev_read_only-3.7.patch
+ delete mode 100644 lustre/kernel_patches/patches/export-2.6.27-vanilla.patch
+ delete mode 100644 lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch
+ delete mode 100644 lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch
+ create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
+ create mode 100644 lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch
+ delete mode 100644 lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch
+ create mode 100644 lustre/kernel_patches/series/3.x-fc18.series
+ delete mode 100644 lustre/kernel_patches/targets/2.6-sles10.target.in
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 40c4680..0354dd4 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2883,7 +2883,6 @@ lustre/include/darwin/Makefile
+ lustre/include/lustre/Makefile
+ lustre/kernel_patches/targets/2.6-rhel6.target
+ lustre/kernel_patches/targets/2.6-rhel5.target
+-lustre/kernel_patches/targets/2.6-sles10.target
+ lustre/kernel_patches/targets/2.6-sles11.target
+ lustre/kernel_patches/targets/3.0-sles11.target
+ lustre/kernel_patches/targets/2.6-oel5.target
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index ca485cd..54effc5 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -447,8 +447,6 @@ static inline int ll_crypto_hmac(struct crypto_tfm *tfm,
+ #define ll_vfs_unlink(inode,entry,mnt)          vfs_unlink(inode,entry,mnt)
+ #define ll_vfs_mknod(dir,entry,mnt,mode,dev)            \
+                 vfs_mknod(dir,entry,mnt,mode,dev)
+-#define ll_security_inode_unlink(dir,entry,mnt)         \
+-                security_inode_unlink(dir,entry,mnt)
+ #define ll_vfs_rename(old,old_dir,mnt,new,new_dir,mnt1) \
+                 vfs_rename(old,old_dir,mnt,new,new_dir,mnt1)
+ #else
+@@ -457,7 +455,6 @@ static inline int ll_crypto_hmac(struct crypto_tfm *tfm,
+ #define ll_vfs_link(old,mnt,dir,new,mnt1)       vfs_link(old,dir,new)
+ #define ll_vfs_unlink(inode,entry,mnt)          vfs_unlink(inode,entry)
+ #define ll_vfs_mknod(dir,entry,mnt,mode,dev)    vfs_mknod(dir,entry,mode,dev)
+-#define ll_security_inode_unlink(dir,entry,mnt) security_inode_unlink(dir,entry)
+ #define ll_vfs_rename(old,old_dir,mnt,new,new_dir,mnt1) \
+                 vfs_rename(old,old_dir,new,new_dir)
+ #endif /* HAVE_SECURITY_PLUG */
+diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config
+deleted file mode 100644
+index dd43736..0000000
+--- a/lustre/kernel_patches/kernel_configs/kernel-2.6.16-2.6-sles10-ppc64-ppc64.config
++++ /dev/null
+@@ -1,2190 +0,0 @@
+-#
+-# Automatically generated make config: don't edit
+-#
+-CONFIG_PPC64=y
+-CONFIG_64BIT=y
+-CONFIG_PPC_MERGE=y
+-CONFIG_MMU=y
+-CONFIG_GENERIC_HARDIRQS=y
+-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+-CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_PPC=y
+-CONFIG_EARLY_PRINTK=y
+-CONFIG_COMPAT=y
+-CONFIG_SYSVIPC_COMPAT=y
+-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+-CONFIG_PPC_OF=y
+-CONFIG_PPC_UDBG_16550=y
+-CONFIG_GENERIC_TBSYNC=y
+-CONFIG_AUDIT_ARCH=y
+-# CONFIG_DEFAULT_UIMAGE is not set
+-
+-#
+-# Processor support
+-#
+-# CONFIG_POWER4_ONLY is not set
+-CONFIG_POWER3=y
+-CONFIG_POWER4=y
+-CONFIG_PPC_FPU=y
+-CONFIG_ALTIVEC=y
+-CONFIG_PPC_STD_MMU=y
+-CONFIG_VIRT_CPU_ACCOUNTING=y
+-CONFIG_SMP=y
+-CONFIG_NR_CPUS=128
+-
+-#
+-# Code maturity level options
+-#
+-CONFIG_EXPERIMENTAL=y
+-CONFIG_LOCK_KERNEL=y
+-CONFIG_INIT_ENV_ARG_LIMIT=32
+-
+-#
+-# General setup
+-#
+-CONFIG_LOCALVERSION="-ppc64"
+-# CONFIG_LOCALVERSION_AUTO is not set
+-CONFIG_SUSE_KERNEL=y
+-CONFIG_SLE_VERSION=10
+-CONFIG_SLE_SP=2
+-CONFIG_SLE_SP_SUBLEVEL=0
+-CONFIG_SWAP=y
+-CONFIG_SYSVIPC=y
+-CONFIG_POSIX_MQUEUE=y
+-CONFIG_BSD_PROCESS_ACCT=y
+-CONFIG_BSD_PROCESS_ACCT_V3=y
+-CONFIG_TASKSTATS=y
+-CONFIG_TASK_DELAY_ACCT=y
+-CONFIG_TASK_XACCT=y
+-CONFIG_SYSCTL=y
+-CONFIG_AUDIT=y
+-CONFIG_AUDITSYSCALL=y
+-CONFIG_IKCONFIG=y
+-CONFIG_IKCONFIG_PROC=y
+-CONFIG_CPUSETS=y
+-CONFIG_RELAY=y
+-CONFIG_INITRAMFS_SOURCE=""
+-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+-# CONFIG_EMBEDDED is not set
+-CONFIG_KALLSYMS=y
+-CONFIG_KALLSYMS_ALL=y
+-# CONFIG_KALLSYMS_EXTRA_PASS is not set
+-CONFIG_HOTPLUG=y
+-CONFIG_PRINTK=y
+-CONFIG_BUG=y
+-CONFIG_ELF_CORE=y
+-CONFIG_BASE_FULL=y
+-CONFIG_FUTEX=y
+-CONFIG_EPOLL=y
+-CONFIG_SHMEM=y
+-CONFIG_CC_ALIGN_FUNCTIONS=0
+-CONFIG_CC_ALIGN_LABELS=0
+-CONFIG_CC_ALIGN_LOOPS=0
+-CONFIG_CC_ALIGN_JUMPS=0
+-CONFIG_SLAB=y
+-# CONFIG_TINY_SHMEM is not set
+-CONFIG_BASE_SMALL=0
+-# CONFIG_SLOB is not set
+-CONFIG_OBSOLETE_INTERMODULE=m
+-
+-#
+-# Loadable module support
+-#
+-CONFIG_MODULES=y
+-CONFIG_MODULE_UNLOAD=y
+-# CONFIG_MODULE_FORCE_UNLOAD is not set
+-CONFIG_MODVERSIONS=y
+-CONFIG_MODULE_SRCVERSION_ALL=y
+-CONFIG_KMOD=y
+-CONFIG_STOP_MACHINE=y
+-
+-#
+-# Block layer
+-#
+-CONFIG_BLK_DEV_IO_TRACE=y
+-
+-#
+-# IO Schedulers
+-#
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_DEFAULT_AS is not set
+-CONFIG_DEFAULT_DEADLINE=y
+-# CONFIG_DEFAULT_CFQ is not set
+-# CONFIG_DEFAULT_NOOP is not set
+-CONFIG_DEFAULT_IOSCHED="deadline"
+-
+-#
+-# Platform support
+-#
+-CONFIG_PPC_MULTIPLATFORM=y
+-# CONFIG_PPC_ISERIES is not set
+-# CONFIG_EMBEDDED6xx is not set
+-# CONFIG_APUS is not set
+-CONFIG_PPC_PSERIES=y
+-CONFIG_PPC_PMAC=y
+-CONFIG_PPC_PMAC64=y
+-CONFIG_PPC_MAPLE=y
+-CONFIG_PPC_CELL=y
+-CONFIG_XICS=y
+-CONFIG_U3_DART=y
+-CONFIG_MPIC=y
+-CONFIG_PPC_RTAS=y
+-CONFIG_RTAS_ERROR_LOGGING=y
+-CONFIG_RTAS_PROC=y
+-CONFIG_RTAS_FLASH=y
+-CONFIG_MMIO_NVRAM=y
+-CONFIG_MPIC_BROKEN_U3=y
+-CONFIG_CELL_IIC=y
+-CONFIG_IBMVIO=y
+-CONFIG_IBMEBUS=y
+-# CONFIG_PPC_MPC106 is not set
+-CONFIG_CPU_FREQ=y
+-CONFIG_CPU_FREQ_TABLE=y
+-CONFIG_CPU_FREQ_DEBUG=y
+-CONFIG_CPU_FREQ_STAT=m
+-CONFIG_CPU_FREQ_STAT_DETAILS=y
+-CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+-CONFIG_CPU_FREQ_GOV_USERSPACE=m
+-CONFIG_CPU_FREQ_GOV_ONDEMAND=m
+-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+-CONFIG_CPU_FREQ_PMAC64=y
+-# CONFIG_WANT_EARLY_SERIAL is not set
+-
+-#
+-# Cell Broadband Engine options
+-#
+-CONFIG_SPU_FS=m
+-
+-#
+-# Kernel options
+-#
+-CONFIG_HZ_100=y
+-# CONFIG_HZ_250 is not set
+-# CONFIG_HZ_1000 is not set
+-CONFIG_HZ=100
+-CONFIG_PREEMPT_NONE=y
+-# CONFIG_PREEMPT_VOLUNTARY is not set
+-# CONFIG_PREEMPT is not set
+-# CONFIG_PREEMPT_BKL is not set
+-CONFIG_BINFMT_ELF=y
+-CONFIG_BINFMT_MISC=m
+-CONFIG_FORCE_MAX_ZONEORDER=13
+-CONFIG_IOMMU_VMERGE=y
+-CONFIG_HOTPLUG_CPU=y
+-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+-CONFIG_KEXEC=y
+-# CONFIG_CRASH_DUMP is not set
+-CONFIG_IRQ_ALL_CPUS=y
+-CONFIG_PPC_SPLPAR=y
+-CONFIG_EEH=y
+-CONFIG_SCANLOG=m
+-CONFIG_LPARCFG=y
+-CONFIG_NUMA=y
+-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+-CONFIG_ARCH_SPARSEMEM_ENABLE=y
+-CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+-CONFIG_SELECT_MEMORY_MODEL=y
+-# CONFIG_FLATMEM_MANUAL is not set
+-# CONFIG_DISCONTIGMEM_MANUAL is not set
+-CONFIG_SPARSEMEM_MANUAL=y
+-CONFIG_SPARSEMEM=y
+-CONFIG_NEED_MULTIPLE_NODES=y
+-CONFIG_HAVE_MEMORY_PRESENT=y
+-# CONFIG_SPARSEMEM_STATIC is not set
+-CONFIG_SPARSEMEM_EXTREME=y
+-CONFIG_MEMORY_HOTPLUG=y
+-CONFIG_SPLIT_PTLOCK_CPUS=4
+-CONFIG_MIGRATION=y
+-CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
+-CONFIG_ARCH_MEMORY_PROBE=y
+-# CONFIG_PPC_64K_PAGES is not set
+-CONFIG_SCHED_SMT=y
+-CONFIG_PROC_DEVICETREE=y
+-# CONFIG_CMDLINE_BOOL is not set
+-# CONFIG_PM is not set
+-CONFIG_SECCOMP=y
+-CONFIG_ISA_DMA_API=y
+-
+-#
+-# Bus options
+-#
+-CONFIG_GENERIC_ISA_DMA=y
+-CONFIG_PPC_I8259=y
+-# CONFIG_PPC_INDIRECT_PCI is not set
+-CONFIG_PCI=y
+-CONFIG_PCI_DOMAINS=y
+-CONFIG_PCIEPORTBUS=y
+-# CONFIG_HOTPLUG_PCI_PCIE is not set
+-CONFIG_PCI_MSI=y
+-# CONFIG_PCI_LEGACY_PROC is not set
+-# CONFIG_PCI_DEBUG is not set
+-
+-#
+-# PCCARD (PCMCIA/CardBus) support
+-#
+-# CONFIG_PCCARD is not set
+-
+-#
+-# PCI Hotplug Support
+-#
+-CONFIG_HOTPLUG_PCI=y
+-# CONFIG_HOTPLUG_PCI_FAKE is not set
+-# CONFIG_HOTPLUG_PCI_CPCI is not set
+-# CONFIG_HOTPLUG_PCI_SHPC is not set
+-CONFIG_HOTPLUG_PCI_RPA=y
+-CONFIG_HOTPLUG_PCI_RPA_DLPAR=y
+-CONFIG_KERNEL_START=0xc000000000000000
+-
+-#
+-# Networking
+-#
+-CONFIG_NET=y
+-
+-#
+-# Networking options
+-#
+-# CONFIG_NETDEBUG is not set
+-CONFIG_PACKET=y
+-CONFIG_PACKET_MMAP=y
+-CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-CONFIG_XFRM_USER=m
+-CONFIG_NET_KEY=y
+-CONFIG_INET=y
+-CONFIG_IP_MULTICAST=y
+-CONFIG_IP_ADVANCED_ROUTER=y
+-CONFIG_ASK_IP_FIB_HASH=y
+-# CONFIG_IP_FIB_TRIE is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_MULTIPLE_TABLES=y
+-# CONFIG_IP_ROUTE_FWMARK is not set
+-CONFIG_IP_ROUTE_MULTIPATH=y
+-# CONFIG_IP_ROUTE_MULTIPATH_CACHED is not set
+-CONFIG_IP_ROUTE_VERBOSE=y
+-# CONFIG_IP_PNP is not set
+-CONFIG_NET_IPIP=m
+-CONFIG_NET_IPGRE=m
+-CONFIG_NET_IPGRE_BROADCAST=y
+-CONFIG_IP_MROUTE=y
+-CONFIG_IP_PIMSM_V1=y
+-CONFIG_IP_PIMSM_V2=y
+-# CONFIG_ARPD is not set
+-CONFIG_SYN_COOKIES=y
+-CONFIG_INET_AH=m
+-CONFIG_INET_ESP=m
+-CONFIG_INET_IPCOMP=m
+-CONFIG_INET_TUNNEL=m
+-CONFIG_INET_DIAG=m
+-CONFIG_INET_TCP_DIAG=m
+-CONFIG_TCP_CONG_ADVANCED=y
+-
+-#
+-# TCP congestion control
+-#
+-CONFIG_TCP_CONG_BIC=m
+-CONFIG_TCP_CONG_CUBIC=m
+-CONFIG_TCP_CONG_WESTWOOD=m
+-CONFIG_TCP_CONG_HTCP=m
+-CONFIG_TCP_CONG_HSTCP=m
+-CONFIG_TCP_CONG_HYBLA=m
+-CONFIG_TCP_CONG_VEGAS=m
+-CONFIG_TCP_CONG_SCALABLE=m
+-
+-#
+-# IP: Virtual Server Configuration
+-#
+-# CONFIG_IP_VS is not set
+-CONFIG_IPV6=m
+-CONFIG_IPV6_PRIVACY=y
+-CONFIG_INET6_AH=m
+-CONFIG_INET6_ESP=m
+-CONFIG_INET6_IPCOMP=m
+-CONFIG_INET6_TUNNEL=m
+-CONFIG_IPV6_TUNNEL=m
+-CONFIG_NETFILTER=y
+-# CONFIG_NETFILTER_DEBUG is not set
+-CONFIG_BRIDGE_NETFILTER=y
+-
+-#
+-# Core Netfilter Configuration
+-#
+-CONFIG_NETFILTER_NETLINK=m
+-CONFIG_NETFILTER_NETLINK_QUEUE=m
+-CONFIG_NETFILTER_NETLINK_LOG=m
+-CONFIG_NETFILTER_XTABLES=m
+-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+-CONFIG_NETFILTER_XT_TARGET_MARK=m
+-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+-CONFIG_NETFILTER_XT_MATCH_DCCP=m
+-CONFIG_NETFILTER_XT_MATCH_HELPER=m
+-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_MAC=m
+-CONFIG_NETFILTER_XT_MATCH_MARK=m
+-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+-CONFIG_NETFILTER_XT_MATCH_REALM=m
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+-CONFIG_NETFILTER_XT_MATCH_STATE=m
+-CONFIG_NETFILTER_XT_MATCH_STRING=m
+-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+-
+-#
+-# IP: Netfilter Configuration
+-#
+-CONFIG_IP_NF_CONNTRACK=m
+-# CONFIG_IP_NF_CT_ACCT is not set
+-CONFIG_IP_NF_CONNTRACK_MARK=y
+-CONFIG_IP_NF_CONNTRACK_EVENTS=y
+-CONFIG_IP_NF_CONNTRACK_NETLINK=m
+-CONFIG_IP_NF_CT_PROTO_SCTP=m
+-CONFIG_IP_NF_FTP=m
+-CONFIG_IP_NF_IRC=m
+-CONFIG_IP_NF_NETBIOS_NS=m
+-CONFIG_IP_NF_TFTP=m
+-CONFIG_IP_NF_AMANDA=m
+-CONFIG_IP_NF_PPTP=m
+-CONFIG_IP_NF_QUEUE=m
+-CONFIG_IP_NF_IPTABLES=m
+-CONFIG_IP_NF_MATCH_IPRANGE=m
+-CONFIG_IP_NF_MATCH_MULTIPORT=m
+-CONFIG_IP_NF_MATCH_TOS=m
+-CONFIG_IP_NF_MATCH_RECENT=m
+-CONFIG_IP_NF_MATCH_ECN=m
+-CONFIG_IP_NF_MATCH_DSCP=m
+-CONFIG_IP_NF_MATCH_AH_ESP=m
+-CONFIG_IP_NF_MATCH_TTL=m
+-CONFIG_IP_NF_MATCH_OWNER=m
+-CONFIG_IP_NF_MATCH_ADDRTYPE=m
+-CONFIG_IP_NF_MATCH_HASHLIMIT=m
+-CONFIG_IP_NF_MATCH_POLICY=m
+-CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
+-CONFIG_IP_NF_FILTER=m
+-CONFIG_IP_NF_TARGET_REJECT=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_IP_NF_TARGET_TCPMSS=m
+-CONFIG_IP_NF_NAT=m
+-CONFIG_IP_NF_NAT_NEEDED=y
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_IP_NF_TARGET_SAME=m
+-CONFIG_IP_NF_NAT_SNMP_BASIC=m
+-CONFIG_IP_NF_NAT_IRC=m
+-CONFIG_IP_NF_NAT_FTP=m
+-CONFIG_IP_NF_NAT_TFTP=m
+-CONFIG_IP_NF_NAT_AMANDA=m
+-CONFIG_IP_NF_NAT_PPTP=m
+-CONFIG_IP_NF_MANGLE=m
+-CONFIG_IP_NF_TARGET_TOS=m
+-CONFIG_IP_NF_TARGET_ECN=m
+-CONFIG_IP_NF_TARGET_DSCP=m
+-CONFIG_IP_NF_TARGET_TTL=m
+-CONFIG_IP_NF_TARGET_CLUSTERIP=m
+-CONFIG_IP_NF_RAW=m
+-CONFIG_IP_NF_ARPTABLES=m
+-CONFIG_IP_NF_ARPFILTER=m
+-CONFIG_IP_NF_ARP_MANGLE=m
+-
+-#
+-# IPv6: Netfilter Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP6_NF_QUEUE=m
+-CONFIG_IP6_NF_IPTABLES=m
+-CONFIG_IP6_NF_MATCH_RT=m
+-CONFIG_IP6_NF_MATCH_OPTS=m
+-CONFIG_IP6_NF_MATCH_FRAG=m
+-CONFIG_IP6_NF_MATCH_HL=m
+-CONFIG_IP6_NF_MATCH_MULTIPORT=m
+-CONFIG_IP6_NF_MATCH_OWNER=m
+-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+-CONFIG_IP6_NF_MATCH_AHESP=m
+-CONFIG_IP6_NF_MATCH_EUI64=m
+-CONFIG_IP6_NF_MATCH_POLICY=m
+-CONFIG_IP6_NF_FILTER=m
+-CONFIG_IP6_NF_TARGET_LOG=m
+-CONFIG_IP6_NF_TARGET_REJECT=m
+-CONFIG_IP6_NF_MANGLE=m
+-CONFIG_IP6_NF_TARGET_HL=m
+-CONFIG_IP6_NF_RAW=m
+-
+-#
+-# Bridge: Netfilter Configuration
+-#
+-CONFIG_BRIDGE_NF_EBTABLES=m
+-CONFIG_BRIDGE_EBT_BROUTE=m
+-CONFIG_BRIDGE_EBT_T_FILTER=m
+-CONFIG_BRIDGE_EBT_T_NAT=m
+-CONFIG_BRIDGE_EBT_802_3=m
+-CONFIG_BRIDGE_EBT_AMONG=m
+-CONFIG_BRIDGE_EBT_ARP=m
+-CONFIG_BRIDGE_EBT_IP=m
+-CONFIG_BRIDGE_EBT_LIMIT=m
+-CONFIG_BRIDGE_EBT_MARK=m
+-CONFIG_BRIDGE_EBT_PKTTYPE=m
+-CONFIG_BRIDGE_EBT_STP=m
+-CONFIG_BRIDGE_EBT_VLAN=m
+-CONFIG_BRIDGE_EBT_ARPREPLY=m
+-CONFIG_BRIDGE_EBT_DNAT=m
+-CONFIG_BRIDGE_EBT_MARK_T=m
+-CONFIG_BRIDGE_EBT_REDIRECT=m
+-CONFIG_BRIDGE_EBT_SNAT=m
+-CONFIG_BRIDGE_EBT_LOG=m
+-CONFIG_BRIDGE_EBT_ULOG=m
+-
+-#
+-# DCCP Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_DCCP=m
+-CONFIG_INET_DCCP_DIAG=m
+-
+-#
+-# DCCP CCIDs Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_DCCP_CCID3=m
+-CONFIG_IP_DCCP_TFRC_LIB=m
+-
+-#
+-# DCCP Kernel Hacking
+-#
+-# CONFIG_IP_DCCP_DEBUG is not set
+-# CONFIG_IP_DCCP_UNLOAD_HACK is not set
+-
+-#
+-# SCTP Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_SCTP=m
+-# CONFIG_SCTP_DBG_MSG is not set
+-# CONFIG_SCTP_DBG_OBJCNT is not set
+-CONFIG_SCTP_HMAC_NONE=y
+-# CONFIG_SCTP_HMAC_SHA1 is not set
+-# CONFIG_SCTP_HMAC_MD5 is not set
+-
+-#
+-# TIPC Configuration (EXPERIMENTAL)
+-#
+-# CONFIG_TIPC is not set
+-# CONFIG_ATM is not set
+-CONFIG_BRIDGE=m
+-CONFIG_VLAN_8021Q=m
+-# CONFIG_DECNET is not set
+-CONFIG_LLC=y
+-CONFIG_LLC2=m
+-CONFIG_IPX=m
+-CONFIG_IPX_INTERN=y
+-CONFIG_ATALK=m
+-CONFIG_DEV_APPLETALK=y
+-CONFIG_IPDDP=m
+-CONFIG_IPDDP_ENCAP=y
+-CONFIG_IPDDP_DECAP=y
+-# CONFIG_X25 is not set
+-# CONFIG_LAPB is not set
+-# CONFIG_NET_DIVERT is not set
+-# CONFIG_ECONET is not set
+-# CONFIG_WAN_ROUTER is not set
+-
+-#
+-# QoS and/or fair queueing
+-#
+-CONFIG_NET_SCHED=y
+-CONFIG_NET_SCH_CLK_JIFFIES=y
+-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+-# CONFIG_NET_SCH_CLK_CPU is not set
+-
+-#
+-# Queueing/Scheduling
+-#
+-CONFIG_NET_SCH_CBQ=m
+-CONFIG_NET_SCH_HTB=m
+-CONFIG_NET_SCH_HFSC=m
+-CONFIG_NET_SCH_PRIO=m
+-CONFIG_NET_SCH_RED=m
+-CONFIG_NET_SCH_SFQ=m
+-CONFIG_NET_SCH_TEQL=m
+-CONFIG_NET_SCH_TBF=m
+-CONFIG_NET_SCH_GRED=m
+-CONFIG_NET_SCH_DSMARK=m
+-CONFIG_NET_SCH_NETEM=m
+-CONFIG_NET_SCH_INGRESS=m
+-
+-#
+-# Classification
+-#
+-CONFIG_NET_CLS=y
+-CONFIG_NET_CLS_BASIC=m
+-CONFIG_NET_CLS_TCINDEX=m
+-CONFIG_NET_CLS_ROUTE4=m
+-CONFIG_NET_CLS_ROUTE=y
+-CONFIG_NET_CLS_FW=m
+-CONFIG_NET_CLS_U32=m
+-CONFIG_CLS_U32_PERF=y
+-CONFIG_CLS_U32_MARK=y
+-CONFIG_NET_CLS_RSVP=m
+-CONFIG_NET_CLS_RSVP6=m
+-CONFIG_NET_EMATCH=y
+-CONFIG_NET_EMATCH_STACK=32
+-CONFIG_NET_EMATCH_CMP=m
+-CONFIG_NET_EMATCH_NBYTE=m
+-CONFIG_NET_EMATCH_U32=m
+-CONFIG_NET_EMATCH_META=m
+-CONFIG_NET_EMATCH_TEXT=m
+-CONFIG_NET_CLS_ACT=y
+-CONFIG_NET_ACT_POLICE=m
+-CONFIG_NET_ACT_GACT=m
+-CONFIG_GACT_PROB=y
+-CONFIG_NET_ACT_MIRRED=m
+-CONFIG_NET_ACT_IPT=m
+-CONFIG_NET_ACT_PEDIT=m
+-CONFIG_NET_ACT_SIMP=m
+-CONFIG_NET_CLS_IND=y
+-CONFIG_NET_ESTIMATOR=y
+-
+-#
+-# Network testing
+-#
+-CONFIG_NET_PKTGEN=m
+-# CONFIG_HAMRADIO is not set
+-# CONFIG_IRDA is not set
+-CONFIG_BT=m
+-CONFIG_BT_L2CAP=m
+-CONFIG_BT_SCO=m
+-CONFIG_BT_RFCOMM=m
+-CONFIG_BT_RFCOMM_TTY=y
+-CONFIG_BT_BNEP=m
+-CONFIG_BT_BNEP_MC_FILTER=y
+-CONFIG_BT_BNEP_PROTO_FILTER=y
+-CONFIG_BT_HIDP=m
+-
+-#
+-# Bluetooth device drivers
+-#
+-CONFIG_BT_HCIUSB=m
+-CONFIG_BT_HCIUSB_SCO=y
+-# CONFIG_BT_HCIUART is not set
+-CONFIG_BT_HCIBCM203X=m
+-CONFIG_BT_HCIBPA10X=m
+-CONFIG_BT_HCIBFUSB=m
+-CONFIG_BT_HCIVHCI=m
+-CONFIG_IEEE80211=m
+-# CONFIG_IEEE80211_DEBUG is not set
+-CONFIG_IEEE80211_CRYPT_WEP=m
+-CONFIG_IEEE80211_CRYPT_CCMP=m
+-
+-#
+-# Device Drivers
+-#
+-
+-#
+-# Generic Driver Options
+-#
+-CONFIG_STANDALONE=y
+-CONFIG_PREVENT_FIRMWARE_BUILD=y
+-CONFIG_FW_LOADER=m
+-# CONFIG_DEBUG_DRIVER is not set
+-# CONFIG_SYS_HYPERVISOR is not set
+-
+-#
+-# Connector - unified userspace <-> kernelspace linker
+-#
+-CONFIG_CONNECTOR=y
+-CONFIG_PROC_EVENTS=y
+-
+-#
+-# Memory Technology Devices (MTD)
+-#
+-# CONFIG_MTD is not set
+-
+-#
+-# Parallel port support
+-#
+-CONFIG_PARPORT=m
+-CONFIG_PARPORT_PC=m
+-CONFIG_PARPORT_SERIAL=m
+-CONFIG_PARPORT_PC_FIFO=y
+-# CONFIG_PARPORT_PC_SUPERIO is not set
+-CONFIG_PARPORT_NOT_PC=y
+-# CONFIG_PARPORT_GSC is not set
+-CONFIG_PARPORT_1284=y
+-
+-#
+-# Plug and Play support
+-#
+-
+-#
+-# Block devices
+-#
+-CONFIG_BLK_DEV_FD=m
+-# CONFIG_PARIDE is not set
+-# CONFIG_BLK_CPQ_DA is not set
+-# CONFIG_BLK_CPQ_CISS_DA is not set
+-# CONFIG_BLK_DEV_DAC960 is not set
+-# CONFIG_BLK_DEV_UMEM is not set
+-# CONFIG_BLK_DEV_COW_COMMON is not set
+-CONFIG_BLK_DEV_LOOP=m
+-CONFIG_BLK_DEV_CRYPTOLOOP=m
+-CONFIG_BLK_DEV_NBD=m
+-# CONFIG_BLK_DEV_SX8 is not set
+-# CONFIG_BLK_DEV_UB is not set
+-CONFIG_BLK_DEV_RAM=y
+-CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=123456
+-CONFIG_BLK_DEV_INITRD=y
+-CONFIG_CDROM_PKTCDVD=m
+-CONFIG_CDROM_PKTCDVD_BUFFERS=8
+-CONFIG_CDROM_PKTCDVD_WCACHE=y
+-CONFIG_CIPHER_TWOFISH=m
+-CONFIG_ATA_OVER_ETH=m
+-
+-#
+-# ATA/ATAPI/MFM/RLL support
+-#
+-CONFIG_IDE=y
+-CONFIG_BLK_DEV_IDE=y
+-
+-#
+-# Please see Documentation/ide.txt for help/info on IDE drives
+-#
+-# CONFIG_BLK_DEV_IDE_SATA is not set
+-CONFIG_BLK_DEV_IDEDISK=y
+-# CONFIG_IDEDISK_MULTI_MODE is not set
+-CONFIG_BLK_DEV_IDECD=m
+-# CONFIG_BLK_DEV_IDETAPE is not set
+-# CONFIG_BLK_DEV_IDEFLOPPY is not set
+-CONFIG_BLK_DEV_IDESCSI=m
+-CONFIG_IDE_TASK_IOCTL=y
+-
+-#
+-# IDE chipset support/bugfixes
+-#
+-CONFIG_IDE_GENERIC=y
+-CONFIG_BLK_DEV_IDEPCI=y
+-CONFIG_IDEPCI_SHARE_IRQ=y
+-# CONFIG_BLK_DEV_OFFBOARD is not set
+-# CONFIG_BLK_DEV_GENERIC is not set
+-# CONFIG_BLK_DEV_OPTI621 is not set
+-# CONFIG_BLK_DEV_SL82C105 is not set
+-CONFIG_BLK_DEV_IDEDMA_PCI=y
+-CONFIG_BLK_DEV_IDEDMA_FORCED=y
+-CONFIG_IDEDMA_PCI_AUTO=y
+-# CONFIG_IDEDMA_ONLYDISK is not set
+-# CONFIG_BLK_DEV_AEC62XX is not set
+-# CONFIG_BLK_DEV_ALI15X3 is not set
+-CONFIG_BLK_DEV_AMD74XX=y
+-# CONFIG_BLK_DEV_CMD64X is not set
+-# CONFIG_BLK_DEV_TRIFLEX is not set
+-# CONFIG_BLK_DEV_CY82C693 is not set
+-# CONFIG_BLK_DEV_CS5520 is not set
+-# CONFIG_BLK_DEV_CS5530 is not set
+-# CONFIG_BLK_DEV_HPT34X is not set
+-# CONFIG_BLK_DEV_HPT366 is not set
+-# CONFIG_BLK_DEV_SC1200 is not set
+-# CONFIG_BLK_DEV_PIIX is not set
+-# CONFIG_BLK_DEV_IT821X is not set
+-# CONFIG_BLK_DEV_NS87415 is not set
+-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
+-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
+-# CONFIG_BLK_DEV_SVWKS is not set
+-CONFIG_BLK_DEV_SIIMAGE=y
+-# CONFIG_BLK_DEV_SLC90E66 is not set
+-# CONFIG_BLK_DEV_TRM290 is not set
+-# CONFIG_BLK_DEV_VIA82CXXX is not set
+-CONFIG_BLK_DEV_IDE_PMAC=y
+-CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
+-CONFIG_BLK_DEV_IDEDMA_PMAC=y
+-# CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set
+-# CONFIG_IDE_ARM is not set
+-CONFIG_BLK_DEV_IDEDMA=y
+-# CONFIG_IDEDMA_IVB is not set
+-CONFIG_IDEDMA_AUTO=y
+-# CONFIG_BLK_DEV_HD is not set
+-
+-#
+-# SCSI device support
+-#
+-CONFIG_RAID_ATTRS=m
+-CONFIG_SCSI=m
+-CONFIG_SCSI_NETLINK=y
+-CONFIG_SCSI_PROC_FS=y
+-
+-#
+-# SCSI support type (disk, tape, CD-ROM)
+-#
+-CONFIG_BLK_DEV_SD=m
+-CONFIG_SD_IOSTATS=y
+-CONFIG_CHR_DEV_ST=m
+-# CONFIG_CHR_DEV_OSST is not set
+-CONFIG_BLK_DEV_SR=m
+-CONFIG_BLK_DEV_SR_VENDOR=y
+-CONFIG_CHR_DEV_SG=m
+-CONFIG_CHR_DEV_SCH=m
+-
+-#
+-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+-#
+-CONFIG_SCSI_MULTI_LUN=y
+-CONFIG_SCSI_CONSTANTS=y
+-CONFIG_SCSI_LOGGING=y
+-
+-#
+-# SCSI Transport Attributes
+-#
+-CONFIG_SCSI_SPI_ATTRS=m
+-CONFIG_SCSI_FC_ATTRS=m
+-# CONFIG_SCSI_ISCSI_ATTRS is not set
+-CONFIG_SCSI_SAS_ATTRS=m
+-CONFIG_SCSI_SAS_LIBSAS=m
+-CONFIG_SCSI_SAS_ATA=y
+-# CONFIG_SCSI_SAS_LIBSAS_DEBUG is not set
+-CONFIG_ISCSI_TARGET=m
+-
+-#
+-# SCSI low-level drivers
+-#
+-# CONFIG_ISCSI_TCP is not set
+-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+-# CONFIG_SCSI_3W_9XXX is not set
+-# CONFIG_SCSI_ACARD is not set
+-# CONFIG_SCSI_AACRAID is not set
+-# CONFIG_SCSI_AIC7XXX is not set
+-# CONFIG_SCSI_AIC7XXX_OLD is not set
+-# CONFIG_SCSI_AIC79XX is not set
+-CONFIG_SCSI_AIC94XX=m
+-# CONFIG_AIC94XX_DEBUG is not set
+-# CONFIG_SCSI_ARCMSR is not set
+-# CONFIG_MEGARAID_NEWGEN is not set
+-# CONFIG_MEGARAID_LEGACY is not set
+-CONFIG_MEGARAID_SAS=m
+-# CONFIG_SCSI_HPTIOP is not set
+-# CONFIG_SCSI_BUSLOGIC is not set
+-# CONFIG_SCSI_DMX3191D is not set
+-# CONFIG_SCSI_EATA is not set
+-# CONFIG_SCSI_FUTURE_DOMAIN is not set
+-# CONFIG_SCSI_GDTH is not set
+-# CONFIG_SCSI_IPS is not set
+-CONFIG_SCSI_IBMVSCSI=m
+-CONFIG_SCSI_IBMVSCSIS=m
+-# CONFIG_SCSI_INITIO is not set
+-# CONFIG_SCSI_INIA100 is not set
+-# CONFIG_SCSI_PPA is not set
+-# CONFIG_SCSI_IMM is not set
+-CONFIG_SCSI_SYM53C8XX_2=m
+-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
+-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+-CONFIG_SCSI_SYM53C8XX_MMIO=y
+-CONFIG_SCSI_IPR=m
+-CONFIG_SCSI_IPR_TRACE=y
+-CONFIG_SCSI_IPR_DUMP=y
+-# CONFIG_SCSI_QLOGIC_FC is not set
+-# CONFIG_SCSI_QLOGIC_1280 is not set
+-CONFIG_SCSI_QLA_FC=m
+-# CONFIG_SCSI_QLA_ISCSI is not set
+-CONFIG_SCSI_LPFC=m
+-# CONFIG_SCSI_DC395x is not set
+-# CONFIG_SCSI_DC390T is not set
+-CONFIG_SCSI_DEBUG=m
+-
+-#
+-# Serial ATA (prod) and Parallel ATA (experimental) drivers
+-#
+-CONFIG_ATA=m
+-CONFIG_SATA_AHCI=m
+-CONFIG_SATA_SVW=m
+-# CONFIG_ATA_PIIX is not set
+-# CONFIG_SATA_MV is not set
+-# CONFIG_SATA_NV is not set
+-# CONFIG_PDC_ADMA is not set
+-# CONFIG_SATA_QSTOR is not set
+-# CONFIG_SATA_PROMISE is not set
+-# CONFIG_SATA_SX4 is not set
+-# CONFIG_SATA_SIL is not set
+-# CONFIG_SATA_SIL24 is not set
+-# CONFIG_SATA_SIS is not set
+-# CONFIG_SATA_ULI is not set
+-# CONFIG_SATA_VIA is not set
+-CONFIG_SATA_VITESSE=m
+-CONFIG_SATA_INTEL_COMBINED=y
+-# CONFIG_PATA_ALI is not set
+-# CONFIG_PATA_AMD is not set
+-# CONFIG_PATA_ARTOP is not set
+-# CONFIG_PATA_ATIIXP is not set
+-# CONFIG_PATA_CMD64X is not set
+-# CONFIG_PATA_CS5520 is not set
+-# CONFIG_PATA_CS5530 is not set
+-# CONFIG_PATA_CYPRESS is not set
+-# CONFIG_PATA_EFAR is not set
+-# CONFIG_ATA_GENERIC is not set
+-# CONFIG_PATA_HPT366 is not set
+-# CONFIG_PATA_HPT37X is not set
+-# CONFIG_PATA_HPT3X2N is not set
+-# CONFIG_PATA_HPT3X3 is not set
+-# CONFIG_PATA_IT821X is not set
+-# CONFIG_PATA_IT8213 is not set
+-# CONFIG_PATA_JMICRON is not set
+-# CONFIG_PATA_TRIFLEX is not set
+-# CONFIG_PATA_MARVELL is not set
+-# CONFIG_PATA_MPIIX is not set
+-# CONFIG_PATA_OLDPIIX is not set
+-# CONFIG_PATA_NETCELL is not set
+-# CONFIG_PATA_NS87410 is not set
+-# CONFIG_PATA_OPTI is not set
+-# CONFIG_PATA_OPTIDMA is not set
+-# CONFIG_PATA_PDC_OLD is not set
+-# CONFIG_PATA_RADISYS is not set
+-# CONFIG_PATA_RZ1000 is not set
+-# CONFIG_PATA_SC1200 is not set
+-# CONFIG_PATA_SERVERWORKS is not set
+-CONFIG_PATA_PDC2027X=m
+-# CONFIG_PATA_SIL680 is not set
+-# CONFIG_PATA_SIS is not set
+-# CONFIG_PATA_VIA is not set
+-CONFIG_PATA_WINBOND=m
+-
+-#
+-# Multi-device support (RAID and LVM)
+-#
+-CONFIG_MD=y
+-CONFIG_BLK_DEV_MD=y
+-CONFIG_MD_LINEAR=m
+-CONFIG_MD_RAID0=m
+-CONFIG_MD_RAID1=m
+-CONFIG_MD_RAID10=m
+-CONFIG_MD_RAID5=m
+-CONFIG_MD_RAID6=m
+-CONFIG_MD_MULTIPATH=m
+-CONFIG_MD_FAULTY=m
+-CONFIG_BLK_DEV_DM=m
+-CONFIG_DM_CRYPT=m
+-CONFIG_DM_SNAPSHOT=m
+-CONFIG_DM_MIRROR=m
+-CONFIG_DM_ZERO=m
+-CONFIG_DM_MULTIPATH=m
+-CONFIG_DM_MULTIPATH_EMC=m
+-CONFIG_DM_MULTIPATH_HP_SW=m
+-CONFIG_DM_MULTIPATH_RDAC=m
+-CONFIG_DM_MULTIPATH_ALUA=m
+-CONFIG_DM_NL_EVT=y
+-CONFIG_FUSION=y
+-CONFIG_FUSION_SPI=m
+-CONFIG_FUSION_FC=m
+-CONFIG_FUSION_SAS=m
+-CONFIG_FUSION_MAX_SGE=128
+-CONFIG_FUSION_MAX_FC_SGE=256
+-CONFIG_FUSION_CTL=m
+-CONFIG_FUSION_LAN=m
+-CONFIG_FUSION_LOGGING=y
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-CONFIG_IEEE1394=m
+-
+-#
+-# Subsystem Options
+-#
+-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+-# CONFIG_IEEE1394_OUI_DB is not set
+-CONFIG_IEEE1394_EXTRA_CONFIG_ROMS=y
+-CONFIG_IEEE1394_CONFIG_ROM_IP1394=y
+-CONFIG_IEEE1394_EXPORT_FULL_API=y
+-
+-#
+-# Device Drivers
+-#
+-# CONFIG_IEEE1394_PCILYNX is not set
+-CONFIG_IEEE1394_OHCI1394=m
+-
+-#
+-# Protocol Drivers
+-#
+-CONFIG_IEEE1394_VIDEO1394=m
+-CONFIG_IEEE1394_SBP2=m
+-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+-CONFIG_IEEE1394_ETH1394=m
+-CONFIG_IEEE1394_DV1394=m
+-CONFIG_IEEE1394_RAWIO=m
+-
+-#
+-# I2O device support
+-#
+-# CONFIG_I2O is not set
+-
+-#
+-# Macintosh device drivers
+-#
+-CONFIG_ADB=y
+-CONFIG_ADB_PMU=y
+-CONFIG_PMAC_SMU=y
+-CONFIG_INPUT_ADBHID=y
+-CONFIG_MAC_EMUMOUSEBTN=y
+-CONFIG_THERM_PM72=y
+-CONFIG_WINDFARM=y
+-CONFIG_WINDFARM_PM81=y
+-CONFIG_WINDFARM_PM91=y
+-CONFIG_WINDFARM_PM112=y
+-
+-#
+-# Network device support
+-#
+-CONFIG_NETDEVICES=y
+-CONFIG_IFB=m
+-CONFIG_DUMMY=m
+-CONFIG_BONDING=m
+-CONFIG_EQUALIZER=m
+-CONFIG_TUN=m
+-
+-#
+-# ARCnet devices
+-#
+-# CONFIG_ARCNET is not set
+-
+-#
+-# PHY device support
+-#
+-CONFIG_PHYLIB=m
+-
+-#
+-# MII PHY device drivers
+-#
+-CONFIG_MARVELL_PHY=m
+-CONFIG_DAVICOM_PHY=m
+-CONFIG_QSEMI_PHY=m
+-CONFIG_LXT_PHY=m
+-CONFIG_CICADA_PHY=m
+-
+-#
+-# Ethernet (10 or 100Mbit)
+-#
+-CONFIG_NET_ETHERNET=y
+-CONFIG_MII=m
+-# CONFIG_HAPPYMEAL is not set
+-CONFIG_SUNGEM=m
+-CONFIG_CASSINI=m
+-CONFIG_NET_VENDOR_3COM=y
+-CONFIG_VORTEX=m
+-CONFIG_TYPHOON=m
+-
+-#
+-# Tulip family network device support
+-#
+-CONFIG_NET_TULIP=y
+-# CONFIG_DE2104X is not set
+-CONFIG_TULIP=m
+-CONFIG_TULIP_MWI=y
+-CONFIG_TULIP_MMIO=y
+-CONFIG_TULIP_NAPI=y
+-CONFIG_TULIP_NAPI_HW_MITIGATION=y
+-CONFIG_DE4X5=m
+-CONFIG_WINBOND_840=m
+-CONFIG_DM9102=m
+-CONFIG_ULI526X=m
+-# CONFIG_HP100 is not set
+-CONFIG_IBMVETH=m
+-CONFIG_NET_PCI=y
+-CONFIG_PCNET32=m
+-CONFIG_AMD8111_ETH=m
+-CONFIG_AMD8111E_NAPI=y
+-# CONFIG_ADAPTEC_STARFIRE is not set
+-# CONFIG_B44 is not set
+-# CONFIG_FORCEDETH is not set
+-# CONFIG_DGRS is not set
+-# CONFIG_EEPRO100 is not set
+-CONFIG_E100=m
+-# CONFIG_FEALNX is not set
+-# CONFIG_NATSEMI is not set
+-# CONFIG_NE2K_PCI is not set
+-# CONFIG_8139CP is not set
+-# CONFIG_8139TOO is not set
+-# CONFIG_SIS900 is not set
+-# CONFIG_EPIC100 is not set
+-# CONFIG_SUNDANCE is not set
+-# CONFIG_VIA_RHINE is not set
+-# CONFIG_NET_POCKET is not set
+-
+-#
+-# Ethernet (1000 Mbit)
+-#
+-CONFIG_ACENIC=m
+-CONFIG_ACENIC_OMIT_TIGON_I=y
+-# CONFIG_DL2K is not set
+-CONFIG_E1000=m
+-CONFIG_E1000_NAPI=y
+-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+-CONFIG_IGB=m
+-# CONFIG_NS83820 is not set
+-# CONFIG_HAMACHI is not set
+-# CONFIG_YELLOWFIN is not set
+-CONFIG_R8169=m
+-CONFIG_R8169_NAPI=y
+-CONFIG_R8169_VLAN=y
+-CONFIG_SIS190=m
+-# CONFIG_SKGE is not set
+-CONFIG_SKY2=m
+-# CONFIG_SK98LIN is not set
+-# CONFIG_VIA_VELOCITY is not set
+-CONFIG_TIGON3=m
+-CONFIG_BNX2=m
+-CONFIG_BNX2X=m
+-CONFIG_SPIDER_NET=m
+-# CONFIG_MV643XX_ETH is not set
+-CONFIG_QLA3XXX=m
+-
+-#
+-# Ethernet (10000 Mbit)
+-#
+-CONFIG_CHELSIO_T1=m
+-CONFIG_EHEA=m
+-# CONFIG_CHELSIO_T3 is not set
+-CONFIG_IXGBE=m
+-CONFIG_IXGBE_NAPI=y
+-CONFIG_IXGB=m
+-CONFIG_IXGB_NAPI=y
+-CONFIG_S2IO=m
+-CONFIG_S2IO_NAPI=y
+-CONFIG_NETXEN_NIC=m
+-CONFIG_MYRI10GE=m
+-
+-#
+-# Token Ring devices
+-#
+-CONFIG_TR=y
+-CONFIG_IBMOL=m
+-# CONFIG_3C359 is not set
+-# CONFIG_TMS380TR is not set
+-
+-#
+-# Wireless LAN (non-hamradio)
+-#
+-# CONFIG_NET_RADIO is not set
+-
+-#
+-# Wan interfaces
+-#
+-# CONFIG_WAN is not set
+-# CONFIG_FDDI is not set
+-# CONFIG_HIPPI is not set
+-# CONFIG_PLIP is not set
+-CONFIG_PPP=m
+-CONFIG_PPP_MULTILINK=y
+-CONFIG_PPP_FILTER=y
+-CONFIG_PPP_ASYNC=m
+-CONFIG_PPP_SYNC_TTY=m
+-CONFIG_PPP_DEFLATE=m
+-CONFIG_PPP_BSDCOMP=m
+-CONFIG_PPP_MPPE=m
+-CONFIG_PPPOE=m
+-CONFIG_SLIP=m
+-CONFIG_SLIP_COMPRESSED=y
+-CONFIG_SLIP_SMART=y
+-# CONFIG_SLIP_MODE_SLIP6 is not set
+-CONFIG_NET_FC=y
+-CONFIG_SHAPER=m
+-CONFIG_NETCONSOLE=m
+-CONFIG_NETPOLL=y
+-CONFIG_NETPOLL_TRAP=y
+-CONFIG_NET_POLL_CONTROLLER=y
+-
+-#
+-# ISDN subsystem
+-#
+-# CONFIG_ISDN is not set
+-
+-#
+-# Telephony Support
+-#
+-# CONFIG_PHONE is not set
+-
+-#
+-# Input device support
+-#
+-CONFIG_INPUT=y
+-
+-#
+-# Userland interfaces
+-#
+-CONFIG_INPUT_MOUSEDEV=y
+-# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+-CONFIG_INPUT_JOYDEV=m
+-CONFIG_INPUT_TSDEV=m
+-CONFIG_INPUT_TSDEV_SCREEN_X=240
+-CONFIG_INPUT_TSDEV_SCREEN_Y=320
+-CONFIG_INPUT_EVDEV=y
+-CONFIG_INPUT_EVBUG=m
+-
+-#
+-# Input Device Drivers
+-#
+-CONFIG_INPUT_KEYBOARD=y
+-CONFIG_KEYBOARD_ATKBD=y
+-# CONFIG_KEYBOARD_SUNKBD is not set
+-# CONFIG_KEYBOARD_LKKBD is not set
+-# CONFIG_KEYBOARD_XTKBD is not set
+-# CONFIG_KEYBOARD_NEWTON is not set
+-CONFIG_INPUT_MOUSE=y
+-CONFIG_MOUSE_PS2=y
+-CONFIG_MOUSE_SERIAL=m
+-# CONFIG_MOUSE_VSXXXAA is not set
+-CONFIG_INPUT_JOYSTICK=y
+-# CONFIG_JOYSTICK_ANALOG is not set
+-# CONFIG_JOYSTICK_A3D is not set
+-# CONFIG_JOYSTICK_ADI is not set
+-# CONFIG_JOYSTICK_COBRA is not set
+-# CONFIG_JOYSTICK_GF2K is not set
+-# CONFIG_JOYSTICK_GRIP is not set
+-# CONFIG_JOYSTICK_GRIP_MP is not set
+-# CONFIG_JOYSTICK_GUILLEMOT is not set
+-# CONFIG_JOYSTICK_INTERACT is not set
+-# CONFIG_JOYSTICK_SIDEWINDER is not set
+-# CONFIG_JOYSTICK_TMDC is not set
+-CONFIG_JOYSTICK_IFORCE=m
+-CONFIG_JOYSTICK_IFORCE_USB=y
+-CONFIG_JOYSTICK_IFORCE_232=y
+-CONFIG_JOYSTICK_WARRIOR=m
+-CONFIG_JOYSTICK_MAGELLAN=m
+-CONFIG_JOYSTICK_SPACEORB=m
+-CONFIG_JOYSTICK_SPACEBALL=m
+-CONFIG_JOYSTICK_STINGER=m
+-CONFIG_JOYSTICK_TWIDJOY=m
+-# CONFIG_JOYSTICK_DB9 is not set
+-# CONFIG_JOYSTICK_GAMECON is not set
+-# CONFIG_JOYSTICK_TURBOGRAFX is not set
+-CONFIG_JOYSTICK_JOYDUMP=m
+-CONFIG_INPUT_TOUCHSCREEN=y
+-CONFIG_TOUCHSCREEN_ADS7846=m
+-# CONFIG_TOUCHSCREEN_GUNZE is not set
+-# CONFIG_TOUCHSCREEN_ELO is not set
+-# CONFIG_TOUCHSCREEN_MTOUCH is not set
+-# CONFIG_TOUCHSCREEN_MK712 is not set
+-CONFIG_INPUT_MISC=y
+-CONFIG_INPUT_PCSPKR=m
+-CONFIG_INPUT_UINPUT=m
+-
+-#
+-# Hardware I/O ports
+-#
+-CONFIG_SERIO=y
+-CONFIG_SERIO_I8042=y
+-CONFIG_SERIO_SERPORT=m
+-# CONFIG_SERIO_PARKBD is not set
+-# CONFIG_SERIO_PCIPS2 is not set
+-CONFIG_SERIO_LIBPS2=y
+-CONFIG_SERIO_RAW=m
+-CONFIG_GAMEPORT=m
+-# CONFIG_GAMEPORT_NS558 is not set
+-# CONFIG_GAMEPORT_L4 is not set
+-# CONFIG_GAMEPORT_EMU10K1 is not set
+-# CONFIG_GAMEPORT_FM801 is not set
+-
+-#
+-# Character devices
+-#
+-CONFIG_VT=y
+-CONFIG_VT_CONSOLE=y
+-CONFIG_HW_CONSOLE=y
+-# CONFIG_SERIAL_NONSTANDARD is not set
+-# CONFIG_NOZOMI is not set
+-
+-#
+-# Serial drivers
+-#
+-CONFIG_SERIAL_8250=y
+-CONFIG_SERIAL_8250_CONSOLE=y
+-CONFIG_SERIAL_8250_NR_UARTS=4
+-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+-# CONFIG_SERIAL_8250_EXTENDED is not set
+-
+-#
+-# Non-8250 serial port support
+-#
+-CONFIG_SERIAL_CORE=y
+-CONFIG_SERIAL_CORE_CONSOLE=y
+-CONFIG_SERIAL_PMACZILOG=y
+-CONFIG_SERIAL_PMACZILOG_CONSOLE=y
+-CONFIG_SERIAL_ICOM=m
+-CONFIG_SERIAL_JSM=m
+-CONFIG_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=64
+-CONFIG_PRINTER=m
+-# CONFIG_LP_CONSOLE is not set
+-# CONFIG_PPDEV is not set
+-# CONFIG_TIPAR is not set
+-CONFIG_HVC_CONSOLE=y
+-CONFIG_HVC_RTAS=y
+-CONFIG_HVCS=m
+-
+-#
+-# IPMI
+-#
+-# CONFIG_IPMI_HANDLER is not set
+-
+-#
+-# Watchdog Cards
+-#
+-CONFIG_WATCHDOG=y
+-# CONFIG_WATCHDOG_NOWAYOUT is not set
+-
+-#
+-# Watchdog Device Drivers
+-#
+-CONFIG_SOFT_WATCHDOG=m
+-CONFIG_WATCHDOG_RTAS=m
+-
+-#
+-# PCI-based Watchdog Cards
+-#
+-# CONFIG_PCIPCWATCHDOG is not set
+-# CONFIG_WDTPCI is not set
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-# CONFIG_USBPCWATCHDOG is not set
+-# CONFIG_RTC is not set
+-CONFIG_GEN_RTC=y
+-# CONFIG_GEN_RTC_X is not set
+-# CONFIG_DTLK is not set
+-# CONFIG_R3964 is not set
+-# CONFIG_APPLICOM is not set
+-
+-#
+-# Ftape, the floppy tape device driver
+-#
+-CONFIG_AGP=m
+-CONFIG_AGP_UNINORTH=m
+-CONFIG_DRM=m
+-# CONFIG_DRM_TDFX is not set
+-CONFIG_DRM_R128=m
+-CONFIG_DRM_RADEON=m
+-# CONFIG_DRM_MGA is not set
+-# CONFIG_DRM_SIS is not set
+-# CONFIG_DRM_VIA is not set
+-# CONFIG_DRM_SAVAGE is not set
+-CONFIG_RAW_DRIVER=m
+-CONFIG_MAX_RAW_DEVS=4096
+-CONFIG_HANGCHECK_TIMER=m
+-
+-#
+-# TPM devices
+-#
+-CONFIG_TCG_TPM=m
+-CONFIG_TCG_TIS=m
+-CONFIG_TCG_ATMEL=m
+-# CONFIG_TELCLOCK is not set
+-CONFIG_CRASHER=m
+-
+-#
+-# I2C support
+-#
+-CONFIG_I2C=y
+-CONFIG_I2C_CHARDEV=m
+-
+-#
+-# I2C Algorithms
+-#
+-CONFIG_I2C_ALGOBIT=y
+-# CONFIG_I2C_ALGOPCF is not set
+-# CONFIG_I2C_ALGOPCA is not set
+-
+-#
+-# I2C Hardware Bus support
+-#
+-# CONFIG_I2C_ALI1535 is not set
+-# CONFIG_I2C_ALI1563 is not set
+-# CONFIG_I2C_ALI15X3 is not set
+-# CONFIG_I2C_AMD756 is not set
+-CONFIG_I2C_AMD8111=m
+-# CONFIG_I2C_I801 is not set
+-# CONFIG_I2C_I810 is not set
+-# CONFIG_I2C_PIIX4 is not set
+-CONFIG_I2C_POWERMAC=y
+-# CONFIG_I2C_NFORCE2 is not set
+-# CONFIG_I2C_PARPORT is not set
+-# CONFIG_I2C_PARPORT_LIGHT is not set
+-# CONFIG_I2C_PROSAVAGE is not set
+-# CONFIG_I2C_SAVAGE4 is not set
+-# CONFIG_SCx200_ACB is not set
+-# CONFIG_I2C_SIS5595 is not set
+-# CONFIG_I2C_SIS630 is not set
+-# CONFIG_I2C_SIS96X is not set
+-# CONFIG_I2C_STUB is not set
+-# CONFIG_I2C_VIA is not set
+-# CONFIG_I2C_VIAPRO is not set
+-# CONFIG_I2C_VOODOO3 is not set
+-# CONFIG_I2C_PCA_ISA is not set
+-
+-#
+-# Miscellaneous I2C Chip support
+-#
+-# CONFIG_SENSORS_DS1337 is not set
+-# CONFIG_SENSORS_DS1374 is not set
+-# CONFIG_SENSORS_EEPROM is not set
+-# CONFIG_SENSORS_PCF8574 is not set
+-# CONFIG_SENSORS_PCA9539 is not set
+-# CONFIG_SENSORS_PCF8591 is not set
+-# CONFIG_SENSORS_RTC8564 is not set
+-# CONFIG_SENSORS_MAX6875 is not set
+-# CONFIG_RTC_X1205_I2C is not set
+-# CONFIG_I2C_DEBUG_CORE is not set
+-# CONFIG_I2C_DEBUG_ALGO is not set
+-# CONFIG_I2C_DEBUG_BUS is not set
+-# CONFIG_I2C_DEBUG_CHIP is not set
+-
+-#
+-# SPI support
+-#
+-CONFIG_SPI=y
+-CONFIG_SPI_DEBUG=y
+-CONFIG_SPI_MASTER=y
+-
+-#
+-# SPI Master Controller Drivers
+-#
+-CONFIG_SPI_BITBANG=m
+-CONFIG_SPI_BUTTERFLY=m
+-
+-#
+-# SPI Protocol Masters
+-#
+-
+-#
+-# Dallas's 1-wire bus
+-#
+-# CONFIG_W1 is not set
+-
+-#
+-# Hardware Monitoring support
+-#
+-# CONFIG_HWMON is not set
+-# CONFIG_HWMON_VID is not set
+-
+-#
+-# Misc devices
+-#
+-# CONFIG_TIFM_CORE is not set
+-
+-#
+-# Multimedia Capabilities Port drivers
+-#
+-
+-#
+-# Multimedia devices
+-#
+-CONFIG_VIDEO_DEV=m
+-
+-#
+-# Video For Linux
+-#
+-
+-#
+-# Video Adapters
+-#
+-# CONFIG_VIDEO_ADV_DEBUG is not set
+-CONFIG_VIDEO_BT848=m
+-CONFIG_VIDEO_SAA6588=m
+-# CONFIG_VIDEO_BWQCAM is not set
+-# CONFIG_VIDEO_CQCAM is not set
+-# CONFIG_VIDEO_W9966 is not set
+-# CONFIG_VIDEO_CPIA is not set
+-# CONFIG_VIDEO_SAA5246A is not set
+-# CONFIG_VIDEO_SAA5249 is not set
+-# CONFIG_TUNER_3036 is not set
+-# CONFIG_VIDEO_STRADIS is not set
+-# CONFIG_VIDEO_ZORAN is not set
+-# CONFIG_VIDEO_SAA7134 is not set
+-# CONFIG_VIDEO_MXB is not set
+-# CONFIG_VIDEO_DPC is not set
+-# CONFIG_VIDEO_HEXIUM_ORION is not set
+-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+-# CONFIG_VIDEO_CX88 is not set
+-# CONFIG_VIDEO_EM28XX is not set
+-# CONFIG_VIDEO_OVCAMCHIP is not set
+-# CONFIG_VIDEO_AUDIO_DECODER is not set
+-# CONFIG_VIDEO_DECODER is not set
+-
+-#
+-# Radio Adapters
+-#
+-# CONFIG_RADIO_GEMTEK_PCI is not set
+-# CONFIG_RADIO_MAXIRADIO is not set
+-# CONFIG_RADIO_MAESTRO is not set
+-
+-#
+-# Digital Video Broadcasting Devices
+-#
+-# CONFIG_DVB is not set
+-CONFIG_VIDEO_TUNER=m
+-CONFIG_VIDEO_BUF=m
+-CONFIG_VIDEO_BTCX=m
+-CONFIG_VIDEO_IR=m
+-CONFIG_VIDEO_TVEEPROM=m
+-
+-#
+-# Graphics support
+-#
+-CONFIG_FB=y
+-CONFIG_FB_CFB_FILLRECT=y
+-CONFIG_FB_CFB_COPYAREA=y
+-CONFIG_FB_CFB_IMAGEBLIT=y
+-CONFIG_FB_MACMODES=y
+-CONFIG_FB_MODE_HELPERS=y
+-CONFIG_FB_TILEBLITTING=y
+-# CONFIG_FB_CIRRUS is not set
+-# CONFIG_FB_PM2 is not set
+-# CONFIG_FB_CYBER2000 is not set
+-CONFIG_FB_OF=y
+-# CONFIG_FB_CONTROL is not set
+-# CONFIG_FB_PLATINUM is not set
+-# CONFIG_FB_VALKYRIE is not set
+-# CONFIG_FB_CT65550 is not set
+-# CONFIG_FB_ASILIANT is not set
+-# CONFIG_FB_IMSTT is not set
+-# CONFIG_FB_VGA16 is not set
+-# CONFIG_FB_S1D13XXX is not set
+-CONFIG_FB_NVIDIA=y
+-CONFIG_FB_NVIDIA_I2C=y
+-# CONFIG_FB_RIVA is not set
+-CONFIG_FB_MATROX=y
+-CONFIG_FB_MATROX_MILLENIUM=y
+-CONFIG_FB_MATROX_MYSTIQUE=y
+-CONFIG_FB_MATROX_G=y
+-CONFIG_FB_MATROX_I2C=m
+-CONFIG_FB_MATROX_MAVEN=m
+-CONFIG_FB_MATROX_MULTIHEAD=y
+-# CONFIG_FB_RADEON_OLD is not set
+-CONFIG_FB_RADEON=y
+-CONFIG_FB_RADEON_I2C=y
+-# CONFIG_FB_RADEON_DEBUG is not set
+-# CONFIG_FB_ATY128 is not set
+-# CONFIG_FB_ATY is not set
+-# CONFIG_FB_SAVAGE is not set
+-# CONFIG_FB_SIS is not set
+-# CONFIG_FB_NEOMAGIC is not set
+-# CONFIG_FB_KYRO is not set
+-# CONFIG_FB_3DFX is not set
+-# CONFIG_FB_VOODOO1 is not set
+-# CONFIG_FB_TRIDENT is not set
+-# CONFIG_FB_VIRTUAL is not set
+-
+-#
+-# Console display driver support
+-#
+-# CONFIG_VGA_CONSOLE is not set
+-CONFIG_DUMMY_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+-# CONFIG_FONTS is not set
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+-
+-#
+-# Logo configuration
+-#
+-CONFIG_LOGO=y
+-# CONFIG_LOGO_LINUX_MONO is not set
+-CONFIG_LOGO_LINUX_VGA16=y
+-# CONFIG_LOGO_LINUX_CLUT224 is not set
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_BACKLIGHT_CLASS_DEVICE=m
+-CONFIG_BACKLIGHT_DEVICE=y
+-CONFIG_LCD_CLASS_DEVICE=m
+-CONFIG_LCD_DEVICE=y
+-
+-#
+-# Bootsplash configuration
+-#
+-
+-#
+-# Sound
+-#
+-CONFIG_SOUND=m
+-
+-#
+-# Advanced Linux Sound Architecture
+-#
+-CONFIG_SND=m
+-CONFIG_SND_TIMER=m
+-CONFIG_SND_PCM=m
+-CONFIG_SND_HWDEP=m
+-CONFIG_SND_RAWMIDI=m
+-CONFIG_SND_SEQUENCER=m
+-CONFIG_SND_SEQ_DUMMY=m
+-CONFIG_SND_OSSEMUL=y
+-CONFIG_SND_MIXER_OSS=m
+-CONFIG_SND_PCM_OSS=m
+-CONFIG_SND_PCM_OSS_PLUGINS=y
+-CONFIG_SND_SEQUENCER_OSS=y
+-CONFIG_SND_DYNAMIC_MINORS=y
+-CONFIG_SND_SUPPORT_OLD_API=y
+-CONFIG_SND_VERBOSE_PROCFS=y
+-CONFIG_SND_VERBOSE_PRINTK=y
+-CONFIG_SND_DEBUG=y
+-# CONFIG_SND_DEBUG_DETECT is not set
+-
+-#
+-# Generic devices
+-#
+-CONFIG_SND_MPU401_UART=m
+-CONFIG_SND_DUMMY=m
+-CONFIG_SND_VIRMIDI=m
+-CONFIG_SND_MTPAV=m
+-CONFIG_SND_SERIAL_U16550=m
+-CONFIG_SND_MPU401=m
+-
+-#
+-# PCI devices
+-#
+-# CONFIG_SND_AD1889 is not set
+-# CONFIG_SND_ALS4000 is not set
+-# CONFIG_SND_ALI5451 is not set
+-# CONFIG_SND_ATIIXP is not set
+-# CONFIG_SND_ATIIXP_MODEM is not set
+-# CONFIG_SND_AU8810 is not set
+-# CONFIG_SND_AU8820 is not set
+-# CONFIG_SND_AU8830 is not set
+-# CONFIG_SND_AZT3328 is not set
+-# CONFIG_SND_BT87X is not set
+-# CONFIG_SND_CA0106 is not set
+-# CONFIG_SND_CMIPCI is not set
+-# CONFIG_SND_CS4281 is not set
+-# CONFIG_SND_CS46XX is not set
+-CONFIG_SND_DARLA20=m
+-CONFIG_SND_GINA20=m
+-CONFIG_SND_LAYLA20=m
+-CONFIG_SND_DARLA24=m
+-CONFIG_SND_GINA24=m
+-CONFIG_SND_LAYLA24=m
+-CONFIG_SND_MONA=m
+-CONFIG_SND_MIA=m
+-CONFIG_SND_ECHO3G=m
+-CONFIG_SND_INDIGO=m
+-CONFIG_SND_INDIGOIO=m
+-CONFIG_SND_INDIGODJ=m
+-# CONFIG_SND_EMU10K1 is not set
+-# CONFIG_SND_EMU10K1X is not set
+-# CONFIG_SND_ENS1370 is not set
+-# CONFIG_SND_ENS1371 is not set
+-# CONFIG_SND_ES1938 is not set
+-# CONFIG_SND_ES1968 is not set
+-# CONFIG_SND_FM801 is not set
+-# CONFIG_SND_HDA_INTEL is not set
+-# CONFIG_SND_HDSP is not set
+-# CONFIG_SND_HDSPM is not set
+-# CONFIG_SND_ICE1712 is not set
+-# CONFIG_SND_ICE1724 is not set
+-# CONFIG_SND_INTEL8X0 is not set
+-# CONFIG_SND_INTEL8X0M is not set
+-# CONFIG_SND_KORG1212 is not set
+-# CONFIG_SND_MAESTRO3 is not set
+-# CONFIG_SND_MIXART is not set
+-# CONFIG_SND_NM256 is not set
+-# CONFIG_SND_PCXHR is not set
+-# CONFIG_SND_RME32 is not set
+-# CONFIG_SND_RME96 is not set
+-# CONFIG_SND_RME9652 is not set
+-# CONFIG_SND_SONICVIBES is not set
+-# CONFIG_SND_TRIDENT is not set
+-# CONFIG_SND_VIA82XX is not set
+-# CONFIG_SND_VIA82XX_MODEM is not set
+-# CONFIG_SND_VX222 is not set
+-# CONFIG_SND_YMFPCI is not set
+-
+-#
+-# ALSA PowerMac devices
+-#
+-CONFIG_SND_POWERMAC=m
+-CONFIG_SND_POWERMAC_AUTO_DRC=y
+-
+-#
+-# USB devices
+-#
+-CONFIG_SND_USB_AUDIO=m
+-CONFIG_SND_USB_USX2Y=m
+-
+-#
+-# Open Sound System
+-#
+-# CONFIG_SOUND_PRIME is not set
+-
+-#
+-# USB support
+-#
+-CONFIG_USB_ARCH_HAS_HCD=y
+-CONFIG_USB_ARCH_HAS_OHCI=y
+-CONFIG_USB=y
+-# CONFIG_USB_DEBUG is not set
+-
+-#
+-# Miscellaneous USB options
+-#
+-CONFIG_USB_DEVICEFS=y
+-CONFIG_USB_BANDWIDTH=y
+-# CONFIG_USB_DYNAMIC_MINORS is not set
+-# CONFIG_USB_OTG is not set
+-
+-#
+-# USB Host Controller Drivers
+-#
+-CONFIG_USB_EHCI_HCD=y
+-CONFIG_USB_EHCI_SPLIT_ISO=y
+-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+-# CONFIG_USB_ISP116X_HCD is not set
+-CONFIG_USB_OHCI_HCD=y
+-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+-CONFIG_USB_UHCI_HCD=m
+-# CONFIG_USB_SL811_HCD is not set
+-
+-#
+-# USB Device Class drivers
+-#
+-# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
+-CONFIG_USB_ACM=m
+-CONFIG_USB_PRINTER=m
+-
+-#
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+-#
+-
+-#
+-# may also be needed; see USB_STORAGE Help for more information
+-#
+-CONFIG_USB_STORAGE=m
+-# CONFIG_USB_STORAGE_DEBUG is not set
+-CONFIG_USB_STORAGE_DATAFAB=y
+-CONFIG_USB_STORAGE_FREECOM=y
+-CONFIG_USB_STORAGE_ISD200=y
+-CONFIG_USB_STORAGE_DPCM=y
+-CONFIG_USB_STORAGE_USBAT=y
+-CONFIG_USB_STORAGE_SDDR09=y
+-CONFIG_USB_STORAGE_SDDR55=y
+-CONFIG_USB_STORAGE_JUMPSHOT=y
+-CONFIG_USB_STORAGE_ALAUDA=y
+-CONFIG_USB_STORAGE_ONETOUCH=y
+-# CONFIG_USB_LIBUSUAL is not set
+-
+-#
+-# USB Input Devices
+-#
+-CONFIG_USB_HID=y
+-CONFIG_USB_HIDINPUT=y
+-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+-CONFIG_HID_FF=y
+-CONFIG_HID_PID=y
+-CONFIG_LOGITECH_FF=y
+-CONFIG_THRUSTMASTER_FF=y
+-CONFIG_USB_HIDDEV=y
+-CONFIG_USB_AIPTEK=m
+-CONFIG_USB_WACOM=m
+-CONFIG_USB_ACECAD=m
+-CONFIG_USB_KBTAB=m
+-CONFIG_USB_POWERMATE=m
+-CONFIG_USB_MTOUCH=m
+-CONFIG_USB_ITMTOUCH=m
+-CONFIG_USB_EGALAX=m
+-CONFIG_USB_YEALINK=m
+-CONFIG_USB_XPAD=m
+-CONFIG_USB_ATI_REMOTE=m
+-CONFIG_USB_ATI_REMOTE2=m
+-CONFIG_USB_KEYSPAN_REMOTE=m
+-CONFIG_USB_APPLETOUCH=m
+-
+-#
+-# USB Imaging devices
+-#
+-CONFIG_USB_MDC800=m
+-CONFIG_USB_MICROTEK=m
+-
+-#
+-# USB Multimedia devices
+-#
+-CONFIG_USB_DABUSB=m
+-CONFIG_USB_VICAM=m
+-CONFIG_USB_DSBR=m
+-CONFIG_USB_ET61X251=m
+-CONFIG_USB_IBMCAM=m
+-CONFIG_USB_KONICAWC=m
+-CONFIG_USB_OV511=m
+-CONFIG_USB_SE401=m
+-CONFIG_USB_SN9C102=m
+-CONFIG_USB_STV680=m
+-CONFIG_USB_PWC=m
+-
+-#
+-# USB Network Adapters
+-#
+-CONFIG_USB_CATC=m
+-CONFIG_USB_KAWETH=m
+-CONFIG_USB_PEGASUS=m
+-CONFIG_USB_RTL8150=m
+-CONFIG_USB_USBNET=m
+-CONFIG_USB_NET_AX8817X=m
+-CONFIG_USB_NET_CDCETHER=m
+-CONFIG_USB_NET_GL620A=m
+-CONFIG_USB_NET_NET1080=m
+-CONFIG_USB_NET_PLUSB=m
+-CONFIG_USB_NET_RNDIS_HOST=m
+-CONFIG_USB_NET_CDC_SUBSET=m
+-CONFIG_USB_ALI_M5632=y
+-CONFIG_USB_AN2720=y
+-CONFIG_USB_BELKIN=y
+-CONFIG_USB_ARMLINUX=y
+-CONFIG_USB_EPSON2888=y
+-CONFIG_USB_NET_ZAURUS=m
+-# CONFIG_USB_MON is not set
+-
+-#
+-# USB port drivers
+-#
+-CONFIG_USB_USS720=m
+-
+-#
+-# USB Serial Converter support
+-#
+-CONFIG_USB_SERIAL=m
+-CONFIG_USB_SERIAL_GENERIC=y
+-CONFIG_USB_SERIAL_AIRPRIME=m
+-CONFIG_USB_SERIAL_ANYDATA=m
+-CONFIG_USB_SERIAL_BELKIN=m
+-CONFIG_USB_SERIAL_WHITEHEAT=m
+-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+-CONFIG_USB_SERIAL_CP2101=m
+-CONFIG_USB_SERIAL_CYPRESS_M8=m
+-CONFIG_USB_SERIAL_EMPEG=m
+-CONFIG_USB_SERIAL_FTDI_SIO=m
+-CONFIG_USB_SERIAL_FUNSOFT=m
+-CONFIG_USB_SERIAL_VISOR=m
+-CONFIG_USB_SERIAL_IPAQ=m
+-CONFIG_USB_SERIAL_IR=m
+-CONFIG_USB_SERIAL_EDGEPORT=m
+-CONFIG_USB_SERIAL_EDGEPORT_TI=m
+-CONFIG_USB_SERIAL_GARMIN=m
+-CONFIG_USB_SERIAL_IPW=m
+-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+-CONFIG_USB_SERIAL_KEYSPAN=m
+-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+-CONFIG_USB_SERIAL_KLSI=m
+-CONFIG_USB_SERIAL_KOBIL_SCT=m
+-CONFIG_USB_SERIAL_MCT_U232=m
+-CONFIG_USB_SERIAL_NAVMAN=m
+-CONFIG_USB_SERIAL_PL2303=m
+-CONFIG_USB_SERIAL_HP4X=m
+-CONFIG_USB_SERIAL_SAFE=m
+-CONFIG_USB_SERIAL_SAFE_PADDED=y
+-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+-CONFIG_USB_SERIAL_TI=m
+-CONFIG_USB_SERIAL_CYBERJACK=m
+-CONFIG_USB_SERIAL_XIRCOM=m
+-CONFIG_USB_SERIAL_OMNINET=m
+-CONFIG_USB_EZUSB=y
+-
+-#
+-# USB Miscellaneous drivers
+-#
+-CONFIG_USB_EMI62=m
+-CONFIG_USB_EMI26=m
+-CONFIG_USB_AUERSWALD=m
+-CONFIG_USB_RIO500=m
+-CONFIG_USB_LEGOTOWER=m
+-CONFIG_USB_LCD=m
+-CONFIG_USB_BERRY_CHARGE=m
+-CONFIG_USB_LED=m
+-CONFIG_USB_CYTHERM=m
+-CONFIG_USB_PHIDGETKIT=m
+-CONFIG_USB_PHIDGETSERVO=m
+-CONFIG_USB_IDMOUSE=m
+-CONFIG_USB_SISUSBVGA=m
+-CONFIG_USB_SISUSBVGA_CON=y
+-CONFIG_USB_LD=m
+-# CONFIG_USB_TEST is not set
+-
+-#
+-# USB DSL modem support
+-#
+-
+-#
+-# USB Gadget Support
+-#
+-# CONFIG_USB_GADGET is not set
+-
+-#
+-# MMC/SD Card support
+-#
+-# CONFIG_MMC is not set
+-
+-#
+-# InfiniBand support
+-#
+-# CONFIG_INFINIBAND is not set
+-
+-#
+-# DMA Engine support
+-#
+-# CONFIG_DMA_ENGINE is not set
+-
+-#
+-# DMA Clients
+-#
+-
+-#
+-# DMA Devices
+-#
+-
+-#
+-# File systems
+-#
+-CONFIG_EXT2_FS=y
+-CONFIG_EXT2_FS_XATTR=y
+-CONFIG_EXT2_FS_POSIX_ACL=y
+-CONFIG_EXT2_FS_SECURITY=y
+-# CONFIG_EXT2_FS_XIP is not set
+-CONFIG_EXT3_FS=y
+-CONFIG_EXT3_FS_XATTR=y
+-CONFIG_EXT3_FS_POSIX_ACL=y
+-CONFIG_EXT3_FS_SECURITY=y
+-CONFIG_JBD=y
+-# CONFIG_JBD_DEBUG is not set
+-CONFIG_FS_MBCACHE=y
+-CONFIG_REISERFS_FS=m
+-# CONFIG_REISERFS_CHECK is not set
+-CONFIG_REISERFS_PROC_INFO=y
+-CONFIG_REISERFS_FS_XATTR=y
+-CONFIG_REISERFS_FS_POSIX_ACL=y
+-CONFIG_REISERFS_FS_SECURITY=y
+-CONFIG_JFS_FS=m
+-CONFIG_JFS_POSIX_ACL=y
+-CONFIG_JFS_SECURITY=y
+-# CONFIG_JFS_DEBUG is not set
+-CONFIG_JFS_STATISTICS=y
+-CONFIG_FS_POSIX_ACL=y
+-CONFIG_XFS_FS=m
+-CONFIG_XFS_QUOTA=m
+-CONFIG_XFS_DMAPI=m
+-CONFIG_XFS_SECURITY=y
+-CONFIG_XFS_POSIX_ACL=y
+-CONFIG_XFS_RT=y
+-# CONFIG_XFS_DEBUG is not set
+-# CONFIG_XFS_TRACE is not set
+-CONFIG_OCFS2_FS=m
+-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+-CONFIG_MINIX_FS=m
+-CONFIG_ROMFS_FS=m
+-CONFIG_INOTIFY=y
+-CONFIG_INOTIFY_USER=y
+-CONFIG_DMAPI=m
+-# CONFIG_DMAPI_DEBUG is not set
+-CONFIG_QUOTA=y
+-CONFIG_QFMT_V1=m
+-CONFIG_QFMT_V2=m
+-CONFIG_QUOTACTL=y
+-CONFIG_DNOTIFY=y
+-CONFIG_AUTOFS_FS=m
+-CONFIG_AUTOFS4_FS=m
+-CONFIG_FUSE_FS=m
+-
+-#
+-# CD-ROM/DVD Filesystems
+-#
+-CONFIG_ISO9660_FS=m
+-CONFIG_JOLIET=y
+-CONFIG_ZISOFS=y
+-CONFIG_ZISOFS_FS=m
+-CONFIG_UDF_FS=m
+-CONFIG_UDF_NLS=y
+-
+-#
+-# DOS/FAT/NT Filesystems
+-#
+-CONFIG_FAT_FS=y
+-CONFIG_MSDOS_FS=m
+-CONFIG_VFAT_FS=y
+-CONFIG_FAT_DEFAULT_CODEPAGE=437
+-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+-CONFIG_NTFS_FS=m
+-# CONFIG_NTFS_DEBUG is not set
+-# CONFIG_NTFS_RW is not set
+-
+-#
+-# Pseudo filesystems
+-#
+-CONFIG_PROC_FS=y
+-CONFIG_PROC_KCORE=y
+-CONFIG_SYSFS=y
+-CONFIG_TMPFS=y
+-CONFIG_TMPFS_POSIX_ACL=y
+-CONFIG_HUGETLBFS=y
+-CONFIG_HUGETLB_PAGE=y
+-CONFIG_RAMFS=y
+-CONFIG_CONFIGFS_FS=m
+-
+-#
+-# Miscellaneous filesystems
+-#
+-# CONFIG_ADFS_FS is not set
+-# CONFIG_AFFS_FS is not set
+-CONFIG_HFS_FS=m
+-CONFIG_HFSPLUS_FS=m
+-# CONFIG_BEFS_FS is not set
+-# CONFIG_BFS_FS is not set
+-# CONFIG_EFS_FS is not set
+-CONFIG_CRAMFS=m
+-# CONFIG_VXFS_FS is not set
+-# CONFIG_HPFS_FS is not set
+-# CONFIG_QNX4FS_FS is not set
+-# CONFIG_SYSV_FS is not set
+-CONFIG_UFS_FS=m
+-
+-#
+-# Network File Systems
+-#
+-CONFIG_NFS_FS=m
+-CONFIG_NFS_V3=y
+-CONFIG_NFS_V3_ACL=y
+-CONFIG_NFS_V4=y
+-CONFIG_NFS_DIRECTIO=y
+-CONFIG_NFSD=m
+-CONFIG_NFSD_V2_ACL=y
+-CONFIG_NFSD_V3=y
+-CONFIG_NFSD_V3_ACL=y
+-CONFIG_NFSD_V4=y
+-CONFIG_NFSD_TCP=y
+-CONFIG_LOCKD=m
+-CONFIG_LOCKD_V4=y
+-CONFIG_EXPORTFS=m
+-CONFIG_NFS_ACL_SUPPORT=m
+-CONFIG_NFS_COMMON=y
+-CONFIG_SUNRPC=m
+-CONFIG_SUNRPC_GSS=m
+-CONFIG_RPCSEC_GSS_KRB5=m
+-CONFIG_RPCSEC_GSS_SPKM3=m
+-CONFIG_SMB_FS=m
+-# CONFIG_SMB_NLS_DEFAULT is not set
+-CONFIG_CIFS=m
+-CONFIG_CIFS_STATS=y
+-# CONFIG_CIFS_STATS2 is not set
+-CONFIG_CIFS_XATTR=y
+-CONFIG_CIFS_POSIX=y
+-# CONFIG_CIFS_EXPERIMENTAL is not set
+-CONFIG_NCP_FS=m
+-CONFIG_NCPFS_PACKET_SIGNING=y
+-CONFIG_NCPFS_IOCTL_LOCKING=y
+-CONFIG_NCPFS_STRONG=y
+-CONFIG_NCPFS_NFS_NS=y
+-CONFIG_NCPFS_OS2_NS=y
+-CONFIG_NCPFS_SMALLDOS=y
+-CONFIG_NCPFS_NLS=y
+-CONFIG_NCPFS_EXTRAS=y
+-# CONFIG_CODA_FS is not set
+-# CONFIG_AFS_FS is not set
+-CONFIG_9P_FS=m
+-CONFIG_GENERIC_ACL=y
+-
+-#
+-# Partition Types
+-#
+-CONFIG_PARTITION_ADVANCED=y
+-# CONFIG_ACORN_PARTITION is not set
+-CONFIG_OSF_PARTITION=y
+-CONFIG_AMIGA_PARTITION=y
+-CONFIG_ATARI_PARTITION=y
+-CONFIG_MAC_PARTITION=y
+-CONFIG_MSDOS_PARTITION=y
+-CONFIG_BSD_DISKLABEL=y
+-CONFIG_MINIX_SUBPARTITION=y
+-CONFIG_SOLARIS_X86_PARTITION=y
+-CONFIG_UNIXWARE_DISKLABEL=y
+-CONFIG_LDM_PARTITION=y
+-# CONFIG_LDM_DEBUG is not set
+-CONFIG_SGI_PARTITION=y
+-CONFIG_ULTRIX_PARTITION=y
+-CONFIG_SUN_PARTITION=y
+-CONFIG_KARMA_PARTITION=y
+-CONFIG_EFI_PARTITION=y
+-
+-#
+-# Native Language Support
+-#
+-CONFIG_NLS=y
+-CONFIG_NLS_DEFAULT="utf8"
+-CONFIG_NLS_CODEPAGE_437=y
+-CONFIG_NLS_CODEPAGE_737=m
+-CONFIG_NLS_CODEPAGE_775=m
+-CONFIG_NLS_CODEPAGE_850=m
+-CONFIG_NLS_CODEPAGE_852=m
+-CONFIG_NLS_CODEPAGE_855=m
+-CONFIG_NLS_CODEPAGE_857=m
+-CONFIG_NLS_CODEPAGE_860=m
+-CONFIG_NLS_CODEPAGE_861=m
+-CONFIG_NLS_CODEPAGE_862=m
+-CONFIG_NLS_CODEPAGE_863=m
+-CONFIG_NLS_CODEPAGE_864=m
+-CONFIG_NLS_CODEPAGE_865=m
+-CONFIG_NLS_CODEPAGE_866=m
+-CONFIG_NLS_CODEPAGE_869=m
+-CONFIG_NLS_CODEPAGE_936=m
+-CONFIG_NLS_CODEPAGE_950=m
+-CONFIG_NLS_CODEPAGE_932=m
+-CONFIG_NLS_CODEPAGE_949=m
+-CONFIG_NLS_CODEPAGE_874=m
+-CONFIG_NLS_ISO8859_8=m
+-CONFIG_NLS_CODEPAGE_1250=m
+-CONFIG_NLS_CODEPAGE_1251=m
+-CONFIG_NLS_ASCII=m
+-CONFIG_NLS_ISO8859_1=y
+-CONFIG_NLS_ISO8859_2=m
+-CONFIG_NLS_ISO8859_3=m
+-CONFIG_NLS_ISO8859_4=m
+-CONFIG_NLS_ISO8859_5=m
+-CONFIG_NLS_ISO8859_6=m
+-CONFIG_NLS_ISO8859_7=m
+-CONFIG_NLS_ISO8859_9=m
+-CONFIG_NLS_ISO8859_13=m
+-CONFIG_NLS_ISO8859_14=m
+-CONFIG_NLS_ISO8859_15=m
+-CONFIG_NLS_KOI8_R=m
+-CONFIG_NLS_KOI8_U=m
+-CONFIG_NLS_UTF8=m
+-
+-#
+-# Library routines
+-#
+-CONFIG_CRC_CCITT=m
+-CONFIG_CRC16=m
+-CONFIG_CRC32=y
+-CONFIG_LIBCRC32C=m
+-CONFIG_ZLIB_INFLATE=m
+-CONFIG_ZLIB_DEFLATE=m
+-CONFIG_TEXTSEARCH=y
+-CONFIG_TEXTSEARCH_KMP=m
+-CONFIG_TEXTSEARCH_BM=m
+-CONFIG_TEXTSEARCH_FSM=m
+-
+-#
+-# Instrumentation Support
+-#
+-CONFIG_PROFILING=y
+-CONFIG_OPROFILE=y
+-CONFIG_KPROBES=y
+-
+-#
+-# Kernel hacking
+-#
+-# CONFIG_PRINTK_TIME is not set
+-CONFIG_MAGIC_SYSRQ=y
+-CONFIG_DEBUG_KERNEL=y
+-CONFIG_LOG_BUF_SHIFT=19
+-# CONFIG_DETECT_SOFTLOCKUP is not set
+-# CONFIG_SCHEDSTATS is not set
+-# CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+-# CONFIG_DEBUG_KOBJECT is not set
+-CONFIG_DEBUG_INFO=y
+-CONFIG_DEBUG_FS=y
+-# CONFIG_DEBUG_VM is not set
+-CONFIG_FORCED_INLINING=y
+-# CONFIG_RCU_TORTURE_TEST is not set
+-# CONFIG_LKCD_DUMP is not set
+-CONFIG_DEBUG_STACKOVERFLOW=y
+-CONFIG_DEBUG_STACK_USAGE=y
+-CONFIG_HCALL_STATS=y
+-CONFIG_DEBUGGER=y
+-CONFIG_XMON=y
+-# CONFIG_XMON_DEFAULT is not set
+-CONFIG_IRQSTACKS=y
+-CONFIG_BOOTX_TEXT=y
+-# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
+-# CONFIG_PPC_EARLY_DEBUG_G5 is not set
+-# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
+-# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
+-# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
+-
+-#
+-# Security options
+-#
+-CONFIG_KEYS=y
+-CONFIG_KEYS_DEBUG_PROC_KEYS=y
+-CONFIG_SECURITY=y
+-CONFIG_SECURITY_NETWORK=y
+-# CONFIG_SECURITY_NETWORK_XFRM is not set
+-CONFIG_SECURITY_CAPABILITIES=m
+-CONFIG_SECURITY_ROOTPLUG=m
+-CONFIG_SECURITY_SECLVL=m
+-# CONFIG_SECURITY_SELINUX is not set
+-CONFIG_SECURITY_APPARMOR=m
+-CONFIG_KEYS_COMPAT=y
+-
+-#
+-# Cryptographic options
+-#
+-CONFIG_CRYPTO=y
+-CONFIG_CRYPTO_ALGAPI=y
+-CONFIG_CRYPTO_ABLKCIPHER=m
+-CONFIG_CRYPTO_BLKCIPHER=m
+-CONFIG_CRYPTO_HASH=y
+-CONFIG_CRYPTO_MANAGER=y
+-CONFIG_CRYPTO_HMAC=y
+-CONFIG_CRYPTO_XCBC=m
+-CONFIG_CRYPTO_NULL=m
+-CONFIG_CRYPTO_MD4=m
+-CONFIG_CRYPTO_MD5=y
+-CONFIG_CRYPTO_SHA1=m
+-CONFIG_CRYPTO_SHA256=m
+-CONFIG_CRYPTO_SHA512=m
+-CONFIG_CRYPTO_WP512=m
+-CONFIG_CRYPTO_TGR192=m
+-CONFIG_CRYPTO_GF128MUL=m
+-CONFIG_CRYPTO_ECB=m
+-CONFIG_CRYPTO_CBC=m
+-CONFIG_CRYPTO_PCBC=m
+-CONFIG_CRYPTO_LRW=m
+-CONFIG_CRYPTO_CRYPTD=m
+-CONFIG_CRYPTO_DES=y
+-CONFIG_CRYPTO_FCRYPT=m
+-CONFIG_CRYPTO_BLOWFISH=m
+-CONFIG_CRYPTO_TWOFISH=m
+-CONFIG_CRYPTO_TWOFISH_COMMON=m
+-CONFIG_CRYPTO_SERPENT=m
+-CONFIG_CRYPTO_AES=m
+-CONFIG_CRYPTO_CAST5=m
+-CONFIG_CRYPTO_CAST6=m
+-CONFIG_CRYPTO_TEA=m
+-CONFIG_CRYPTO_ARC4=m
+-CONFIG_CRYPTO_KHAZAD=m
+-CONFIG_CRYPTO_ANUBIS=m
+-CONFIG_CRYPTO_DEFLATE=m
+-CONFIG_CRYPTO_MICHAEL_MIC=m
+-CONFIG_CRYPTO_CRC32C=m
+-CONFIG_CRYPTO_CAMELLIA=m
+-CONFIG_CRYPTO_TEST=m
+-
+-#
+-# Hardware crypto devices
+-#
+diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config
+deleted file mode 100644
+index 81bc07f..0000000
+--- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686-default.config
++++ /dev/null
+@@ -1,4409 +0,0 @@
+-#
+-# Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.27.21
+-# Wed May 13 22:15:21 2009
+-#
+-# CONFIG_64BIT is not set
+-CONFIG_X86_32=y
+-# CONFIG_X86_64 is not set
+-CONFIG_X86=y
+-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
+-# CONFIG_GENERIC_LOCKBREAK is not set
+-CONFIG_GENERIC_TIME=y
+-CONFIG_GENERIC_CMOS_UPDATE=y
+-CONFIG_CLOCKSOURCE_WATCHDOG=y
+-CONFIG_GENERIC_CLOCKEVENTS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+-CONFIG_LOCKDEP_SUPPORT=y
+-CONFIG_STACKTRACE_SUPPORT=y
+-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+-CONFIG_FAST_CMPXCHG_LOCAL=y
+-CONFIG_MMU=y
+-CONFIG_ZONE_DMA=y
+-CONFIG_GENERIC_ISA_DMA=y
+-CONFIG_GENERIC_IOMAP=y
+-CONFIG_GENERIC_BUG=y
+-CONFIG_GENERIC_HWEIGHT=y
+-CONFIG_GENERIC_GPIO=y
+-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+-CONFIG_GENERIC_CALIBRATE_DELAY=y
+-# CONFIG_GENERIC_TIME_VSYSCALL is not set
+-CONFIG_ARCH_HAS_CPU_RELAX=y
+-CONFIG_ARCH_HAS_DEFAULT_IDLE=y
+-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+-# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
+-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+-CONFIG_ARCH_SUSPEND_POSSIBLE=y
+-# CONFIG_ZONE_DMA32 is not set
+-CONFIG_ARCH_POPULATES_NODE_MAP=y
+-# CONFIG_AUDIT_ARCH is not set
+-CONFIG_ARCH_SUPPORTS_AOUT=y
+-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+-CONFIG_GENERIC_HARDIRQS=y
+-CONFIG_GENERIC_IRQ_PROBE=y
+-CONFIG_GENERIC_PENDING_IRQ=y
+-CONFIG_X86_SMP=y
+-CONFIG_X86_32_SMP=y
+-CONFIG_X86_HT=y
+-CONFIG_X86_BIOS_REBOOT=y
+-CONFIG_X86_TRAMPOLINE=y
+-CONFIG_KTIME_SCALAR=y
+-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+-
+-#
+-# General setup
+-#
+-CONFIG_EXPERIMENTAL=y
+-CONFIG_LOCK_KERNEL=y
+-CONFIG_INIT_ENV_ARG_LIMIT=32
+-CONFIG_LOCALVERSION="-0.1-default"
+-# CONFIG_LOCALVERSION_AUTO is not set
+-CONFIG_SUSE_KERNEL=y
+-CONFIG_SWAP=y
+-CONFIG_SYSVIPC=y
+-CONFIG_SYSVIPC_SYSCTL=y
+-CONFIG_POSIX_MQUEUE=y
+-CONFIG_BSD_PROCESS_ACCT=y
+-CONFIG_BSD_PROCESS_ACCT_V3=y
+-CONFIG_TASKSTATS=y
+-CONFIG_TASK_DELAY_ACCT=y
+-CONFIG_TASK_XACCT=y
+-CONFIG_TASK_IO_ACCOUNTING=y
+-CONFIG_AUDIT=y
+-CONFIG_AUDITSYSCALL=y
+-CONFIG_AUDIT_TREE=y
+-CONFIG_IKCONFIG=y
+-CONFIG_IKCONFIG_PROC=y
+-CONFIG_LOG_BUF_SHIFT=17
+-CONFIG_CGROUPS=y
+-# CONFIG_CGROUP_DEBUG is not set
+-CONFIG_CGROUP_NS=y
+-CONFIG_CGROUP_FREEZER=y
+-CONFIG_CGROUP_DEVICE=y
+-CONFIG_CPUSETS=y
+-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+-CONFIG_GROUP_SCHED=y
+-CONFIG_FAIR_GROUP_SCHED=y
+-# CONFIG_RT_GROUP_SCHED is not set
+-# CONFIG_USER_SCHED is not set
+-CONFIG_CGROUP_SCHED=y
+-CONFIG_CGROUP_CPUACCT=y
+-CONFIG_RESOURCE_COUNTERS=y
+-CONFIG_MM_OWNER=y
+-CONFIG_CGROUP_MEM_RES_CTLR=y
+-# CONFIG_SYSFS_DEPRECATED_V2 is not set
+-CONFIG_PROC_PID_CPUSET=y
+-CONFIG_RELAY=y
+-CONFIG_NAMESPACES=y
+-CONFIG_UTS_NS=y
+-CONFIG_IPC_NS=y
+-CONFIG_USER_NS=y
+-CONFIG_PID_NS=y
+-CONFIG_BLK_DEV_INITRD=y
+-CONFIG_INITRAMFS_SOURCE=""
+-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+-CONFIG_SYSCTL=y
+-# CONFIG_EMBEDDED is not set
+-CONFIG_UID16=y
+-CONFIG_SYSCTL_SYSCALL=y
+-CONFIG_KALLSYMS=y
+-CONFIG_KALLSYMS_ALL=y
+-# CONFIG_KALLSYMS_EXTRA_PASS is not set
+-CONFIG_HOTPLUG=y
+-CONFIG_PRINTK=y
+-CONFIG_BUG=y
+-CONFIG_ELF_CORE=y
+-CONFIG_PCSPKR_PLATFORM=y
+-CONFIG_COMPAT_BRK=y
+-CONFIG_BASE_FULL=y
+-CONFIG_FUTEX=y
+-CONFIG_ANON_INODES=y
+-CONFIG_EPOLL=y
+-CONFIG_SIGNALFD=y
+-CONFIG_TIMERFD=y
+-CONFIG_EVENTFD=y
+-CONFIG_SHMEM=y
+-CONFIG_VM_EVENT_COUNTERS=y
+-CONFIG_SLAB=y
+-# CONFIG_SLUB is not set
+-# CONFIG_SLOB is not set
+-CONFIG_PROFILING=y
+-# CONFIG_TRACEPOINTS is not set
+-CONFIG_MARKERS=y
+-CONFIG_OPROFILE=m
+-CONFIG_HAVE_OPROFILE=y
+-CONFIG_KPROBES=y
+-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+-CONFIG_KRETPROBES=y
+-CONFIG_HAVE_IOREMAP_PROT=y
+-CONFIG_HAVE_KPROBES=y
+-CONFIG_HAVE_KRETPROBES=y
+-CONFIG_HAVE_ARCH_TRACEHOOK=y
+-# CONFIG_HAVE_DMA_ATTRS is not set
+-CONFIG_USE_GENERIC_SMP_HELPERS=y
+-# CONFIG_HAVE_CLK is not set
+-CONFIG_PROC_PAGE_MONITOR=y
+-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+-CONFIG_SLABINFO=y
+-CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+-CONFIG_BASE_SMALL=0
+-CONFIG_MODULES=y
+-CONFIG_MODULE_FORCE_LOAD=y
+-CONFIG_MODULE_UNLOAD=y
+-CONFIG_MODULE_FORCE_UNLOAD=y
+-CONFIG_MODVERSIONS=y
+-CONFIG_MODULE_SRCVERSION_ALL=y
+-CONFIG_KMOD=y
+-CONFIG_STOP_MACHINE=y
+-# CONFIG_UTRACE is not set
+-CONFIG_BLOCK=y
+-CONFIG_LBD=y
+-CONFIG_BLK_DEV_IO_TRACE=y
+-CONFIG_LSF=y
+-CONFIG_BLK_DEV_BSG=y
+-CONFIG_BLK_DEV_INTEGRITY=y
+-
+-#
+-# IO Schedulers
+-#
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_DEFAULT_AS is not set
+-CONFIG_DEFAULT_DEADLINE=y
+-# CONFIG_DEFAULT_CFQ is not set
+-# CONFIG_DEFAULT_NOOP is not set
+-CONFIG_DEFAULT_IOSCHED="deadline"
+-CONFIG_PREEMPT_NOTIFIERS=y
+-CONFIG_CLASSIC_RCU=y
+-CONFIG_FREEZER=y
+-
+-#
+-# Processor type and features
+-#
+-CONFIG_TICK_ONESHOT=y
+-CONFIG_NO_HZ=y
+-CONFIG_HIGH_RES_TIMERS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+-CONFIG_SMP=y
+-CONFIG_X86_FIND_SMP_CONFIG=y
+-CONFIG_X86_MPPARSE=y
+-# CONFIG_X86_PC is not set
+-# CONFIG_X86_XEN is not set
+-# CONFIG_X86_ELAN is not set
+-# CONFIG_X86_VOYAGER is not set
+-CONFIG_X86_GENERICARCH=y
+-# CONFIG_X86_NUMAQ is not set
+-CONFIG_X86_SUMMIT=y
+-CONFIG_X86_ES7000=y
+-CONFIG_X86_BIGSMP=y
+-# CONFIG_X86_64_XEN is not set
+-# CONFIG_X86_VSMP is not set
+-# CONFIG_X86_RDC321X is not set
+-# CONFIG_PARAVIRT_GUEST is not set
+-CONFIG_MEMTEST=y
+-CONFIG_X86_CYCLONE_TIMER=y
+-# CONFIG_M386 is not set
+-# CONFIG_M486 is not set
+-CONFIG_M586=y
+-# CONFIG_M586TSC is not set
+-# CONFIG_M586MMX is not set
+-# CONFIG_M686 is not set
+-# CONFIG_MPENTIUMII is not set
+-# CONFIG_MPENTIUMIII is not set
+-# CONFIG_MPENTIUMM is not set
+-# CONFIG_MPENTIUM4 is not set
+-# CONFIG_MK6 is not set
+-# CONFIG_MK7 is not set
+-# CONFIG_MK8 is not set
+-# CONFIG_MCRUSOE is not set
+-# CONFIG_MEFFICEON is not set
+-# CONFIG_MWINCHIPC6 is not set
+-# CONFIG_MWINCHIP2 is not set
+-# CONFIG_MWINCHIP3D is not set
+-# CONFIG_MGEODEGX1 is not set
+-# CONFIG_MGEODE_LX is not set
+-# CONFIG_MCYRIXIII is not set
+-# CONFIG_MVIAC3_2 is not set
+-# CONFIG_MVIAC7 is not set
+-# CONFIG_MPSC is not set
+-# CONFIG_MCORE2 is not set
+-# CONFIG_GENERIC_CPU is not set
+-CONFIG_X86_GENERIC=y
+-CONFIG_X86_CPU=y
+-CONFIG_X86_CMPXCHG=y
+-CONFIG_X86_L1_CACHE_SHIFT=7
+-CONFIG_X86_XADD=y
+-CONFIG_X86_PPRO_FENCE=y
+-CONFIG_X86_F00F_BUG=y
+-CONFIG_X86_WP_WORKS_OK=y
+-CONFIG_X86_INVLPG=y
+-CONFIG_X86_BSWAP=y
+-CONFIG_X86_POPAD_OK=y
+-CONFIG_X86_ALIGNMENT_16=y
+-CONFIG_X86_INTEL_USERCOPY=y
+-CONFIG_X86_MINIMUM_CPU_FAMILY=4
+-CONFIG_HPET_TIMER=y
+-CONFIG_HPET_EMULATE_RTC=y
+-CONFIG_DMI=y
+-# CONFIG_IOMMU_HELPER is not set
+-CONFIG_NR_CPUS=32
+-CONFIG_SCHED_SMT=y
+-CONFIG_SCHED_MC=y
+-CONFIG_PREEMPT_NONE=y
+-# CONFIG_PREEMPT_VOLUNTARY is not set
+-# CONFIG_PREEMPT is not set
+-# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
+-CONFIG_X86_LOCAL_APIC=y
+-CONFIG_X86_IO_APIC=y
+-CONFIG_X86_MCE=y
+-CONFIG_X86_MCE_NONFATAL=y
+-CONFIG_X86_MCE_P4THERMAL=y
+-CONFIG_VM86=y
+-CONFIG_TOSHIBA=m
+-CONFIG_I8K=m
+-CONFIG_X86_REBOOTFIXUPS=y
+-CONFIG_MICROCODE=m
+-CONFIG_MICROCODE_OLD_INTERFACE=y
+-CONFIG_X86_MSR=m
+-CONFIG_X86_CPUID=m
+-# CONFIG_NOHIGHMEM is not set
+-CONFIG_HIGHMEM4G=y
+-# CONFIG_HIGHMEM64G is not set
+-CONFIG_PAGE_OFFSET=0xC0000000
+-CONFIG_HIGHMEM=y
+-
+-#
+-# NUMA (Summit) requires SMP, 64GB highmem support, ACPI
+-#
+-CONFIG_SELECT_MEMORY_MODEL=y
+-CONFIG_FLATMEM_MANUAL=y
+-# CONFIG_DISCONTIGMEM_MANUAL is not set
+-# CONFIG_SPARSEMEM_MANUAL is not set
+-CONFIG_FLATMEM=y
+-CONFIG_FLAT_NODE_MEM_MAP=y
+-# CONFIG_SPARSEMEM_STATIC is not set
+-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+-CONFIG_PAGEFLAGS_EXTENDED=y
+-CONFIG_SPLIT_PTLOCK_CPUS=4
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
+-CONFIG_VIRT_TO_BUS=y
+-CONFIG_MMU_NOTIFIER=y
+-CONFIG_HIGHPTE=y
+-CONFIG_X86_RESERVE_LOW_64K=y
+-# CONFIG_MATH_EMULATION is not set
+-CONFIG_MTRR=y
+-# CONFIG_MTRR_SANITIZER is not set
+-CONFIG_X86_PAT=y
+-# CONFIG_EFI is not set
+-# CONFIG_IRQBALANCE is not set
+-CONFIG_SECCOMP=y
+-# CONFIG_SECCOMP_DISABLE_TSC is not set
+-# CONFIG_HZ_100 is not set
+-CONFIG_HZ_250=y
+-# CONFIG_HZ_300 is not set
+-# CONFIG_HZ_1000 is not set
+-CONFIG_HZ=250
+-CONFIG_SCHED_HRTICK=y
+-CONFIG_KEXEC=y
+-CONFIG_CRASH_DUMP=y
+-# CONFIG_KEXEC_JUMP is not set
+-CONFIG_PHYSICAL_START=0x100000
+-CONFIG_RELOCATABLE=y
+-CONFIG_PHYSICAL_ALIGN=0x100000
+-CONFIG_HOTPLUG_CPU=y
+-CONFIG_COMPAT_VDSO=y
+-
+-#
+-# Hardware Performance Monitoring support
+-#
+-CONFIG_PERFMON=y
+-# CONFIG_PERFMON_DEBUG is not set
+-CONFIG_PERFMON_DEBUG_FS=y
+-CONFIG_X86_PERFMON_P6=m
+-CONFIG_X86_PERFMON_P4=m
+-CONFIG_X86_PERFMON_PEBS_P4=m
+-CONFIG_X86_PERFMON_CORE=m
+-CONFIG_X86_PERFMON_PEBS_CORE=m
+-CONFIG_X86_PERFMON_INTEL_ATOM=m
+-CONFIG_X86_PERFMON_INTEL_ARCH=m
+-CONFIG_X86_PERFMON_AMD64=m
+-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+-
+-#
+-# Power management options
+-#
+-CONFIG_PM=y
+-# CONFIG_PM_DEBUG is not set
+-CONFIG_PM_SLEEP_SMP=y
+-CONFIG_PM_SLEEP=y
+-CONFIG_SUSPEND=y
+-CONFIG_SUSPEND_FREEZER=y
+-CONFIG_HIBERNATION=y
+-CONFIG_PM_STD_PARTITION=""
+-CONFIG_ACPI=y
+-CONFIG_ACPI_SLEEP=y
+-CONFIG_ACPI_PROCFS=y
+-CONFIG_ACPI_PROCFS_POWER=y
+-CONFIG_ACPI_SYSFS_POWER=y
+-CONFIG_ACPI_PROC_EVENT=y
+-CONFIG_ACPI_AC=m
+-CONFIG_ACPI_BATTERY=m
+-CONFIG_ACPI_BUTTON=m
+-CONFIG_ACPI_VIDEO=m
+-CONFIG_ACPI_FAN=m
+-CONFIG_ACPI_DOCK=m
+-CONFIG_ACPI_PROCESSOR=m
+-CONFIG_ACPI_HOTPLUG_CPU=y
+-CONFIG_ACPI_THERMAL=m
+-CONFIG_ACPI_WMI=m
+-# CONFIG_ACPI_ASUS is not set
+-CONFIG_ACPI_TOSHIBA=m
+-CONFIG_ACPI_CUSTOM_DSDT_FILE=""
+-# CONFIG_ACPI_CUSTOM_DSDT is not set
+-CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+-CONFIG_ACPI_BLACKLIST_YEAR=2001
+-CONFIG_ACPI_DEBUG=y
+-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
+-CONFIG_ACPI_EC=y
+-CONFIG_ACPI_PCI_SLOT=m
+-CONFIG_ACPI_POWER=y
+-CONFIG_ACPI_SYSTEM=y
+-CONFIG_X86_PM_TIMER=y
+-CONFIG_ACPI_CONTAINER=m
+-CONFIG_ACPI_SBS=m
+-CONFIG_X86_APM_BOOT=y
+-CONFIG_APM=m
+-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+-CONFIG_APM_DO_ENABLE=y
+-# CONFIG_APM_CPU_IDLE is not set
+-CONFIG_APM_DISPLAY_BLANK=y
+-CONFIG_APM_ALLOW_INTS=y
+-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
+-
+-#
+-# CPU Frequency scaling
+-#
+-CONFIG_CPU_FREQ=y
+-CONFIG_CPU_FREQ_TABLE=y
+-# CONFIG_CPU_FREQ_DEBUG is not set
+-CONFIG_CPU_FREQ_STAT=m
+-CONFIG_CPU_FREQ_STAT_DETAILS=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+-CONFIG_CPU_FREQ_GOV_USERSPACE=m
+-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+-
+-#
+-# CPUFreq processor drivers
+-#
+-CONFIG_X86_ACPI_CPUFREQ=m
+-CONFIG_X86_POWERNOW_K6=m
+-CONFIG_X86_POWERNOW_K7=m
+-CONFIG_X86_POWERNOW_K7_ACPI=y
+-CONFIG_X86_POWERNOW_K8=m
+-CONFIG_X86_POWERNOW_K8_ACPI=y
+-CONFIG_X86_GX_SUSPMOD=m
+-CONFIG_X86_SPEEDSTEP_CENTRINO=m
+-CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
+-CONFIG_X86_SPEEDSTEP_ICH=m
+-CONFIG_X86_SPEEDSTEP_SMI=m
+-CONFIG_X86_P4_CLOCKMOD=m
+-CONFIG_X86_CPUFREQ_NFORCE2=m
+-CONFIG_X86_LONGRUN=m
+-CONFIG_X86_LONGHAUL=m
+-CONFIG_X86_E_POWERSAVER=m
+-
+-#
+-# shared options
+-#
+-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+-CONFIG_X86_SPEEDSTEP_LIB=m
+-CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
+-CONFIG_CPU_IDLE=y
+-CONFIG_CPU_IDLE_GOV_LADDER=y
+-CONFIG_CPU_IDLE_GOV_MENU=y
+-
+-#
+-# Bus options (PCI etc.)
+-#
+-CONFIG_PCI=y
+-# CONFIG_PCI_GOBIOS is not set
+-# CONFIG_PCI_GOMMCONFIG is not set
+-# CONFIG_PCI_GODIRECT is not set
+-# CONFIG_PCI_GOOLPC is not set
+-# CONFIG_PCI_GOXEN_FE is not set
+-CONFIG_PCI_GOANY=y
+-CONFIG_PCI_BIOS=y
+-CONFIG_PCI_DIRECT=y
+-CONFIG_PCI_MMCONFIG=y
+-CONFIG_PCI_OLPC=y
+-CONFIG_PCI_DOMAINS=y
+-CONFIG_PCIEPORTBUS=y
+-CONFIG_HOTPLUG_PCI_PCIE=m
+-CONFIG_PCIEAER=y
+-CONFIG_PCIEASPM=y
+-# CONFIG_PCIEASPM_DEBUG is not set
+-CONFIG_ARCH_SUPPORTS_MSI=y
+-CONFIG_PCI_MSI=y
+-CONFIG_PCI_LEGACY=y
+-# CONFIG_PCI_DEBUG is not set
+-CONFIG_HT_IRQ=y
+-CONFIG_ISA_DMA_API=y
+-CONFIG_ISA=y
+-# CONFIG_EISA is not set
+-# CONFIG_MCA is not set
+-CONFIG_SCx200=m
+-CONFIG_SCx200HR_TIMER=m
+-CONFIG_OLPC=y
+-CONFIG_K8_NB=y
+-CONFIG_PCCARD=m
+-# CONFIG_PCMCIA_DEBUG is not set
+-CONFIG_PCMCIA=m
+-CONFIG_PCMCIA_LOAD_CIS=y
+-CONFIG_PCMCIA_IOCTL=y
+-CONFIG_CARDBUS=y
+-
+-#
+-# PC-card bridges
+-#
+-CONFIG_YENTA=m
+-CONFIG_YENTA_O2=y
+-CONFIG_YENTA_RICOH=y
+-CONFIG_YENTA_TI=y
+-CONFIG_YENTA_ENE_TUNE=y
+-CONFIG_YENTA_TOSHIBA=y
+-CONFIG_PD6729=m
+-CONFIG_I82092=m
+-CONFIG_I82365=m
+-CONFIG_TCIC=m
+-CONFIG_PCMCIA_PROBE=y
+-CONFIG_PCCARD_NONSTATIC=m
+-CONFIG_HOTPLUG_PCI=m
+-CONFIG_HOTPLUG_PCI_FAKE=m
+-CONFIG_HOTPLUG_PCI_COMPAQ=m
+-CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y
+-CONFIG_HOTPLUG_PCI_IBM=m
+-CONFIG_HOTPLUG_PCI_ACPI=m
+-CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+-CONFIG_HOTPLUG_PCI_CPCI=y
+-CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+-CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+-CONFIG_HOTPLUG_PCI_SHPC=m
+-
+-#
+-# Executable file formats / Emulations
+-#
+-CONFIG_BINFMT_ELF=y
+-CONFIG_BINFMT_AOUT=m
+-CONFIG_BINFMT_MISC=m
+-CONFIG_NET=y
+-
+-#
+-# Networking options
+-#
+-CONFIG_PACKET=m
+-CONFIG_PACKET_MMAP=y
+-CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-CONFIG_XFRM_USER=m
+-CONFIG_XFRM_SUB_POLICY=y
+-CONFIG_XFRM_MIGRATE=y
+-# CONFIG_XFRM_STATISTICS is not set
+-CONFIG_XFRM_IPCOMP=m
+-CONFIG_NET_KEY=m
+-CONFIG_NET_KEY_MIGRATE=y
+-CONFIG_INET=y
+-CONFIG_IP_MULTICAST=y
+-CONFIG_IP_ADVANCED_ROUTER=y
+-CONFIG_ASK_IP_FIB_HASH=y
+-# CONFIG_IP_FIB_TRIE is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_MULTIPLE_TABLES=y
+-CONFIG_IP_ROUTE_MULTIPATH=y
+-CONFIG_IP_ROUTE_VERBOSE=y
+-# CONFIG_IP_PNP is not set
+-CONFIG_NET_IPIP=m
+-CONFIG_NET_IPGRE=m
+-CONFIG_NET_IPGRE_BROADCAST=y
+-CONFIG_IP_MROUTE=y
+-CONFIG_IP_PIMSM_V1=y
+-CONFIG_IP_PIMSM_V2=y
+-# CONFIG_ARPD is not set
+-CONFIG_SYN_COOKIES=y
+-CONFIG_INET_AH=m
+-CONFIG_INET_ESP=m
+-CONFIG_INET_IPCOMP=m
+-CONFIG_INET_XFRM_TUNNEL=m
+-CONFIG_INET_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET_XFRM_MODE_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_BEET=m
+-CONFIG_INET_LRO=y
+-CONFIG_INET_DIAG=m
+-CONFIG_INET_TCP_DIAG=m
+-CONFIG_TCP_CONG_ADVANCED=y
+-CONFIG_TCP_CONG_BIC=m
+-CONFIG_TCP_CONG_CUBIC=y
+-CONFIG_TCP_CONG_WESTWOOD=m
+-CONFIG_TCP_CONG_HTCP=m
+-CONFIG_TCP_CONG_HSTCP=m
+-CONFIG_TCP_CONG_HYBLA=m
+-CONFIG_TCP_CONG_VEGAS=m
+-CONFIG_TCP_CONG_SCALABLE=m
+-CONFIG_TCP_CONG_LP=m
+-CONFIG_TCP_CONG_VENO=m
+-CONFIG_TCP_CONG_YEAH=m
+-CONFIG_TCP_CONG_ILLINOIS=m
+-# CONFIG_DEFAULT_BIC is not set
+-CONFIG_DEFAULT_CUBIC=y
+-# CONFIG_DEFAULT_HTCP is not set
+-# CONFIG_DEFAULT_VEGAS is not set
+-# CONFIG_DEFAULT_WESTWOOD is not set
+-# CONFIG_DEFAULT_RENO is not set
+-CONFIG_DEFAULT_TCP_CONG="cubic"
+-# CONFIG_TCP_MD5SIG is not set
+-CONFIG_IP_VS=m
+-# CONFIG_IP_VS_DEBUG is not set
+-CONFIG_IP_VS_TAB_BITS=12
+-
+-#
+-# IPVS transport protocol load balancing support
+-#
+-CONFIG_IP_VS_PROTO_TCP=y
+-CONFIG_IP_VS_PROTO_UDP=y
+-CONFIG_IP_VS_PROTO_ESP=y
+-CONFIG_IP_VS_PROTO_AH=y
+-
+-#
+-# IPVS scheduler
+-#
+-CONFIG_IP_VS_RR=m
+-CONFIG_IP_VS_WRR=m
+-CONFIG_IP_VS_LC=m
+-CONFIG_IP_VS_WLC=m
+-CONFIG_IP_VS_LBLC=m
+-CONFIG_IP_VS_LBLCR=m
+-CONFIG_IP_VS_DH=m
+-CONFIG_IP_VS_SH=m
+-CONFIG_IP_VS_SED=m
+-CONFIG_IP_VS_NQ=m
+-
+-#
+-# IPVS application helper
+-#
+-CONFIG_IP_VS_FTP=m
+-CONFIG_IPV6=m
+-CONFIG_IPV6_PRIVACY=y
+-CONFIG_IPV6_ROUTER_PREF=y
+-CONFIG_IPV6_ROUTE_INFO=y
+-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+-CONFIG_INET6_AH=m
+-CONFIG_INET6_ESP=m
+-CONFIG_INET6_IPCOMP=m
+-CONFIG_IPV6_MIP6=m
+-CONFIG_INET6_XFRM_TUNNEL=m
+-CONFIG_INET6_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET6_XFRM_MODE_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_BEET=m
+-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+-CONFIG_IPV6_SIT=m
+-CONFIG_IPV6_NDISC_NODETYPE=y
+-CONFIG_IPV6_TUNNEL=m
+-CONFIG_IPV6_MULTIPLE_TABLES=y
+-CONFIG_IPV6_SUBTREES=y
+-# CONFIG_IPV6_MROUTE is not set
+-# CONFIG_NETLABEL is not set
+-CONFIG_NETWORK_SECMARK=y
+-CONFIG_NETFILTER=y
+-# CONFIG_NETFILTER_DEBUG is not set
+-CONFIG_NETFILTER_ADVANCED=y
+-CONFIG_BRIDGE_NETFILTER=y
+-
+-#
+-# Core Netfilter Configuration
+-#
+-CONFIG_NETFILTER_NETLINK=m
+-CONFIG_NETFILTER_NETLINK_QUEUE=m
+-CONFIG_NETFILTER_NETLINK_LOG=m
+-CONFIG_NF_CONNTRACK=m
+-CONFIG_NF_CT_ACCT=y
+-CONFIG_NF_CONNTRACK_MARK=y
+-CONFIG_NF_CONNTRACK_SECMARK=y
+-CONFIG_NF_CONNTRACK_EVENTS=y
+-CONFIG_NF_CT_PROTO_DCCP=m
+-CONFIG_NF_CT_PROTO_GRE=m
+-CONFIG_NF_CT_PROTO_SCTP=m
+-CONFIG_NF_CT_PROTO_UDPLITE=m
+-CONFIG_NF_CONNTRACK_AMANDA=m
+-CONFIG_NF_CONNTRACK_FTP=m
+-CONFIG_NF_CONNTRACK_H323=m
+-CONFIG_NF_CONNTRACK_IRC=m
+-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+-CONFIG_NF_CONNTRACK_PPTP=m
+-CONFIG_NF_CONNTRACK_SANE=m
+-CONFIG_NF_CONNTRACK_SIP=m
+-CONFIG_NF_CONNTRACK_TFTP=m
+-CONFIG_NF_CONNTRACK_SLP=m
+-CONFIG_NF_CT_NETLINK=m
+-CONFIG_NETFILTER_XTABLES=m
+-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+-CONFIG_NETFILTER_XT_TARGET_DSCP=m
+-CONFIG_NETFILTER_XT_TARGET_MARK=m
+-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+-CONFIG_NETFILTER_XT_TARGET_TRACE=m
+-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+-CONFIG_NETFILTER_XT_MATCH_DCCP=m
+-CONFIG_NETFILTER_XT_MATCH_DSCP=m
+-CONFIG_NETFILTER_XT_MATCH_ESP=m
+-CONFIG_NETFILTER_XT_MATCH_HELPER=m
+-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_MAC=m
+-CONFIG_NETFILTER_XT_MATCH_MARK=m
+-CONFIG_NETFILTER_XT_MATCH_OWNER=m
+-CONFIG_NETFILTER_XT_MATCH_POLICY=m
+-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+-CONFIG_NETFILTER_XT_MATCH_REALM=m
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+-CONFIG_NETFILTER_XT_MATCH_STATE=m
+-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+-CONFIG_NETFILTER_XT_MATCH_STRING=m
+-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+-CONFIG_NETFILTER_XT_MATCH_TIME=m
+-CONFIG_NETFILTER_XT_MATCH_U32=m
+-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+-
+-#
+-# IP: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV4=m
+-# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+-CONFIG_IP_NF_QUEUE=m
+-CONFIG_IP_NF_IPTABLES=m
+-CONFIG_IP_NF_MATCH_RECENT=m
+-CONFIG_IP_NF_MATCH_ECN=m
+-CONFIG_IP_NF_MATCH_AH=m
+-CONFIG_IP_NF_MATCH_TTL=m
+-CONFIG_IP_NF_MATCH_ADDRTYPE=m
+-CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
+-CONFIG_IP_NF_FILTER=m
+-CONFIG_IP_NF_TARGET_REJECT=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_NF_NAT=m
+-CONFIG_NF_NAT_NEEDED=y
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_NF_NAT_SNMP_BASIC=m
+-CONFIG_NF_NAT_PROTO_DCCP=m
+-CONFIG_NF_NAT_PROTO_GRE=m
+-CONFIG_NF_NAT_PROTO_UDPLITE=m
+-CONFIG_NF_NAT_PROTO_SCTP=m
+-CONFIG_NF_NAT_FTP=m
+-CONFIG_NF_NAT_IRC=m
+-CONFIG_NF_NAT_TFTP=m
+-CONFIG_NF_NAT_AMANDA=m
+-CONFIG_NF_NAT_PPTP=m
+-CONFIG_NF_NAT_H323=m
+-CONFIG_NF_NAT_SIP=m
+-CONFIG_IP_NF_MANGLE=m
+-CONFIG_IP_NF_TARGET_ECN=m
+-CONFIG_IP_NF_TARGET_TTL=m
+-CONFIG_IP_NF_TARGET_CLUSTERIP=m
+-CONFIG_IP_NF_RAW=m
+-CONFIG_IP_NF_SECURITY=m
+-CONFIG_IP_NF_ARPTABLES=m
+-CONFIG_IP_NF_ARPFILTER=m
+-CONFIG_IP_NF_ARP_MANGLE=m
+-
+-#
+-# IPv6: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV6=m
+-CONFIG_IP6_NF_QUEUE=m
+-CONFIG_IP6_NF_IPTABLES=m
+-CONFIG_IP6_NF_MATCH_RT=m
+-CONFIG_IP6_NF_MATCH_OPTS=m
+-CONFIG_IP6_NF_MATCH_FRAG=m
+-CONFIG_IP6_NF_MATCH_HL=m
+-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+-CONFIG_IP6_NF_MATCH_AH=m
+-CONFIG_IP6_NF_MATCH_MH=m
+-CONFIG_IP6_NF_MATCH_EUI64=m
+-CONFIG_IP6_NF_FILTER=m
+-CONFIG_IP6_NF_TARGET_LOG=m
+-CONFIG_IP6_NF_TARGET_REJECT=m
+-CONFIG_IP6_NF_MANGLE=m
+-CONFIG_IP6_NF_TARGET_HL=m
+-CONFIG_IP6_NF_RAW=m
+-CONFIG_IP6_NF_SECURITY=m
+-
+-#
+-# DECnet: Netfilter Configuration
+-#
+-CONFIG_DECNET_NF_GRABULATOR=m
+-
+-#
+-# Bridge: Netfilter Configuration
+-#
+-CONFIG_BRIDGE_NF_EBTABLES=m
+-CONFIG_BRIDGE_EBT_BROUTE=m
+-CONFIG_BRIDGE_EBT_T_FILTER=m
+-CONFIG_BRIDGE_EBT_T_NAT=m
+-CONFIG_BRIDGE_EBT_802_3=m
+-CONFIG_BRIDGE_EBT_AMONG=m
+-CONFIG_BRIDGE_EBT_ARP=m
+-CONFIG_BRIDGE_EBT_IP=m
+-CONFIG_BRIDGE_EBT_IP6=m
+-CONFIG_BRIDGE_EBT_LIMIT=m
+-CONFIG_BRIDGE_EBT_MARK=m
+-CONFIG_BRIDGE_EBT_PKTTYPE=m
+-CONFIG_BRIDGE_EBT_STP=m
+-CONFIG_BRIDGE_EBT_VLAN=m
+-CONFIG_BRIDGE_EBT_ARPREPLY=m
+-CONFIG_BRIDGE_EBT_DNAT=m
+-CONFIG_BRIDGE_EBT_MARK_T=m
+-CONFIG_BRIDGE_EBT_REDIRECT=m
+-CONFIG_BRIDGE_EBT_SNAT=m
+-CONFIG_BRIDGE_EBT_LOG=m
+-CONFIG_BRIDGE_EBT_ULOG=m
+-CONFIG_BRIDGE_EBT_NFLOG=m
+-CONFIG_IP_DCCP=m
+-CONFIG_INET_DCCP_DIAG=m
+-CONFIG_IP_DCCP_ACKVEC=y
+-
+-#
+-# DCCP CCIDs Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_DCCP_CCID2=m
+-# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3=m
+-# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3_RTO=100
+-CONFIG_IP_DCCP_TFRC_LIB=m
+-
+-#
+-# DCCP Kernel Hacking
+-#
+-# CONFIG_IP_DCCP_DEBUG is not set
+-# CONFIG_NET_DCCPPROBE is not set
+-CONFIG_IP_SCTP=m
+-# CONFIG_SCTP_DBG_MSG is not set
+-# CONFIG_SCTP_DBG_OBJCNT is not set
+-# CONFIG_SCTP_HMAC_NONE is not set
+-# CONFIG_SCTP_HMAC_SHA1 is not set
+-CONFIG_SCTP_HMAC_MD5=y
+-# CONFIG_TIPC is not set
+-CONFIG_ATM=m
+-CONFIG_ATM_CLIP=m
+-CONFIG_ATM_CLIP_NO_ICMP=y
+-CONFIG_ATM_LANE=m
+-CONFIG_ATM_MPOA=m
+-CONFIG_ATM_BR2684=m
+-# CONFIG_ATM_BR2684_IPFILTER is not set
+-CONFIG_STP=m
+-CONFIG_GARP=m
+-CONFIG_BRIDGE=m
+-CONFIG_VLAN_8021Q=m
+-CONFIG_VLAN_8021Q_GVRP=y
+-CONFIG_DECNET=m
+-CONFIG_DECNET_ROUTER=y
+-CONFIG_LLC=y
+-CONFIG_LLC2=m
+-CONFIG_IPX=m
+-# CONFIG_IPX_INTERN is not set
+-CONFIG_ATALK=m
+-CONFIG_DEV_APPLETALK=m
+-CONFIG_LTPC=m
+-CONFIG_COPS=m
+-CONFIG_COPS_DAYNA=y
+-CONFIG_COPS_TANGENT=y
+-CONFIG_IPDDP=m
+-CONFIG_IPDDP_ENCAP=y
+-CONFIG_IPDDP_DECAP=y
+-CONFIG_X25=m
+-CONFIG_LAPB=m
+-CONFIG_ECONET=m
+-# CONFIG_ECONET_AUNUDP is not set
+-# CONFIG_ECONET_NATIVE is not set
+-CONFIG_WAN_ROUTER=m
+-CONFIG_NET_SCHED=y
+-
+-#
+-# Queueing/Scheduling
+-#
+-CONFIG_NET_SCH_CBQ=m
+-CONFIG_NET_SCH_HTB=m
+-CONFIG_NET_SCH_HFSC=m
+-CONFIG_NET_SCH_ATM=m
+-CONFIG_NET_SCH_PRIO=m
+-CONFIG_NET_SCH_MULTIQ=m
+-CONFIG_NET_SCH_RED=m
+-CONFIG_NET_SCH_SFQ=m
+-CONFIG_NET_SCH_TEQL=m
+-CONFIG_NET_SCH_TBF=m
+-CONFIG_NET_SCH_GRED=m
+-CONFIG_NET_SCH_DSMARK=m
+-CONFIG_NET_SCH_NETEM=m
+-CONFIG_NET_SCH_INGRESS=m
+-
+-#
+-# Classification
+-#
+-CONFIG_NET_CLS=y
+-CONFIG_NET_CLS_BASIC=m
+-CONFIG_NET_CLS_TCINDEX=m
+-CONFIG_NET_CLS_ROUTE4=m
+-CONFIG_NET_CLS_ROUTE=y
+-CONFIG_NET_CLS_FW=m
+-CONFIG_NET_CLS_U32=m
+-CONFIG_CLS_U32_PERF=y
+-CONFIG_CLS_U32_MARK=y
+-CONFIG_NET_CLS_RSVP=m
+-CONFIG_NET_CLS_RSVP6=m
+-CONFIG_NET_CLS_FLOW=m
+-# CONFIG_NET_EMATCH is not set
+-CONFIG_NET_CLS_ACT=y
+-CONFIG_NET_ACT_POLICE=m
+-CONFIG_NET_ACT_GACT=m
+-CONFIG_GACT_PROB=y
+-CONFIG_NET_ACT_MIRRED=m
+-CONFIG_NET_ACT_IPT=m
+-CONFIG_NET_ACT_NAT=m
+-CONFIG_NET_ACT_PEDIT=m
+-CONFIG_NET_ACT_SIMP=m
+-CONFIG_NET_ACT_SKBEDIT=m
+-# CONFIG_NET_CLS_IND is not set
+-CONFIG_NET_SCH_FIFO=y
+-CONFIG_DCB=m
+-CONFIG_DCBNL=y
+-
+-#
+-# Network testing
+-#
+-CONFIG_NET_PKTGEN=m
+-CONFIG_NET_TCPPROBE=m
+-CONFIG_HAMRADIO=y
+-
+-#
+-# Packet Radio protocols
+-#
+-CONFIG_AX25=m
+-CONFIG_AX25_DAMA_SLAVE=y
+-CONFIG_NETROM=m
+-CONFIG_ROSE=m
+-
+-#
+-# AX.25 network device drivers
+-#
+-CONFIG_MKISS=m
+-CONFIG_6PACK=m
+-CONFIG_BPQETHER=m
+-CONFIG_SCC=m
+-CONFIG_SCC_DELAY=y
+-CONFIG_SCC_TRXECHO=y
+-CONFIG_BAYCOM_SER_FDX=m
+-CONFIG_BAYCOM_SER_HDX=m
+-CONFIG_BAYCOM_PAR=m
+-CONFIG_BAYCOM_EPP=m
+-CONFIG_YAM=m
+-CONFIG_CAN=m
+-CONFIG_CAN_RAW=m
+-CONFIG_CAN_BCM=m
+-
+-#
+-# CAN Device Drivers
+-#
+-CONFIG_CAN_VCAN=m
+-# CONFIG_CAN_DEBUG_DEVICES is not set
+-CONFIG_IRDA=m
+-
+-#
+-# IrDA protocols
+-#
+-CONFIG_IRLAN=m
+-CONFIG_IRNET=m
+-CONFIG_IRCOMM=m
+-CONFIG_IRDA_ULTRA=y
+-
+-#
+-# IrDA options
+-#
+-CONFIG_IRDA_CACHE_LAST_LSAP=y
+-# CONFIG_IRDA_FAST_RR is not set
+-# CONFIG_IRDA_DEBUG is not set
+-
+-#
+-# Infrared-port device drivers
+-#
+-
+-#
+-# SIR device drivers
+-#
+-CONFIG_IRTTY_SIR=m
+-
+-#
+-# Dongle support
+-#
+-CONFIG_DONGLE=y
+-CONFIG_ESI_DONGLE=m
+-CONFIG_ACTISYS_DONGLE=m
+-CONFIG_TEKRAM_DONGLE=m
+-CONFIG_TOIM3232_DONGLE=m
+-CONFIG_LITELINK_DONGLE=m
+-CONFIG_MA600_DONGLE=m
+-CONFIG_GIRBIL_DONGLE=m
+-CONFIG_MCP2120_DONGLE=m
+-CONFIG_OLD_BELKIN_DONGLE=m
+-CONFIG_ACT200L_DONGLE=m
+-CONFIG_KINGSUN_DONGLE=m
+-CONFIG_KSDAZZLE_DONGLE=m
+-CONFIG_KS959_DONGLE=m
+-
+-#
+-# FIR device drivers
+-#
+-CONFIG_USB_IRDA=m
+-CONFIG_SIGMATEL_FIR=m
+-CONFIG_NSC_FIR=m
+-CONFIG_WINBOND_FIR=m
+-CONFIG_TOSHIBA_FIR=m
+-CONFIG_SMC_IRCC_FIR=m
+-CONFIG_ALI_FIR=m
+-CONFIG_VLSI_FIR=m
+-CONFIG_VIA_FIR=m
+-CONFIG_MCS_FIR=m
+-CONFIG_BT=m
+-CONFIG_BT_L2CAP=m
+-CONFIG_BT_SCO=m
+-CONFIG_BT_RFCOMM=m
+-CONFIG_BT_RFCOMM_TTY=y
+-CONFIG_BT_BNEP=m
+-CONFIG_BT_BNEP_MC_FILTER=y
+-CONFIG_BT_BNEP_PROTO_FILTER=y
+-CONFIG_BT_CMTP=m
+-CONFIG_BT_HIDP=m
+-
+-#
+-# Bluetooth device drivers
+-#
+-CONFIG_BT_HCIBTUSB=m
+-CONFIG_BT_HCIBTSDIO=m
+-CONFIG_BT_HCIUART=m
+-CONFIG_BT_HCIUART_H4=y
+-CONFIG_BT_HCIUART_BCSP=y
+-CONFIG_BT_HCIUART_LL=y
+-CONFIG_BT_HCIBCM203X=m
+-CONFIG_BT_HCIBPA10X=m
+-CONFIG_BT_HCIBFUSB=m
+-CONFIG_BT_HCIDTL1=m
+-CONFIG_BT_HCIBT3C=m
+-CONFIG_BT_HCIBLUECARD=m
+-CONFIG_BT_HCIBTUART=m
+-CONFIG_BT_HCIVHCI=m
+-CONFIG_AF_RXRPC=m
+-# CONFIG_AF_RXRPC_DEBUG is not set
+-CONFIG_RXKAD=m
+-CONFIG_FIB_RULES=y
+-
+-#
+-# Wireless
+-#
+-CONFIG_CFG80211=m
+-CONFIG_NL80211=y
+-CONFIG_WIRELESS_EXT=y
+-CONFIG_WIRELESS_EXT_SYSFS=y
+-CONFIG_MAC80211=m
+-
+-#
+-# Rate control algorithm selection
+-#
+-CONFIG_MAC80211_RC_PID=y
+-CONFIG_MAC80211_RC_DEFAULT_PID=y
+-CONFIG_MAC80211_RC_DEFAULT="pid"
+-CONFIG_MAC80211_MESH=y
+-CONFIG_MAC80211_LEDS=y
+-CONFIG_MAC80211_DEBUGFS=y
+-# CONFIG_MAC80211_DEBUG_MENU is not set
+-CONFIG_IEEE80211=m
+-# CONFIG_IEEE80211_DEBUG is not set
+-CONFIG_IEEE80211_CRYPT_WEP=m
+-CONFIG_IEEE80211_CRYPT_CCMP=m
+-CONFIG_IEEE80211_CRYPT_TKIP=m
+-CONFIG_RFKILL=m
+-CONFIG_RFKILL_INPUT=m
+-CONFIG_RFKILL_LEDS=y
+-CONFIG_NET_9P=m
+-# CONFIG_NET_9P_VIRTIO is not set
+-# CONFIG_NET_9P_DEBUG is not set
+-CONFIG_NETVM=y
+-
+-#
+-# Device Drivers
+-#
+-
+-#
+-# Generic Driver Options
+-#
+-CONFIG_UEVENT_HELPER_PATH=""
+-# CONFIG_STANDALONE is not set
+-CONFIG_PREVENT_FIRMWARE_BUILD=y
+-CONFIG_FW_LOADER=y
+-CONFIG_FIRMWARE_IN_KERNEL=y
+-CONFIG_EXTRA_FIRMWARE=""
+-# CONFIG_DEBUG_DRIVER is not set
+-# CONFIG_DEBUG_DEVRES is not set
+-# CONFIG_SYS_HYPERVISOR is not set
+-CONFIG_CONNECTOR=y
+-CONFIG_PROC_EVENTS=y
+-CONFIG_MTD=m
+-# CONFIG_MTD_DEBUG is not set
+-CONFIG_MTD_CONCAT=m
+-CONFIG_MTD_PARTITIONS=y
+-CONFIG_MTD_REDBOOT_PARTS=m
+-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+-CONFIG_MTD_AR7_PARTS=m
+-
+-#
+-# User Modules And Translation Layers
+-#
+-CONFIG_MTD_CHAR=m
+-CONFIG_MTD_BLKDEVS=m
+-CONFIG_MTD_BLOCK=m
+-# CONFIG_MTD_BLOCK_RO is not set
+-# CONFIG_FTL is not set
+-# CONFIG_NFTL is not set
+-# CONFIG_INFTL is not set
+-CONFIG_RFD_FTL=m
+-# CONFIG_SSFDC is not set
+-CONFIG_MTD_OOPS=m
+-
+-#
+-# RAM/ROM/Flash chip drivers
+-#
+-CONFIG_MTD_CFI=m
+-CONFIG_MTD_JEDECPROBE=m
+-CONFIG_MTD_GEN_PROBE=m
+-CONFIG_MTD_CFI_ADV_OPTIONS=y
+-CONFIG_MTD_CFI_NOSWAP=y
+-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_GEOMETRY is not set
+-CONFIG_MTD_MAP_BANK_WIDTH_1=y
+-CONFIG_MTD_MAP_BANK_WIDTH_2=y
+-CONFIG_MTD_MAP_BANK_WIDTH_4=y
+-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+-CONFIG_MTD_CFI_I1=y
+-CONFIG_MTD_CFI_I2=y
+-# CONFIG_MTD_CFI_I4 is not set
+-# CONFIG_MTD_CFI_I8 is not set
+-# CONFIG_MTD_OTP is not set
+-CONFIG_MTD_CFI_INTELEXT=m
+-CONFIG_MTD_CFI_AMDSTD=m
+-CONFIG_MTD_CFI_STAA=m
+-CONFIG_MTD_CFI_UTIL=m
+-# CONFIG_MTD_RAM is not set
+-# CONFIG_MTD_ROM is not set
+-CONFIG_MTD_ABSENT=m
+-
+-#
+-# Mapping drivers for chip access
+-#
+-CONFIG_MTD_COMPLEX_MAPPINGS=y
+-CONFIG_MTD_PHYSMAP=m
+-CONFIG_MTD_PHYSMAP_START=0x8000000
+-CONFIG_MTD_PHYSMAP_LEN=0x4000000
+-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+-CONFIG_MTD_SC520CDP=m
+-CONFIG_MTD_NETSC520=m
+-CONFIG_MTD_TS5500=m
+-CONFIG_MTD_SBC_GXX=m
+-CONFIG_MTD_SCx200_DOCFLASH=m
+-CONFIG_MTD_AMD76XROM=m
+-CONFIG_MTD_ICHXROM=m
+-CONFIG_MTD_ESB2ROM=m
+-CONFIG_MTD_CK804XROM=m
+-CONFIG_MTD_SCB2_FLASH=m
+-CONFIG_MTD_NETtel=m
+-CONFIG_MTD_DILNETPC=m
+-CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000
+-CONFIG_MTD_L440GX=m
+-CONFIG_MTD_PCI=m
+-CONFIG_MTD_INTEL_VR_NOR=m
+-# CONFIG_MTD_PLATRAM is not set
+-
+-#
+-# Self-contained MTD device drivers
+-#
+-CONFIG_MTD_PMC551=m
+-CONFIG_MTD_PMC551_BUGFIX=y
+-# CONFIG_MTD_PMC551_DEBUG is not set
+-# CONFIG_MTD_DATAFLASH is not set
+-# CONFIG_MTD_M25P80 is not set
+-CONFIG_MTD_SLRAM=m
+-CONFIG_MTD_PHRAM=m
+-CONFIG_MTD_MTDRAM=m
+-CONFIG_MTDRAM_TOTAL_SIZE=4096
+-CONFIG_MTDRAM_ERASE_SIZE=128
+-CONFIG_MTD_BLOCK2MTD=m
+-
+-#
+-# Disk-On-Chip Device Drivers
+-#
+-CONFIG_MTD_DOC2000=m
+-CONFIG_MTD_DOC2001=m
+-CONFIG_MTD_DOC2001PLUS=m
+-CONFIG_MTD_DOCPROBE=m
+-CONFIG_MTD_DOCECC=m
+-CONFIG_MTD_DOCPROBE_ADVANCED=y
+-CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
+-CONFIG_MTD_DOCPROBE_HIGH=y
+-CONFIG_MTD_DOCPROBE_55AA=y
+-CONFIG_MTD_NAND=m
+-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+-CONFIG_MTD_NAND_ECC_SMC=y
+-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+-CONFIG_MTD_NAND_IDS=m
+-CONFIG_MTD_NAND_DISKONCHIP=m
+-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+-CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
+-CONFIG_MTD_NAND_CAFE=m
+-CONFIG_MTD_NAND_CS553X=m
+-CONFIG_MTD_NAND_NANDSIM=m
+-CONFIG_MTD_NAND_PLATFORM=m
+-CONFIG_MTD_ALAUDA=m
+-CONFIG_MTD_ONENAND=m
+-# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+-CONFIG_MTD_ONENAND_OTP=y
+-CONFIG_MTD_ONENAND_2X_PROGRAM=y
+-CONFIG_MTD_ONENAND_SIM=m
+-
+-#
+-# UBI - Unsorted block images
+-#
+-CONFIG_MTD_UBI=m
+-CONFIG_MTD_UBI_WL_THRESHOLD=4096
+-CONFIG_MTD_UBI_BEB_RESERVE=1
+-# CONFIG_MTD_UBI_GLUEBI is not set
+-
+-#
+-# UBI debugging options
+-#
+-# CONFIG_MTD_UBI_DEBUG is not set
+-CONFIG_PARPORT=m
+-CONFIG_PARPORT_PC=m
+-CONFIG_PARPORT_SERIAL=m
+-CONFIG_PARPORT_PC_FIFO=y
+-CONFIG_PARPORT_PC_SUPERIO=y
+-CONFIG_PARPORT_PC_PCMCIA=m
+-# CONFIG_PARPORT_GSC is not set
+-CONFIG_PARPORT_AX88796=m
+-CONFIG_PARPORT_1284=y
+-CONFIG_PARPORT_NOT_PC=y
+-CONFIG_PNP=y
+-# CONFIG_PNP_DEBUG is not set
+-
+-#
+-# Protocols
+-#
+-CONFIG_ISAPNP=y
+-CONFIG_PNPBIOS=y
+-CONFIG_PNPBIOS_PROC_FS=y
+-CONFIG_PNPACPI=y
+-CONFIG_BLK_DEV=y
+-CONFIG_BLK_DEV_FD=m
+-CONFIG_BLK_DEV_XD=m
+-CONFIG_PARIDE=m
+-
+-#
+-# Parallel IDE high-level drivers
+-#
+-CONFIG_PARIDE_PD=m
+-CONFIG_PARIDE_PCD=m
+-CONFIG_PARIDE_PF=m
+-CONFIG_PARIDE_PT=m
+-CONFIG_PARIDE_PG=m
+-
+-#
+-# Parallel IDE protocol modules
+-#
+-CONFIG_PARIDE_ATEN=m
+-CONFIG_PARIDE_BPCK=m
+-CONFIG_PARIDE_BPCK6=m
+-CONFIG_PARIDE_COMM=m
+-CONFIG_PARIDE_DSTR=m
+-CONFIG_PARIDE_FIT2=m
+-CONFIG_PARIDE_FIT3=m
+-CONFIG_PARIDE_EPAT=m
+-CONFIG_PARIDE_EPATC8=y
+-CONFIG_PARIDE_EPIA=m
+-CONFIG_PARIDE_FRIQ=m
+-CONFIG_PARIDE_FRPW=m
+-CONFIG_PARIDE_KBIC=m
+-CONFIG_PARIDE_KTTI=m
+-CONFIG_PARIDE_ON20=m
+-CONFIG_PARIDE_ON26=m
+-CONFIG_BLK_CPQ_DA=m
+-CONFIG_BLK_CPQ_CISS_DA=m
+-CONFIG_CISS_SCSI_TAPE=y
+-CONFIG_BLK_DEV_DAC960=m
+-CONFIG_BLK_DEV_UMEM=m
+-# CONFIG_BLK_DEV_COW_COMMON is not set
+-CONFIG_BLK_DEV_LOOP=m
+-CONFIG_BLK_DEV_CRYPTOLOOP=m
+-CONFIG_BLK_DEV_NBD=m
+-CONFIG_BLK_DEV_SX8=m
+-# CONFIG_BLK_DEV_UB is not set
+-CONFIG_BLK_DEV_RAM=m
+-CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=64000
+-CONFIG_BLK_DEV_XIP=y
+-CONFIG_CDROM_PKTCDVD=m
+-CONFIG_CDROM_PKTCDVD_BUFFERS=8
+-CONFIG_CDROM_PKTCDVD_WCACHE=y
+-CONFIG_ATA_OVER_ETH=m
+-CONFIG_CIPHER_TWOFISH=m
+-CONFIG_VIRTIO_BLK=m
+-# CONFIG_BLK_DEV_HD is not set
+-CONFIG_MISC_DEVICES=y
+-CONFIG_IBM_ASM=m
+-CONFIG_PHANTOM=m
+-CONFIG_EEPROM_93CX6=m
+-# CONFIG_SGI_IOC4 is not set
+-CONFIG_TIFM_CORE=m
+-CONFIG_TIFM_7XX1=m
+-CONFIG_ACER_WMI=m
+-CONFIG_ASUS_LAPTOP=m
+-CONFIG_FUJITSU_LAPTOP=m
+-# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
+-CONFIG_TC1100_WMI=m
+-CONFIG_HP_WMI=m
+-CONFIG_MSI_LAPTOP=m
+-CONFIG_PANASONIC_LAPTOP=m
+-CONFIG_COMPAL_LAPTOP=m
+-CONFIG_SONY_LAPTOP=m
+-CONFIG_SONYPI_COMPAT=y
+-CONFIG_THINKPAD_ACPI=m
+-# CONFIG_THINKPAD_ACPI_DEBUG is not set
+-CONFIG_THINKPAD_ACPI_BAY=y
+-CONFIG_THINKPAD_ACPI_VIDEO=y
+-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+-CONFIG_INTEL_MENLOW=m
+-CONFIG_EEEPC_LAPTOP=m
+-CONFIG_ENCLOSURE_SERVICES=m
+-CONFIG_HP_ILO=m
+-CONFIG_HAVE_IDE=y
+-CONFIG_IDE=m
+-CONFIG_BLK_DEV_IDE=m
+-
+-#
+-# Please see Documentation/ide/ide.txt for help/info on IDE drives
+-#
+-CONFIG_IDE_TIMINGS=y
+-CONFIG_IDE_ATAPI=y
+-# CONFIG_BLK_DEV_IDE_SATA is not set
+-CONFIG_BLK_DEV_IDEDISK=m
+-CONFIG_IDEDISK_MULTI_MODE=y
+-CONFIG_BLK_DEV_IDECS=m
+-CONFIG_BLK_DEV_DELKIN=m
+-CONFIG_BLK_DEV_IDECD=m
+-CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+-CONFIG_BLK_DEV_IDETAPE=m
+-CONFIG_BLK_DEV_IDEFLOPPY=m
+-CONFIG_BLK_DEV_IDESCSI=m
+-CONFIG_BLK_DEV_IDEACPI=y
+-# CONFIG_IDE_TASK_IOCTL is not set
+-CONFIG_IDE_PROC_FS=y
+-
+-#
+-# IDE chipset support/bugfixes
+-#
+-CONFIG_IDE_GENERIC=m
+-CONFIG_BLK_DEV_PLATFORM=m
+-CONFIG_BLK_DEV_CMD640=m
+-CONFIG_BLK_DEV_CMD640_ENHANCED=y
+-CONFIG_BLK_DEV_IDEPNP=m
+-CONFIG_BLK_DEV_IDEDMA_SFF=y
+-
+-#
+-# PCI IDE chipsets support
+-#
+-CONFIG_BLK_DEV_IDEPCI=y
+-CONFIG_BLK_DEV_OFFBOARD=y
+-CONFIG_BLK_DEV_GENERIC=m
+-CONFIG_BLK_DEV_OPTI621=m
+-CONFIG_BLK_DEV_RZ1000=m
+-CONFIG_BLK_DEV_IDEDMA_PCI=y
+-CONFIG_BLK_DEV_AEC62XX=m
+-CONFIG_BLK_DEV_ALI15X3=m
+-CONFIG_BLK_DEV_AMD74XX=m
+-CONFIG_BLK_DEV_ATIIXP=m
+-CONFIG_BLK_DEV_CMD64X=m
+-CONFIG_BLK_DEV_TRIFLEX=m
+-CONFIG_BLK_DEV_CS5520=m
+-CONFIG_BLK_DEV_CS5530=m
+-CONFIG_BLK_DEV_CS5535=m
+-CONFIG_BLK_DEV_HPT366=m
+-CONFIG_BLK_DEV_JMICRON=m
+-CONFIG_BLK_DEV_SC1200=m
+-CONFIG_BLK_DEV_PIIX=m
+-CONFIG_BLK_DEV_IT8213=m
+-CONFIG_BLK_DEV_IT821X=m
+-CONFIG_BLK_DEV_NS87415=m
+-CONFIG_BLK_DEV_PDC202XX_OLD=m
+-CONFIG_BLK_DEV_PDC202XX_NEW=m
+-CONFIG_BLK_DEV_SVWKS=m
+-CONFIG_BLK_DEV_SIIMAGE=m
+-CONFIG_BLK_DEV_SIS5513=m
+-CONFIG_BLK_DEV_SLC90E66=m
+-CONFIG_BLK_DEV_TRM290=m
+-CONFIG_BLK_DEV_VIA82CXXX=m
+-# CONFIG_BLK_DEV_TC86C001 is not set
+-
+-#
+-# Other IDE chipsets support
+-#
+-
+-#
+-# Note: most of these also require special kernel boot parameters
+-#
+-CONFIG_BLK_DEV_4DRIVES=m
+-CONFIG_BLK_DEV_ALI14XX=m
+-CONFIG_BLK_DEV_DTC2278=m
+-CONFIG_BLK_DEV_HT6560B=m
+-CONFIG_BLK_DEV_QD65XX=m
+-CONFIG_BLK_DEV_UMC8672=m
+-CONFIG_BLK_DEV_IDEDMA=y
+-
+-#
+-# SCSI device support
+-#
+-CONFIG_RAID_ATTRS=m
+-CONFIG_SCSI=m
+-CONFIG_SCSI_DMA=y
+-CONFIG_SCSI_TGT=m
+-CONFIG_SCSI_NETLINK=y
+-CONFIG_SCSI_PROC_FS=y
+-
+-#
+-# SCSI support type (disk, tape, CD-ROM)
+-#
+-CONFIG_BLK_DEV_SD=m
+-CONFIG_SD_IOSTATS=y
+-CONFIG_CHR_DEV_ST=m
+-CONFIG_CHR_DEV_OSST=m
+-CONFIG_BLK_DEV_SR=m
+-# CONFIG_BLK_DEV_SR_VENDOR is not set
+-CONFIG_CHR_DEV_SG=m
+-CONFIG_CHR_DEV_SCH=m
+-CONFIG_SCSI_ENCLOSURE=m
+-
+-#
+-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+-#
+-CONFIG_SCSI_MULTI_LUN=y
+-CONFIG_SCSI_CONSTANTS=y
+-CONFIG_SCSI_LOGGING=y
+-# CONFIG_SCSI_SCAN_ASYNC is not set
+-CONFIG_SCSI_WAIT_SCAN=m
+-
+-#
+-# SCSI Transports
+-#
+-CONFIG_SCSI_SPI_ATTRS=m
+-CONFIG_SCSI_FC_ATTRS=m
+-CONFIG_SCSI_FC_TGT_ATTRS=y
+-CONFIG_SCSI_ISCSI_ATTRS=m
+-CONFIG_SCSI_SAS_ATTRS=m
+-CONFIG_SCSI_SAS_LIBSAS=m
+-CONFIG_SCSI_SAS_ATA=y
+-CONFIG_SCSI_SAS_HOST_SMP=y
+-CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+-CONFIG_SCSI_SRP_ATTRS=m
+-CONFIG_SCSI_SRP_TGT_ATTRS=y
+-CONFIG_SCSI_LOWLEVEL=y
+-CONFIG_ISCSI_TCP=m
+-CONFIG_SCSI_CXGB3_ISCSI=m
+-CONFIG_BLK_DEV_3W_XXXX_RAID=m
+-CONFIG_SCSI_3W_9XXX=m
+-CONFIG_SCSI_7000FASST=m
+-CONFIG_SCSI_ACARD=m
+-CONFIG_SCSI_AHA152X=m
+-CONFIG_SCSI_AHA1542=m
+-CONFIG_SCSI_AACRAID=m
+-CONFIG_SCSI_AIC7XXX=m
+-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+-CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+-CONFIG_AIC7XXX_DEBUG_MASK=0
+-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC7XXX_OLD=m
+-CONFIG_SCSI_AIC79XX=m
+-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+-CONFIG_AIC79XX_RESET_DELAY_MS=15000
+-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+-CONFIG_AIC79XX_DEBUG_MASK=0
+-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC94XX=m
+-CONFIG_AIC94XX_DEBUG=y
+-CONFIG_SCSI_DPT_I2O=m
+-CONFIG_SCSI_ADVANSYS=m
+-CONFIG_SCSI_IN2000=m
+-CONFIG_SCSI_ARCMSR=m
+-CONFIG_SCSI_ARCMSR_AER=y
+-CONFIG_MEGARAID_NEWGEN=y
+-CONFIG_MEGARAID_MM=m
+-CONFIG_MEGARAID_MAILBOX=m
+-CONFIG_MEGARAID_LEGACY=m
+-CONFIG_MEGARAID_SAS=m
+-CONFIG_SCSI_HPTIOP=m
+-CONFIG_SCSI_BUSLOGIC=m
+-CONFIG_SCSI_FLASHPOINT=y
+-CONFIG_LIBFC=m
+-CONFIG_FCOE=m
+-CONFIG_SCSI_DMX3191D=m
+-CONFIG_SCSI_DTC3280=m
+-CONFIG_SCSI_EATA=m
+-CONFIG_SCSI_EATA_TAGGED_QUEUE=y
+-CONFIG_SCSI_EATA_LINKED_COMMANDS=y
+-CONFIG_SCSI_EATA_MAX_TAGS=16
+-CONFIG_SCSI_FUTURE_DOMAIN=m
+-CONFIG_SCSI_GDTH=m
+-CONFIG_SCSI_GENERIC_NCR5380=m
+-CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
+-CONFIG_SCSI_GENERIC_NCR53C400=y
+-CONFIG_SCSI_IPS=m
+-CONFIG_SCSI_INITIO=m
+-CONFIG_SCSI_INIA100=m
+-CONFIG_SCSI_PPA=m
+-CONFIG_SCSI_IMM=m
+-# CONFIG_SCSI_IZIP_EPP16 is not set
+-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+-CONFIG_SCSI_MVSAS=m
+-CONFIG_SCSI_NCR53C406A=m
+-CONFIG_SCSI_STEX=m
+-CONFIG_SCSI_SYM53C8XX_2=m
+-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+-CONFIG_SCSI_SYM53C8XX_MMIO=y
+-CONFIG_SCSI_IPR=m
+-CONFIG_SCSI_IPR_TRACE=y
+-CONFIG_SCSI_IPR_DUMP=y
+-CONFIG_SCSI_PAS16=m
+-CONFIG_SCSI_QLOGIC_FAS=m
+-CONFIG_SCSI_QLOGIC_1280=m
+-CONFIG_SCSI_QLA_FC=m
+-CONFIG_SCSI_QLA_ISCSI=m
+-CONFIG_SCSI_LPFC=m
+-CONFIG_SCSI_SYM53C416=m
+-CONFIG_SCSI_DC395x=m
+-CONFIG_SCSI_DC390T=m
+-CONFIG_SCSI_T128=m
+-CONFIG_SCSI_U14_34F=m
+-CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y
+-CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y
+-CONFIG_SCSI_U14_34F_MAX_TAGS=8
+-CONFIG_SCSI_ULTRASTOR=m
+-CONFIG_SCSI_NSP32=m
+-CONFIG_SCSI_DEBUG=m
+-CONFIG_SCSI_SRP=m
+-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+-CONFIG_PCMCIA_AHA152X=m
+-CONFIG_PCMCIA_FDOMAIN=m
+-CONFIG_PCMCIA_NINJA_SCSI=m
+-CONFIG_PCMCIA_QLOGIC=m
+-CONFIG_PCMCIA_SYM53C500=m
+-CONFIG_SCSI_DH=m
+-CONFIG_SCSI_DH_RDAC=m
+-CONFIG_SCSI_DH_HP_SW=m
+-CONFIG_SCSI_DH_EMC=m
+-CONFIG_SCSI_DH_ALUA=m
+-CONFIG_ATA=m
+-# CONFIG_ATA_NONSTANDARD is not set
+-CONFIG_ATA_ACPI=y
+-CONFIG_SATA_PMP=y
+-CONFIG_SATA_AHCI=m
+-CONFIG_SATA_SIL24=m
+-CONFIG_ATA_SFF=y
+-CONFIG_SATA_SVW=m
+-CONFIG_ATA_PIIX=m
+-CONFIG_SATA_MV=m
+-CONFIG_SATA_NV=m
+-CONFIG_PDC_ADMA=m
+-CONFIG_SATA_QSTOR=m
+-CONFIG_SATA_PROMISE=m
+-CONFIG_SATA_SX4=m
+-CONFIG_SATA_SIL=m
+-CONFIG_SATA_SIS=m
+-CONFIG_SATA_ULI=m
+-CONFIG_SATA_VIA=m
+-CONFIG_SATA_VITESSE=m
+-CONFIG_SATA_INIC162X=m
+-CONFIG_PATA_ACPI=m
+-CONFIG_PATA_ALI=m
+-CONFIG_PATA_AMD=m
+-CONFIG_PATA_ARTOP=m
+-CONFIG_PATA_ATIIXP=m
+-CONFIG_PATA_CMD640_PCI=m
+-CONFIG_PATA_CMD64X=m
+-CONFIG_PATA_CS5520=m
+-CONFIG_PATA_CS5530=m
+-CONFIG_PATA_CS5535=m
+-CONFIG_PATA_CS5536=m
+-CONFIG_PATA_CYPRESS=m
+-CONFIG_PATA_EFAR=m
+-CONFIG_ATA_GENERIC=m
+-CONFIG_PATA_HPT366=m
+-CONFIG_PATA_HPT37X=m
+-CONFIG_PATA_HPT3X2N=m
+-CONFIG_PATA_HPT3X3=m
+-# CONFIG_PATA_HPT3X3_DMA is not set
+-CONFIG_PATA_ISAPNP=m
+-CONFIG_PATA_IT821X=m
+-CONFIG_PATA_IT8213=m
+-CONFIG_PATA_JMICRON=m
+-CONFIG_PATA_LEGACY=m
+-CONFIG_PATA_TRIFLEX=m
+-CONFIG_PATA_MARVELL=m
+-CONFIG_PATA_MPIIX=m
+-CONFIG_PATA_OLDPIIX=m
+-CONFIG_PATA_NETCELL=m
+-CONFIG_PATA_NINJA32=m
+-CONFIG_PATA_NS87410=m
+-CONFIG_PATA_NS87415=m
+-CONFIG_PATA_OPTI=m
+-CONFIG_PATA_OPTIDMA=m
+-CONFIG_PATA_PCMCIA=m
+-CONFIG_PATA_PDC_OLD=m
+-CONFIG_PATA_QDI=m
+-CONFIG_PATA_RADISYS=m
+-CONFIG_PATA_RZ1000=m
+-CONFIG_PATA_SC1200=m
+-CONFIG_PATA_SERVERWORKS=m
+-CONFIG_PATA_PDC2027X=m
+-CONFIG_PATA_SIL680=m
+-CONFIG_PATA_SIS=m
+-CONFIG_PATA_VIA=m
+-CONFIG_PATA_WINBOND=m
+-CONFIG_PATA_WINBOND_VLB=m
+-CONFIG_PATA_SCH=m
+-CONFIG_MD=y
+-CONFIG_BLK_DEV_MD=y
+-CONFIG_MD_LINEAR=m
+-CONFIG_MD_RAID0=m
+-CONFIG_MD_RAID1=m
+-CONFIG_MD_RAID10=m
+-CONFIG_MD_RAID456=m
+-CONFIG_MD_RAID5_RESHAPE=y
+-CONFIG_MD_MULTIPATH=m
+-CONFIG_MD_FAULTY=m
+-CONFIG_BLK_DEV_DM=m
+-# CONFIG_DM_DEBUG is not set
+-CONFIG_DM_CRYPT=m
+-CONFIG_DM_SNAPSHOT=m
+-CONFIG_DM_MIRROR=m
+-CONFIG_DM_ZERO=m
+-CONFIG_DM_MULTIPATH=m
+-CONFIG_DM_DELAY=m
+-CONFIG_DM_RAID45=m
+-CONFIG_DM_UEVENT=y
+-CONFIG_FUSION=y
+-CONFIG_FUSION_SPI=m
+-CONFIG_FUSION_FC=m
+-CONFIG_FUSION_SAS=m
+-CONFIG_FUSION_MAX_SGE=128
+-CONFIG_FUSION_MAX_FC_SGE=256
+-CONFIG_FUSION_CTL=m
+-CONFIG_FUSION_LAN=m
+-# CONFIG_FUSION_LOGGING is not set
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-
+-#
+-# Enable only one of the two stacks, unless you know what you are doing
+-#
+-# CONFIG_FIREWIRE is not set
+-CONFIG_IEEE1394=m
+-CONFIG_IEEE1394_OHCI1394=m
+-CONFIG_IEEE1394_PCILYNX=m
+-CONFIG_IEEE1394_SBP2=m
+-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+-CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+-CONFIG_IEEE1394_ETH1394=m
+-CONFIG_IEEE1394_RAWIO=m
+-CONFIG_IEEE1394_VIDEO1394=m
+-CONFIG_IEEE1394_DV1394=m
+-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+-CONFIG_I2O=m
+-CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+-CONFIG_I2O_EXT_ADAPTEC=y
+-CONFIG_I2O_CONFIG=m
+-CONFIG_I2O_CONFIG_OLD_IOCTL=y
+-CONFIG_I2O_BUS=m
+-CONFIG_I2O_BLOCK=m
+-CONFIG_I2O_SCSI=m
+-CONFIG_I2O_PROC=m
+-# CONFIG_MACINTOSH_DRIVERS is not set
+-CONFIG_NETDEVICES=y
+-CONFIG_IFB=m
+-CONFIG_DUMMY=m
+-CONFIG_BONDING=m
+-CONFIG_MACVLAN=m
+-CONFIG_EQUALIZER=m
+-CONFIG_TUN=m
+-CONFIG_VETH=m
+-CONFIG_NET_SB1000=m
+-CONFIG_ARCNET=m
+-CONFIG_ARCNET_1201=m
+-CONFIG_ARCNET_1051=m
+-CONFIG_ARCNET_RAW=m
+-CONFIG_ARCNET_CAP=m
+-CONFIG_ARCNET_COM90xx=m
+-CONFIG_ARCNET_COM90xxIO=m
+-CONFIG_ARCNET_RIM_I=m
+-# CONFIG_ARCNET_COM20020 is not set
+-CONFIG_PHYLIB=m
+-
+-#
+-# MII PHY device drivers
+-#
+-CONFIG_MARVELL_PHY=m
+-CONFIG_DAVICOM_PHY=m
+-CONFIG_QSEMI_PHY=m
+-CONFIG_LXT_PHY=m
+-CONFIG_CICADA_PHY=m
+-CONFIG_VITESSE_PHY=m
+-CONFIG_SMSC_PHY=m
+-CONFIG_BROADCOM_PHY=m
+-CONFIG_ICPLUS_PHY=m
+-CONFIG_REALTEK_PHY=m
+-CONFIG_MDIO_BITBANG=m
+-CONFIG_NET_ETHERNET=y
+-CONFIG_MII=m
+-CONFIG_HAPPYMEAL=m
+-CONFIG_SUNGEM=m
+-CONFIG_CASSINI=m
+-CONFIG_NET_VENDOR_3COM=y
+-CONFIG_EL1=m
+-CONFIG_EL2=m
+-CONFIG_ELPLUS=m
+-CONFIG_EL16=m
+-CONFIG_EL3=m
+-CONFIG_3C515=m
+-CONFIG_VORTEX=m
+-CONFIG_TYPHOON=m
+-CONFIG_LANCE=m
+-CONFIG_NET_VENDOR_SMC=y
+-CONFIG_WD80x3=m
+-CONFIG_ULTRA=m
+-CONFIG_SMC9194=m
+-CONFIG_ENC28J60=m
+-# CONFIG_ENC28J60_WRITEVERIFY is not set
+-CONFIG_NET_VENDOR_RACAL=y
+-CONFIG_NI52=m
+-CONFIG_NI65=m
+-CONFIG_NET_TULIP=y
+-CONFIG_DE2104X=m
+-CONFIG_TULIP=m
+-# CONFIG_TULIP_MWI is not set
+-# CONFIG_TULIP_MMIO is not set
+-CONFIG_TULIP_NAPI=y
+-CONFIG_TULIP_NAPI_HW_MITIGATION=y
+-CONFIG_DE4X5=m
+-CONFIG_WINBOND_840=m
+-CONFIG_DM9102=m
+-CONFIG_ULI526X=m
+-CONFIG_PCMCIA_XIRCOM=m
+-CONFIG_AT1700=m
+-CONFIG_DEPCA=m
+-CONFIG_HP100=m
+-CONFIG_NET_ISA=y
+-CONFIG_E2100=m
+-CONFIG_EWRK3=m
+-CONFIG_EEXPRESS=m
+-CONFIG_EEXPRESS_PRO=m
+-CONFIG_HPLAN_PLUS=m
+-CONFIG_HPLAN=m
+-CONFIG_LP486E=m
+-CONFIG_ETH16I=m
+-CONFIG_NE2000=m
+-CONFIG_ZNET=m
+-CONFIG_SEEQ8005=m
+-# CONFIG_IBM_NEW_EMAC_ZMII is not set
+-# CONFIG_IBM_NEW_EMAC_RGMII is not set
+-# CONFIG_IBM_NEW_EMAC_TAH is not set
+-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+-CONFIG_NET_PCI=y
+-CONFIG_PCNET32=m
+-CONFIG_AMD8111_ETH=m
+-CONFIG_ADAPTEC_STARFIRE=m
+-CONFIG_AC3200=m
+-CONFIG_APRICOT=m
+-CONFIG_B44=m
+-CONFIG_B44_PCI_AUTOSELECT=y
+-CONFIG_B44_PCICORE_AUTOSELECT=y
+-CONFIG_B44_PCI=y
+-CONFIG_FORCEDETH=m
+-CONFIG_FORCEDETH_NAPI=y
+-CONFIG_CS89x0=m
+-CONFIG_EEPRO100=m
+-CONFIG_E100=m
+-CONFIG_FEALNX=m
+-CONFIG_NATSEMI=m
+-CONFIG_NE2K_PCI=m
+-CONFIG_8139CP=m
+-CONFIG_8139TOO=m
+-# CONFIG_8139TOO_PIO is not set
+-# CONFIG_8139TOO_TUNE_TWISTER is not set
+-CONFIG_8139TOO_8129=y
+-# CONFIG_8139_OLD_RX_RESET is not set
+-CONFIG_R6040=m
+-CONFIG_SIS900=m
+-CONFIG_EPIC100=m
+-CONFIG_SUNDANCE=m
+-# CONFIG_SUNDANCE_MMIO is not set
+-CONFIG_TLAN=m
+-CONFIG_VIA_RHINE=m
+-# CONFIG_VIA_RHINE_MMIO is not set
+-CONFIG_SC92031=m
+-CONFIG_NET_POCKET=y
+-CONFIG_ATP=m
+-CONFIG_DE600=m
+-CONFIG_DE620=m
+-CONFIG_ATL2=m
+-CONFIG_NETDEV_1000=y
+-CONFIG_ACENIC=m
+-# CONFIG_ACENIC_OMIT_TIGON_I is not set
+-CONFIG_DL2K=m
+-CONFIG_E1000=m
+-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+-CONFIG_E1000E=m
+-CONFIG_IP1000=m
+-CONFIG_IGB=m
+-CONFIG_IGB_LRO=y
+-CONFIG_NS83820=m
+-CONFIG_HAMACHI=m
+-CONFIG_YELLOWFIN=m
+-CONFIG_R8169=m
+-CONFIG_R8169_VLAN=y
+-CONFIG_SIS190=m
+-CONFIG_SKGE=m
+-# CONFIG_SKGE_DEBUG is not set
+-CONFIG_SKY2=m
+-# CONFIG_SKY2_DEBUG is not set
+-CONFIG_VIA_VELOCITY=m
+-CONFIG_TIGON3=m
+-CONFIG_BNX2=m
+-CONFIG_QLA3XXX=m
+-CONFIG_ATL1=m
+-CONFIG_ATL1E=m
+-CONFIG_NETDEV_10000=y
+-CONFIG_CHELSIO_T1=m
+-CONFIG_CHELSIO_T1_1G=y
+-CONFIG_CHELSIO_T3=m
+-CONFIG_IXGBE=m
+-CONFIG_IXGBE_LRO=y
+-CONFIG_IXGBE_DCB=y
+-CONFIG_IXGB=m
+-CONFIG_S2IO=m
+-CONFIG_MYRI10GE=m
+-CONFIG_NETXEN_NIC=m
+-CONFIG_NIU=m
+-CONFIG_MLX4_CORE=m
+-CONFIG_MLX4_DEBUG=y
+-CONFIG_TEHUTI=m
+-CONFIG_BNX2X=m
+-CONFIG_SFC=m
+-# CONFIG_SFC_RESOURCE is not set
+-CONFIG_TR=y
+-CONFIG_IBMTR=m
+-CONFIG_IBMOL=m
+-CONFIG_IBMLS=m
+-CONFIG_3C359=m
+-CONFIG_TMS380TR=m
+-CONFIG_TMSPCI=m
+-CONFIG_SKISA=m
+-CONFIG_PROTEON=m
+-CONFIG_ABYSS=m
+-CONFIG_SMCTR=m
+-
+-#
+-# Wireless LAN
+-#
+-CONFIG_WLAN_PRE80211=y
+-CONFIG_STRIP=m
+-# CONFIG_ARLAN is not set
+-CONFIG_WAVELAN=m
+-CONFIG_PCMCIA_WAVELAN=m
+-CONFIG_PCMCIA_NETWAVE=m
+-CONFIG_WLAN_80211=y
+-CONFIG_PCMCIA_RAYCS=m
+-CONFIG_IPW2100=m
+-CONFIG_IPW2100_MONITOR=y
+-# CONFIG_IPW2100_DEBUG is not set
+-CONFIG_IPW2200=m
+-CONFIG_IPW2200_MONITOR=y
+-CONFIG_IPW2200_RADIOTAP=y
+-CONFIG_IPW2200_PROMISCUOUS=y
+-CONFIG_IPW2200_QOS=y
+-# CONFIG_IPW2200_DEBUG is not set
+-CONFIG_LIBERTAS=m
+-CONFIG_LIBERTAS_USB=m
+-CONFIG_LIBERTAS_CS=m
+-CONFIG_LIBERTAS_SDIO=m
+-# CONFIG_LIBERTAS_DEBUG is not set
+-CONFIG_AIRO=m
+-CONFIG_HERMES=m
+-CONFIG_PLX_HERMES=m
+-CONFIG_TMD_HERMES=m
+-CONFIG_NORTEL_HERMES=m
+-CONFIG_PCI_HERMES=m
+-CONFIG_PCMCIA_HERMES=m
+-CONFIG_PCMCIA_SPECTRUM=m
+-CONFIG_ATMEL=m
+-CONFIG_PCI_ATMEL=m
+-CONFIG_PCMCIA_ATMEL=m
+-CONFIG_AIRO_CS=m
+-CONFIG_PCMCIA_WL3501=m
+-CONFIG_PRISM54=m
+-CONFIG_USB_ZD1201=m
+-CONFIG_USB_NET_RNDIS_WLAN=m
+-CONFIG_RTL8180=m
+-CONFIG_RTL8187=m
+-CONFIG_ADM8211=m
+-CONFIG_MAC80211_HWSIM=m
+-CONFIG_P54_COMMON=m
+-CONFIG_P54_USB=m
+-CONFIG_P54_PCI=m
+-CONFIG_ATH5K=m
+-# CONFIG_ATH5K_DEBUG is not set
+-CONFIG_ATH9K=m
+-CONFIG_IWLWIFI=m
+-CONFIG_IWLCORE=m
+-CONFIG_IWLWIFI_LEDS=y
+-CONFIG_IWLWIFI_RFKILL=y
+-# CONFIG_IWLWIFI_DEBUG is not set
+-CONFIG_IWLAGN=m
+-CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWLAGN_LEDS=y
+-CONFIG_IWL4965=y
+-CONFIG_IWL5000=y
+-CONFIG_IWL3945=m
+-CONFIG_IWL3945_RFKILL=y
+-CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWL3945_LEDS=y
+-# CONFIG_IWL3945_DEBUG is not set
+-CONFIG_HOSTAP=m
+-CONFIG_HOSTAP_FIRMWARE=y
+-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+-CONFIG_HOSTAP_PLX=m
+-CONFIG_HOSTAP_PCI=m
+-CONFIG_HOSTAP_CS=m
+-CONFIG_B43=m
+-CONFIG_B43_PCI_AUTOSELECT=y
+-CONFIG_B43_PCICORE_AUTOSELECT=y
+-CONFIG_B43_PCMCIA=y
+-CONFIG_B43_PIO=y
+-CONFIG_B43_LEDS=y
+-CONFIG_B43_RFKILL=y
+-# CONFIG_B43_DEBUG is not set
+-CONFIG_B43LEGACY=m
+-CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+-CONFIG_B43LEGACY_LEDS=y
+-CONFIG_B43LEGACY_RFKILL=y
+-# CONFIG_B43LEGACY_DEBUG is not set
+-CONFIG_B43LEGACY_DMA=y
+-CONFIG_B43LEGACY_PIO=y
+-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+-# CONFIG_B43LEGACY_DMA_MODE is not set
+-# CONFIG_B43LEGACY_PIO_MODE is not set
+-CONFIG_ZD1211RW=m
+-# CONFIG_ZD1211RW_DEBUG is not set
+-CONFIG_RT2X00=m
+-CONFIG_RT2X00_LIB=m
+-CONFIG_RT2X00_LIB_PCI=m
+-CONFIG_RT2X00_LIB_USB=m
+-CONFIG_RT2X00_LIB_FIRMWARE=y
+-CONFIG_RT2X00_LIB_RFKILL=y
+-CONFIG_RT2X00_LIB_LEDS=y
+-CONFIG_RT2400PCI=m
+-CONFIG_RT2400PCI_RFKILL=y
+-CONFIG_RT2400PCI_LEDS=y
+-CONFIG_RT2500PCI=m
+-CONFIG_RT2500PCI_RFKILL=y
+-CONFIG_RT2500PCI_LEDS=y
+-CONFIG_RT61PCI=m
+-CONFIG_RT61PCI_RFKILL=y
+-CONFIG_RT61PCI_LEDS=y
+-CONFIG_RT2500USB=m
+-CONFIG_RT2500USB_LEDS=y
+-CONFIG_RT73USB=m
+-CONFIG_RT73USB_LEDS=y
+-# CONFIG_RT2X00_LIB_DEBUGFS is not set
+-# CONFIG_RT2X00_DEBUG is not set
+-
+-#
+-# USB Network Adapters
+-#
+-CONFIG_USB_CATC=m
+-CONFIG_USB_KAWETH=m
+-CONFIG_USB_PEGASUS=m
+-CONFIG_USB_RTL8150=m
+-CONFIG_USB_USBNET=m
+-CONFIG_USB_NET_AX8817X=m
+-CONFIG_USB_NET_CDCETHER=m
+-CONFIG_USB_NET_DM9601=m
+-CONFIG_USB_NET_GL620A=m
+-CONFIG_USB_NET_NET1080=m
+-CONFIG_USB_NET_PLUSB=m
+-CONFIG_USB_NET_MCS7830=m
+-CONFIG_USB_NET_RNDIS_HOST=m
+-CONFIG_USB_NET_CDC_SUBSET=m
+-CONFIG_USB_ALI_M5632=y
+-CONFIG_USB_AN2720=y
+-CONFIG_USB_BELKIN=y
+-CONFIG_USB_ARMLINUX=y
+-CONFIG_USB_EPSON2888=y
+-CONFIG_USB_KC2190=y
+-CONFIG_USB_NET_ZAURUS=m
+-CONFIG_USB_HSO=m
+-CONFIG_NET_PCMCIA=y
+-CONFIG_PCMCIA_3C589=m
+-CONFIG_PCMCIA_3C574=m
+-CONFIG_PCMCIA_FMVJ18X=m
+-CONFIG_PCMCIA_PCNET=m
+-CONFIG_PCMCIA_NMCLAN=m
+-CONFIG_PCMCIA_SMC91C92=m
+-CONFIG_PCMCIA_XIRC2PS=m
+-CONFIG_PCMCIA_AXNET=m
+-CONFIG_PCMCIA_IBMTR=m
+-CONFIG_WAN=y
+-CONFIG_HOSTESS_SV11=m
+-# CONFIG_COSA is not set
+-CONFIG_LANMEDIA=m
+-CONFIG_SEALEVEL_4021=m
+-CONFIG_HDLC=m
+-CONFIG_HDLC_RAW=m
+-CONFIG_HDLC_RAW_ETH=m
+-CONFIG_HDLC_CISCO=m
+-CONFIG_HDLC_FR=m
+-CONFIG_HDLC_PPP=m
+-CONFIG_HDLC_X25=m
+-CONFIG_PCI200SYN=m
+-CONFIG_WANXL=m
+-# CONFIG_PC300 is not set
+-CONFIG_PC300TOO=m
+-CONFIG_N2=m
+-CONFIG_C101=m
+-CONFIG_FARSYNC=m
+-# CONFIG_DSCC4 is not set
+-CONFIG_DLCI=m
+-CONFIG_DLCI_MAX=8
+-CONFIG_SDLA=m
+-# CONFIG_WAN_ROUTER_DRIVERS is not set
+-CONFIG_LAPBETHER=m
+-CONFIG_X25_ASY=m
+-# CONFIG_SBNI is not set
+-CONFIG_ATM_DRIVERS=y
+-CONFIG_ATM_DUMMY=m
+-CONFIG_ATM_TCP=m
+-CONFIG_ATM_LANAI=m
+-CONFIG_ATM_ENI=m
+-# CONFIG_ATM_ENI_DEBUG is not set
+-# CONFIG_ATM_ENI_TUNE_BURST is not set
+-CONFIG_ATM_FIRESTREAM=m
+-CONFIG_ATM_ZATM=m
+-# CONFIG_ATM_ZATM_DEBUG is not set
+-CONFIG_ATM_NICSTAR=m
+-CONFIG_ATM_NICSTAR_USE_SUNI=y
+-CONFIG_ATM_NICSTAR_USE_IDT77105=y
+-CONFIG_ATM_IDT77252=m
+-# CONFIG_ATM_IDT77252_DEBUG is not set
+-CONFIG_ATM_IDT77252_RCV_ALL=y
+-CONFIG_ATM_IDT77252_USE_SUNI=y
+-CONFIG_ATM_AMBASSADOR=m
+-# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+-CONFIG_ATM_HORIZON=m
+-# CONFIG_ATM_HORIZON_DEBUG is not set
+-CONFIG_ATM_IA=m
+-# CONFIG_ATM_IA_DEBUG is not set
+-CONFIG_ATM_FORE200E=m
+-CONFIG_ATM_FORE200E_USE_TASKLET=y
+-CONFIG_ATM_FORE200E_TX_RETRY=16
+-CONFIG_ATM_FORE200E_DEBUG=0
+-CONFIG_ATM_HE=m
+-CONFIG_ATM_HE_USE_SUNI=y
+-CONFIG_FDDI=y
+-# CONFIG_DEFXX is not set
+-CONFIG_SKFP=m
+-CONFIG_HIPPI=y
+-CONFIG_ROADRUNNER=m
+-CONFIG_ROADRUNNER_LARGE_RINGS=y
+-CONFIG_PLIP=m
+-CONFIG_PPP=m
+-CONFIG_PPP_MULTILINK=y
+-CONFIG_PPP_FILTER=y
+-CONFIG_PPP_ASYNC=m
+-CONFIG_PPP_SYNC_TTY=m
+-CONFIG_PPP_DEFLATE=m
+-CONFIG_PPP_BSDCOMP=m
+-CONFIG_PPP_MPPE=m
+-CONFIG_PPPOE=m
+-CONFIG_PPPOATM=m
+-CONFIG_PPPOL2TP=m
+-CONFIG_SLIP=m
+-CONFIG_SLIP_COMPRESSED=y
+-CONFIG_SLHC=m
+-CONFIG_SLIP_SMART=y
+-CONFIG_SLIP_MODE_SLIP6=y
+-CONFIG_NET_FC=y
+-CONFIG_NETCONSOLE=m
+-CONFIG_NETCONSOLE_DYNAMIC=y
+-CONFIG_NETPOLL=y
+-CONFIG_NETPOLL_TRAP=y
+-CONFIG_NET_POLL_CONTROLLER=y
+-CONFIG_VIRTIO_NET=m
+-CONFIG_ISDN=y
+-CONFIG_MISDN=m
+-CONFIG_MISDN_DSP=m
+-CONFIG_MISDN_L1OIP=m
+-
+-#
+-# mISDN hardware drivers
+-#
+-CONFIG_MISDN_HFCPCI=m
+-CONFIG_MISDN_HFCMULTI=m
+-CONFIG_ISDN_I4L=m
+-CONFIG_ISDN_PPP=y
+-CONFIG_ISDN_PPP_VJ=y
+-CONFIG_ISDN_MPP=y
+-CONFIG_IPPP_FILTER=y
+-CONFIG_ISDN_PPP_BSDCOMP=m
+-CONFIG_ISDN_AUDIO=y
+-CONFIG_ISDN_TTY_FAX=y
+-CONFIG_ISDN_X25=y
+-
+-#
+-# ISDN feature submodules
+-#
+-CONFIG_ISDN_DIVERSION=m
+-
+-#
+-# ISDN4Linux hardware drivers
+-#
+-
+-#
+-# Passive cards
+-#
+-CONFIG_ISDN_DRV_HISAX=m
+-
+-#
+-# D-channel protocol features
+-#
+-CONFIG_HISAX_EURO=y
+-CONFIG_DE_AOC=y
+-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+-# CONFIG_HISAX_NO_LLC is not set
+-# CONFIG_HISAX_NO_KEYPAD is not set
+-CONFIG_HISAX_1TR6=y
+-CONFIG_HISAX_NI1=y
+-CONFIG_HISAX_MAX_CARDS=8
+-
+-#
+-# HiSax supported cards
+-#
+-CONFIG_HISAX_16_0=y
+-CONFIG_HISAX_16_3=y
+-CONFIG_HISAX_TELESPCI=y
+-CONFIG_HISAX_S0BOX=y
+-CONFIG_HISAX_AVM_A1=y
+-CONFIG_HISAX_FRITZPCI=y
+-CONFIG_HISAX_AVM_A1_PCMCIA=y
+-CONFIG_HISAX_ELSA=y
+-CONFIG_HISAX_IX1MICROR2=y
+-CONFIG_HISAX_DIEHLDIVA=y
+-CONFIG_HISAX_ASUSCOM=y
+-CONFIG_HISAX_TELEINT=y
+-CONFIG_HISAX_HFCS=y
+-CONFIG_HISAX_SEDLBAUER=y
+-CONFIG_HISAX_SPORTSTER=y
+-CONFIG_HISAX_MIC=y
+-CONFIG_HISAX_NETJET=y
+-CONFIG_HISAX_NETJET_U=y
+-CONFIG_HISAX_NICCY=y
+-CONFIG_HISAX_ISURF=y
+-CONFIG_HISAX_HSTSAPHIR=y
+-CONFIG_HISAX_BKM_A4T=y
+-CONFIG_HISAX_SCT_QUADRO=y
+-CONFIG_HISAX_GAZEL=y
+-CONFIG_HISAX_HFC_PCI=y
+-CONFIG_HISAX_W6692=y
+-CONFIG_HISAX_HFC_SX=y
+-CONFIG_HISAX_ENTERNOW_PCI=y
+-CONFIG_HISAX_DEBUG=y
+-
+-#
+-# HiSax PCMCIA card service modules
+-#
+-CONFIG_HISAX_SEDLBAUER_CS=m
+-CONFIG_HISAX_ELSA_CS=m
+-CONFIG_HISAX_AVM_A1_CS=m
+-CONFIG_HISAX_TELES_CS=m
+-
+-#
+-# HiSax sub driver modules
+-#
+-CONFIG_HISAX_ST5481=m
+-CONFIG_HISAX_HFCUSB=m
+-CONFIG_HISAX_HFC4S8S=m
+-CONFIG_HISAX_FRITZ_PCIPNP=m
+-CONFIG_HISAX_HDLC=y
+-
+-#
+-# Active cards
+-#
+-CONFIG_ISDN_DRV_ICN=m
+-CONFIG_ISDN_DRV_PCBIT=m
+-CONFIG_ISDN_DRV_SC=m
+-CONFIG_ISDN_DRV_ACT2000=m
+-CONFIG_HYSDN=m
+-CONFIG_HYSDN_CAPI=y
+-CONFIG_ISDN_DRV_GIGASET=m
+-CONFIG_GIGASET_BASE=m
+-CONFIG_GIGASET_M105=m
+-CONFIG_GIGASET_M101=m
+-# CONFIG_GIGASET_DEBUG is not set
+-CONFIG_GIGASET_UNDOCREQ=y
+-CONFIG_ISDN_CAPI=m
+-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+-CONFIG_CAPI_TRACE=y
+-CONFIG_ISDN_CAPI_MIDDLEWARE=y
+-CONFIG_ISDN_CAPI_CAPI20=m
+-CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+-CONFIG_ISDN_CAPI_CAPIFS=m
+-CONFIG_ISDN_CAPI_CAPIDRV=m
+-
+-#
+-# CAPI hardware drivers
+-#
+-CONFIG_CAPI_AVM=y
+-CONFIG_ISDN_DRV_AVMB1_B1ISA=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+-CONFIG_ISDN_DRV_AVMB1_T1ISA=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+-CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+-CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_C4=m
+-CONFIG_CAPI_EICON=y
+-CONFIG_ISDN_DIVAS=m
+-CONFIG_ISDN_DIVAS_BRIPCI=y
+-CONFIG_ISDN_DIVAS_PRIPCI=y
+-CONFIG_ISDN_DIVAS_DIVACAPI=m
+-CONFIG_ISDN_DIVAS_USERIDI=m
+-CONFIG_ISDN_DIVAS_MAINT=m
+-CONFIG_PHONE=m
+-CONFIG_PHONE_IXJ=m
+-CONFIG_PHONE_IXJ_PCMCIA=m
+-
+-#
+-# Input device support
+-#
+-CONFIG_INPUT=y
+-CONFIG_INPUT_FF_MEMLESS=m
+-CONFIG_INPUT_POLLDEV=m
+-
+-#
+-# Userland interfaces
+-#
+-CONFIG_INPUT_MOUSEDEV=y
+-CONFIG_INPUT_MOUSEDEV_PSAUX=y
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+-CONFIG_INPUT_JOYDEV=m
+-CONFIG_INPUT_EVDEV=y
+-# CONFIG_INPUT_EVBUG is not set
+-
+-#
+-# Input Device Drivers
+-#
+-CONFIG_INPUT_KEYBOARD=y
+-CONFIG_KEYBOARD_ATKBD=y
+-CONFIG_KEYBOARD_SUNKBD=m
+-# CONFIG_KEYBOARD_LKKBD is not set
+-CONFIG_KEYBOARD_XTKBD=m
+-CONFIG_KEYBOARD_NEWTON=m
+-# CONFIG_KEYBOARD_STOWAWAY is not set
+-CONFIG_KEYBOARD_GPIO=m
+-CONFIG_INPUT_MOUSE=y
+-CONFIG_MOUSE_PS2=y
+-CONFIG_MOUSE_PS2_ALPS=y
+-CONFIG_MOUSE_PS2_LOGIPS2PP=y
+-CONFIG_MOUSE_PS2_SYNAPTICS=y
+-CONFIG_MOUSE_PS2_LIFEBOOK=y
+-CONFIG_MOUSE_PS2_TRACKPOINT=y
+-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+-CONFIG_MOUSE_SERIAL=m
+-CONFIG_MOUSE_APPLETOUCH=m
+-CONFIG_MOUSE_BCM5974=m
+-CONFIG_MOUSE_INPORT=m
+-CONFIG_MOUSE_ATIXL=y
+-CONFIG_MOUSE_LOGIBM=m
+-CONFIG_MOUSE_PC110PAD=m
+-# CONFIG_MOUSE_VSXXXAA is not set
+-CONFIG_MOUSE_GPIO=m
+-CONFIG_INPUT_JOYSTICK=y
+-CONFIG_JOYSTICK_ANALOG=m
+-CONFIG_JOYSTICK_A3D=m
+-CONFIG_JOYSTICK_ADI=m
+-CONFIG_JOYSTICK_COBRA=m
+-CONFIG_JOYSTICK_GF2K=m
+-CONFIG_JOYSTICK_GRIP=m
+-CONFIG_JOYSTICK_GRIP_MP=m
+-CONFIG_JOYSTICK_GUILLEMOT=m
+-CONFIG_JOYSTICK_INTERACT=m
+-CONFIG_JOYSTICK_SIDEWINDER=m
+-CONFIG_JOYSTICK_TMDC=m
+-CONFIG_JOYSTICK_IFORCE=m
+-CONFIG_JOYSTICK_IFORCE_USB=y
+-CONFIG_JOYSTICK_IFORCE_232=y
+-CONFIG_JOYSTICK_WARRIOR=m
+-CONFIG_JOYSTICK_MAGELLAN=m
+-CONFIG_JOYSTICK_SPACEORB=m
+-CONFIG_JOYSTICK_SPACEBALL=m
+-CONFIG_JOYSTICK_STINGER=m
+-CONFIG_JOYSTICK_TWIDJOY=m
+-CONFIG_JOYSTICK_ZHENHUA=m
+-CONFIG_JOYSTICK_DB9=m
+-CONFIG_JOYSTICK_GAMECON=m
+-CONFIG_JOYSTICK_TURBOGRAFX=m
+-CONFIG_JOYSTICK_JOYDUMP=m
+-CONFIG_JOYSTICK_XPAD=m
+-CONFIG_JOYSTICK_XPAD_FF=y
+-CONFIG_JOYSTICK_XPAD_LEDS=y
+-CONFIG_INPUT_TABLET=y
+-CONFIG_TABLET_USB_ACECAD=m
+-CONFIG_TABLET_USB_AIPTEK=m
+-CONFIG_TABLET_USB_GTCO=m
+-CONFIG_TABLET_USB_KBTAB=m
+-CONFIG_TABLET_USB_WACOM=m
+-CONFIG_INPUT_TOUCHSCREEN=y
+-CONFIG_TOUCHSCREEN_ADS7846=m
+-CONFIG_TOUCHSCREEN_FUJITSU=m
+-CONFIG_TOUCHSCREEN_GUNZE=m
+-CONFIG_TOUCHSCREEN_ELO=m
+-CONFIG_TOUCHSCREEN_ELOUSB=m
+-CONFIG_TOUCHSCREEN_MTOUCH=m
+-CONFIG_TOUCHSCREEN_INEXIO=m
+-CONFIG_TOUCHSCREEN_MK712=m
+-CONFIG_TOUCHSCREEN_HTCPEN=m
+-CONFIG_TOUCHSCREEN_PENMOUNT=m
+-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+-CONFIG_TOUCHSCREEN_TOUCHWIN=m
+-CONFIG_TOUCHSCREEN_UCB1400=m
+-CONFIG_TOUCHSCREEN_WM97XX=m
+-CONFIG_TOUCHSCREEN_WM9705=y
+-CONFIG_TOUCHSCREEN_WM9712=y
+-CONFIG_TOUCHSCREEN_WM9713=y
+-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+-CONFIG_TOUCHSCREEN_USB_EGALAX=y
+-CONFIG_TOUCHSCREEN_USB_PANJIT=y
+-CONFIG_TOUCHSCREEN_USB_3M=y
+-CONFIG_TOUCHSCREEN_USB_ITM=y
+-CONFIG_TOUCHSCREEN_USB_ETURBO=y
+-CONFIG_TOUCHSCREEN_USB_GUNZE=y
+-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+-CONFIG_TOUCHSCREEN_USB_GOTOP=y
+-CONFIG_TOUCHSCREEN_TOUCHIT213=m
+-CONFIG_INPUT_MISC=y
+-CONFIG_INPUT_PCSPKR=m
+-CONFIG_INPUT_APANEL=m
+-CONFIG_INPUT_WISTRON_BTNS=m
+-CONFIG_INPUT_ATLAS_BTNS=m
+-CONFIG_INPUT_ATI_REMOTE=m
+-CONFIG_INPUT_ATI_REMOTE2=m
+-CONFIG_INPUT_KEYSPAN_REMOTE=m
+-CONFIG_INPUT_POWERMATE=m
+-CONFIG_INPUT_YEALINK=m
+-CONFIG_INPUT_UINPUT=m
+-
+-#
+-# Hardware I/O ports
+-#
+-CONFIG_SERIO=y
+-CONFIG_SERIO_I8042=y
+-CONFIG_SERIO_SERPORT=m
+-CONFIG_SERIO_CT82C710=m
+-CONFIG_SERIO_PARKBD=m
+-CONFIG_SERIO_PCIPS2=m
+-CONFIG_SERIO_LIBPS2=y
+-CONFIG_SERIO_RAW=m
+-CONFIG_GAMEPORT=m
+-CONFIG_GAMEPORT_NS558=m
+-CONFIG_GAMEPORT_L4=m
+-CONFIG_GAMEPORT_EMU10K1=m
+-CONFIG_GAMEPORT_FM801=m
+-
+-#
+-# Character devices
+-#
+-CONFIG_VT=y
+-CONFIG_CONSOLE_TRANSLATIONS=y
+-CONFIG_VT_CONSOLE=y
+-CONFIG_HW_CONSOLE=y
+-CONFIG_VT_HW_CONSOLE_BINDING=y
+-CONFIG_DEVKMEM=y
+-CONFIG_SERIAL_NONSTANDARD=y
+-CONFIG_COMPUTONE=m
+-CONFIG_ROCKETPORT=m
+-CONFIG_CYCLADES=m
+-CONFIG_CYZ_INTR=y
+-CONFIG_DIGIEPCA=m
+-CONFIG_ESPSERIAL=m
+-CONFIG_MOXA_INTELLIO=m
+-CONFIG_MOXA_SMARTIO=m
+-CONFIG_ISI=m
+-CONFIG_SYNCLINK=m
+-CONFIG_SYNCLINKMP=m
+-CONFIG_SYNCLINK_GT=m
+-CONFIG_N_HDLC=m
+-CONFIG_RISCOM8=m
+-CONFIG_SPECIALIX=m
+-CONFIG_SX=m
+-CONFIG_RIO=m
+-CONFIG_RIO_OLDPCI=y
+-CONFIG_STALDRV=y
+-CONFIG_NOZOMI=m
+-
+-#
+-# Serial drivers
+-#
+-CONFIG_SERIAL_8250=y
+-CONFIG_SERIAL_8250_CONSOLE=y
+-CONFIG_FIX_EARLYCON_MEM=y
+-CONFIG_SERIAL_8250_PCI=y
+-CONFIG_SERIAL_8250_PNP=y
+-CONFIG_SERIAL_8250_CS=m
+-CONFIG_SERIAL_8250_NR_UARTS=16
+-CONFIG_SERIAL_8250_RUNTIME_UARTS=8
+-CONFIG_SERIAL_8250_EXTENDED=y
+-CONFIG_SERIAL_8250_MANY_PORTS=y
+-CONFIG_SERIAL_8250_FOURPORT=m
+-CONFIG_SERIAL_8250_ACCENT=m
+-CONFIG_SERIAL_8250_BOCA=m
+-CONFIG_SERIAL_8250_EXAR_ST16C554=m
+-CONFIG_SERIAL_8250_HUB6=m
+-CONFIG_SERIAL_8250_SHARE_IRQ=y
+-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+-CONFIG_SERIAL_8250_RSA=y
+-
+-#
+-# Non-8250 serial port support
+-#
+-CONFIG_SERIAL_CORE=y
+-CONFIG_SERIAL_CORE_CONSOLE=y
+-CONFIG_SERIAL_JSM=m
+-CONFIG_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=0
+-CONFIG_PRINTER=m
+-# CONFIG_LP_CONSOLE is not set
+-CONFIG_PPDEV=m
+-CONFIG_HVC_DRIVER=y
+-CONFIG_VIRTIO_CONSOLE=m
+-CONFIG_IPMI_HANDLER=m
+-CONFIG_IPMI_PANIC_EVENT=y
+-CONFIG_IPMI_PANIC_STRING=y
+-CONFIG_IPMI_DEVICE_INTERFACE=m
+-CONFIG_IPMI_SI=m
+-CONFIG_IPMI_WATCHDOG=m
+-CONFIG_IPMI_POWEROFF=m
+-CONFIG_HW_RANDOM=y
+-CONFIG_HW_RANDOM_INTEL=m
+-CONFIG_HW_RANDOM_AMD=m
+-CONFIG_HW_RANDOM_GEODE=m
+-CONFIG_HW_RANDOM_VIA=m
+-CONFIG_HW_RANDOM_VIRTIO=m
+-CONFIG_NVRAM=m
+-CONFIG_DTLK=m
+-CONFIG_R3964=m
+-CONFIG_APPLICOM=m
+-CONFIG_SONYPI=m
+-
+-#
+-# PCMCIA character devices
+-#
+-CONFIG_SYNCLINK_CS=m
+-CONFIG_CARDMAN_4000=m
+-CONFIG_CARDMAN_4040=m
+-CONFIG_IPWIRELESS=m
+-CONFIG_MWAVE=m
+-CONFIG_SCx200_GPIO=m
+-CONFIG_PC8736x_GPIO=m
+-CONFIG_NSC_GPIO=m
+-CONFIG_CS5535_GPIO=m
+-CONFIG_RAW_DRIVER=m
+-CONFIG_MAX_RAW_DEVS=4096
+-CONFIG_HPET=y
+-CONFIG_HPET_MMAP=y
+-CONFIG_HANGCHECK_TIMER=m
+-CONFIG_TCG_TPM=m
+-CONFIG_TCG_TIS=m
+-CONFIG_TCG_NSC=m
+-CONFIG_TCG_ATMEL=m
+-CONFIG_TCG_INFINEON=m
+-CONFIG_TELCLOCK=m
+-CONFIG_DEVPORT=y
+-CONFIG_CRASHER=m
+-CONFIG_I2C=m
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=m
+-CONFIG_I2C_HELPER_AUTO=y
+-CONFIG_I2C_ALGOBIT=m
+-CONFIG_I2C_ALGOPCA=m
+-
+-#
+-# I2C Hardware Bus support
+-#
+-
+-#
+-# PC SMBus host controller drivers
+-#
+-CONFIG_I2C_ALI1535=m
+-CONFIG_I2C_ALI1563=m
+-CONFIG_I2C_ALI15X3=m
+-CONFIG_I2C_AMD756=m
+-CONFIG_I2C_AMD756_S4882=m
+-CONFIG_I2C_AMD8111=m
+-CONFIG_I2C_I801=m
+-CONFIG_I2C_ISCH=m
+-CONFIG_I2C_PIIX4=m
+-CONFIG_I2C_NFORCE2=m
+-CONFIG_I2C_NFORCE2_S4985=m
+-CONFIG_I2C_SIS5595=m
+-CONFIG_I2C_SIS630=m
+-CONFIG_I2C_SIS96X=m
+-CONFIG_I2C_VIA=m
+-CONFIG_I2C_VIAPRO=m
+-
+-#
+-# I2C system bus drivers (mostly embedded / system-on-chip)
+-#
+-CONFIG_I2C_GPIO=m
+-CONFIG_I2C_OCORES=m
+-# CONFIG_I2C_SIMTEC is not set
+-
+-#
+-# External I2C/SMBus adapter drivers
+-#
+-CONFIG_I2C_PARPORT=m
+-CONFIG_I2C_PARPORT_LIGHT=m
+-CONFIG_I2C_TAOS_EVM=m
+-CONFIG_I2C_TINY_USB=m
+-
+-#
+-# Graphics adapter I2C/DDC channel drivers
+-#
+-CONFIG_I2C_VOODOO3=m
+-
+-#
+-# Other I2C/SMBus bus drivers
+-#
+-CONFIG_I2C_PCA_ISA=m
+-CONFIG_I2C_PCA_PLATFORM=m
+-CONFIG_I2C_STUB=m
+-CONFIG_SCx200_I2C=m
+-CONFIG_SCx200_I2C_SCL=12
+-CONFIG_SCx200_I2C_SDA=13
+-CONFIG_SCx200_ACB=m
+-
+-#
+-# Miscellaneous I2C Chip support
+-#
+-CONFIG_DS1682=m
+-CONFIG_AT24=m
+-CONFIG_SENSORS_EEPROM=m
+-CONFIG_SENSORS_PCF8591=m
+-# CONFIG_TPS65010 is not set
+-CONFIG_SENSORS_MAX6875=m
+-CONFIG_SENSORS_TSL2550=m
+-# CONFIG_I2C_DEBUG_CORE is not set
+-# CONFIG_I2C_DEBUG_ALGO is not set
+-# CONFIG_I2C_DEBUG_BUS is not set
+-# CONFIG_I2C_DEBUG_CHIP is not set
+-CONFIG_SPI=y
+-CONFIG_SPI_DEBUG=y
+-CONFIG_SPI_MASTER=y
+-
+-#
+-# SPI Master Controller Drivers
+-#
+-CONFIG_SPI_BITBANG=m
+-CONFIG_SPI_BUTTERFLY=m
+-CONFIG_SPI_LM70_LLP=m
+-
+-#
+-# SPI Protocol Masters
+-#
+-CONFIG_SPI_AT25=m
+-CONFIG_SPI_SPIDEV=m
+-CONFIG_SPI_TLE62X0=m
+-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+-CONFIG_GPIOLIB=y
+-# CONFIG_DEBUG_GPIO is not set
+-CONFIG_GPIO_SYSFS=y
+-
+-#
+-# I2C GPIO expanders:
+-#
+-CONFIG_GPIO_MAX732X=m
+-CONFIG_GPIO_PCA953X=m
+-CONFIG_GPIO_PCF857X=m
+-
+-#
+-# PCI GPIO expanders:
+-#
+-
+-#
+-# SPI GPIO expanders:
+-#
+-CONFIG_GPIO_MAX7301=m
+-CONFIG_GPIO_MCP23S08=m
+-CONFIG_W1=m
+-CONFIG_W1_CON=y
+-
+-#
+-# 1-wire Bus Masters
+-#
+-CONFIG_W1_MASTER_MATROX=m
+-CONFIG_W1_MASTER_DS2490=m
+-CONFIG_W1_MASTER_DS2482=m
+-CONFIG_W1_MASTER_GPIO=m
+-
+-#
+-# 1-wire Slaves
+-#
+-CONFIG_W1_SLAVE_THERM=m
+-CONFIG_W1_SLAVE_SMEM=m
+-CONFIG_W1_SLAVE_DS2433=m
+-CONFIG_W1_SLAVE_DS2433_CRC=y
+-CONFIG_W1_SLAVE_DS2760=m
+-CONFIG_POWER_SUPPLY=y
+-# CONFIG_POWER_SUPPLY_DEBUG is not set
+-CONFIG_PDA_POWER=m
+-CONFIG_BATTERY_DS2760=m
+-CONFIG_BATTERY_OLPC=m
+-CONFIG_HWMON=m
+-CONFIG_HWMON_VID=m
+-CONFIG_SENSORS_ABITUGURU=m
+-CONFIG_SENSORS_ABITUGURU3=m
+-CONFIG_SENSORS_AD7414=m
+-CONFIG_SENSORS_AD7418=m
+-CONFIG_SENSORS_ADCXX=m
+-CONFIG_SENSORS_ADM1021=m
+-CONFIG_SENSORS_ADM1025=m
+-CONFIG_SENSORS_ADM1026=m
+-CONFIG_SENSORS_ADM1029=m
+-CONFIG_SENSORS_ADM1031=m
+-CONFIG_SENSORS_ADM9240=m
+-CONFIG_SENSORS_ADT7470=m
+-CONFIG_SENSORS_ADT7473=m
+-CONFIG_SENSORS_K8TEMP=m
+-CONFIG_SENSORS_ASB100=m
+-CONFIG_SENSORS_ATXP1=m
+-CONFIG_SENSORS_DS1621=m
+-CONFIG_SENSORS_I5K_AMB=m
+-CONFIG_SENSORS_F71805F=m
+-CONFIG_SENSORS_F71882FG=m
+-CONFIG_SENSORS_F75375S=m
+-CONFIG_SENSORS_FSCHER=m
+-CONFIG_SENSORS_FSCPOS=m
+-CONFIG_SENSORS_FSCHMD=m
+-CONFIG_SENSORS_GL518SM=m
+-CONFIG_SENSORS_GL520SM=m
+-CONFIG_SENSORS_CORETEMP=m
+-CONFIG_SENSORS_IBMAEM=m
+-CONFIG_SENSORS_IBMPEX=m
+-CONFIG_SENSORS_IT87=m
+-CONFIG_SENSORS_LM63=m
+-CONFIG_SENSORS_LM70=m
+-CONFIG_SENSORS_LM75=m
+-CONFIG_SENSORS_LM77=m
+-CONFIG_SENSORS_LM78=m
+-CONFIG_SENSORS_LM80=m
+-CONFIG_SENSORS_LM83=m
+-CONFIG_SENSORS_LM85=m
+-CONFIG_SENSORS_LM87=m
+-CONFIG_SENSORS_LM90=m
+-CONFIG_SENSORS_LM92=m
+-CONFIG_SENSORS_LM93=m
+-CONFIG_SENSORS_MAX1619=m
+-CONFIG_SENSORS_MAX6650=m
+-CONFIG_SENSORS_PC87360=m
+-CONFIG_SENSORS_PC87427=m
+-CONFIG_SENSORS_SIS5595=m
+-CONFIG_SENSORS_DME1737=m
+-CONFIG_SENSORS_SMSC47M1=m
+-CONFIG_SENSORS_SMSC47M192=m
+-CONFIG_SENSORS_SMSC47B397=m
+-CONFIG_SENSORS_ADS7828=m
+-CONFIG_SENSORS_THMC50=m
+-CONFIG_SENSORS_VIA686A=m
+-CONFIG_SENSORS_VT1211=m
+-CONFIG_SENSORS_VT8231=m
+-CONFIG_SENSORS_W83781D=m
+-CONFIG_SENSORS_W83791D=m
+-CONFIG_SENSORS_W83792D=m
+-CONFIG_SENSORS_W83793=m
+-CONFIG_SENSORS_W83L785TS=m
+-CONFIG_SENSORS_W83L786NG=m
+-CONFIG_SENSORS_W83627HF=m
+-CONFIG_SENSORS_W83627EHF=m
+-CONFIG_SENSORS_HDAPS=m
+-CONFIG_SENSORS_APPLESMC=m
+-# CONFIG_HWMON_DEBUG_CHIP is not set
+-CONFIG_THERMAL=m
+-CONFIG_THERMAL_HWMON=y
+-CONFIG_WATCHDOG=y
+-# CONFIG_WATCHDOG_NOWAYOUT is not set
+-
+-#
+-# Watchdog Device Drivers
+-#
+-CONFIG_SOFT_WATCHDOG=m
+-CONFIG_ACQUIRE_WDT=m
+-CONFIG_ADVANTECH_WDT=m
+-CONFIG_ALIM1535_WDT=m
+-CONFIG_ALIM7101_WDT=m
+-CONFIG_SC520_WDT=m
+-CONFIG_EUROTECH_WDT=m
+-CONFIG_IB700_WDT=m
+-CONFIG_IBMASR=m
+-CONFIG_WAFER_WDT=m
+-CONFIG_I6300ESB_WDT=m
+-CONFIG_ITCO_WDT=m
+-CONFIG_ITCO_VENDOR_SUPPORT=y
+-CONFIG_IT8712F_WDT=m
+-CONFIG_HP_WATCHDOG=m
+-CONFIG_SC1200_WDT=m
+-CONFIG_SCx200_WDT=m
+-CONFIG_PC87413_WDT=m
+-CONFIG_60XX_WDT=m
+-CONFIG_SBC8360_WDT=m
+-CONFIG_SBC7240_WDT=m
+-CONFIG_CPU5_WDT=m
+-CONFIG_SMSC37B787_WDT=m
+-CONFIG_W83627HF_WDT=m
+-CONFIG_W83697HF_WDT=m
+-CONFIG_W83877F_WDT=m
+-CONFIG_W83977F_WDT=m
+-CONFIG_MACHZ_WDT=m
+-CONFIG_SBC_EPX_C3_WATCHDOG=m
+-
+-#
+-# ISA-based Watchdog Cards
+-#
+-CONFIG_PCWATCHDOG=m
+-CONFIG_MIXCOMWD=m
+-CONFIG_WDT=m
+-CONFIG_WDT_501=y
+-
+-#
+-# PCI-based Watchdog Cards
+-#
+-CONFIG_PCIPCWATCHDOG=m
+-CONFIG_WDTPCI=m
+-CONFIG_WDT_501_PCI=y
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-CONFIG_USBPCWATCHDOG=m
+-
+-#
+-# Sonics Silicon Backplane
+-#
+-CONFIG_SSB_POSSIBLE=y
+-CONFIG_SSB=m
+-CONFIG_SSB_SPROM=y
+-CONFIG_SSB_BLOCKIO=y
+-CONFIG_SSB_PCIHOST_POSSIBLE=y
+-CONFIG_SSB_PCIHOST=y
+-CONFIG_SSB_B43_PCI_BRIDGE=y
+-CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+-CONFIG_SSB_PCMCIAHOST=y
+-# CONFIG_SSB_DEBUG is not set
+-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+-CONFIG_SSB_DRIVER_PCICORE=y
+-
+-#
+-# Multifunction device drivers
+-#
+-# CONFIG_MFD_CORE is not set
+-CONFIG_MFD_SM501=m
+-CONFIG_MFD_SM501_GPIO=y
+-CONFIG_HTC_PASIC3=m
+-# CONFIG_MFD_TMIO is not set
+-
+-#
+-# Multimedia devices
+-#
+-
+-#
+-# Multimedia core support
+-#
+-CONFIG_VIDEO_DEV=m
+-CONFIG_VIDEO_V4L2_COMMON=m
+-CONFIG_VIDEO_ALLOW_V4L1=y
+-CONFIG_VIDEO_V4L1_COMPAT=y
+-CONFIG_DVB_CORE=m
+-CONFIG_VIDEO_MEDIA=m
+-
+-#
+-# Multimedia drivers
+-#
+-CONFIG_VIDEO_SAA7146=m
+-CONFIG_VIDEO_SAA7146_VV=m
+-CONFIG_MEDIA_ATTACH=y
+-CONFIG_MEDIA_TUNER=m
+-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+-CONFIG_MEDIA_TUNER_SIMPLE=m
+-CONFIG_MEDIA_TUNER_TDA8290=m
+-CONFIG_MEDIA_TUNER_TDA827X=m
+-CONFIG_MEDIA_TUNER_TDA18271=m
+-CONFIG_MEDIA_TUNER_TDA9887=m
+-CONFIG_MEDIA_TUNER_TEA5761=m
+-CONFIG_MEDIA_TUNER_TEA5767=m
+-CONFIG_MEDIA_TUNER_MT20XX=m
+-CONFIG_MEDIA_TUNER_MT2060=m
+-CONFIG_MEDIA_TUNER_MT2266=m
+-CONFIG_MEDIA_TUNER_MT2131=m
+-CONFIG_MEDIA_TUNER_QT1010=m
+-CONFIG_MEDIA_TUNER_XC2028=m
+-CONFIG_MEDIA_TUNER_XC5000=m
+-CONFIG_MEDIA_TUNER_MXL5005S=m
+-CONFIG_MEDIA_TUNER_MXL5007T=m
+-CONFIG_VIDEO_V4L2=m
+-CONFIG_VIDEO_V4L1=m
+-CONFIG_VIDEOBUF_GEN=m
+-CONFIG_VIDEOBUF_DMA_SG=m
+-CONFIG_VIDEOBUF_VMALLOC=m
+-CONFIG_VIDEOBUF_DMA_CONTIG=m
+-CONFIG_VIDEOBUF_DVB=m
+-CONFIG_VIDEO_BTCX=m
+-CONFIG_VIDEO_IR=m
+-CONFIG_VIDEO_TVEEPROM=m
+-CONFIG_VIDEO_TUNER=m
+-CONFIG_VIDEO_CAPTURE_DRIVERS=y
+-# CONFIG_VIDEO_ADV_DEBUG is not set
+-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+-CONFIG_VIDEO_IR_I2C=m
+-CONFIG_VIDEO_TVAUDIO=m
+-CONFIG_VIDEO_TDA7432=m
+-CONFIG_VIDEO_TDA9840=m
+-CONFIG_VIDEO_TDA9875=m
+-CONFIG_VIDEO_TEA6415C=m
+-CONFIG_VIDEO_TEA6420=m
+-CONFIG_VIDEO_MSP3400=m
+-CONFIG_VIDEO_CS5345=m
+-CONFIG_VIDEO_CS53L32A=m
+-CONFIG_VIDEO_M52790=m
+-CONFIG_VIDEO_WM8775=m
+-CONFIG_VIDEO_WM8739=m
+-CONFIG_VIDEO_VP27SMPX=m
+-CONFIG_VIDEO_BT819=m
+-CONFIG_VIDEO_BT856=m
+-CONFIG_VIDEO_KS0127=m
+-CONFIG_VIDEO_OV7670=m
+-CONFIG_VIDEO_SAA7110=m
+-CONFIG_VIDEO_SAA7111=m
+-CONFIG_VIDEO_SAA7114=m
+-CONFIG_VIDEO_SAA711X=m
+-CONFIG_VIDEO_SAA717X=m
+-CONFIG_VIDEO_TVP5150=m
+-CONFIG_VIDEO_VPX3220=m
+-CONFIG_VIDEO_CX25840=m
+-CONFIG_VIDEO_CX2341X=m
+-CONFIG_VIDEO_SAA7127=m
+-CONFIG_VIDEO_SAA7185=m
+-CONFIG_VIDEO_ADV7170=m
+-CONFIG_VIDEO_ADV7175=m
+-CONFIG_VIDEO_UPD64031A=m
+-CONFIG_VIDEO_UPD64083=m
+-CONFIG_VIDEO_VIVI=m
+-CONFIG_VIDEO_BT848=m
+-CONFIG_VIDEO_BT848_DVB=y
+-CONFIG_VIDEO_SAA6588=m
+-CONFIG_VIDEO_PMS=m
+-CONFIG_VIDEO_BWQCAM=m
+-CONFIG_VIDEO_CQCAM=m
+-CONFIG_VIDEO_W9966=m
+-CONFIG_VIDEO_CPIA=m
+-CONFIG_VIDEO_CPIA_PP=m
+-CONFIG_VIDEO_CPIA_USB=m
+-CONFIG_VIDEO_CPIA2=m
+-CONFIG_VIDEO_SAA5246A=m
+-CONFIG_VIDEO_SAA5249=m
+-# CONFIG_TUNER_3036 is not set
+-CONFIG_VIDEO_STRADIS=m
+-CONFIG_VIDEO_ZORAN=m
+-CONFIG_VIDEO_ZORAN_DC30=m
+-CONFIG_VIDEO_ZORAN_ZR36060=m
+-CONFIG_VIDEO_ZORAN_BUZ=m
+-CONFIG_VIDEO_ZORAN_DC10=m
+-CONFIG_VIDEO_ZORAN_LML33=m
+-CONFIG_VIDEO_ZORAN_LML33R10=m
+-CONFIG_VIDEO_ZORAN_AVS6EYES=m
+-CONFIG_VIDEO_MEYE=m
+-CONFIG_VIDEO_SAA7134=m
+-CONFIG_VIDEO_SAA7134_ALSA=m
+-CONFIG_VIDEO_SAA7134_DVB=m
+-CONFIG_VIDEO_MXB=m
+-# CONFIG_VIDEO_DPC is not set
+-CONFIG_VIDEO_HEXIUM_ORION=m
+-CONFIG_VIDEO_HEXIUM_GEMINI=m
+-CONFIG_VIDEO_CX88=m
+-CONFIG_VIDEO_CX88_ALSA=m
+-CONFIG_VIDEO_CX88_BLACKBIRD=m
+-CONFIG_VIDEO_CX88_DVB=m
+-CONFIG_VIDEO_CX88_VP3054=m
+-CONFIG_VIDEO_CX23885=m
+-CONFIG_VIDEO_AU0828=m
+-CONFIG_VIDEO_IVTV=m
+-CONFIG_VIDEO_FB_IVTV=m
+-CONFIG_VIDEO_CX18=m
+-CONFIG_VIDEO_CAFE_CCIC=m
+-CONFIG_V4L_USB_DRIVERS=y
+-CONFIG_USB_VIDEO_CLASS=m
+-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+-CONFIG_USB_GSPCA=m
+-CONFIG_VIDEO_PVRUSB2=m
+-CONFIG_VIDEO_PVRUSB2_SYSFS=y
+-CONFIG_VIDEO_PVRUSB2_DVB=y
+-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+-CONFIG_VIDEO_EM28XX=m
+-CONFIG_VIDEO_EM28XX_ALSA=m
+-CONFIG_VIDEO_EM28XX_DVB=m
+-CONFIG_VIDEO_USBVISION=m
+-CONFIG_VIDEO_USBVIDEO=m
+-CONFIG_USB_VICAM=m
+-CONFIG_USB_IBMCAM=m
+-CONFIG_USB_KONICAWC=m
+-CONFIG_USB_QUICKCAM_MESSENGER=m
+-CONFIG_USB_ET61X251=m
+-CONFIG_VIDEO_OVCAMCHIP=m
+-CONFIG_USB_W9968CF=m
+-CONFIG_USB_OV511=m
+-CONFIG_USB_SE401=m
+-CONFIG_USB_SN9C102=m
+-CONFIG_USB_STV680=m
+-CONFIG_USB_ZC0301=m
+-CONFIG_USB_PWC=m
+-# CONFIG_USB_PWC_DEBUG is not set
+-CONFIG_USB_ZR364XX=m
+-CONFIG_USB_STKWEBCAM=m
+-CONFIG_USB_S2255=m
+-CONFIG_SOC_CAMERA=m
+-CONFIG_SOC_CAMERA_MT9M001=m
+-CONFIG_MT9M001_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_MT9V022=m
+-CONFIG_MT9V022_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_PLATFORM=m
+-CONFIG_VIDEO_SH_MOBILE_CEU=m
+-CONFIG_RADIO_ADAPTERS=y
+-CONFIG_RADIO_CADET=m
+-CONFIG_RADIO_RTRACK=m
+-CONFIG_RADIO_RTRACK2=m
+-CONFIG_RADIO_AZTECH=m
+-CONFIG_RADIO_GEMTEK=m
+-CONFIG_RADIO_GEMTEK_PCI=m
+-CONFIG_RADIO_MAXIRADIO=m
+-CONFIG_RADIO_MAESTRO=m
+-CONFIG_RADIO_SF16FMI=m
+-CONFIG_RADIO_SF16FMR2=m
+-CONFIG_RADIO_TERRATEC=m
+-CONFIG_RADIO_TRUST=m
+-CONFIG_RADIO_TYPHOON=m
+-CONFIG_RADIO_TYPHOON_PROC_FS=y
+-CONFIG_RADIO_ZOLTRIX=m
+-CONFIG_USB_DSBR=m
+-CONFIG_USB_SI470X=m
+-CONFIG_DVB_CAPTURE_DRIVERS=y
+-
+-#
+-# Supported SAA7146 based PCI Adapters
+-#
+-CONFIG_TTPCI_EEPROM=m
+-CONFIG_DVB_AV7110=m
+-# CONFIG_DVB_AV7110_FIRMWARE is not set
+-CONFIG_DVB_AV7110_OSD=y
+-CONFIG_DVB_BUDGET_CORE=m
+-CONFIG_DVB_BUDGET=m
+-CONFIG_DVB_BUDGET_CI=m
+-CONFIG_DVB_BUDGET_AV=m
+-CONFIG_DVB_BUDGET_PATCH=m
+-
+-#
+-# Supported USB Adapters
+-#
+-CONFIG_DVB_USB=m
+-# CONFIG_DVB_USB_DEBUG is not set
+-CONFIG_DVB_USB_A800=m
+-CONFIG_DVB_USB_DIBUSB_MB=m
+-# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+-CONFIG_DVB_USB_DIBUSB_MC=m
+-CONFIG_DVB_USB_DIB0700=m
+-CONFIG_DVB_USB_UMT_010=m
+-# CONFIG_DVB_USB_CXUSB is not set
+-CONFIG_DVB_USB_M920X=m
+-CONFIG_DVB_USB_GL861=m
+-CONFIG_DVB_USB_AU6610=m
+-CONFIG_DVB_USB_DIGITV=m
+-CONFIG_DVB_USB_VP7045=m
+-CONFIG_DVB_USB_VP702X=m
+-CONFIG_DVB_USB_GP8PSK=m
+-CONFIG_DVB_USB_NOVA_T_USB2=m
+-CONFIG_DVB_USB_TTUSB2=m
+-CONFIG_DVB_USB_DTT200U=m
+-CONFIG_DVB_USB_OPERA1=m
+-CONFIG_DVB_USB_AF9005=m
+-CONFIG_DVB_USB_AF9005_REMOTE=m
+-CONFIG_DVB_USB_DW2102=m
+-CONFIG_DVB_USB_ANYSEE=m
+-CONFIG_DVB_TTUSB_BUDGET=m
+-CONFIG_DVB_TTUSB_DEC=m
+-CONFIG_DVB_CINERGYT2=m
+-# CONFIG_DVB_CINERGYT2_TUNING is not set
+-CONFIG_DVB_SIANO_SMS1XXX=m
+-CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
+-
+-#
+-# Supported FlexCopII (B2C2) Adapters
+-#
+-CONFIG_DVB_B2C2_FLEXCOP=m
+-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+-CONFIG_DVB_B2C2_FLEXCOP_USB=m
+-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+-
+-#
+-# Supported BT878 Adapters
+-#
+-CONFIG_DVB_BT8XX=m
+-
+-#
+-# Supported Pluto2 Adapters
+-#
+-CONFIG_DVB_PLUTO2=m
+-
+-#
+-# Supported DVB Frontends
+-#
+-
+-#
+-# Customise DVB Frontends
+-#
+-# CONFIG_DVB_FE_CUSTOMISE is not set
+-
+-#
+-# DVB-S (satellite) frontends
+-#
+-CONFIG_DVB_CX24110=m
+-CONFIG_DVB_CX24123=m
+-CONFIG_DVB_MT312=m
+-CONFIG_DVB_S5H1420=m
+-CONFIG_DVB_STV0299=m
+-CONFIG_DVB_TDA8083=m
+-CONFIG_DVB_TDA10086=m
+-CONFIG_DVB_VES1X93=m
+-CONFIG_DVB_TUNER_ITD1000=m
+-CONFIG_DVB_TDA826X=m
+-CONFIG_DVB_TUA6100=m
+-
+-#
+-# DVB-T (terrestrial) frontends
+-#
+-CONFIG_DVB_SP8870=m
+-CONFIG_DVB_SP887X=m
+-CONFIG_DVB_CX22700=m
+-CONFIG_DVB_CX22702=m
+-CONFIG_DVB_DRX397XD=m
+-CONFIG_DVB_L64781=m
+-CONFIG_DVB_TDA1004X=m
+-CONFIG_DVB_NXT6000=m
+-CONFIG_DVB_MT352=m
+-CONFIG_DVB_ZL10353=m
+-CONFIG_DVB_DIB3000MB=m
+-CONFIG_DVB_DIB3000MC=m
+-CONFIG_DVB_DIB7000M=m
+-CONFIG_DVB_DIB7000P=m
+-CONFIG_DVB_TDA10048=m
+-
+-#
+-# DVB-C (cable) frontends
+-#
+-CONFIG_DVB_VES1820=m
+-CONFIG_DVB_TDA10021=m
+-CONFIG_DVB_TDA10023=m
+-CONFIG_DVB_STV0297=m
+-
+-#
+-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+-#
+-CONFIG_DVB_NXT200X=m
+-CONFIG_DVB_OR51211=m
+-CONFIG_DVB_OR51132=m
+-CONFIG_DVB_BCM3510=m
+-CONFIG_DVB_LGDT330X=m
+-CONFIG_DVB_S5H1409=m
+-CONFIG_DVB_AU8522=m
+-CONFIG_DVB_S5H1411=m
+-
+-#
+-# Digital terrestrial only tuners/PLL
+-#
+-CONFIG_DVB_PLL=m
+-CONFIG_DVB_TUNER_DIB0070=m
+-
+-#
+-# SEC control devices for DVB-S
+-#
+-CONFIG_DVB_LNBP21=m
+-CONFIG_DVB_ISL6405=m
+-CONFIG_DVB_ISL6421=m
+-CONFIG_DAB=y
+-CONFIG_USB_DABUSB=m
+-
+-#
+-# Graphics support
+-#
+-CONFIG_AGP=m
+-CONFIG_AGP_ALI=m
+-CONFIG_AGP_ATI=m
+-CONFIG_AGP_AMD=m
+-CONFIG_AGP_AMD64=m
+-CONFIG_AGP_INTEL=m
+-CONFIG_AGP_NVIDIA=m
+-CONFIG_AGP_SIS=m
+-CONFIG_AGP_SWORKS=m
+-CONFIG_AGP_VIA=m
+-CONFIG_AGP_EFFICEON=m
+-CONFIG_DRM=m
+-CONFIG_DRM_TDFX=m
+-CONFIG_DRM_R128=m
+-CONFIG_DRM_RADEON=m
+-CONFIG_DRM_I810=m
+-CONFIG_DRM_I830=m
+-CONFIG_DRM_I915=m
+-CONFIG_DRM_MGA=m
+-CONFIG_DRM_SIS=m
+-CONFIG_DRM_VIA=m
+-CONFIG_DRM_VIA_CHROME9=m
+-CONFIG_DRM_SAVAGE=m
+-CONFIG_VGASTATE=m
+-CONFIG_VIDEO_OUTPUT_CONTROL=m
+-CONFIG_FB=y
+-CONFIG_FIRMWARE_EDID=y
+-CONFIG_FB_DDC=m
+-CONFIG_FB_CFB_FILLRECT=y
+-CONFIG_FB_CFB_COPYAREA=y
+-CONFIG_FB_CFB_IMAGEBLIT=y
+-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+-CONFIG_FB_SYS_FILLRECT=m
+-CONFIG_FB_SYS_COPYAREA=m
+-CONFIG_FB_SYS_IMAGEBLIT=m
+-# CONFIG_FB_FOREIGN_ENDIAN is not set
+-CONFIG_FB_SYS_FOPS=m
+-CONFIG_FB_DEFERRED_IO=y
+-CONFIG_FB_HECUBA=m
+-CONFIG_FB_SVGALIB=m
+-# CONFIG_FB_MACMODES is not set
+-CONFIG_FB_BACKLIGHT=y
+-CONFIG_FB_MODE_HELPERS=y
+-CONFIG_FB_TILEBLITTING=y
+-
+-#
+-# Frame buffer hardware drivers
+-#
+-CONFIG_FB_CIRRUS=m
+-CONFIG_FB_PM2=m
+-CONFIG_FB_PM2_FIFO_DISCONNECT=y
+-CONFIG_FB_CYBER2000=m
+-CONFIG_FB_ARC=m
+-# CONFIG_FB_ASILIANT is not set
+-CONFIG_FB_IMSTT=y
+-CONFIG_FB_VGA16=m
+-CONFIG_FB_UVESA=m
+-CONFIG_FB_VESA=y
+-CONFIG_FB_EFI=y
+-CONFIG_FB_N411=m
+-CONFIG_FB_HGA=m
+-CONFIG_FB_HGA_ACCEL=y
+-CONFIG_FB_S1D13XXX=m
+-CONFIG_FB_NVIDIA=m
+-CONFIG_FB_NVIDIA_I2C=y
+-# CONFIG_FB_NVIDIA_DEBUG is not set
+-CONFIG_FB_NVIDIA_BACKLIGHT=y
+-CONFIG_FB_RIVA=m
+-CONFIG_FB_RIVA_I2C=y
+-# CONFIG_FB_RIVA_DEBUG is not set
+-CONFIG_FB_RIVA_BACKLIGHT=y
+-CONFIG_FB_I810=m
+-CONFIG_FB_I810_GTF=y
+-CONFIG_FB_I810_I2C=y
+-CONFIG_FB_LE80578=m
+-CONFIG_FB_CARILLO_RANCH=m
+-CONFIG_FB_INTEL=m
+-# CONFIG_FB_INTEL_DEBUG is not set
+-CONFIG_FB_INTEL_I2C=y
+-CONFIG_FB_MATROX=m
+-CONFIG_FB_MATROX_MILLENIUM=y
+-CONFIG_FB_MATROX_MYSTIQUE=y
+-CONFIG_FB_MATROX_G=y
+-# CONFIG_FB_MATROX_I2C is not set
+-CONFIG_FB_MATROX_MULTIHEAD=y
+-CONFIG_FB_RADEON=m
+-CONFIG_FB_RADEON_I2C=y
+-CONFIG_FB_RADEON_BACKLIGHT=y
+-# CONFIG_FB_RADEON_DEBUG is not set
+-# CONFIG_FB_ATY128 is not set
+-CONFIG_FB_ATY=m
+-CONFIG_FB_ATY_CT=y
+-CONFIG_FB_ATY_GENERIC_LCD=y
+-CONFIG_FB_ATY_GX=y
+-CONFIG_FB_ATY_BACKLIGHT=y
+-CONFIG_FB_S3=m
+-CONFIG_FB_SAVAGE=m
+-CONFIG_FB_SAVAGE_I2C=y
+-CONFIG_FB_SAVAGE_ACCEL=y
+-CONFIG_FB_SIS=m
+-CONFIG_FB_SIS_300=y
+-CONFIG_FB_SIS_315=y
+-CONFIG_FB_NEOMAGIC=m
+-CONFIG_FB_KYRO=m
+-CONFIG_FB_3DFX=m
+-CONFIG_FB_3DFX_ACCEL=y
+-CONFIG_FB_VOODOO1=m
+-CONFIG_FB_VT8623=m
+-CONFIG_FB_CYBLA=m
+-CONFIG_FB_TRIDENT=m
+-CONFIG_FB_TRIDENT_ACCEL=y
+-CONFIG_FB_ARK=m
+-CONFIG_FB_PM3=m
+-CONFIG_FB_CARMINE=m
+-CONFIG_FB_CARMINE_DRAM_EVAL=y
+-# CONFIG_CARMINE_DRAM_CUSTOM is not set
+-CONFIG_FB_GEODE=y
+-CONFIG_FB_GEODE_LX=m
+-CONFIG_FB_GEODE_GX=m
+-CONFIG_FB_GEODE_GX1=m
+-CONFIG_FB_SM501=m
+-# CONFIG_FB_VIRTUAL is not set
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_LCD_CLASS_DEVICE=m
+-CONFIG_LCD_LTV350QV=m
+-CONFIG_LCD_ILI9320=m
+-CONFIG_LCD_VGG2432A4=m
+-CONFIG_LCD_PLATFORM=m
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+-CONFIG_BACKLIGHT_CORGI=m
+-CONFIG_BACKLIGHT_PROGEAR=m
+-CONFIG_BACKLIGHT_CARILLO_RANCH=m
+-CONFIG_BACKLIGHT_MBP_NVIDIA=m
+-
+-#
+-# Display device support
+-#
+-CONFIG_DISPLAY_SUPPORT=m
+-
+-#
+-# Display hardware drivers
+-#
+-
+-#
+-# Console display driver support
+-#
+-CONFIG_VGA_CONSOLE=y
+-CONFIG_VGACON_SOFT_SCROLLBACK=y
+-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+-CONFIG_VIDEO_SELECT=y
+-CONFIG_MDA_CONSOLE=m
+-CONFIG_DUMMY_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE=y
+-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+-# CONFIG_FONTS is not set
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+-# CONFIG_LOGO is not set
+-
+-#
+-# Bootsplash configuration
+-#
+-CONFIG_BOOTSPLASH=y
+-CONFIG_SOUND=m
+-CONFIG_SND=m
+-CONFIG_SND_TIMER=m
+-CONFIG_SND_PCM=m
+-CONFIG_SND_HWDEP=m
+-CONFIG_SND_RAWMIDI=m
+-CONFIG_SND_SEQUENCER=m
+-CONFIG_SND_SEQ_DUMMY=m
+-CONFIG_SND_OSSEMUL=y
+-CONFIG_SND_MIXER_OSS=m
+-CONFIG_SND_PCM_OSS=m
+-CONFIG_SND_PCM_OSS_PLUGINS=y
+-CONFIG_SND_SEQUENCER_OSS=y
+-CONFIG_SND_DYNAMIC_MINORS=y
+-CONFIG_SND_SUPPORT_OLD_API=y
+-CONFIG_SND_VERBOSE_PROCFS=y
+-CONFIG_SND_VERBOSE_PRINTK=y
+-CONFIG_SND_DEBUG=y
+-# CONFIG_SND_DEBUG_VERBOSE is not set
+-# CONFIG_SND_PCM_XRUN_DEBUG is not set
+-CONFIG_SND_VMASTER=y
+-CONFIG_SND_MPU401_UART=m
+-CONFIG_SND_OPL3_LIB=m
+-CONFIG_SND_OPL4_LIB=m
+-CONFIG_SND_VX_LIB=m
+-CONFIG_SND_AC97_CODEC=m
+-CONFIG_SND_DRIVERS=y
+-CONFIG_SND_DUMMY=m
+-CONFIG_SND_VIRMIDI=m
+-CONFIG_SND_MTPAV=m
+-CONFIG_SND_MTS64=m
+-CONFIG_SND_SERIAL_U16550=m
+-CONFIG_SND_MPU401=m
+-CONFIG_SND_PORTMAN2X4=m
+-CONFIG_SND_AC97_POWER_SAVE=y
+-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_AD1848_LIB=m
+-CONFIG_SND_CS4231_LIB=m
+-CONFIG_SND_SB_COMMON=m
+-CONFIG_SND_SB8_DSP=m
+-CONFIG_SND_SB16_DSP=m
+-CONFIG_SND_ISA=y
+-CONFIG_SND_ADLIB=m
+-CONFIG_SND_AD1816A=m
+-CONFIG_SND_AD1848=m
+-CONFIG_SND_ALS100=m
+-CONFIG_SND_AZT2320=m
+-CONFIG_SND_CMI8330=m
+-CONFIG_SND_CS4231=m
+-CONFIG_SND_CS4232=m
+-CONFIG_SND_CS4236=m
+-CONFIG_SND_DT019X=m
+-CONFIG_SND_ES968=m
+-CONFIG_SND_ES1688=m
+-CONFIG_SND_ES18XX=m
+-CONFIG_SND_SC6000=m
+-CONFIG_SND_GUSCLASSIC=m
+-CONFIG_SND_GUSEXTREME=m
+-CONFIG_SND_GUSMAX=m
+-CONFIG_SND_INTERWAVE=m
+-CONFIG_SND_INTERWAVE_STB=m
+-CONFIG_SND_OPL3SA2=m
+-CONFIG_SND_OPTI92X_AD1848=m
+-CONFIG_SND_OPTI92X_CS4231=m
+-CONFIG_SND_OPTI93X=m
+-CONFIG_SND_MIRO=m
+-CONFIG_SND_SB8=m
+-CONFIG_SND_SB16=m
+-CONFIG_SND_SBAWE=m
+-CONFIG_SND_SB16_CSP=y
+-CONFIG_SND_SGALAXY=m
+-CONFIG_SND_SSCAPE=m
+-CONFIG_SND_WAVEFRONT=m
+-# CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL is not set
+-CONFIG_SND_PCI=y
+-CONFIG_SND_AD1889=m
+-CONFIG_SND_ALS300=m
+-CONFIG_SND_ALS4000=m
+-CONFIG_SND_ALI5451=m
+-CONFIG_SND_ATIIXP=m
+-CONFIG_SND_ATIIXP_MODEM=m
+-CONFIG_SND_AU8810=m
+-CONFIG_SND_AU8820=m
+-CONFIG_SND_AU8830=m
+-CONFIG_SND_AW2=m
+-CONFIG_SND_AZT3328=m
+-CONFIG_SND_BT87X=m
+-# CONFIG_SND_BT87X_OVERCLOCK is not set
+-CONFIG_SND_CA0106=m
+-CONFIG_SND_CMIPCI=m
+-CONFIG_SND_OXYGEN_LIB=m
+-CONFIG_SND_OXYGEN=m
+-CONFIG_SND_CS4281=m
+-CONFIG_SND_CS46XX=m
+-CONFIG_SND_CS46XX_NEW_DSP=y
+-CONFIG_SND_CS5530=m
+-CONFIG_SND_CS5535AUDIO=m
+-CONFIG_SND_DARLA20=m
+-CONFIG_SND_GINA20=m
+-CONFIG_SND_LAYLA20=m
+-CONFIG_SND_DARLA24=m
+-CONFIG_SND_GINA24=m
+-CONFIG_SND_LAYLA24=m
+-CONFIG_SND_MONA=m
+-CONFIG_SND_MIA=m
+-CONFIG_SND_ECHO3G=m
+-CONFIG_SND_INDIGO=m
+-CONFIG_SND_INDIGOIO=m
+-CONFIG_SND_INDIGODJ=m
+-CONFIG_SND_EMU10K1=m
+-CONFIG_SND_EMU10K1X=m
+-CONFIG_SND_ENS1370=m
+-CONFIG_SND_ENS1371=m
+-CONFIG_SND_ES1938=m
+-CONFIG_SND_ES1968=m
+-CONFIG_SND_FM801=m
+-CONFIG_SND_FM801_TEA575X_BOOL=y
+-CONFIG_SND_FM801_TEA575X=m
+-CONFIG_SND_HDA_INTEL=m
+-CONFIG_SND_HDA_HWDEP=y
+-CONFIG_SND_HDA_INPUT_BEEP=y
+-CONFIG_SND_HDA_CODEC_REALTEK=y
+-CONFIG_SND_HDA_CODEC_ANALOG=y
+-CONFIG_SND_HDA_CODEC_SIGMATEL=y
+-CONFIG_SND_HDA_CODEC_VIA=y
+-CONFIG_SND_HDA_CODEC_ATIHDMI=y
+-CONFIG_SND_HDA_CODEC_NVHDMI=y
+-CONFIG_SND_HDA_CODEC_CONEXANT=y
+-CONFIG_SND_HDA_CODEC_CMEDIA=y
+-CONFIG_SND_HDA_CODEC_SI3054=y
+-CONFIG_SND_HDA_GENERIC=y
+-CONFIG_SND_HDA_POWER_SAVE=y
+-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_HDSP=m
+-CONFIG_SND_HDSPM=m
+-CONFIG_SND_HIFIER=m
+-CONFIG_SND_ICE1712=m
+-CONFIG_SND_ICE1724=m
+-CONFIG_SND_INTEL8X0=m
+-CONFIG_SND_INTEL8X0M=m
+-CONFIG_SND_KORG1212=m
+-CONFIG_SND_MAESTRO3=m
+-CONFIG_SND_MIXART=m
+-CONFIG_SND_NM256=m
+-CONFIG_SND_PCXHR=m
+-CONFIG_SND_RIPTIDE=m
+-CONFIG_SND_RME32=m
+-CONFIG_SND_RME96=m
+-CONFIG_SND_RME9652=m
+-CONFIG_SND_SIS7019=m
+-CONFIG_SND_SONICVIBES=m
+-CONFIG_SND_TRIDENT=m
+-CONFIG_SND_VIA82XX=m
+-CONFIG_SND_VIA82XX_MODEM=m
+-CONFIG_SND_VIRTUOSO=m
+-CONFIG_SND_VX222=m
+-CONFIG_SND_YMFPCI=m
+-CONFIG_SND_SPI=y
+-CONFIG_SND_USB=y
+-CONFIG_SND_USB_AUDIO=m
+-CONFIG_SND_USB_USX2Y=m
+-CONFIG_SND_USB_CAIAQ=m
+-CONFIG_SND_USB_CAIAQ_INPUT=y
+-CONFIG_SND_PCMCIA=y
+-CONFIG_SND_VXPOCKET=m
+-CONFIG_SND_PDAUDIOCF=m
+-# CONFIG_SND_SOC is not set
+-CONFIG_SOUND_PRIME=m
+-# CONFIG_SOUND_MSNDCLAS is not set
+-# CONFIG_SOUND_MSNDPIN is not set
+-CONFIG_SOUND_OSS=m
+-CONFIG_SOUND_TRACEINIT=y
+-CONFIG_SOUND_DMAP=y
+-CONFIG_SOUND_SSCAPE=m
+-CONFIG_SOUND_VMIDI=m
+-CONFIG_SOUND_TRIX=m
+-CONFIG_SOUND_MSS=m
+-CONFIG_SOUND_MPU401=m
+-CONFIG_SOUND_PAS=m
+-CONFIG_SOUND_PSS=m
+-CONFIG_PSS_MIXER=y
+-# CONFIG_PSS_HAVE_BOOT is not set
+-CONFIG_SOUND_SB=m
+-CONFIG_SOUND_YM3812=m
+-CONFIG_SOUND_UART6850=m
+-CONFIG_SOUND_AEDSP16=m
+-CONFIG_SC6600=y
+-CONFIG_SC6600_JOY=y
+-CONFIG_SC6600_CDROM=4
+-CONFIG_SC6600_CDROMBASE=0x0
+-# CONFIG_AEDSP16_MSS is not set
+-# CONFIG_AEDSP16_SBPRO is not set
+-CONFIG_SOUND_KAHLUA=m
+-CONFIG_AC97_BUS=m
+-CONFIG_HID_SUPPORT=y
+-CONFIG_HID=m
+-# CONFIG_HID_DEBUG is not set
+-CONFIG_HIDRAW=y
+-
+-#
+-# USB Input Devices
+-#
+-CONFIG_USB_HID=m
+-CONFIG_USB_HIDINPUT_POWERBOOK=y
+-CONFIG_HID_FF=y
+-CONFIG_HID_PID=y
+-CONFIG_LOGITECH_FF=y
+-# CONFIG_LOGIRUMBLEPAD2_FF is not set
+-CONFIG_PANTHERLORD_FF=y
+-CONFIG_THRUSTMASTER_FF=y
+-CONFIG_ZEROPLUS_FF=y
+-CONFIG_USB_HIDDEV=y
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
+-CONFIG_USB_SUPPORT=y
+-CONFIG_USB_ARCH_HAS_HCD=y
+-CONFIG_USB_ARCH_HAS_OHCI=y
+-CONFIG_USB_ARCH_HAS_EHCI=y
+-CONFIG_USB=m
+-# CONFIG_USB_DEBUG is not set
+-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+-
+-#
+-# Miscellaneous USB options
+-#
+-CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_DEVICE_CLASS is not set
+-# CONFIG_USB_DYNAMIC_MINORS is not set
+-CONFIG_USB_SUSPEND=y
+-# CONFIG_USB_OTG is not set
+-CONFIG_USB_MON=y
+-
+-#
+-# USB Host Controller Drivers
+-#
+-CONFIG_USB_C67X00_HCD=m
+-CONFIG_USB_EHCI_HCD=m
+-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+-CONFIG_USB_EHCI_TT_NEWSCHED=y
+-CONFIG_USB_ISP116X_HCD=m
+-CONFIG_USB_ISP1760_HCD=m
+-CONFIG_USB_OHCI_HCD=m
+-# CONFIG_USB_OHCI_HCD_SSB is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+-CONFIG_USB_UHCI_HCD=m
+-# CONFIG_USB_U132_HCD is not set
+-CONFIG_USB_SL811_HCD=m
+-CONFIG_USB_SL811_CS=m
+-CONFIG_USB_R8A66597_HCD=m
+-
+-#
+-# Enable Host or Gadget support to see Inventra options
+-#
+-
+-#
+-# USB Device Class drivers
+-#
+-CONFIG_USB_ACM=m
+-CONFIG_USB_PRINTER=m
+-CONFIG_USB_WDM=m
+-
+-#
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+-#
+-
+-#
+-# may also be needed; see USB_STORAGE Help for more information
+-#
+-CONFIG_USB_STORAGE=m
+-# CONFIG_USB_STORAGE_DEBUG is not set
+-CONFIG_USB_STORAGE_DATAFAB=y
+-CONFIG_USB_STORAGE_FREECOM=y
+-CONFIG_USB_STORAGE_ISD200=y
+-CONFIG_USB_STORAGE_DPCM=y
+-CONFIG_USB_STORAGE_USBAT=y
+-CONFIG_USB_STORAGE_SDDR09=y
+-CONFIG_USB_STORAGE_SDDR55=y
+-CONFIG_USB_STORAGE_JUMPSHOT=y
+-CONFIG_USB_STORAGE_ALAUDA=y
+-CONFIG_USB_STORAGE_ONETOUCH=y
+-CONFIG_USB_STORAGE_KARMA=y
+-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+-# CONFIG_USB_LIBUSUAL is not set
+-
+-#
+-# USB Imaging devices
+-#
+-CONFIG_USB_MDC800=m
+-CONFIG_USB_MICROTEK=m
+-
+-#
+-# USB port drivers
+-#
+-CONFIG_USB_USS720=m
+-CONFIG_USB_SERIAL=m
+-CONFIG_USB_EZUSB=y
+-CONFIG_USB_SERIAL_GENERIC=y
+-CONFIG_USB_SERIAL_AIRCABLE=m
+-CONFIG_USB_SERIAL_ARK3116=m
+-CONFIG_USB_SERIAL_BELKIN=m
+-CONFIG_USB_SERIAL_CH341=m
+-CONFIG_USB_SERIAL_WHITEHEAT=m
+-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+-CONFIG_USB_SERIAL_CP2101=m
+-CONFIG_USB_SERIAL_CYPRESS_M8=m
+-CONFIG_USB_SERIAL_EMPEG=m
+-CONFIG_USB_SERIAL_FTDI_SIO=m
+-CONFIG_USB_SERIAL_FUNSOFT=m
+-CONFIG_USB_SERIAL_VISOR=m
+-CONFIG_USB_SERIAL_IPAQ=m
+-CONFIG_USB_SERIAL_IR=m
+-CONFIG_USB_SERIAL_EDGEPORT=m
+-CONFIG_USB_SERIAL_EDGEPORT_TI=m
+-CONFIG_USB_SERIAL_GARMIN=m
+-CONFIG_USB_SERIAL_IPW=m
+-CONFIG_USB_SERIAL_IUU=m
+-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+-CONFIG_USB_SERIAL_KEYSPAN=m
+-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+-CONFIG_USB_SERIAL_KLSI=m
+-CONFIG_USB_SERIAL_KOBIL_SCT=m
+-CONFIG_USB_SERIAL_MCT_U232=m
+-CONFIG_USB_SERIAL_MOS7720=m
+-CONFIG_USB_SERIAL_MOS7840=m
+-CONFIG_USB_SERIAL_MOTOROLA=m
+-CONFIG_USB_SERIAL_NAVMAN=m
+-CONFIG_USB_SERIAL_PL2303=m
+-CONFIG_USB_SERIAL_OTI6858=m
+-CONFIG_USB_SERIAL_QUALCOMM=m
+-CONFIG_USB_SERIAL_SPCP8X5=m
+-CONFIG_USB_SERIAL_HP4X=m
+-CONFIG_USB_SERIAL_SAFE=m
+-CONFIG_USB_SERIAL_SAFE_PADDED=y
+-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+-CONFIG_USB_SERIAL_TI=m
+-CONFIG_USB_SERIAL_CYBERJACK=m
+-CONFIG_USB_SERIAL_XIRCOM=m
+-CONFIG_USB_SERIAL_OPTION=m
+-CONFIG_USB_SERIAL_OMNINET=m
+-CONFIG_USB_SERIAL_DEBUG=m
+-
+-#
+-# USB Miscellaneous drivers
+-#
+-CONFIG_USB_EMI62=m
+-CONFIG_USB_EMI26=m
+-CONFIG_USB_ADUTUX=m
+-CONFIG_USB_RIO500=m
+-CONFIG_USB_LEGOTOWER=m
+-CONFIG_USB_LCD=m
+-CONFIG_USB_BERRY_CHARGE=m
+-CONFIG_USB_LED=m
+-CONFIG_USB_CYPRESS_CY7C63=m
+-CONFIG_USB_CYTHERM=m
+-CONFIG_USB_PHIDGET=m
+-CONFIG_USB_PHIDGETKIT=m
+-CONFIG_USB_PHIDGETMOTORCONTROL=m
+-CONFIG_USB_PHIDGETSERVO=m
+-CONFIG_USB_IDMOUSE=m
+-CONFIG_USB_FTDI_ELAN=m
+-CONFIG_USB_APPLEDISPLAY=m
+-CONFIG_USB_SISUSBVGA=m
+-CONFIG_USB_SISUSBVGA_CON=y
+-CONFIG_USB_LD=m
+-CONFIG_USB_TRANCEVIBRATOR=m
+-CONFIG_USB_IOWARRIOR=m
+-# CONFIG_USB_TEST is not set
+-CONFIG_USB_ISIGHTFW=m
+-CONFIG_USB_ATM=m
+-CONFIG_USB_SPEEDTOUCH=m
+-CONFIG_USB_CXACRU=m
+-CONFIG_USB_UEAGLEATM=m
+-CONFIG_USB_XUSBATM=m
+-# CONFIG_USB_GADGET is not set
+-CONFIG_MMC=m
+-# CONFIG_MMC_DEBUG is not set
+-# CONFIG_MMC_UNSAFE_RESUME is not set
+-
+-#
+-# MMC/SD Card Drivers
+-#
+-CONFIG_MMC_BLOCK=m
+-CONFIG_MMC_BLOCK_BOUNCE=y
+-CONFIG_SDIO_UART=m
+-CONFIG_MMC_TEST=m
+-
+-#
+-# MMC/SD Host Controller Drivers
+-#
+-CONFIG_MMC_SDHCI=m
+-CONFIG_MMC_SDHCI_PCI=m
+-CONFIG_MMC_RICOH_MMC=m
+-CONFIG_MMC_WBSD=m
+-CONFIG_MMC_TIFM_SD=m
+-CONFIG_MMC_SDRICOH_CS=m
+-CONFIG_MEMSTICK=m
+-# CONFIG_MEMSTICK_DEBUG is not set
+-
+-#
+-# MemoryStick drivers
+-#
+-# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+-CONFIG_MSPRO_BLOCK=m
+-
+-#
+-# MemoryStick Host Controller Drivers
+-#
+-CONFIG_MEMSTICK_TIFM_MS=m
+-CONFIG_MEMSTICK_JMICRON_38X=m
+-CONFIG_NEW_LEDS=y
+-CONFIG_LEDS_CLASS=m
+-
+-#
+-# LED drivers
+-#
+-CONFIG_LEDS_NET48XX=m
+-CONFIG_LEDS_WRAP=m
+-CONFIG_LEDS_PCA9532=m
+-CONFIG_LEDS_GPIO=m
+-CONFIG_LEDS_CLEVO_MAIL=m
+-CONFIG_LEDS_PCA955X=m
+-
+-#
+-# LED Triggers
+-#
+-CONFIG_LEDS_TRIGGERS=y
+-CONFIG_LEDS_TRIGGER_TIMER=m
+-CONFIG_LEDS_TRIGGER_IDE_DISK=y
+-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+-# CONFIG_ACCESSIBILITY is not set
+-CONFIG_INFINIBAND=m
+-CONFIG_INFINIBAND_USER_MAD=m
+-CONFIG_INFINIBAND_USER_ACCESS=m
+-CONFIG_INFINIBAND_USER_MEM=y
+-CONFIG_INFINIBAND_ADDR_TRANS=y
+-CONFIG_INFINIBAND_MTHCA=m
+-CONFIG_INFINIBAND_MTHCA_DEBUG=y
+-CONFIG_INFINIBAND_AMSO1100=m
+-# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+-CONFIG_INFINIBAND_CXGB3=m
+-# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
+-CONFIG_MLX4_INFINIBAND=m
+-CONFIG_INFINIBAND_NES=m
+-# CONFIG_INFINIBAND_NES_DEBUG is not set
+-CONFIG_INFINIBAND_IPOIB=m
+-CONFIG_INFINIBAND_IPOIB_CM=y
+-CONFIG_INFINIBAND_IPOIB_DEBUG=y
+-# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
+-CONFIG_INFINIBAND_SRP=m
+-CONFIG_INFINIBAND_ISER=m
+-CONFIG_EDAC=y
+-
+-#
+-# Reporting subsystems
+-#
+-# CONFIG_EDAC_DEBUG is not set
+-CONFIG_EDAC_MM_EDAC=m
+-CONFIG_EDAC_AMD76X=m
+-CONFIG_EDAC_E7XXX=m
+-CONFIG_EDAC_E752X=m
+-CONFIG_EDAC_I82875P=m
+-CONFIG_EDAC_I82975X=m
+-CONFIG_EDAC_I3000=m
+-CONFIG_EDAC_I82860=m
+-CONFIG_EDAC_R82600=m
+-CONFIG_EDAC_I5000=m
+-CONFIG_EDAC_I5100=m
+-CONFIG_RTC_LIB=m
+-CONFIG_RTC_CLASS=m
+-
+-#
+-# RTC interfaces
+-#
+-CONFIG_RTC_INTF_SYSFS=y
+-CONFIG_RTC_INTF_PROC=y
+-CONFIG_RTC_INTF_DEV=y
+-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+-CONFIG_RTC_DRV_TEST=m
+-
+-#
+-# I2C RTC drivers
+-#
+-CONFIG_RTC_DRV_DS1307=m
+-CONFIG_RTC_DRV_DS1374=m
+-CONFIG_RTC_DRV_DS1672=m
+-CONFIG_RTC_DRV_MAX6900=m
+-CONFIG_RTC_DRV_RS5C372=m
+-CONFIG_RTC_DRV_ISL1208=m
+-CONFIG_RTC_DRV_X1205=m
+-CONFIG_RTC_DRV_PCF8563=m
+-CONFIG_RTC_DRV_PCF8583=m
+-CONFIG_RTC_DRV_M41T80=m
+-CONFIG_RTC_DRV_M41T80_WDT=y
+-CONFIG_RTC_DRV_S35390A=m
+-CONFIG_RTC_DRV_FM3130=m
+-
+-#
+-# SPI RTC drivers
+-#
+-CONFIG_RTC_DRV_M41T94=m
+-CONFIG_RTC_DRV_DS1305=m
+-CONFIG_RTC_DRV_MAX6902=m
+-CONFIG_RTC_DRV_R9701=m
+-CONFIG_RTC_DRV_RS5C348=m
+-
+-#
+-# Platform RTC drivers
+-#
+-CONFIG_RTC_DRV_CMOS=m
+-CONFIG_RTC_DRV_DS1511=m
+-CONFIG_RTC_DRV_DS1553=m
+-CONFIG_RTC_DRV_DS1742=m
+-CONFIG_RTC_DRV_STK17TA8=m
+-CONFIG_RTC_DRV_M48T86=m
+-CONFIG_RTC_DRV_M48T59=m
+-CONFIG_RTC_DRV_V3020=m
+-
+-#
+-# on-CPU RTC drivers
+-#
+-CONFIG_DMADEVICES=y
+-
+-#
+-# DMA Devices
+-#
+-CONFIG_INTEL_IOATDMA=m
+-CONFIG_DMA_ENGINE=y
+-
+-#
+-# DMA Clients
+-#
+-CONFIG_NET_DMA=y
+-CONFIG_DMATEST=m
+-CONFIG_DCA=m
+-CONFIG_AUXDISPLAY=y
+-CONFIG_KS0108=m
+-CONFIG_KS0108_PORT=0x378
+-CONFIG_KS0108_DELAY=2
+-CONFIG_CFAG12864B=m
+-CONFIG_CFAG12864B_RATE=20
+-CONFIG_UIO=m
+-CONFIG_UIO_CIF=m
+-CONFIG_UIO_PDRV=m
+-CONFIG_UIO_PDRV_GENIRQ=m
+-CONFIG_UIO_SMX=m
+-CONFIG_STAGING=y
+-CONFIG_ET131X=m
+-# CONFIG_ET131X_DEBUG is not set
+-CONFIG_SLICOSS=m
+-CONFIG_SXG=m
+-CONFIG_ME4000=m
+-CONFIG_VIDEO_GO7007=m
+-CONFIG_VIDEO_GO7007_USB=m
+-CONFIG_USB_IP_COMMON=m
+-CONFIG_USB_IP_VHCI_HCD=m
+-CONFIG_USB_IP_HOST=m
+-CONFIG_W35UND=m
+-CONFIG_PRISM2_USB=m
+-CONFIG_ECHO=m
+-CONFIG_USB_ATMEL=m
+-CONFIG_AGNX=m
+-CONFIG_OTUS=m
+-CONFIG_RT2860=m
+-CONFIG_RT2870=m
+-CONFIG_RT3070=m
+-CONFIG_BENET=m
+-CONFIG_RTL8187SE=m
+-CONFIG_DRM_PSB=m
+-
+-#
+-# Firmware Drivers
+-#
+-CONFIG_EDD=m
+-# CONFIG_EDD_OFF is not set
+-CONFIG_FIRMWARE_MEMMAP=y
+-CONFIG_DELL_RBU=m
+-CONFIG_DCDBAS=m
+-CONFIG_DMIID=y
+-CONFIG_ISCSI_IBFT_FIND=y
+-CONFIG_ISCSI_IBFT=m
+-
+-#
+-# File systems
+-#
+-CONFIG_EXT2_FS=m
+-CONFIG_EXT2_FS_XATTR=y
+-CONFIG_EXT2_FS_POSIX_ACL=y
+-CONFIG_EXT2_FS_SECURITY=y
+-# CONFIG_EXT2_FS_XIP is not set
+-CONFIG_EXT3_FS=m
+-CONFIG_EXT3_FS_XATTR=y
+-CONFIG_EXT3_FS_POSIX_ACL=y
+-CONFIG_EXT3_FS_NFS4ACL=y
+-CONFIG_EXT3_FS_SECURITY=y
+-CONFIG_EXT4DEV_FS=m
+-CONFIG_EXT4DEV_FS_XATTR=y
+-CONFIG_EXT4DEV_FS_POSIX_ACL=y
+-CONFIG_EXT4DEV_FS_SECURITY=y
+-CONFIG_JBD=m
+-CONFIG_JBD_DEBUG=y
+-CONFIG_JBD2=m
+-CONFIG_JBD2_DEBUG=y
+-CONFIG_FS_MBCACHE=m
+-CONFIG_REISERFS_FS=m
+-# CONFIG_REISERFS_CHECK is not set
+-# CONFIG_REISERFS_PROC_INFO is not set
+-CONFIG_REISERFS_FS_XATTR=y
+-CONFIG_REISERFS_FS_POSIX_ACL=y
+-CONFIG_REISERFS_FS_SECURITY=y
+-CONFIG_JFS_FS=m
+-CONFIG_JFS_POSIX_ACL=y
+-CONFIG_JFS_SECURITY=y
+-# CONFIG_JFS_DEBUG is not set
+-CONFIG_JFS_STATISTICS=y
+-CONFIG_FS_POSIX_ACL=y
+-CONFIG_FS_NFS4ACL=y
+-CONFIG_XFS_FS=m
+-CONFIG_XFS_QUOTA=y
+-CONFIG_XFS_DMAPI=m
+-CONFIG_XFS_POSIX_ACL=y
+-CONFIG_XFS_RT=y
+-# CONFIG_XFS_DEBUG is not set
+-CONFIG_GFS2_FS=m
+-CONFIG_GFS2_FS_LOCKING_DLM=m
+-CONFIG_OCFS2_FS=m
+-CONFIG_OCFS2_FS_O2CB=m
+-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+-CONFIG_OCFS2_FS_STATS=y
+-# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+-# CONFIG_OCFS2_DEBUG_FS is not set
+-# CONFIG_OCFS2_COMPAT_JBD is not set
+-CONFIG_DNOTIFY=y
+-CONFIG_INOTIFY=y
+-CONFIG_INOTIFY_USER=y
+-CONFIG_DMAPI=m
+-# CONFIG_DMAPI_DEBUG is not set
+-CONFIG_QUOTA=y
+-CONFIG_QUOTA_NETLINK_INTERFACE=y
+-CONFIG_PRINT_QUOTA_WARNING=y
+-CONFIG_QUOTA_TREE=m
+-CONFIG_QFMT_V1=m
+-CONFIG_QFMT_V2=m
+-CONFIG_QUOTACTL=y
+-CONFIG_AUTOFS_FS=m
+-CONFIG_AUTOFS4_FS=m
+-CONFIG_FUSE_FS=m
+-CONFIG_GENERIC_ACL=y
+-
+-#
+-# CD-ROM/DVD Filesystems
+-#
+-CONFIG_ISO9660_FS=y
+-CONFIG_JOLIET=y
+-CONFIG_ZISOFS=y
+-CONFIG_UDF_FS=m
+-CONFIG_UDF_NLS=y
+-
+-#
+-# DOS/FAT/NT Filesystems
+-#
+-CONFIG_FAT_FS=m
+-CONFIG_MSDOS_FS=m
+-CONFIG_VFAT_FS=m
+-CONFIG_FAT_DEFAULT_CODEPAGE=437
+-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+-CONFIG_NTFS_FS=m
+-# CONFIG_NTFS_DEBUG is not set
+-CONFIG_NTFS_RW=y
+-
+-#
+-# Pseudo filesystems
+-#
+-CONFIG_PROC_FS=y
+-CONFIG_PROC_KCORE=y
+-CONFIG_PROC_VMCORE=y
+-CONFIG_PROC_SYSCTL=y
+-CONFIG_SYSFS=y
+-CONFIG_TMPFS=y
+-CONFIG_TMPFS_POSIX_ACL=y
+-CONFIG_HUGETLBFS=y
+-CONFIG_HUGETLB_PAGE=y
+-CONFIG_CONFIGFS_FS=m
+-
+-#
+-# Miscellaneous filesystems
+-#
+-CONFIG_ADFS_FS=m
+-# CONFIG_ADFS_FS_RW is not set
+-CONFIG_AFFS_FS=m
+-CONFIG_ECRYPT_FS=m
+-CONFIG_HFS_FS=m
+-CONFIG_HFSPLUS_FS=m
+-CONFIG_BEFS_FS=m
+-# CONFIG_BEFS_DEBUG is not set
+-CONFIG_BFS_FS=m
+-CONFIG_EFS_FS=m
+-CONFIG_JFFS2_FS=m
+-CONFIG_JFFS2_FS_DEBUG=0
+-CONFIG_JFFS2_FS_WRITEBUFFER=y
+-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+-CONFIG_JFFS2_SUMMARY=y
+-CONFIG_JFFS2_FS_XATTR=y
+-CONFIG_JFFS2_FS_POSIX_ACL=y
+-CONFIG_JFFS2_FS_SECURITY=y
+-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+-CONFIG_JFFS2_ZLIB=y
+-# CONFIG_JFFS2_LZO is not set
+-CONFIG_JFFS2_RTIME=y
+-# CONFIG_JFFS2_RUBIN is not set
+-# CONFIG_JFFS2_CMODE_NONE is not set
+-CONFIG_JFFS2_CMODE_PRIORITY=y
+-# CONFIG_JFFS2_CMODE_SIZE is not set
+-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+-CONFIG_UBIFS_FS=m
+-CONFIG_UBIFS_FS_XATTR=y
+-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+-CONFIG_UBIFS_FS_LZO=y
+-CONFIG_UBIFS_FS_ZLIB=y
+-# CONFIG_UBIFS_FS_DEBUG is not set
+-CONFIG_CRAMFS=m
+-CONFIG_SQUASHFS=m
+-# CONFIG_SQUASHFS_EMBEDDED is not set
+-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+-CONFIG_VXFS_FS=m
+-CONFIG_MINIX_FS=y
+-CONFIG_OMFS_FS=m
+-CONFIG_HPFS_FS=m
+-CONFIG_QNX4FS_FS=m
+-CONFIG_ROMFS_FS=m
+-CONFIG_SYSV_FS=m
+-CONFIG_UFS_FS=m
+-CONFIG_UFS_FS_WRITE=y
+-# CONFIG_UFS_DEBUG is not set
+-CONFIG_NETWORK_FILESYSTEMS=y
+-CONFIG_NFS_FS=m
+-CONFIG_NFS_V3=y
+-CONFIG_NFS_V3_ACL=y
+-CONFIG_NFS_V4=y
+-CONFIG_NFS_SWAP=y
+-CONFIG_NFSD=m
+-CONFIG_NFSD_V2_ACL=y
+-CONFIG_NFSD_V3=y
+-CONFIG_NFSD_V3_ACL=y
+-CONFIG_NFSD_V4=y
+-CONFIG_LOCKD=m
+-CONFIG_LOCKD_V4=y
+-CONFIG_EXPORTFS=m
+-CONFIG_NFS_ACL_SUPPORT=m
+-CONFIG_NFS_COMMON=y
+-CONFIG_SUNRPC=m
+-CONFIG_SUNRPC_GSS=m
+-CONFIG_SUNRPC_XPRT_RDMA=m
+-CONFIG_SUNRPC_SWAP=y
+-CONFIG_RPCSEC_GSS_KRB5=m
+-CONFIG_RPCSEC_GSS_SPKM3=m
+-# CONFIG_SMB_FS is not set
+-CONFIG_CIFS=m
+-CONFIG_CIFS_STATS=y
+-CONFIG_CIFS_STATS2=y
+-CONFIG_CIFS_WEAK_PW_HASH=y
+-CONFIG_CIFS_UPCALL=y
+-CONFIG_CIFS_XATTR=y
+-CONFIG_CIFS_POSIX=y
+-# CONFIG_CIFS_DEBUG2 is not set
+-CONFIG_CIFS_EXPERIMENTAL=y
+-CONFIG_CIFS_DFS_UPCALL=y
+-CONFIG_NCP_FS=m
+-CONFIG_NCPFS_PACKET_SIGNING=y
+-CONFIG_NCPFS_IOCTL_LOCKING=y
+-CONFIG_NCPFS_STRONG=y
+-CONFIG_NCPFS_NFS_NS=y
+-CONFIG_NCPFS_OS2_NS=y
+-CONFIG_NCPFS_SMALLDOS=y
+-CONFIG_NCPFS_NLS=y
+-CONFIG_NCPFS_EXTRAS=y
+-CONFIG_CODA_FS=m
+-CONFIG_AFS_FS=m
+-# CONFIG_AFS_DEBUG is not set
+-CONFIG_9P_FS=m
+-CONFIG_NOVFS=m
+-
+-#
+-# Partition Types
+-#
+-CONFIG_PARTITION_ADVANCED=y
+-# CONFIG_ACORN_PARTITION is not set
+-CONFIG_OSF_PARTITION=y
+-# CONFIG_AMIGA_PARTITION is not set
+-CONFIG_ATARI_PARTITION=y
+-CONFIG_MAC_PARTITION=y
+-CONFIG_MSDOS_PARTITION=y
+-CONFIG_BSD_DISKLABEL=y
+-# CONFIG_MINIX_SUBPARTITION is not set
+-CONFIG_SOLARIS_X86_PARTITION=y
+-CONFIG_UNIXWARE_DISKLABEL=y
+-CONFIG_LDM_PARTITION=y
+-# CONFIG_LDM_DEBUG is not set
+-CONFIG_SGI_PARTITION=y
+-CONFIG_ULTRIX_PARTITION=y
+-CONFIG_SUN_PARTITION=y
+-CONFIG_KARMA_PARTITION=y
+-CONFIG_EFI_PARTITION=y
+-CONFIG_SYSV68_PARTITION=y
+-CONFIG_NLS=y
+-CONFIG_NLS_DEFAULT="utf8"
+-CONFIG_NLS_CODEPAGE_437=m
+-CONFIG_NLS_CODEPAGE_737=m
+-CONFIG_NLS_CODEPAGE_775=m
+-CONFIG_NLS_CODEPAGE_850=m
+-CONFIG_NLS_CODEPAGE_852=m
+-CONFIG_NLS_CODEPAGE_855=m
+-CONFIG_NLS_CODEPAGE_857=m
+-CONFIG_NLS_CODEPAGE_860=m
+-CONFIG_NLS_CODEPAGE_861=m
+-CONFIG_NLS_CODEPAGE_862=m
+-CONFIG_NLS_CODEPAGE_863=m
+-CONFIG_NLS_CODEPAGE_864=m
+-CONFIG_NLS_CODEPAGE_865=m
+-CONFIG_NLS_CODEPAGE_866=m
+-CONFIG_NLS_CODEPAGE_869=m
+-CONFIG_NLS_CODEPAGE_936=m
+-CONFIG_NLS_CODEPAGE_950=m
+-CONFIG_NLS_CODEPAGE_932=m
+-CONFIG_NLS_CODEPAGE_949=m
+-CONFIG_NLS_CODEPAGE_874=m
+-CONFIG_NLS_ISO8859_8=m
+-CONFIG_NLS_CODEPAGE_1250=m
+-CONFIG_NLS_CODEPAGE_1251=m
+-CONFIG_NLS_ASCII=m
+-CONFIG_NLS_ISO8859_1=m
+-CONFIG_NLS_ISO8859_2=m
+-CONFIG_NLS_ISO8859_3=m
+-CONFIG_NLS_ISO8859_4=m
+-CONFIG_NLS_ISO8859_5=m
+-CONFIG_NLS_ISO8859_6=m
+-CONFIG_NLS_ISO8859_7=m
+-CONFIG_NLS_ISO8859_9=m
+-CONFIG_NLS_ISO8859_13=m
+-CONFIG_NLS_ISO8859_14=m
+-CONFIG_NLS_ISO8859_15=m
+-CONFIG_NLS_KOI8_R=m
+-CONFIG_NLS_KOI8_U=m
+-CONFIG_NLS_UTF8=m
+-CONFIG_DLM=m
+-# CONFIG_DLM_DEBUG is not set
+-
+-#
+-# Kernel hacking
+-#
+-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+-# CONFIG_PRINTK_TIME is not set
+-CONFIG_ENABLE_WARN_DEPRECATED=y
+-# CONFIG_ENABLE_MUST_CHECK is not set
+-CONFIG_FRAME_WARN=1024
+-CONFIG_MAGIC_SYSRQ=y
+-CONFIG_UNUSED_SYMBOLS=y
+-CONFIG_DEBUG_FS=y
+-# CONFIG_HEADERS_CHECK is not set
+-CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SHIRQ is not set
+-# CONFIG_DETECT_SOFTLOCKUP is not set
+-CONFIG_SCHED_DEBUG=y
+-CONFIG_SCHEDSTATS=y
+-CONFIG_TIMER_STATS=y
+-# CONFIG_DEBUG_OBJECTS is not set
+-# CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_RT_MUTEXES is not set
+-# CONFIG_RT_MUTEX_TESTER is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_LOCK_ALLOC is not set
+-# CONFIG_PROVE_LOCKING is not set
+-# CONFIG_LOCK_STAT is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+-CONFIG_STACKTRACE=y
+-# CONFIG_DEBUG_KOBJECT is not set
+-# CONFIG_DEBUG_HIGHMEM is not set
+-CONFIG_DEBUG_BUGVERBOSE=y
+-CONFIG_DEBUG_INFO=y
+-# CONFIG_DEBUG_VM is not set
+-# CONFIG_DEBUG_WRITECOUNT is not set
+-CONFIG_DEBUG_MEMORY_INIT=y
+-# CONFIG_DEBUG_LIST is not set
+-# CONFIG_DEBUG_SG is not set
+-# CONFIG_FRAME_POINTER is not set
+-CONFIG_UNWIND_INFO=y
+-CONFIG_STACK_UNWIND=y
+-# CONFIG_BOOT_PRINTK_DELAY is not set
+-CONFIG_RCU_TORTURE_TEST=m
+-# CONFIG_KPROBES_SANITY_TEST is not set
+-# CONFIG_BACKTRACE_SELF_TEST is not set
+-CONFIG_LKDTM=m
+-# CONFIG_FAULT_INJECTION is not set
+-CONFIG_LATENCYTOP=y
+-CONFIG_SYSCTL_SYSCALL_CHECK=y
+-CONFIG_HAVE_FTRACE=y
+-CONFIG_HAVE_DYNAMIC_FTRACE=y
+-# CONFIG_FTRACE is not set
+-# CONFIG_IRQSOFF_TRACER is not set
+-# CONFIG_SYSPROF_TRACER is not set
+-# CONFIG_SCHED_TRACER is not set
+-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+-CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+-CONFIG_DYNAMIC_PRINTK_DEBUG=y
+-# CONFIG_SAMPLES is not set
+-CONFIG_HAVE_ARCH_KGDB=y
+-# CONFIG_KGDB is not set
+-# CONFIG_STRICT_DEVMEM is not set
+-# CONFIG_X86_VERBOSE_BOOTUP is not set
+-CONFIG_EARLY_PRINTK=y
+-CONFIG_EARLY_PRINTK_DBGP=y
+-# CONFIG_DEBUG_STACKOVERFLOW is not set
+-# CONFIG_DEBUG_STACK_USAGE is not set
+-# CONFIG_DEBUG_PAGEALLOC is not set
+-# CONFIG_DEBUG_PER_CPU_MAPS is not set
+-# CONFIG_X86_PTDUMP is not set
+-CONFIG_DEBUG_RODATA=y
+-# CONFIG_DEBUG_RODATA_TEST is not set
+-# CONFIG_DEBUG_NX_TEST is not set
+-# CONFIG_4KSTACKS is not set
+-CONFIG_DOUBLEFAULT=y
+-# CONFIG_MMIOTRACE is not set
+-CONFIG_IO_DELAY_TYPE_0X80=0
+-CONFIG_IO_DELAY_TYPE_0XED=1
+-CONFIG_IO_DELAY_TYPE_UDELAY=2
+-CONFIG_IO_DELAY_TYPE_NONE=3
+-CONFIG_IO_DELAY_0X80=y
+-# CONFIG_IO_DELAY_0XED is not set
+-# CONFIG_IO_DELAY_UDELAY is not set
+-# CONFIG_IO_DELAY_NONE is not set
+-CONFIG_DEFAULT_IO_DELAY_TYPE=0
+-# CONFIG_DEBUG_BOOT_PARAMS is not set
+-# CONFIG_CPA_DEBUG is not set
+-# CONFIG_OPTIMIZE_INLINING is not set
+-CONFIG_KDB=y
+-CONFIG_KDB_MODULES=m
+-CONFIG_KDB_OFF=y
+-CONFIG_KDB_CONTINUE_CATASTROPHIC=0
+-CONFIG_KDB_USB=y
+-CONFIG_KDB_KDUMP=y
+-
+-#
+-# Security options
+-#
+-CONFIG_KEYS=y
+-CONFIG_KEYS_DEBUG_PROC_KEYS=y
+-CONFIG_SECURITY=y
+-CONFIG_SECURITY_DEFAULT="apparmor"
+-CONFIG_SECURITY_NETWORK=y
+-# CONFIG_SECURITY_NETWORK_XFRM is not set
+-CONFIG_SECURITY_FILE_CAPABILITIES=y
+-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+-CONFIG_SECURITY_SELINUX=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
+-CONFIG_SECURITY_SELINUX_DISABLE=y
+-CONFIG_SECURITY_SELINUX_DEVELOP=y
+-CONFIG_SECURITY_SELINUX_AVC_STATS=y
+-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
+-CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
+-# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+-CONFIG_SECURITY_APPARMOR=y
+-CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
+-CONFIG_SECURITY_APPARMOR_DISABLE=y
+-CONFIG_XOR_BLOCKS=m
+-CONFIG_ASYNC_CORE=m
+-CONFIG_ASYNC_MEMCPY=m
+-CONFIG_ASYNC_XOR=m
+-CONFIG_CRYPTO=y
+-
+-#
+-# Crypto core or helper
+-#
+-CONFIG_CRYPTO_ALGAPI=y
+-CONFIG_CRYPTO_AEAD=m
+-CONFIG_CRYPTO_BLKCIPHER=m
+-CONFIG_CRYPTO_HASH=y
+-CONFIG_CRYPTO_MANAGER=y
+-CONFIG_CRYPTO_GF128MUL=m
+-CONFIG_CRYPTO_NULL=m
+-CONFIG_CRYPTO_CRYPTD=m
+-CONFIG_CRYPTO_AUTHENC=m
+-CONFIG_CRYPTO_TEST=m
+-
+-#
+-# Authenticated Encryption with Associated Data
+-#
+-CONFIG_CRYPTO_CCM=m
+-CONFIG_CRYPTO_GCM=m
+-CONFIG_CRYPTO_SEQIV=m
+-
+-#
+-# Block modes
+-#
+-CONFIG_CRYPTO_CBC=m
+-CONFIG_CRYPTO_CTR=m
+-CONFIG_CRYPTO_CTS=m
+-CONFIG_CRYPTO_ECB=m
+-CONFIG_CRYPTO_LRW=m
+-CONFIG_CRYPTO_PCBC=m
+-CONFIG_CRYPTO_XTS=m
+-
+-#
+-# Hash modes
+-#
+-CONFIG_CRYPTO_HMAC=y
+-CONFIG_CRYPTO_XCBC=m
+-
+-#
+-# Digest
+-#
+-CONFIG_CRYPTO_CRC32C=m
+-CONFIG_CRYPTO_MD4=m
+-CONFIG_CRYPTO_MD5=m
+-CONFIG_CRYPTO_MICHAEL_MIC=m
+-CONFIG_CRYPTO_RMD128=m
+-CONFIG_CRYPTO_RMD160=m
+-CONFIG_CRYPTO_RMD256=m
+-CONFIG_CRYPTO_RMD320=m
+-CONFIG_CRYPTO_SHA1=m
+-CONFIG_CRYPTO_SHA256=m
+-CONFIG_CRYPTO_SHA512=m
+-CONFIG_CRYPTO_TGR192=m
+-CONFIG_CRYPTO_WP512=m
+-
+-#
+-# Ciphers
+-#
+-CONFIG_CRYPTO_AES=m
+-CONFIG_CRYPTO_AES_586=m
+-CONFIG_CRYPTO_ANUBIS=m
+-CONFIG_CRYPTO_ARC4=m
+-CONFIG_CRYPTO_BLOWFISH=m
+-CONFIG_CRYPTO_CAMELLIA=m
+-CONFIG_CRYPTO_CAST5=m
+-CONFIG_CRYPTO_CAST6=m
+-CONFIG_CRYPTO_DES=m
+-CONFIG_CRYPTO_FCRYPT=m
+-CONFIG_CRYPTO_KHAZAD=m
+-CONFIG_CRYPTO_SALSA20=m
+-CONFIG_CRYPTO_SALSA20_586=m
+-CONFIG_CRYPTO_SEED=m
+-CONFIG_CRYPTO_SERPENT=m
+-CONFIG_CRYPTO_TEA=m
+-# CONFIG_CRYPTO_TWOFISH is not set
+-CONFIG_CRYPTO_TWOFISH_COMMON=m
+-CONFIG_CRYPTO_TWOFISH_586=m
+-
+-#
+-# Compression
+-#
+-CONFIG_CRYPTO_DEFLATE=m
+-CONFIG_CRYPTO_LZO=m
+-CONFIG_CRYPTO_HW=y
+-CONFIG_CRYPTO_DEV_PADLOCK=m
+-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+-CONFIG_CRYPTO_DEV_GEODE=m
+-CONFIG_CRYPTO_DEV_HIFN_795X=m
+-CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+-CONFIG_HAVE_KVM=y
+-CONFIG_VIRTUALIZATION=y
+-CONFIG_KVM_KMP=y
+-# CONFIG_KVM is not set
+-# CONFIG_LGUEST is not set
+-CONFIG_VIRTIO=m
+-CONFIG_VIRTIO_RING=m
+-CONFIG_VIRTIO_PCI=m
+-CONFIG_VIRTIO_BALLOON=m
+-
+-#
+-# Library routines
+-#
+-CONFIG_BITREVERSE=y
+-CONFIG_GENERIC_FIND_FIRST_BIT=y
+-CONFIG_GENERIC_FIND_NEXT_BIT=y
+-CONFIG_CRC_CCITT=m
+-CONFIG_CRC16=m
+-CONFIG_CRC_T10DIF=m
+-CONFIG_CRC_ITU_T=m
+-CONFIG_CRC32=y
+-CONFIG_CRC7=m
+-CONFIG_LIBCRC32C=m
+-CONFIG_AUDIT_GENERIC=y
+-CONFIG_ZLIB_INFLATE=y
+-CONFIG_ZLIB_DEFLATE=m
+-CONFIG_LZO_COMPRESS=m
+-CONFIG_LZO_DECOMPRESS=m
+-CONFIG_GENERIC_ALLOCATOR=y
+-CONFIG_REED_SOLOMON=m
+-CONFIG_REED_SOLOMON_DEC16=y
+-CONFIG_TEXTSEARCH=y
+-CONFIG_TEXTSEARCH_KMP=m
+-CONFIG_TEXTSEARCH_BM=m
+-CONFIG_TEXTSEARCH_FSM=m
+-CONFIG_PLIST=y
+-CONFIG_HAS_IOMEM=y
+-CONFIG_HAS_IOPORT=y
+-CONFIG_HAS_DMA=y
+-CONFIG_CHECK_SIGNATURE=y
+diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config
+deleted file mode 100644
+index 81bc07f..0000000
+--- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-i686.config
++++ /dev/null
+@@ -1,4409 +0,0 @@
+-#
+-# Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.27.21
+-# Wed May 13 22:15:21 2009
+-#
+-# CONFIG_64BIT is not set
+-CONFIG_X86_32=y
+-# CONFIG_X86_64 is not set
+-CONFIG_X86=y
+-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
+-# CONFIG_GENERIC_LOCKBREAK is not set
+-CONFIG_GENERIC_TIME=y
+-CONFIG_GENERIC_CMOS_UPDATE=y
+-CONFIG_CLOCKSOURCE_WATCHDOG=y
+-CONFIG_GENERIC_CLOCKEVENTS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+-CONFIG_LOCKDEP_SUPPORT=y
+-CONFIG_STACKTRACE_SUPPORT=y
+-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+-CONFIG_FAST_CMPXCHG_LOCAL=y
+-CONFIG_MMU=y
+-CONFIG_ZONE_DMA=y
+-CONFIG_GENERIC_ISA_DMA=y
+-CONFIG_GENERIC_IOMAP=y
+-CONFIG_GENERIC_BUG=y
+-CONFIG_GENERIC_HWEIGHT=y
+-CONFIG_GENERIC_GPIO=y
+-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
+-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+-CONFIG_GENERIC_CALIBRATE_DELAY=y
+-# CONFIG_GENERIC_TIME_VSYSCALL is not set
+-CONFIG_ARCH_HAS_CPU_RELAX=y
+-CONFIG_ARCH_HAS_DEFAULT_IDLE=y
+-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+-# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
+-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+-CONFIG_ARCH_SUSPEND_POSSIBLE=y
+-# CONFIG_ZONE_DMA32 is not set
+-CONFIG_ARCH_POPULATES_NODE_MAP=y
+-# CONFIG_AUDIT_ARCH is not set
+-CONFIG_ARCH_SUPPORTS_AOUT=y
+-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+-CONFIG_GENERIC_HARDIRQS=y
+-CONFIG_GENERIC_IRQ_PROBE=y
+-CONFIG_GENERIC_PENDING_IRQ=y
+-CONFIG_X86_SMP=y
+-CONFIG_X86_32_SMP=y
+-CONFIG_X86_HT=y
+-CONFIG_X86_BIOS_REBOOT=y
+-CONFIG_X86_TRAMPOLINE=y
+-CONFIG_KTIME_SCALAR=y
+-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+-
+-#
+-# General setup
+-#
+-CONFIG_EXPERIMENTAL=y
+-CONFIG_LOCK_KERNEL=y
+-CONFIG_INIT_ENV_ARG_LIMIT=32
+-CONFIG_LOCALVERSION="-0.1-default"
+-# CONFIG_LOCALVERSION_AUTO is not set
+-CONFIG_SUSE_KERNEL=y
+-CONFIG_SWAP=y
+-CONFIG_SYSVIPC=y
+-CONFIG_SYSVIPC_SYSCTL=y
+-CONFIG_POSIX_MQUEUE=y
+-CONFIG_BSD_PROCESS_ACCT=y
+-CONFIG_BSD_PROCESS_ACCT_V3=y
+-CONFIG_TASKSTATS=y
+-CONFIG_TASK_DELAY_ACCT=y
+-CONFIG_TASK_XACCT=y
+-CONFIG_TASK_IO_ACCOUNTING=y
+-CONFIG_AUDIT=y
+-CONFIG_AUDITSYSCALL=y
+-CONFIG_AUDIT_TREE=y
+-CONFIG_IKCONFIG=y
+-CONFIG_IKCONFIG_PROC=y
+-CONFIG_LOG_BUF_SHIFT=17
+-CONFIG_CGROUPS=y
+-# CONFIG_CGROUP_DEBUG is not set
+-CONFIG_CGROUP_NS=y
+-CONFIG_CGROUP_FREEZER=y
+-CONFIG_CGROUP_DEVICE=y
+-CONFIG_CPUSETS=y
+-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+-CONFIG_GROUP_SCHED=y
+-CONFIG_FAIR_GROUP_SCHED=y
+-# CONFIG_RT_GROUP_SCHED is not set
+-# CONFIG_USER_SCHED is not set
+-CONFIG_CGROUP_SCHED=y
+-CONFIG_CGROUP_CPUACCT=y
+-CONFIG_RESOURCE_COUNTERS=y
+-CONFIG_MM_OWNER=y
+-CONFIG_CGROUP_MEM_RES_CTLR=y
+-# CONFIG_SYSFS_DEPRECATED_V2 is not set
+-CONFIG_PROC_PID_CPUSET=y
+-CONFIG_RELAY=y
+-CONFIG_NAMESPACES=y
+-CONFIG_UTS_NS=y
+-CONFIG_IPC_NS=y
+-CONFIG_USER_NS=y
+-CONFIG_PID_NS=y
+-CONFIG_BLK_DEV_INITRD=y
+-CONFIG_INITRAMFS_SOURCE=""
+-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+-CONFIG_SYSCTL=y
+-# CONFIG_EMBEDDED is not set
+-CONFIG_UID16=y
+-CONFIG_SYSCTL_SYSCALL=y
+-CONFIG_KALLSYMS=y
+-CONFIG_KALLSYMS_ALL=y
+-# CONFIG_KALLSYMS_EXTRA_PASS is not set
+-CONFIG_HOTPLUG=y
+-CONFIG_PRINTK=y
+-CONFIG_BUG=y
+-CONFIG_ELF_CORE=y
+-CONFIG_PCSPKR_PLATFORM=y
+-CONFIG_COMPAT_BRK=y
+-CONFIG_BASE_FULL=y
+-CONFIG_FUTEX=y
+-CONFIG_ANON_INODES=y
+-CONFIG_EPOLL=y
+-CONFIG_SIGNALFD=y
+-CONFIG_TIMERFD=y
+-CONFIG_EVENTFD=y
+-CONFIG_SHMEM=y
+-CONFIG_VM_EVENT_COUNTERS=y
+-CONFIG_SLAB=y
+-# CONFIG_SLUB is not set
+-# CONFIG_SLOB is not set
+-CONFIG_PROFILING=y
+-# CONFIG_TRACEPOINTS is not set
+-CONFIG_MARKERS=y
+-CONFIG_OPROFILE=m
+-CONFIG_HAVE_OPROFILE=y
+-CONFIG_KPROBES=y
+-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+-CONFIG_KRETPROBES=y
+-CONFIG_HAVE_IOREMAP_PROT=y
+-CONFIG_HAVE_KPROBES=y
+-CONFIG_HAVE_KRETPROBES=y
+-CONFIG_HAVE_ARCH_TRACEHOOK=y
+-# CONFIG_HAVE_DMA_ATTRS is not set
+-CONFIG_USE_GENERIC_SMP_HELPERS=y
+-# CONFIG_HAVE_CLK is not set
+-CONFIG_PROC_PAGE_MONITOR=y
+-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+-CONFIG_SLABINFO=y
+-CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+-CONFIG_BASE_SMALL=0
+-CONFIG_MODULES=y
+-CONFIG_MODULE_FORCE_LOAD=y
+-CONFIG_MODULE_UNLOAD=y
+-CONFIG_MODULE_FORCE_UNLOAD=y
+-CONFIG_MODVERSIONS=y
+-CONFIG_MODULE_SRCVERSION_ALL=y
+-CONFIG_KMOD=y
+-CONFIG_STOP_MACHINE=y
+-# CONFIG_UTRACE is not set
+-CONFIG_BLOCK=y
+-CONFIG_LBD=y
+-CONFIG_BLK_DEV_IO_TRACE=y
+-CONFIG_LSF=y
+-CONFIG_BLK_DEV_BSG=y
+-CONFIG_BLK_DEV_INTEGRITY=y
+-
+-#
+-# IO Schedulers
+-#
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_DEFAULT_AS is not set
+-CONFIG_DEFAULT_DEADLINE=y
+-# CONFIG_DEFAULT_CFQ is not set
+-# CONFIG_DEFAULT_NOOP is not set
+-CONFIG_DEFAULT_IOSCHED="deadline"
+-CONFIG_PREEMPT_NOTIFIERS=y
+-CONFIG_CLASSIC_RCU=y
+-CONFIG_FREEZER=y
+-
+-#
+-# Processor type and features
+-#
+-CONFIG_TICK_ONESHOT=y
+-CONFIG_NO_HZ=y
+-CONFIG_HIGH_RES_TIMERS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+-CONFIG_SMP=y
+-CONFIG_X86_FIND_SMP_CONFIG=y
+-CONFIG_X86_MPPARSE=y
+-# CONFIG_X86_PC is not set
+-# CONFIG_X86_XEN is not set
+-# CONFIG_X86_ELAN is not set
+-# CONFIG_X86_VOYAGER is not set
+-CONFIG_X86_GENERICARCH=y
+-# CONFIG_X86_NUMAQ is not set
+-CONFIG_X86_SUMMIT=y
+-CONFIG_X86_ES7000=y
+-CONFIG_X86_BIGSMP=y
+-# CONFIG_X86_64_XEN is not set
+-# CONFIG_X86_VSMP is not set
+-# CONFIG_X86_RDC321X is not set
+-# CONFIG_PARAVIRT_GUEST is not set
+-CONFIG_MEMTEST=y
+-CONFIG_X86_CYCLONE_TIMER=y
+-# CONFIG_M386 is not set
+-# CONFIG_M486 is not set
+-CONFIG_M586=y
+-# CONFIG_M586TSC is not set
+-# CONFIG_M586MMX is not set
+-# CONFIG_M686 is not set
+-# CONFIG_MPENTIUMII is not set
+-# CONFIG_MPENTIUMIII is not set
+-# CONFIG_MPENTIUMM is not set
+-# CONFIG_MPENTIUM4 is not set
+-# CONFIG_MK6 is not set
+-# CONFIG_MK7 is not set
+-# CONFIG_MK8 is not set
+-# CONFIG_MCRUSOE is not set
+-# CONFIG_MEFFICEON is not set
+-# CONFIG_MWINCHIPC6 is not set
+-# CONFIG_MWINCHIP2 is not set
+-# CONFIG_MWINCHIP3D is not set
+-# CONFIG_MGEODEGX1 is not set
+-# CONFIG_MGEODE_LX is not set
+-# CONFIG_MCYRIXIII is not set
+-# CONFIG_MVIAC3_2 is not set
+-# CONFIG_MVIAC7 is not set
+-# CONFIG_MPSC is not set
+-# CONFIG_MCORE2 is not set
+-# CONFIG_GENERIC_CPU is not set
+-CONFIG_X86_GENERIC=y
+-CONFIG_X86_CPU=y
+-CONFIG_X86_CMPXCHG=y
+-CONFIG_X86_L1_CACHE_SHIFT=7
+-CONFIG_X86_XADD=y
+-CONFIG_X86_PPRO_FENCE=y
+-CONFIG_X86_F00F_BUG=y
+-CONFIG_X86_WP_WORKS_OK=y
+-CONFIG_X86_INVLPG=y
+-CONFIG_X86_BSWAP=y
+-CONFIG_X86_POPAD_OK=y
+-CONFIG_X86_ALIGNMENT_16=y
+-CONFIG_X86_INTEL_USERCOPY=y
+-CONFIG_X86_MINIMUM_CPU_FAMILY=4
+-CONFIG_HPET_TIMER=y
+-CONFIG_HPET_EMULATE_RTC=y
+-CONFIG_DMI=y
+-# CONFIG_IOMMU_HELPER is not set
+-CONFIG_NR_CPUS=32
+-CONFIG_SCHED_SMT=y
+-CONFIG_SCHED_MC=y
+-CONFIG_PREEMPT_NONE=y
+-# CONFIG_PREEMPT_VOLUNTARY is not set
+-# CONFIG_PREEMPT is not set
+-# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
+-CONFIG_X86_LOCAL_APIC=y
+-CONFIG_X86_IO_APIC=y
+-CONFIG_X86_MCE=y
+-CONFIG_X86_MCE_NONFATAL=y
+-CONFIG_X86_MCE_P4THERMAL=y
+-CONFIG_VM86=y
+-CONFIG_TOSHIBA=m
+-CONFIG_I8K=m
+-CONFIG_X86_REBOOTFIXUPS=y
+-CONFIG_MICROCODE=m
+-CONFIG_MICROCODE_OLD_INTERFACE=y
+-CONFIG_X86_MSR=m
+-CONFIG_X86_CPUID=m
+-# CONFIG_NOHIGHMEM is not set
+-CONFIG_HIGHMEM4G=y
+-# CONFIG_HIGHMEM64G is not set
+-CONFIG_PAGE_OFFSET=0xC0000000
+-CONFIG_HIGHMEM=y
+-
+-#
+-# NUMA (Summit) requires SMP, 64GB highmem support, ACPI
+-#
+-CONFIG_SELECT_MEMORY_MODEL=y
+-CONFIG_FLATMEM_MANUAL=y
+-# CONFIG_DISCONTIGMEM_MANUAL is not set
+-# CONFIG_SPARSEMEM_MANUAL is not set
+-CONFIG_FLATMEM=y
+-CONFIG_FLAT_NODE_MEM_MAP=y
+-# CONFIG_SPARSEMEM_STATIC is not set
+-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+-CONFIG_PAGEFLAGS_EXTENDED=y
+-CONFIG_SPLIT_PTLOCK_CPUS=4
+-# CONFIG_RESOURCES_64BIT is not set
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
+-CONFIG_VIRT_TO_BUS=y
+-CONFIG_MMU_NOTIFIER=y
+-CONFIG_HIGHPTE=y
+-CONFIG_X86_RESERVE_LOW_64K=y
+-# CONFIG_MATH_EMULATION is not set
+-CONFIG_MTRR=y
+-# CONFIG_MTRR_SANITIZER is not set
+-CONFIG_X86_PAT=y
+-# CONFIG_EFI is not set
+-# CONFIG_IRQBALANCE is not set
+-CONFIG_SECCOMP=y
+-# CONFIG_SECCOMP_DISABLE_TSC is not set
+-# CONFIG_HZ_100 is not set
+-CONFIG_HZ_250=y
+-# CONFIG_HZ_300 is not set
+-# CONFIG_HZ_1000 is not set
+-CONFIG_HZ=250
+-CONFIG_SCHED_HRTICK=y
+-CONFIG_KEXEC=y
+-CONFIG_CRASH_DUMP=y
+-# CONFIG_KEXEC_JUMP is not set
+-CONFIG_PHYSICAL_START=0x100000
+-CONFIG_RELOCATABLE=y
+-CONFIG_PHYSICAL_ALIGN=0x100000
+-CONFIG_HOTPLUG_CPU=y
+-CONFIG_COMPAT_VDSO=y
+-
+-#
+-# Hardware Performance Monitoring support
+-#
+-CONFIG_PERFMON=y
+-# CONFIG_PERFMON_DEBUG is not set
+-CONFIG_PERFMON_DEBUG_FS=y
+-CONFIG_X86_PERFMON_P6=m
+-CONFIG_X86_PERFMON_P4=m
+-CONFIG_X86_PERFMON_PEBS_P4=m
+-CONFIG_X86_PERFMON_CORE=m
+-CONFIG_X86_PERFMON_PEBS_CORE=m
+-CONFIG_X86_PERFMON_INTEL_ATOM=m
+-CONFIG_X86_PERFMON_INTEL_ARCH=m
+-CONFIG_X86_PERFMON_AMD64=m
+-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+-
+-#
+-# Power management options
+-#
+-CONFIG_PM=y
+-# CONFIG_PM_DEBUG is not set
+-CONFIG_PM_SLEEP_SMP=y
+-CONFIG_PM_SLEEP=y
+-CONFIG_SUSPEND=y
+-CONFIG_SUSPEND_FREEZER=y
+-CONFIG_HIBERNATION=y
+-CONFIG_PM_STD_PARTITION=""
+-CONFIG_ACPI=y
+-CONFIG_ACPI_SLEEP=y
+-CONFIG_ACPI_PROCFS=y
+-CONFIG_ACPI_PROCFS_POWER=y
+-CONFIG_ACPI_SYSFS_POWER=y
+-CONFIG_ACPI_PROC_EVENT=y
+-CONFIG_ACPI_AC=m
+-CONFIG_ACPI_BATTERY=m
+-CONFIG_ACPI_BUTTON=m
+-CONFIG_ACPI_VIDEO=m
+-CONFIG_ACPI_FAN=m
+-CONFIG_ACPI_DOCK=m
+-CONFIG_ACPI_PROCESSOR=m
+-CONFIG_ACPI_HOTPLUG_CPU=y
+-CONFIG_ACPI_THERMAL=m
+-CONFIG_ACPI_WMI=m
+-# CONFIG_ACPI_ASUS is not set
+-CONFIG_ACPI_TOSHIBA=m
+-CONFIG_ACPI_CUSTOM_DSDT_FILE=""
+-# CONFIG_ACPI_CUSTOM_DSDT is not set
+-CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+-CONFIG_ACPI_BLACKLIST_YEAR=2001
+-CONFIG_ACPI_DEBUG=y
+-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
+-CONFIG_ACPI_EC=y
+-CONFIG_ACPI_PCI_SLOT=m
+-CONFIG_ACPI_POWER=y
+-CONFIG_ACPI_SYSTEM=y
+-CONFIG_X86_PM_TIMER=y
+-CONFIG_ACPI_CONTAINER=m
+-CONFIG_ACPI_SBS=m
+-CONFIG_X86_APM_BOOT=y
+-CONFIG_APM=m
+-# CONFIG_APM_IGNORE_USER_SUSPEND is not set
+-CONFIG_APM_DO_ENABLE=y
+-# CONFIG_APM_CPU_IDLE is not set
+-CONFIG_APM_DISPLAY_BLANK=y
+-CONFIG_APM_ALLOW_INTS=y
+-# CONFIG_APM_REAL_MODE_POWER_OFF is not set
+-
+-#
+-# CPU Frequency scaling
+-#
+-CONFIG_CPU_FREQ=y
+-CONFIG_CPU_FREQ_TABLE=y
+-# CONFIG_CPU_FREQ_DEBUG is not set
+-CONFIG_CPU_FREQ_STAT=m
+-CONFIG_CPU_FREQ_STAT_DETAILS=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+-CONFIG_CPU_FREQ_GOV_USERSPACE=m
+-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+-
+-#
+-# CPUFreq processor drivers
+-#
+-CONFIG_X86_ACPI_CPUFREQ=m
+-CONFIG_X86_POWERNOW_K6=m
+-CONFIG_X86_POWERNOW_K7=m
+-CONFIG_X86_POWERNOW_K7_ACPI=y
+-CONFIG_X86_POWERNOW_K8=m
+-CONFIG_X86_POWERNOW_K8_ACPI=y
+-CONFIG_X86_GX_SUSPMOD=m
+-CONFIG_X86_SPEEDSTEP_CENTRINO=m
+-CONFIG_X86_SPEEDSTEP_CENTRINO_TABLE=y
+-CONFIG_X86_SPEEDSTEP_ICH=m
+-CONFIG_X86_SPEEDSTEP_SMI=m
+-CONFIG_X86_P4_CLOCKMOD=m
+-CONFIG_X86_CPUFREQ_NFORCE2=m
+-CONFIG_X86_LONGRUN=m
+-CONFIG_X86_LONGHAUL=m
+-CONFIG_X86_E_POWERSAVER=m
+-
+-#
+-# shared options
+-#
+-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+-CONFIG_X86_SPEEDSTEP_LIB=m
+-CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK=y
+-CONFIG_CPU_IDLE=y
+-CONFIG_CPU_IDLE_GOV_LADDER=y
+-CONFIG_CPU_IDLE_GOV_MENU=y
+-
+-#
+-# Bus options (PCI etc.)
+-#
+-CONFIG_PCI=y
+-# CONFIG_PCI_GOBIOS is not set
+-# CONFIG_PCI_GOMMCONFIG is not set
+-# CONFIG_PCI_GODIRECT is not set
+-# CONFIG_PCI_GOOLPC is not set
+-# CONFIG_PCI_GOXEN_FE is not set
+-CONFIG_PCI_GOANY=y
+-CONFIG_PCI_BIOS=y
+-CONFIG_PCI_DIRECT=y
+-CONFIG_PCI_MMCONFIG=y
+-CONFIG_PCI_OLPC=y
+-CONFIG_PCI_DOMAINS=y
+-CONFIG_PCIEPORTBUS=y
+-CONFIG_HOTPLUG_PCI_PCIE=m
+-CONFIG_PCIEAER=y
+-CONFIG_PCIEASPM=y
+-# CONFIG_PCIEASPM_DEBUG is not set
+-CONFIG_ARCH_SUPPORTS_MSI=y
+-CONFIG_PCI_MSI=y
+-CONFIG_PCI_LEGACY=y
+-# CONFIG_PCI_DEBUG is not set
+-CONFIG_HT_IRQ=y
+-CONFIG_ISA_DMA_API=y
+-CONFIG_ISA=y
+-# CONFIG_EISA is not set
+-# CONFIG_MCA is not set
+-CONFIG_SCx200=m
+-CONFIG_SCx200HR_TIMER=m
+-CONFIG_OLPC=y
+-CONFIG_K8_NB=y
+-CONFIG_PCCARD=m
+-# CONFIG_PCMCIA_DEBUG is not set
+-CONFIG_PCMCIA=m
+-CONFIG_PCMCIA_LOAD_CIS=y
+-CONFIG_PCMCIA_IOCTL=y
+-CONFIG_CARDBUS=y
+-
+-#
+-# PC-card bridges
+-#
+-CONFIG_YENTA=m
+-CONFIG_YENTA_O2=y
+-CONFIG_YENTA_RICOH=y
+-CONFIG_YENTA_TI=y
+-CONFIG_YENTA_ENE_TUNE=y
+-CONFIG_YENTA_TOSHIBA=y
+-CONFIG_PD6729=m
+-CONFIG_I82092=m
+-CONFIG_I82365=m
+-CONFIG_TCIC=m
+-CONFIG_PCMCIA_PROBE=y
+-CONFIG_PCCARD_NONSTATIC=m
+-CONFIG_HOTPLUG_PCI=m
+-CONFIG_HOTPLUG_PCI_FAKE=m
+-CONFIG_HOTPLUG_PCI_COMPAQ=m
+-CONFIG_HOTPLUG_PCI_COMPAQ_NVRAM=y
+-CONFIG_HOTPLUG_PCI_IBM=m
+-CONFIG_HOTPLUG_PCI_ACPI=m
+-CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+-CONFIG_HOTPLUG_PCI_CPCI=y
+-CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+-CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+-CONFIG_HOTPLUG_PCI_SHPC=m
+-
+-#
+-# Executable file formats / Emulations
+-#
+-CONFIG_BINFMT_ELF=y
+-CONFIG_BINFMT_AOUT=m
+-CONFIG_BINFMT_MISC=m
+-CONFIG_NET=y
+-
+-#
+-# Networking options
+-#
+-CONFIG_PACKET=m
+-CONFIG_PACKET_MMAP=y
+-CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-CONFIG_XFRM_USER=m
+-CONFIG_XFRM_SUB_POLICY=y
+-CONFIG_XFRM_MIGRATE=y
+-# CONFIG_XFRM_STATISTICS is not set
+-CONFIG_XFRM_IPCOMP=m
+-CONFIG_NET_KEY=m
+-CONFIG_NET_KEY_MIGRATE=y
+-CONFIG_INET=y
+-CONFIG_IP_MULTICAST=y
+-CONFIG_IP_ADVANCED_ROUTER=y
+-CONFIG_ASK_IP_FIB_HASH=y
+-# CONFIG_IP_FIB_TRIE is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_MULTIPLE_TABLES=y
+-CONFIG_IP_ROUTE_MULTIPATH=y
+-CONFIG_IP_ROUTE_VERBOSE=y
+-# CONFIG_IP_PNP is not set
+-CONFIG_NET_IPIP=m
+-CONFIG_NET_IPGRE=m
+-CONFIG_NET_IPGRE_BROADCAST=y
+-CONFIG_IP_MROUTE=y
+-CONFIG_IP_PIMSM_V1=y
+-CONFIG_IP_PIMSM_V2=y
+-# CONFIG_ARPD is not set
+-CONFIG_SYN_COOKIES=y
+-CONFIG_INET_AH=m
+-CONFIG_INET_ESP=m
+-CONFIG_INET_IPCOMP=m
+-CONFIG_INET_XFRM_TUNNEL=m
+-CONFIG_INET_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET_XFRM_MODE_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_BEET=m
+-CONFIG_INET_LRO=y
+-CONFIG_INET_DIAG=m
+-CONFIG_INET_TCP_DIAG=m
+-CONFIG_TCP_CONG_ADVANCED=y
+-CONFIG_TCP_CONG_BIC=m
+-CONFIG_TCP_CONG_CUBIC=y
+-CONFIG_TCP_CONG_WESTWOOD=m
+-CONFIG_TCP_CONG_HTCP=m
+-CONFIG_TCP_CONG_HSTCP=m
+-CONFIG_TCP_CONG_HYBLA=m
+-CONFIG_TCP_CONG_VEGAS=m
+-CONFIG_TCP_CONG_SCALABLE=m
+-CONFIG_TCP_CONG_LP=m
+-CONFIG_TCP_CONG_VENO=m
+-CONFIG_TCP_CONG_YEAH=m
+-CONFIG_TCP_CONG_ILLINOIS=m
+-# CONFIG_DEFAULT_BIC is not set
+-CONFIG_DEFAULT_CUBIC=y
+-# CONFIG_DEFAULT_HTCP is not set
+-# CONFIG_DEFAULT_VEGAS is not set
+-# CONFIG_DEFAULT_WESTWOOD is not set
+-# CONFIG_DEFAULT_RENO is not set
+-CONFIG_DEFAULT_TCP_CONG="cubic"
+-# CONFIG_TCP_MD5SIG is not set
+-CONFIG_IP_VS=m
+-# CONFIG_IP_VS_DEBUG is not set
+-CONFIG_IP_VS_TAB_BITS=12
+-
+-#
+-# IPVS transport protocol load balancing support
+-#
+-CONFIG_IP_VS_PROTO_TCP=y
+-CONFIG_IP_VS_PROTO_UDP=y
+-CONFIG_IP_VS_PROTO_ESP=y
+-CONFIG_IP_VS_PROTO_AH=y
+-
+-#
+-# IPVS scheduler
+-#
+-CONFIG_IP_VS_RR=m
+-CONFIG_IP_VS_WRR=m
+-CONFIG_IP_VS_LC=m
+-CONFIG_IP_VS_WLC=m
+-CONFIG_IP_VS_LBLC=m
+-CONFIG_IP_VS_LBLCR=m
+-CONFIG_IP_VS_DH=m
+-CONFIG_IP_VS_SH=m
+-CONFIG_IP_VS_SED=m
+-CONFIG_IP_VS_NQ=m
+-
+-#
+-# IPVS application helper
+-#
+-CONFIG_IP_VS_FTP=m
+-CONFIG_IPV6=m
+-CONFIG_IPV6_PRIVACY=y
+-CONFIG_IPV6_ROUTER_PREF=y
+-CONFIG_IPV6_ROUTE_INFO=y
+-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+-CONFIG_INET6_AH=m
+-CONFIG_INET6_ESP=m
+-CONFIG_INET6_IPCOMP=m
+-CONFIG_IPV6_MIP6=m
+-CONFIG_INET6_XFRM_TUNNEL=m
+-CONFIG_INET6_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET6_XFRM_MODE_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_BEET=m
+-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+-CONFIG_IPV6_SIT=m
+-CONFIG_IPV6_NDISC_NODETYPE=y
+-CONFIG_IPV6_TUNNEL=m
+-CONFIG_IPV6_MULTIPLE_TABLES=y
+-CONFIG_IPV6_SUBTREES=y
+-# CONFIG_IPV6_MROUTE is not set
+-# CONFIG_NETLABEL is not set
+-CONFIG_NETWORK_SECMARK=y
+-CONFIG_NETFILTER=y
+-# CONFIG_NETFILTER_DEBUG is not set
+-CONFIG_NETFILTER_ADVANCED=y
+-CONFIG_BRIDGE_NETFILTER=y
+-
+-#
+-# Core Netfilter Configuration
+-#
+-CONFIG_NETFILTER_NETLINK=m
+-CONFIG_NETFILTER_NETLINK_QUEUE=m
+-CONFIG_NETFILTER_NETLINK_LOG=m
+-CONFIG_NF_CONNTRACK=m
+-CONFIG_NF_CT_ACCT=y
+-CONFIG_NF_CONNTRACK_MARK=y
+-CONFIG_NF_CONNTRACK_SECMARK=y
+-CONFIG_NF_CONNTRACK_EVENTS=y
+-CONFIG_NF_CT_PROTO_DCCP=m
+-CONFIG_NF_CT_PROTO_GRE=m
+-CONFIG_NF_CT_PROTO_SCTP=m
+-CONFIG_NF_CT_PROTO_UDPLITE=m
+-CONFIG_NF_CONNTRACK_AMANDA=m
+-CONFIG_NF_CONNTRACK_FTP=m
+-CONFIG_NF_CONNTRACK_H323=m
+-CONFIG_NF_CONNTRACK_IRC=m
+-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+-CONFIG_NF_CONNTRACK_PPTP=m
+-CONFIG_NF_CONNTRACK_SANE=m
+-CONFIG_NF_CONNTRACK_SIP=m
+-CONFIG_NF_CONNTRACK_TFTP=m
+-CONFIG_NF_CONNTRACK_SLP=m
+-CONFIG_NF_CT_NETLINK=m
+-CONFIG_NETFILTER_XTABLES=m
+-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+-CONFIG_NETFILTER_XT_TARGET_DSCP=m
+-CONFIG_NETFILTER_XT_TARGET_MARK=m
+-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+-CONFIG_NETFILTER_XT_TARGET_TRACE=m
+-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+-CONFIG_NETFILTER_XT_MATCH_DCCP=m
+-CONFIG_NETFILTER_XT_MATCH_DSCP=m
+-CONFIG_NETFILTER_XT_MATCH_ESP=m
+-CONFIG_NETFILTER_XT_MATCH_HELPER=m
+-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_MAC=m
+-CONFIG_NETFILTER_XT_MATCH_MARK=m
+-CONFIG_NETFILTER_XT_MATCH_OWNER=m
+-CONFIG_NETFILTER_XT_MATCH_POLICY=m
+-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+-CONFIG_NETFILTER_XT_MATCH_REALM=m
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+-CONFIG_NETFILTER_XT_MATCH_STATE=m
+-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+-CONFIG_NETFILTER_XT_MATCH_STRING=m
+-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+-CONFIG_NETFILTER_XT_MATCH_TIME=m
+-CONFIG_NETFILTER_XT_MATCH_U32=m
+-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+-
+-#
+-# IP: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV4=m
+-# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+-CONFIG_IP_NF_QUEUE=m
+-CONFIG_IP_NF_IPTABLES=m
+-CONFIG_IP_NF_MATCH_RECENT=m
+-CONFIG_IP_NF_MATCH_ECN=m
+-CONFIG_IP_NF_MATCH_AH=m
+-CONFIG_IP_NF_MATCH_TTL=m
+-CONFIG_IP_NF_MATCH_ADDRTYPE=m
+-CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
+-CONFIG_IP_NF_FILTER=m
+-CONFIG_IP_NF_TARGET_REJECT=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_NF_NAT=m
+-CONFIG_NF_NAT_NEEDED=y
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_NF_NAT_SNMP_BASIC=m
+-CONFIG_NF_NAT_PROTO_DCCP=m
+-CONFIG_NF_NAT_PROTO_GRE=m
+-CONFIG_NF_NAT_PROTO_UDPLITE=m
+-CONFIG_NF_NAT_PROTO_SCTP=m
+-CONFIG_NF_NAT_FTP=m
+-CONFIG_NF_NAT_IRC=m
+-CONFIG_NF_NAT_TFTP=m
+-CONFIG_NF_NAT_AMANDA=m
+-CONFIG_NF_NAT_PPTP=m
+-CONFIG_NF_NAT_H323=m
+-CONFIG_NF_NAT_SIP=m
+-CONFIG_IP_NF_MANGLE=m
+-CONFIG_IP_NF_TARGET_ECN=m
+-CONFIG_IP_NF_TARGET_TTL=m
+-CONFIG_IP_NF_TARGET_CLUSTERIP=m
+-CONFIG_IP_NF_RAW=m
+-CONFIG_IP_NF_SECURITY=m
+-CONFIG_IP_NF_ARPTABLES=m
+-CONFIG_IP_NF_ARPFILTER=m
+-CONFIG_IP_NF_ARP_MANGLE=m
+-
+-#
+-# IPv6: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV6=m
+-CONFIG_IP6_NF_QUEUE=m
+-CONFIG_IP6_NF_IPTABLES=m
+-CONFIG_IP6_NF_MATCH_RT=m
+-CONFIG_IP6_NF_MATCH_OPTS=m
+-CONFIG_IP6_NF_MATCH_FRAG=m
+-CONFIG_IP6_NF_MATCH_HL=m
+-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+-CONFIG_IP6_NF_MATCH_AH=m
+-CONFIG_IP6_NF_MATCH_MH=m
+-CONFIG_IP6_NF_MATCH_EUI64=m
+-CONFIG_IP6_NF_FILTER=m
+-CONFIG_IP6_NF_TARGET_LOG=m
+-CONFIG_IP6_NF_TARGET_REJECT=m
+-CONFIG_IP6_NF_MANGLE=m
+-CONFIG_IP6_NF_TARGET_HL=m
+-CONFIG_IP6_NF_RAW=m
+-CONFIG_IP6_NF_SECURITY=m
+-
+-#
+-# DECnet: Netfilter Configuration
+-#
+-CONFIG_DECNET_NF_GRABULATOR=m
+-
+-#
+-# Bridge: Netfilter Configuration
+-#
+-CONFIG_BRIDGE_NF_EBTABLES=m
+-CONFIG_BRIDGE_EBT_BROUTE=m
+-CONFIG_BRIDGE_EBT_T_FILTER=m
+-CONFIG_BRIDGE_EBT_T_NAT=m
+-CONFIG_BRIDGE_EBT_802_3=m
+-CONFIG_BRIDGE_EBT_AMONG=m
+-CONFIG_BRIDGE_EBT_ARP=m
+-CONFIG_BRIDGE_EBT_IP=m
+-CONFIG_BRIDGE_EBT_IP6=m
+-CONFIG_BRIDGE_EBT_LIMIT=m
+-CONFIG_BRIDGE_EBT_MARK=m
+-CONFIG_BRIDGE_EBT_PKTTYPE=m
+-CONFIG_BRIDGE_EBT_STP=m
+-CONFIG_BRIDGE_EBT_VLAN=m
+-CONFIG_BRIDGE_EBT_ARPREPLY=m
+-CONFIG_BRIDGE_EBT_DNAT=m
+-CONFIG_BRIDGE_EBT_MARK_T=m
+-CONFIG_BRIDGE_EBT_REDIRECT=m
+-CONFIG_BRIDGE_EBT_SNAT=m
+-CONFIG_BRIDGE_EBT_LOG=m
+-CONFIG_BRIDGE_EBT_ULOG=m
+-CONFIG_BRIDGE_EBT_NFLOG=m
+-CONFIG_IP_DCCP=m
+-CONFIG_INET_DCCP_DIAG=m
+-CONFIG_IP_DCCP_ACKVEC=y
+-
+-#
+-# DCCP CCIDs Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_DCCP_CCID2=m
+-# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3=m
+-# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3_RTO=100
+-CONFIG_IP_DCCP_TFRC_LIB=m
+-
+-#
+-# DCCP Kernel Hacking
+-#
+-# CONFIG_IP_DCCP_DEBUG is not set
+-# CONFIG_NET_DCCPPROBE is not set
+-CONFIG_IP_SCTP=m
+-# CONFIG_SCTP_DBG_MSG is not set
+-# CONFIG_SCTP_DBG_OBJCNT is not set
+-# CONFIG_SCTP_HMAC_NONE is not set
+-# CONFIG_SCTP_HMAC_SHA1 is not set
+-CONFIG_SCTP_HMAC_MD5=y
+-# CONFIG_TIPC is not set
+-CONFIG_ATM=m
+-CONFIG_ATM_CLIP=m
+-CONFIG_ATM_CLIP_NO_ICMP=y
+-CONFIG_ATM_LANE=m
+-CONFIG_ATM_MPOA=m
+-CONFIG_ATM_BR2684=m
+-# CONFIG_ATM_BR2684_IPFILTER is not set
+-CONFIG_STP=m
+-CONFIG_GARP=m
+-CONFIG_BRIDGE=m
+-CONFIG_VLAN_8021Q=m
+-CONFIG_VLAN_8021Q_GVRP=y
+-CONFIG_DECNET=m
+-CONFIG_DECNET_ROUTER=y
+-CONFIG_LLC=y
+-CONFIG_LLC2=m
+-CONFIG_IPX=m
+-# CONFIG_IPX_INTERN is not set
+-CONFIG_ATALK=m
+-CONFIG_DEV_APPLETALK=m
+-CONFIG_LTPC=m
+-CONFIG_COPS=m
+-CONFIG_COPS_DAYNA=y
+-CONFIG_COPS_TANGENT=y
+-CONFIG_IPDDP=m
+-CONFIG_IPDDP_ENCAP=y
+-CONFIG_IPDDP_DECAP=y
+-CONFIG_X25=m
+-CONFIG_LAPB=m
+-CONFIG_ECONET=m
+-# CONFIG_ECONET_AUNUDP is not set
+-# CONFIG_ECONET_NATIVE is not set
+-CONFIG_WAN_ROUTER=m
+-CONFIG_NET_SCHED=y
+-
+-#
+-# Queueing/Scheduling
+-#
+-CONFIG_NET_SCH_CBQ=m
+-CONFIG_NET_SCH_HTB=m
+-CONFIG_NET_SCH_HFSC=m
+-CONFIG_NET_SCH_ATM=m
+-CONFIG_NET_SCH_PRIO=m
+-CONFIG_NET_SCH_MULTIQ=m
+-CONFIG_NET_SCH_RED=m
+-CONFIG_NET_SCH_SFQ=m
+-CONFIG_NET_SCH_TEQL=m
+-CONFIG_NET_SCH_TBF=m
+-CONFIG_NET_SCH_GRED=m
+-CONFIG_NET_SCH_DSMARK=m
+-CONFIG_NET_SCH_NETEM=m
+-CONFIG_NET_SCH_INGRESS=m
+-
+-#
+-# Classification
+-#
+-CONFIG_NET_CLS=y
+-CONFIG_NET_CLS_BASIC=m
+-CONFIG_NET_CLS_TCINDEX=m
+-CONFIG_NET_CLS_ROUTE4=m
+-CONFIG_NET_CLS_ROUTE=y
+-CONFIG_NET_CLS_FW=m
+-CONFIG_NET_CLS_U32=m
+-CONFIG_CLS_U32_PERF=y
+-CONFIG_CLS_U32_MARK=y
+-CONFIG_NET_CLS_RSVP=m
+-CONFIG_NET_CLS_RSVP6=m
+-CONFIG_NET_CLS_FLOW=m
+-# CONFIG_NET_EMATCH is not set
+-CONFIG_NET_CLS_ACT=y
+-CONFIG_NET_ACT_POLICE=m
+-CONFIG_NET_ACT_GACT=m
+-CONFIG_GACT_PROB=y
+-CONFIG_NET_ACT_MIRRED=m
+-CONFIG_NET_ACT_IPT=m
+-CONFIG_NET_ACT_NAT=m
+-CONFIG_NET_ACT_PEDIT=m
+-CONFIG_NET_ACT_SIMP=m
+-CONFIG_NET_ACT_SKBEDIT=m
+-# CONFIG_NET_CLS_IND is not set
+-CONFIG_NET_SCH_FIFO=y
+-CONFIG_DCB=m
+-CONFIG_DCBNL=y
+-
+-#
+-# Network testing
+-#
+-CONFIG_NET_PKTGEN=m
+-CONFIG_NET_TCPPROBE=m
+-CONFIG_HAMRADIO=y
+-
+-#
+-# Packet Radio protocols
+-#
+-CONFIG_AX25=m
+-CONFIG_AX25_DAMA_SLAVE=y
+-CONFIG_NETROM=m
+-CONFIG_ROSE=m
+-
+-#
+-# AX.25 network device drivers
+-#
+-CONFIG_MKISS=m
+-CONFIG_6PACK=m
+-CONFIG_BPQETHER=m
+-CONFIG_SCC=m
+-CONFIG_SCC_DELAY=y
+-CONFIG_SCC_TRXECHO=y
+-CONFIG_BAYCOM_SER_FDX=m
+-CONFIG_BAYCOM_SER_HDX=m
+-CONFIG_BAYCOM_PAR=m
+-CONFIG_BAYCOM_EPP=m
+-CONFIG_YAM=m
+-CONFIG_CAN=m
+-CONFIG_CAN_RAW=m
+-CONFIG_CAN_BCM=m
+-
+-#
+-# CAN Device Drivers
+-#
+-CONFIG_CAN_VCAN=m
+-# CONFIG_CAN_DEBUG_DEVICES is not set
+-CONFIG_IRDA=m
+-
+-#
+-# IrDA protocols
+-#
+-CONFIG_IRLAN=m
+-CONFIG_IRNET=m
+-CONFIG_IRCOMM=m
+-CONFIG_IRDA_ULTRA=y
+-
+-#
+-# IrDA options
+-#
+-CONFIG_IRDA_CACHE_LAST_LSAP=y
+-# CONFIG_IRDA_FAST_RR is not set
+-# CONFIG_IRDA_DEBUG is not set
+-
+-#
+-# Infrared-port device drivers
+-#
+-
+-#
+-# SIR device drivers
+-#
+-CONFIG_IRTTY_SIR=m
+-
+-#
+-# Dongle support
+-#
+-CONFIG_DONGLE=y
+-CONFIG_ESI_DONGLE=m
+-CONFIG_ACTISYS_DONGLE=m
+-CONFIG_TEKRAM_DONGLE=m
+-CONFIG_TOIM3232_DONGLE=m
+-CONFIG_LITELINK_DONGLE=m
+-CONFIG_MA600_DONGLE=m
+-CONFIG_GIRBIL_DONGLE=m
+-CONFIG_MCP2120_DONGLE=m
+-CONFIG_OLD_BELKIN_DONGLE=m
+-CONFIG_ACT200L_DONGLE=m
+-CONFIG_KINGSUN_DONGLE=m
+-CONFIG_KSDAZZLE_DONGLE=m
+-CONFIG_KS959_DONGLE=m
+-
+-#
+-# FIR device drivers
+-#
+-CONFIG_USB_IRDA=m
+-CONFIG_SIGMATEL_FIR=m
+-CONFIG_NSC_FIR=m
+-CONFIG_WINBOND_FIR=m
+-CONFIG_TOSHIBA_FIR=m
+-CONFIG_SMC_IRCC_FIR=m
+-CONFIG_ALI_FIR=m
+-CONFIG_VLSI_FIR=m
+-CONFIG_VIA_FIR=m
+-CONFIG_MCS_FIR=m
+-CONFIG_BT=m
+-CONFIG_BT_L2CAP=m
+-CONFIG_BT_SCO=m
+-CONFIG_BT_RFCOMM=m
+-CONFIG_BT_RFCOMM_TTY=y
+-CONFIG_BT_BNEP=m
+-CONFIG_BT_BNEP_MC_FILTER=y
+-CONFIG_BT_BNEP_PROTO_FILTER=y
+-CONFIG_BT_CMTP=m
+-CONFIG_BT_HIDP=m
+-
+-#
+-# Bluetooth device drivers
+-#
+-CONFIG_BT_HCIBTUSB=m
+-CONFIG_BT_HCIBTSDIO=m
+-CONFIG_BT_HCIUART=m
+-CONFIG_BT_HCIUART_H4=y
+-CONFIG_BT_HCIUART_BCSP=y
+-CONFIG_BT_HCIUART_LL=y
+-CONFIG_BT_HCIBCM203X=m
+-CONFIG_BT_HCIBPA10X=m
+-CONFIG_BT_HCIBFUSB=m
+-CONFIG_BT_HCIDTL1=m
+-CONFIG_BT_HCIBT3C=m
+-CONFIG_BT_HCIBLUECARD=m
+-CONFIG_BT_HCIBTUART=m
+-CONFIG_BT_HCIVHCI=m
+-CONFIG_AF_RXRPC=m
+-# CONFIG_AF_RXRPC_DEBUG is not set
+-CONFIG_RXKAD=m
+-CONFIG_FIB_RULES=y
+-
+-#
+-# Wireless
+-#
+-CONFIG_CFG80211=m
+-CONFIG_NL80211=y
+-CONFIG_WIRELESS_EXT=y
+-CONFIG_WIRELESS_EXT_SYSFS=y
+-CONFIG_MAC80211=m
+-
+-#
+-# Rate control algorithm selection
+-#
+-CONFIG_MAC80211_RC_PID=y
+-CONFIG_MAC80211_RC_DEFAULT_PID=y
+-CONFIG_MAC80211_RC_DEFAULT="pid"
+-CONFIG_MAC80211_MESH=y
+-CONFIG_MAC80211_LEDS=y
+-CONFIG_MAC80211_DEBUGFS=y
+-# CONFIG_MAC80211_DEBUG_MENU is not set
+-CONFIG_IEEE80211=m
+-# CONFIG_IEEE80211_DEBUG is not set
+-CONFIG_IEEE80211_CRYPT_WEP=m
+-CONFIG_IEEE80211_CRYPT_CCMP=m
+-CONFIG_IEEE80211_CRYPT_TKIP=m
+-CONFIG_RFKILL=m
+-CONFIG_RFKILL_INPUT=m
+-CONFIG_RFKILL_LEDS=y
+-CONFIG_NET_9P=m
+-# CONFIG_NET_9P_VIRTIO is not set
+-# CONFIG_NET_9P_DEBUG is not set
+-CONFIG_NETVM=y
+-
+-#
+-# Device Drivers
+-#
+-
+-#
+-# Generic Driver Options
+-#
+-CONFIG_UEVENT_HELPER_PATH=""
+-# CONFIG_STANDALONE is not set
+-CONFIG_PREVENT_FIRMWARE_BUILD=y
+-CONFIG_FW_LOADER=y
+-CONFIG_FIRMWARE_IN_KERNEL=y
+-CONFIG_EXTRA_FIRMWARE=""
+-# CONFIG_DEBUG_DRIVER is not set
+-# CONFIG_DEBUG_DEVRES is not set
+-# CONFIG_SYS_HYPERVISOR is not set
+-CONFIG_CONNECTOR=y
+-CONFIG_PROC_EVENTS=y
+-CONFIG_MTD=m
+-# CONFIG_MTD_DEBUG is not set
+-CONFIG_MTD_CONCAT=m
+-CONFIG_MTD_PARTITIONS=y
+-CONFIG_MTD_REDBOOT_PARTS=m
+-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+-CONFIG_MTD_AR7_PARTS=m
+-
+-#
+-# User Modules And Translation Layers
+-#
+-CONFIG_MTD_CHAR=m
+-CONFIG_MTD_BLKDEVS=m
+-CONFIG_MTD_BLOCK=m
+-# CONFIG_MTD_BLOCK_RO is not set
+-# CONFIG_FTL is not set
+-# CONFIG_NFTL is not set
+-# CONFIG_INFTL is not set
+-CONFIG_RFD_FTL=m
+-# CONFIG_SSFDC is not set
+-CONFIG_MTD_OOPS=m
+-
+-#
+-# RAM/ROM/Flash chip drivers
+-#
+-CONFIG_MTD_CFI=m
+-CONFIG_MTD_JEDECPROBE=m
+-CONFIG_MTD_GEN_PROBE=m
+-CONFIG_MTD_CFI_ADV_OPTIONS=y
+-CONFIG_MTD_CFI_NOSWAP=y
+-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_GEOMETRY is not set
+-CONFIG_MTD_MAP_BANK_WIDTH_1=y
+-CONFIG_MTD_MAP_BANK_WIDTH_2=y
+-CONFIG_MTD_MAP_BANK_WIDTH_4=y
+-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+-CONFIG_MTD_CFI_I1=y
+-CONFIG_MTD_CFI_I2=y
+-# CONFIG_MTD_CFI_I4 is not set
+-# CONFIG_MTD_CFI_I8 is not set
+-# CONFIG_MTD_OTP is not set
+-CONFIG_MTD_CFI_INTELEXT=m
+-CONFIG_MTD_CFI_AMDSTD=m
+-CONFIG_MTD_CFI_STAA=m
+-CONFIG_MTD_CFI_UTIL=m
+-# CONFIG_MTD_RAM is not set
+-# CONFIG_MTD_ROM is not set
+-CONFIG_MTD_ABSENT=m
+-
+-#
+-# Mapping drivers for chip access
+-#
+-CONFIG_MTD_COMPLEX_MAPPINGS=y
+-CONFIG_MTD_PHYSMAP=m
+-CONFIG_MTD_PHYSMAP_START=0x8000000
+-CONFIG_MTD_PHYSMAP_LEN=0x4000000
+-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+-CONFIG_MTD_SC520CDP=m
+-CONFIG_MTD_NETSC520=m
+-CONFIG_MTD_TS5500=m
+-CONFIG_MTD_SBC_GXX=m
+-CONFIG_MTD_SCx200_DOCFLASH=m
+-CONFIG_MTD_AMD76XROM=m
+-CONFIG_MTD_ICHXROM=m
+-CONFIG_MTD_ESB2ROM=m
+-CONFIG_MTD_CK804XROM=m
+-CONFIG_MTD_SCB2_FLASH=m
+-CONFIG_MTD_NETtel=m
+-CONFIG_MTD_DILNETPC=m
+-CONFIG_MTD_DILNETPC_BOOTSIZE=0x80000
+-CONFIG_MTD_L440GX=m
+-CONFIG_MTD_PCI=m
+-CONFIG_MTD_INTEL_VR_NOR=m
+-# CONFIG_MTD_PLATRAM is not set
+-
+-#
+-# Self-contained MTD device drivers
+-#
+-CONFIG_MTD_PMC551=m
+-CONFIG_MTD_PMC551_BUGFIX=y
+-# CONFIG_MTD_PMC551_DEBUG is not set
+-# CONFIG_MTD_DATAFLASH is not set
+-# CONFIG_MTD_M25P80 is not set
+-CONFIG_MTD_SLRAM=m
+-CONFIG_MTD_PHRAM=m
+-CONFIG_MTD_MTDRAM=m
+-CONFIG_MTDRAM_TOTAL_SIZE=4096
+-CONFIG_MTDRAM_ERASE_SIZE=128
+-CONFIG_MTD_BLOCK2MTD=m
+-
+-#
+-# Disk-On-Chip Device Drivers
+-#
+-CONFIG_MTD_DOC2000=m
+-CONFIG_MTD_DOC2001=m
+-CONFIG_MTD_DOC2001PLUS=m
+-CONFIG_MTD_DOCPROBE=m
+-CONFIG_MTD_DOCECC=m
+-CONFIG_MTD_DOCPROBE_ADVANCED=y
+-CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
+-CONFIG_MTD_DOCPROBE_HIGH=y
+-CONFIG_MTD_DOCPROBE_55AA=y
+-CONFIG_MTD_NAND=m
+-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+-CONFIG_MTD_NAND_ECC_SMC=y
+-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+-CONFIG_MTD_NAND_IDS=m
+-CONFIG_MTD_NAND_DISKONCHIP=m
+-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+-CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
+-CONFIG_MTD_NAND_CAFE=m
+-CONFIG_MTD_NAND_CS553X=m
+-CONFIG_MTD_NAND_NANDSIM=m
+-CONFIG_MTD_NAND_PLATFORM=m
+-CONFIG_MTD_ALAUDA=m
+-CONFIG_MTD_ONENAND=m
+-# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+-CONFIG_MTD_ONENAND_OTP=y
+-CONFIG_MTD_ONENAND_2X_PROGRAM=y
+-CONFIG_MTD_ONENAND_SIM=m
+-
+-#
+-# UBI - Unsorted block images
+-#
+-CONFIG_MTD_UBI=m
+-CONFIG_MTD_UBI_WL_THRESHOLD=4096
+-CONFIG_MTD_UBI_BEB_RESERVE=1
+-# CONFIG_MTD_UBI_GLUEBI is not set
+-
+-#
+-# UBI debugging options
+-#
+-# CONFIG_MTD_UBI_DEBUG is not set
+-CONFIG_PARPORT=m
+-CONFIG_PARPORT_PC=m
+-CONFIG_PARPORT_SERIAL=m
+-CONFIG_PARPORT_PC_FIFO=y
+-CONFIG_PARPORT_PC_SUPERIO=y
+-CONFIG_PARPORT_PC_PCMCIA=m
+-# CONFIG_PARPORT_GSC is not set
+-CONFIG_PARPORT_AX88796=m
+-CONFIG_PARPORT_1284=y
+-CONFIG_PARPORT_NOT_PC=y
+-CONFIG_PNP=y
+-# CONFIG_PNP_DEBUG is not set
+-
+-#
+-# Protocols
+-#
+-CONFIG_ISAPNP=y
+-CONFIG_PNPBIOS=y
+-CONFIG_PNPBIOS_PROC_FS=y
+-CONFIG_PNPACPI=y
+-CONFIG_BLK_DEV=y
+-CONFIG_BLK_DEV_FD=m
+-CONFIG_BLK_DEV_XD=m
+-CONFIG_PARIDE=m
+-
+-#
+-# Parallel IDE high-level drivers
+-#
+-CONFIG_PARIDE_PD=m
+-CONFIG_PARIDE_PCD=m
+-CONFIG_PARIDE_PF=m
+-CONFIG_PARIDE_PT=m
+-CONFIG_PARIDE_PG=m
+-
+-#
+-# Parallel IDE protocol modules
+-#
+-CONFIG_PARIDE_ATEN=m
+-CONFIG_PARIDE_BPCK=m
+-CONFIG_PARIDE_BPCK6=m
+-CONFIG_PARIDE_COMM=m
+-CONFIG_PARIDE_DSTR=m
+-CONFIG_PARIDE_FIT2=m
+-CONFIG_PARIDE_FIT3=m
+-CONFIG_PARIDE_EPAT=m
+-CONFIG_PARIDE_EPATC8=y
+-CONFIG_PARIDE_EPIA=m
+-CONFIG_PARIDE_FRIQ=m
+-CONFIG_PARIDE_FRPW=m
+-CONFIG_PARIDE_KBIC=m
+-CONFIG_PARIDE_KTTI=m
+-CONFIG_PARIDE_ON20=m
+-CONFIG_PARIDE_ON26=m
+-CONFIG_BLK_CPQ_DA=m
+-CONFIG_BLK_CPQ_CISS_DA=m
+-CONFIG_CISS_SCSI_TAPE=y
+-CONFIG_BLK_DEV_DAC960=m
+-CONFIG_BLK_DEV_UMEM=m
+-# CONFIG_BLK_DEV_COW_COMMON is not set
+-CONFIG_BLK_DEV_LOOP=m
+-CONFIG_BLK_DEV_CRYPTOLOOP=m
+-CONFIG_BLK_DEV_NBD=m
+-CONFIG_BLK_DEV_SX8=m
+-# CONFIG_BLK_DEV_UB is not set
+-CONFIG_BLK_DEV_RAM=m
+-CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=64000
+-CONFIG_BLK_DEV_XIP=y
+-CONFIG_CDROM_PKTCDVD=m
+-CONFIG_CDROM_PKTCDVD_BUFFERS=8
+-CONFIG_CDROM_PKTCDVD_WCACHE=y
+-CONFIG_ATA_OVER_ETH=m
+-CONFIG_CIPHER_TWOFISH=m
+-CONFIG_VIRTIO_BLK=m
+-# CONFIG_BLK_DEV_HD is not set
+-CONFIG_MISC_DEVICES=y
+-CONFIG_IBM_ASM=m
+-CONFIG_PHANTOM=m
+-CONFIG_EEPROM_93CX6=m
+-# CONFIG_SGI_IOC4 is not set
+-CONFIG_TIFM_CORE=m
+-CONFIG_TIFM_7XX1=m
+-CONFIG_ACER_WMI=m
+-CONFIG_ASUS_LAPTOP=m
+-CONFIG_FUJITSU_LAPTOP=m
+-# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
+-CONFIG_TC1100_WMI=m
+-CONFIG_HP_WMI=m
+-CONFIG_MSI_LAPTOP=m
+-CONFIG_PANASONIC_LAPTOP=m
+-CONFIG_COMPAL_LAPTOP=m
+-CONFIG_SONY_LAPTOP=m
+-CONFIG_SONYPI_COMPAT=y
+-CONFIG_THINKPAD_ACPI=m
+-# CONFIG_THINKPAD_ACPI_DEBUG is not set
+-CONFIG_THINKPAD_ACPI_BAY=y
+-CONFIG_THINKPAD_ACPI_VIDEO=y
+-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+-CONFIG_INTEL_MENLOW=m
+-CONFIG_EEEPC_LAPTOP=m
+-CONFIG_ENCLOSURE_SERVICES=m
+-CONFIG_HP_ILO=m
+-CONFIG_HAVE_IDE=y
+-CONFIG_IDE=m
+-CONFIG_BLK_DEV_IDE=m
+-
+-#
+-# Please see Documentation/ide/ide.txt for help/info on IDE drives
+-#
+-CONFIG_IDE_TIMINGS=y
+-CONFIG_IDE_ATAPI=y
+-# CONFIG_BLK_DEV_IDE_SATA is not set
+-CONFIG_BLK_DEV_IDEDISK=m
+-CONFIG_IDEDISK_MULTI_MODE=y
+-CONFIG_BLK_DEV_IDECS=m
+-CONFIG_BLK_DEV_DELKIN=m
+-CONFIG_BLK_DEV_IDECD=m
+-CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+-CONFIG_BLK_DEV_IDETAPE=m
+-CONFIG_BLK_DEV_IDEFLOPPY=m
+-CONFIG_BLK_DEV_IDESCSI=m
+-CONFIG_BLK_DEV_IDEACPI=y
+-# CONFIG_IDE_TASK_IOCTL is not set
+-CONFIG_IDE_PROC_FS=y
+-
+-#
+-# IDE chipset support/bugfixes
+-#
+-CONFIG_IDE_GENERIC=m
+-CONFIG_BLK_DEV_PLATFORM=m
+-CONFIG_BLK_DEV_CMD640=m
+-CONFIG_BLK_DEV_CMD640_ENHANCED=y
+-CONFIG_BLK_DEV_IDEPNP=m
+-CONFIG_BLK_DEV_IDEDMA_SFF=y
+-
+-#
+-# PCI IDE chipsets support
+-#
+-CONFIG_BLK_DEV_IDEPCI=y
+-CONFIG_BLK_DEV_OFFBOARD=y
+-CONFIG_BLK_DEV_GENERIC=m
+-CONFIG_BLK_DEV_OPTI621=m
+-CONFIG_BLK_DEV_RZ1000=m
+-CONFIG_BLK_DEV_IDEDMA_PCI=y
+-CONFIG_BLK_DEV_AEC62XX=m
+-CONFIG_BLK_DEV_ALI15X3=m
+-CONFIG_BLK_DEV_AMD74XX=m
+-CONFIG_BLK_DEV_ATIIXP=m
+-CONFIG_BLK_DEV_CMD64X=m
+-CONFIG_BLK_DEV_TRIFLEX=m
+-CONFIG_BLK_DEV_CS5520=m
+-CONFIG_BLK_DEV_CS5530=m
+-CONFIG_BLK_DEV_CS5535=m
+-CONFIG_BLK_DEV_HPT366=m
+-CONFIG_BLK_DEV_JMICRON=m
+-CONFIG_BLK_DEV_SC1200=m
+-CONFIG_BLK_DEV_PIIX=m
+-CONFIG_BLK_DEV_IT8213=m
+-CONFIG_BLK_DEV_IT821X=m
+-CONFIG_BLK_DEV_NS87415=m
+-CONFIG_BLK_DEV_PDC202XX_OLD=m
+-CONFIG_BLK_DEV_PDC202XX_NEW=m
+-CONFIG_BLK_DEV_SVWKS=m
+-CONFIG_BLK_DEV_SIIMAGE=m
+-CONFIG_BLK_DEV_SIS5513=m
+-CONFIG_BLK_DEV_SLC90E66=m
+-CONFIG_BLK_DEV_TRM290=m
+-CONFIG_BLK_DEV_VIA82CXXX=m
+-# CONFIG_BLK_DEV_TC86C001 is not set
+-
+-#
+-# Other IDE chipsets support
+-#
+-
+-#
+-# Note: most of these also require special kernel boot parameters
+-#
+-CONFIG_BLK_DEV_4DRIVES=m
+-CONFIG_BLK_DEV_ALI14XX=m
+-CONFIG_BLK_DEV_DTC2278=m
+-CONFIG_BLK_DEV_HT6560B=m
+-CONFIG_BLK_DEV_QD65XX=m
+-CONFIG_BLK_DEV_UMC8672=m
+-CONFIG_BLK_DEV_IDEDMA=y
+-
+-#
+-# SCSI device support
+-#
+-CONFIG_RAID_ATTRS=m
+-CONFIG_SCSI=m
+-CONFIG_SCSI_DMA=y
+-CONFIG_SCSI_TGT=m
+-CONFIG_SCSI_NETLINK=y
+-CONFIG_SCSI_PROC_FS=y
+-
+-#
+-# SCSI support type (disk, tape, CD-ROM)
+-#
+-CONFIG_BLK_DEV_SD=m
+-CONFIG_SD_IOSTATS=y
+-CONFIG_CHR_DEV_ST=m
+-CONFIG_CHR_DEV_OSST=m
+-CONFIG_BLK_DEV_SR=m
+-# CONFIG_BLK_DEV_SR_VENDOR is not set
+-CONFIG_CHR_DEV_SG=m
+-CONFIG_CHR_DEV_SCH=m
+-CONFIG_SCSI_ENCLOSURE=m
+-
+-#
+-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+-#
+-CONFIG_SCSI_MULTI_LUN=y
+-CONFIG_SCSI_CONSTANTS=y
+-CONFIG_SCSI_LOGGING=y
+-# CONFIG_SCSI_SCAN_ASYNC is not set
+-CONFIG_SCSI_WAIT_SCAN=m
+-
+-#
+-# SCSI Transports
+-#
+-CONFIG_SCSI_SPI_ATTRS=m
+-CONFIG_SCSI_FC_ATTRS=m
+-CONFIG_SCSI_FC_TGT_ATTRS=y
+-CONFIG_SCSI_ISCSI_ATTRS=m
+-CONFIG_SCSI_SAS_ATTRS=m
+-CONFIG_SCSI_SAS_LIBSAS=m
+-CONFIG_SCSI_SAS_ATA=y
+-CONFIG_SCSI_SAS_HOST_SMP=y
+-CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+-CONFIG_SCSI_SRP_ATTRS=m
+-CONFIG_SCSI_SRP_TGT_ATTRS=y
+-CONFIG_SCSI_LOWLEVEL=y
+-CONFIG_ISCSI_TCP=m
+-CONFIG_SCSI_CXGB3_ISCSI=m
+-CONFIG_BLK_DEV_3W_XXXX_RAID=m
+-CONFIG_SCSI_3W_9XXX=m
+-CONFIG_SCSI_7000FASST=m
+-CONFIG_SCSI_ACARD=m
+-CONFIG_SCSI_AHA152X=m
+-CONFIG_SCSI_AHA1542=m
+-CONFIG_SCSI_AACRAID=m
+-CONFIG_SCSI_AIC7XXX=m
+-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+-CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+-CONFIG_AIC7XXX_DEBUG_MASK=0
+-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC7XXX_OLD=m
+-CONFIG_SCSI_AIC79XX=m
+-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+-CONFIG_AIC79XX_RESET_DELAY_MS=15000
+-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+-CONFIG_AIC79XX_DEBUG_MASK=0
+-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC94XX=m
+-CONFIG_AIC94XX_DEBUG=y
+-CONFIG_SCSI_DPT_I2O=m
+-CONFIG_SCSI_ADVANSYS=m
+-CONFIG_SCSI_IN2000=m
+-CONFIG_SCSI_ARCMSR=m
+-CONFIG_SCSI_ARCMSR_AER=y
+-CONFIG_MEGARAID_NEWGEN=y
+-CONFIG_MEGARAID_MM=m
+-CONFIG_MEGARAID_MAILBOX=m
+-CONFIG_MEGARAID_LEGACY=m
+-CONFIG_MEGARAID_SAS=m
+-CONFIG_SCSI_HPTIOP=m
+-CONFIG_SCSI_BUSLOGIC=m
+-CONFIG_SCSI_FLASHPOINT=y
+-CONFIG_LIBFC=m
+-CONFIG_FCOE=m
+-CONFIG_SCSI_DMX3191D=m
+-CONFIG_SCSI_DTC3280=m
+-CONFIG_SCSI_EATA=m
+-CONFIG_SCSI_EATA_TAGGED_QUEUE=y
+-CONFIG_SCSI_EATA_LINKED_COMMANDS=y
+-CONFIG_SCSI_EATA_MAX_TAGS=16
+-CONFIG_SCSI_FUTURE_DOMAIN=m
+-CONFIG_SCSI_GDTH=m
+-CONFIG_SCSI_GENERIC_NCR5380=m
+-CONFIG_SCSI_GENERIC_NCR5380_MMIO=m
+-CONFIG_SCSI_GENERIC_NCR53C400=y
+-CONFIG_SCSI_IPS=m
+-CONFIG_SCSI_INITIO=m
+-CONFIG_SCSI_INIA100=m
+-CONFIG_SCSI_PPA=m
+-CONFIG_SCSI_IMM=m
+-# CONFIG_SCSI_IZIP_EPP16 is not set
+-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+-CONFIG_SCSI_MVSAS=m
+-CONFIG_SCSI_NCR53C406A=m
+-CONFIG_SCSI_STEX=m
+-CONFIG_SCSI_SYM53C8XX_2=m
+-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+-CONFIG_SCSI_SYM53C8XX_MMIO=y
+-CONFIG_SCSI_IPR=m
+-CONFIG_SCSI_IPR_TRACE=y
+-CONFIG_SCSI_IPR_DUMP=y
+-CONFIG_SCSI_PAS16=m
+-CONFIG_SCSI_QLOGIC_FAS=m
+-CONFIG_SCSI_QLOGIC_1280=m
+-CONFIG_SCSI_QLA_FC=m
+-CONFIG_SCSI_QLA_ISCSI=m
+-CONFIG_SCSI_LPFC=m
+-CONFIG_SCSI_SYM53C416=m
+-CONFIG_SCSI_DC395x=m
+-CONFIG_SCSI_DC390T=m
+-CONFIG_SCSI_T128=m
+-CONFIG_SCSI_U14_34F=m
+-CONFIG_SCSI_U14_34F_TAGGED_QUEUE=y
+-CONFIG_SCSI_U14_34F_LINKED_COMMANDS=y
+-CONFIG_SCSI_U14_34F_MAX_TAGS=8
+-CONFIG_SCSI_ULTRASTOR=m
+-CONFIG_SCSI_NSP32=m
+-CONFIG_SCSI_DEBUG=m
+-CONFIG_SCSI_SRP=m
+-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+-CONFIG_PCMCIA_AHA152X=m
+-CONFIG_PCMCIA_FDOMAIN=m
+-CONFIG_PCMCIA_NINJA_SCSI=m
+-CONFIG_PCMCIA_QLOGIC=m
+-CONFIG_PCMCIA_SYM53C500=m
+-CONFIG_SCSI_DH=m
+-CONFIG_SCSI_DH_RDAC=m
+-CONFIG_SCSI_DH_HP_SW=m
+-CONFIG_SCSI_DH_EMC=m
+-CONFIG_SCSI_DH_ALUA=m
+-CONFIG_ATA=m
+-# CONFIG_ATA_NONSTANDARD is not set
+-CONFIG_ATA_ACPI=y
+-CONFIG_SATA_PMP=y
+-CONFIG_SATA_AHCI=m
+-CONFIG_SATA_SIL24=m
+-CONFIG_ATA_SFF=y
+-CONFIG_SATA_SVW=m
+-CONFIG_ATA_PIIX=m
+-CONFIG_SATA_MV=m
+-CONFIG_SATA_NV=m
+-CONFIG_PDC_ADMA=m
+-CONFIG_SATA_QSTOR=m
+-CONFIG_SATA_PROMISE=m
+-CONFIG_SATA_SX4=m
+-CONFIG_SATA_SIL=m
+-CONFIG_SATA_SIS=m
+-CONFIG_SATA_ULI=m
+-CONFIG_SATA_VIA=m
+-CONFIG_SATA_VITESSE=m
+-CONFIG_SATA_INIC162X=m
+-CONFIG_PATA_ACPI=m
+-CONFIG_PATA_ALI=m
+-CONFIG_PATA_AMD=m
+-CONFIG_PATA_ARTOP=m
+-CONFIG_PATA_ATIIXP=m
+-CONFIG_PATA_CMD640_PCI=m
+-CONFIG_PATA_CMD64X=m
+-CONFIG_PATA_CS5520=m
+-CONFIG_PATA_CS5530=m
+-CONFIG_PATA_CS5535=m
+-CONFIG_PATA_CS5536=m
+-CONFIG_PATA_CYPRESS=m
+-CONFIG_PATA_EFAR=m
+-CONFIG_ATA_GENERIC=m
+-CONFIG_PATA_HPT366=m
+-CONFIG_PATA_HPT37X=m
+-CONFIG_PATA_HPT3X2N=m
+-CONFIG_PATA_HPT3X3=m
+-# CONFIG_PATA_HPT3X3_DMA is not set
+-CONFIG_PATA_ISAPNP=m
+-CONFIG_PATA_IT821X=m
+-CONFIG_PATA_IT8213=m
+-CONFIG_PATA_JMICRON=m
+-CONFIG_PATA_LEGACY=m
+-CONFIG_PATA_TRIFLEX=m
+-CONFIG_PATA_MARVELL=m
+-CONFIG_PATA_MPIIX=m
+-CONFIG_PATA_OLDPIIX=m
+-CONFIG_PATA_NETCELL=m
+-CONFIG_PATA_NINJA32=m
+-CONFIG_PATA_NS87410=m
+-CONFIG_PATA_NS87415=m
+-CONFIG_PATA_OPTI=m
+-CONFIG_PATA_OPTIDMA=m
+-CONFIG_PATA_PCMCIA=m
+-CONFIG_PATA_PDC_OLD=m
+-CONFIG_PATA_QDI=m
+-CONFIG_PATA_RADISYS=m
+-CONFIG_PATA_RZ1000=m
+-CONFIG_PATA_SC1200=m
+-CONFIG_PATA_SERVERWORKS=m
+-CONFIG_PATA_PDC2027X=m
+-CONFIG_PATA_SIL680=m
+-CONFIG_PATA_SIS=m
+-CONFIG_PATA_VIA=m
+-CONFIG_PATA_WINBOND=m
+-CONFIG_PATA_WINBOND_VLB=m
+-CONFIG_PATA_SCH=m
+-CONFIG_MD=y
+-CONFIG_BLK_DEV_MD=y
+-CONFIG_MD_LINEAR=m
+-CONFIG_MD_RAID0=m
+-CONFIG_MD_RAID1=m
+-CONFIG_MD_RAID10=m
+-CONFIG_MD_RAID456=m
+-CONFIG_MD_RAID5_RESHAPE=y
+-CONFIG_MD_MULTIPATH=m
+-CONFIG_MD_FAULTY=m
+-CONFIG_BLK_DEV_DM=m
+-# CONFIG_DM_DEBUG is not set
+-CONFIG_DM_CRYPT=m
+-CONFIG_DM_SNAPSHOT=m
+-CONFIG_DM_MIRROR=m
+-CONFIG_DM_ZERO=m
+-CONFIG_DM_MULTIPATH=m
+-CONFIG_DM_DELAY=m
+-CONFIG_DM_RAID45=m
+-CONFIG_DM_UEVENT=y
+-CONFIG_FUSION=y
+-CONFIG_FUSION_SPI=m
+-CONFIG_FUSION_FC=m
+-CONFIG_FUSION_SAS=m
+-CONFIG_FUSION_MAX_SGE=128
+-CONFIG_FUSION_MAX_FC_SGE=256
+-CONFIG_FUSION_CTL=m
+-CONFIG_FUSION_LAN=m
+-# CONFIG_FUSION_LOGGING is not set
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-
+-#
+-# Enable only one of the two stacks, unless you know what you are doing
+-#
+-# CONFIG_FIREWIRE is not set
+-CONFIG_IEEE1394=m
+-CONFIG_IEEE1394_OHCI1394=m
+-CONFIG_IEEE1394_PCILYNX=m
+-CONFIG_IEEE1394_SBP2=m
+-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+-CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+-CONFIG_IEEE1394_ETH1394=m
+-CONFIG_IEEE1394_RAWIO=m
+-CONFIG_IEEE1394_VIDEO1394=m
+-CONFIG_IEEE1394_DV1394=m
+-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+-CONFIG_I2O=m
+-CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+-CONFIG_I2O_EXT_ADAPTEC=y
+-CONFIG_I2O_CONFIG=m
+-CONFIG_I2O_CONFIG_OLD_IOCTL=y
+-CONFIG_I2O_BUS=m
+-CONFIG_I2O_BLOCK=m
+-CONFIG_I2O_SCSI=m
+-CONFIG_I2O_PROC=m
+-# CONFIG_MACINTOSH_DRIVERS is not set
+-CONFIG_NETDEVICES=y
+-CONFIG_IFB=m
+-CONFIG_DUMMY=m
+-CONFIG_BONDING=m
+-CONFIG_MACVLAN=m
+-CONFIG_EQUALIZER=m
+-CONFIG_TUN=m
+-CONFIG_VETH=m
+-CONFIG_NET_SB1000=m
+-CONFIG_ARCNET=m
+-CONFIG_ARCNET_1201=m
+-CONFIG_ARCNET_1051=m
+-CONFIG_ARCNET_RAW=m
+-CONFIG_ARCNET_CAP=m
+-CONFIG_ARCNET_COM90xx=m
+-CONFIG_ARCNET_COM90xxIO=m
+-CONFIG_ARCNET_RIM_I=m
+-# CONFIG_ARCNET_COM20020 is not set
+-CONFIG_PHYLIB=m
+-
+-#
+-# MII PHY device drivers
+-#
+-CONFIG_MARVELL_PHY=m
+-CONFIG_DAVICOM_PHY=m
+-CONFIG_QSEMI_PHY=m
+-CONFIG_LXT_PHY=m
+-CONFIG_CICADA_PHY=m
+-CONFIG_VITESSE_PHY=m
+-CONFIG_SMSC_PHY=m
+-CONFIG_BROADCOM_PHY=m
+-CONFIG_ICPLUS_PHY=m
+-CONFIG_REALTEK_PHY=m
+-CONFIG_MDIO_BITBANG=m
+-CONFIG_NET_ETHERNET=y
+-CONFIG_MII=m
+-CONFIG_HAPPYMEAL=m
+-CONFIG_SUNGEM=m
+-CONFIG_CASSINI=m
+-CONFIG_NET_VENDOR_3COM=y
+-CONFIG_EL1=m
+-CONFIG_EL2=m
+-CONFIG_ELPLUS=m
+-CONFIG_EL16=m
+-CONFIG_EL3=m
+-CONFIG_3C515=m
+-CONFIG_VORTEX=m
+-CONFIG_TYPHOON=m
+-CONFIG_LANCE=m
+-CONFIG_NET_VENDOR_SMC=y
+-CONFIG_WD80x3=m
+-CONFIG_ULTRA=m
+-CONFIG_SMC9194=m
+-CONFIG_ENC28J60=m
+-# CONFIG_ENC28J60_WRITEVERIFY is not set
+-CONFIG_NET_VENDOR_RACAL=y
+-CONFIG_NI52=m
+-CONFIG_NI65=m
+-CONFIG_NET_TULIP=y
+-CONFIG_DE2104X=m
+-CONFIG_TULIP=m
+-# CONFIG_TULIP_MWI is not set
+-# CONFIG_TULIP_MMIO is not set
+-CONFIG_TULIP_NAPI=y
+-CONFIG_TULIP_NAPI_HW_MITIGATION=y
+-CONFIG_DE4X5=m
+-CONFIG_WINBOND_840=m
+-CONFIG_DM9102=m
+-CONFIG_ULI526X=m
+-CONFIG_PCMCIA_XIRCOM=m
+-CONFIG_AT1700=m
+-CONFIG_DEPCA=m
+-CONFIG_HP100=m
+-CONFIG_NET_ISA=y
+-CONFIG_E2100=m
+-CONFIG_EWRK3=m
+-CONFIG_EEXPRESS=m
+-CONFIG_EEXPRESS_PRO=m
+-CONFIG_HPLAN_PLUS=m
+-CONFIG_HPLAN=m
+-CONFIG_LP486E=m
+-CONFIG_ETH16I=m
+-CONFIG_NE2000=m
+-CONFIG_ZNET=m
+-CONFIG_SEEQ8005=m
+-# CONFIG_IBM_NEW_EMAC_ZMII is not set
+-# CONFIG_IBM_NEW_EMAC_RGMII is not set
+-# CONFIG_IBM_NEW_EMAC_TAH is not set
+-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+-CONFIG_NET_PCI=y
+-CONFIG_PCNET32=m
+-CONFIG_AMD8111_ETH=m
+-CONFIG_ADAPTEC_STARFIRE=m
+-CONFIG_AC3200=m
+-CONFIG_APRICOT=m
+-CONFIG_B44=m
+-CONFIG_B44_PCI_AUTOSELECT=y
+-CONFIG_B44_PCICORE_AUTOSELECT=y
+-CONFIG_B44_PCI=y
+-CONFIG_FORCEDETH=m
+-CONFIG_FORCEDETH_NAPI=y
+-CONFIG_CS89x0=m
+-CONFIG_EEPRO100=m
+-CONFIG_E100=m
+-CONFIG_FEALNX=m
+-CONFIG_NATSEMI=m
+-CONFIG_NE2K_PCI=m
+-CONFIG_8139CP=m
+-CONFIG_8139TOO=m
+-# CONFIG_8139TOO_PIO is not set
+-# CONFIG_8139TOO_TUNE_TWISTER is not set
+-CONFIG_8139TOO_8129=y
+-# CONFIG_8139_OLD_RX_RESET is not set
+-CONFIG_R6040=m
+-CONFIG_SIS900=m
+-CONFIG_EPIC100=m
+-CONFIG_SUNDANCE=m
+-# CONFIG_SUNDANCE_MMIO is not set
+-CONFIG_TLAN=m
+-CONFIG_VIA_RHINE=m
+-# CONFIG_VIA_RHINE_MMIO is not set
+-CONFIG_SC92031=m
+-CONFIG_NET_POCKET=y
+-CONFIG_ATP=m
+-CONFIG_DE600=m
+-CONFIG_DE620=m
+-CONFIG_ATL2=m
+-CONFIG_NETDEV_1000=y
+-CONFIG_ACENIC=m
+-# CONFIG_ACENIC_OMIT_TIGON_I is not set
+-CONFIG_DL2K=m
+-CONFIG_E1000=m
+-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+-CONFIG_E1000E=m
+-CONFIG_IP1000=m
+-CONFIG_IGB=m
+-CONFIG_IGB_LRO=y
+-CONFIG_NS83820=m
+-CONFIG_HAMACHI=m
+-CONFIG_YELLOWFIN=m
+-CONFIG_R8169=m
+-CONFIG_R8169_VLAN=y
+-CONFIG_SIS190=m
+-CONFIG_SKGE=m
+-# CONFIG_SKGE_DEBUG is not set
+-CONFIG_SKY2=m
+-# CONFIG_SKY2_DEBUG is not set
+-CONFIG_VIA_VELOCITY=m
+-CONFIG_TIGON3=m
+-CONFIG_BNX2=m
+-CONFIG_QLA3XXX=m
+-CONFIG_ATL1=m
+-CONFIG_ATL1E=m
+-CONFIG_NETDEV_10000=y
+-CONFIG_CHELSIO_T1=m
+-CONFIG_CHELSIO_T1_1G=y
+-CONFIG_CHELSIO_T3=m
+-CONFIG_IXGBE=m
+-CONFIG_IXGBE_LRO=y
+-CONFIG_IXGBE_DCB=y
+-CONFIG_IXGB=m
+-CONFIG_S2IO=m
+-CONFIG_MYRI10GE=m
+-CONFIG_NETXEN_NIC=m
+-CONFIG_NIU=m
+-CONFIG_MLX4_CORE=m
+-CONFIG_MLX4_DEBUG=y
+-CONFIG_TEHUTI=m
+-CONFIG_BNX2X=m
+-CONFIG_SFC=m
+-# CONFIG_SFC_RESOURCE is not set
+-CONFIG_TR=y
+-CONFIG_IBMTR=m
+-CONFIG_IBMOL=m
+-CONFIG_IBMLS=m
+-CONFIG_3C359=m
+-CONFIG_TMS380TR=m
+-CONFIG_TMSPCI=m
+-CONFIG_SKISA=m
+-CONFIG_PROTEON=m
+-CONFIG_ABYSS=m
+-CONFIG_SMCTR=m
+-
+-#
+-# Wireless LAN
+-#
+-CONFIG_WLAN_PRE80211=y
+-CONFIG_STRIP=m
+-# CONFIG_ARLAN is not set
+-CONFIG_WAVELAN=m
+-CONFIG_PCMCIA_WAVELAN=m
+-CONFIG_PCMCIA_NETWAVE=m
+-CONFIG_WLAN_80211=y
+-CONFIG_PCMCIA_RAYCS=m
+-CONFIG_IPW2100=m
+-CONFIG_IPW2100_MONITOR=y
+-# CONFIG_IPW2100_DEBUG is not set
+-CONFIG_IPW2200=m
+-CONFIG_IPW2200_MONITOR=y
+-CONFIG_IPW2200_RADIOTAP=y
+-CONFIG_IPW2200_PROMISCUOUS=y
+-CONFIG_IPW2200_QOS=y
+-# CONFIG_IPW2200_DEBUG is not set
+-CONFIG_LIBERTAS=m
+-CONFIG_LIBERTAS_USB=m
+-CONFIG_LIBERTAS_CS=m
+-CONFIG_LIBERTAS_SDIO=m
+-# CONFIG_LIBERTAS_DEBUG is not set
+-CONFIG_AIRO=m
+-CONFIG_HERMES=m
+-CONFIG_PLX_HERMES=m
+-CONFIG_TMD_HERMES=m
+-CONFIG_NORTEL_HERMES=m
+-CONFIG_PCI_HERMES=m
+-CONFIG_PCMCIA_HERMES=m
+-CONFIG_PCMCIA_SPECTRUM=m
+-CONFIG_ATMEL=m
+-CONFIG_PCI_ATMEL=m
+-CONFIG_PCMCIA_ATMEL=m
+-CONFIG_AIRO_CS=m
+-CONFIG_PCMCIA_WL3501=m
+-CONFIG_PRISM54=m
+-CONFIG_USB_ZD1201=m
+-CONFIG_USB_NET_RNDIS_WLAN=m
+-CONFIG_RTL8180=m
+-CONFIG_RTL8187=m
+-CONFIG_ADM8211=m
+-CONFIG_MAC80211_HWSIM=m
+-CONFIG_P54_COMMON=m
+-CONFIG_P54_USB=m
+-CONFIG_P54_PCI=m
+-CONFIG_ATH5K=m
+-# CONFIG_ATH5K_DEBUG is not set
+-CONFIG_ATH9K=m
+-CONFIG_IWLWIFI=m
+-CONFIG_IWLCORE=m
+-CONFIG_IWLWIFI_LEDS=y
+-CONFIG_IWLWIFI_RFKILL=y
+-# CONFIG_IWLWIFI_DEBUG is not set
+-CONFIG_IWLAGN=m
+-CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWLAGN_LEDS=y
+-CONFIG_IWL4965=y
+-CONFIG_IWL5000=y
+-CONFIG_IWL3945=m
+-CONFIG_IWL3945_RFKILL=y
+-CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWL3945_LEDS=y
+-# CONFIG_IWL3945_DEBUG is not set
+-CONFIG_HOSTAP=m
+-CONFIG_HOSTAP_FIRMWARE=y
+-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+-CONFIG_HOSTAP_PLX=m
+-CONFIG_HOSTAP_PCI=m
+-CONFIG_HOSTAP_CS=m
+-CONFIG_B43=m
+-CONFIG_B43_PCI_AUTOSELECT=y
+-CONFIG_B43_PCICORE_AUTOSELECT=y
+-CONFIG_B43_PCMCIA=y
+-CONFIG_B43_PIO=y
+-CONFIG_B43_LEDS=y
+-CONFIG_B43_RFKILL=y
+-# CONFIG_B43_DEBUG is not set
+-CONFIG_B43LEGACY=m
+-CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+-CONFIG_B43LEGACY_LEDS=y
+-CONFIG_B43LEGACY_RFKILL=y
+-# CONFIG_B43LEGACY_DEBUG is not set
+-CONFIG_B43LEGACY_DMA=y
+-CONFIG_B43LEGACY_PIO=y
+-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+-# CONFIG_B43LEGACY_DMA_MODE is not set
+-# CONFIG_B43LEGACY_PIO_MODE is not set
+-CONFIG_ZD1211RW=m
+-# CONFIG_ZD1211RW_DEBUG is not set
+-CONFIG_RT2X00=m
+-CONFIG_RT2X00_LIB=m
+-CONFIG_RT2X00_LIB_PCI=m
+-CONFIG_RT2X00_LIB_USB=m
+-CONFIG_RT2X00_LIB_FIRMWARE=y
+-CONFIG_RT2X00_LIB_RFKILL=y
+-CONFIG_RT2X00_LIB_LEDS=y
+-CONFIG_RT2400PCI=m
+-CONFIG_RT2400PCI_RFKILL=y
+-CONFIG_RT2400PCI_LEDS=y
+-CONFIG_RT2500PCI=m
+-CONFIG_RT2500PCI_RFKILL=y
+-CONFIG_RT2500PCI_LEDS=y
+-CONFIG_RT61PCI=m
+-CONFIG_RT61PCI_RFKILL=y
+-CONFIG_RT61PCI_LEDS=y
+-CONFIG_RT2500USB=m
+-CONFIG_RT2500USB_LEDS=y
+-CONFIG_RT73USB=m
+-CONFIG_RT73USB_LEDS=y
+-# CONFIG_RT2X00_LIB_DEBUGFS is not set
+-# CONFIG_RT2X00_DEBUG is not set
+-
+-#
+-# USB Network Adapters
+-#
+-CONFIG_USB_CATC=m
+-CONFIG_USB_KAWETH=m
+-CONFIG_USB_PEGASUS=m
+-CONFIG_USB_RTL8150=m
+-CONFIG_USB_USBNET=m
+-CONFIG_USB_NET_AX8817X=m
+-CONFIG_USB_NET_CDCETHER=m
+-CONFIG_USB_NET_DM9601=m
+-CONFIG_USB_NET_GL620A=m
+-CONFIG_USB_NET_NET1080=m
+-CONFIG_USB_NET_PLUSB=m
+-CONFIG_USB_NET_MCS7830=m
+-CONFIG_USB_NET_RNDIS_HOST=m
+-CONFIG_USB_NET_CDC_SUBSET=m
+-CONFIG_USB_ALI_M5632=y
+-CONFIG_USB_AN2720=y
+-CONFIG_USB_BELKIN=y
+-CONFIG_USB_ARMLINUX=y
+-CONFIG_USB_EPSON2888=y
+-CONFIG_USB_KC2190=y
+-CONFIG_USB_NET_ZAURUS=m
+-CONFIG_USB_HSO=m
+-CONFIG_NET_PCMCIA=y
+-CONFIG_PCMCIA_3C589=m
+-CONFIG_PCMCIA_3C574=m
+-CONFIG_PCMCIA_FMVJ18X=m
+-CONFIG_PCMCIA_PCNET=m
+-CONFIG_PCMCIA_NMCLAN=m
+-CONFIG_PCMCIA_SMC91C92=m
+-CONFIG_PCMCIA_XIRC2PS=m
+-CONFIG_PCMCIA_AXNET=m
+-CONFIG_PCMCIA_IBMTR=m
+-CONFIG_WAN=y
+-CONFIG_HOSTESS_SV11=m
+-# CONFIG_COSA is not set
+-CONFIG_LANMEDIA=m
+-CONFIG_SEALEVEL_4021=m
+-CONFIG_HDLC=m
+-CONFIG_HDLC_RAW=m
+-CONFIG_HDLC_RAW_ETH=m
+-CONFIG_HDLC_CISCO=m
+-CONFIG_HDLC_FR=m
+-CONFIG_HDLC_PPP=m
+-CONFIG_HDLC_X25=m
+-CONFIG_PCI200SYN=m
+-CONFIG_WANXL=m
+-# CONFIG_PC300 is not set
+-CONFIG_PC300TOO=m
+-CONFIG_N2=m
+-CONFIG_C101=m
+-CONFIG_FARSYNC=m
+-# CONFIG_DSCC4 is not set
+-CONFIG_DLCI=m
+-CONFIG_DLCI_MAX=8
+-CONFIG_SDLA=m
+-# CONFIG_WAN_ROUTER_DRIVERS is not set
+-CONFIG_LAPBETHER=m
+-CONFIG_X25_ASY=m
+-# CONFIG_SBNI is not set
+-CONFIG_ATM_DRIVERS=y
+-CONFIG_ATM_DUMMY=m
+-CONFIG_ATM_TCP=m
+-CONFIG_ATM_LANAI=m
+-CONFIG_ATM_ENI=m
+-# CONFIG_ATM_ENI_DEBUG is not set
+-# CONFIG_ATM_ENI_TUNE_BURST is not set
+-CONFIG_ATM_FIRESTREAM=m
+-CONFIG_ATM_ZATM=m
+-# CONFIG_ATM_ZATM_DEBUG is not set
+-CONFIG_ATM_NICSTAR=m
+-CONFIG_ATM_NICSTAR_USE_SUNI=y
+-CONFIG_ATM_NICSTAR_USE_IDT77105=y
+-CONFIG_ATM_IDT77252=m
+-# CONFIG_ATM_IDT77252_DEBUG is not set
+-CONFIG_ATM_IDT77252_RCV_ALL=y
+-CONFIG_ATM_IDT77252_USE_SUNI=y
+-CONFIG_ATM_AMBASSADOR=m
+-# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+-CONFIG_ATM_HORIZON=m
+-# CONFIG_ATM_HORIZON_DEBUG is not set
+-CONFIG_ATM_IA=m
+-# CONFIG_ATM_IA_DEBUG is not set
+-CONFIG_ATM_FORE200E=m
+-CONFIG_ATM_FORE200E_USE_TASKLET=y
+-CONFIG_ATM_FORE200E_TX_RETRY=16
+-CONFIG_ATM_FORE200E_DEBUG=0
+-CONFIG_ATM_HE=m
+-CONFIG_ATM_HE_USE_SUNI=y
+-CONFIG_FDDI=y
+-# CONFIG_DEFXX is not set
+-CONFIG_SKFP=m
+-CONFIG_HIPPI=y
+-CONFIG_ROADRUNNER=m
+-CONFIG_ROADRUNNER_LARGE_RINGS=y
+-CONFIG_PLIP=m
+-CONFIG_PPP=m
+-CONFIG_PPP_MULTILINK=y
+-CONFIG_PPP_FILTER=y
+-CONFIG_PPP_ASYNC=m
+-CONFIG_PPP_SYNC_TTY=m
+-CONFIG_PPP_DEFLATE=m
+-CONFIG_PPP_BSDCOMP=m
+-CONFIG_PPP_MPPE=m
+-CONFIG_PPPOE=m
+-CONFIG_PPPOATM=m
+-CONFIG_PPPOL2TP=m
+-CONFIG_SLIP=m
+-CONFIG_SLIP_COMPRESSED=y
+-CONFIG_SLHC=m
+-CONFIG_SLIP_SMART=y
+-CONFIG_SLIP_MODE_SLIP6=y
+-CONFIG_NET_FC=y
+-CONFIG_NETCONSOLE=m
+-CONFIG_NETCONSOLE_DYNAMIC=y
+-CONFIG_NETPOLL=y
+-CONFIG_NETPOLL_TRAP=y
+-CONFIG_NET_POLL_CONTROLLER=y
+-CONFIG_VIRTIO_NET=m
+-CONFIG_ISDN=y
+-CONFIG_MISDN=m
+-CONFIG_MISDN_DSP=m
+-CONFIG_MISDN_L1OIP=m
+-
+-#
+-# mISDN hardware drivers
+-#
+-CONFIG_MISDN_HFCPCI=m
+-CONFIG_MISDN_HFCMULTI=m
+-CONFIG_ISDN_I4L=m
+-CONFIG_ISDN_PPP=y
+-CONFIG_ISDN_PPP_VJ=y
+-CONFIG_ISDN_MPP=y
+-CONFIG_IPPP_FILTER=y
+-CONFIG_ISDN_PPP_BSDCOMP=m
+-CONFIG_ISDN_AUDIO=y
+-CONFIG_ISDN_TTY_FAX=y
+-CONFIG_ISDN_X25=y
+-
+-#
+-# ISDN feature submodules
+-#
+-CONFIG_ISDN_DIVERSION=m
+-
+-#
+-# ISDN4Linux hardware drivers
+-#
+-
+-#
+-# Passive cards
+-#
+-CONFIG_ISDN_DRV_HISAX=m
+-
+-#
+-# D-channel protocol features
+-#
+-CONFIG_HISAX_EURO=y
+-CONFIG_DE_AOC=y
+-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+-# CONFIG_HISAX_NO_LLC is not set
+-# CONFIG_HISAX_NO_KEYPAD is not set
+-CONFIG_HISAX_1TR6=y
+-CONFIG_HISAX_NI1=y
+-CONFIG_HISAX_MAX_CARDS=8
+-
+-#
+-# HiSax supported cards
+-#
+-CONFIG_HISAX_16_0=y
+-CONFIG_HISAX_16_3=y
+-CONFIG_HISAX_TELESPCI=y
+-CONFIG_HISAX_S0BOX=y
+-CONFIG_HISAX_AVM_A1=y
+-CONFIG_HISAX_FRITZPCI=y
+-CONFIG_HISAX_AVM_A1_PCMCIA=y
+-CONFIG_HISAX_ELSA=y
+-CONFIG_HISAX_IX1MICROR2=y
+-CONFIG_HISAX_DIEHLDIVA=y
+-CONFIG_HISAX_ASUSCOM=y
+-CONFIG_HISAX_TELEINT=y
+-CONFIG_HISAX_HFCS=y
+-CONFIG_HISAX_SEDLBAUER=y
+-CONFIG_HISAX_SPORTSTER=y
+-CONFIG_HISAX_MIC=y
+-CONFIG_HISAX_NETJET=y
+-CONFIG_HISAX_NETJET_U=y
+-CONFIG_HISAX_NICCY=y
+-CONFIG_HISAX_ISURF=y
+-CONFIG_HISAX_HSTSAPHIR=y
+-CONFIG_HISAX_BKM_A4T=y
+-CONFIG_HISAX_SCT_QUADRO=y
+-CONFIG_HISAX_GAZEL=y
+-CONFIG_HISAX_HFC_PCI=y
+-CONFIG_HISAX_W6692=y
+-CONFIG_HISAX_HFC_SX=y
+-CONFIG_HISAX_ENTERNOW_PCI=y
+-CONFIG_HISAX_DEBUG=y
+-
+-#
+-# HiSax PCMCIA card service modules
+-#
+-CONFIG_HISAX_SEDLBAUER_CS=m
+-CONFIG_HISAX_ELSA_CS=m
+-CONFIG_HISAX_AVM_A1_CS=m
+-CONFIG_HISAX_TELES_CS=m
+-
+-#
+-# HiSax sub driver modules
+-#
+-CONFIG_HISAX_ST5481=m
+-CONFIG_HISAX_HFCUSB=m
+-CONFIG_HISAX_HFC4S8S=m
+-CONFIG_HISAX_FRITZ_PCIPNP=m
+-CONFIG_HISAX_HDLC=y
+-
+-#
+-# Active cards
+-#
+-CONFIG_ISDN_DRV_ICN=m
+-CONFIG_ISDN_DRV_PCBIT=m
+-CONFIG_ISDN_DRV_SC=m
+-CONFIG_ISDN_DRV_ACT2000=m
+-CONFIG_HYSDN=m
+-CONFIG_HYSDN_CAPI=y
+-CONFIG_ISDN_DRV_GIGASET=m
+-CONFIG_GIGASET_BASE=m
+-CONFIG_GIGASET_M105=m
+-CONFIG_GIGASET_M101=m
+-# CONFIG_GIGASET_DEBUG is not set
+-CONFIG_GIGASET_UNDOCREQ=y
+-CONFIG_ISDN_CAPI=m
+-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+-CONFIG_CAPI_TRACE=y
+-CONFIG_ISDN_CAPI_MIDDLEWARE=y
+-CONFIG_ISDN_CAPI_CAPI20=m
+-CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+-CONFIG_ISDN_CAPI_CAPIFS=m
+-CONFIG_ISDN_CAPI_CAPIDRV=m
+-
+-#
+-# CAPI hardware drivers
+-#
+-CONFIG_CAPI_AVM=y
+-CONFIG_ISDN_DRV_AVMB1_B1ISA=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+-CONFIG_ISDN_DRV_AVMB1_T1ISA=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+-CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+-CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_C4=m
+-CONFIG_CAPI_EICON=y
+-CONFIG_ISDN_DIVAS=m
+-CONFIG_ISDN_DIVAS_BRIPCI=y
+-CONFIG_ISDN_DIVAS_PRIPCI=y
+-CONFIG_ISDN_DIVAS_DIVACAPI=m
+-CONFIG_ISDN_DIVAS_USERIDI=m
+-CONFIG_ISDN_DIVAS_MAINT=m
+-CONFIG_PHONE=m
+-CONFIG_PHONE_IXJ=m
+-CONFIG_PHONE_IXJ_PCMCIA=m
+-
+-#
+-# Input device support
+-#
+-CONFIG_INPUT=y
+-CONFIG_INPUT_FF_MEMLESS=m
+-CONFIG_INPUT_POLLDEV=m
+-
+-#
+-# Userland interfaces
+-#
+-CONFIG_INPUT_MOUSEDEV=y
+-CONFIG_INPUT_MOUSEDEV_PSAUX=y
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+-CONFIG_INPUT_JOYDEV=m
+-CONFIG_INPUT_EVDEV=y
+-# CONFIG_INPUT_EVBUG is not set
+-
+-#
+-# Input Device Drivers
+-#
+-CONFIG_INPUT_KEYBOARD=y
+-CONFIG_KEYBOARD_ATKBD=y
+-CONFIG_KEYBOARD_SUNKBD=m
+-# CONFIG_KEYBOARD_LKKBD is not set
+-CONFIG_KEYBOARD_XTKBD=m
+-CONFIG_KEYBOARD_NEWTON=m
+-# CONFIG_KEYBOARD_STOWAWAY is not set
+-CONFIG_KEYBOARD_GPIO=m
+-CONFIG_INPUT_MOUSE=y
+-CONFIG_MOUSE_PS2=y
+-CONFIG_MOUSE_PS2_ALPS=y
+-CONFIG_MOUSE_PS2_LOGIPS2PP=y
+-CONFIG_MOUSE_PS2_SYNAPTICS=y
+-CONFIG_MOUSE_PS2_LIFEBOOK=y
+-CONFIG_MOUSE_PS2_TRACKPOINT=y
+-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+-CONFIG_MOUSE_SERIAL=m
+-CONFIG_MOUSE_APPLETOUCH=m
+-CONFIG_MOUSE_BCM5974=m
+-CONFIG_MOUSE_INPORT=m
+-CONFIG_MOUSE_ATIXL=y
+-CONFIG_MOUSE_LOGIBM=m
+-CONFIG_MOUSE_PC110PAD=m
+-# CONFIG_MOUSE_VSXXXAA is not set
+-CONFIG_MOUSE_GPIO=m
+-CONFIG_INPUT_JOYSTICK=y
+-CONFIG_JOYSTICK_ANALOG=m
+-CONFIG_JOYSTICK_A3D=m
+-CONFIG_JOYSTICK_ADI=m
+-CONFIG_JOYSTICK_COBRA=m
+-CONFIG_JOYSTICK_GF2K=m
+-CONFIG_JOYSTICK_GRIP=m
+-CONFIG_JOYSTICK_GRIP_MP=m
+-CONFIG_JOYSTICK_GUILLEMOT=m
+-CONFIG_JOYSTICK_INTERACT=m
+-CONFIG_JOYSTICK_SIDEWINDER=m
+-CONFIG_JOYSTICK_TMDC=m
+-CONFIG_JOYSTICK_IFORCE=m
+-CONFIG_JOYSTICK_IFORCE_USB=y
+-CONFIG_JOYSTICK_IFORCE_232=y
+-CONFIG_JOYSTICK_WARRIOR=m
+-CONFIG_JOYSTICK_MAGELLAN=m
+-CONFIG_JOYSTICK_SPACEORB=m
+-CONFIG_JOYSTICK_SPACEBALL=m
+-CONFIG_JOYSTICK_STINGER=m
+-CONFIG_JOYSTICK_TWIDJOY=m
+-CONFIG_JOYSTICK_ZHENHUA=m
+-CONFIG_JOYSTICK_DB9=m
+-CONFIG_JOYSTICK_GAMECON=m
+-CONFIG_JOYSTICK_TURBOGRAFX=m
+-CONFIG_JOYSTICK_JOYDUMP=m
+-CONFIG_JOYSTICK_XPAD=m
+-CONFIG_JOYSTICK_XPAD_FF=y
+-CONFIG_JOYSTICK_XPAD_LEDS=y
+-CONFIG_INPUT_TABLET=y
+-CONFIG_TABLET_USB_ACECAD=m
+-CONFIG_TABLET_USB_AIPTEK=m
+-CONFIG_TABLET_USB_GTCO=m
+-CONFIG_TABLET_USB_KBTAB=m
+-CONFIG_TABLET_USB_WACOM=m
+-CONFIG_INPUT_TOUCHSCREEN=y
+-CONFIG_TOUCHSCREEN_ADS7846=m
+-CONFIG_TOUCHSCREEN_FUJITSU=m
+-CONFIG_TOUCHSCREEN_GUNZE=m
+-CONFIG_TOUCHSCREEN_ELO=m
+-CONFIG_TOUCHSCREEN_ELOUSB=m
+-CONFIG_TOUCHSCREEN_MTOUCH=m
+-CONFIG_TOUCHSCREEN_INEXIO=m
+-CONFIG_TOUCHSCREEN_MK712=m
+-CONFIG_TOUCHSCREEN_HTCPEN=m
+-CONFIG_TOUCHSCREEN_PENMOUNT=m
+-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+-CONFIG_TOUCHSCREEN_TOUCHWIN=m
+-CONFIG_TOUCHSCREEN_UCB1400=m
+-CONFIG_TOUCHSCREEN_WM97XX=m
+-CONFIG_TOUCHSCREEN_WM9705=y
+-CONFIG_TOUCHSCREEN_WM9712=y
+-CONFIG_TOUCHSCREEN_WM9713=y
+-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+-CONFIG_TOUCHSCREEN_USB_EGALAX=y
+-CONFIG_TOUCHSCREEN_USB_PANJIT=y
+-CONFIG_TOUCHSCREEN_USB_3M=y
+-CONFIG_TOUCHSCREEN_USB_ITM=y
+-CONFIG_TOUCHSCREEN_USB_ETURBO=y
+-CONFIG_TOUCHSCREEN_USB_GUNZE=y
+-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+-CONFIG_TOUCHSCREEN_USB_GOTOP=y
+-CONFIG_TOUCHSCREEN_TOUCHIT213=m
+-CONFIG_INPUT_MISC=y
+-CONFIG_INPUT_PCSPKR=m
+-CONFIG_INPUT_APANEL=m
+-CONFIG_INPUT_WISTRON_BTNS=m
+-CONFIG_INPUT_ATLAS_BTNS=m
+-CONFIG_INPUT_ATI_REMOTE=m
+-CONFIG_INPUT_ATI_REMOTE2=m
+-CONFIG_INPUT_KEYSPAN_REMOTE=m
+-CONFIG_INPUT_POWERMATE=m
+-CONFIG_INPUT_YEALINK=m
+-CONFIG_INPUT_UINPUT=m
+-
+-#
+-# Hardware I/O ports
+-#
+-CONFIG_SERIO=y
+-CONFIG_SERIO_I8042=y
+-CONFIG_SERIO_SERPORT=m
+-CONFIG_SERIO_CT82C710=m
+-CONFIG_SERIO_PARKBD=m
+-CONFIG_SERIO_PCIPS2=m
+-CONFIG_SERIO_LIBPS2=y
+-CONFIG_SERIO_RAW=m
+-CONFIG_GAMEPORT=m
+-CONFIG_GAMEPORT_NS558=m
+-CONFIG_GAMEPORT_L4=m
+-CONFIG_GAMEPORT_EMU10K1=m
+-CONFIG_GAMEPORT_FM801=m
+-
+-#
+-# Character devices
+-#
+-CONFIG_VT=y
+-CONFIG_CONSOLE_TRANSLATIONS=y
+-CONFIG_VT_CONSOLE=y
+-CONFIG_HW_CONSOLE=y
+-CONFIG_VT_HW_CONSOLE_BINDING=y
+-CONFIG_DEVKMEM=y
+-CONFIG_SERIAL_NONSTANDARD=y
+-CONFIG_COMPUTONE=m
+-CONFIG_ROCKETPORT=m
+-CONFIG_CYCLADES=m
+-CONFIG_CYZ_INTR=y
+-CONFIG_DIGIEPCA=m
+-CONFIG_ESPSERIAL=m
+-CONFIG_MOXA_INTELLIO=m
+-CONFIG_MOXA_SMARTIO=m
+-CONFIG_ISI=m
+-CONFIG_SYNCLINK=m
+-CONFIG_SYNCLINKMP=m
+-CONFIG_SYNCLINK_GT=m
+-CONFIG_N_HDLC=m
+-CONFIG_RISCOM8=m
+-CONFIG_SPECIALIX=m
+-CONFIG_SX=m
+-CONFIG_RIO=m
+-CONFIG_RIO_OLDPCI=y
+-CONFIG_STALDRV=y
+-CONFIG_NOZOMI=m
+-
+-#
+-# Serial drivers
+-#
+-CONFIG_SERIAL_8250=y
+-CONFIG_SERIAL_8250_CONSOLE=y
+-CONFIG_FIX_EARLYCON_MEM=y
+-CONFIG_SERIAL_8250_PCI=y
+-CONFIG_SERIAL_8250_PNP=y
+-CONFIG_SERIAL_8250_CS=m
+-CONFIG_SERIAL_8250_NR_UARTS=16
+-CONFIG_SERIAL_8250_RUNTIME_UARTS=8
+-CONFIG_SERIAL_8250_EXTENDED=y
+-CONFIG_SERIAL_8250_MANY_PORTS=y
+-CONFIG_SERIAL_8250_FOURPORT=m
+-CONFIG_SERIAL_8250_ACCENT=m
+-CONFIG_SERIAL_8250_BOCA=m
+-CONFIG_SERIAL_8250_EXAR_ST16C554=m
+-CONFIG_SERIAL_8250_HUB6=m
+-CONFIG_SERIAL_8250_SHARE_IRQ=y
+-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+-CONFIG_SERIAL_8250_RSA=y
+-
+-#
+-# Non-8250 serial port support
+-#
+-CONFIG_SERIAL_CORE=y
+-CONFIG_SERIAL_CORE_CONSOLE=y
+-CONFIG_SERIAL_JSM=m
+-CONFIG_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=0
+-CONFIG_PRINTER=m
+-# CONFIG_LP_CONSOLE is not set
+-CONFIG_PPDEV=m
+-CONFIG_HVC_DRIVER=y
+-CONFIG_VIRTIO_CONSOLE=m
+-CONFIG_IPMI_HANDLER=m
+-CONFIG_IPMI_PANIC_EVENT=y
+-CONFIG_IPMI_PANIC_STRING=y
+-CONFIG_IPMI_DEVICE_INTERFACE=m
+-CONFIG_IPMI_SI=m
+-CONFIG_IPMI_WATCHDOG=m
+-CONFIG_IPMI_POWEROFF=m
+-CONFIG_HW_RANDOM=y
+-CONFIG_HW_RANDOM_INTEL=m
+-CONFIG_HW_RANDOM_AMD=m
+-CONFIG_HW_RANDOM_GEODE=m
+-CONFIG_HW_RANDOM_VIA=m
+-CONFIG_HW_RANDOM_VIRTIO=m
+-CONFIG_NVRAM=m
+-CONFIG_DTLK=m
+-CONFIG_R3964=m
+-CONFIG_APPLICOM=m
+-CONFIG_SONYPI=m
+-
+-#
+-# PCMCIA character devices
+-#
+-CONFIG_SYNCLINK_CS=m
+-CONFIG_CARDMAN_4000=m
+-CONFIG_CARDMAN_4040=m
+-CONFIG_IPWIRELESS=m
+-CONFIG_MWAVE=m
+-CONFIG_SCx200_GPIO=m
+-CONFIG_PC8736x_GPIO=m
+-CONFIG_NSC_GPIO=m
+-CONFIG_CS5535_GPIO=m
+-CONFIG_RAW_DRIVER=m
+-CONFIG_MAX_RAW_DEVS=4096
+-CONFIG_HPET=y
+-CONFIG_HPET_MMAP=y
+-CONFIG_HANGCHECK_TIMER=m
+-CONFIG_TCG_TPM=m
+-CONFIG_TCG_TIS=m
+-CONFIG_TCG_NSC=m
+-CONFIG_TCG_ATMEL=m
+-CONFIG_TCG_INFINEON=m
+-CONFIG_TELCLOCK=m
+-CONFIG_DEVPORT=y
+-CONFIG_CRASHER=m
+-CONFIG_I2C=m
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=m
+-CONFIG_I2C_HELPER_AUTO=y
+-CONFIG_I2C_ALGOBIT=m
+-CONFIG_I2C_ALGOPCA=m
+-
+-#
+-# I2C Hardware Bus support
+-#
+-
+-#
+-# PC SMBus host controller drivers
+-#
+-CONFIG_I2C_ALI1535=m
+-CONFIG_I2C_ALI1563=m
+-CONFIG_I2C_ALI15X3=m
+-CONFIG_I2C_AMD756=m
+-CONFIG_I2C_AMD756_S4882=m
+-CONFIG_I2C_AMD8111=m
+-CONFIG_I2C_I801=m
+-CONFIG_I2C_ISCH=m
+-CONFIG_I2C_PIIX4=m
+-CONFIG_I2C_NFORCE2=m
+-CONFIG_I2C_NFORCE2_S4985=m
+-CONFIG_I2C_SIS5595=m
+-CONFIG_I2C_SIS630=m
+-CONFIG_I2C_SIS96X=m
+-CONFIG_I2C_VIA=m
+-CONFIG_I2C_VIAPRO=m
+-
+-#
+-# I2C system bus drivers (mostly embedded / system-on-chip)
+-#
+-CONFIG_I2C_GPIO=m
+-CONFIG_I2C_OCORES=m
+-# CONFIG_I2C_SIMTEC is not set
+-
+-#
+-# External I2C/SMBus adapter drivers
+-#
+-CONFIG_I2C_PARPORT=m
+-CONFIG_I2C_PARPORT_LIGHT=m
+-CONFIG_I2C_TAOS_EVM=m
+-CONFIG_I2C_TINY_USB=m
+-
+-#
+-# Graphics adapter I2C/DDC channel drivers
+-#
+-CONFIG_I2C_VOODOO3=m
+-
+-#
+-# Other I2C/SMBus bus drivers
+-#
+-CONFIG_I2C_PCA_ISA=m
+-CONFIG_I2C_PCA_PLATFORM=m
+-CONFIG_I2C_STUB=m
+-CONFIG_SCx200_I2C=m
+-CONFIG_SCx200_I2C_SCL=12
+-CONFIG_SCx200_I2C_SDA=13
+-CONFIG_SCx200_ACB=m
+-
+-#
+-# Miscellaneous I2C Chip support
+-#
+-CONFIG_DS1682=m
+-CONFIG_AT24=m
+-CONFIG_SENSORS_EEPROM=m
+-CONFIG_SENSORS_PCF8591=m
+-# CONFIG_TPS65010 is not set
+-CONFIG_SENSORS_MAX6875=m
+-CONFIG_SENSORS_TSL2550=m
+-# CONFIG_I2C_DEBUG_CORE is not set
+-# CONFIG_I2C_DEBUG_ALGO is not set
+-# CONFIG_I2C_DEBUG_BUS is not set
+-# CONFIG_I2C_DEBUG_CHIP is not set
+-CONFIG_SPI=y
+-CONFIG_SPI_DEBUG=y
+-CONFIG_SPI_MASTER=y
+-
+-#
+-# SPI Master Controller Drivers
+-#
+-CONFIG_SPI_BITBANG=m
+-CONFIG_SPI_BUTTERFLY=m
+-CONFIG_SPI_LM70_LLP=m
+-
+-#
+-# SPI Protocol Masters
+-#
+-CONFIG_SPI_AT25=m
+-CONFIG_SPI_SPIDEV=m
+-CONFIG_SPI_TLE62X0=m
+-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+-CONFIG_GPIOLIB=y
+-# CONFIG_DEBUG_GPIO is not set
+-CONFIG_GPIO_SYSFS=y
+-
+-#
+-# I2C GPIO expanders:
+-#
+-CONFIG_GPIO_MAX732X=m
+-CONFIG_GPIO_PCA953X=m
+-CONFIG_GPIO_PCF857X=m
+-
+-#
+-# PCI GPIO expanders:
+-#
+-
+-#
+-# SPI GPIO expanders:
+-#
+-CONFIG_GPIO_MAX7301=m
+-CONFIG_GPIO_MCP23S08=m
+-CONFIG_W1=m
+-CONFIG_W1_CON=y
+-
+-#
+-# 1-wire Bus Masters
+-#
+-CONFIG_W1_MASTER_MATROX=m
+-CONFIG_W1_MASTER_DS2490=m
+-CONFIG_W1_MASTER_DS2482=m
+-CONFIG_W1_MASTER_GPIO=m
+-
+-#
+-# 1-wire Slaves
+-#
+-CONFIG_W1_SLAVE_THERM=m
+-CONFIG_W1_SLAVE_SMEM=m
+-CONFIG_W1_SLAVE_DS2433=m
+-CONFIG_W1_SLAVE_DS2433_CRC=y
+-CONFIG_W1_SLAVE_DS2760=m
+-CONFIG_POWER_SUPPLY=y
+-# CONFIG_POWER_SUPPLY_DEBUG is not set
+-CONFIG_PDA_POWER=m
+-CONFIG_BATTERY_DS2760=m
+-CONFIG_BATTERY_OLPC=m
+-CONFIG_HWMON=m
+-CONFIG_HWMON_VID=m
+-CONFIG_SENSORS_ABITUGURU=m
+-CONFIG_SENSORS_ABITUGURU3=m
+-CONFIG_SENSORS_AD7414=m
+-CONFIG_SENSORS_AD7418=m
+-CONFIG_SENSORS_ADCXX=m
+-CONFIG_SENSORS_ADM1021=m
+-CONFIG_SENSORS_ADM1025=m
+-CONFIG_SENSORS_ADM1026=m
+-CONFIG_SENSORS_ADM1029=m
+-CONFIG_SENSORS_ADM1031=m
+-CONFIG_SENSORS_ADM9240=m
+-CONFIG_SENSORS_ADT7470=m
+-CONFIG_SENSORS_ADT7473=m
+-CONFIG_SENSORS_K8TEMP=m
+-CONFIG_SENSORS_ASB100=m
+-CONFIG_SENSORS_ATXP1=m
+-CONFIG_SENSORS_DS1621=m
+-CONFIG_SENSORS_I5K_AMB=m
+-CONFIG_SENSORS_F71805F=m
+-CONFIG_SENSORS_F71882FG=m
+-CONFIG_SENSORS_F75375S=m
+-CONFIG_SENSORS_FSCHER=m
+-CONFIG_SENSORS_FSCPOS=m
+-CONFIG_SENSORS_FSCHMD=m
+-CONFIG_SENSORS_GL518SM=m
+-CONFIG_SENSORS_GL520SM=m
+-CONFIG_SENSORS_CORETEMP=m
+-CONFIG_SENSORS_IBMAEM=m
+-CONFIG_SENSORS_IBMPEX=m
+-CONFIG_SENSORS_IT87=m
+-CONFIG_SENSORS_LM63=m
+-CONFIG_SENSORS_LM70=m
+-CONFIG_SENSORS_LM75=m
+-CONFIG_SENSORS_LM77=m
+-CONFIG_SENSORS_LM78=m
+-CONFIG_SENSORS_LM80=m
+-CONFIG_SENSORS_LM83=m
+-CONFIG_SENSORS_LM85=m
+-CONFIG_SENSORS_LM87=m
+-CONFIG_SENSORS_LM90=m
+-CONFIG_SENSORS_LM92=m
+-CONFIG_SENSORS_LM93=m
+-CONFIG_SENSORS_MAX1619=m
+-CONFIG_SENSORS_MAX6650=m
+-CONFIG_SENSORS_PC87360=m
+-CONFIG_SENSORS_PC87427=m
+-CONFIG_SENSORS_SIS5595=m
+-CONFIG_SENSORS_DME1737=m
+-CONFIG_SENSORS_SMSC47M1=m
+-CONFIG_SENSORS_SMSC47M192=m
+-CONFIG_SENSORS_SMSC47B397=m
+-CONFIG_SENSORS_ADS7828=m
+-CONFIG_SENSORS_THMC50=m
+-CONFIG_SENSORS_VIA686A=m
+-CONFIG_SENSORS_VT1211=m
+-CONFIG_SENSORS_VT8231=m
+-CONFIG_SENSORS_W83781D=m
+-CONFIG_SENSORS_W83791D=m
+-CONFIG_SENSORS_W83792D=m
+-CONFIG_SENSORS_W83793=m
+-CONFIG_SENSORS_W83L785TS=m
+-CONFIG_SENSORS_W83L786NG=m
+-CONFIG_SENSORS_W83627HF=m
+-CONFIG_SENSORS_W83627EHF=m
+-CONFIG_SENSORS_HDAPS=m
+-CONFIG_SENSORS_APPLESMC=m
+-# CONFIG_HWMON_DEBUG_CHIP is not set
+-CONFIG_THERMAL=m
+-CONFIG_THERMAL_HWMON=y
+-CONFIG_WATCHDOG=y
+-# CONFIG_WATCHDOG_NOWAYOUT is not set
+-
+-#
+-# Watchdog Device Drivers
+-#
+-CONFIG_SOFT_WATCHDOG=m
+-CONFIG_ACQUIRE_WDT=m
+-CONFIG_ADVANTECH_WDT=m
+-CONFIG_ALIM1535_WDT=m
+-CONFIG_ALIM7101_WDT=m
+-CONFIG_SC520_WDT=m
+-CONFIG_EUROTECH_WDT=m
+-CONFIG_IB700_WDT=m
+-CONFIG_IBMASR=m
+-CONFIG_WAFER_WDT=m
+-CONFIG_I6300ESB_WDT=m
+-CONFIG_ITCO_WDT=m
+-CONFIG_ITCO_VENDOR_SUPPORT=y
+-CONFIG_IT8712F_WDT=m
+-CONFIG_HP_WATCHDOG=m
+-CONFIG_SC1200_WDT=m
+-CONFIG_SCx200_WDT=m
+-CONFIG_PC87413_WDT=m
+-CONFIG_60XX_WDT=m
+-CONFIG_SBC8360_WDT=m
+-CONFIG_SBC7240_WDT=m
+-CONFIG_CPU5_WDT=m
+-CONFIG_SMSC37B787_WDT=m
+-CONFIG_W83627HF_WDT=m
+-CONFIG_W83697HF_WDT=m
+-CONFIG_W83877F_WDT=m
+-CONFIG_W83977F_WDT=m
+-CONFIG_MACHZ_WDT=m
+-CONFIG_SBC_EPX_C3_WATCHDOG=m
+-
+-#
+-# ISA-based Watchdog Cards
+-#
+-CONFIG_PCWATCHDOG=m
+-CONFIG_MIXCOMWD=m
+-CONFIG_WDT=m
+-CONFIG_WDT_501=y
+-
+-#
+-# PCI-based Watchdog Cards
+-#
+-CONFIG_PCIPCWATCHDOG=m
+-CONFIG_WDTPCI=m
+-CONFIG_WDT_501_PCI=y
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-CONFIG_USBPCWATCHDOG=m
+-
+-#
+-# Sonics Silicon Backplane
+-#
+-CONFIG_SSB_POSSIBLE=y
+-CONFIG_SSB=m
+-CONFIG_SSB_SPROM=y
+-CONFIG_SSB_BLOCKIO=y
+-CONFIG_SSB_PCIHOST_POSSIBLE=y
+-CONFIG_SSB_PCIHOST=y
+-CONFIG_SSB_B43_PCI_BRIDGE=y
+-CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+-CONFIG_SSB_PCMCIAHOST=y
+-# CONFIG_SSB_DEBUG is not set
+-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+-CONFIG_SSB_DRIVER_PCICORE=y
+-
+-#
+-# Multifunction device drivers
+-#
+-# CONFIG_MFD_CORE is not set
+-CONFIG_MFD_SM501=m
+-CONFIG_MFD_SM501_GPIO=y
+-CONFIG_HTC_PASIC3=m
+-# CONFIG_MFD_TMIO is not set
+-
+-#
+-# Multimedia devices
+-#
+-
+-#
+-# Multimedia core support
+-#
+-CONFIG_VIDEO_DEV=m
+-CONFIG_VIDEO_V4L2_COMMON=m
+-CONFIG_VIDEO_ALLOW_V4L1=y
+-CONFIG_VIDEO_V4L1_COMPAT=y
+-CONFIG_DVB_CORE=m
+-CONFIG_VIDEO_MEDIA=m
+-
+-#
+-# Multimedia drivers
+-#
+-CONFIG_VIDEO_SAA7146=m
+-CONFIG_VIDEO_SAA7146_VV=m
+-CONFIG_MEDIA_ATTACH=y
+-CONFIG_MEDIA_TUNER=m
+-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+-CONFIG_MEDIA_TUNER_SIMPLE=m
+-CONFIG_MEDIA_TUNER_TDA8290=m
+-CONFIG_MEDIA_TUNER_TDA827X=m
+-CONFIG_MEDIA_TUNER_TDA18271=m
+-CONFIG_MEDIA_TUNER_TDA9887=m
+-CONFIG_MEDIA_TUNER_TEA5761=m
+-CONFIG_MEDIA_TUNER_TEA5767=m
+-CONFIG_MEDIA_TUNER_MT20XX=m
+-CONFIG_MEDIA_TUNER_MT2060=m
+-CONFIG_MEDIA_TUNER_MT2266=m
+-CONFIG_MEDIA_TUNER_MT2131=m
+-CONFIG_MEDIA_TUNER_QT1010=m
+-CONFIG_MEDIA_TUNER_XC2028=m
+-CONFIG_MEDIA_TUNER_XC5000=m
+-CONFIG_MEDIA_TUNER_MXL5005S=m
+-CONFIG_MEDIA_TUNER_MXL5007T=m
+-CONFIG_VIDEO_V4L2=m
+-CONFIG_VIDEO_V4L1=m
+-CONFIG_VIDEOBUF_GEN=m
+-CONFIG_VIDEOBUF_DMA_SG=m
+-CONFIG_VIDEOBUF_VMALLOC=m
+-CONFIG_VIDEOBUF_DMA_CONTIG=m
+-CONFIG_VIDEOBUF_DVB=m
+-CONFIG_VIDEO_BTCX=m
+-CONFIG_VIDEO_IR=m
+-CONFIG_VIDEO_TVEEPROM=m
+-CONFIG_VIDEO_TUNER=m
+-CONFIG_VIDEO_CAPTURE_DRIVERS=y
+-# CONFIG_VIDEO_ADV_DEBUG is not set
+-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+-CONFIG_VIDEO_IR_I2C=m
+-CONFIG_VIDEO_TVAUDIO=m
+-CONFIG_VIDEO_TDA7432=m
+-CONFIG_VIDEO_TDA9840=m
+-CONFIG_VIDEO_TDA9875=m
+-CONFIG_VIDEO_TEA6415C=m
+-CONFIG_VIDEO_TEA6420=m
+-CONFIG_VIDEO_MSP3400=m
+-CONFIG_VIDEO_CS5345=m
+-CONFIG_VIDEO_CS53L32A=m
+-CONFIG_VIDEO_M52790=m
+-CONFIG_VIDEO_WM8775=m
+-CONFIG_VIDEO_WM8739=m
+-CONFIG_VIDEO_VP27SMPX=m
+-CONFIG_VIDEO_BT819=m
+-CONFIG_VIDEO_BT856=m
+-CONFIG_VIDEO_KS0127=m
+-CONFIG_VIDEO_OV7670=m
+-CONFIG_VIDEO_SAA7110=m
+-CONFIG_VIDEO_SAA7111=m
+-CONFIG_VIDEO_SAA7114=m
+-CONFIG_VIDEO_SAA711X=m
+-CONFIG_VIDEO_SAA717X=m
+-CONFIG_VIDEO_TVP5150=m
+-CONFIG_VIDEO_VPX3220=m
+-CONFIG_VIDEO_CX25840=m
+-CONFIG_VIDEO_CX2341X=m
+-CONFIG_VIDEO_SAA7127=m
+-CONFIG_VIDEO_SAA7185=m
+-CONFIG_VIDEO_ADV7170=m
+-CONFIG_VIDEO_ADV7175=m
+-CONFIG_VIDEO_UPD64031A=m
+-CONFIG_VIDEO_UPD64083=m
+-CONFIG_VIDEO_VIVI=m
+-CONFIG_VIDEO_BT848=m
+-CONFIG_VIDEO_BT848_DVB=y
+-CONFIG_VIDEO_SAA6588=m
+-CONFIG_VIDEO_PMS=m
+-CONFIG_VIDEO_BWQCAM=m
+-CONFIG_VIDEO_CQCAM=m
+-CONFIG_VIDEO_W9966=m
+-CONFIG_VIDEO_CPIA=m
+-CONFIG_VIDEO_CPIA_PP=m
+-CONFIG_VIDEO_CPIA_USB=m
+-CONFIG_VIDEO_CPIA2=m
+-CONFIG_VIDEO_SAA5246A=m
+-CONFIG_VIDEO_SAA5249=m
+-# CONFIG_TUNER_3036 is not set
+-CONFIG_VIDEO_STRADIS=m
+-CONFIG_VIDEO_ZORAN=m
+-CONFIG_VIDEO_ZORAN_DC30=m
+-CONFIG_VIDEO_ZORAN_ZR36060=m
+-CONFIG_VIDEO_ZORAN_BUZ=m
+-CONFIG_VIDEO_ZORAN_DC10=m
+-CONFIG_VIDEO_ZORAN_LML33=m
+-CONFIG_VIDEO_ZORAN_LML33R10=m
+-CONFIG_VIDEO_ZORAN_AVS6EYES=m
+-CONFIG_VIDEO_MEYE=m
+-CONFIG_VIDEO_SAA7134=m
+-CONFIG_VIDEO_SAA7134_ALSA=m
+-CONFIG_VIDEO_SAA7134_DVB=m
+-CONFIG_VIDEO_MXB=m
+-# CONFIG_VIDEO_DPC is not set
+-CONFIG_VIDEO_HEXIUM_ORION=m
+-CONFIG_VIDEO_HEXIUM_GEMINI=m
+-CONFIG_VIDEO_CX88=m
+-CONFIG_VIDEO_CX88_ALSA=m
+-CONFIG_VIDEO_CX88_BLACKBIRD=m
+-CONFIG_VIDEO_CX88_DVB=m
+-CONFIG_VIDEO_CX88_VP3054=m
+-CONFIG_VIDEO_CX23885=m
+-CONFIG_VIDEO_AU0828=m
+-CONFIG_VIDEO_IVTV=m
+-CONFIG_VIDEO_FB_IVTV=m
+-CONFIG_VIDEO_CX18=m
+-CONFIG_VIDEO_CAFE_CCIC=m
+-CONFIG_V4L_USB_DRIVERS=y
+-CONFIG_USB_VIDEO_CLASS=m
+-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+-CONFIG_USB_GSPCA=m
+-CONFIG_VIDEO_PVRUSB2=m
+-CONFIG_VIDEO_PVRUSB2_SYSFS=y
+-CONFIG_VIDEO_PVRUSB2_DVB=y
+-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+-CONFIG_VIDEO_EM28XX=m
+-CONFIG_VIDEO_EM28XX_ALSA=m
+-CONFIG_VIDEO_EM28XX_DVB=m
+-CONFIG_VIDEO_USBVISION=m
+-CONFIG_VIDEO_USBVIDEO=m
+-CONFIG_USB_VICAM=m
+-CONFIG_USB_IBMCAM=m
+-CONFIG_USB_KONICAWC=m
+-CONFIG_USB_QUICKCAM_MESSENGER=m
+-CONFIG_USB_ET61X251=m
+-CONFIG_VIDEO_OVCAMCHIP=m
+-CONFIG_USB_W9968CF=m
+-CONFIG_USB_OV511=m
+-CONFIG_USB_SE401=m
+-CONFIG_USB_SN9C102=m
+-CONFIG_USB_STV680=m
+-CONFIG_USB_ZC0301=m
+-CONFIG_USB_PWC=m
+-# CONFIG_USB_PWC_DEBUG is not set
+-CONFIG_USB_ZR364XX=m
+-CONFIG_USB_STKWEBCAM=m
+-CONFIG_USB_S2255=m
+-CONFIG_SOC_CAMERA=m
+-CONFIG_SOC_CAMERA_MT9M001=m
+-CONFIG_MT9M001_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_MT9V022=m
+-CONFIG_MT9V022_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_PLATFORM=m
+-CONFIG_VIDEO_SH_MOBILE_CEU=m
+-CONFIG_RADIO_ADAPTERS=y
+-CONFIG_RADIO_CADET=m
+-CONFIG_RADIO_RTRACK=m
+-CONFIG_RADIO_RTRACK2=m
+-CONFIG_RADIO_AZTECH=m
+-CONFIG_RADIO_GEMTEK=m
+-CONFIG_RADIO_GEMTEK_PCI=m
+-CONFIG_RADIO_MAXIRADIO=m
+-CONFIG_RADIO_MAESTRO=m
+-CONFIG_RADIO_SF16FMI=m
+-CONFIG_RADIO_SF16FMR2=m
+-CONFIG_RADIO_TERRATEC=m
+-CONFIG_RADIO_TRUST=m
+-CONFIG_RADIO_TYPHOON=m
+-CONFIG_RADIO_TYPHOON_PROC_FS=y
+-CONFIG_RADIO_ZOLTRIX=m
+-CONFIG_USB_DSBR=m
+-CONFIG_USB_SI470X=m
+-CONFIG_DVB_CAPTURE_DRIVERS=y
+-
+-#
+-# Supported SAA7146 based PCI Adapters
+-#
+-CONFIG_TTPCI_EEPROM=m
+-CONFIG_DVB_AV7110=m
+-# CONFIG_DVB_AV7110_FIRMWARE is not set
+-CONFIG_DVB_AV7110_OSD=y
+-CONFIG_DVB_BUDGET_CORE=m
+-CONFIG_DVB_BUDGET=m
+-CONFIG_DVB_BUDGET_CI=m
+-CONFIG_DVB_BUDGET_AV=m
+-CONFIG_DVB_BUDGET_PATCH=m
+-
+-#
+-# Supported USB Adapters
+-#
+-CONFIG_DVB_USB=m
+-# CONFIG_DVB_USB_DEBUG is not set
+-CONFIG_DVB_USB_A800=m
+-CONFIG_DVB_USB_DIBUSB_MB=m
+-# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+-CONFIG_DVB_USB_DIBUSB_MC=m
+-CONFIG_DVB_USB_DIB0700=m
+-CONFIG_DVB_USB_UMT_010=m
+-# CONFIG_DVB_USB_CXUSB is not set
+-CONFIG_DVB_USB_M920X=m
+-CONFIG_DVB_USB_GL861=m
+-CONFIG_DVB_USB_AU6610=m
+-CONFIG_DVB_USB_DIGITV=m
+-CONFIG_DVB_USB_VP7045=m
+-CONFIG_DVB_USB_VP702X=m
+-CONFIG_DVB_USB_GP8PSK=m
+-CONFIG_DVB_USB_NOVA_T_USB2=m
+-CONFIG_DVB_USB_TTUSB2=m
+-CONFIG_DVB_USB_DTT200U=m
+-CONFIG_DVB_USB_OPERA1=m
+-CONFIG_DVB_USB_AF9005=m
+-CONFIG_DVB_USB_AF9005_REMOTE=m
+-CONFIG_DVB_USB_DW2102=m
+-CONFIG_DVB_USB_ANYSEE=m
+-CONFIG_DVB_TTUSB_BUDGET=m
+-CONFIG_DVB_TTUSB_DEC=m
+-CONFIG_DVB_CINERGYT2=m
+-# CONFIG_DVB_CINERGYT2_TUNING is not set
+-CONFIG_DVB_SIANO_SMS1XXX=m
+-CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
+-
+-#
+-# Supported FlexCopII (B2C2) Adapters
+-#
+-CONFIG_DVB_B2C2_FLEXCOP=m
+-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+-CONFIG_DVB_B2C2_FLEXCOP_USB=m
+-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+-
+-#
+-# Supported BT878 Adapters
+-#
+-CONFIG_DVB_BT8XX=m
+-
+-#
+-# Supported Pluto2 Adapters
+-#
+-CONFIG_DVB_PLUTO2=m
+-
+-#
+-# Supported DVB Frontends
+-#
+-
+-#
+-# Customise DVB Frontends
+-#
+-# CONFIG_DVB_FE_CUSTOMISE is not set
+-
+-#
+-# DVB-S (satellite) frontends
+-#
+-CONFIG_DVB_CX24110=m
+-CONFIG_DVB_CX24123=m
+-CONFIG_DVB_MT312=m
+-CONFIG_DVB_S5H1420=m
+-CONFIG_DVB_STV0299=m
+-CONFIG_DVB_TDA8083=m
+-CONFIG_DVB_TDA10086=m
+-CONFIG_DVB_VES1X93=m
+-CONFIG_DVB_TUNER_ITD1000=m
+-CONFIG_DVB_TDA826X=m
+-CONFIG_DVB_TUA6100=m
+-
+-#
+-# DVB-T (terrestrial) frontends
+-#
+-CONFIG_DVB_SP8870=m
+-CONFIG_DVB_SP887X=m
+-CONFIG_DVB_CX22700=m
+-CONFIG_DVB_CX22702=m
+-CONFIG_DVB_DRX397XD=m
+-CONFIG_DVB_L64781=m
+-CONFIG_DVB_TDA1004X=m
+-CONFIG_DVB_NXT6000=m
+-CONFIG_DVB_MT352=m
+-CONFIG_DVB_ZL10353=m
+-CONFIG_DVB_DIB3000MB=m
+-CONFIG_DVB_DIB3000MC=m
+-CONFIG_DVB_DIB7000M=m
+-CONFIG_DVB_DIB7000P=m
+-CONFIG_DVB_TDA10048=m
+-
+-#
+-# DVB-C (cable) frontends
+-#
+-CONFIG_DVB_VES1820=m
+-CONFIG_DVB_TDA10021=m
+-CONFIG_DVB_TDA10023=m
+-CONFIG_DVB_STV0297=m
+-
+-#
+-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+-#
+-CONFIG_DVB_NXT200X=m
+-CONFIG_DVB_OR51211=m
+-CONFIG_DVB_OR51132=m
+-CONFIG_DVB_BCM3510=m
+-CONFIG_DVB_LGDT330X=m
+-CONFIG_DVB_S5H1409=m
+-CONFIG_DVB_AU8522=m
+-CONFIG_DVB_S5H1411=m
+-
+-#
+-# Digital terrestrial only tuners/PLL
+-#
+-CONFIG_DVB_PLL=m
+-CONFIG_DVB_TUNER_DIB0070=m
+-
+-#
+-# SEC control devices for DVB-S
+-#
+-CONFIG_DVB_LNBP21=m
+-CONFIG_DVB_ISL6405=m
+-CONFIG_DVB_ISL6421=m
+-CONFIG_DAB=y
+-CONFIG_USB_DABUSB=m
+-
+-#
+-# Graphics support
+-#
+-CONFIG_AGP=m
+-CONFIG_AGP_ALI=m
+-CONFIG_AGP_ATI=m
+-CONFIG_AGP_AMD=m
+-CONFIG_AGP_AMD64=m
+-CONFIG_AGP_INTEL=m
+-CONFIG_AGP_NVIDIA=m
+-CONFIG_AGP_SIS=m
+-CONFIG_AGP_SWORKS=m
+-CONFIG_AGP_VIA=m
+-CONFIG_AGP_EFFICEON=m
+-CONFIG_DRM=m
+-CONFIG_DRM_TDFX=m
+-CONFIG_DRM_R128=m
+-CONFIG_DRM_RADEON=m
+-CONFIG_DRM_I810=m
+-CONFIG_DRM_I830=m
+-CONFIG_DRM_I915=m
+-CONFIG_DRM_MGA=m
+-CONFIG_DRM_SIS=m
+-CONFIG_DRM_VIA=m
+-CONFIG_DRM_VIA_CHROME9=m
+-CONFIG_DRM_SAVAGE=m
+-CONFIG_VGASTATE=m
+-CONFIG_VIDEO_OUTPUT_CONTROL=m
+-CONFIG_FB=y
+-CONFIG_FIRMWARE_EDID=y
+-CONFIG_FB_DDC=m
+-CONFIG_FB_CFB_FILLRECT=y
+-CONFIG_FB_CFB_COPYAREA=y
+-CONFIG_FB_CFB_IMAGEBLIT=y
+-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+-CONFIG_FB_SYS_FILLRECT=m
+-CONFIG_FB_SYS_COPYAREA=m
+-CONFIG_FB_SYS_IMAGEBLIT=m
+-# CONFIG_FB_FOREIGN_ENDIAN is not set
+-CONFIG_FB_SYS_FOPS=m
+-CONFIG_FB_DEFERRED_IO=y
+-CONFIG_FB_HECUBA=m
+-CONFIG_FB_SVGALIB=m
+-# CONFIG_FB_MACMODES is not set
+-CONFIG_FB_BACKLIGHT=y
+-CONFIG_FB_MODE_HELPERS=y
+-CONFIG_FB_TILEBLITTING=y
+-
+-#
+-# Frame buffer hardware drivers
+-#
+-CONFIG_FB_CIRRUS=m
+-CONFIG_FB_PM2=m
+-CONFIG_FB_PM2_FIFO_DISCONNECT=y
+-CONFIG_FB_CYBER2000=m
+-CONFIG_FB_ARC=m
+-# CONFIG_FB_ASILIANT is not set
+-CONFIG_FB_IMSTT=y
+-CONFIG_FB_VGA16=m
+-CONFIG_FB_UVESA=m
+-CONFIG_FB_VESA=y
+-CONFIG_FB_EFI=y
+-CONFIG_FB_N411=m
+-CONFIG_FB_HGA=m
+-CONFIG_FB_HGA_ACCEL=y
+-CONFIG_FB_S1D13XXX=m
+-CONFIG_FB_NVIDIA=m
+-CONFIG_FB_NVIDIA_I2C=y
+-# CONFIG_FB_NVIDIA_DEBUG is not set
+-CONFIG_FB_NVIDIA_BACKLIGHT=y
+-CONFIG_FB_RIVA=m
+-CONFIG_FB_RIVA_I2C=y
+-# CONFIG_FB_RIVA_DEBUG is not set
+-CONFIG_FB_RIVA_BACKLIGHT=y
+-CONFIG_FB_I810=m
+-CONFIG_FB_I810_GTF=y
+-CONFIG_FB_I810_I2C=y
+-CONFIG_FB_LE80578=m
+-CONFIG_FB_CARILLO_RANCH=m
+-CONFIG_FB_INTEL=m
+-# CONFIG_FB_INTEL_DEBUG is not set
+-CONFIG_FB_INTEL_I2C=y
+-CONFIG_FB_MATROX=m
+-CONFIG_FB_MATROX_MILLENIUM=y
+-CONFIG_FB_MATROX_MYSTIQUE=y
+-CONFIG_FB_MATROX_G=y
+-# CONFIG_FB_MATROX_I2C is not set
+-CONFIG_FB_MATROX_MULTIHEAD=y
+-CONFIG_FB_RADEON=m
+-CONFIG_FB_RADEON_I2C=y
+-CONFIG_FB_RADEON_BACKLIGHT=y
+-# CONFIG_FB_RADEON_DEBUG is not set
+-# CONFIG_FB_ATY128 is not set
+-CONFIG_FB_ATY=m
+-CONFIG_FB_ATY_CT=y
+-CONFIG_FB_ATY_GENERIC_LCD=y
+-CONFIG_FB_ATY_GX=y
+-CONFIG_FB_ATY_BACKLIGHT=y
+-CONFIG_FB_S3=m
+-CONFIG_FB_SAVAGE=m
+-CONFIG_FB_SAVAGE_I2C=y
+-CONFIG_FB_SAVAGE_ACCEL=y
+-CONFIG_FB_SIS=m
+-CONFIG_FB_SIS_300=y
+-CONFIG_FB_SIS_315=y
+-CONFIG_FB_NEOMAGIC=m
+-CONFIG_FB_KYRO=m
+-CONFIG_FB_3DFX=m
+-CONFIG_FB_3DFX_ACCEL=y
+-CONFIG_FB_VOODOO1=m
+-CONFIG_FB_VT8623=m
+-CONFIG_FB_CYBLA=m
+-CONFIG_FB_TRIDENT=m
+-CONFIG_FB_TRIDENT_ACCEL=y
+-CONFIG_FB_ARK=m
+-CONFIG_FB_PM3=m
+-CONFIG_FB_CARMINE=m
+-CONFIG_FB_CARMINE_DRAM_EVAL=y
+-# CONFIG_CARMINE_DRAM_CUSTOM is not set
+-CONFIG_FB_GEODE=y
+-CONFIG_FB_GEODE_LX=m
+-CONFIG_FB_GEODE_GX=m
+-CONFIG_FB_GEODE_GX1=m
+-CONFIG_FB_SM501=m
+-# CONFIG_FB_VIRTUAL is not set
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_LCD_CLASS_DEVICE=m
+-CONFIG_LCD_LTV350QV=m
+-CONFIG_LCD_ILI9320=m
+-CONFIG_LCD_VGG2432A4=m
+-CONFIG_LCD_PLATFORM=m
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+-CONFIG_BACKLIGHT_CORGI=m
+-CONFIG_BACKLIGHT_PROGEAR=m
+-CONFIG_BACKLIGHT_CARILLO_RANCH=m
+-CONFIG_BACKLIGHT_MBP_NVIDIA=m
+-
+-#
+-# Display device support
+-#
+-CONFIG_DISPLAY_SUPPORT=m
+-
+-#
+-# Display hardware drivers
+-#
+-
+-#
+-# Console display driver support
+-#
+-CONFIG_VGA_CONSOLE=y
+-CONFIG_VGACON_SOFT_SCROLLBACK=y
+-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+-CONFIG_VIDEO_SELECT=y
+-CONFIG_MDA_CONSOLE=m
+-CONFIG_DUMMY_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE=y
+-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+-# CONFIG_FONTS is not set
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+-# CONFIG_LOGO is not set
+-
+-#
+-# Bootsplash configuration
+-#
+-CONFIG_BOOTSPLASH=y
+-CONFIG_SOUND=m
+-CONFIG_SND=m
+-CONFIG_SND_TIMER=m
+-CONFIG_SND_PCM=m
+-CONFIG_SND_HWDEP=m
+-CONFIG_SND_RAWMIDI=m
+-CONFIG_SND_SEQUENCER=m
+-CONFIG_SND_SEQ_DUMMY=m
+-CONFIG_SND_OSSEMUL=y
+-CONFIG_SND_MIXER_OSS=m
+-CONFIG_SND_PCM_OSS=m
+-CONFIG_SND_PCM_OSS_PLUGINS=y
+-CONFIG_SND_SEQUENCER_OSS=y
+-CONFIG_SND_DYNAMIC_MINORS=y
+-CONFIG_SND_SUPPORT_OLD_API=y
+-CONFIG_SND_VERBOSE_PROCFS=y
+-CONFIG_SND_VERBOSE_PRINTK=y
+-CONFIG_SND_DEBUG=y
+-# CONFIG_SND_DEBUG_VERBOSE is not set
+-# CONFIG_SND_PCM_XRUN_DEBUG is not set
+-CONFIG_SND_VMASTER=y
+-CONFIG_SND_MPU401_UART=m
+-CONFIG_SND_OPL3_LIB=m
+-CONFIG_SND_OPL4_LIB=m
+-CONFIG_SND_VX_LIB=m
+-CONFIG_SND_AC97_CODEC=m
+-CONFIG_SND_DRIVERS=y
+-CONFIG_SND_DUMMY=m
+-CONFIG_SND_VIRMIDI=m
+-CONFIG_SND_MTPAV=m
+-CONFIG_SND_MTS64=m
+-CONFIG_SND_SERIAL_U16550=m
+-CONFIG_SND_MPU401=m
+-CONFIG_SND_PORTMAN2X4=m
+-CONFIG_SND_AC97_POWER_SAVE=y
+-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_AD1848_LIB=m
+-CONFIG_SND_CS4231_LIB=m
+-CONFIG_SND_SB_COMMON=m
+-CONFIG_SND_SB8_DSP=m
+-CONFIG_SND_SB16_DSP=m
+-CONFIG_SND_ISA=y
+-CONFIG_SND_ADLIB=m
+-CONFIG_SND_AD1816A=m
+-CONFIG_SND_AD1848=m
+-CONFIG_SND_ALS100=m
+-CONFIG_SND_AZT2320=m
+-CONFIG_SND_CMI8330=m
+-CONFIG_SND_CS4231=m
+-CONFIG_SND_CS4232=m
+-CONFIG_SND_CS4236=m
+-CONFIG_SND_DT019X=m
+-CONFIG_SND_ES968=m
+-CONFIG_SND_ES1688=m
+-CONFIG_SND_ES18XX=m
+-CONFIG_SND_SC6000=m
+-CONFIG_SND_GUSCLASSIC=m
+-CONFIG_SND_GUSEXTREME=m
+-CONFIG_SND_GUSMAX=m
+-CONFIG_SND_INTERWAVE=m
+-CONFIG_SND_INTERWAVE_STB=m
+-CONFIG_SND_OPL3SA2=m
+-CONFIG_SND_OPTI92X_AD1848=m
+-CONFIG_SND_OPTI92X_CS4231=m
+-CONFIG_SND_OPTI93X=m
+-CONFIG_SND_MIRO=m
+-CONFIG_SND_SB8=m
+-CONFIG_SND_SB16=m
+-CONFIG_SND_SBAWE=m
+-CONFIG_SND_SB16_CSP=y
+-CONFIG_SND_SGALAXY=m
+-CONFIG_SND_SSCAPE=m
+-CONFIG_SND_WAVEFRONT=m
+-# CONFIG_SND_WAVEFRONT_FIRMWARE_IN_KERNEL is not set
+-CONFIG_SND_PCI=y
+-CONFIG_SND_AD1889=m
+-CONFIG_SND_ALS300=m
+-CONFIG_SND_ALS4000=m
+-CONFIG_SND_ALI5451=m
+-CONFIG_SND_ATIIXP=m
+-CONFIG_SND_ATIIXP_MODEM=m
+-CONFIG_SND_AU8810=m
+-CONFIG_SND_AU8820=m
+-CONFIG_SND_AU8830=m
+-CONFIG_SND_AW2=m
+-CONFIG_SND_AZT3328=m
+-CONFIG_SND_BT87X=m
+-# CONFIG_SND_BT87X_OVERCLOCK is not set
+-CONFIG_SND_CA0106=m
+-CONFIG_SND_CMIPCI=m
+-CONFIG_SND_OXYGEN_LIB=m
+-CONFIG_SND_OXYGEN=m
+-CONFIG_SND_CS4281=m
+-CONFIG_SND_CS46XX=m
+-CONFIG_SND_CS46XX_NEW_DSP=y
+-CONFIG_SND_CS5530=m
+-CONFIG_SND_CS5535AUDIO=m
+-CONFIG_SND_DARLA20=m
+-CONFIG_SND_GINA20=m
+-CONFIG_SND_LAYLA20=m
+-CONFIG_SND_DARLA24=m
+-CONFIG_SND_GINA24=m
+-CONFIG_SND_LAYLA24=m
+-CONFIG_SND_MONA=m
+-CONFIG_SND_MIA=m
+-CONFIG_SND_ECHO3G=m
+-CONFIG_SND_INDIGO=m
+-CONFIG_SND_INDIGOIO=m
+-CONFIG_SND_INDIGODJ=m
+-CONFIG_SND_EMU10K1=m
+-CONFIG_SND_EMU10K1X=m
+-CONFIG_SND_ENS1370=m
+-CONFIG_SND_ENS1371=m
+-CONFIG_SND_ES1938=m
+-CONFIG_SND_ES1968=m
+-CONFIG_SND_FM801=m
+-CONFIG_SND_FM801_TEA575X_BOOL=y
+-CONFIG_SND_FM801_TEA575X=m
+-CONFIG_SND_HDA_INTEL=m
+-CONFIG_SND_HDA_HWDEP=y
+-CONFIG_SND_HDA_INPUT_BEEP=y
+-CONFIG_SND_HDA_CODEC_REALTEK=y
+-CONFIG_SND_HDA_CODEC_ANALOG=y
+-CONFIG_SND_HDA_CODEC_SIGMATEL=y
+-CONFIG_SND_HDA_CODEC_VIA=y
+-CONFIG_SND_HDA_CODEC_ATIHDMI=y
+-CONFIG_SND_HDA_CODEC_NVHDMI=y
+-CONFIG_SND_HDA_CODEC_CONEXANT=y
+-CONFIG_SND_HDA_CODEC_CMEDIA=y
+-CONFIG_SND_HDA_CODEC_SI3054=y
+-CONFIG_SND_HDA_GENERIC=y
+-CONFIG_SND_HDA_POWER_SAVE=y
+-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_HDSP=m
+-CONFIG_SND_HDSPM=m
+-CONFIG_SND_HIFIER=m
+-CONFIG_SND_ICE1712=m
+-CONFIG_SND_ICE1724=m
+-CONFIG_SND_INTEL8X0=m
+-CONFIG_SND_INTEL8X0M=m
+-CONFIG_SND_KORG1212=m
+-CONFIG_SND_MAESTRO3=m
+-CONFIG_SND_MIXART=m
+-CONFIG_SND_NM256=m
+-CONFIG_SND_PCXHR=m
+-CONFIG_SND_RIPTIDE=m
+-CONFIG_SND_RME32=m
+-CONFIG_SND_RME96=m
+-CONFIG_SND_RME9652=m
+-CONFIG_SND_SIS7019=m
+-CONFIG_SND_SONICVIBES=m
+-CONFIG_SND_TRIDENT=m
+-CONFIG_SND_VIA82XX=m
+-CONFIG_SND_VIA82XX_MODEM=m
+-CONFIG_SND_VIRTUOSO=m
+-CONFIG_SND_VX222=m
+-CONFIG_SND_YMFPCI=m
+-CONFIG_SND_SPI=y
+-CONFIG_SND_USB=y
+-CONFIG_SND_USB_AUDIO=m
+-CONFIG_SND_USB_USX2Y=m
+-CONFIG_SND_USB_CAIAQ=m
+-CONFIG_SND_USB_CAIAQ_INPUT=y
+-CONFIG_SND_PCMCIA=y
+-CONFIG_SND_VXPOCKET=m
+-CONFIG_SND_PDAUDIOCF=m
+-# CONFIG_SND_SOC is not set
+-CONFIG_SOUND_PRIME=m
+-# CONFIG_SOUND_MSNDCLAS is not set
+-# CONFIG_SOUND_MSNDPIN is not set
+-CONFIG_SOUND_OSS=m
+-CONFIG_SOUND_TRACEINIT=y
+-CONFIG_SOUND_DMAP=y
+-CONFIG_SOUND_SSCAPE=m
+-CONFIG_SOUND_VMIDI=m
+-CONFIG_SOUND_TRIX=m
+-CONFIG_SOUND_MSS=m
+-CONFIG_SOUND_MPU401=m
+-CONFIG_SOUND_PAS=m
+-CONFIG_SOUND_PSS=m
+-CONFIG_PSS_MIXER=y
+-# CONFIG_PSS_HAVE_BOOT is not set
+-CONFIG_SOUND_SB=m
+-CONFIG_SOUND_YM3812=m
+-CONFIG_SOUND_UART6850=m
+-CONFIG_SOUND_AEDSP16=m
+-CONFIG_SC6600=y
+-CONFIG_SC6600_JOY=y
+-CONFIG_SC6600_CDROM=4
+-CONFIG_SC6600_CDROMBASE=0x0
+-# CONFIG_AEDSP16_MSS is not set
+-# CONFIG_AEDSP16_SBPRO is not set
+-CONFIG_SOUND_KAHLUA=m
+-CONFIG_AC97_BUS=m
+-CONFIG_HID_SUPPORT=y
+-CONFIG_HID=m
+-# CONFIG_HID_DEBUG is not set
+-CONFIG_HIDRAW=y
+-
+-#
+-# USB Input Devices
+-#
+-CONFIG_USB_HID=m
+-CONFIG_USB_HIDINPUT_POWERBOOK=y
+-CONFIG_HID_FF=y
+-CONFIG_HID_PID=y
+-CONFIG_LOGITECH_FF=y
+-# CONFIG_LOGIRUMBLEPAD2_FF is not set
+-CONFIG_PANTHERLORD_FF=y
+-CONFIG_THRUSTMASTER_FF=y
+-CONFIG_ZEROPLUS_FF=y
+-CONFIG_USB_HIDDEV=y
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
+-CONFIG_USB_SUPPORT=y
+-CONFIG_USB_ARCH_HAS_HCD=y
+-CONFIG_USB_ARCH_HAS_OHCI=y
+-CONFIG_USB_ARCH_HAS_EHCI=y
+-CONFIG_USB=m
+-# CONFIG_USB_DEBUG is not set
+-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+-
+-#
+-# Miscellaneous USB options
+-#
+-CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_DEVICE_CLASS is not set
+-# CONFIG_USB_DYNAMIC_MINORS is not set
+-CONFIG_USB_SUSPEND=y
+-# CONFIG_USB_OTG is not set
+-CONFIG_USB_MON=y
+-
+-#
+-# USB Host Controller Drivers
+-#
+-CONFIG_USB_C67X00_HCD=m
+-CONFIG_USB_EHCI_HCD=m
+-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+-CONFIG_USB_EHCI_TT_NEWSCHED=y
+-CONFIG_USB_ISP116X_HCD=m
+-CONFIG_USB_ISP1760_HCD=m
+-CONFIG_USB_OHCI_HCD=m
+-# CONFIG_USB_OHCI_HCD_SSB is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+-CONFIG_USB_UHCI_HCD=m
+-# CONFIG_USB_U132_HCD is not set
+-CONFIG_USB_SL811_HCD=m
+-CONFIG_USB_SL811_CS=m
+-CONFIG_USB_R8A66597_HCD=m
+-
+-#
+-# Enable Host or Gadget support to see Inventra options
+-#
+-
+-#
+-# USB Device Class drivers
+-#
+-CONFIG_USB_ACM=m
+-CONFIG_USB_PRINTER=m
+-CONFIG_USB_WDM=m
+-
+-#
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+-#
+-
+-#
+-# may also be needed; see USB_STORAGE Help for more information
+-#
+-CONFIG_USB_STORAGE=m
+-# CONFIG_USB_STORAGE_DEBUG is not set
+-CONFIG_USB_STORAGE_DATAFAB=y
+-CONFIG_USB_STORAGE_FREECOM=y
+-CONFIG_USB_STORAGE_ISD200=y
+-CONFIG_USB_STORAGE_DPCM=y
+-CONFIG_USB_STORAGE_USBAT=y
+-CONFIG_USB_STORAGE_SDDR09=y
+-CONFIG_USB_STORAGE_SDDR55=y
+-CONFIG_USB_STORAGE_JUMPSHOT=y
+-CONFIG_USB_STORAGE_ALAUDA=y
+-CONFIG_USB_STORAGE_ONETOUCH=y
+-CONFIG_USB_STORAGE_KARMA=y
+-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+-# CONFIG_USB_LIBUSUAL is not set
+-
+-#
+-# USB Imaging devices
+-#
+-CONFIG_USB_MDC800=m
+-CONFIG_USB_MICROTEK=m
+-
+-#
+-# USB port drivers
+-#
+-CONFIG_USB_USS720=m
+-CONFIG_USB_SERIAL=m
+-CONFIG_USB_EZUSB=y
+-CONFIG_USB_SERIAL_GENERIC=y
+-CONFIG_USB_SERIAL_AIRCABLE=m
+-CONFIG_USB_SERIAL_ARK3116=m
+-CONFIG_USB_SERIAL_BELKIN=m
+-CONFIG_USB_SERIAL_CH341=m
+-CONFIG_USB_SERIAL_WHITEHEAT=m
+-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+-CONFIG_USB_SERIAL_CP2101=m
+-CONFIG_USB_SERIAL_CYPRESS_M8=m
+-CONFIG_USB_SERIAL_EMPEG=m
+-CONFIG_USB_SERIAL_FTDI_SIO=m
+-CONFIG_USB_SERIAL_FUNSOFT=m
+-CONFIG_USB_SERIAL_VISOR=m
+-CONFIG_USB_SERIAL_IPAQ=m
+-CONFIG_USB_SERIAL_IR=m
+-CONFIG_USB_SERIAL_EDGEPORT=m
+-CONFIG_USB_SERIAL_EDGEPORT_TI=m
+-CONFIG_USB_SERIAL_GARMIN=m
+-CONFIG_USB_SERIAL_IPW=m
+-CONFIG_USB_SERIAL_IUU=m
+-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+-CONFIG_USB_SERIAL_KEYSPAN=m
+-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+-CONFIG_USB_SERIAL_KLSI=m
+-CONFIG_USB_SERIAL_KOBIL_SCT=m
+-CONFIG_USB_SERIAL_MCT_U232=m
+-CONFIG_USB_SERIAL_MOS7720=m
+-CONFIG_USB_SERIAL_MOS7840=m
+-CONFIG_USB_SERIAL_MOTOROLA=m
+-CONFIG_USB_SERIAL_NAVMAN=m
+-CONFIG_USB_SERIAL_PL2303=m
+-CONFIG_USB_SERIAL_OTI6858=m
+-CONFIG_USB_SERIAL_QUALCOMM=m
+-CONFIG_USB_SERIAL_SPCP8X5=m
+-CONFIG_USB_SERIAL_HP4X=m
+-CONFIG_USB_SERIAL_SAFE=m
+-CONFIG_USB_SERIAL_SAFE_PADDED=y
+-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+-CONFIG_USB_SERIAL_TI=m
+-CONFIG_USB_SERIAL_CYBERJACK=m
+-CONFIG_USB_SERIAL_XIRCOM=m
+-CONFIG_USB_SERIAL_OPTION=m
+-CONFIG_USB_SERIAL_OMNINET=m
+-CONFIG_USB_SERIAL_DEBUG=m
+-
+-#
+-# USB Miscellaneous drivers
+-#
+-CONFIG_USB_EMI62=m
+-CONFIG_USB_EMI26=m
+-CONFIG_USB_ADUTUX=m
+-CONFIG_USB_RIO500=m
+-CONFIG_USB_LEGOTOWER=m
+-CONFIG_USB_LCD=m
+-CONFIG_USB_BERRY_CHARGE=m
+-CONFIG_USB_LED=m
+-CONFIG_USB_CYPRESS_CY7C63=m
+-CONFIG_USB_CYTHERM=m
+-CONFIG_USB_PHIDGET=m
+-CONFIG_USB_PHIDGETKIT=m
+-CONFIG_USB_PHIDGETMOTORCONTROL=m
+-CONFIG_USB_PHIDGETSERVO=m
+-CONFIG_USB_IDMOUSE=m
+-CONFIG_USB_FTDI_ELAN=m
+-CONFIG_USB_APPLEDISPLAY=m
+-CONFIG_USB_SISUSBVGA=m
+-CONFIG_USB_SISUSBVGA_CON=y
+-CONFIG_USB_LD=m
+-CONFIG_USB_TRANCEVIBRATOR=m
+-CONFIG_USB_IOWARRIOR=m
+-# CONFIG_USB_TEST is not set
+-CONFIG_USB_ISIGHTFW=m
+-CONFIG_USB_ATM=m
+-CONFIG_USB_SPEEDTOUCH=m
+-CONFIG_USB_CXACRU=m
+-CONFIG_USB_UEAGLEATM=m
+-CONFIG_USB_XUSBATM=m
+-# CONFIG_USB_GADGET is not set
+-CONFIG_MMC=m
+-# CONFIG_MMC_DEBUG is not set
+-# CONFIG_MMC_UNSAFE_RESUME is not set
+-
+-#
+-# MMC/SD Card Drivers
+-#
+-CONFIG_MMC_BLOCK=m
+-CONFIG_MMC_BLOCK_BOUNCE=y
+-CONFIG_SDIO_UART=m
+-CONFIG_MMC_TEST=m
+-
+-#
+-# MMC/SD Host Controller Drivers
+-#
+-CONFIG_MMC_SDHCI=m
+-CONFIG_MMC_SDHCI_PCI=m
+-CONFIG_MMC_RICOH_MMC=m
+-CONFIG_MMC_WBSD=m
+-CONFIG_MMC_TIFM_SD=m
+-CONFIG_MMC_SDRICOH_CS=m
+-CONFIG_MEMSTICK=m
+-# CONFIG_MEMSTICK_DEBUG is not set
+-
+-#
+-# MemoryStick drivers
+-#
+-# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+-CONFIG_MSPRO_BLOCK=m
+-
+-#
+-# MemoryStick Host Controller Drivers
+-#
+-CONFIG_MEMSTICK_TIFM_MS=m
+-CONFIG_MEMSTICK_JMICRON_38X=m
+-CONFIG_NEW_LEDS=y
+-CONFIG_LEDS_CLASS=m
+-
+-#
+-# LED drivers
+-#
+-CONFIG_LEDS_NET48XX=m
+-CONFIG_LEDS_WRAP=m
+-CONFIG_LEDS_PCA9532=m
+-CONFIG_LEDS_GPIO=m
+-CONFIG_LEDS_CLEVO_MAIL=m
+-CONFIG_LEDS_PCA955X=m
+-
+-#
+-# LED Triggers
+-#
+-CONFIG_LEDS_TRIGGERS=y
+-CONFIG_LEDS_TRIGGER_TIMER=m
+-CONFIG_LEDS_TRIGGER_IDE_DISK=y
+-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+-# CONFIG_ACCESSIBILITY is not set
+-CONFIG_INFINIBAND=m
+-CONFIG_INFINIBAND_USER_MAD=m
+-CONFIG_INFINIBAND_USER_ACCESS=m
+-CONFIG_INFINIBAND_USER_MEM=y
+-CONFIG_INFINIBAND_ADDR_TRANS=y
+-CONFIG_INFINIBAND_MTHCA=m
+-CONFIG_INFINIBAND_MTHCA_DEBUG=y
+-CONFIG_INFINIBAND_AMSO1100=m
+-# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+-CONFIG_INFINIBAND_CXGB3=m
+-# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
+-CONFIG_MLX4_INFINIBAND=m
+-CONFIG_INFINIBAND_NES=m
+-# CONFIG_INFINIBAND_NES_DEBUG is not set
+-CONFIG_INFINIBAND_IPOIB=m
+-CONFIG_INFINIBAND_IPOIB_CM=y
+-CONFIG_INFINIBAND_IPOIB_DEBUG=y
+-# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
+-CONFIG_INFINIBAND_SRP=m
+-CONFIG_INFINIBAND_ISER=m
+-CONFIG_EDAC=y
+-
+-#
+-# Reporting subsystems
+-#
+-# CONFIG_EDAC_DEBUG is not set
+-CONFIG_EDAC_MM_EDAC=m
+-CONFIG_EDAC_AMD76X=m
+-CONFIG_EDAC_E7XXX=m
+-CONFIG_EDAC_E752X=m
+-CONFIG_EDAC_I82875P=m
+-CONFIG_EDAC_I82975X=m
+-CONFIG_EDAC_I3000=m
+-CONFIG_EDAC_I82860=m
+-CONFIG_EDAC_R82600=m
+-CONFIG_EDAC_I5000=m
+-CONFIG_EDAC_I5100=m
+-CONFIG_RTC_LIB=m
+-CONFIG_RTC_CLASS=m
+-
+-#
+-# RTC interfaces
+-#
+-CONFIG_RTC_INTF_SYSFS=y
+-CONFIG_RTC_INTF_PROC=y
+-CONFIG_RTC_INTF_DEV=y
+-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+-CONFIG_RTC_DRV_TEST=m
+-
+-#
+-# I2C RTC drivers
+-#
+-CONFIG_RTC_DRV_DS1307=m
+-CONFIG_RTC_DRV_DS1374=m
+-CONFIG_RTC_DRV_DS1672=m
+-CONFIG_RTC_DRV_MAX6900=m
+-CONFIG_RTC_DRV_RS5C372=m
+-CONFIG_RTC_DRV_ISL1208=m
+-CONFIG_RTC_DRV_X1205=m
+-CONFIG_RTC_DRV_PCF8563=m
+-CONFIG_RTC_DRV_PCF8583=m
+-CONFIG_RTC_DRV_M41T80=m
+-CONFIG_RTC_DRV_M41T80_WDT=y
+-CONFIG_RTC_DRV_S35390A=m
+-CONFIG_RTC_DRV_FM3130=m
+-
+-#
+-# SPI RTC drivers
+-#
+-CONFIG_RTC_DRV_M41T94=m
+-CONFIG_RTC_DRV_DS1305=m
+-CONFIG_RTC_DRV_MAX6902=m
+-CONFIG_RTC_DRV_R9701=m
+-CONFIG_RTC_DRV_RS5C348=m
+-
+-#
+-# Platform RTC drivers
+-#
+-CONFIG_RTC_DRV_CMOS=m
+-CONFIG_RTC_DRV_DS1511=m
+-CONFIG_RTC_DRV_DS1553=m
+-CONFIG_RTC_DRV_DS1742=m
+-CONFIG_RTC_DRV_STK17TA8=m
+-CONFIG_RTC_DRV_M48T86=m
+-CONFIG_RTC_DRV_M48T59=m
+-CONFIG_RTC_DRV_V3020=m
+-
+-#
+-# on-CPU RTC drivers
+-#
+-CONFIG_DMADEVICES=y
+-
+-#
+-# DMA Devices
+-#
+-CONFIG_INTEL_IOATDMA=m
+-CONFIG_DMA_ENGINE=y
+-
+-#
+-# DMA Clients
+-#
+-CONFIG_NET_DMA=y
+-CONFIG_DMATEST=m
+-CONFIG_DCA=m
+-CONFIG_AUXDISPLAY=y
+-CONFIG_KS0108=m
+-CONFIG_KS0108_PORT=0x378
+-CONFIG_KS0108_DELAY=2
+-CONFIG_CFAG12864B=m
+-CONFIG_CFAG12864B_RATE=20
+-CONFIG_UIO=m
+-CONFIG_UIO_CIF=m
+-CONFIG_UIO_PDRV=m
+-CONFIG_UIO_PDRV_GENIRQ=m
+-CONFIG_UIO_SMX=m
+-CONFIG_STAGING=y
+-CONFIG_ET131X=m
+-# CONFIG_ET131X_DEBUG is not set
+-CONFIG_SLICOSS=m
+-CONFIG_SXG=m
+-CONFIG_ME4000=m
+-CONFIG_VIDEO_GO7007=m
+-CONFIG_VIDEO_GO7007_USB=m
+-CONFIG_USB_IP_COMMON=m
+-CONFIG_USB_IP_VHCI_HCD=m
+-CONFIG_USB_IP_HOST=m
+-CONFIG_W35UND=m
+-CONFIG_PRISM2_USB=m
+-CONFIG_ECHO=m
+-CONFIG_USB_ATMEL=m
+-CONFIG_AGNX=m
+-CONFIG_OTUS=m
+-CONFIG_RT2860=m
+-CONFIG_RT2870=m
+-CONFIG_RT3070=m
+-CONFIG_BENET=m
+-CONFIG_RTL8187SE=m
+-CONFIG_DRM_PSB=m
+-
+-#
+-# Firmware Drivers
+-#
+-CONFIG_EDD=m
+-# CONFIG_EDD_OFF is not set
+-CONFIG_FIRMWARE_MEMMAP=y
+-CONFIG_DELL_RBU=m
+-CONFIG_DCDBAS=m
+-CONFIG_DMIID=y
+-CONFIG_ISCSI_IBFT_FIND=y
+-CONFIG_ISCSI_IBFT=m
+-
+-#
+-# File systems
+-#
+-CONFIG_EXT2_FS=m
+-CONFIG_EXT2_FS_XATTR=y
+-CONFIG_EXT2_FS_POSIX_ACL=y
+-CONFIG_EXT2_FS_SECURITY=y
+-# CONFIG_EXT2_FS_XIP is not set
+-CONFIG_EXT3_FS=m
+-CONFIG_EXT3_FS_XATTR=y
+-CONFIG_EXT3_FS_POSIX_ACL=y
+-CONFIG_EXT3_FS_NFS4ACL=y
+-CONFIG_EXT3_FS_SECURITY=y
+-CONFIG_EXT4DEV_FS=m
+-CONFIG_EXT4DEV_FS_XATTR=y
+-CONFIG_EXT4DEV_FS_POSIX_ACL=y
+-CONFIG_EXT4DEV_FS_SECURITY=y
+-CONFIG_JBD=m
+-CONFIG_JBD_DEBUG=y
+-CONFIG_JBD2=m
+-CONFIG_JBD2_DEBUG=y
+-CONFIG_FS_MBCACHE=m
+-CONFIG_REISERFS_FS=m
+-# CONFIG_REISERFS_CHECK is not set
+-# CONFIG_REISERFS_PROC_INFO is not set
+-CONFIG_REISERFS_FS_XATTR=y
+-CONFIG_REISERFS_FS_POSIX_ACL=y
+-CONFIG_REISERFS_FS_SECURITY=y
+-CONFIG_JFS_FS=m
+-CONFIG_JFS_POSIX_ACL=y
+-CONFIG_JFS_SECURITY=y
+-# CONFIG_JFS_DEBUG is not set
+-CONFIG_JFS_STATISTICS=y
+-CONFIG_FS_POSIX_ACL=y
+-CONFIG_FS_NFS4ACL=y
+-CONFIG_XFS_FS=m
+-CONFIG_XFS_QUOTA=y
+-CONFIG_XFS_DMAPI=m
+-CONFIG_XFS_POSIX_ACL=y
+-CONFIG_XFS_RT=y
+-# CONFIG_XFS_DEBUG is not set
+-CONFIG_GFS2_FS=m
+-CONFIG_GFS2_FS_LOCKING_DLM=m
+-CONFIG_OCFS2_FS=m
+-CONFIG_OCFS2_FS_O2CB=m
+-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+-CONFIG_OCFS2_FS_STATS=y
+-# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+-# CONFIG_OCFS2_DEBUG_FS is not set
+-# CONFIG_OCFS2_COMPAT_JBD is not set
+-CONFIG_DNOTIFY=y
+-CONFIG_INOTIFY=y
+-CONFIG_INOTIFY_USER=y
+-CONFIG_DMAPI=m
+-# CONFIG_DMAPI_DEBUG is not set
+-CONFIG_QUOTA=y
+-CONFIG_QUOTA_NETLINK_INTERFACE=y
+-CONFIG_PRINT_QUOTA_WARNING=y
+-CONFIG_QUOTA_TREE=m
+-CONFIG_QFMT_V1=m
+-CONFIG_QFMT_V2=m
+-CONFIG_QUOTACTL=y
+-CONFIG_AUTOFS_FS=m
+-CONFIG_AUTOFS4_FS=m
+-CONFIG_FUSE_FS=m
+-CONFIG_GENERIC_ACL=y
+-
+-#
+-# CD-ROM/DVD Filesystems
+-#
+-CONFIG_ISO9660_FS=y
+-CONFIG_JOLIET=y
+-CONFIG_ZISOFS=y
+-CONFIG_UDF_FS=m
+-CONFIG_UDF_NLS=y
+-
+-#
+-# DOS/FAT/NT Filesystems
+-#
+-CONFIG_FAT_FS=m
+-CONFIG_MSDOS_FS=m
+-CONFIG_VFAT_FS=m
+-CONFIG_FAT_DEFAULT_CODEPAGE=437
+-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+-CONFIG_NTFS_FS=m
+-# CONFIG_NTFS_DEBUG is not set
+-CONFIG_NTFS_RW=y
+-
+-#
+-# Pseudo filesystems
+-#
+-CONFIG_PROC_FS=y
+-CONFIG_PROC_KCORE=y
+-CONFIG_PROC_VMCORE=y
+-CONFIG_PROC_SYSCTL=y
+-CONFIG_SYSFS=y
+-CONFIG_TMPFS=y
+-CONFIG_TMPFS_POSIX_ACL=y
+-CONFIG_HUGETLBFS=y
+-CONFIG_HUGETLB_PAGE=y
+-CONFIG_CONFIGFS_FS=m
+-
+-#
+-# Miscellaneous filesystems
+-#
+-CONFIG_ADFS_FS=m
+-# CONFIG_ADFS_FS_RW is not set
+-CONFIG_AFFS_FS=m
+-CONFIG_ECRYPT_FS=m
+-CONFIG_HFS_FS=m
+-CONFIG_HFSPLUS_FS=m
+-CONFIG_BEFS_FS=m
+-# CONFIG_BEFS_DEBUG is not set
+-CONFIG_BFS_FS=m
+-CONFIG_EFS_FS=m
+-CONFIG_JFFS2_FS=m
+-CONFIG_JFFS2_FS_DEBUG=0
+-CONFIG_JFFS2_FS_WRITEBUFFER=y
+-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+-CONFIG_JFFS2_SUMMARY=y
+-CONFIG_JFFS2_FS_XATTR=y
+-CONFIG_JFFS2_FS_POSIX_ACL=y
+-CONFIG_JFFS2_FS_SECURITY=y
+-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+-CONFIG_JFFS2_ZLIB=y
+-# CONFIG_JFFS2_LZO is not set
+-CONFIG_JFFS2_RTIME=y
+-# CONFIG_JFFS2_RUBIN is not set
+-# CONFIG_JFFS2_CMODE_NONE is not set
+-CONFIG_JFFS2_CMODE_PRIORITY=y
+-# CONFIG_JFFS2_CMODE_SIZE is not set
+-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+-CONFIG_UBIFS_FS=m
+-CONFIG_UBIFS_FS_XATTR=y
+-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+-CONFIG_UBIFS_FS_LZO=y
+-CONFIG_UBIFS_FS_ZLIB=y
+-# CONFIG_UBIFS_FS_DEBUG is not set
+-CONFIG_CRAMFS=m
+-CONFIG_SQUASHFS=m
+-# CONFIG_SQUASHFS_EMBEDDED is not set
+-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+-CONFIG_VXFS_FS=m
+-CONFIG_MINIX_FS=y
+-CONFIG_OMFS_FS=m
+-CONFIG_HPFS_FS=m
+-CONFIG_QNX4FS_FS=m
+-CONFIG_ROMFS_FS=m
+-CONFIG_SYSV_FS=m
+-CONFIG_UFS_FS=m
+-CONFIG_UFS_FS_WRITE=y
+-# CONFIG_UFS_DEBUG is not set
+-CONFIG_NETWORK_FILESYSTEMS=y
+-CONFIG_NFS_FS=m
+-CONFIG_NFS_V3=y
+-CONFIG_NFS_V3_ACL=y
+-CONFIG_NFS_V4=y
+-CONFIG_NFS_SWAP=y
+-CONFIG_NFSD=m
+-CONFIG_NFSD_V2_ACL=y
+-CONFIG_NFSD_V3=y
+-CONFIG_NFSD_V3_ACL=y
+-CONFIG_NFSD_V4=y
+-CONFIG_LOCKD=m
+-CONFIG_LOCKD_V4=y
+-CONFIG_EXPORTFS=m
+-CONFIG_NFS_ACL_SUPPORT=m
+-CONFIG_NFS_COMMON=y
+-CONFIG_SUNRPC=m
+-CONFIG_SUNRPC_GSS=m
+-CONFIG_SUNRPC_XPRT_RDMA=m
+-CONFIG_SUNRPC_SWAP=y
+-CONFIG_RPCSEC_GSS_KRB5=m
+-CONFIG_RPCSEC_GSS_SPKM3=m
+-# CONFIG_SMB_FS is not set
+-CONFIG_CIFS=m
+-CONFIG_CIFS_STATS=y
+-CONFIG_CIFS_STATS2=y
+-CONFIG_CIFS_WEAK_PW_HASH=y
+-CONFIG_CIFS_UPCALL=y
+-CONFIG_CIFS_XATTR=y
+-CONFIG_CIFS_POSIX=y
+-# CONFIG_CIFS_DEBUG2 is not set
+-CONFIG_CIFS_EXPERIMENTAL=y
+-CONFIG_CIFS_DFS_UPCALL=y
+-CONFIG_NCP_FS=m
+-CONFIG_NCPFS_PACKET_SIGNING=y
+-CONFIG_NCPFS_IOCTL_LOCKING=y
+-CONFIG_NCPFS_STRONG=y
+-CONFIG_NCPFS_NFS_NS=y
+-CONFIG_NCPFS_OS2_NS=y
+-CONFIG_NCPFS_SMALLDOS=y
+-CONFIG_NCPFS_NLS=y
+-CONFIG_NCPFS_EXTRAS=y
+-CONFIG_CODA_FS=m
+-CONFIG_AFS_FS=m
+-# CONFIG_AFS_DEBUG is not set
+-CONFIG_9P_FS=m
+-CONFIG_NOVFS=m
+-
+-#
+-# Partition Types
+-#
+-CONFIG_PARTITION_ADVANCED=y
+-# CONFIG_ACORN_PARTITION is not set
+-CONFIG_OSF_PARTITION=y
+-# CONFIG_AMIGA_PARTITION is not set
+-CONFIG_ATARI_PARTITION=y
+-CONFIG_MAC_PARTITION=y
+-CONFIG_MSDOS_PARTITION=y
+-CONFIG_BSD_DISKLABEL=y
+-# CONFIG_MINIX_SUBPARTITION is not set
+-CONFIG_SOLARIS_X86_PARTITION=y
+-CONFIG_UNIXWARE_DISKLABEL=y
+-CONFIG_LDM_PARTITION=y
+-# CONFIG_LDM_DEBUG is not set
+-CONFIG_SGI_PARTITION=y
+-CONFIG_ULTRIX_PARTITION=y
+-CONFIG_SUN_PARTITION=y
+-CONFIG_KARMA_PARTITION=y
+-CONFIG_EFI_PARTITION=y
+-CONFIG_SYSV68_PARTITION=y
+-CONFIG_NLS=y
+-CONFIG_NLS_DEFAULT="utf8"
+-CONFIG_NLS_CODEPAGE_437=m
+-CONFIG_NLS_CODEPAGE_737=m
+-CONFIG_NLS_CODEPAGE_775=m
+-CONFIG_NLS_CODEPAGE_850=m
+-CONFIG_NLS_CODEPAGE_852=m
+-CONFIG_NLS_CODEPAGE_855=m
+-CONFIG_NLS_CODEPAGE_857=m
+-CONFIG_NLS_CODEPAGE_860=m
+-CONFIG_NLS_CODEPAGE_861=m
+-CONFIG_NLS_CODEPAGE_862=m
+-CONFIG_NLS_CODEPAGE_863=m
+-CONFIG_NLS_CODEPAGE_864=m
+-CONFIG_NLS_CODEPAGE_865=m
+-CONFIG_NLS_CODEPAGE_866=m
+-CONFIG_NLS_CODEPAGE_869=m
+-CONFIG_NLS_CODEPAGE_936=m
+-CONFIG_NLS_CODEPAGE_950=m
+-CONFIG_NLS_CODEPAGE_932=m
+-CONFIG_NLS_CODEPAGE_949=m
+-CONFIG_NLS_CODEPAGE_874=m
+-CONFIG_NLS_ISO8859_8=m
+-CONFIG_NLS_CODEPAGE_1250=m
+-CONFIG_NLS_CODEPAGE_1251=m
+-CONFIG_NLS_ASCII=m
+-CONFIG_NLS_ISO8859_1=m
+-CONFIG_NLS_ISO8859_2=m
+-CONFIG_NLS_ISO8859_3=m
+-CONFIG_NLS_ISO8859_4=m
+-CONFIG_NLS_ISO8859_5=m
+-CONFIG_NLS_ISO8859_6=m
+-CONFIG_NLS_ISO8859_7=m
+-CONFIG_NLS_ISO8859_9=m
+-CONFIG_NLS_ISO8859_13=m
+-CONFIG_NLS_ISO8859_14=m
+-CONFIG_NLS_ISO8859_15=m
+-CONFIG_NLS_KOI8_R=m
+-CONFIG_NLS_KOI8_U=m
+-CONFIG_NLS_UTF8=m
+-CONFIG_DLM=m
+-# CONFIG_DLM_DEBUG is not set
+-
+-#
+-# Kernel hacking
+-#
+-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+-# CONFIG_PRINTK_TIME is not set
+-CONFIG_ENABLE_WARN_DEPRECATED=y
+-# CONFIG_ENABLE_MUST_CHECK is not set
+-CONFIG_FRAME_WARN=1024
+-CONFIG_MAGIC_SYSRQ=y
+-CONFIG_UNUSED_SYMBOLS=y
+-CONFIG_DEBUG_FS=y
+-# CONFIG_HEADERS_CHECK is not set
+-CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SHIRQ is not set
+-# CONFIG_DETECT_SOFTLOCKUP is not set
+-CONFIG_SCHED_DEBUG=y
+-CONFIG_SCHEDSTATS=y
+-CONFIG_TIMER_STATS=y
+-# CONFIG_DEBUG_OBJECTS is not set
+-# CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_RT_MUTEXES is not set
+-# CONFIG_RT_MUTEX_TESTER is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_LOCK_ALLOC is not set
+-# CONFIG_PROVE_LOCKING is not set
+-# CONFIG_LOCK_STAT is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+-CONFIG_STACKTRACE=y
+-# CONFIG_DEBUG_KOBJECT is not set
+-# CONFIG_DEBUG_HIGHMEM is not set
+-CONFIG_DEBUG_BUGVERBOSE=y
+-CONFIG_DEBUG_INFO=y
+-# CONFIG_DEBUG_VM is not set
+-# CONFIG_DEBUG_WRITECOUNT is not set
+-CONFIG_DEBUG_MEMORY_INIT=y
+-# CONFIG_DEBUG_LIST is not set
+-# CONFIG_DEBUG_SG is not set
+-# CONFIG_FRAME_POINTER is not set
+-CONFIG_UNWIND_INFO=y
+-CONFIG_STACK_UNWIND=y
+-# CONFIG_BOOT_PRINTK_DELAY is not set
+-CONFIG_RCU_TORTURE_TEST=m
+-# CONFIG_KPROBES_SANITY_TEST is not set
+-# CONFIG_BACKTRACE_SELF_TEST is not set
+-CONFIG_LKDTM=m
+-# CONFIG_FAULT_INJECTION is not set
+-CONFIG_LATENCYTOP=y
+-CONFIG_SYSCTL_SYSCALL_CHECK=y
+-CONFIG_HAVE_FTRACE=y
+-CONFIG_HAVE_DYNAMIC_FTRACE=y
+-# CONFIG_FTRACE is not set
+-# CONFIG_IRQSOFF_TRACER is not set
+-# CONFIG_SYSPROF_TRACER is not set
+-# CONFIG_SCHED_TRACER is not set
+-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+-CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+-CONFIG_DYNAMIC_PRINTK_DEBUG=y
+-# CONFIG_SAMPLES is not set
+-CONFIG_HAVE_ARCH_KGDB=y
+-# CONFIG_KGDB is not set
+-# CONFIG_STRICT_DEVMEM is not set
+-# CONFIG_X86_VERBOSE_BOOTUP is not set
+-CONFIG_EARLY_PRINTK=y
+-CONFIG_EARLY_PRINTK_DBGP=y
+-# CONFIG_DEBUG_STACKOVERFLOW is not set
+-# CONFIG_DEBUG_STACK_USAGE is not set
+-# CONFIG_DEBUG_PAGEALLOC is not set
+-# CONFIG_DEBUG_PER_CPU_MAPS is not set
+-# CONFIG_X86_PTDUMP is not set
+-CONFIG_DEBUG_RODATA=y
+-# CONFIG_DEBUG_RODATA_TEST is not set
+-# CONFIG_DEBUG_NX_TEST is not set
+-# CONFIG_4KSTACKS is not set
+-CONFIG_DOUBLEFAULT=y
+-# CONFIG_MMIOTRACE is not set
+-CONFIG_IO_DELAY_TYPE_0X80=0
+-CONFIG_IO_DELAY_TYPE_0XED=1
+-CONFIG_IO_DELAY_TYPE_UDELAY=2
+-CONFIG_IO_DELAY_TYPE_NONE=3
+-CONFIG_IO_DELAY_0X80=y
+-# CONFIG_IO_DELAY_0XED is not set
+-# CONFIG_IO_DELAY_UDELAY is not set
+-# CONFIG_IO_DELAY_NONE is not set
+-CONFIG_DEFAULT_IO_DELAY_TYPE=0
+-# CONFIG_DEBUG_BOOT_PARAMS is not set
+-# CONFIG_CPA_DEBUG is not set
+-# CONFIG_OPTIMIZE_INLINING is not set
+-CONFIG_KDB=y
+-CONFIG_KDB_MODULES=m
+-CONFIG_KDB_OFF=y
+-CONFIG_KDB_CONTINUE_CATASTROPHIC=0
+-CONFIG_KDB_USB=y
+-CONFIG_KDB_KDUMP=y
+-
+-#
+-# Security options
+-#
+-CONFIG_KEYS=y
+-CONFIG_KEYS_DEBUG_PROC_KEYS=y
+-CONFIG_SECURITY=y
+-CONFIG_SECURITY_DEFAULT="apparmor"
+-CONFIG_SECURITY_NETWORK=y
+-# CONFIG_SECURITY_NETWORK_XFRM is not set
+-CONFIG_SECURITY_FILE_CAPABILITIES=y
+-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+-CONFIG_SECURITY_SELINUX=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
+-CONFIG_SECURITY_SELINUX_DISABLE=y
+-CONFIG_SECURITY_SELINUX_DEVELOP=y
+-CONFIG_SECURITY_SELINUX_AVC_STATS=y
+-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
+-CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
+-# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+-CONFIG_SECURITY_APPARMOR=y
+-CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
+-CONFIG_SECURITY_APPARMOR_DISABLE=y
+-CONFIG_XOR_BLOCKS=m
+-CONFIG_ASYNC_CORE=m
+-CONFIG_ASYNC_MEMCPY=m
+-CONFIG_ASYNC_XOR=m
+-CONFIG_CRYPTO=y
+-
+-#
+-# Crypto core or helper
+-#
+-CONFIG_CRYPTO_ALGAPI=y
+-CONFIG_CRYPTO_AEAD=m
+-CONFIG_CRYPTO_BLKCIPHER=m
+-CONFIG_CRYPTO_HASH=y
+-CONFIG_CRYPTO_MANAGER=y
+-CONFIG_CRYPTO_GF128MUL=m
+-CONFIG_CRYPTO_NULL=m
+-CONFIG_CRYPTO_CRYPTD=m
+-CONFIG_CRYPTO_AUTHENC=m
+-CONFIG_CRYPTO_TEST=m
+-
+-#
+-# Authenticated Encryption with Associated Data
+-#
+-CONFIG_CRYPTO_CCM=m
+-CONFIG_CRYPTO_GCM=m
+-CONFIG_CRYPTO_SEQIV=m
+-
+-#
+-# Block modes
+-#
+-CONFIG_CRYPTO_CBC=m
+-CONFIG_CRYPTO_CTR=m
+-CONFIG_CRYPTO_CTS=m
+-CONFIG_CRYPTO_ECB=m
+-CONFIG_CRYPTO_LRW=m
+-CONFIG_CRYPTO_PCBC=m
+-CONFIG_CRYPTO_XTS=m
+-
+-#
+-# Hash modes
+-#
+-CONFIG_CRYPTO_HMAC=y
+-CONFIG_CRYPTO_XCBC=m
+-
+-#
+-# Digest
+-#
+-CONFIG_CRYPTO_CRC32C=m
+-CONFIG_CRYPTO_MD4=m
+-CONFIG_CRYPTO_MD5=m
+-CONFIG_CRYPTO_MICHAEL_MIC=m
+-CONFIG_CRYPTO_RMD128=m
+-CONFIG_CRYPTO_RMD160=m
+-CONFIG_CRYPTO_RMD256=m
+-CONFIG_CRYPTO_RMD320=m
+-CONFIG_CRYPTO_SHA1=m
+-CONFIG_CRYPTO_SHA256=m
+-CONFIG_CRYPTO_SHA512=m
+-CONFIG_CRYPTO_TGR192=m
+-CONFIG_CRYPTO_WP512=m
+-
+-#
+-# Ciphers
+-#
+-CONFIG_CRYPTO_AES=m
+-CONFIG_CRYPTO_AES_586=m
+-CONFIG_CRYPTO_ANUBIS=m
+-CONFIG_CRYPTO_ARC4=m
+-CONFIG_CRYPTO_BLOWFISH=m
+-CONFIG_CRYPTO_CAMELLIA=m
+-CONFIG_CRYPTO_CAST5=m
+-CONFIG_CRYPTO_CAST6=m
+-CONFIG_CRYPTO_DES=m
+-CONFIG_CRYPTO_FCRYPT=m
+-CONFIG_CRYPTO_KHAZAD=m
+-CONFIG_CRYPTO_SALSA20=m
+-CONFIG_CRYPTO_SALSA20_586=m
+-CONFIG_CRYPTO_SEED=m
+-CONFIG_CRYPTO_SERPENT=m
+-CONFIG_CRYPTO_TEA=m
+-# CONFIG_CRYPTO_TWOFISH is not set
+-CONFIG_CRYPTO_TWOFISH_COMMON=m
+-CONFIG_CRYPTO_TWOFISH_586=m
+-
+-#
+-# Compression
+-#
+-CONFIG_CRYPTO_DEFLATE=m
+-CONFIG_CRYPTO_LZO=m
+-CONFIG_CRYPTO_HW=y
+-CONFIG_CRYPTO_DEV_PADLOCK=m
+-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+-CONFIG_CRYPTO_DEV_GEODE=m
+-CONFIG_CRYPTO_DEV_HIFN_795X=m
+-CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+-CONFIG_HAVE_KVM=y
+-CONFIG_VIRTUALIZATION=y
+-CONFIG_KVM_KMP=y
+-# CONFIG_KVM is not set
+-# CONFIG_LGUEST is not set
+-CONFIG_VIRTIO=m
+-CONFIG_VIRTIO_RING=m
+-CONFIG_VIRTIO_PCI=m
+-CONFIG_VIRTIO_BALLOON=m
+-
+-#
+-# Library routines
+-#
+-CONFIG_BITREVERSE=y
+-CONFIG_GENERIC_FIND_FIRST_BIT=y
+-CONFIG_GENERIC_FIND_NEXT_BIT=y
+-CONFIG_CRC_CCITT=m
+-CONFIG_CRC16=m
+-CONFIG_CRC_T10DIF=m
+-CONFIG_CRC_ITU_T=m
+-CONFIG_CRC32=y
+-CONFIG_CRC7=m
+-CONFIG_LIBCRC32C=m
+-CONFIG_AUDIT_GENERIC=y
+-CONFIG_ZLIB_INFLATE=y
+-CONFIG_ZLIB_DEFLATE=m
+-CONFIG_LZO_COMPRESS=m
+-CONFIG_LZO_DECOMPRESS=m
+-CONFIG_GENERIC_ALLOCATOR=y
+-CONFIG_REED_SOLOMON=m
+-CONFIG_REED_SOLOMON_DEC16=y
+-CONFIG_TEXTSEARCH=y
+-CONFIG_TEXTSEARCH_KMP=m
+-CONFIG_TEXTSEARCH_BM=m
+-CONFIG_TEXTSEARCH_FSM=m
+-CONFIG_PLIST=y
+-CONFIG_HAS_IOMEM=y
+-CONFIG_HAS_IOPORT=y
+-CONFIG_HAS_DMA=y
+-CONFIG_CHECK_SIGNATURE=y
+diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config
+deleted file mode 100644
+index 69bca9a..0000000
+--- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64-default.config
++++ /dev/null
+@@ -1,4143 +0,0 @@
+-#
+-# Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.27.21
+-# Wed May 13 22:02:04 2009
+-#
+-CONFIG_64BIT=y
+-# CONFIG_X86_32 is not set
+-CONFIG_X86_64=y
+-CONFIG_X86=y
+-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+-# CONFIG_GENERIC_LOCKBREAK is not set
+-CONFIG_GENERIC_TIME=y
+-CONFIG_GENERIC_CMOS_UPDATE=y
+-CONFIG_CLOCKSOURCE_WATCHDOG=y
+-CONFIG_GENERIC_CLOCKEVENTS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+-CONFIG_LOCKDEP_SUPPORT=y
+-CONFIG_STACKTRACE_SUPPORT=y
+-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+-CONFIG_FAST_CMPXCHG_LOCAL=y
+-CONFIG_MMU=y
+-CONFIG_ZONE_DMA=y
+-CONFIG_GENERIC_ISA_DMA=y
+-CONFIG_GENERIC_IOMAP=y
+-CONFIG_GENERIC_BUG=y
+-CONFIG_GENERIC_HWEIGHT=y
+-CONFIG_GENERIC_GPIO=y
+-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+-CONFIG_RWSEM_GENERIC_SPINLOCK=y
+-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+-CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_GENERIC_TIME_VSYSCALL=y
+-CONFIG_ARCH_HAS_CPU_RELAX=y
+-CONFIG_ARCH_HAS_DEFAULT_IDLE=y
+-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+-CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
+-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+-CONFIG_ARCH_SUSPEND_POSSIBLE=y
+-CONFIG_ZONE_DMA32=y
+-CONFIG_ARCH_POPULATES_NODE_MAP=y
+-CONFIG_AUDIT_ARCH=y
+-CONFIG_ARCH_SUPPORTS_AOUT=y
+-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+-CONFIG_GENERIC_HARDIRQS=y
+-CONFIG_GENERIC_IRQ_PROBE=y
+-CONFIG_GENERIC_PENDING_IRQ=y
+-CONFIG_X86_SMP=y
+-CONFIG_X86_64_SMP=y
+-CONFIG_X86_HT=y
+-CONFIG_X86_BIOS_REBOOT=y
+-CONFIG_X86_TRAMPOLINE=y
+-# CONFIG_KTIME_SCALAR is not set
+-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+-
+-#
+-# General setup
+-#
+-CONFIG_EXPERIMENTAL=y
+-CONFIG_LOCK_KERNEL=y
+-CONFIG_INIT_ENV_ARG_LIMIT=32
+-CONFIG_LOCALVERSION="-0.1-default"
+-# CONFIG_LOCALVERSION_AUTO is not set
+-CONFIG_SUSE_KERNEL=y
+-CONFIG_SWAP=y
+-CONFIG_SYSVIPC=y
+-CONFIG_SYSVIPC_SYSCTL=y
+-CONFIG_POSIX_MQUEUE=y
+-CONFIG_BSD_PROCESS_ACCT=y
+-CONFIG_BSD_PROCESS_ACCT_V3=y
+-CONFIG_TASKSTATS=y
+-CONFIG_TASK_DELAY_ACCT=y
+-CONFIG_TASK_XACCT=y
+-CONFIG_TASK_IO_ACCOUNTING=y
+-CONFIG_AUDIT=y
+-CONFIG_AUDITSYSCALL=y
+-CONFIG_AUDIT_TREE=y
+-CONFIG_IKCONFIG=y
+-CONFIG_IKCONFIG_PROC=y
+-CONFIG_LOG_BUF_SHIFT=18
+-CONFIG_CGROUPS=y
+-# CONFIG_CGROUP_DEBUG is not set
+-CONFIG_CGROUP_NS=y
+-CONFIG_CGROUP_FREEZER=y
+-CONFIG_CGROUP_DEVICE=y
+-CONFIG_CPUSETS=y
+-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+-CONFIG_GROUP_SCHED=y
+-CONFIG_FAIR_GROUP_SCHED=y
+-# CONFIG_RT_GROUP_SCHED is not set
+-# CONFIG_USER_SCHED is not set
+-CONFIG_CGROUP_SCHED=y
+-CONFIG_CGROUP_CPUACCT=y
+-CONFIG_RESOURCE_COUNTERS=y
+-CONFIG_MM_OWNER=y
+-CONFIG_CGROUP_MEM_RES_CTLR=y
+-# CONFIG_SYSFS_DEPRECATED_V2 is not set
+-CONFIG_PROC_PID_CPUSET=y
+-CONFIG_RELAY=y
+-CONFIG_NAMESPACES=y
+-CONFIG_UTS_NS=y
+-CONFIG_IPC_NS=y
+-CONFIG_USER_NS=y
+-CONFIG_PID_NS=y
+-CONFIG_BLK_DEV_INITRD=y
+-CONFIG_INITRAMFS_SOURCE=""
+-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+-CONFIG_SYSCTL=y
+-# CONFIG_EMBEDDED is not set
+-CONFIG_UID16=y
+-CONFIG_SYSCTL_SYSCALL=y
+-CONFIG_KALLSYMS=y
+-CONFIG_KALLSYMS_ALL=y
+-# CONFIG_KALLSYMS_EXTRA_PASS is not set
+-CONFIG_HOTPLUG=y
+-CONFIG_PRINTK=y
+-CONFIG_BUG=y
+-CONFIG_ELF_CORE=y
+-CONFIG_PCSPKR_PLATFORM=y
+-CONFIG_COMPAT_BRK=y
+-CONFIG_BASE_FULL=y
+-CONFIG_FUTEX=y
+-CONFIG_ANON_INODES=y
+-CONFIG_EPOLL=y
+-CONFIG_SIGNALFD=y
+-CONFIG_TIMERFD=y
+-CONFIG_EVENTFD=y
+-CONFIG_SHMEM=y
+-CONFIG_VM_EVENT_COUNTERS=y
+-CONFIG_SLAB=y
+-# CONFIG_SLUB is not set
+-# CONFIG_SLOB is not set
+-CONFIG_PROFILING=y
+-# CONFIG_TRACEPOINTS is not set
+-CONFIG_MARKERS=y
+-CONFIG_OPROFILE=m
+-CONFIG_HAVE_OPROFILE=y
+-CONFIG_KPROBES=y
+-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+-CONFIG_KRETPROBES=y
+-CONFIG_HAVE_IOREMAP_PROT=y
+-CONFIG_HAVE_KPROBES=y
+-CONFIG_HAVE_KRETPROBES=y
+-CONFIG_HAVE_ARCH_TRACEHOOK=y
+-# CONFIG_HAVE_DMA_ATTRS is not set
+-CONFIG_USE_GENERIC_SMP_HELPERS=y
+-# CONFIG_HAVE_CLK is not set
+-CONFIG_PROC_PAGE_MONITOR=y
+-# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+-CONFIG_SLABINFO=y
+-CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+-CONFIG_BASE_SMALL=0
+-CONFIG_MODULES=y
+-CONFIG_MODULE_FORCE_LOAD=y
+-CONFIG_MODULE_UNLOAD=y
+-CONFIG_MODULE_FORCE_UNLOAD=y
+-CONFIG_MODVERSIONS=y
+-CONFIG_MODULE_SRCVERSION_ALL=y
+-CONFIG_KMOD=y
+-CONFIG_STOP_MACHINE=y
+-# CONFIG_UTRACE is not set
+-CONFIG_BLOCK=y
+-CONFIG_BLK_DEV_IO_TRACE=y
+-CONFIG_BLK_DEV_BSG=y
+-CONFIG_BLK_DEV_INTEGRITY=y
+-CONFIG_BLOCK_COMPAT=y
+-
+-#
+-# IO Schedulers
+-#
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_DEFAULT_AS is not set
+-CONFIG_DEFAULT_DEADLINE=y
+-# CONFIG_DEFAULT_CFQ is not set
+-# CONFIG_DEFAULT_NOOP is not set
+-CONFIG_DEFAULT_IOSCHED="deadline"
+-CONFIG_PREEMPT_NOTIFIERS=y
+-CONFIG_CLASSIC_RCU=y
+-CONFIG_FREEZER=y
+-
+-#
+-# Processor type and features
+-#
+-CONFIG_TICK_ONESHOT=y
+-CONFIG_NO_HZ=y
+-CONFIG_HIGH_RES_TIMERS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+-CONFIG_SMP=y
+-CONFIG_X86_FIND_SMP_CONFIG=y
+-CONFIG_X86_MPPARSE=y
+-CONFIG_X86_PC=y
+-# CONFIG_X86_XEN is not set
+-# CONFIG_X86_ELAN is not set
+-# CONFIG_X86_VOYAGER is not set
+-# CONFIG_X86_GENERICARCH is not set
+-# CONFIG_X86_64_XEN is not set
+-# CONFIG_X86_VSMP is not set
+-# CONFIG_PARAVIRT_GUEST is not set
+-CONFIG_MEMTEST=y
+-# CONFIG_M386 is not set
+-# CONFIG_M486 is not set
+-# CONFIG_M586 is not set
+-# CONFIG_M586TSC is not set
+-# CONFIG_M586MMX is not set
+-# CONFIG_M686 is not set
+-# CONFIG_MPENTIUMII is not set
+-# CONFIG_MPENTIUMIII is not set
+-# CONFIG_MPENTIUMM is not set
+-# CONFIG_MPENTIUM4 is not set
+-# CONFIG_MK6 is not set
+-# CONFIG_MK7 is not set
+-# CONFIG_MK8 is not set
+-# CONFIG_MCRUSOE is not set
+-# CONFIG_MEFFICEON is not set
+-# CONFIG_MWINCHIPC6 is not set
+-# CONFIG_MWINCHIP2 is not set
+-# CONFIG_MWINCHIP3D is not set
+-# CONFIG_MGEODEGX1 is not set
+-# CONFIG_MGEODE_LX is not set
+-# CONFIG_MCYRIXIII is not set
+-# CONFIG_MVIAC3_2 is not set
+-# CONFIG_MVIAC7 is not set
+-# CONFIG_MPSC is not set
+-# CONFIG_MCORE2 is not set
+-CONFIG_GENERIC_CPU=y
+-CONFIG_X86_CPU=y
+-CONFIG_X86_L1_CACHE_BYTES=128
+-CONFIG_X86_INTERNODE_CACHE_BYTES=128
+-CONFIG_X86_CMPXCHG=y
+-CONFIG_X86_L1_CACHE_SHIFT=7
+-CONFIG_X86_WP_WORKS_OK=y
+-CONFIG_X86_TSC=y
+-CONFIG_X86_CMPXCHG64=y
+-CONFIG_X86_CMOV=y
+-CONFIG_X86_MINIMUM_CPU_FAMILY=64
+-CONFIG_X86_DEBUGCTLMSR=y
+-CONFIG_HPET_TIMER=y
+-CONFIG_HPET_EMULATE_RTC=y
+-CONFIG_DMI=y
+-CONFIG_GART_IOMMU=y
+-CONFIG_CALGARY_IOMMU=y
+-# CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT is not set
+-CONFIG_AMD_IOMMU=y
+-CONFIG_SWIOTLB=y
+-CONFIG_IOMMU_HELPER=y
+-CONFIG_MAXSMP=y
+-CONFIG_NR_CPUS=512
+-CONFIG_SCHED_SMT=y
+-CONFIG_SCHED_MC=y
+-CONFIG_PREEMPT_NONE=y
+-# CONFIG_PREEMPT_VOLUNTARY is not set
+-# CONFIG_PREEMPT is not set
+-# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
+-CONFIG_X86_LOCAL_APIC=y
+-CONFIG_X86_IO_APIC=y
+-CONFIG_X86_MCE=y
+-CONFIG_X86_MCE_INTEL=y
+-CONFIG_X86_MCE_AMD=y
+-CONFIG_I8K=m
+-CONFIG_MICROCODE=m
+-CONFIG_MICROCODE_OLD_INTERFACE=y
+-CONFIG_X86_MSR=m
+-CONFIG_X86_CPUID=m
+-CONFIG_DIRECT_GBPAGES=y
+-CONFIG_NUMA=y
+-CONFIG_K8_NUMA=y
+-CONFIG_X86_64_ACPI_NUMA=y
+-CONFIG_NODES_SPAN_OTHER_NODES=y
+-CONFIG_NUMA_EMU=y
+-CONFIG_NODES_SHIFT=9
+-CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+-CONFIG_ARCH_SPARSEMEM_ENABLE=y
+-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+-CONFIG_ARCH_MEMORY_PROBE=y
+-CONFIG_SELECT_MEMORY_MODEL=y
+-# CONFIG_FLATMEM_MANUAL is not set
+-# CONFIG_DISCONTIGMEM_MANUAL is not set
+-CONFIG_SPARSEMEM_MANUAL=y
+-CONFIG_SPARSEMEM=y
+-CONFIG_NEED_MULTIPLE_NODES=y
+-CONFIG_HAVE_MEMORY_PRESENT=y
+-# CONFIG_SPARSEMEM_STATIC is not set
+-CONFIG_SPARSEMEM_EXTREME=y
+-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+-CONFIG_SPARSEMEM_VMEMMAP=y
+-CONFIG_MEMORY_HOTPLUG=y
+-CONFIG_MEMORY_HOTPLUG_SPARSE=y
+-CONFIG_PAGEFLAGS_EXTENDED=y
+-CONFIG_SPLIT_PTLOCK_CPUS=4
+-CONFIG_MIGRATION=y
+-CONFIG_RESOURCES_64BIT=y
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
+-CONFIG_VIRT_TO_BUS=y
+-CONFIG_MMU_NOTIFIER=y
+-CONFIG_X86_RESERVE_LOW_64K=y
+-CONFIG_MTRR=y
+-# CONFIG_MTRR_SANITIZER is not set
+-CONFIG_X86_PAT=y
+-CONFIG_EFI=y
+-CONFIG_SECCOMP=y
+-# CONFIG_SECCOMP_DISABLE_TSC is not set
+-# CONFIG_HZ_100 is not set
+-CONFIG_HZ_250=y
+-# CONFIG_HZ_300 is not set
+-# CONFIG_HZ_1000 is not set
+-CONFIG_HZ=250
+-CONFIG_SCHED_HRTICK=y
+-CONFIG_KEXEC=y
+-CONFIG_CRASH_DUMP=y
+-CONFIG_PHYSICAL_START=0x200000
+-CONFIG_RELOCATABLE=y
+-CONFIG_PHYSICAL_ALIGN=0x200000
+-CONFIG_HOTPLUG_CPU=y
+-CONFIG_COMPAT_VDSO=y
+-
+-#
+-# Hardware Performance Monitoring support
+-#
+-CONFIG_PERFMON=y
+-# CONFIG_PERFMON_DEBUG is not set
+-CONFIG_PERFMON_DEBUG_FS=y
+-CONFIG_X86_PERFMON_P4=m
+-CONFIG_X86_PERFMON_PEBS_P4=m
+-CONFIG_X86_PERFMON_CORE=m
+-CONFIG_X86_PERFMON_PEBS_CORE=m
+-CONFIG_X86_PERFMON_INTEL_ATOM=m
+-CONFIG_X86_PERFMON_INTEL_ARCH=m
+-CONFIG_X86_PERFMON_AMD64=m
+-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+-CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
+-
+-#
+-# Power management options
+-#
+-CONFIG_ARCH_HIBERNATION_HEADER=y
+-CONFIG_PM=y
+-# CONFIG_PM_DEBUG is not set
+-CONFIG_PM_SLEEP_SMP=y
+-CONFIG_PM_SLEEP=y
+-CONFIG_SUSPEND=y
+-CONFIG_SUSPEND_FREEZER=y
+-CONFIG_HIBERNATION=y
+-CONFIG_PM_STD_PARTITION=""
+-CONFIG_ACPI=y
+-CONFIG_ACPI_SLEEP=y
+-CONFIG_ACPI_PROCFS=y
+-CONFIG_ACPI_PROCFS_POWER=y
+-CONFIG_ACPI_SYSFS_POWER=y
+-CONFIG_ACPI_PROC_EVENT=y
+-CONFIG_ACPI_AC=m
+-CONFIG_ACPI_BATTERY=m
+-CONFIG_ACPI_BUTTON=m
+-CONFIG_ACPI_VIDEO=m
+-CONFIG_ACPI_FAN=m
+-CONFIG_ACPI_DOCK=m
+-CONFIG_ACPI_PROCESSOR=m
+-CONFIG_ACPI_HOTPLUG_CPU=y
+-CONFIG_ACPI_THERMAL=m
+-CONFIG_ACPI_NUMA=y
+-CONFIG_ACPI_WMI=m
+-# CONFIG_ACPI_ASUS is not set
+-CONFIG_ACPI_TOSHIBA=m
+-CONFIG_ACPI_CUSTOM_DSDT_FILE=""
+-# CONFIG_ACPI_CUSTOM_DSDT is not set
+-CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+-CONFIG_ACPI_BLACKLIST_YEAR=0
+-CONFIG_ACPI_DEBUG=y
+-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
+-CONFIG_ACPI_EC=y
+-CONFIG_ACPI_PCI_SLOT=m
+-CONFIG_ACPI_POWER=y
+-CONFIG_ACPI_SYSTEM=y
+-CONFIG_X86_PM_TIMER=y
+-CONFIG_ACPI_CONTAINER=m
+-CONFIG_ACPI_HOTPLUG_MEMORY=m
+-CONFIG_ACPI_SBS=m
+-
+-#
+-# CPU Frequency scaling
+-#
+-CONFIG_CPU_FREQ=y
+-CONFIG_CPU_FREQ_TABLE=y
+-# CONFIG_CPU_FREQ_DEBUG is not set
+-CONFIG_CPU_FREQ_STAT=m
+-CONFIG_CPU_FREQ_STAT_DETAILS=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+-CONFIG_CPU_FREQ_GOV_USERSPACE=m
+-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+-
+-#
+-# CPUFreq processor drivers
+-#
+-CONFIG_X86_ACPI_CPUFREQ=m
+-CONFIG_X86_POWERNOW_K8=m
+-CONFIG_X86_POWERNOW_K8_ACPI=y
+-# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+-# CONFIG_X86_P4_CLOCKMOD is not set
+-
+-#
+-# shared options
+-#
+-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+-# CONFIG_X86_SPEEDSTEP_LIB is not set
+-CONFIG_CPU_IDLE=y
+-CONFIG_CPU_IDLE_GOV_LADDER=y
+-CONFIG_CPU_IDLE_GOV_MENU=y
+-
+-#
+-# Bus options (PCI etc.)
+-#
+-CONFIG_PCI=y
+-CONFIG_PCI_DIRECT=y
+-CONFIG_PCI_MMCONFIG=y
+-CONFIG_PCI_DOMAINS=y
+-# CONFIG_DMAR is not set
+-CONFIG_INTR_REMAP=y
+-CONFIG_PCIEPORTBUS=y
+-CONFIG_HOTPLUG_PCI_PCIE=m
+-CONFIG_PCIEAER=y
+-CONFIG_PCIEASPM=y
+-# CONFIG_PCIEASPM_DEBUG is not set
+-CONFIG_ARCH_SUPPORTS_MSI=y
+-CONFIG_PCI_MSI=y
+-CONFIG_PCI_LEGACY=y
+-# CONFIG_PCI_DEBUG is not set
+-CONFIG_HT_IRQ=y
+-CONFIG_ISA_DMA_API=y
+-CONFIG_K8_NB=y
+-CONFIG_PCCARD=m
+-# CONFIG_PCMCIA_DEBUG is not set
+-CONFIG_PCMCIA=m
+-CONFIG_PCMCIA_LOAD_CIS=y
+-CONFIG_PCMCIA_IOCTL=y
+-CONFIG_CARDBUS=y
+-
+-#
+-# PC-card bridges
+-#
+-CONFIG_YENTA=m
+-CONFIG_YENTA_O2=y
+-CONFIG_YENTA_RICOH=y
+-CONFIG_YENTA_TI=y
+-CONFIG_YENTA_ENE_TUNE=y
+-CONFIG_YENTA_TOSHIBA=y
+-CONFIG_PD6729=m
+-CONFIG_I82092=m
+-CONFIG_PCCARD_NONSTATIC=m
+-CONFIG_HOTPLUG_PCI=m
+-CONFIG_HOTPLUG_PCI_FAKE=m
+-CONFIG_HOTPLUG_PCI_ACPI=m
+-CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+-CONFIG_HOTPLUG_PCI_CPCI=y
+-CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+-CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+-CONFIG_HOTPLUG_PCI_SHPC=m
+-
+-#
+-# Executable file formats / Emulations
+-#
+-CONFIG_BINFMT_ELF=y
+-CONFIG_COMPAT_BINFMT_ELF=y
+-CONFIG_BINFMT_MISC=m
+-CONFIG_IA32_EMULATION=y
+-CONFIG_IA32_AOUT=y
+-CONFIG_COMPAT=y
+-CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
+-CONFIG_SYSVIPC_COMPAT=y
+-CONFIG_NET=y
+-
+-#
+-# Networking options
+-#
+-CONFIG_PACKET=m
+-CONFIG_PACKET_MMAP=y
+-CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-CONFIG_XFRM_USER=m
+-CONFIG_XFRM_SUB_POLICY=y
+-CONFIG_XFRM_MIGRATE=y
+-# CONFIG_XFRM_STATISTICS is not set
+-CONFIG_XFRM_IPCOMP=m
+-CONFIG_NET_KEY=m
+-CONFIG_NET_KEY_MIGRATE=y
+-CONFIG_INET=y
+-CONFIG_IP_MULTICAST=y
+-CONFIG_IP_ADVANCED_ROUTER=y
+-CONFIG_ASK_IP_FIB_HASH=y
+-# CONFIG_IP_FIB_TRIE is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_MULTIPLE_TABLES=y
+-CONFIG_IP_ROUTE_MULTIPATH=y
+-CONFIG_IP_ROUTE_VERBOSE=y
+-CONFIG_IP_PNP=y
+-CONFIG_IP_PNP_DHCP=y
+-CONFIG_IP_PNP_BOOTP=y
+-CONFIG_IP_PNP_RARP=y
+-CONFIG_NET_IPIP=m
+-CONFIG_NET_IPGRE=m
+-CONFIG_NET_IPGRE_BROADCAST=y
+-CONFIG_IP_MROUTE=y
+-CONFIG_IP_PIMSM_V1=y
+-CONFIG_IP_PIMSM_V2=y
+-# CONFIG_ARPD is not set
+-CONFIG_SYN_COOKIES=y
+-CONFIG_INET_AH=m
+-CONFIG_INET_ESP=m
+-CONFIG_INET_IPCOMP=m
+-CONFIG_INET_XFRM_TUNNEL=m
+-CONFIG_INET_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET_XFRM_MODE_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_BEET=m
+-CONFIG_INET_LRO=y
+-CONFIG_INET_DIAG=m
+-CONFIG_INET_TCP_DIAG=m
+-CONFIG_TCP_CONG_ADVANCED=y
+-CONFIG_TCP_CONG_BIC=m
+-CONFIG_TCP_CONG_CUBIC=y
+-CONFIG_TCP_CONG_WESTWOOD=m
+-CONFIG_TCP_CONG_HTCP=m
+-CONFIG_TCP_CONG_HSTCP=m
+-CONFIG_TCP_CONG_HYBLA=m
+-CONFIG_TCP_CONG_VEGAS=m
+-CONFIG_TCP_CONG_SCALABLE=m
+-CONFIG_TCP_CONG_LP=m
+-CONFIG_TCP_CONG_VENO=m
+-CONFIG_TCP_CONG_YEAH=m
+-CONFIG_TCP_CONG_ILLINOIS=m
+-# CONFIG_DEFAULT_BIC is not set
+-CONFIG_DEFAULT_CUBIC=y
+-# CONFIG_DEFAULT_HTCP is not set
+-# CONFIG_DEFAULT_VEGAS is not set
+-# CONFIG_DEFAULT_WESTWOOD is not set
+-# CONFIG_DEFAULT_RENO is not set
+-CONFIG_DEFAULT_TCP_CONG="cubic"
+-# CONFIG_TCP_MD5SIG is not set
+-CONFIG_IP_VS=m
+-# CONFIG_IP_VS_DEBUG is not set
+-CONFIG_IP_VS_TAB_BITS=12
+-
+-#
+-# IPVS transport protocol load balancing support
+-#
+-CONFIG_IP_VS_PROTO_TCP=y
+-CONFIG_IP_VS_PROTO_UDP=y
+-CONFIG_IP_VS_PROTO_ESP=y
+-CONFIG_IP_VS_PROTO_AH=y
+-
+-#
+-# IPVS scheduler
+-#
+-CONFIG_IP_VS_RR=m
+-CONFIG_IP_VS_WRR=m
+-CONFIG_IP_VS_LC=m
+-CONFIG_IP_VS_WLC=m
+-CONFIG_IP_VS_LBLC=m
+-CONFIG_IP_VS_LBLCR=m
+-CONFIG_IP_VS_DH=m
+-CONFIG_IP_VS_SH=m
+-CONFIG_IP_VS_SED=m
+-CONFIG_IP_VS_NQ=m
+-
+-#
+-# IPVS application helper
+-#
+-CONFIG_IP_VS_FTP=m
+-CONFIG_IPV6=m
+-CONFIG_IPV6_PRIVACY=y
+-CONFIG_IPV6_ROUTER_PREF=y
+-CONFIG_IPV6_ROUTE_INFO=y
+-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+-CONFIG_INET6_AH=m
+-CONFIG_INET6_ESP=m
+-CONFIG_INET6_IPCOMP=m
+-CONFIG_IPV6_MIP6=m
+-CONFIG_INET6_XFRM_TUNNEL=m
+-CONFIG_INET6_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET6_XFRM_MODE_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_BEET=m
+-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+-CONFIG_IPV6_SIT=m
+-CONFIG_IPV6_NDISC_NODETYPE=y
+-CONFIG_IPV6_TUNNEL=m
+-CONFIG_IPV6_MULTIPLE_TABLES=y
+-CONFIG_IPV6_SUBTREES=y
+-# CONFIG_IPV6_MROUTE is not set
+-# CONFIG_NETLABEL is not set
+-CONFIG_NETWORK_SECMARK=y
+-CONFIG_NETFILTER=y
+-# CONFIG_NETFILTER_DEBUG is not set
+-CONFIG_NETFILTER_ADVANCED=y
+-CONFIG_BRIDGE_NETFILTER=y
+-
+-#
+-# Core Netfilter Configuration
+-#
+-CONFIG_NETFILTER_NETLINK=m
+-CONFIG_NETFILTER_NETLINK_QUEUE=m
+-CONFIG_NETFILTER_NETLINK_LOG=m
+-CONFIG_NF_CONNTRACK=m
+-CONFIG_NF_CT_ACCT=y
+-CONFIG_NF_CONNTRACK_MARK=y
+-CONFIG_NF_CONNTRACK_SECMARK=y
+-CONFIG_NF_CONNTRACK_EVENTS=y
+-CONFIG_NF_CT_PROTO_DCCP=m
+-CONFIG_NF_CT_PROTO_GRE=m
+-CONFIG_NF_CT_PROTO_SCTP=m
+-CONFIG_NF_CT_PROTO_UDPLITE=m
+-CONFIG_NF_CONNTRACK_AMANDA=m
+-CONFIG_NF_CONNTRACK_FTP=m
+-CONFIG_NF_CONNTRACK_H323=m
+-CONFIG_NF_CONNTRACK_IRC=m
+-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+-CONFIG_NF_CONNTRACK_PPTP=m
+-CONFIG_NF_CONNTRACK_SANE=m
+-CONFIG_NF_CONNTRACK_SIP=m
+-CONFIG_NF_CONNTRACK_TFTP=m
+-CONFIG_NF_CONNTRACK_SLP=m
+-CONFIG_NF_CT_NETLINK=m
+-CONFIG_NETFILTER_XTABLES=m
+-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+-CONFIG_NETFILTER_XT_TARGET_DSCP=m
+-CONFIG_NETFILTER_XT_TARGET_MARK=m
+-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+-CONFIG_NETFILTER_XT_TARGET_TRACE=m
+-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+-CONFIG_NETFILTER_XT_MATCH_DCCP=m
+-CONFIG_NETFILTER_XT_MATCH_DSCP=m
+-CONFIG_NETFILTER_XT_MATCH_ESP=m
+-CONFIG_NETFILTER_XT_MATCH_HELPER=m
+-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_MAC=m
+-CONFIG_NETFILTER_XT_MATCH_MARK=m
+-CONFIG_NETFILTER_XT_MATCH_OWNER=m
+-CONFIG_NETFILTER_XT_MATCH_POLICY=m
+-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+-CONFIG_NETFILTER_XT_MATCH_REALM=m
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+-CONFIG_NETFILTER_XT_MATCH_STATE=m
+-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+-CONFIG_NETFILTER_XT_MATCH_STRING=m
+-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+-CONFIG_NETFILTER_XT_MATCH_TIME=m
+-CONFIG_NETFILTER_XT_MATCH_U32=m
+-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+-
+-#
+-# IP: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV4=m
+-# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+-CONFIG_IP_NF_QUEUE=m
+-CONFIG_IP_NF_IPTABLES=m
+-CONFIG_IP_NF_MATCH_RECENT=m
+-CONFIG_IP_NF_MATCH_ECN=m
+-CONFIG_IP_NF_MATCH_AH=m
+-CONFIG_IP_NF_MATCH_TTL=m
+-CONFIG_IP_NF_MATCH_ADDRTYPE=m
+-CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
+-CONFIG_IP_NF_FILTER=m
+-CONFIG_IP_NF_TARGET_REJECT=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_NF_NAT=m
+-CONFIG_NF_NAT_NEEDED=y
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_NF_NAT_SNMP_BASIC=m
+-CONFIG_NF_NAT_PROTO_DCCP=m
+-CONFIG_NF_NAT_PROTO_GRE=m
+-CONFIG_NF_NAT_PROTO_UDPLITE=m
+-CONFIG_NF_NAT_PROTO_SCTP=m
+-CONFIG_NF_NAT_FTP=m
+-CONFIG_NF_NAT_IRC=m
+-CONFIG_NF_NAT_TFTP=m
+-CONFIG_NF_NAT_AMANDA=m
+-CONFIG_NF_NAT_PPTP=m
+-CONFIG_NF_NAT_H323=m
+-CONFIG_NF_NAT_SIP=m
+-CONFIG_IP_NF_MANGLE=m
+-CONFIG_IP_NF_TARGET_ECN=m
+-CONFIG_IP_NF_TARGET_TTL=m
+-CONFIG_IP_NF_TARGET_CLUSTERIP=m
+-CONFIG_IP_NF_RAW=m
+-CONFIG_IP_NF_SECURITY=m
+-CONFIG_IP_NF_ARPTABLES=m
+-CONFIG_IP_NF_ARPFILTER=m
+-CONFIG_IP_NF_ARP_MANGLE=m
+-
+-#
+-# IPv6: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV6=m
+-CONFIG_IP6_NF_QUEUE=m
+-CONFIG_IP6_NF_IPTABLES=m
+-CONFIG_IP6_NF_MATCH_RT=m
+-CONFIG_IP6_NF_MATCH_OPTS=m
+-CONFIG_IP6_NF_MATCH_FRAG=m
+-CONFIG_IP6_NF_MATCH_HL=m
+-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+-CONFIG_IP6_NF_MATCH_AH=m
+-CONFIG_IP6_NF_MATCH_MH=m
+-CONFIG_IP6_NF_MATCH_EUI64=m
+-CONFIG_IP6_NF_FILTER=m
+-CONFIG_IP6_NF_TARGET_LOG=m
+-CONFIG_IP6_NF_TARGET_REJECT=m
+-CONFIG_IP6_NF_MANGLE=m
+-CONFIG_IP6_NF_TARGET_HL=m
+-CONFIG_IP6_NF_RAW=m
+-CONFIG_IP6_NF_SECURITY=m
+-
+-#
+-# DECnet: Netfilter Configuration
+-#
+-# CONFIG_DECNET_NF_GRABULATOR is not set
+-
+-#
+-# Bridge: Netfilter Configuration
+-#
+-CONFIG_BRIDGE_NF_EBTABLES=m
+-CONFIG_BRIDGE_EBT_BROUTE=m
+-CONFIG_BRIDGE_EBT_T_FILTER=m
+-CONFIG_BRIDGE_EBT_T_NAT=m
+-CONFIG_BRIDGE_EBT_802_3=m
+-CONFIG_BRIDGE_EBT_AMONG=m
+-CONFIG_BRIDGE_EBT_ARP=m
+-CONFIG_BRIDGE_EBT_IP=m
+-CONFIG_BRIDGE_EBT_IP6=m
+-CONFIG_BRIDGE_EBT_LIMIT=m
+-CONFIG_BRIDGE_EBT_MARK=m
+-CONFIG_BRIDGE_EBT_PKTTYPE=m
+-CONFIG_BRIDGE_EBT_STP=m
+-CONFIG_BRIDGE_EBT_VLAN=m
+-CONFIG_BRIDGE_EBT_ARPREPLY=m
+-CONFIG_BRIDGE_EBT_DNAT=m
+-CONFIG_BRIDGE_EBT_MARK_T=m
+-CONFIG_BRIDGE_EBT_REDIRECT=m
+-CONFIG_BRIDGE_EBT_SNAT=m
+-CONFIG_BRIDGE_EBT_LOG=m
+-CONFIG_BRIDGE_EBT_ULOG=m
+-CONFIG_BRIDGE_EBT_NFLOG=m
+-CONFIG_IP_DCCP=m
+-CONFIG_INET_DCCP_DIAG=m
+-CONFIG_IP_DCCP_ACKVEC=y
+-
+-#
+-# DCCP CCIDs Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_DCCP_CCID2=m
+-# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3=m
+-# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3_RTO=100
+-CONFIG_IP_DCCP_TFRC_LIB=m
+-
+-#
+-# DCCP Kernel Hacking
+-#
+-# CONFIG_IP_DCCP_DEBUG is not set
+-# CONFIG_NET_DCCPPROBE is not set
+-CONFIG_IP_SCTP=m
+-# CONFIG_SCTP_DBG_MSG is not set
+-# CONFIG_SCTP_DBG_OBJCNT is not set
+-# CONFIG_SCTP_HMAC_NONE is not set
+-# CONFIG_SCTP_HMAC_SHA1 is not set
+-CONFIG_SCTP_HMAC_MD5=y
+-# CONFIG_TIPC is not set
+-CONFIG_ATM=m
+-CONFIG_ATM_CLIP=m
+-# CONFIG_ATM_CLIP_NO_ICMP is not set
+-CONFIG_ATM_LANE=m
+-CONFIG_ATM_MPOA=m
+-CONFIG_ATM_BR2684=m
+-# CONFIG_ATM_BR2684_IPFILTER is not set
+-CONFIG_STP=m
+-CONFIG_GARP=m
+-CONFIG_BRIDGE=m
+-CONFIG_VLAN_8021Q=m
+-CONFIG_VLAN_8021Q_GVRP=y
+-CONFIG_DECNET=m
+-# CONFIG_DECNET_ROUTER is not set
+-CONFIG_LLC=y
+-CONFIG_LLC2=m
+-CONFIG_IPX=m
+-CONFIG_IPX_INTERN=y
+-CONFIG_ATALK=m
+-CONFIG_DEV_APPLETALK=m
+-CONFIG_IPDDP=m
+-CONFIG_IPDDP_ENCAP=y
+-CONFIG_IPDDP_DECAP=y
+-CONFIG_X25=m
+-CONFIG_LAPB=m
+-CONFIG_ECONET=m
+-# CONFIG_ECONET_AUNUDP is not set
+-# CONFIG_ECONET_NATIVE is not set
+-CONFIG_WAN_ROUTER=m
+-CONFIG_NET_SCHED=y
+-
+-#
+-# Queueing/Scheduling
+-#
+-CONFIG_NET_SCH_CBQ=m
+-CONFIG_NET_SCH_HTB=m
+-CONFIG_NET_SCH_HFSC=m
+-CONFIG_NET_SCH_ATM=m
+-CONFIG_NET_SCH_PRIO=m
+-CONFIG_NET_SCH_MULTIQ=m
+-CONFIG_NET_SCH_RED=m
+-CONFIG_NET_SCH_SFQ=m
+-CONFIG_NET_SCH_TEQL=m
+-CONFIG_NET_SCH_TBF=m
+-CONFIG_NET_SCH_GRED=m
+-CONFIG_NET_SCH_DSMARK=m
+-CONFIG_NET_SCH_NETEM=m
+-CONFIG_NET_SCH_INGRESS=m
+-
+-#
+-# Classification
+-#
+-CONFIG_NET_CLS=y
+-CONFIG_NET_CLS_BASIC=m
+-CONFIG_NET_CLS_TCINDEX=m
+-CONFIG_NET_CLS_ROUTE4=m
+-CONFIG_NET_CLS_ROUTE=y
+-CONFIG_NET_CLS_FW=m
+-CONFIG_NET_CLS_U32=m
+-CONFIG_CLS_U32_PERF=y
+-CONFIG_CLS_U32_MARK=y
+-CONFIG_NET_CLS_RSVP=m
+-CONFIG_NET_CLS_RSVP6=m
+-CONFIG_NET_CLS_FLOW=m
+-CONFIG_NET_EMATCH=y
+-CONFIG_NET_EMATCH_STACK=32
+-CONFIG_NET_EMATCH_CMP=m
+-CONFIG_NET_EMATCH_NBYTE=m
+-CONFIG_NET_EMATCH_U32=m
+-CONFIG_NET_EMATCH_META=m
+-CONFIG_NET_EMATCH_TEXT=m
+-CONFIG_NET_CLS_ACT=y
+-CONFIG_NET_ACT_POLICE=m
+-CONFIG_NET_ACT_GACT=m
+-CONFIG_GACT_PROB=y
+-CONFIG_NET_ACT_MIRRED=m
+-CONFIG_NET_ACT_IPT=m
+-CONFIG_NET_ACT_NAT=m
+-CONFIG_NET_ACT_PEDIT=m
+-CONFIG_NET_ACT_SIMP=m
+-CONFIG_NET_ACT_SKBEDIT=m
+-# CONFIG_NET_CLS_IND is not set
+-CONFIG_NET_SCH_FIFO=y
+-CONFIG_DCB=m
+-CONFIG_DCBNL=y
+-
+-#
+-# Network testing
+-#
+-CONFIG_NET_PKTGEN=m
+-CONFIG_NET_TCPPROBE=m
+-CONFIG_HAMRADIO=y
+-
+-#
+-# Packet Radio protocols
+-#
+-CONFIG_AX25=m
+-CONFIG_AX25_DAMA_SLAVE=y
+-CONFIG_NETROM=m
+-CONFIG_ROSE=m
+-
+-#
+-# AX.25 network device drivers
+-#
+-CONFIG_MKISS=m
+-CONFIG_6PACK=m
+-CONFIG_BPQETHER=m
+-CONFIG_BAYCOM_SER_FDX=m
+-CONFIG_BAYCOM_SER_HDX=m
+-CONFIG_BAYCOM_PAR=m
+-CONFIG_YAM=m
+-CONFIG_CAN=m
+-CONFIG_CAN_RAW=m
+-CONFIG_CAN_BCM=m
+-
+-#
+-# CAN Device Drivers
+-#
+-CONFIG_CAN_VCAN=m
+-# CONFIG_CAN_DEBUG_DEVICES is not set
+-CONFIG_IRDA=m
+-
+-#
+-# IrDA protocols
+-#
+-CONFIG_IRLAN=m
+-CONFIG_IRNET=m
+-CONFIG_IRCOMM=m
+-CONFIG_IRDA_ULTRA=y
+-
+-#
+-# IrDA options
+-#
+-CONFIG_IRDA_CACHE_LAST_LSAP=y
+-# CONFIG_IRDA_FAST_RR is not set
+-# CONFIG_IRDA_DEBUG is not set
+-
+-#
+-# Infrared-port device drivers
+-#
+-
+-#
+-# SIR device drivers
+-#
+-CONFIG_IRTTY_SIR=m
+-
+-#
+-# Dongle support
+-#
+-CONFIG_DONGLE=y
+-CONFIG_ESI_DONGLE=m
+-CONFIG_ACTISYS_DONGLE=m
+-CONFIG_TEKRAM_DONGLE=m
+-CONFIG_TOIM3232_DONGLE=m
+-CONFIG_LITELINK_DONGLE=m
+-CONFIG_MA600_DONGLE=m
+-CONFIG_GIRBIL_DONGLE=m
+-CONFIG_MCP2120_DONGLE=m
+-CONFIG_OLD_BELKIN_DONGLE=m
+-CONFIG_ACT200L_DONGLE=m
+-CONFIG_KINGSUN_DONGLE=m
+-CONFIG_KSDAZZLE_DONGLE=m
+-CONFIG_KS959_DONGLE=m
+-
+-#
+-# FIR device drivers
+-#
+-CONFIG_USB_IRDA=m
+-CONFIG_SIGMATEL_FIR=m
+-CONFIG_NSC_FIR=m
+-CONFIG_WINBOND_FIR=m
+-CONFIG_SMC_IRCC_FIR=m
+-CONFIG_ALI_FIR=m
+-CONFIG_VLSI_FIR=m
+-CONFIG_VIA_FIR=m
+-CONFIG_MCS_FIR=m
+-CONFIG_BT=m
+-CONFIG_BT_L2CAP=m
+-CONFIG_BT_SCO=m
+-CONFIG_BT_RFCOMM=m
+-CONFIG_BT_RFCOMM_TTY=y
+-CONFIG_BT_BNEP=m
+-CONFIG_BT_BNEP_MC_FILTER=y
+-CONFIG_BT_BNEP_PROTO_FILTER=y
+-CONFIG_BT_CMTP=m
+-CONFIG_BT_HIDP=m
+-
+-#
+-# Bluetooth device drivers
+-#
+-CONFIG_BT_HCIBTUSB=m
+-CONFIG_BT_HCIBTSDIO=m
+-CONFIG_BT_HCIUART=m
+-CONFIG_BT_HCIUART_H4=y
+-CONFIG_BT_HCIUART_BCSP=y
+-CONFIG_BT_HCIUART_LL=y
+-CONFIG_BT_HCIBCM203X=m
+-CONFIG_BT_HCIBPA10X=m
+-CONFIG_BT_HCIBFUSB=m
+-CONFIG_BT_HCIDTL1=m
+-CONFIG_BT_HCIBT3C=m
+-CONFIG_BT_HCIBLUECARD=m
+-CONFIG_BT_HCIBTUART=m
+-CONFIG_BT_HCIVHCI=m
+-CONFIG_AF_RXRPC=m
+-# CONFIG_AF_RXRPC_DEBUG is not set
+-CONFIG_RXKAD=m
+-CONFIG_FIB_RULES=y
+-
+-#
+-# Wireless
+-#
+-CONFIG_CFG80211=m
+-CONFIG_NL80211=y
+-CONFIG_WIRELESS_EXT=y
+-CONFIG_WIRELESS_EXT_SYSFS=y
+-CONFIG_MAC80211=m
+-
+-#
+-# Rate control algorithm selection
+-#
+-CONFIG_MAC80211_RC_PID=y
+-CONFIG_MAC80211_RC_DEFAULT_PID=y
+-CONFIG_MAC80211_RC_DEFAULT="pid"
+-CONFIG_MAC80211_MESH=y
+-CONFIG_MAC80211_LEDS=y
+-CONFIG_MAC80211_DEBUGFS=y
+-# CONFIG_MAC80211_DEBUG_MENU is not set
+-CONFIG_IEEE80211=m
+-# CONFIG_IEEE80211_DEBUG is not set
+-CONFIG_IEEE80211_CRYPT_WEP=m
+-CONFIG_IEEE80211_CRYPT_CCMP=m
+-CONFIG_IEEE80211_CRYPT_TKIP=m
+-CONFIG_RFKILL=m
+-CONFIG_RFKILL_INPUT=m
+-CONFIG_RFKILL_LEDS=y
+-CONFIG_NET_9P=m
+-CONFIG_NET_9P_VIRTIO=m
+-# CONFIG_NET_9P_DEBUG is not set
+-CONFIG_NETVM=y
+-
+-#
+-# Device Drivers
+-#
+-
+-#
+-# Generic Driver Options
+-#
+-CONFIG_UEVENT_HELPER_PATH=""
+-# CONFIG_STANDALONE is not set
+-CONFIG_PREVENT_FIRMWARE_BUILD=y
+-CONFIG_FW_LOADER=y
+-CONFIG_FIRMWARE_IN_KERNEL=y
+-CONFIG_EXTRA_FIRMWARE=""
+-# CONFIG_DEBUG_DRIVER is not set
+-# CONFIG_DEBUG_DEVRES is not set
+-# CONFIG_SYS_HYPERVISOR is not set
+-CONFIG_CONNECTOR=y
+-CONFIG_PROC_EVENTS=y
+-CONFIG_MTD=m
+-# CONFIG_MTD_DEBUG is not set
+-CONFIG_MTD_CONCAT=m
+-CONFIG_MTD_PARTITIONS=y
+-CONFIG_MTD_REDBOOT_PARTS=m
+-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+-CONFIG_MTD_AR7_PARTS=m
+-
+-#
+-# User Modules And Translation Layers
+-#
+-CONFIG_MTD_CHAR=m
+-CONFIG_MTD_BLKDEVS=m
+-CONFIG_MTD_BLOCK=m
+-# CONFIG_MTD_BLOCK_RO is not set
+-# CONFIG_FTL is not set
+-# CONFIG_NFTL is not set
+-# CONFIG_INFTL is not set
+-CONFIG_RFD_FTL=m
+-# CONFIG_SSFDC is not set
+-CONFIG_MTD_OOPS=m
+-
+-#
+-# RAM/ROM/Flash chip drivers
+-#
+-CONFIG_MTD_CFI=m
+-CONFIG_MTD_JEDECPROBE=m
+-CONFIG_MTD_GEN_PROBE=m
+-CONFIG_MTD_CFI_ADV_OPTIONS=y
+-CONFIG_MTD_CFI_NOSWAP=y
+-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_GEOMETRY is not set
+-CONFIG_MTD_MAP_BANK_WIDTH_1=y
+-CONFIG_MTD_MAP_BANK_WIDTH_2=y
+-CONFIG_MTD_MAP_BANK_WIDTH_4=y
+-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+-CONFIG_MTD_CFI_I1=y
+-CONFIG_MTD_CFI_I2=y
+-# CONFIG_MTD_CFI_I4 is not set
+-# CONFIG_MTD_CFI_I8 is not set
+-# CONFIG_MTD_OTP is not set
+-CONFIG_MTD_CFI_INTELEXT=m
+-CONFIG_MTD_CFI_AMDSTD=m
+-CONFIG_MTD_CFI_STAA=m
+-CONFIG_MTD_CFI_UTIL=m
+-# CONFIG_MTD_RAM is not set
+-# CONFIG_MTD_ROM is not set
+-CONFIG_MTD_ABSENT=m
+-
+-#
+-# Mapping drivers for chip access
+-#
+-CONFIG_MTD_COMPLEX_MAPPINGS=y
+-CONFIG_MTD_PHYSMAP=m
+-CONFIG_MTD_PHYSMAP_START=0x8000000
+-CONFIG_MTD_PHYSMAP_LEN=0x4000000
+-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+-# CONFIG_MTD_SC520CDP is not set
+-# CONFIG_MTD_NETSC520 is not set
+-CONFIG_MTD_TS5500=m
+-# CONFIG_MTD_SBC_GXX is not set
+-CONFIG_MTD_AMD76XROM=m
+-CONFIG_MTD_ICHXROM=m
+-CONFIG_MTD_ESB2ROM=m
+-CONFIG_MTD_CK804XROM=m
+-CONFIG_MTD_SCB2_FLASH=m
+-# CONFIG_MTD_NETtel is not set
+-# CONFIG_MTD_DILNETPC is not set
+-# CONFIG_MTD_L440GX is not set
+-CONFIG_MTD_PCI=m
+-CONFIG_MTD_INTEL_VR_NOR=m
+-# CONFIG_MTD_PLATRAM is not set
+-
+-#
+-# Self-contained MTD device drivers
+-#
+-CONFIG_MTD_PMC551=m
+-CONFIG_MTD_PMC551_BUGFIX=y
+-# CONFIG_MTD_PMC551_DEBUG is not set
+-# CONFIG_MTD_DATAFLASH is not set
+-# CONFIG_MTD_M25P80 is not set
+-CONFIG_MTD_SLRAM=m
+-CONFIG_MTD_PHRAM=m
+-CONFIG_MTD_MTDRAM=m
+-CONFIG_MTDRAM_TOTAL_SIZE=4096
+-CONFIG_MTDRAM_ERASE_SIZE=128
+-CONFIG_MTD_BLOCK2MTD=m
+-
+-#
+-# Disk-On-Chip Device Drivers
+-#
+-CONFIG_MTD_DOC2000=m
+-CONFIG_MTD_DOC2001=m
+-CONFIG_MTD_DOC2001PLUS=m
+-CONFIG_MTD_DOCPROBE=m
+-CONFIG_MTD_DOCECC=m
+-CONFIG_MTD_DOCPROBE_ADVANCED=y
+-CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
+-CONFIG_MTD_DOCPROBE_HIGH=y
+-CONFIG_MTD_DOCPROBE_55AA=y
+-CONFIG_MTD_NAND=m
+-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+-CONFIG_MTD_NAND_ECC_SMC=y
+-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+-CONFIG_MTD_NAND_IDS=m
+-CONFIG_MTD_NAND_DISKONCHIP=m
+-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+-CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
+-CONFIG_MTD_NAND_CAFE=m
+-CONFIG_MTD_NAND_NANDSIM=m
+-CONFIG_MTD_NAND_PLATFORM=m
+-CONFIG_MTD_ALAUDA=m
+-CONFIG_MTD_ONENAND=m
+-# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+-CONFIG_MTD_ONENAND_OTP=y
+-CONFIG_MTD_ONENAND_2X_PROGRAM=y
+-CONFIG_MTD_ONENAND_SIM=m
+-
+-#
+-# UBI - Unsorted block images
+-#
+-CONFIG_MTD_UBI=m
+-CONFIG_MTD_UBI_WL_THRESHOLD=4096
+-CONFIG_MTD_UBI_BEB_RESERVE=1
+-# CONFIG_MTD_UBI_GLUEBI is not set
+-
+-#
+-# UBI debugging options
+-#
+-# CONFIG_MTD_UBI_DEBUG is not set
+-CONFIG_PARPORT=m
+-CONFIG_PARPORT_PC=m
+-CONFIG_PARPORT_SERIAL=m
+-CONFIG_PARPORT_PC_FIFO=y
+-CONFIG_PARPORT_PC_SUPERIO=y
+-CONFIG_PARPORT_PC_PCMCIA=m
+-# CONFIG_PARPORT_GSC is not set
+-CONFIG_PARPORT_AX88796=m
+-CONFIG_PARPORT_1284=y
+-CONFIG_PARPORT_NOT_PC=y
+-CONFIG_PNP=y
+-# CONFIG_PNP_DEBUG is not set
+-
+-#
+-# Protocols
+-#
+-CONFIG_PNPACPI=y
+-CONFIG_BLK_DEV=y
+-CONFIG_BLK_DEV_FD=m
+-CONFIG_PARIDE=m
+-
+-#
+-# Parallel IDE high-level drivers
+-#
+-CONFIG_PARIDE_PD=m
+-CONFIG_PARIDE_PCD=m
+-CONFIG_PARIDE_PF=m
+-CONFIG_PARIDE_PT=m
+-CONFIG_PARIDE_PG=m
+-
+-#
+-# Parallel IDE protocol modules
+-#
+-CONFIG_PARIDE_ATEN=m
+-CONFIG_PARIDE_BPCK=m
+-CONFIG_PARIDE_COMM=m
+-CONFIG_PARIDE_DSTR=m
+-CONFIG_PARIDE_FIT2=m
+-CONFIG_PARIDE_FIT3=m
+-CONFIG_PARIDE_EPAT=m
+-CONFIG_PARIDE_EPATC8=y
+-CONFIG_PARIDE_EPIA=m
+-CONFIG_PARIDE_FRIQ=m
+-CONFIG_PARIDE_FRPW=m
+-CONFIG_PARIDE_KBIC=m
+-CONFIG_PARIDE_KTTI=m
+-CONFIG_PARIDE_ON20=m
+-CONFIG_PARIDE_ON26=m
+-CONFIG_BLK_CPQ_DA=m
+-CONFIG_BLK_CPQ_CISS_DA=m
+-CONFIG_CISS_SCSI_TAPE=y
+-CONFIG_BLK_DEV_DAC960=m
+-CONFIG_BLK_DEV_UMEM=m
+-# CONFIG_BLK_DEV_COW_COMMON is not set
+-CONFIG_BLK_DEV_LOOP=m
+-CONFIG_BLK_DEV_CRYPTOLOOP=m
+-CONFIG_BLK_DEV_NBD=m
+-CONFIG_BLK_DEV_SX8=m
+-# CONFIG_BLK_DEV_UB is not set
+-CONFIG_BLK_DEV_RAM=m
+-CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=128000
+-CONFIG_BLK_DEV_XIP=y
+-CONFIG_CDROM_PKTCDVD=m
+-CONFIG_CDROM_PKTCDVD_BUFFERS=8
+-CONFIG_CDROM_PKTCDVD_WCACHE=y
+-CONFIG_ATA_OVER_ETH=m
+-CONFIG_CIPHER_TWOFISH=m
+-CONFIG_VIRTIO_BLK=m
+-# CONFIG_BLK_DEV_HD is not set
+-CONFIG_MISC_DEVICES=y
+-CONFIG_IBM_ASM=m
+-CONFIG_PHANTOM=m
+-CONFIG_EEPROM_93CX6=m
+-CONFIG_SGI_IOC4=m
+-CONFIG_TIFM_CORE=m
+-CONFIG_TIFM_7XX1=m
+-CONFIG_ACER_WMI=m
+-CONFIG_ASUS_LAPTOP=m
+-CONFIG_FUJITSU_LAPTOP=m
+-# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
+-CONFIG_HP_WMI=m
+-CONFIG_MSI_LAPTOP=m
+-CONFIG_PANASONIC_LAPTOP=m
+-CONFIG_COMPAL_LAPTOP=m
+-CONFIG_SONY_LAPTOP=m
+-CONFIG_SONYPI_COMPAT=y
+-CONFIG_THINKPAD_ACPI=m
+-# CONFIG_THINKPAD_ACPI_DEBUG is not set
+-CONFIG_THINKPAD_ACPI_BAY=y
+-CONFIG_THINKPAD_ACPI_VIDEO=y
+-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+-CONFIG_INTEL_MENLOW=m
+-CONFIG_EEEPC_LAPTOP=m
+-CONFIG_ENCLOSURE_SERVICES=m
+-CONFIG_SGI_XP=m
+-CONFIG_HP_ILO=m
+-CONFIG_SGI_GRU=m
+-# CONFIG_SGI_GRU_DEBUG is not set
+-CONFIG_HAVE_IDE=y
+-CONFIG_IDE=m
+-CONFIG_BLK_DEV_IDE=m
+-
+-#
+-# Please see Documentation/ide/ide.txt for help/info on IDE drives
+-#
+-CONFIG_IDE_TIMINGS=y
+-CONFIG_IDE_ATAPI=y
+-# CONFIG_BLK_DEV_IDE_SATA is not set
+-CONFIG_BLK_DEV_IDEDISK=m
+-CONFIG_IDEDISK_MULTI_MODE=y
+-CONFIG_BLK_DEV_IDECS=m
+-CONFIG_BLK_DEV_DELKIN=m
+-CONFIG_BLK_DEV_IDECD=m
+-CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+-CONFIG_BLK_DEV_IDETAPE=m
+-CONFIG_BLK_DEV_IDEFLOPPY=m
+-CONFIG_BLK_DEV_IDESCSI=m
+-CONFIG_BLK_DEV_IDEACPI=y
+-# CONFIG_IDE_TASK_IOCTL is not set
+-CONFIG_IDE_PROC_FS=y
+-
+-#
+-# IDE chipset support/bugfixes
+-#
+-CONFIG_IDE_GENERIC=m
+-CONFIG_BLK_DEV_PLATFORM=m
+-CONFIG_BLK_DEV_CMD640=m
+-CONFIG_BLK_DEV_CMD640_ENHANCED=y
+-CONFIG_BLK_DEV_IDEPNP=m
+-CONFIG_BLK_DEV_IDEDMA_SFF=y
+-
+-#
+-# PCI IDE chipsets support
+-#
+-CONFIG_BLK_DEV_IDEPCI=y
+-CONFIG_BLK_DEV_OFFBOARD=y
+-CONFIG_BLK_DEV_GENERIC=m
+-# CONFIG_BLK_DEV_OPTI621 is not set
+-CONFIG_BLK_DEV_RZ1000=m
+-CONFIG_BLK_DEV_IDEDMA_PCI=y
+-CONFIG_BLK_DEV_AEC62XX=m
+-CONFIG_BLK_DEV_ALI15X3=m
+-CONFIG_BLK_DEV_AMD74XX=m
+-CONFIG_BLK_DEV_ATIIXP=m
+-CONFIG_BLK_DEV_CMD64X=m
+-CONFIG_BLK_DEV_TRIFLEX=m
+-CONFIG_BLK_DEV_CS5520=m
+-CONFIG_BLK_DEV_CS5530=m
+-CONFIG_BLK_DEV_HPT366=m
+-CONFIG_BLK_DEV_JMICRON=m
+-CONFIG_BLK_DEV_SC1200=m
+-CONFIG_BLK_DEV_PIIX=m
+-CONFIG_BLK_DEV_IT8213=m
+-CONFIG_BLK_DEV_IT821X=m
+-CONFIG_BLK_DEV_NS87415=m
+-CONFIG_BLK_DEV_PDC202XX_OLD=m
+-CONFIG_BLK_DEV_PDC202XX_NEW=m
+-CONFIG_BLK_DEV_SVWKS=m
+-CONFIG_BLK_DEV_SIIMAGE=m
+-CONFIG_BLK_DEV_SIS5513=m
+-CONFIG_BLK_DEV_SLC90E66=m
+-# CONFIG_BLK_DEV_TRM290 is not set
+-CONFIG_BLK_DEV_VIA82CXXX=m
+-# CONFIG_BLK_DEV_TC86C001 is not set
+-CONFIG_BLK_DEV_IDEDMA=y
+-
+-#
+-# SCSI device support
+-#
+-CONFIG_RAID_ATTRS=m
+-CONFIG_SCSI=m
+-CONFIG_SCSI_DMA=y
+-CONFIG_SCSI_TGT=m
+-CONFIG_SCSI_NETLINK=y
+-CONFIG_SCSI_PROC_FS=y
+-
+-#
+-# SCSI support type (disk, tape, CD-ROM)
+-#
+-CONFIG_BLK_DEV_SD=m
+-CONFIG_SD_IOSTATS=y
+-CONFIG_CHR_DEV_ST=m
+-CONFIG_CHR_DEV_OSST=m
+-CONFIG_BLK_DEV_SR=m
+-# CONFIG_BLK_DEV_SR_VENDOR is not set
+-CONFIG_CHR_DEV_SG=m
+-CONFIG_CHR_DEV_SCH=m
+-CONFIG_SCSI_ENCLOSURE=m
+-
+-#
+-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+-#
+-CONFIG_SCSI_MULTI_LUN=y
+-CONFIG_SCSI_CONSTANTS=y
+-CONFIG_SCSI_LOGGING=y
+-# CONFIG_SCSI_SCAN_ASYNC is not set
+-CONFIG_SCSI_WAIT_SCAN=m
+-
+-#
+-# SCSI Transports
+-#
+-CONFIG_SCSI_SPI_ATTRS=m
+-CONFIG_SCSI_FC_ATTRS=m
+-CONFIG_SCSI_FC_TGT_ATTRS=y
+-CONFIG_SCSI_ISCSI_ATTRS=m
+-CONFIG_SCSI_SAS_ATTRS=m
+-CONFIG_SCSI_SAS_LIBSAS=m
+-CONFIG_SCSI_SAS_ATA=y
+-CONFIG_SCSI_SAS_HOST_SMP=y
+-CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+-CONFIG_SCSI_SRP_ATTRS=m
+-CONFIG_SCSI_SRP_TGT_ATTRS=y
+-CONFIG_SCSI_LOWLEVEL=y
+-CONFIG_ISCSI_TCP=m
+-CONFIG_SCSI_CXGB3_ISCSI=m
+-CONFIG_BLK_DEV_3W_XXXX_RAID=m
+-CONFIG_SCSI_3W_9XXX=m
+-CONFIG_SCSI_ACARD=m
+-CONFIG_SCSI_AACRAID=m
+-CONFIG_SCSI_AIC7XXX=m
+-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+-CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+-CONFIG_AIC7XXX_DEBUG_MASK=0
+-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC7XXX_OLD=m
+-CONFIG_SCSI_AIC79XX=m
+-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+-CONFIG_AIC79XX_RESET_DELAY_MS=15000
+-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+-CONFIG_AIC79XX_DEBUG_MASK=0
+-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC94XX=m
+-CONFIG_AIC94XX_DEBUG=y
+-CONFIG_SCSI_DPT_I2O=m
+-CONFIG_SCSI_ADVANSYS=m
+-CONFIG_SCSI_ARCMSR=m
+-CONFIG_SCSI_ARCMSR_AER=y
+-CONFIG_MEGARAID_NEWGEN=y
+-CONFIG_MEGARAID_MM=m
+-CONFIG_MEGARAID_MAILBOX=m
+-CONFIG_MEGARAID_LEGACY=m
+-CONFIG_MEGARAID_SAS=m
+-CONFIG_SCSI_HPTIOP=m
+-CONFIG_SCSI_BUSLOGIC=m
+-CONFIG_LIBFC=m
+-CONFIG_FCOE=m
+-CONFIG_SCSI_DMX3191D=m
+-CONFIG_SCSI_EATA=m
+-CONFIG_SCSI_EATA_TAGGED_QUEUE=y
+-CONFIG_SCSI_EATA_LINKED_COMMANDS=y
+-CONFIG_SCSI_EATA_MAX_TAGS=16
+-CONFIG_SCSI_FUTURE_DOMAIN=m
+-CONFIG_SCSI_GDTH=m
+-CONFIG_SCSI_IPS=m
+-CONFIG_SCSI_INITIO=m
+-# CONFIG_SCSI_INIA100 is not set
+-CONFIG_SCSI_PPA=m
+-CONFIG_SCSI_IMM=m
+-# CONFIG_SCSI_IZIP_EPP16 is not set
+-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+-CONFIG_SCSI_MVSAS=m
+-CONFIG_SCSI_STEX=m
+-CONFIG_SCSI_SYM53C8XX_2=m
+-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+-CONFIG_SCSI_SYM53C8XX_MMIO=y
+-# CONFIG_SCSI_IPR is not set
+-CONFIG_SCSI_QLOGIC_1280=m
+-CONFIG_SCSI_QLA_FC=m
+-CONFIG_SCSI_QLA_ISCSI=m
+-CONFIG_SCSI_LPFC=m
+-CONFIG_SCSI_DC395x=m
+-CONFIG_SCSI_DC390T=m
+-CONFIG_SCSI_DEBUG=m
+-CONFIG_SCSI_SRP=m
+-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+-CONFIG_PCMCIA_FDOMAIN=m
+-CONFIG_PCMCIA_QLOGIC=m
+-CONFIG_PCMCIA_SYM53C500=m
+-CONFIG_SCSI_DH=m
+-CONFIG_SCSI_DH_RDAC=m
+-CONFIG_SCSI_DH_HP_SW=m
+-CONFIG_SCSI_DH_EMC=m
+-CONFIG_SCSI_DH_ALUA=m
+-CONFIG_ATA=m
+-# CONFIG_ATA_NONSTANDARD is not set
+-CONFIG_ATA_ACPI=y
+-CONFIG_SATA_PMP=y
+-CONFIG_SATA_AHCI=m
+-CONFIG_SATA_SIL24=m
+-CONFIG_ATA_SFF=y
+-CONFIG_SATA_SVW=m
+-CONFIG_ATA_PIIX=m
+-CONFIG_SATA_MV=m
+-CONFIG_SATA_NV=m
+-CONFIG_PDC_ADMA=m
+-CONFIG_SATA_QSTOR=m
+-CONFIG_SATA_PROMISE=m
+-CONFIG_SATA_SX4=m
+-CONFIG_SATA_SIL=m
+-CONFIG_SATA_SIS=m
+-CONFIG_SATA_ULI=m
+-CONFIG_SATA_VIA=m
+-CONFIG_SATA_VITESSE=m
+-CONFIG_SATA_INIC162X=m
+-CONFIG_PATA_ACPI=m
+-CONFIG_PATA_ALI=m
+-CONFIG_PATA_AMD=m
+-CONFIG_PATA_ARTOP=m
+-CONFIG_PATA_ATIIXP=m
+-CONFIG_PATA_CMD640_PCI=m
+-CONFIG_PATA_CMD64X=m
+-CONFIG_PATA_CS5520=m
+-CONFIG_PATA_CS5530=m
+-CONFIG_PATA_CYPRESS=m
+-CONFIG_PATA_EFAR=m
+-CONFIG_ATA_GENERIC=m
+-CONFIG_PATA_HPT366=m
+-CONFIG_PATA_HPT37X=m
+-CONFIG_PATA_HPT3X2N=m
+-CONFIG_PATA_HPT3X3=m
+-# CONFIG_PATA_HPT3X3_DMA is not set
+-CONFIG_PATA_IT821X=m
+-CONFIG_PATA_IT8213=m
+-CONFIG_PATA_JMICRON=m
+-CONFIG_PATA_TRIFLEX=m
+-CONFIG_PATA_MARVELL=m
+-CONFIG_PATA_MPIIX=m
+-CONFIG_PATA_OLDPIIX=m
+-CONFIG_PATA_NETCELL=m
+-CONFIG_PATA_NINJA32=m
+-CONFIG_PATA_NS87410=m
+-CONFIG_PATA_NS87415=m
+-CONFIG_PATA_OPTI=m
+-CONFIG_PATA_OPTIDMA=m
+-CONFIG_PATA_PCMCIA=m
+-CONFIG_PATA_PDC_OLD=m
+-CONFIG_PATA_RADISYS=m
+-CONFIG_PATA_RZ1000=m
+-CONFIG_PATA_SC1200=m
+-CONFIG_PATA_SERVERWORKS=m
+-CONFIG_PATA_PDC2027X=m
+-CONFIG_PATA_SIL680=m
+-CONFIG_PATA_SIS=m
+-CONFIG_PATA_VIA=m
+-CONFIG_PATA_WINBOND=m
+-CONFIG_PATA_SCH=m
+-CONFIG_MD=y
+-CONFIG_BLK_DEV_MD=y
+-CONFIG_MD_LINEAR=m
+-CONFIG_MD_RAID0=m
+-CONFIG_MD_RAID1=m
+-CONFIG_MD_RAID10=m
+-CONFIG_MD_RAID456=m
+-CONFIG_MD_RAID5_RESHAPE=y
+-CONFIG_MD_MULTIPATH=m
+-CONFIG_MD_FAULTY=m
+-CONFIG_BLK_DEV_DM=m
+-# CONFIG_DM_DEBUG is not set
+-CONFIG_DM_CRYPT=m
+-CONFIG_DM_SNAPSHOT=m
+-CONFIG_DM_MIRROR=m
+-CONFIG_DM_ZERO=m
+-CONFIG_DM_MULTIPATH=m
+-CONFIG_DM_DELAY=m
+-CONFIG_DM_RAID45=m
+-CONFIG_DM_UEVENT=y
+-CONFIG_FUSION=y
+-CONFIG_FUSION_SPI=m
+-CONFIG_FUSION_FC=m
+-CONFIG_FUSION_SAS=m
+-CONFIG_FUSION_MAX_SGE=128
+-CONFIG_FUSION_MAX_FC_SGE=256
+-CONFIG_FUSION_CTL=m
+-CONFIG_FUSION_LAN=m
+-# CONFIG_FUSION_LOGGING is not set
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-
+-#
+-# Enable only one of the two stacks, unless you know what you are doing
+-#
+-# CONFIG_FIREWIRE is not set
+-CONFIG_IEEE1394=m
+-CONFIG_IEEE1394_OHCI1394=m
+-CONFIG_IEEE1394_PCILYNX=m
+-CONFIG_IEEE1394_SBP2=m
+-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+-CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+-CONFIG_IEEE1394_ETH1394=m
+-CONFIG_IEEE1394_RAWIO=m
+-CONFIG_IEEE1394_VIDEO1394=m
+-CONFIG_IEEE1394_DV1394=m
+-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+-CONFIG_I2O=m
+-CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+-CONFIG_I2O_EXT_ADAPTEC=y
+-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
+-CONFIG_I2O_CONFIG=m
+-CONFIG_I2O_CONFIG_OLD_IOCTL=y
+-CONFIG_I2O_BUS=m
+-CONFIG_I2O_BLOCK=m
+-CONFIG_I2O_SCSI=m
+-CONFIG_I2O_PROC=m
+-# CONFIG_MACINTOSH_DRIVERS is not set
+-CONFIG_NETDEVICES=y
+-CONFIG_IFB=m
+-CONFIG_DUMMY=m
+-CONFIG_BONDING=m
+-CONFIG_MACVLAN=m
+-CONFIG_EQUALIZER=m
+-CONFIG_TUN=m
+-CONFIG_VETH=m
+-# CONFIG_NET_SB1000 is not set
+-CONFIG_ARCNET=m
+-CONFIG_ARCNET_1201=m
+-CONFIG_ARCNET_1051=m
+-CONFIG_ARCNET_RAW=m
+-CONFIG_ARCNET_CAP=m
+-CONFIG_ARCNET_COM90xx=m
+-CONFIG_ARCNET_COM90xxIO=m
+-CONFIG_ARCNET_RIM_I=m
+-# CONFIG_ARCNET_COM20020 is not set
+-CONFIG_PHYLIB=m
+-
+-#
+-# MII PHY device drivers
+-#
+-CONFIG_MARVELL_PHY=m
+-CONFIG_DAVICOM_PHY=m
+-CONFIG_QSEMI_PHY=m
+-CONFIG_LXT_PHY=m
+-CONFIG_CICADA_PHY=m
+-CONFIG_VITESSE_PHY=m
+-CONFIG_SMSC_PHY=m
+-CONFIG_BROADCOM_PHY=m
+-CONFIG_ICPLUS_PHY=m
+-CONFIG_REALTEK_PHY=m
+-CONFIG_MDIO_BITBANG=m
+-CONFIG_NET_ETHERNET=y
+-CONFIG_MII=m
+-CONFIG_HAPPYMEAL=m
+-CONFIG_SUNGEM=m
+-CONFIG_CASSINI=m
+-CONFIG_NET_VENDOR_3COM=y
+-CONFIG_VORTEX=m
+-CONFIG_TYPHOON=m
+-CONFIG_ENC28J60=m
+-# CONFIG_ENC28J60_WRITEVERIFY is not set
+-CONFIG_NET_TULIP=y
+-CONFIG_DE2104X=m
+-CONFIG_TULIP=m
+-# CONFIG_TULIP_MWI is not set
+-# CONFIG_TULIP_MMIO is not set
+-CONFIG_TULIP_NAPI=y
+-CONFIG_TULIP_NAPI_HW_MITIGATION=y
+-CONFIG_DE4X5=m
+-CONFIG_WINBOND_840=m
+-CONFIG_DM9102=m
+-CONFIG_ULI526X=m
+-CONFIG_PCMCIA_XIRCOM=m
+-CONFIG_HP100=m
+-# CONFIG_IBM_NEW_EMAC_ZMII is not set
+-# CONFIG_IBM_NEW_EMAC_RGMII is not set
+-# CONFIG_IBM_NEW_EMAC_TAH is not set
+-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+-CONFIG_NET_PCI=y
+-CONFIG_PCNET32=m
+-CONFIG_AMD8111_ETH=m
+-CONFIG_ADAPTEC_STARFIRE=m
+-CONFIG_B44=m
+-CONFIG_B44_PCI_AUTOSELECT=y
+-CONFIG_B44_PCICORE_AUTOSELECT=y
+-CONFIG_B44_PCI=y
+-CONFIG_FORCEDETH=m
+-CONFIG_FORCEDETH_NAPI=y
+-CONFIG_EEPRO100=m
+-CONFIG_E100=m
+-CONFIG_FEALNX=m
+-CONFIG_NATSEMI=m
+-CONFIG_NE2K_PCI=m
+-CONFIG_8139CP=m
+-CONFIG_8139TOO=m
+-# CONFIG_8139TOO_PIO is not set
+-# CONFIG_8139TOO_TUNE_TWISTER is not set
+-CONFIG_8139TOO_8129=y
+-# CONFIG_8139_OLD_RX_RESET is not set
+-CONFIG_R6040=m
+-CONFIG_SIS900=m
+-CONFIG_EPIC100=m
+-CONFIG_SUNDANCE=m
+-# CONFIG_SUNDANCE_MMIO is not set
+-CONFIG_TLAN=m
+-CONFIG_VIA_RHINE=m
+-# CONFIG_VIA_RHINE_MMIO is not set
+-CONFIG_SC92031=m
+-# CONFIG_NET_POCKET is not set
+-CONFIG_ATL2=m
+-CONFIG_NETDEV_1000=y
+-CONFIG_ACENIC=m
+-# CONFIG_ACENIC_OMIT_TIGON_I is not set
+-CONFIG_DL2K=m
+-CONFIG_E1000=m
+-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+-CONFIG_E1000E=m
+-CONFIG_IP1000=m
+-CONFIG_IGB=m
+-CONFIG_IGB_LRO=y
+-CONFIG_NS83820=m
+-CONFIG_HAMACHI=m
+-CONFIG_YELLOWFIN=m
+-CONFIG_R8169=m
+-CONFIG_R8169_VLAN=y
+-CONFIG_SIS190=m
+-CONFIG_SKGE=m
+-# CONFIG_SKGE_DEBUG is not set
+-CONFIG_SKY2=m
+-# CONFIG_SKY2_DEBUG is not set
+-CONFIG_VIA_VELOCITY=m
+-CONFIG_TIGON3=m
+-CONFIG_BNX2=m
+-CONFIG_QLA3XXX=m
+-CONFIG_ATL1=m
+-CONFIG_ATL1E=m
+-CONFIG_NETDEV_10000=y
+-CONFIG_CHELSIO_T1=m
+-CONFIG_CHELSIO_T1_1G=y
+-CONFIG_CHELSIO_T3=m
+-CONFIG_IXGBE=m
+-CONFIG_IXGBE_LRO=y
+-CONFIG_IXGBE_DCB=y
+-CONFIG_IXGB=m
+-CONFIG_S2IO=m
+-CONFIG_MYRI10GE=m
+-CONFIG_NETXEN_NIC=m
+-CONFIG_NIU=m
+-CONFIG_MLX4_CORE=m
+-CONFIG_MLX4_DEBUG=y
+-CONFIG_TEHUTI=m
+-CONFIG_BNX2X=m
+-CONFIG_SFC=m
+-# CONFIG_SFC_RESOURCE is not set
+-CONFIG_TR=y
+-CONFIG_IBMOL=m
+-CONFIG_3C359=m
+-CONFIG_TMS380TR=m
+-CONFIG_TMSPCI=m
+-CONFIG_ABYSS=m
+-
+-#
+-# Wireless LAN
+-#
+-CONFIG_WLAN_PRE80211=y
+-CONFIG_STRIP=m
+-CONFIG_PCMCIA_WAVELAN=m
+-CONFIG_PCMCIA_NETWAVE=m
+-CONFIG_WLAN_80211=y
+-CONFIG_PCMCIA_RAYCS=m
+-CONFIG_IPW2100=m
+-CONFIG_IPW2100_MONITOR=y
+-# CONFIG_IPW2100_DEBUG is not set
+-CONFIG_IPW2200=m
+-CONFIG_IPW2200_MONITOR=y
+-CONFIG_IPW2200_RADIOTAP=y
+-CONFIG_IPW2200_PROMISCUOUS=y
+-CONFIG_IPW2200_QOS=y
+-# CONFIG_IPW2200_DEBUG is not set
+-CONFIG_LIBERTAS=m
+-CONFIG_LIBERTAS_USB=m
+-CONFIG_LIBERTAS_CS=m
+-CONFIG_LIBERTAS_SDIO=m
+-# CONFIG_LIBERTAS_DEBUG is not set
+-CONFIG_AIRO=m
+-CONFIG_HERMES=m
+-CONFIG_PLX_HERMES=m
+-CONFIG_TMD_HERMES=m
+-CONFIG_NORTEL_HERMES=m
+-CONFIG_PCI_HERMES=m
+-CONFIG_PCMCIA_HERMES=m
+-CONFIG_PCMCIA_SPECTRUM=m
+-CONFIG_ATMEL=m
+-CONFIG_PCI_ATMEL=m
+-CONFIG_PCMCIA_ATMEL=m
+-CONFIG_AIRO_CS=m
+-CONFIG_PCMCIA_WL3501=m
+-CONFIG_PRISM54=m
+-CONFIG_USB_ZD1201=m
+-CONFIG_USB_NET_RNDIS_WLAN=m
+-CONFIG_RTL8180=m
+-CONFIG_RTL8187=m
+-CONFIG_ADM8211=m
+-CONFIG_MAC80211_HWSIM=m
+-CONFIG_P54_COMMON=m
+-CONFIG_P54_USB=m
+-CONFIG_P54_PCI=m
+-CONFIG_ATH5K=m
+-# CONFIG_ATH5K_DEBUG is not set
+-CONFIG_ATH9K=m
+-CONFIG_IWLWIFI=m
+-CONFIG_IWLCORE=m
+-CONFIG_IWLWIFI_LEDS=y
+-CONFIG_IWLWIFI_RFKILL=y
+-# CONFIG_IWLWIFI_DEBUG is not set
+-CONFIG_IWLAGN=m
+-CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWLAGN_LEDS=y
+-CONFIG_IWL4965=y
+-CONFIG_IWL5000=y
+-CONFIG_IWL3945=m
+-CONFIG_IWL3945_RFKILL=y
+-CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWL3945_LEDS=y
+-# CONFIG_IWL3945_DEBUG is not set
+-CONFIG_HOSTAP=m
+-CONFIG_HOSTAP_FIRMWARE=y
+-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+-CONFIG_HOSTAP_PLX=m
+-CONFIG_HOSTAP_PCI=m
+-CONFIG_HOSTAP_CS=m
+-CONFIG_B43=m
+-CONFIG_B43_PCI_AUTOSELECT=y
+-CONFIG_B43_PCICORE_AUTOSELECT=y
+-CONFIG_B43_PCMCIA=y
+-CONFIG_B43_PIO=y
+-CONFIG_B43_LEDS=y
+-CONFIG_B43_RFKILL=y
+-# CONFIG_B43_DEBUG is not set
+-CONFIG_B43LEGACY=m
+-CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+-CONFIG_B43LEGACY_LEDS=y
+-CONFIG_B43LEGACY_RFKILL=y
+-# CONFIG_B43LEGACY_DEBUG is not set
+-CONFIG_B43LEGACY_DMA=y
+-CONFIG_B43LEGACY_PIO=y
+-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+-# CONFIG_B43LEGACY_DMA_MODE is not set
+-# CONFIG_B43LEGACY_PIO_MODE is not set
+-CONFIG_ZD1211RW=m
+-# CONFIG_ZD1211RW_DEBUG is not set
+-CONFIG_RT2X00=m
+-CONFIG_RT2X00_LIB=m
+-CONFIG_RT2X00_LIB_PCI=m
+-CONFIG_RT2X00_LIB_USB=m
+-CONFIG_RT2X00_LIB_FIRMWARE=y
+-CONFIG_RT2X00_LIB_RFKILL=y
+-CONFIG_RT2X00_LIB_LEDS=y
+-CONFIG_RT2400PCI=m
+-CONFIG_RT2400PCI_RFKILL=y
+-CONFIG_RT2400PCI_LEDS=y
+-CONFIG_RT2500PCI=m
+-CONFIG_RT2500PCI_RFKILL=y
+-CONFIG_RT2500PCI_LEDS=y
+-CONFIG_RT61PCI=m
+-CONFIG_RT61PCI_RFKILL=y
+-CONFIG_RT61PCI_LEDS=y
+-CONFIG_RT2500USB=m
+-CONFIG_RT2500USB_LEDS=y
+-CONFIG_RT73USB=m
+-CONFIG_RT73USB_LEDS=y
+-# CONFIG_RT2X00_LIB_DEBUGFS is not set
+-# CONFIG_RT2X00_DEBUG is not set
+-
+-#
+-# USB Network Adapters
+-#
+-CONFIG_USB_CATC=m
+-CONFIG_USB_KAWETH=m
+-CONFIG_USB_PEGASUS=m
+-CONFIG_USB_RTL8150=m
+-CONFIG_USB_USBNET=m
+-CONFIG_USB_NET_AX8817X=m
+-CONFIG_USB_NET_CDCETHER=m
+-CONFIG_USB_NET_DM9601=m
+-CONFIG_USB_NET_GL620A=m
+-CONFIG_USB_NET_NET1080=m
+-CONFIG_USB_NET_PLUSB=m
+-CONFIG_USB_NET_MCS7830=m
+-CONFIG_USB_NET_RNDIS_HOST=m
+-CONFIG_USB_NET_CDC_SUBSET=m
+-CONFIG_USB_ALI_M5632=y
+-CONFIG_USB_AN2720=y
+-CONFIG_USB_BELKIN=y
+-CONFIG_USB_ARMLINUX=y
+-CONFIG_USB_EPSON2888=y
+-CONFIG_USB_KC2190=y
+-CONFIG_USB_NET_ZAURUS=m
+-CONFIG_USB_HSO=m
+-CONFIG_NET_PCMCIA=y
+-CONFIG_PCMCIA_3C589=m
+-CONFIG_PCMCIA_3C574=m
+-CONFIG_PCMCIA_FMVJ18X=m
+-CONFIG_PCMCIA_PCNET=m
+-CONFIG_PCMCIA_NMCLAN=m
+-CONFIG_PCMCIA_SMC91C92=m
+-CONFIG_PCMCIA_XIRC2PS=m
+-CONFIG_PCMCIA_AXNET=m
+-CONFIG_WAN=y
+-CONFIG_LANMEDIA=m
+-CONFIG_HDLC=m
+-CONFIG_HDLC_RAW=m
+-CONFIG_HDLC_RAW_ETH=m
+-CONFIG_HDLC_CISCO=m
+-CONFIG_HDLC_FR=m
+-CONFIG_HDLC_PPP=m
+-CONFIG_HDLC_X25=m
+-CONFIG_PCI200SYN=m
+-CONFIG_WANXL=m
+-# CONFIG_PC300 is not set
+-CONFIG_PC300TOO=m
+-CONFIG_FARSYNC=m
+-# CONFIG_DSCC4 is not set
+-CONFIG_DLCI=m
+-CONFIG_DLCI_MAX=8
+-# CONFIG_WAN_ROUTER_DRIVERS is not set
+-CONFIG_LAPBETHER=m
+-CONFIG_X25_ASY=m
+-# CONFIG_SBNI is not set
+-CONFIG_ATM_DRIVERS=y
+-CONFIG_ATM_DUMMY=m
+-CONFIG_ATM_TCP=m
+-CONFIG_ATM_LANAI=m
+-CONFIG_ATM_ENI=m
+-# CONFIG_ATM_ENI_DEBUG is not set
+-CONFIG_ATM_ENI_TUNE_BURST=y
+-# CONFIG_ATM_ENI_BURST_TX_16W is not set
+-CONFIG_ATM_ENI_BURST_TX_8W=y
+-CONFIG_ATM_ENI_BURST_TX_4W=y
+-CONFIG_ATM_ENI_BURST_TX_2W=y
+-# CONFIG_ATM_ENI_BURST_RX_16W is not set
+-# CONFIG_ATM_ENI_BURST_RX_8W is not set
+-CONFIG_ATM_ENI_BURST_RX_4W=y
+-CONFIG_ATM_ENI_BURST_RX_2W=y
+-CONFIG_ATM_FIRESTREAM=m
+-CONFIG_ATM_ZATM=m
+-# CONFIG_ATM_ZATM_DEBUG is not set
+-CONFIG_ATM_IDT77252=m
+-# CONFIG_ATM_IDT77252_DEBUG is not set
+-# CONFIG_ATM_IDT77252_RCV_ALL is not set
+-CONFIG_ATM_IDT77252_USE_SUNI=y
+-CONFIG_ATM_AMBASSADOR=m
+-# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+-CONFIG_ATM_HORIZON=m
+-# CONFIG_ATM_HORIZON_DEBUG is not set
+-CONFIG_ATM_IA=m
+-# CONFIG_ATM_IA_DEBUG is not set
+-CONFIG_ATM_FORE200E=m
+-CONFIG_ATM_FORE200E_USE_TASKLET=y
+-CONFIG_ATM_FORE200E_TX_RETRY=16
+-CONFIG_ATM_FORE200E_DEBUG=0
+-CONFIG_ATM_HE=m
+-CONFIG_ATM_HE_USE_SUNI=y
+-CONFIG_FDDI=y
+-# CONFIG_DEFXX is not set
+-CONFIG_SKFP=m
+-CONFIG_HIPPI=y
+-CONFIG_ROADRUNNER=m
+-CONFIG_ROADRUNNER_LARGE_RINGS=y
+-CONFIG_PLIP=m
+-CONFIG_PPP=m
+-CONFIG_PPP_MULTILINK=y
+-CONFIG_PPP_FILTER=y
+-CONFIG_PPP_ASYNC=m
+-CONFIG_PPP_SYNC_TTY=m
+-CONFIG_PPP_DEFLATE=m
+-CONFIG_PPP_BSDCOMP=m
+-CONFIG_PPP_MPPE=m
+-CONFIG_PPPOE=m
+-CONFIG_PPPOATM=m
+-CONFIG_PPPOL2TP=m
+-CONFIG_SLIP=m
+-CONFIG_SLIP_COMPRESSED=y
+-CONFIG_SLHC=m
+-CONFIG_SLIP_SMART=y
+-CONFIG_SLIP_MODE_SLIP6=y
+-CONFIG_NET_FC=y
+-CONFIG_NETCONSOLE=m
+-CONFIG_NETCONSOLE_DYNAMIC=y
+-CONFIG_NETPOLL=y
+-CONFIG_NETPOLL_TRAP=y
+-CONFIG_NET_POLL_CONTROLLER=y
+-CONFIG_VIRTIO_NET=m
+-CONFIG_ISDN=y
+-CONFIG_MISDN=m
+-CONFIG_MISDN_DSP=m
+-CONFIG_MISDN_L1OIP=m
+-
+-#
+-# mISDN hardware drivers
+-#
+-CONFIG_MISDN_HFCPCI=m
+-CONFIG_MISDN_HFCMULTI=m
+-CONFIG_ISDN_I4L=m
+-CONFIG_ISDN_PPP=y
+-CONFIG_ISDN_PPP_VJ=y
+-CONFIG_ISDN_MPP=y
+-CONFIG_IPPP_FILTER=y
+-CONFIG_ISDN_PPP_BSDCOMP=m
+-CONFIG_ISDN_AUDIO=y
+-CONFIG_ISDN_TTY_FAX=y
+-CONFIG_ISDN_X25=y
+-
+-#
+-# ISDN feature submodules
+-#
+-CONFIG_ISDN_DIVERSION=m
+-
+-#
+-# ISDN4Linux hardware drivers
+-#
+-
+-#
+-# Passive cards
+-#
+-CONFIG_ISDN_DRV_HISAX=m
+-
+-#
+-# D-channel protocol features
+-#
+-CONFIG_HISAX_EURO=y
+-CONFIG_DE_AOC=y
+-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+-# CONFIG_HISAX_NO_LLC is not set
+-# CONFIG_HISAX_NO_KEYPAD is not set
+-CONFIG_HISAX_1TR6=y
+-CONFIG_HISAX_NI1=y
+-CONFIG_HISAX_MAX_CARDS=8
+-
+-#
+-# HiSax supported cards
+-#
+-CONFIG_HISAX_16_3=y
+-CONFIG_HISAX_TELESPCI=y
+-CONFIG_HISAX_S0BOX=y
+-CONFIG_HISAX_FRITZPCI=y
+-CONFIG_HISAX_AVM_A1_PCMCIA=y
+-CONFIG_HISAX_ELSA=y
+-CONFIG_HISAX_DIEHLDIVA=y
+-CONFIG_HISAX_SEDLBAUER=y
+-CONFIG_HISAX_NETJET=y
+-CONFIG_HISAX_NETJET_U=y
+-CONFIG_HISAX_NICCY=y
+-CONFIG_HISAX_BKM_A4T=y
+-CONFIG_HISAX_SCT_QUADRO=y
+-CONFIG_HISAX_GAZEL=y
+-CONFIG_HISAX_HFC_PCI=y
+-CONFIG_HISAX_W6692=y
+-CONFIG_HISAX_HFC_SX=y
+-CONFIG_HISAX_ENTERNOW_PCI=y
+-CONFIG_HISAX_DEBUG=y
+-
+-#
+-# HiSax PCMCIA card service modules
+-#
+-CONFIG_HISAX_SEDLBAUER_CS=m
+-CONFIG_HISAX_ELSA_CS=m
+-CONFIG_HISAX_AVM_A1_CS=m
+-CONFIG_HISAX_TELES_CS=m
+-
+-#
+-# HiSax sub driver modules
+-#
+-CONFIG_HISAX_ST5481=m
+-CONFIG_HISAX_HFCUSB=m
+-CONFIG_HISAX_HFC4S8S=m
+-CONFIG_HISAX_FRITZ_PCIPNP=m
+-CONFIG_HISAX_HDLC=y
+-
+-#
+-# Active cards
+-#
+-CONFIG_HYSDN=m
+-CONFIG_HYSDN_CAPI=y
+-CONFIG_ISDN_DRV_GIGASET=m
+-CONFIG_GIGASET_BASE=m
+-CONFIG_GIGASET_M105=m
+-CONFIG_GIGASET_M101=m
+-# CONFIG_GIGASET_DEBUG is not set
+-CONFIG_GIGASET_UNDOCREQ=y
+-CONFIG_ISDN_CAPI=m
+-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+-CONFIG_CAPI_TRACE=y
+-CONFIG_ISDN_CAPI_MIDDLEWARE=y
+-CONFIG_ISDN_CAPI_CAPI20=m
+-CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+-CONFIG_ISDN_CAPI_CAPIFS=m
+-CONFIG_ISDN_CAPI_CAPIDRV=m
+-
+-#
+-# CAPI hardware drivers
+-#
+-CONFIG_CAPI_AVM=y
+-CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+-CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+-CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_C4=m
+-# CONFIG_CAPI_EICON is not set
+-CONFIG_PHONE=m
+-CONFIG_PHONE_IXJ=m
+-CONFIG_PHONE_IXJ_PCMCIA=m
+-
+-#
+-# Input device support
+-#
+-CONFIG_INPUT=y
+-CONFIG_INPUT_FF_MEMLESS=m
+-CONFIG_INPUT_POLLDEV=m
+-
+-#
+-# Userland interfaces
+-#
+-CONFIG_INPUT_MOUSEDEV=y
+-CONFIG_INPUT_MOUSEDEV_PSAUX=y
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+-CONFIG_INPUT_JOYDEV=m
+-CONFIG_INPUT_EVDEV=y
+-# CONFIG_INPUT_EVBUG is not set
+-
+-#
+-# Input Device Drivers
+-#
+-CONFIG_INPUT_KEYBOARD=y
+-CONFIG_KEYBOARD_ATKBD=y
+-CONFIG_KEYBOARD_SUNKBD=m
+-# CONFIG_KEYBOARD_LKKBD is not set
+-CONFIG_KEYBOARD_XTKBD=m
+-CONFIG_KEYBOARD_NEWTON=m
+-# CONFIG_KEYBOARD_STOWAWAY is not set
+-CONFIG_KEYBOARD_GPIO=m
+-CONFIG_INPUT_MOUSE=y
+-CONFIG_MOUSE_PS2=y
+-CONFIG_MOUSE_PS2_ALPS=y
+-CONFIG_MOUSE_PS2_LOGIPS2PP=y
+-CONFIG_MOUSE_PS2_SYNAPTICS=y
+-CONFIG_MOUSE_PS2_LIFEBOOK=y
+-CONFIG_MOUSE_PS2_TRACKPOINT=y
+-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+-CONFIG_MOUSE_SERIAL=m
+-CONFIG_MOUSE_APPLETOUCH=m
+-CONFIG_MOUSE_BCM5974=m
+-# CONFIG_MOUSE_VSXXXAA is not set
+-CONFIG_MOUSE_GPIO=m
+-CONFIG_INPUT_JOYSTICK=y
+-CONFIG_JOYSTICK_ANALOG=m
+-CONFIG_JOYSTICK_A3D=m
+-CONFIG_JOYSTICK_ADI=m
+-CONFIG_JOYSTICK_COBRA=m
+-CONFIG_JOYSTICK_GF2K=m
+-CONFIG_JOYSTICK_GRIP=m
+-CONFIG_JOYSTICK_GRIP_MP=m
+-CONFIG_JOYSTICK_GUILLEMOT=m
+-CONFIG_JOYSTICK_INTERACT=m
+-CONFIG_JOYSTICK_SIDEWINDER=m
+-CONFIG_JOYSTICK_TMDC=m
+-CONFIG_JOYSTICK_IFORCE=m
+-CONFIG_JOYSTICK_IFORCE_USB=y
+-CONFIG_JOYSTICK_IFORCE_232=y
+-CONFIG_JOYSTICK_WARRIOR=m
+-CONFIG_JOYSTICK_MAGELLAN=m
+-CONFIG_JOYSTICK_SPACEORB=m
+-CONFIG_JOYSTICK_SPACEBALL=m
+-CONFIG_JOYSTICK_STINGER=m
+-CONFIG_JOYSTICK_TWIDJOY=m
+-CONFIG_JOYSTICK_ZHENHUA=m
+-CONFIG_JOYSTICK_DB9=m
+-CONFIG_JOYSTICK_GAMECON=m
+-CONFIG_JOYSTICK_TURBOGRAFX=m
+-CONFIG_JOYSTICK_JOYDUMP=m
+-CONFIG_JOYSTICK_XPAD=m
+-CONFIG_JOYSTICK_XPAD_FF=y
+-CONFIG_JOYSTICK_XPAD_LEDS=y
+-CONFIG_INPUT_TABLET=y
+-CONFIG_TABLET_USB_ACECAD=m
+-CONFIG_TABLET_USB_AIPTEK=m
+-CONFIG_TABLET_USB_GTCO=m
+-CONFIG_TABLET_USB_KBTAB=m
+-CONFIG_TABLET_USB_WACOM=m
+-CONFIG_INPUT_TOUCHSCREEN=y
+-CONFIG_TOUCHSCREEN_ADS7846=m
+-CONFIG_TOUCHSCREEN_FUJITSU=m
+-CONFIG_TOUCHSCREEN_GUNZE=m
+-CONFIG_TOUCHSCREEN_ELO=m
+-CONFIG_TOUCHSCREEN_ELOUSB=m
+-CONFIG_TOUCHSCREEN_MTOUCH=m
+-CONFIG_TOUCHSCREEN_INEXIO=m
+-CONFIG_TOUCHSCREEN_MK712=m
+-CONFIG_TOUCHSCREEN_PENMOUNT=m
+-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+-CONFIG_TOUCHSCREEN_TOUCHWIN=m
+-CONFIG_TOUCHSCREEN_UCB1400=m
+-CONFIG_TOUCHSCREEN_WM97XX=m
+-CONFIG_TOUCHSCREEN_WM9705=y
+-CONFIG_TOUCHSCREEN_WM9712=y
+-CONFIG_TOUCHSCREEN_WM9713=y
+-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+-CONFIG_TOUCHSCREEN_USB_EGALAX=y
+-CONFIG_TOUCHSCREEN_USB_PANJIT=y
+-CONFIG_TOUCHSCREEN_USB_3M=y
+-CONFIG_TOUCHSCREEN_USB_ITM=y
+-CONFIG_TOUCHSCREEN_USB_ETURBO=y
+-CONFIG_TOUCHSCREEN_USB_GUNZE=y
+-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+-CONFIG_TOUCHSCREEN_USB_GOTOP=y
+-CONFIG_TOUCHSCREEN_TOUCHIT213=m
+-CONFIG_INPUT_MISC=y
+-CONFIG_INPUT_PCSPKR=m
+-CONFIG_INPUT_APANEL=m
+-CONFIG_INPUT_ATLAS_BTNS=m
+-CONFIG_INPUT_ATI_REMOTE=m
+-CONFIG_INPUT_ATI_REMOTE2=m
+-CONFIG_INPUT_KEYSPAN_REMOTE=m
+-CONFIG_INPUT_POWERMATE=m
+-CONFIG_INPUT_YEALINK=m
+-CONFIG_INPUT_UINPUT=m
+-
+-#
+-# Hardware I/O ports
+-#
+-CONFIG_SERIO=y
+-CONFIG_SERIO_I8042=y
+-CONFIG_SERIO_SERPORT=m
+-CONFIG_SERIO_CT82C710=m
+-CONFIG_SERIO_PARKBD=m
+-CONFIG_SERIO_PCIPS2=m
+-CONFIG_SERIO_LIBPS2=y
+-CONFIG_SERIO_RAW=m
+-CONFIG_GAMEPORT=m
+-CONFIG_GAMEPORT_NS558=m
+-CONFIG_GAMEPORT_L4=m
+-CONFIG_GAMEPORT_EMU10K1=m
+-CONFIG_GAMEPORT_FM801=m
+-
+-#
+-# Character devices
+-#
+-CONFIG_VT=y
+-CONFIG_CONSOLE_TRANSLATIONS=y
+-CONFIG_VT_CONSOLE=y
+-CONFIG_HW_CONSOLE=y
+-CONFIG_VT_HW_CONSOLE_BINDING=y
+-CONFIG_DEVKMEM=y
+-CONFIG_SERIAL_NONSTANDARD=y
+-CONFIG_COMPUTONE=m
+-CONFIG_ROCKETPORT=m
+-CONFIG_CYCLADES=m
+-# CONFIG_CYZ_INTR is not set
+-CONFIG_DIGIEPCA=m
+-CONFIG_MOXA_INTELLIO=m
+-CONFIG_MOXA_SMARTIO=m
+-CONFIG_ISI=m
+-CONFIG_SYNCLINK=m
+-CONFIG_SYNCLINKMP=m
+-CONFIG_SYNCLINK_GT=m
+-CONFIG_N_HDLC=m
+-CONFIG_RISCOM8=m
+-CONFIG_SPECIALIX=m
+-CONFIG_SX=m
+-CONFIG_RIO=m
+-CONFIG_RIO_OLDPCI=y
+-CONFIG_STALDRV=y
+-CONFIG_NOZOMI=m
+-
+-#
+-# Serial drivers
+-#
+-CONFIG_SERIAL_8250=y
+-CONFIG_SERIAL_8250_CONSOLE=y
+-CONFIG_FIX_EARLYCON_MEM=y
+-CONFIG_SERIAL_8250_PCI=y
+-CONFIG_SERIAL_8250_PNP=y
+-CONFIG_SERIAL_8250_CS=m
+-CONFIG_SERIAL_8250_NR_UARTS=16
+-CONFIG_SERIAL_8250_RUNTIME_UARTS=8
+-# CONFIG_SERIAL_8250_EXTENDED is not set
+-
+-#
+-# Non-8250 serial port support
+-#
+-CONFIG_SERIAL_CORE=y
+-CONFIG_SERIAL_CORE_CONSOLE=y
+-CONFIG_SERIAL_JSM=m
+-CONFIG_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=0
+-CONFIG_PRINTER=m
+-# CONFIG_LP_CONSOLE is not set
+-CONFIG_PPDEV=m
+-CONFIG_HVC_DRIVER=y
+-CONFIG_VIRTIO_CONSOLE=m
+-CONFIG_IPMI_HANDLER=m
+-CONFIG_IPMI_PANIC_EVENT=y
+-# CONFIG_IPMI_PANIC_STRING is not set
+-CONFIG_IPMI_DEVICE_INTERFACE=m
+-CONFIG_IPMI_SI=m
+-CONFIG_IPMI_WATCHDOG=m
+-CONFIG_IPMI_POWEROFF=m
+-CONFIG_HW_RANDOM=y
+-CONFIG_HW_RANDOM_INTEL=m
+-CONFIG_HW_RANDOM_AMD=m
+-CONFIG_HW_RANDOM_VIRTIO=m
+-CONFIG_NVRAM=y
+-CONFIG_R3964=m
+-CONFIG_APPLICOM=m
+-
+-#
+-# PCMCIA character devices
+-#
+-CONFIG_SYNCLINK_CS=m
+-CONFIG_CARDMAN_4000=m
+-CONFIG_CARDMAN_4040=m
+-CONFIG_IPWIRELESS=m
+-# CONFIG_MWAVE is not set
+-CONFIG_PC8736x_GPIO=m
+-CONFIG_NSC_GPIO=m
+-CONFIG_RAW_DRIVER=m
+-CONFIG_MAX_RAW_DEVS=4096
+-CONFIG_HPET=y
+-CONFIG_HPET_MMAP=y
+-CONFIG_HANGCHECK_TIMER=m
+-CONFIG_TCG_TPM=m
+-CONFIG_TCG_TIS=m
+-CONFIG_TCG_NSC=m
+-CONFIG_TCG_ATMEL=m
+-CONFIG_TCG_INFINEON=m
+-CONFIG_TELCLOCK=m
+-CONFIG_DEVPORT=y
+-CONFIG_CRASHER=m
+-CONFIG_I2C=m
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=m
+-CONFIG_I2C_HELPER_AUTO=y
+-CONFIG_I2C_ALGOBIT=m
+-CONFIG_I2C_ALGOPCA=m
+-
+-#
+-# I2C Hardware Bus support
+-#
+-
+-#
+-# PC SMBus host controller drivers
+-#
+-CONFIG_I2C_ALI1535=m
+-CONFIG_I2C_ALI1563=m
+-CONFIG_I2C_ALI15X3=m
+-CONFIG_I2C_AMD756=m
+-CONFIG_I2C_AMD756_S4882=m
+-CONFIG_I2C_AMD8111=m
+-CONFIG_I2C_I801=m
+-CONFIG_I2C_ISCH=m
+-CONFIG_I2C_PIIX4=m
+-CONFIG_I2C_NFORCE2=m
+-CONFIG_I2C_NFORCE2_S4985=m
+-CONFIG_I2C_SIS5595=m
+-CONFIG_I2C_SIS630=m
+-CONFIG_I2C_SIS96X=m
+-CONFIG_I2C_VIA=m
+-CONFIG_I2C_VIAPRO=m
+-
+-#
+-# I2C system bus drivers (mostly embedded / system-on-chip)
+-#
+-CONFIG_I2C_GPIO=m
+-CONFIG_I2C_OCORES=m
+-# CONFIG_I2C_SIMTEC is not set
+-
+-#
+-# External I2C/SMBus adapter drivers
+-#
+-CONFIG_I2C_PARPORT=m
+-CONFIG_I2C_PARPORT_LIGHT=m
+-CONFIG_I2C_TAOS_EVM=m
+-CONFIG_I2C_TINY_USB=m
+-
+-#
+-# Graphics adapter I2C/DDC channel drivers
+-#
+-CONFIG_I2C_VOODOO3=m
+-
+-#
+-# Other I2C/SMBus bus drivers
+-#
+-CONFIG_I2C_PCA_PLATFORM=m
+-CONFIG_I2C_STUB=m
+-
+-#
+-# Miscellaneous I2C Chip support
+-#
+-CONFIG_DS1682=m
+-CONFIG_AT24=m
+-CONFIG_SENSORS_EEPROM=m
+-CONFIG_SENSORS_PCF8591=m
+-# CONFIG_TPS65010 is not set
+-CONFIG_SENSORS_MAX6875=m
+-CONFIG_SENSORS_TSL2550=m
+-# CONFIG_I2C_DEBUG_CORE is not set
+-# CONFIG_I2C_DEBUG_ALGO is not set
+-# CONFIG_I2C_DEBUG_BUS is not set
+-# CONFIG_I2C_DEBUG_CHIP is not set
+-CONFIG_SPI=y
+-CONFIG_SPI_DEBUG=y
+-CONFIG_SPI_MASTER=y
+-
+-#
+-# SPI Master Controller Drivers
+-#
+-CONFIG_SPI_BITBANG=m
+-CONFIG_SPI_BUTTERFLY=m
+-CONFIG_SPI_LM70_LLP=m
+-
+-#
+-# SPI Protocol Masters
+-#
+-CONFIG_SPI_AT25=m
+-CONFIG_SPI_SPIDEV=m
+-CONFIG_SPI_TLE62X0=m
+-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+-CONFIG_GPIOLIB=y
+-# CONFIG_DEBUG_GPIO is not set
+-CONFIG_GPIO_SYSFS=y
+-
+-#
+-# I2C GPIO expanders:
+-#
+-CONFIG_GPIO_MAX732X=m
+-CONFIG_GPIO_PCA953X=m
+-CONFIG_GPIO_PCF857X=m
+-
+-#
+-# PCI GPIO expanders:
+-#
+-
+-#
+-# SPI GPIO expanders:
+-#
+-CONFIG_GPIO_MAX7301=m
+-CONFIG_GPIO_MCP23S08=m
+-CONFIG_W1=m
+-CONFIG_W1_CON=y
+-
+-#
+-# 1-wire Bus Masters
+-#
+-CONFIG_W1_MASTER_MATROX=m
+-CONFIG_W1_MASTER_DS2490=m
+-CONFIG_W1_MASTER_DS2482=m
+-CONFIG_W1_MASTER_GPIO=m
+-
+-#
+-# 1-wire Slaves
+-#
+-CONFIG_W1_SLAVE_THERM=m
+-CONFIG_W1_SLAVE_SMEM=m
+-CONFIG_W1_SLAVE_DS2433=m
+-CONFIG_W1_SLAVE_DS2433_CRC=y
+-CONFIG_W1_SLAVE_DS2760=m
+-CONFIG_POWER_SUPPLY=y
+-# CONFIG_POWER_SUPPLY_DEBUG is not set
+-CONFIG_PDA_POWER=m
+-CONFIG_BATTERY_DS2760=m
+-CONFIG_HWMON=m
+-CONFIG_HWMON_VID=m
+-CONFIG_SENSORS_ABITUGURU=m
+-CONFIG_SENSORS_ABITUGURU3=m
+-CONFIG_SENSORS_AD7414=m
+-CONFIG_SENSORS_AD7418=m
+-CONFIG_SENSORS_ADCXX=m
+-CONFIG_SENSORS_ADM1021=m
+-CONFIG_SENSORS_ADM1025=m
+-CONFIG_SENSORS_ADM1026=m
+-CONFIG_SENSORS_ADM1029=m
+-CONFIG_SENSORS_ADM1031=m
+-CONFIG_SENSORS_ADM9240=m
+-CONFIG_SENSORS_ADT7470=m
+-CONFIG_SENSORS_ADT7473=m
+-CONFIG_SENSORS_K8TEMP=m
+-CONFIG_SENSORS_ASB100=m
+-CONFIG_SENSORS_ATXP1=m
+-CONFIG_SENSORS_DS1621=m
+-CONFIG_SENSORS_I5K_AMB=m
+-CONFIG_SENSORS_F71805F=m
+-CONFIG_SENSORS_F71882FG=m
+-CONFIG_SENSORS_F75375S=m
+-CONFIG_SENSORS_FSCHER=m
+-CONFIG_SENSORS_FSCPOS=m
+-CONFIG_SENSORS_FSCHMD=m
+-CONFIG_SENSORS_GL518SM=m
+-CONFIG_SENSORS_GL520SM=m
+-CONFIG_SENSORS_CORETEMP=m
+-CONFIG_SENSORS_IBMAEM=m
+-CONFIG_SENSORS_IBMPEX=m
+-CONFIG_SENSORS_IT87=m
+-CONFIG_SENSORS_LM63=m
+-CONFIG_SENSORS_LM70=m
+-CONFIG_SENSORS_LM75=m
+-CONFIG_SENSORS_LM77=m
+-CONFIG_SENSORS_LM78=m
+-CONFIG_SENSORS_LM80=m
+-CONFIG_SENSORS_LM83=m
+-CONFIG_SENSORS_LM85=m
+-CONFIG_SENSORS_LM87=m
+-CONFIG_SENSORS_LM90=m
+-CONFIG_SENSORS_LM92=m
+-CONFIG_SENSORS_LM93=m
+-CONFIG_SENSORS_MAX1619=m
+-CONFIG_SENSORS_MAX6650=m
+-CONFIG_SENSORS_PC87360=m
+-CONFIG_SENSORS_PC87427=m
+-CONFIG_SENSORS_SIS5595=m
+-CONFIG_SENSORS_DME1737=m
+-CONFIG_SENSORS_SMSC47M1=m
+-CONFIG_SENSORS_SMSC47M192=m
+-CONFIG_SENSORS_SMSC47B397=m
+-CONFIG_SENSORS_ADS7828=m
+-CONFIG_SENSORS_THMC50=m
+-CONFIG_SENSORS_VIA686A=m
+-CONFIG_SENSORS_VT1211=m
+-CONFIG_SENSORS_VT8231=m
+-CONFIG_SENSORS_W83781D=m
+-CONFIG_SENSORS_W83791D=m
+-CONFIG_SENSORS_W83792D=m
+-CONFIG_SENSORS_W83793=m
+-CONFIG_SENSORS_W83L785TS=m
+-CONFIG_SENSORS_W83L786NG=m
+-CONFIG_SENSORS_W83627HF=m
+-CONFIG_SENSORS_W83627EHF=m
+-CONFIG_SENSORS_HDAPS=m
+-CONFIG_SENSORS_APPLESMC=m
+-# CONFIG_HWMON_DEBUG_CHIP is not set
+-CONFIG_THERMAL=m
+-CONFIG_THERMAL_HWMON=y
+-CONFIG_WATCHDOG=y
+-# CONFIG_WATCHDOG_NOWAYOUT is not set
+-
+-#
+-# Watchdog Device Drivers
+-#
+-CONFIG_SOFT_WATCHDOG=m
+-CONFIG_ACQUIRE_WDT=m
+-CONFIG_ADVANTECH_WDT=m
+-CONFIG_ALIM1535_WDT=m
+-CONFIG_ALIM7101_WDT=m
+-CONFIG_SC520_WDT=m
+-CONFIG_EUROTECH_WDT=m
+-CONFIG_IB700_WDT=m
+-CONFIG_IBMASR=m
+-CONFIG_WAFER_WDT=m
+-CONFIG_I6300ESB_WDT=m
+-CONFIG_ITCO_WDT=m
+-CONFIG_ITCO_VENDOR_SUPPORT=y
+-CONFIG_IT8712F_WDT=m
+-CONFIG_HP_WATCHDOG=m
+-CONFIG_SC1200_WDT=m
+-CONFIG_PC87413_WDT=m
+-CONFIG_60XX_WDT=m
+-CONFIG_SBC8360_WDT=m
+-CONFIG_CPU5_WDT=m
+-CONFIG_SMSC37B787_WDT=m
+-CONFIG_W83627HF_WDT=m
+-CONFIG_W83697HF_WDT=m
+-CONFIG_W83877F_WDT=m
+-CONFIG_W83977F_WDT=m
+-CONFIG_MACHZ_WDT=m
+-CONFIG_SBC_EPX_C3_WATCHDOG=m
+-
+-#
+-# PCI-based Watchdog Cards
+-#
+-CONFIG_PCIPCWATCHDOG=m
+-CONFIG_WDTPCI=m
+-CONFIG_WDT_501_PCI=y
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-CONFIG_USBPCWATCHDOG=m
+-
+-#
+-# Sonics Silicon Backplane
+-#
+-CONFIG_SSB_POSSIBLE=y
+-CONFIG_SSB=m
+-CONFIG_SSB_SPROM=y
+-CONFIG_SSB_BLOCKIO=y
+-CONFIG_SSB_PCIHOST_POSSIBLE=y
+-CONFIG_SSB_PCIHOST=y
+-CONFIG_SSB_B43_PCI_BRIDGE=y
+-CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+-CONFIG_SSB_PCMCIAHOST=y
+-# CONFIG_SSB_DEBUG is not set
+-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+-CONFIG_SSB_DRIVER_PCICORE=y
+-
+-#
+-# Multifunction device drivers
+-#
+-# CONFIG_MFD_CORE is not set
+-CONFIG_MFD_SM501=m
+-CONFIG_MFD_SM501_GPIO=y
+-CONFIG_HTC_PASIC3=m
+-# CONFIG_MFD_TMIO is not set
+-
+-#
+-# Multimedia devices
+-#
+-
+-#
+-# Multimedia core support
+-#
+-CONFIG_VIDEO_DEV=m
+-CONFIG_VIDEO_V4L2_COMMON=m
+-CONFIG_VIDEO_ALLOW_V4L1=y
+-CONFIG_VIDEO_V4L1_COMPAT=y
+-CONFIG_DVB_CORE=m
+-CONFIG_VIDEO_MEDIA=m
+-
+-#
+-# Multimedia drivers
+-#
+-CONFIG_VIDEO_SAA7146=m
+-CONFIG_VIDEO_SAA7146_VV=m
+-CONFIG_MEDIA_ATTACH=y
+-CONFIG_MEDIA_TUNER=m
+-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+-CONFIG_MEDIA_TUNER_SIMPLE=m
+-CONFIG_MEDIA_TUNER_TDA8290=m
+-CONFIG_MEDIA_TUNER_TDA827X=m
+-CONFIG_MEDIA_TUNER_TDA18271=m
+-CONFIG_MEDIA_TUNER_TDA9887=m
+-CONFIG_MEDIA_TUNER_TEA5761=m
+-CONFIG_MEDIA_TUNER_TEA5767=m
+-CONFIG_MEDIA_TUNER_MT20XX=m
+-CONFIG_MEDIA_TUNER_MT2060=m
+-CONFIG_MEDIA_TUNER_MT2266=m
+-CONFIG_MEDIA_TUNER_MT2131=m
+-CONFIG_MEDIA_TUNER_QT1010=m
+-CONFIG_MEDIA_TUNER_XC2028=m
+-CONFIG_MEDIA_TUNER_XC5000=m
+-CONFIG_MEDIA_TUNER_MXL5005S=m
+-CONFIG_MEDIA_TUNER_MXL5007T=m
+-CONFIG_VIDEO_V4L2=m
+-CONFIG_VIDEO_V4L1=m
+-CONFIG_VIDEOBUF_GEN=m
+-CONFIG_VIDEOBUF_DMA_SG=m
+-CONFIG_VIDEOBUF_VMALLOC=m
+-CONFIG_VIDEOBUF_DMA_CONTIG=m
+-CONFIG_VIDEOBUF_DVB=m
+-CONFIG_VIDEO_BTCX=m
+-CONFIG_VIDEO_IR=m
+-CONFIG_VIDEO_TVEEPROM=m
+-CONFIG_VIDEO_TUNER=m
+-CONFIG_VIDEO_CAPTURE_DRIVERS=y
+-# CONFIG_VIDEO_ADV_DEBUG is not set
+-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+-CONFIG_VIDEO_IR_I2C=m
+-CONFIG_VIDEO_TVAUDIO=m
+-CONFIG_VIDEO_TDA7432=m
+-CONFIG_VIDEO_TDA9840=m
+-CONFIG_VIDEO_TDA9875=m
+-CONFIG_VIDEO_TEA6415C=m
+-CONFIG_VIDEO_TEA6420=m
+-CONFIG_VIDEO_MSP3400=m
+-CONFIG_VIDEO_CS5345=m
+-CONFIG_VIDEO_CS53L32A=m
+-CONFIG_VIDEO_M52790=m
+-CONFIG_VIDEO_WM8775=m
+-CONFIG_VIDEO_WM8739=m
+-CONFIG_VIDEO_VP27SMPX=m
+-CONFIG_VIDEO_BT819=m
+-CONFIG_VIDEO_BT856=m
+-CONFIG_VIDEO_KS0127=m
+-CONFIG_VIDEO_OV7670=m
+-CONFIG_VIDEO_SAA7110=m
+-CONFIG_VIDEO_SAA7111=m
+-CONFIG_VIDEO_SAA7114=m
+-CONFIG_VIDEO_SAA711X=m
+-CONFIG_VIDEO_SAA717X=m
+-CONFIG_VIDEO_TVP5150=m
+-CONFIG_VIDEO_VPX3220=m
+-CONFIG_VIDEO_CX25840=m
+-CONFIG_VIDEO_CX2341X=m
+-CONFIG_VIDEO_SAA7127=m
+-CONFIG_VIDEO_SAA7185=m
+-CONFIG_VIDEO_ADV7170=m
+-CONFIG_VIDEO_ADV7175=m
+-CONFIG_VIDEO_UPD64031A=m
+-CONFIG_VIDEO_UPD64083=m
+-CONFIG_VIDEO_VIVI=m
+-CONFIG_VIDEO_BT848=m
+-CONFIG_VIDEO_BT848_DVB=y
+-CONFIG_VIDEO_SAA6588=m
+-CONFIG_VIDEO_BWQCAM=m
+-CONFIG_VIDEO_CQCAM=m
+-CONFIG_VIDEO_W9966=m
+-CONFIG_VIDEO_CPIA=m
+-CONFIG_VIDEO_CPIA_PP=m
+-CONFIG_VIDEO_CPIA_USB=m
+-CONFIG_VIDEO_CPIA2=m
+-CONFIG_VIDEO_SAA5246A=m
+-CONFIG_VIDEO_SAA5249=m
+-# CONFIG_TUNER_3036 is not set
+-CONFIG_VIDEO_STRADIS=m
+-CONFIG_VIDEO_ZORAN=m
+-CONFIG_VIDEO_ZORAN_DC30=m
+-CONFIG_VIDEO_ZORAN_ZR36060=m
+-CONFIG_VIDEO_ZORAN_BUZ=m
+-CONFIG_VIDEO_ZORAN_DC10=m
+-CONFIG_VIDEO_ZORAN_LML33=m
+-CONFIG_VIDEO_ZORAN_LML33R10=m
+-CONFIG_VIDEO_ZORAN_AVS6EYES=m
+-CONFIG_VIDEO_MEYE=m
+-CONFIG_VIDEO_SAA7134=m
+-CONFIG_VIDEO_SAA7134_ALSA=m
+-CONFIG_VIDEO_SAA7134_DVB=m
+-CONFIG_VIDEO_MXB=m
+-# CONFIG_VIDEO_DPC is not set
+-CONFIG_VIDEO_HEXIUM_ORION=m
+-CONFIG_VIDEO_HEXIUM_GEMINI=m
+-CONFIG_VIDEO_CX88=m
+-CONFIG_VIDEO_CX88_ALSA=m
+-CONFIG_VIDEO_CX88_BLACKBIRD=m
+-CONFIG_VIDEO_CX88_DVB=m
+-CONFIG_VIDEO_CX88_VP3054=m
+-CONFIG_VIDEO_CX23885=m
+-CONFIG_VIDEO_AU0828=m
+-CONFIG_VIDEO_IVTV=m
+-CONFIG_VIDEO_FB_IVTV=m
+-CONFIG_VIDEO_CX18=m
+-CONFIG_VIDEO_CAFE_CCIC=m
+-CONFIG_V4L_USB_DRIVERS=y
+-CONFIG_USB_VIDEO_CLASS=m
+-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+-CONFIG_USB_GSPCA=m
+-CONFIG_VIDEO_PVRUSB2=m
+-CONFIG_VIDEO_PVRUSB2_SYSFS=y
+-CONFIG_VIDEO_PVRUSB2_DVB=y
+-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+-CONFIG_VIDEO_EM28XX=m
+-CONFIG_VIDEO_EM28XX_ALSA=m
+-CONFIG_VIDEO_EM28XX_DVB=m
+-CONFIG_VIDEO_USBVISION=m
+-CONFIG_VIDEO_USBVIDEO=m
+-CONFIG_USB_VICAM=m
+-CONFIG_USB_IBMCAM=m
+-CONFIG_USB_KONICAWC=m
+-CONFIG_USB_QUICKCAM_MESSENGER=m
+-CONFIG_USB_ET61X251=m
+-CONFIG_VIDEO_OVCAMCHIP=m
+-CONFIG_USB_W9968CF=m
+-CONFIG_USB_OV511=m
+-CONFIG_USB_SE401=m
+-CONFIG_USB_SN9C102=m
+-CONFIG_USB_STV680=m
+-CONFIG_USB_ZC0301=m
+-CONFIG_USB_PWC=m
+-# CONFIG_USB_PWC_DEBUG is not set
+-CONFIG_USB_ZR364XX=m
+-CONFIG_USB_STKWEBCAM=m
+-CONFIG_USB_S2255=m
+-CONFIG_SOC_CAMERA=m
+-CONFIG_SOC_CAMERA_MT9M001=m
+-CONFIG_MT9M001_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_MT9V022=m
+-CONFIG_MT9V022_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_PLATFORM=m
+-CONFIG_VIDEO_SH_MOBILE_CEU=m
+-CONFIG_RADIO_ADAPTERS=y
+-CONFIG_RADIO_GEMTEK_PCI=m
+-CONFIG_RADIO_MAXIRADIO=m
+-CONFIG_RADIO_MAESTRO=m
+-CONFIG_USB_DSBR=m
+-CONFIG_USB_SI470X=m
+-CONFIG_DVB_CAPTURE_DRIVERS=y
+-
+-#
+-# Supported SAA7146 based PCI Adapters
+-#
+-CONFIG_TTPCI_EEPROM=m
+-CONFIG_DVB_AV7110=m
+-# CONFIG_DVB_AV7110_FIRMWARE is not set
+-CONFIG_DVB_AV7110_OSD=y
+-CONFIG_DVB_BUDGET_CORE=m
+-CONFIG_DVB_BUDGET=m
+-CONFIG_DVB_BUDGET_CI=m
+-CONFIG_DVB_BUDGET_AV=m
+-CONFIG_DVB_BUDGET_PATCH=m
+-
+-#
+-# Supported USB Adapters
+-#
+-CONFIG_DVB_USB=m
+-# CONFIG_DVB_USB_DEBUG is not set
+-CONFIG_DVB_USB_A800=m
+-CONFIG_DVB_USB_DIBUSB_MB=m
+-# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+-CONFIG_DVB_USB_DIBUSB_MC=m
+-CONFIG_DVB_USB_DIB0700=m
+-CONFIG_DVB_USB_UMT_010=m
+-CONFIG_DVB_USB_CXUSB=m
+-CONFIG_DVB_USB_M920X=m
+-CONFIG_DVB_USB_GL861=m
+-CONFIG_DVB_USB_AU6610=m
+-CONFIG_DVB_USB_DIGITV=m
+-CONFIG_DVB_USB_VP7045=m
+-CONFIG_DVB_USB_VP702X=m
+-CONFIG_DVB_USB_GP8PSK=m
+-CONFIG_DVB_USB_NOVA_T_USB2=m
+-CONFIG_DVB_USB_TTUSB2=m
+-CONFIG_DVB_USB_DTT200U=m
+-CONFIG_DVB_USB_OPERA1=m
+-CONFIG_DVB_USB_AF9005=m
+-CONFIG_DVB_USB_AF9005_REMOTE=m
+-CONFIG_DVB_USB_DW2102=m
+-CONFIG_DVB_USB_ANYSEE=m
+-CONFIG_DVB_TTUSB_BUDGET=m
+-CONFIG_DVB_TTUSB_DEC=m
+-CONFIG_DVB_CINERGYT2=m
+-# CONFIG_DVB_CINERGYT2_TUNING is not set
+-CONFIG_DVB_SIANO_SMS1XXX=m
+-CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
+-
+-#
+-# Supported FlexCopII (B2C2) Adapters
+-#
+-CONFIG_DVB_B2C2_FLEXCOP=m
+-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+-CONFIG_DVB_B2C2_FLEXCOP_USB=m
+-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+-
+-#
+-# Supported BT878 Adapters
+-#
+-CONFIG_DVB_BT8XX=m
+-
+-#
+-# Supported Pluto2 Adapters
+-#
+-CONFIG_DVB_PLUTO2=m
+-
+-#
+-# Supported DVB Frontends
+-#
+-
+-#
+-# Customise DVB Frontends
+-#
+-# CONFIG_DVB_FE_CUSTOMISE is not set
+-
+-#
+-# DVB-S (satellite) frontends
+-#
+-CONFIG_DVB_CX24110=m
+-CONFIG_DVB_CX24123=m
+-CONFIG_DVB_MT312=m
+-CONFIG_DVB_S5H1420=m
+-CONFIG_DVB_STV0299=m
+-CONFIG_DVB_TDA8083=m
+-CONFIG_DVB_TDA10086=m
+-CONFIG_DVB_VES1X93=m
+-CONFIG_DVB_TUNER_ITD1000=m
+-CONFIG_DVB_TDA826X=m
+-CONFIG_DVB_TUA6100=m
+-
+-#
+-# DVB-T (terrestrial) frontends
+-#
+-CONFIG_DVB_SP8870=m
+-CONFIG_DVB_SP887X=m
+-CONFIG_DVB_CX22700=m
+-CONFIG_DVB_CX22702=m
+-CONFIG_DVB_DRX397XD=m
+-CONFIG_DVB_L64781=m
+-CONFIG_DVB_TDA1004X=m
+-CONFIG_DVB_NXT6000=m
+-CONFIG_DVB_MT352=m
+-CONFIG_DVB_ZL10353=m
+-CONFIG_DVB_DIB3000MB=m
+-CONFIG_DVB_DIB3000MC=m
+-CONFIG_DVB_DIB7000M=m
+-CONFIG_DVB_DIB7000P=m
+-CONFIG_DVB_TDA10048=m
+-
+-#
+-# DVB-C (cable) frontends
+-#
+-CONFIG_DVB_VES1820=m
+-CONFIG_DVB_TDA10021=m
+-CONFIG_DVB_TDA10023=m
+-CONFIG_DVB_STV0297=m
+-
+-#
+-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+-#
+-CONFIG_DVB_NXT200X=m
+-CONFIG_DVB_OR51211=m
+-CONFIG_DVB_OR51132=m
+-CONFIG_DVB_BCM3510=m
+-CONFIG_DVB_LGDT330X=m
+-CONFIG_DVB_S5H1409=m
+-CONFIG_DVB_AU8522=m
+-CONFIG_DVB_S5H1411=m
+-
+-#
+-# Digital terrestrial only tuners/PLL
+-#
+-CONFIG_DVB_PLL=m
+-CONFIG_DVB_TUNER_DIB0070=m
+-
+-#
+-# SEC control devices for DVB-S
+-#
+-CONFIG_DVB_LNBP21=m
+-CONFIG_DVB_ISL6405=m
+-CONFIG_DVB_ISL6421=m
+-CONFIG_DAB=y
+-CONFIG_USB_DABUSB=m
+-
+-#
+-# Graphics support
+-#
+-CONFIG_AGP=y
+-CONFIG_AGP_AMD64=y
+-CONFIG_AGP_INTEL=m
+-CONFIG_AGP_SIS=m
+-CONFIG_AGP_VIA=m
+-CONFIG_DRM=m
+-CONFIG_DRM_TDFX=m
+-CONFIG_DRM_R128=m
+-CONFIG_DRM_RADEON=m
+-CONFIG_DRM_I810=m
+-# CONFIG_DRM_I830 is not set
+-CONFIG_DRM_I915=m
+-CONFIG_DRM_MGA=m
+-CONFIG_DRM_SIS=m
+-CONFIG_DRM_VIA=m
+-CONFIG_DRM_VIA_CHROME9=m
+-CONFIG_DRM_SAVAGE=m
+-CONFIG_VGASTATE=m
+-CONFIG_VIDEO_OUTPUT_CONTROL=m
+-CONFIG_FB=y
+-CONFIG_FIRMWARE_EDID=y
+-CONFIG_FB_DDC=m
+-CONFIG_FB_CFB_FILLRECT=y
+-CONFIG_FB_CFB_COPYAREA=y
+-CONFIG_FB_CFB_IMAGEBLIT=y
+-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+-CONFIG_FB_SYS_FILLRECT=m
+-CONFIG_FB_SYS_COPYAREA=m
+-CONFIG_FB_SYS_IMAGEBLIT=m
+-# CONFIG_FB_FOREIGN_ENDIAN is not set
+-CONFIG_FB_SYS_FOPS=m
+-CONFIG_FB_DEFERRED_IO=y
+-CONFIG_FB_HECUBA=m
+-CONFIG_FB_SVGALIB=m
+-# CONFIG_FB_MACMODES is not set
+-CONFIG_FB_BACKLIGHT=y
+-CONFIG_FB_MODE_HELPERS=y
+-CONFIG_FB_TILEBLITTING=y
+-
+-#
+-# Frame buffer hardware drivers
+-#
+-CONFIG_FB_CIRRUS=m
+-# CONFIG_FB_PM2 is not set
+-CONFIG_FB_CYBER2000=m
+-CONFIG_FB_ARC=m
+-# CONFIG_FB_ASILIANT is not set
+-# CONFIG_FB_IMSTT is not set
+-CONFIG_FB_VGA16=m
+-CONFIG_FB_UVESA=m
+-CONFIG_FB_VESA=y
+-CONFIG_FB_EFI=y
+-CONFIG_FB_IMAC=y
+-CONFIG_FB_N411=m
+-CONFIG_FB_HGA=m
+-CONFIG_FB_HGA_ACCEL=y
+-CONFIG_FB_S1D13XXX=m
+-CONFIG_FB_NVIDIA=m
+-CONFIG_FB_NVIDIA_I2C=y
+-# CONFIG_FB_NVIDIA_DEBUG is not set
+-CONFIG_FB_NVIDIA_BACKLIGHT=y
+-CONFIG_FB_RIVA=m
+-CONFIG_FB_RIVA_I2C=y
+-# CONFIG_FB_RIVA_DEBUG is not set
+-CONFIG_FB_RIVA_BACKLIGHT=y
+-CONFIG_FB_LE80578=m
+-CONFIG_FB_CARILLO_RANCH=m
+-CONFIG_FB_INTEL=m
+-# CONFIG_FB_INTEL_DEBUG is not set
+-CONFIG_FB_INTEL_I2C=y
+-CONFIG_FB_MATROX=m
+-CONFIG_FB_MATROX_MILLENIUM=y
+-CONFIG_FB_MATROX_MYSTIQUE=y
+-CONFIG_FB_MATROX_G=y
+-CONFIG_FB_MATROX_I2C=m
+-CONFIG_FB_MATROX_MAVEN=m
+-CONFIG_FB_MATROX_MULTIHEAD=y
+-CONFIG_FB_RADEON=m
+-CONFIG_FB_RADEON_I2C=y
+-CONFIG_FB_RADEON_BACKLIGHT=y
+-# CONFIG_FB_RADEON_DEBUG is not set
+-CONFIG_FB_ATY128=m
+-CONFIG_FB_ATY128_BACKLIGHT=y
+-CONFIG_FB_ATY=m
+-CONFIG_FB_ATY_CT=y
+-CONFIG_FB_ATY_GENERIC_LCD=y
+-CONFIG_FB_ATY_GX=y
+-CONFIG_FB_ATY_BACKLIGHT=y
+-# CONFIG_FB_S3 is not set
+-CONFIG_FB_SAVAGE=m
+-CONFIG_FB_SAVAGE_I2C=y
+-CONFIG_FB_SAVAGE_ACCEL=y
+-CONFIG_FB_SIS=m
+-CONFIG_FB_SIS_300=y
+-CONFIG_FB_SIS_315=y
+-CONFIG_FB_NEOMAGIC=m
+-CONFIG_FB_KYRO=m
+-CONFIG_FB_3DFX=m
+-CONFIG_FB_3DFX_ACCEL=y
+-CONFIG_FB_VOODOO1=m
+-CONFIG_FB_VT8623=m
+-CONFIG_FB_TRIDENT=m
+-CONFIG_FB_TRIDENT_ACCEL=y
+-CONFIG_FB_ARK=m
+-CONFIG_FB_PM3=m
+-CONFIG_FB_CARMINE=m
+-CONFIG_FB_CARMINE_DRAM_EVAL=y
+-# CONFIG_CARMINE_DRAM_CUSTOM is not set
+-CONFIG_FB_GEODE=y
+-CONFIG_FB_GEODE_LX=m
+-CONFIG_FB_GEODE_GX=m
+-CONFIG_FB_GEODE_GX1=m
+-CONFIG_FB_SM501=m
+-CONFIG_FB_VIRTUAL=m
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_LCD_CLASS_DEVICE=m
+-CONFIG_LCD_LTV350QV=m
+-CONFIG_LCD_ILI9320=m
+-CONFIG_LCD_VGG2432A4=m
+-CONFIG_LCD_PLATFORM=m
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+-CONFIG_BACKLIGHT_CORGI=m
+-CONFIG_BACKLIGHT_PROGEAR=m
+-CONFIG_BACKLIGHT_CARILLO_RANCH=m
+-CONFIG_BACKLIGHT_MBP_NVIDIA=m
+-
+-#
+-# Display device support
+-#
+-CONFIG_DISPLAY_SUPPORT=m
+-
+-#
+-# Display hardware drivers
+-#
+-
+-#
+-# Console display driver support
+-#
+-CONFIG_VGA_CONSOLE=y
+-CONFIG_VGACON_SOFT_SCROLLBACK=y
+-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+-CONFIG_VIDEO_SELECT=y
+-CONFIG_DUMMY_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE=y
+-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+-# CONFIG_FONTS is not set
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+-# CONFIG_LOGO is not set
+-
+-#
+-# Bootsplash configuration
+-#
+-CONFIG_BOOTSPLASH=y
+-CONFIG_SOUND=m
+-CONFIG_SND=m
+-CONFIG_SND_TIMER=m
+-CONFIG_SND_PCM=m
+-CONFIG_SND_HWDEP=m
+-CONFIG_SND_RAWMIDI=m
+-CONFIG_SND_SEQUENCER=m
+-CONFIG_SND_SEQ_DUMMY=m
+-CONFIG_SND_OSSEMUL=y
+-CONFIG_SND_MIXER_OSS=m
+-CONFIG_SND_PCM_OSS=m
+-CONFIG_SND_PCM_OSS_PLUGINS=y
+-CONFIG_SND_SEQUENCER_OSS=y
+-CONFIG_SND_DYNAMIC_MINORS=y
+-CONFIG_SND_SUPPORT_OLD_API=y
+-CONFIG_SND_VERBOSE_PROCFS=y
+-CONFIG_SND_VERBOSE_PRINTK=y
+-CONFIG_SND_DEBUG=y
+-# CONFIG_SND_DEBUG_VERBOSE is not set
+-# CONFIG_SND_PCM_XRUN_DEBUG is not set
+-CONFIG_SND_VMASTER=y
+-CONFIG_SND_MPU401_UART=m
+-CONFIG_SND_OPL3_LIB=m
+-CONFIG_SND_VX_LIB=m
+-CONFIG_SND_AC97_CODEC=m
+-CONFIG_SND_DRIVERS=y
+-# CONFIG_SND_PCSP is not set
+-CONFIG_SND_DUMMY=m
+-CONFIG_SND_VIRMIDI=m
+-CONFIG_SND_MTPAV=m
+-CONFIG_SND_MTS64=m
+-CONFIG_SND_SERIAL_U16550=m
+-CONFIG_SND_MPU401=m
+-CONFIG_SND_PORTMAN2X4=m
+-CONFIG_SND_AC97_POWER_SAVE=y
+-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_SB_COMMON=m
+-CONFIG_SND_PCI=y
+-CONFIG_SND_AD1889=m
+-CONFIG_SND_ALS300=m
+-CONFIG_SND_ALS4000=m
+-CONFIG_SND_ALI5451=m
+-CONFIG_SND_ATIIXP=m
+-CONFIG_SND_ATIIXP_MODEM=m
+-CONFIG_SND_AU8810=m
+-CONFIG_SND_AU8820=m
+-CONFIG_SND_AU8830=m
+-CONFIG_SND_AW2=m
+-CONFIG_SND_AZT3328=m
+-CONFIG_SND_BT87X=m
+-# CONFIG_SND_BT87X_OVERCLOCK is not set
+-CONFIG_SND_CA0106=m
+-CONFIG_SND_CMIPCI=m
+-CONFIG_SND_OXYGEN_LIB=m
+-CONFIG_SND_OXYGEN=m
+-CONFIG_SND_CS4281=m
+-CONFIG_SND_CS46XX=m
+-CONFIG_SND_CS46XX_NEW_DSP=y
+-# CONFIG_SND_CS5530 is not set
+-CONFIG_SND_DARLA20=m
+-CONFIG_SND_GINA20=m
+-CONFIG_SND_LAYLA20=m
+-CONFIG_SND_DARLA24=m
+-CONFIG_SND_GINA24=m
+-CONFIG_SND_LAYLA24=m
+-CONFIG_SND_MONA=m
+-CONFIG_SND_MIA=m
+-CONFIG_SND_ECHO3G=m
+-CONFIG_SND_INDIGO=m
+-CONFIG_SND_INDIGOIO=m
+-CONFIG_SND_INDIGODJ=m
+-CONFIG_SND_EMU10K1=m
+-CONFIG_SND_EMU10K1X=m
+-CONFIG_SND_ENS1370=m
+-CONFIG_SND_ENS1371=m
+-CONFIG_SND_ES1938=m
+-CONFIG_SND_ES1968=m
+-CONFIG_SND_FM801=m
+-CONFIG_SND_FM801_TEA575X_BOOL=y
+-CONFIG_SND_FM801_TEA575X=m
+-CONFIG_SND_HDA_INTEL=m
+-CONFIG_SND_HDA_HWDEP=y
+-CONFIG_SND_HDA_INPUT_BEEP=y
+-CONFIG_SND_HDA_CODEC_REALTEK=y
+-CONFIG_SND_HDA_CODEC_ANALOG=y
+-CONFIG_SND_HDA_CODEC_SIGMATEL=y
+-CONFIG_SND_HDA_CODEC_VIA=y
+-CONFIG_SND_HDA_CODEC_ATIHDMI=y
+-CONFIG_SND_HDA_CODEC_NVHDMI=y
+-CONFIG_SND_HDA_CODEC_CONEXANT=y
+-CONFIG_SND_HDA_CODEC_CMEDIA=y
+-CONFIG_SND_HDA_CODEC_SI3054=y
+-CONFIG_SND_HDA_GENERIC=y
+-CONFIG_SND_HDA_POWER_SAVE=y
+-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_HDSP=m
+-CONFIG_SND_HDSPM=m
+-CONFIG_SND_HIFIER=m
+-CONFIG_SND_ICE1712=m
+-CONFIG_SND_ICE1724=m
+-CONFIG_SND_INTEL8X0=m
+-CONFIG_SND_INTEL8X0M=m
+-CONFIG_SND_KORG1212=m
+-CONFIG_SND_MAESTRO3=m
+-CONFIG_SND_MIXART=m
+-CONFIG_SND_NM256=m
+-CONFIG_SND_PCXHR=m
+-CONFIG_SND_RIPTIDE=m
+-CONFIG_SND_RME32=m
+-CONFIG_SND_RME96=m
+-CONFIG_SND_RME9652=m
+-CONFIG_SND_SONICVIBES=m
+-CONFIG_SND_TRIDENT=m
+-CONFIG_SND_VIA82XX=m
+-CONFIG_SND_VIA82XX_MODEM=m
+-CONFIG_SND_VIRTUOSO=m
+-CONFIG_SND_VX222=m
+-CONFIG_SND_YMFPCI=m
+-CONFIG_SND_SPI=y
+-CONFIG_SND_USB=y
+-CONFIG_SND_USB_AUDIO=m
+-CONFIG_SND_USB_USX2Y=m
+-CONFIG_SND_USB_CAIAQ=m
+-CONFIG_SND_USB_CAIAQ_INPUT=y
+-CONFIG_SND_PCMCIA=y
+-CONFIG_SND_VXPOCKET=m
+-CONFIG_SND_PDAUDIOCF=m
+-# CONFIG_SND_SOC is not set
+-CONFIG_SOUND_PRIME=m
+-CONFIG_SOUND_OSS=m
+-CONFIG_SOUND_TRACEINIT=y
+-CONFIG_SOUND_DMAP=y
+-CONFIG_SOUND_SSCAPE=m
+-CONFIG_SOUND_VMIDI=m
+-CONFIG_SOUND_TRIX=m
+-CONFIG_SOUND_MSS=m
+-CONFIG_SOUND_MPU401=m
+-CONFIG_SOUND_PAS=m
+-CONFIG_SOUND_PSS=m
+-CONFIG_PSS_MIXER=y
+-# CONFIG_PSS_HAVE_BOOT is not set
+-# CONFIG_SOUND_SB is not set
+-CONFIG_SOUND_YM3812=m
+-CONFIG_SOUND_UART6850=m
+-CONFIG_SOUND_AEDSP16=m
+-CONFIG_SC6600=y
+-CONFIG_SC6600_JOY=y
+-CONFIG_SC6600_CDROM=4
+-CONFIG_SC6600_CDROMBASE=0x0
+-CONFIG_AEDSP16_MSS=y
+-# CONFIG_AEDSP16_SBPRO is not set
+-CONFIG_AC97_BUS=m
+-CONFIG_HID_SUPPORT=y
+-CONFIG_HID=m
+-# CONFIG_HID_DEBUG is not set
+-CONFIG_HIDRAW=y
+-
+-#
+-# USB Input Devices
+-#
+-CONFIG_USB_HID=m
+-CONFIG_USB_HIDINPUT_POWERBOOK=y
+-CONFIG_HID_FF=y
+-CONFIG_HID_PID=y
+-CONFIG_LOGITECH_FF=y
+-# CONFIG_LOGIRUMBLEPAD2_FF is not set
+-CONFIG_PANTHERLORD_FF=y
+-CONFIG_THRUSTMASTER_FF=y
+-CONFIG_ZEROPLUS_FF=y
+-CONFIG_USB_HIDDEV=y
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
+-CONFIG_USB_SUPPORT=y
+-CONFIG_USB_ARCH_HAS_HCD=y
+-CONFIG_USB_ARCH_HAS_OHCI=y
+-CONFIG_USB_ARCH_HAS_EHCI=y
+-CONFIG_USB=m
+-# CONFIG_USB_DEBUG is not set
+-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+-
+-#
+-# Miscellaneous USB options
+-#
+-CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_DEVICE_CLASS is not set
+-# CONFIG_USB_DYNAMIC_MINORS is not set
+-CONFIG_USB_SUSPEND=y
+-# CONFIG_USB_OTG is not set
+-CONFIG_USB_MON=y
+-
+-#
+-# USB Host Controller Drivers
+-#
+-CONFIG_USB_C67X00_HCD=m
+-CONFIG_USB_EHCI_HCD=m
+-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+-CONFIG_USB_EHCI_TT_NEWSCHED=y
+-CONFIG_USB_ISP116X_HCD=m
+-CONFIG_USB_ISP1760_HCD=m
+-CONFIG_USB_OHCI_HCD=m
+-# CONFIG_USB_OHCI_HCD_SSB is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+-CONFIG_USB_UHCI_HCD=m
+-# CONFIG_USB_U132_HCD is not set
+-CONFIG_USB_SL811_HCD=m
+-CONFIG_USB_SL811_CS=m
+-CONFIG_USB_R8A66597_HCD=m
+-
+-#
+-# Enable Host or Gadget support to see Inventra options
+-#
+-
+-#
+-# USB Device Class drivers
+-#
+-CONFIG_USB_ACM=m
+-CONFIG_USB_PRINTER=m
+-CONFIG_USB_WDM=m
+-
+-#
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+-#
+-
+-#
+-# may also be needed; see USB_STORAGE Help for more information
+-#
+-CONFIG_USB_STORAGE=m
+-# CONFIG_USB_STORAGE_DEBUG is not set
+-CONFIG_USB_STORAGE_DATAFAB=y
+-CONFIG_USB_STORAGE_FREECOM=y
+-CONFIG_USB_STORAGE_ISD200=y
+-CONFIG_USB_STORAGE_DPCM=y
+-CONFIG_USB_STORAGE_USBAT=y
+-CONFIG_USB_STORAGE_SDDR09=y
+-CONFIG_USB_STORAGE_SDDR55=y
+-CONFIG_USB_STORAGE_JUMPSHOT=y
+-CONFIG_USB_STORAGE_ALAUDA=y
+-CONFIG_USB_STORAGE_ONETOUCH=y
+-CONFIG_USB_STORAGE_KARMA=y
+-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+-# CONFIG_USB_LIBUSUAL is not set
+-
+-#
+-# USB Imaging devices
+-#
+-CONFIG_USB_MDC800=m
+-CONFIG_USB_MICROTEK=m
+-
+-#
+-# USB port drivers
+-#
+-CONFIG_USB_USS720=m
+-CONFIG_USB_SERIAL=m
+-CONFIG_USB_EZUSB=y
+-CONFIG_USB_SERIAL_GENERIC=y
+-CONFIG_USB_SERIAL_AIRCABLE=m
+-CONFIG_USB_SERIAL_ARK3116=m
+-CONFIG_USB_SERIAL_BELKIN=m
+-CONFIG_USB_SERIAL_CH341=m
+-CONFIG_USB_SERIAL_WHITEHEAT=m
+-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+-CONFIG_USB_SERIAL_CP2101=m
+-CONFIG_USB_SERIAL_CYPRESS_M8=m
+-CONFIG_USB_SERIAL_EMPEG=m
+-CONFIG_USB_SERIAL_FTDI_SIO=m
+-CONFIG_USB_SERIAL_FUNSOFT=m
+-CONFIG_USB_SERIAL_VISOR=m
+-CONFIG_USB_SERIAL_IPAQ=m
+-CONFIG_USB_SERIAL_IR=m
+-CONFIG_USB_SERIAL_EDGEPORT=m
+-CONFIG_USB_SERIAL_EDGEPORT_TI=m
+-CONFIG_USB_SERIAL_GARMIN=m
+-CONFIG_USB_SERIAL_IPW=m
+-CONFIG_USB_SERIAL_IUU=m
+-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+-CONFIG_USB_SERIAL_KEYSPAN=m
+-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+-CONFIG_USB_SERIAL_KLSI=m
+-CONFIG_USB_SERIAL_KOBIL_SCT=m
+-CONFIG_USB_SERIAL_MCT_U232=m
+-CONFIG_USB_SERIAL_MOS7720=m
+-CONFIG_USB_SERIAL_MOS7840=m
+-CONFIG_USB_SERIAL_MOTOROLA=m
+-CONFIG_USB_SERIAL_NAVMAN=m
+-CONFIG_USB_SERIAL_PL2303=m
+-CONFIG_USB_SERIAL_OTI6858=m
+-CONFIG_USB_SERIAL_QUALCOMM=m
+-CONFIG_USB_SERIAL_SPCP8X5=m
+-CONFIG_USB_SERIAL_HP4X=m
+-CONFIG_USB_SERIAL_SAFE=m
+-CONFIG_USB_SERIAL_SAFE_PADDED=y
+-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+-CONFIG_USB_SERIAL_TI=m
+-CONFIG_USB_SERIAL_CYBERJACK=m
+-CONFIG_USB_SERIAL_XIRCOM=m
+-CONFIG_USB_SERIAL_OPTION=m
+-CONFIG_USB_SERIAL_OMNINET=m
+-CONFIG_USB_SERIAL_DEBUG=m
+-
+-#
+-# USB Miscellaneous drivers
+-#
+-CONFIG_USB_EMI62=m
+-CONFIG_USB_EMI26=m
+-CONFIG_USB_ADUTUX=m
+-CONFIG_USB_RIO500=m
+-CONFIG_USB_LEGOTOWER=m
+-CONFIG_USB_LCD=m
+-CONFIG_USB_BERRY_CHARGE=m
+-CONFIG_USB_LED=m
+-CONFIG_USB_CYPRESS_CY7C63=m
+-CONFIG_USB_CYTHERM=m
+-CONFIG_USB_PHIDGET=m
+-CONFIG_USB_PHIDGETKIT=m
+-CONFIG_USB_PHIDGETMOTORCONTROL=m
+-CONFIG_USB_PHIDGETSERVO=m
+-CONFIG_USB_IDMOUSE=m
+-CONFIG_USB_FTDI_ELAN=m
+-CONFIG_USB_APPLEDISPLAY=m
+-CONFIG_USB_SISUSBVGA=m
+-CONFIG_USB_SISUSBVGA_CON=y
+-CONFIG_USB_LD=m
+-CONFIG_USB_TRANCEVIBRATOR=m
+-CONFIG_USB_IOWARRIOR=m
+-# CONFIG_USB_TEST is not set
+-CONFIG_USB_ISIGHTFW=m
+-CONFIG_USB_ATM=m
+-CONFIG_USB_SPEEDTOUCH=m
+-CONFIG_USB_CXACRU=m
+-CONFIG_USB_UEAGLEATM=m
+-CONFIG_USB_XUSBATM=m
+-# CONFIG_USB_GADGET is not set
+-CONFIG_MMC=m
+-# CONFIG_MMC_DEBUG is not set
+-# CONFIG_MMC_UNSAFE_RESUME is not set
+-
+-#
+-# MMC/SD Card Drivers
+-#
+-CONFIG_MMC_BLOCK=m
+-CONFIG_MMC_BLOCK_BOUNCE=y
+-CONFIG_SDIO_UART=m
+-CONFIG_MMC_TEST=m
+-
+-#
+-# MMC/SD Host Controller Drivers
+-#
+-CONFIG_MMC_SDHCI=m
+-CONFIG_MMC_SDHCI_PCI=m
+-CONFIG_MMC_RICOH_MMC=m
+-CONFIG_MMC_WBSD=m
+-CONFIG_MMC_TIFM_SD=m
+-CONFIG_MMC_SPI=m
+-CONFIG_MMC_SDRICOH_CS=m
+-CONFIG_MEMSTICK=m
+-# CONFIG_MEMSTICK_DEBUG is not set
+-
+-#
+-# MemoryStick drivers
+-#
+-# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+-CONFIG_MSPRO_BLOCK=m
+-
+-#
+-# MemoryStick Host Controller Drivers
+-#
+-CONFIG_MEMSTICK_TIFM_MS=m
+-CONFIG_MEMSTICK_JMICRON_38X=m
+-CONFIG_NEW_LEDS=y
+-CONFIG_LEDS_CLASS=m
+-
+-#
+-# LED drivers
+-#
+-CONFIG_LEDS_PCA9532=m
+-CONFIG_LEDS_GPIO=m
+-CONFIG_LEDS_CLEVO_MAIL=m
+-CONFIG_LEDS_PCA955X=m
+-
+-#
+-# LED Triggers
+-#
+-CONFIG_LEDS_TRIGGERS=y
+-CONFIG_LEDS_TRIGGER_TIMER=m
+-CONFIG_LEDS_TRIGGER_IDE_DISK=y
+-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+-# CONFIG_ACCESSIBILITY is not set
+-CONFIG_INFINIBAND=m
+-CONFIG_INFINIBAND_USER_MAD=m
+-CONFIG_INFINIBAND_USER_ACCESS=m
+-CONFIG_INFINIBAND_USER_MEM=y
+-CONFIG_INFINIBAND_ADDR_TRANS=y
+-CONFIG_INFINIBAND_MTHCA=m
+-CONFIG_INFINIBAND_MTHCA_DEBUG=y
+-CONFIG_INFINIBAND_IPATH=m
+-CONFIG_INFINIBAND_AMSO1100=m
+-# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+-CONFIG_INFINIBAND_CXGB3=m
+-# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
+-CONFIG_MLX4_INFINIBAND=m
+-CONFIG_INFINIBAND_NES=m
+-# CONFIG_INFINIBAND_NES_DEBUG is not set
+-CONFIG_INFINIBAND_IPOIB=m
+-CONFIG_INFINIBAND_IPOIB_CM=y
+-CONFIG_INFINIBAND_IPOIB_DEBUG=y
+-# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
+-CONFIG_INFINIBAND_SRP=m
+-CONFIG_INFINIBAND_ISER=m
+-CONFIG_EDAC=y
+-
+-#
+-# Reporting subsystems
+-#
+-# CONFIG_EDAC_DEBUG is not set
+-CONFIG_EDAC_MM_EDAC=m
+-CONFIG_EDAC_E752X=m
+-CONFIG_EDAC_I82975X=m
+-CONFIG_EDAC_I3000=m
+-CONFIG_EDAC_I5000=m
+-CONFIG_EDAC_I5100=m
+-CONFIG_RTC_LIB=m
+-CONFIG_RTC_CLASS=m
+-
+-#
+-# RTC interfaces
+-#
+-CONFIG_RTC_INTF_SYSFS=y
+-CONFIG_RTC_INTF_PROC=y
+-CONFIG_RTC_INTF_DEV=y
+-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+-CONFIG_RTC_DRV_TEST=m
+-
+-#
+-# I2C RTC drivers
+-#
+-CONFIG_RTC_DRV_DS1307=m
+-CONFIG_RTC_DRV_DS1374=m
+-CONFIG_RTC_DRV_DS1672=m
+-CONFIG_RTC_DRV_MAX6900=m
+-CONFIG_RTC_DRV_RS5C372=m
+-CONFIG_RTC_DRV_ISL1208=m
+-CONFIG_RTC_DRV_X1205=m
+-CONFIG_RTC_DRV_PCF8563=m
+-CONFIG_RTC_DRV_PCF8583=m
+-CONFIG_RTC_DRV_M41T80=m
+-CONFIG_RTC_DRV_M41T80_WDT=y
+-CONFIG_RTC_DRV_S35390A=m
+-CONFIG_RTC_DRV_FM3130=m
+-
+-#
+-# SPI RTC drivers
+-#
+-CONFIG_RTC_DRV_M41T94=m
+-CONFIG_RTC_DRV_DS1305=m
+-CONFIG_RTC_DRV_MAX6902=m
+-CONFIG_RTC_DRV_R9701=m
+-CONFIG_RTC_DRV_RS5C348=m
+-
+-#
+-# Platform RTC drivers
+-#
+-CONFIG_RTC_DRV_CMOS=m
+-CONFIG_RTC_DRV_DS1511=m
+-CONFIG_RTC_DRV_DS1553=m
+-CONFIG_RTC_DRV_DS1742=m
+-CONFIG_RTC_DRV_STK17TA8=m
+-CONFIG_RTC_DRV_M48T86=m
+-CONFIG_RTC_DRV_M48T59=m
+-CONFIG_RTC_DRV_V3020=m
+-
+-#
+-# on-CPU RTC drivers
+-#
+-CONFIG_DMADEVICES=y
+-
+-#
+-# DMA Devices
+-#
+-CONFIG_INTEL_IOATDMA=m
+-CONFIG_DMA_ENGINE=y
+-
+-#
+-# DMA Clients
+-#
+-CONFIG_NET_DMA=y
+-CONFIG_DMATEST=m
+-CONFIG_DCA=m
+-CONFIG_AUXDISPLAY=y
+-# CONFIG_KS0108 is not set
+-CONFIG_UIO=m
+-CONFIG_UIO_CIF=m
+-CONFIG_UIO_PDRV=m
+-CONFIG_UIO_PDRV_GENIRQ=m
+-CONFIG_UIO_SMX=m
+-CONFIG_STAGING=y
+-CONFIG_ET131X=m
+-# CONFIG_ET131X_DEBUG is not set
+-CONFIG_SLICOSS=m
+-CONFIG_SXG=m
+-CONFIG_ME4000=m
+-CONFIG_VIDEO_GO7007=m
+-CONFIG_VIDEO_GO7007_USB=m
+-CONFIG_USB_IP_COMMON=m
+-CONFIG_USB_IP_VHCI_HCD=m
+-CONFIG_USB_IP_HOST=m
+-CONFIG_W35UND=m
+-CONFIG_PRISM2_USB=m
+-CONFIG_ECHO=m
+-CONFIG_USB_ATMEL=m
+-CONFIG_AGNX=m
+-CONFIG_OTUS=m
+-CONFIG_RT2860=m
+-CONFIG_RT2870=m
+-CONFIG_RT3070=m
+-CONFIG_BENET=m
+-CONFIG_RTL8187SE=m
+-CONFIG_DRM_PSB=m
+-
+-#
+-# Firmware Drivers
+-#
+-CONFIG_EDD=m
+-# CONFIG_EDD_OFF is not set
+-CONFIG_FIRMWARE_MEMMAP=y
+-CONFIG_EFI_VARS=m
+-CONFIG_DELL_RBU=m
+-CONFIG_DCDBAS=m
+-CONFIG_DMIID=y
+-CONFIG_ISCSI_IBFT_FIND=y
+-CONFIG_ISCSI_IBFT=m
+-
+-#
+-# File systems
+-#
+-CONFIG_EXT2_FS=m
+-CONFIG_EXT2_FS_XATTR=y
+-CONFIG_EXT2_FS_POSIX_ACL=y
+-CONFIG_EXT2_FS_SECURITY=y
+-# CONFIG_EXT2_FS_XIP is not set
+-CONFIG_EXT3_FS=m
+-CONFIG_EXT3_FS_XATTR=y
+-CONFIG_EXT3_FS_POSIX_ACL=y
+-CONFIG_EXT3_FS_NFS4ACL=y
+-CONFIG_EXT3_FS_SECURITY=y
+-CONFIG_EXT4DEV_FS=m
+-CONFIG_EXT4DEV_FS_XATTR=y
+-CONFIG_EXT4DEV_FS_POSIX_ACL=y
+-CONFIG_EXT4DEV_FS_SECURITY=y
+-CONFIG_JBD=m
+-CONFIG_JBD_DEBUG=y
+-CONFIG_JBD2=m
+-CONFIG_JBD2_DEBUG=y
+-CONFIG_FS_MBCACHE=m
+-CONFIG_REISERFS_FS=m
+-# CONFIG_REISERFS_CHECK is not set
+-# CONFIG_REISERFS_PROC_INFO is not set
+-CONFIG_REISERFS_FS_XATTR=y
+-CONFIG_REISERFS_FS_POSIX_ACL=y
+-CONFIG_REISERFS_FS_SECURITY=y
+-CONFIG_JFS_FS=m
+-CONFIG_JFS_POSIX_ACL=y
+-CONFIG_JFS_SECURITY=y
+-# CONFIG_JFS_DEBUG is not set
+-CONFIG_JFS_STATISTICS=y
+-CONFIG_FS_POSIX_ACL=y
+-CONFIG_FS_NFS4ACL=y
+-CONFIG_XFS_FS=m
+-CONFIG_XFS_QUOTA=y
+-CONFIG_XFS_DMAPI=m
+-CONFIG_XFS_POSIX_ACL=y
+-CONFIG_XFS_RT=y
+-# CONFIG_XFS_DEBUG is not set
+-CONFIG_GFS2_FS=m
+-CONFIG_GFS2_FS_LOCKING_DLM=m
+-CONFIG_OCFS2_FS=m
+-CONFIG_OCFS2_FS_O2CB=m
+-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+-CONFIG_OCFS2_FS_STATS=y
+-# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+-# CONFIG_OCFS2_DEBUG_FS is not set
+-# CONFIG_OCFS2_COMPAT_JBD is not set
+-CONFIG_DNOTIFY=y
+-CONFIG_INOTIFY=y
+-CONFIG_INOTIFY_USER=y
+-CONFIG_DMAPI=m
+-# CONFIG_DMAPI_DEBUG is not set
+-CONFIG_QUOTA=y
+-CONFIG_QUOTA_NETLINK_INTERFACE=y
+-CONFIG_PRINT_QUOTA_WARNING=y
+-CONFIG_QUOTA_TREE=m
+-CONFIG_QFMT_V1=m
+-CONFIG_QFMT_V2=m
+-CONFIG_QUOTACTL=y
+-CONFIG_AUTOFS_FS=m
+-CONFIG_AUTOFS4_FS=m
+-CONFIG_FUSE_FS=m
+-CONFIG_GENERIC_ACL=y
+-
+-#
+-# CD-ROM/DVD Filesystems
+-#
+-CONFIG_ISO9660_FS=y
+-CONFIG_JOLIET=y
+-CONFIG_ZISOFS=y
+-CONFIG_UDF_FS=m
+-CONFIG_UDF_NLS=y
+-
+-#
+-# DOS/FAT/NT Filesystems
+-#
+-CONFIG_FAT_FS=m
+-CONFIG_MSDOS_FS=m
+-CONFIG_VFAT_FS=m
+-CONFIG_FAT_DEFAULT_CODEPAGE=437
+-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+-CONFIG_NTFS_FS=m
+-# CONFIG_NTFS_DEBUG is not set
+-CONFIG_NTFS_RW=y
+-
+-#
+-# Pseudo filesystems
+-#
+-CONFIG_PROC_FS=y
+-CONFIG_PROC_KCORE=y
+-CONFIG_PROC_VMCORE=y
+-CONFIG_PROC_SYSCTL=y
+-CONFIG_SYSFS=y
+-CONFIG_TMPFS=y
+-CONFIG_TMPFS_POSIX_ACL=y
+-CONFIG_HUGETLBFS=y
+-CONFIG_HUGETLB_PAGE=y
+-CONFIG_CONFIGFS_FS=m
+-
+-#
+-# Miscellaneous filesystems
+-#
+-CONFIG_ADFS_FS=m
+-# CONFIG_ADFS_FS_RW is not set
+-CONFIG_AFFS_FS=m
+-CONFIG_ECRYPT_FS=m
+-CONFIG_HFS_FS=m
+-CONFIG_HFSPLUS_FS=m
+-CONFIG_BEFS_FS=m
+-# CONFIG_BEFS_DEBUG is not set
+-CONFIG_BFS_FS=m
+-CONFIG_EFS_FS=m
+-CONFIG_JFFS2_FS=m
+-CONFIG_JFFS2_FS_DEBUG=0
+-CONFIG_JFFS2_FS_WRITEBUFFER=y
+-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+-CONFIG_JFFS2_SUMMARY=y
+-CONFIG_JFFS2_FS_XATTR=y
+-CONFIG_JFFS2_FS_POSIX_ACL=y
+-CONFIG_JFFS2_FS_SECURITY=y
+-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+-CONFIG_JFFS2_ZLIB=y
+-# CONFIG_JFFS2_LZO is not set
+-CONFIG_JFFS2_RTIME=y
+-# CONFIG_JFFS2_RUBIN is not set
+-# CONFIG_JFFS2_CMODE_NONE is not set
+-CONFIG_JFFS2_CMODE_PRIORITY=y
+-# CONFIG_JFFS2_CMODE_SIZE is not set
+-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+-CONFIG_UBIFS_FS=m
+-CONFIG_UBIFS_FS_XATTR=y
+-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+-CONFIG_UBIFS_FS_LZO=y
+-CONFIG_UBIFS_FS_ZLIB=y
+-# CONFIG_UBIFS_FS_DEBUG is not set
+-CONFIG_CRAMFS=m
+-CONFIG_SQUASHFS=m
+-# CONFIG_SQUASHFS_EMBEDDED is not set
+-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+-CONFIG_VXFS_FS=m
+-CONFIG_MINIX_FS=y
+-CONFIG_OMFS_FS=m
+-CONFIG_HPFS_FS=m
+-CONFIG_QNX4FS_FS=m
+-CONFIG_ROMFS_FS=m
+-CONFIG_SYSV_FS=m
+-CONFIG_UFS_FS=m
+-CONFIG_UFS_FS_WRITE=y
+-# CONFIG_UFS_DEBUG is not set
+-CONFIG_NETWORK_FILESYSTEMS=y
+-CONFIG_NFS_FS=m
+-CONFIG_NFS_V3=y
+-CONFIG_NFS_V3_ACL=y
+-CONFIG_NFS_V4=y
+-CONFIG_NFS_SWAP=y
+-CONFIG_NFSD=m
+-CONFIG_NFSD_V2_ACL=y
+-CONFIG_NFSD_V3=y
+-CONFIG_NFSD_V3_ACL=y
+-CONFIG_NFSD_V4=y
+-CONFIG_LOCKD=m
+-CONFIG_LOCKD_V4=y
+-CONFIG_EXPORTFS=m
+-CONFIG_NFS_ACL_SUPPORT=m
+-CONFIG_NFS_COMMON=y
+-CONFIG_SUNRPC=m
+-CONFIG_SUNRPC_GSS=m
+-CONFIG_SUNRPC_XPRT_RDMA=m
+-CONFIG_SUNRPC_SWAP=y
+-CONFIG_RPCSEC_GSS_KRB5=m
+-CONFIG_RPCSEC_GSS_SPKM3=m
+-# CONFIG_SMB_FS is not set
+-CONFIG_CIFS=m
+-CONFIG_CIFS_STATS=y
+-CONFIG_CIFS_STATS2=y
+-CONFIG_CIFS_WEAK_PW_HASH=y
+-CONFIG_CIFS_UPCALL=y
+-CONFIG_CIFS_XATTR=y
+-CONFIG_CIFS_POSIX=y
+-# CONFIG_CIFS_DEBUG2 is not set
+-CONFIG_CIFS_EXPERIMENTAL=y
+-CONFIG_CIFS_DFS_UPCALL=y
+-CONFIG_NCP_FS=m
+-CONFIG_NCPFS_PACKET_SIGNING=y
+-CONFIG_NCPFS_IOCTL_LOCKING=y
+-CONFIG_NCPFS_STRONG=y
+-CONFIG_NCPFS_NFS_NS=y
+-CONFIG_NCPFS_OS2_NS=y
+-CONFIG_NCPFS_SMALLDOS=y
+-CONFIG_NCPFS_NLS=y
+-CONFIG_NCPFS_EXTRAS=y
+-CONFIG_CODA_FS=m
+-CONFIG_AFS_FS=m
+-# CONFIG_AFS_DEBUG is not set
+-CONFIG_9P_FS=m
+-CONFIG_NOVFS=m
+-
+-#
+-# Partition Types
+-#
+-CONFIG_PARTITION_ADVANCED=y
+-# CONFIG_ACORN_PARTITION is not set
+-CONFIG_OSF_PARTITION=y
+-# CONFIG_AMIGA_PARTITION is not set
+-CONFIG_ATARI_PARTITION=y
+-CONFIG_MAC_PARTITION=y
+-CONFIG_MSDOS_PARTITION=y
+-CONFIG_BSD_DISKLABEL=y
+-# CONFIG_MINIX_SUBPARTITION is not set
+-CONFIG_SOLARIS_X86_PARTITION=y
+-CONFIG_UNIXWARE_DISKLABEL=y
+-CONFIG_LDM_PARTITION=y
+-# CONFIG_LDM_DEBUG is not set
+-CONFIG_SGI_PARTITION=y
+-CONFIG_ULTRIX_PARTITION=y
+-CONFIG_SUN_PARTITION=y
+-CONFIG_KARMA_PARTITION=y
+-CONFIG_EFI_PARTITION=y
+-CONFIG_SYSV68_PARTITION=y
+-CONFIG_NLS=y
+-CONFIG_NLS_DEFAULT="utf8"
+-CONFIG_NLS_CODEPAGE_437=m
+-CONFIG_NLS_CODEPAGE_737=m
+-CONFIG_NLS_CODEPAGE_775=m
+-CONFIG_NLS_CODEPAGE_850=m
+-CONFIG_NLS_CODEPAGE_852=m
+-CONFIG_NLS_CODEPAGE_855=m
+-CONFIG_NLS_CODEPAGE_857=m
+-CONFIG_NLS_CODEPAGE_860=m
+-CONFIG_NLS_CODEPAGE_861=m
+-CONFIG_NLS_CODEPAGE_862=m
+-CONFIG_NLS_CODEPAGE_863=m
+-CONFIG_NLS_CODEPAGE_864=m
+-CONFIG_NLS_CODEPAGE_865=m
+-CONFIG_NLS_CODEPAGE_866=m
+-CONFIG_NLS_CODEPAGE_869=m
+-CONFIG_NLS_CODEPAGE_936=m
+-CONFIG_NLS_CODEPAGE_950=m
+-CONFIG_NLS_CODEPAGE_932=m
+-CONFIG_NLS_CODEPAGE_949=m
+-CONFIG_NLS_CODEPAGE_874=m
+-CONFIG_NLS_ISO8859_8=m
+-CONFIG_NLS_CODEPAGE_1250=m
+-CONFIG_NLS_CODEPAGE_1251=m
+-CONFIG_NLS_ASCII=m
+-CONFIG_NLS_ISO8859_1=m
+-CONFIG_NLS_ISO8859_2=m
+-CONFIG_NLS_ISO8859_3=m
+-CONFIG_NLS_ISO8859_4=m
+-CONFIG_NLS_ISO8859_5=m
+-CONFIG_NLS_ISO8859_6=m
+-CONFIG_NLS_ISO8859_7=m
+-CONFIG_NLS_ISO8859_9=m
+-CONFIG_NLS_ISO8859_13=m
+-CONFIG_NLS_ISO8859_14=m
+-CONFIG_NLS_ISO8859_15=m
+-CONFIG_NLS_KOI8_R=m
+-CONFIG_NLS_KOI8_U=m
+-CONFIG_NLS_UTF8=m
+-CONFIG_DLM=m
+-# CONFIG_DLM_DEBUG is not set
+-
+-#
+-# Kernel hacking
+-#
+-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+-# CONFIG_PRINTK_TIME is not set
+-CONFIG_ENABLE_WARN_DEPRECATED=y
+-# CONFIG_ENABLE_MUST_CHECK is not set
+-CONFIG_FRAME_WARN=1024
+-CONFIG_MAGIC_SYSRQ=y
+-CONFIG_UNUSED_SYMBOLS=y
+-CONFIG_DEBUG_FS=y
+-# CONFIG_HEADERS_CHECK is not set
+-CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SHIRQ is not set
+-# CONFIG_DETECT_SOFTLOCKUP is not set
+-CONFIG_SCHED_DEBUG=y
+-CONFIG_SCHEDSTATS=y
+-CONFIG_TIMER_STATS=y
+-# CONFIG_DEBUG_OBJECTS is not set
+-# CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_RT_MUTEXES is not set
+-# CONFIG_RT_MUTEX_TESTER is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_LOCK_ALLOC is not set
+-# CONFIG_PROVE_LOCKING is not set
+-# CONFIG_LOCK_STAT is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+-CONFIG_STACKTRACE=y
+-# CONFIG_DEBUG_KOBJECT is not set
+-CONFIG_DEBUG_BUGVERBOSE=y
+-CONFIG_DEBUG_INFO=y
+-# CONFIG_DEBUG_VM is not set
+-# CONFIG_DEBUG_WRITECOUNT is not set
+-CONFIG_DEBUG_MEMORY_INIT=y
+-# CONFIG_DEBUG_LIST is not set
+-# CONFIG_DEBUG_SG is not set
+-# CONFIG_FRAME_POINTER is not set
+-CONFIG_UNWIND_INFO=y
+-CONFIG_STACK_UNWIND=y
+-# CONFIG_BOOT_PRINTK_DELAY is not set
+-CONFIG_RCU_TORTURE_TEST=m
+-# CONFIG_KPROBES_SANITY_TEST is not set
+-CONFIG_BACKTRACE_SELF_TEST=m
+-CONFIG_LKDTM=m
+-# CONFIG_FAULT_INJECTION is not set
+-CONFIG_LATENCYTOP=y
+-CONFIG_SYSCTL_SYSCALL_CHECK=y
+-CONFIG_HAVE_FTRACE=y
+-CONFIG_HAVE_DYNAMIC_FTRACE=y
+-# CONFIG_FTRACE is not set
+-# CONFIG_IRQSOFF_TRACER is not set
+-# CONFIG_SYSPROF_TRACER is not set
+-# CONFIG_SCHED_TRACER is not set
+-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+-CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+-CONFIG_DYNAMIC_PRINTK_DEBUG=y
+-# CONFIG_SAMPLES is not set
+-CONFIG_HAVE_ARCH_KGDB=y
+-# CONFIG_KGDB is not set
+-# CONFIG_STRICT_DEVMEM is not set
+-# CONFIG_X86_VERBOSE_BOOTUP is not set
+-CONFIG_EARLY_PRINTK=y
+-CONFIG_EARLY_PRINTK_DBGP=y
+-# CONFIG_DEBUG_STACKOVERFLOW is not set
+-# CONFIG_DEBUG_STACK_USAGE is not set
+-# CONFIG_DEBUG_PAGEALLOC is not set
+-# CONFIG_DEBUG_PER_CPU_MAPS is not set
+-# CONFIG_X86_PTDUMP is not set
+-CONFIG_DEBUG_RODATA=y
+-# CONFIG_DEBUG_RODATA_TEST is not set
+-# CONFIG_DEBUG_NX_TEST is not set
+-# CONFIG_IOMMU_DEBUG is not set
+-# CONFIG_MMIOTRACE is not set
+-CONFIG_IO_DELAY_TYPE_0X80=0
+-CONFIG_IO_DELAY_TYPE_0XED=1
+-CONFIG_IO_DELAY_TYPE_UDELAY=2
+-CONFIG_IO_DELAY_TYPE_NONE=3
+-CONFIG_IO_DELAY_0X80=y
+-# CONFIG_IO_DELAY_0XED is not set
+-# CONFIG_IO_DELAY_UDELAY is not set
+-# CONFIG_IO_DELAY_NONE is not set
+-CONFIG_DEFAULT_IO_DELAY_TYPE=0
+-# CONFIG_DEBUG_BOOT_PARAMS is not set
+-# CONFIG_CPA_DEBUG is not set
+-# CONFIG_OPTIMIZE_INLINING is not set
+-CONFIG_KDB=y
+-CONFIG_KDB_MODULES=m
+-CONFIG_KDB_OFF=y
+-CONFIG_KDB_CONTINUE_CATASTROPHIC=0
+-CONFIG_KDB_USB=y
+-CONFIG_KDB_KDUMP=y
+-
+-#
+-# Security options
+-#
+-CONFIG_KEYS=y
+-CONFIG_KEYS_DEBUG_PROC_KEYS=y
+-CONFIG_SECURITY=y
+-CONFIG_SECURITY_DEFAULT="apparmor"
+-CONFIG_SECURITY_NETWORK=y
+-# CONFIG_SECURITY_NETWORK_XFRM is not set
+-CONFIG_SECURITY_FILE_CAPABILITIES=y
+-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+-CONFIG_SECURITY_SELINUX=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
+-CONFIG_SECURITY_SELINUX_DISABLE=y
+-CONFIG_SECURITY_SELINUX_DEVELOP=y
+-CONFIG_SECURITY_SELINUX_AVC_STATS=y
+-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
+-CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
+-# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+-CONFIG_SECURITY_APPARMOR=y
+-CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
+-CONFIG_SECURITY_APPARMOR_DISABLE=y
+-CONFIG_XOR_BLOCKS=m
+-CONFIG_ASYNC_CORE=m
+-CONFIG_ASYNC_MEMCPY=m
+-CONFIG_ASYNC_XOR=m
+-CONFIG_CRYPTO=y
+-
+-#
+-# Crypto core or helper
+-#
+-CONFIG_CRYPTO_ALGAPI=y
+-CONFIG_CRYPTO_AEAD=m
+-CONFIG_CRYPTO_BLKCIPHER=m
+-CONFIG_CRYPTO_HASH=y
+-CONFIG_CRYPTO_MANAGER=y
+-CONFIG_CRYPTO_GF128MUL=m
+-CONFIG_CRYPTO_NULL=m
+-CONFIG_CRYPTO_CRYPTD=m
+-CONFIG_CRYPTO_AUTHENC=m
+-CONFIG_CRYPTO_TEST=m
+-
+-#
+-# Authenticated Encryption with Associated Data
+-#
+-CONFIG_CRYPTO_CCM=m
+-CONFIG_CRYPTO_GCM=m
+-CONFIG_CRYPTO_SEQIV=m
+-
+-#
+-# Block modes
+-#
+-CONFIG_CRYPTO_CBC=m
+-CONFIG_CRYPTO_CTR=m
+-CONFIG_CRYPTO_CTS=m
+-CONFIG_CRYPTO_ECB=m
+-CONFIG_CRYPTO_LRW=m
+-CONFIG_CRYPTO_PCBC=m
+-CONFIG_CRYPTO_XTS=m
+-
+-#
+-# Hash modes
+-#
+-CONFIG_CRYPTO_HMAC=y
+-CONFIG_CRYPTO_XCBC=m
+-
+-#
+-# Digest
+-#
+-CONFIG_CRYPTO_CRC32C=m
+-CONFIG_CRYPTO_MD4=m
+-CONFIG_CRYPTO_MD5=m
+-CONFIG_CRYPTO_MICHAEL_MIC=m
+-CONFIG_CRYPTO_RMD128=m
+-CONFIG_CRYPTO_RMD160=m
+-CONFIG_CRYPTO_RMD256=m
+-CONFIG_CRYPTO_RMD320=m
+-CONFIG_CRYPTO_SHA1=m
+-CONFIG_CRYPTO_SHA256=m
+-CONFIG_CRYPTO_SHA512=m
+-CONFIG_CRYPTO_TGR192=m
+-CONFIG_CRYPTO_WP512=m
+-
+-#
+-# Ciphers
+-#
+-CONFIG_CRYPTO_AES=m
+-CONFIG_CRYPTO_AES_X86_64=m
+-CONFIG_CRYPTO_ANUBIS=m
+-CONFIG_CRYPTO_ARC4=m
+-CONFIG_CRYPTO_BLOWFISH=m
+-CONFIG_CRYPTO_CAMELLIA=m
+-CONFIG_CRYPTO_CAST5=m
+-CONFIG_CRYPTO_CAST6=m
+-CONFIG_CRYPTO_DES=m
+-CONFIG_CRYPTO_FCRYPT=m
+-CONFIG_CRYPTO_KHAZAD=m
+-CONFIG_CRYPTO_SALSA20=m
+-CONFIG_CRYPTO_SALSA20_X86_64=m
+-CONFIG_CRYPTO_SEED=m
+-CONFIG_CRYPTO_SERPENT=m
+-CONFIG_CRYPTO_TEA=m
+-# CONFIG_CRYPTO_TWOFISH is not set
+-CONFIG_CRYPTO_TWOFISH_COMMON=m
+-CONFIG_CRYPTO_TWOFISH_X86_64=m
+-
+-#
+-# Compression
+-#
+-CONFIG_CRYPTO_DEFLATE=m
+-CONFIG_CRYPTO_LZO=m
+-CONFIG_CRYPTO_HW=y
+-CONFIG_CRYPTO_DEV_HIFN_795X=m
+-CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+-CONFIG_HAVE_KVM=y
+-CONFIG_VIRTUALIZATION=y
+-CONFIG_KVM_KMP=y
+-# CONFIG_KVM is not set
+-CONFIG_VIRTIO=m
+-CONFIG_VIRTIO_RING=m
+-CONFIG_VIRTIO_PCI=m
+-CONFIG_VIRTIO_BALLOON=m
+-
+-#
+-# Library routines
+-#
+-CONFIG_BITREVERSE=y
+-CONFIG_GENERIC_FIND_FIRST_BIT=y
+-CONFIG_GENERIC_FIND_NEXT_BIT=y
+-CONFIG_CRC_CCITT=m
+-CONFIG_CRC16=m
+-CONFIG_CRC_T10DIF=m
+-CONFIG_CRC_ITU_T=m
+-CONFIG_CRC32=y
+-CONFIG_CRC7=m
+-CONFIG_LIBCRC32C=m
+-CONFIG_ZLIB_INFLATE=y
+-CONFIG_ZLIB_DEFLATE=m
+-CONFIG_LZO_COMPRESS=m
+-CONFIG_LZO_DECOMPRESS=m
+-CONFIG_GENERIC_ALLOCATOR=y
+-CONFIG_REED_SOLOMON=m
+-CONFIG_REED_SOLOMON_DEC16=y
+-CONFIG_TEXTSEARCH=y
+-CONFIG_TEXTSEARCH_KMP=m
+-CONFIG_TEXTSEARCH_BM=m
+-CONFIG_TEXTSEARCH_FSM=m
+-CONFIG_PLIST=y
+-CONFIG_HAS_IOMEM=y
+-CONFIG_HAS_IOPORT=y
+-CONFIG_HAS_DMA=y
+-CONFIG_CHECK_SIGNATURE=y
+diff --git a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config b/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config
+deleted file mode 100644
+index 69bca9a..0000000
+--- a/lustre/kernel_patches/kernel_configs/kernel-2.6.27-2.6-sles11-x86_64.config
++++ /dev/null
+@@ -1,4143 +0,0 @@
+-#
+-# Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.27.21
+-# Wed May 13 22:02:04 2009
+-#
+-CONFIG_64BIT=y
+-# CONFIG_X86_32 is not set
+-CONFIG_X86_64=y
+-CONFIG_X86=y
+-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/x86_64_defconfig"
+-# CONFIG_GENERIC_LOCKBREAK is not set
+-CONFIG_GENERIC_TIME=y
+-CONFIG_GENERIC_CMOS_UPDATE=y
+-CONFIG_CLOCKSOURCE_WATCHDOG=y
+-CONFIG_GENERIC_CLOCKEVENTS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+-CONFIG_LOCKDEP_SUPPORT=y
+-CONFIG_STACKTRACE_SUPPORT=y
+-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+-CONFIG_FAST_CMPXCHG_LOCAL=y
+-CONFIG_MMU=y
+-CONFIG_ZONE_DMA=y
+-CONFIG_GENERIC_ISA_DMA=y
+-CONFIG_GENERIC_IOMAP=y
+-CONFIG_GENERIC_BUG=y
+-CONFIG_GENERIC_HWEIGHT=y
+-CONFIG_GENERIC_GPIO=y
+-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+-CONFIG_RWSEM_GENERIC_SPINLOCK=y
+-# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set
+-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
+-CONFIG_GENERIC_CALIBRATE_DELAY=y
+-CONFIG_GENERIC_TIME_VSYSCALL=y
+-CONFIG_ARCH_HAS_CPU_RELAX=y
+-CONFIG_ARCH_HAS_DEFAULT_IDLE=y
+-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+-CONFIG_HAVE_CPUMASK_OF_CPU_MAP=y
+-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+-CONFIG_ARCH_SUSPEND_POSSIBLE=y
+-CONFIG_ZONE_DMA32=y
+-CONFIG_ARCH_POPULATES_NODE_MAP=y
+-CONFIG_AUDIT_ARCH=y
+-CONFIG_ARCH_SUPPORTS_AOUT=y
+-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+-CONFIG_GENERIC_HARDIRQS=y
+-CONFIG_GENERIC_IRQ_PROBE=y
+-CONFIG_GENERIC_PENDING_IRQ=y
+-CONFIG_X86_SMP=y
+-CONFIG_X86_64_SMP=y
+-CONFIG_X86_HT=y
+-CONFIG_X86_BIOS_REBOOT=y
+-CONFIG_X86_TRAMPOLINE=y
+-# CONFIG_KTIME_SCALAR is not set
+-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+-
+-#
+-# General setup
+-#
+-CONFIG_EXPERIMENTAL=y
+-CONFIG_LOCK_KERNEL=y
+-CONFIG_INIT_ENV_ARG_LIMIT=32
+-CONFIG_LOCALVERSION="-0.1-default"
+-# CONFIG_LOCALVERSION_AUTO is not set
+-CONFIG_SUSE_KERNEL=y
+-CONFIG_SWAP=y
+-CONFIG_SYSVIPC=y
+-CONFIG_SYSVIPC_SYSCTL=y
+-CONFIG_POSIX_MQUEUE=y
+-CONFIG_BSD_PROCESS_ACCT=y
+-CONFIG_BSD_PROCESS_ACCT_V3=y
+-CONFIG_TASKSTATS=y
+-CONFIG_TASK_DELAY_ACCT=y
+-CONFIG_TASK_XACCT=y
+-CONFIG_TASK_IO_ACCOUNTING=y
+-CONFIG_AUDIT=y
+-CONFIG_AUDITSYSCALL=y
+-CONFIG_AUDIT_TREE=y
+-CONFIG_IKCONFIG=y
+-CONFIG_IKCONFIG_PROC=y
+-CONFIG_LOG_BUF_SHIFT=18
+-CONFIG_CGROUPS=y
+-# CONFIG_CGROUP_DEBUG is not set
+-CONFIG_CGROUP_NS=y
+-CONFIG_CGROUP_FREEZER=y
+-CONFIG_CGROUP_DEVICE=y
+-CONFIG_CPUSETS=y
+-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+-CONFIG_GROUP_SCHED=y
+-CONFIG_FAIR_GROUP_SCHED=y
+-# CONFIG_RT_GROUP_SCHED is not set
+-# CONFIG_USER_SCHED is not set
+-CONFIG_CGROUP_SCHED=y
+-CONFIG_CGROUP_CPUACCT=y
+-CONFIG_RESOURCE_COUNTERS=y
+-CONFIG_MM_OWNER=y
+-CONFIG_CGROUP_MEM_RES_CTLR=y
+-# CONFIG_SYSFS_DEPRECATED_V2 is not set
+-CONFIG_PROC_PID_CPUSET=y
+-CONFIG_RELAY=y
+-CONFIG_NAMESPACES=y
+-CONFIG_UTS_NS=y
+-CONFIG_IPC_NS=y
+-CONFIG_USER_NS=y
+-CONFIG_PID_NS=y
+-CONFIG_BLK_DEV_INITRD=y
+-CONFIG_INITRAMFS_SOURCE=""
+-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+-CONFIG_SYSCTL=y
+-# CONFIG_EMBEDDED is not set
+-CONFIG_UID16=y
+-CONFIG_SYSCTL_SYSCALL=y
+-CONFIG_KALLSYMS=y
+-CONFIG_KALLSYMS_ALL=y
+-# CONFIG_KALLSYMS_EXTRA_PASS is not set
+-CONFIG_HOTPLUG=y
+-CONFIG_PRINTK=y
+-CONFIG_BUG=y
+-CONFIG_ELF_CORE=y
+-CONFIG_PCSPKR_PLATFORM=y
+-CONFIG_COMPAT_BRK=y
+-CONFIG_BASE_FULL=y
+-CONFIG_FUTEX=y
+-CONFIG_ANON_INODES=y
+-CONFIG_EPOLL=y
+-CONFIG_SIGNALFD=y
+-CONFIG_TIMERFD=y
+-CONFIG_EVENTFD=y
+-CONFIG_SHMEM=y
+-CONFIG_VM_EVENT_COUNTERS=y
+-CONFIG_SLAB=y
+-# CONFIG_SLUB is not set
+-# CONFIG_SLOB is not set
+-CONFIG_PROFILING=y
+-# CONFIG_TRACEPOINTS is not set
+-CONFIG_MARKERS=y
+-CONFIG_OPROFILE=m
+-CONFIG_HAVE_OPROFILE=y
+-CONFIG_KPROBES=y
+-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+-CONFIG_KRETPROBES=y
+-CONFIG_HAVE_IOREMAP_PROT=y
+-CONFIG_HAVE_KPROBES=y
+-CONFIG_HAVE_KRETPROBES=y
+-CONFIG_HAVE_ARCH_TRACEHOOK=y
+-# CONFIG_HAVE_DMA_ATTRS is not set
+-CONFIG_USE_GENERIC_SMP_HELPERS=y
+-# CONFIG_HAVE_CLK is not set
+-CONFIG_PROC_PAGE_MONITOR=y
+-# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+-CONFIG_SLABINFO=y
+-CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+-CONFIG_BASE_SMALL=0
+-CONFIG_MODULES=y
+-CONFIG_MODULE_FORCE_LOAD=y
+-CONFIG_MODULE_UNLOAD=y
+-CONFIG_MODULE_FORCE_UNLOAD=y
+-CONFIG_MODVERSIONS=y
+-CONFIG_MODULE_SRCVERSION_ALL=y
+-CONFIG_KMOD=y
+-CONFIG_STOP_MACHINE=y
+-# CONFIG_UTRACE is not set
+-CONFIG_BLOCK=y
+-CONFIG_BLK_DEV_IO_TRACE=y
+-CONFIG_BLK_DEV_BSG=y
+-CONFIG_BLK_DEV_INTEGRITY=y
+-CONFIG_BLOCK_COMPAT=y
+-
+-#
+-# IO Schedulers
+-#
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_DEFAULT_AS is not set
+-CONFIG_DEFAULT_DEADLINE=y
+-# CONFIG_DEFAULT_CFQ is not set
+-# CONFIG_DEFAULT_NOOP is not set
+-CONFIG_DEFAULT_IOSCHED="deadline"
+-CONFIG_PREEMPT_NOTIFIERS=y
+-CONFIG_CLASSIC_RCU=y
+-CONFIG_FREEZER=y
+-
+-#
+-# Processor type and features
+-#
+-CONFIG_TICK_ONESHOT=y
+-CONFIG_NO_HZ=y
+-CONFIG_HIGH_RES_TIMERS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+-CONFIG_SMP=y
+-CONFIG_X86_FIND_SMP_CONFIG=y
+-CONFIG_X86_MPPARSE=y
+-CONFIG_X86_PC=y
+-# CONFIG_X86_XEN is not set
+-# CONFIG_X86_ELAN is not set
+-# CONFIG_X86_VOYAGER is not set
+-# CONFIG_X86_GENERICARCH is not set
+-# CONFIG_X86_64_XEN is not set
+-# CONFIG_X86_VSMP is not set
+-# CONFIG_PARAVIRT_GUEST is not set
+-CONFIG_MEMTEST=y
+-# CONFIG_M386 is not set
+-# CONFIG_M486 is not set
+-# CONFIG_M586 is not set
+-# CONFIG_M586TSC is not set
+-# CONFIG_M586MMX is not set
+-# CONFIG_M686 is not set
+-# CONFIG_MPENTIUMII is not set
+-# CONFIG_MPENTIUMIII is not set
+-# CONFIG_MPENTIUMM is not set
+-# CONFIG_MPENTIUM4 is not set
+-# CONFIG_MK6 is not set
+-# CONFIG_MK7 is not set
+-# CONFIG_MK8 is not set
+-# CONFIG_MCRUSOE is not set
+-# CONFIG_MEFFICEON is not set
+-# CONFIG_MWINCHIPC6 is not set
+-# CONFIG_MWINCHIP2 is not set
+-# CONFIG_MWINCHIP3D is not set
+-# CONFIG_MGEODEGX1 is not set
+-# CONFIG_MGEODE_LX is not set
+-# CONFIG_MCYRIXIII is not set
+-# CONFIG_MVIAC3_2 is not set
+-# CONFIG_MVIAC7 is not set
+-# CONFIG_MPSC is not set
+-# CONFIG_MCORE2 is not set
+-CONFIG_GENERIC_CPU=y
+-CONFIG_X86_CPU=y
+-CONFIG_X86_L1_CACHE_BYTES=128
+-CONFIG_X86_INTERNODE_CACHE_BYTES=128
+-CONFIG_X86_CMPXCHG=y
+-CONFIG_X86_L1_CACHE_SHIFT=7
+-CONFIG_X86_WP_WORKS_OK=y
+-CONFIG_X86_TSC=y
+-CONFIG_X86_CMPXCHG64=y
+-CONFIG_X86_CMOV=y
+-CONFIG_X86_MINIMUM_CPU_FAMILY=64
+-CONFIG_X86_DEBUGCTLMSR=y
+-CONFIG_HPET_TIMER=y
+-CONFIG_HPET_EMULATE_RTC=y
+-CONFIG_DMI=y
+-CONFIG_GART_IOMMU=y
+-CONFIG_CALGARY_IOMMU=y
+-# CONFIG_CALGARY_IOMMU_ENABLED_BY_DEFAULT is not set
+-CONFIG_AMD_IOMMU=y
+-CONFIG_SWIOTLB=y
+-CONFIG_IOMMU_HELPER=y
+-CONFIG_MAXSMP=y
+-CONFIG_NR_CPUS=512
+-CONFIG_SCHED_SMT=y
+-CONFIG_SCHED_MC=y
+-CONFIG_PREEMPT_NONE=y
+-# CONFIG_PREEMPT_VOLUNTARY is not set
+-# CONFIG_PREEMPT is not set
+-# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
+-CONFIG_X86_LOCAL_APIC=y
+-CONFIG_X86_IO_APIC=y
+-CONFIG_X86_MCE=y
+-CONFIG_X86_MCE_INTEL=y
+-CONFIG_X86_MCE_AMD=y
+-CONFIG_I8K=m
+-CONFIG_MICROCODE=m
+-CONFIG_MICROCODE_OLD_INTERFACE=y
+-CONFIG_X86_MSR=m
+-CONFIG_X86_CPUID=m
+-CONFIG_DIRECT_GBPAGES=y
+-CONFIG_NUMA=y
+-CONFIG_K8_NUMA=y
+-CONFIG_X86_64_ACPI_NUMA=y
+-CONFIG_NODES_SPAN_OTHER_NODES=y
+-CONFIG_NUMA_EMU=y
+-CONFIG_NODES_SHIFT=9
+-CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+-CONFIG_ARCH_SPARSEMEM_ENABLE=y
+-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
+-CONFIG_ARCH_MEMORY_PROBE=y
+-CONFIG_SELECT_MEMORY_MODEL=y
+-# CONFIG_FLATMEM_MANUAL is not set
+-# CONFIG_DISCONTIGMEM_MANUAL is not set
+-CONFIG_SPARSEMEM_MANUAL=y
+-CONFIG_SPARSEMEM=y
+-CONFIG_NEED_MULTIPLE_NODES=y
+-CONFIG_HAVE_MEMORY_PRESENT=y
+-# CONFIG_SPARSEMEM_STATIC is not set
+-CONFIG_SPARSEMEM_EXTREME=y
+-CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+-CONFIG_SPARSEMEM_VMEMMAP=y
+-CONFIG_MEMORY_HOTPLUG=y
+-CONFIG_MEMORY_HOTPLUG_SPARSE=y
+-CONFIG_PAGEFLAGS_EXTENDED=y
+-CONFIG_SPLIT_PTLOCK_CPUS=4
+-CONFIG_MIGRATION=y
+-CONFIG_RESOURCES_64BIT=y
+-CONFIG_ZONE_DMA_FLAG=1
+-CONFIG_BOUNCE=y
+-CONFIG_VIRT_TO_BUS=y
+-CONFIG_MMU_NOTIFIER=y
+-CONFIG_X86_RESERVE_LOW_64K=y
+-CONFIG_MTRR=y
+-# CONFIG_MTRR_SANITIZER is not set
+-CONFIG_X86_PAT=y
+-CONFIG_EFI=y
+-CONFIG_SECCOMP=y
+-# CONFIG_SECCOMP_DISABLE_TSC is not set
+-# CONFIG_HZ_100 is not set
+-CONFIG_HZ_250=y
+-# CONFIG_HZ_300 is not set
+-# CONFIG_HZ_1000 is not set
+-CONFIG_HZ=250
+-CONFIG_SCHED_HRTICK=y
+-CONFIG_KEXEC=y
+-CONFIG_CRASH_DUMP=y
+-CONFIG_PHYSICAL_START=0x200000
+-CONFIG_RELOCATABLE=y
+-CONFIG_PHYSICAL_ALIGN=0x200000
+-CONFIG_HOTPLUG_CPU=y
+-CONFIG_COMPAT_VDSO=y
+-
+-#
+-# Hardware Performance Monitoring support
+-#
+-CONFIG_PERFMON=y
+-# CONFIG_PERFMON_DEBUG is not set
+-CONFIG_PERFMON_DEBUG_FS=y
+-CONFIG_X86_PERFMON_P4=m
+-CONFIG_X86_PERFMON_PEBS_P4=m
+-CONFIG_X86_PERFMON_CORE=m
+-CONFIG_X86_PERFMON_PEBS_CORE=m
+-CONFIG_X86_PERFMON_INTEL_ATOM=m
+-CONFIG_X86_PERFMON_INTEL_ARCH=m
+-CONFIG_X86_PERFMON_AMD64=m
+-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+-CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
+-
+-#
+-# Power management options
+-#
+-CONFIG_ARCH_HIBERNATION_HEADER=y
+-CONFIG_PM=y
+-# CONFIG_PM_DEBUG is not set
+-CONFIG_PM_SLEEP_SMP=y
+-CONFIG_PM_SLEEP=y
+-CONFIG_SUSPEND=y
+-CONFIG_SUSPEND_FREEZER=y
+-CONFIG_HIBERNATION=y
+-CONFIG_PM_STD_PARTITION=""
+-CONFIG_ACPI=y
+-CONFIG_ACPI_SLEEP=y
+-CONFIG_ACPI_PROCFS=y
+-CONFIG_ACPI_PROCFS_POWER=y
+-CONFIG_ACPI_SYSFS_POWER=y
+-CONFIG_ACPI_PROC_EVENT=y
+-CONFIG_ACPI_AC=m
+-CONFIG_ACPI_BATTERY=m
+-CONFIG_ACPI_BUTTON=m
+-CONFIG_ACPI_VIDEO=m
+-CONFIG_ACPI_FAN=m
+-CONFIG_ACPI_DOCK=m
+-CONFIG_ACPI_PROCESSOR=m
+-CONFIG_ACPI_HOTPLUG_CPU=y
+-CONFIG_ACPI_THERMAL=m
+-CONFIG_ACPI_NUMA=y
+-CONFIG_ACPI_WMI=m
+-# CONFIG_ACPI_ASUS is not set
+-CONFIG_ACPI_TOSHIBA=m
+-CONFIG_ACPI_CUSTOM_DSDT_FILE=""
+-# CONFIG_ACPI_CUSTOM_DSDT is not set
+-CONFIG_ACPI_CUSTOM_DSDT_INITRD=y
+-CONFIG_ACPI_BLACKLIST_YEAR=0
+-CONFIG_ACPI_DEBUG=y
+-# CONFIG_ACPI_DEBUG_FUNC_TRACE is not set
+-CONFIG_ACPI_EC=y
+-CONFIG_ACPI_PCI_SLOT=m
+-CONFIG_ACPI_POWER=y
+-CONFIG_ACPI_SYSTEM=y
+-CONFIG_X86_PM_TIMER=y
+-CONFIG_ACPI_CONTAINER=m
+-CONFIG_ACPI_HOTPLUG_MEMORY=m
+-CONFIG_ACPI_SBS=m
+-
+-#
+-# CPU Frequency scaling
+-#
+-CONFIG_CPU_FREQ=y
+-CONFIG_CPU_FREQ_TABLE=y
+-# CONFIG_CPU_FREQ_DEBUG is not set
+-CONFIG_CPU_FREQ_STAT=m
+-CONFIG_CPU_FREQ_STAT_DETAILS=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
+-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
+-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+-CONFIG_CPU_FREQ_GOV_POWERSAVE=m
+-CONFIG_CPU_FREQ_GOV_USERSPACE=m
+-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
+-
+-#
+-# CPUFreq processor drivers
+-#
+-CONFIG_X86_ACPI_CPUFREQ=m
+-CONFIG_X86_POWERNOW_K8=m
+-CONFIG_X86_POWERNOW_K8_ACPI=y
+-# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
+-# CONFIG_X86_P4_CLOCKMOD is not set
+-
+-#
+-# shared options
+-#
+-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
+-# CONFIG_X86_SPEEDSTEP_LIB is not set
+-CONFIG_CPU_IDLE=y
+-CONFIG_CPU_IDLE_GOV_LADDER=y
+-CONFIG_CPU_IDLE_GOV_MENU=y
+-
+-#
+-# Bus options (PCI etc.)
+-#
+-CONFIG_PCI=y
+-CONFIG_PCI_DIRECT=y
+-CONFIG_PCI_MMCONFIG=y
+-CONFIG_PCI_DOMAINS=y
+-# CONFIG_DMAR is not set
+-CONFIG_INTR_REMAP=y
+-CONFIG_PCIEPORTBUS=y
+-CONFIG_HOTPLUG_PCI_PCIE=m
+-CONFIG_PCIEAER=y
+-CONFIG_PCIEASPM=y
+-# CONFIG_PCIEASPM_DEBUG is not set
+-CONFIG_ARCH_SUPPORTS_MSI=y
+-CONFIG_PCI_MSI=y
+-CONFIG_PCI_LEGACY=y
+-# CONFIG_PCI_DEBUG is not set
+-CONFIG_HT_IRQ=y
+-CONFIG_ISA_DMA_API=y
+-CONFIG_K8_NB=y
+-CONFIG_PCCARD=m
+-# CONFIG_PCMCIA_DEBUG is not set
+-CONFIG_PCMCIA=m
+-CONFIG_PCMCIA_LOAD_CIS=y
+-CONFIG_PCMCIA_IOCTL=y
+-CONFIG_CARDBUS=y
+-
+-#
+-# PC-card bridges
+-#
+-CONFIG_YENTA=m
+-CONFIG_YENTA_O2=y
+-CONFIG_YENTA_RICOH=y
+-CONFIG_YENTA_TI=y
+-CONFIG_YENTA_ENE_TUNE=y
+-CONFIG_YENTA_TOSHIBA=y
+-CONFIG_PD6729=m
+-CONFIG_I82092=m
+-CONFIG_PCCARD_NONSTATIC=m
+-CONFIG_HOTPLUG_PCI=m
+-CONFIG_HOTPLUG_PCI_FAKE=m
+-CONFIG_HOTPLUG_PCI_ACPI=m
+-CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+-CONFIG_HOTPLUG_PCI_CPCI=y
+-CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+-CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+-CONFIG_HOTPLUG_PCI_SHPC=m
+-
+-#
+-# Executable file formats / Emulations
+-#
+-CONFIG_BINFMT_ELF=y
+-CONFIG_COMPAT_BINFMT_ELF=y
+-CONFIG_BINFMT_MISC=m
+-CONFIG_IA32_EMULATION=y
+-CONFIG_IA32_AOUT=y
+-CONFIG_COMPAT=y
+-CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
+-CONFIG_SYSVIPC_COMPAT=y
+-CONFIG_NET=y
+-
+-#
+-# Networking options
+-#
+-CONFIG_PACKET=m
+-CONFIG_PACKET_MMAP=y
+-CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-CONFIG_XFRM_USER=m
+-CONFIG_XFRM_SUB_POLICY=y
+-CONFIG_XFRM_MIGRATE=y
+-# CONFIG_XFRM_STATISTICS is not set
+-CONFIG_XFRM_IPCOMP=m
+-CONFIG_NET_KEY=m
+-CONFIG_NET_KEY_MIGRATE=y
+-CONFIG_INET=y
+-CONFIG_IP_MULTICAST=y
+-CONFIG_IP_ADVANCED_ROUTER=y
+-CONFIG_ASK_IP_FIB_HASH=y
+-# CONFIG_IP_FIB_TRIE is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_MULTIPLE_TABLES=y
+-CONFIG_IP_ROUTE_MULTIPATH=y
+-CONFIG_IP_ROUTE_VERBOSE=y
+-CONFIG_IP_PNP=y
+-CONFIG_IP_PNP_DHCP=y
+-CONFIG_IP_PNP_BOOTP=y
+-CONFIG_IP_PNP_RARP=y
+-CONFIG_NET_IPIP=m
+-CONFIG_NET_IPGRE=m
+-CONFIG_NET_IPGRE_BROADCAST=y
+-CONFIG_IP_MROUTE=y
+-CONFIG_IP_PIMSM_V1=y
+-CONFIG_IP_PIMSM_V2=y
+-# CONFIG_ARPD is not set
+-CONFIG_SYN_COOKIES=y
+-CONFIG_INET_AH=m
+-CONFIG_INET_ESP=m
+-CONFIG_INET_IPCOMP=m
+-CONFIG_INET_XFRM_TUNNEL=m
+-CONFIG_INET_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET_XFRM_MODE_TUNNEL=m
+-CONFIG_INET_XFRM_MODE_BEET=m
+-CONFIG_INET_LRO=y
+-CONFIG_INET_DIAG=m
+-CONFIG_INET_TCP_DIAG=m
+-CONFIG_TCP_CONG_ADVANCED=y
+-CONFIG_TCP_CONG_BIC=m
+-CONFIG_TCP_CONG_CUBIC=y
+-CONFIG_TCP_CONG_WESTWOOD=m
+-CONFIG_TCP_CONG_HTCP=m
+-CONFIG_TCP_CONG_HSTCP=m
+-CONFIG_TCP_CONG_HYBLA=m
+-CONFIG_TCP_CONG_VEGAS=m
+-CONFIG_TCP_CONG_SCALABLE=m
+-CONFIG_TCP_CONG_LP=m
+-CONFIG_TCP_CONG_VENO=m
+-CONFIG_TCP_CONG_YEAH=m
+-CONFIG_TCP_CONG_ILLINOIS=m
+-# CONFIG_DEFAULT_BIC is not set
+-CONFIG_DEFAULT_CUBIC=y
+-# CONFIG_DEFAULT_HTCP is not set
+-# CONFIG_DEFAULT_VEGAS is not set
+-# CONFIG_DEFAULT_WESTWOOD is not set
+-# CONFIG_DEFAULT_RENO is not set
+-CONFIG_DEFAULT_TCP_CONG="cubic"
+-# CONFIG_TCP_MD5SIG is not set
+-CONFIG_IP_VS=m
+-# CONFIG_IP_VS_DEBUG is not set
+-CONFIG_IP_VS_TAB_BITS=12
+-
+-#
+-# IPVS transport protocol load balancing support
+-#
+-CONFIG_IP_VS_PROTO_TCP=y
+-CONFIG_IP_VS_PROTO_UDP=y
+-CONFIG_IP_VS_PROTO_ESP=y
+-CONFIG_IP_VS_PROTO_AH=y
+-
+-#
+-# IPVS scheduler
+-#
+-CONFIG_IP_VS_RR=m
+-CONFIG_IP_VS_WRR=m
+-CONFIG_IP_VS_LC=m
+-CONFIG_IP_VS_WLC=m
+-CONFIG_IP_VS_LBLC=m
+-CONFIG_IP_VS_LBLCR=m
+-CONFIG_IP_VS_DH=m
+-CONFIG_IP_VS_SH=m
+-CONFIG_IP_VS_SED=m
+-CONFIG_IP_VS_NQ=m
+-
+-#
+-# IPVS application helper
+-#
+-CONFIG_IP_VS_FTP=m
+-CONFIG_IPV6=m
+-CONFIG_IPV6_PRIVACY=y
+-CONFIG_IPV6_ROUTER_PREF=y
+-CONFIG_IPV6_ROUTE_INFO=y
+-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+-CONFIG_INET6_AH=m
+-CONFIG_INET6_ESP=m
+-CONFIG_INET6_IPCOMP=m
+-CONFIG_IPV6_MIP6=m
+-CONFIG_INET6_XFRM_TUNNEL=m
+-CONFIG_INET6_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+-CONFIG_INET6_XFRM_MODE_TUNNEL=m
+-CONFIG_INET6_XFRM_MODE_BEET=m
+-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+-CONFIG_IPV6_SIT=m
+-CONFIG_IPV6_NDISC_NODETYPE=y
+-CONFIG_IPV6_TUNNEL=m
+-CONFIG_IPV6_MULTIPLE_TABLES=y
+-CONFIG_IPV6_SUBTREES=y
+-# CONFIG_IPV6_MROUTE is not set
+-# CONFIG_NETLABEL is not set
+-CONFIG_NETWORK_SECMARK=y
+-CONFIG_NETFILTER=y
+-# CONFIG_NETFILTER_DEBUG is not set
+-CONFIG_NETFILTER_ADVANCED=y
+-CONFIG_BRIDGE_NETFILTER=y
+-
+-#
+-# Core Netfilter Configuration
+-#
+-CONFIG_NETFILTER_NETLINK=m
+-CONFIG_NETFILTER_NETLINK_QUEUE=m
+-CONFIG_NETFILTER_NETLINK_LOG=m
+-CONFIG_NF_CONNTRACK=m
+-CONFIG_NF_CT_ACCT=y
+-CONFIG_NF_CONNTRACK_MARK=y
+-CONFIG_NF_CONNTRACK_SECMARK=y
+-CONFIG_NF_CONNTRACK_EVENTS=y
+-CONFIG_NF_CT_PROTO_DCCP=m
+-CONFIG_NF_CT_PROTO_GRE=m
+-CONFIG_NF_CT_PROTO_SCTP=m
+-CONFIG_NF_CT_PROTO_UDPLITE=m
+-CONFIG_NF_CONNTRACK_AMANDA=m
+-CONFIG_NF_CONNTRACK_FTP=m
+-CONFIG_NF_CONNTRACK_H323=m
+-CONFIG_NF_CONNTRACK_IRC=m
+-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+-CONFIG_NF_CONNTRACK_PPTP=m
+-CONFIG_NF_CONNTRACK_SANE=m
+-CONFIG_NF_CONNTRACK_SIP=m
+-CONFIG_NF_CONNTRACK_TFTP=m
+-CONFIG_NF_CONNTRACK_SLP=m
+-CONFIG_NF_CT_NETLINK=m
+-CONFIG_NETFILTER_XTABLES=m
+-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+-CONFIG_NETFILTER_XT_TARGET_DSCP=m
+-CONFIG_NETFILTER_XT_TARGET_MARK=m
+-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+-CONFIG_NETFILTER_XT_TARGET_TRACE=m
+-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+-CONFIG_NETFILTER_XT_MATCH_DCCP=m
+-CONFIG_NETFILTER_XT_MATCH_DSCP=m
+-CONFIG_NETFILTER_XT_MATCH_ESP=m
+-CONFIG_NETFILTER_XT_MATCH_HELPER=m
+-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_MAC=m
+-CONFIG_NETFILTER_XT_MATCH_MARK=m
+-CONFIG_NETFILTER_XT_MATCH_OWNER=m
+-CONFIG_NETFILTER_XT_MATCH_POLICY=m
+-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+-CONFIG_NETFILTER_XT_MATCH_REALM=m
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+-CONFIG_NETFILTER_XT_MATCH_STATE=m
+-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+-CONFIG_NETFILTER_XT_MATCH_STRING=m
+-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+-CONFIG_NETFILTER_XT_MATCH_TIME=m
+-CONFIG_NETFILTER_XT_MATCH_U32=m
+-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+-
+-#
+-# IP: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV4=m
+-# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
+-CONFIG_IP_NF_QUEUE=m
+-CONFIG_IP_NF_IPTABLES=m
+-CONFIG_IP_NF_MATCH_RECENT=m
+-CONFIG_IP_NF_MATCH_ECN=m
+-CONFIG_IP_NF_MATCH_AH=m
+-CONFIG_IP_NF_MATCH_TTL=m
+-CONFIG_IP_NF_MATCH_ADDRTYPE=m
+-CONFIG_IP_NF_MATCH_IPV4OPTIONS=m
+-CONFIG_IP_NF_FILTER=m
+-CONFIG_IP_NF_TARGET_REJECT=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_NF_NAT=m
+-CONFIG_NF_NAT_NEEDED=y
+-CONFIG_IP_NF_TARGET_MASQUERADE=m
+-CONFIG_IP_NF_TARGET_REDIRECT=m
+-CONFIG_IP_NF_TARGET_NETMAP=m
+-CONFIG_NF_NAT_SNMP_BASIC=m
+-CONFIG_NF_NAT_PROTO_DCCP=m
+-CONFIG_NF_NAT_PROTO_GRE=m
+-CONFIG_NF_NAT_PROTO_UDPLITE=m
+-CONFIG_NF_NAT_PROTO_SCTP=m
+-CONFIG_NF_NAT_FTP=m
+-CONFIG_NF_NAT_IRC=m
+-CONFIG_NF_NAT_TFTP=m
+-CONFIG_NF_NAT_AMANDA=m
+-CONFIG_NF_NAT_PPTP=m
+-CONFIG_NF_NAT_H323=m
+-CONFIG_NF_NAT_SIP=m
+-CONFIG_IP_NF_MANGLE=m
+-CONFIG_IP_NF_TARGET_ECN=m
+-CONFIG_IP_NF_TARGET_TTL=m
+-CONFIG_IP_NF_TARGET_CLUSTERIP=m
+-CONFIG_IP_NF_RAW=m
+-CONFIG_IP_NF_SECURITY=m
+-CONFIG_IP_NF_ARPTABLES=m
+-CONFIG_IP_NF_ARPFILTER=m
+-CONFIG_IP_NF_ARP_MANGLE=m
+-
+-#
+-# IPv6: Netfilter Configuration
+-#
+-CONFIG_NF_CONNTRACK_IPV6=m
+-CONFIG_IP6_NF_QUEUE=m
+-CONFIG_IP6_NF_IPTABLES=m
+-CONFIG_IP6_NF_MATCH_RT=m
+-CONFIG_IP6_NF_MATCH_OPTS=m
+-CONFIG_IP6_NF_MATCH_FRAG=m
+-CONFIG_IP6_NF_MATCH_HL=m
+-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+-CONFIG_IP6_NF_MATCH_AH=m
+-CONFIG_IP6_NF_MATCH_MH=m
+-CONFIG_IP6_NF_MATCH_EUI64=m
+-CONFIG_IP6_NF_FILTER=m
+-CONFIG_IP6_NF_TARGET_LOG=m
+-CONFIG_IP6_NF_TARGET_REJECT=m
+-CONFIG_IP6_NF_MANGLE=m
+-CONFIG_IP6_NF_TARGET_HL=m
+-CONFIG_IP6_NF_RAW=m
+-CONFIG_IP6_NF_SECURITY=m
+-
+-#
+-# DECnet: Netfilter Configuration
+-#
+-# CONFIG_DECNET_NF_GRABULATOR is not set
+-
+-#
+-# Bridge: Netfilter Configuration
+-#
+-CONFIG_BRIDGE_NF_EBTABLES=m
+-CONFIG_BRIDGE_EBT_BROUTE=m
+-CONFIG_BRIDGE_EBT_T_FILTER=m
+-CONFIG_BRIDGE_EBT_T_NAT=m
+-CONFIG_BRIDGE_EBT_802_3=m
+-CONFIG_BRIDGE_EBT_AMONG=m
+-CONFIG_BRIDGE_EBT_ARP=m
+-CONFIG_BRIDGE_EBT_IP=m
+-CONFIG_BRIDGE_EBT_IP6=m
+-CONFIG_BRIDGE_EBT_LIMIT=m
+-CONFIG_BRIDGE_EBT_MARK=m
+-CONFIG_BRIDGE_EBT_PKTTYPE=m
+-CONFIG_BRIDGE_EBT_STP=m
+-CONFIG_BRIDGE_EBT_VLAN=m
+-CONFIG_BRIDGE_EBT_ARPREPLY=m
+-CONFIG_BRIDGE_EBT_DNAT=m
+-CONFIG_BRIDGE_EBT_MARK_T=m
+-CONFIG_BRIDGE_EBT_REDIRECT=m
+-CONFIG_BRIDGE_EBT_SNAT=m
+-CONFIG_BRIDGE_EBT_LOG=m
+-CONFIG_BRIDGE_EBT_ULOG=m
+-CONFIG_BRIDGE_EBT_NFLOG=m
+-CONFIG_IP_DCCP=m
+-CONFIG_INET_DCCP_DIAG=m
+-CONFIG_IP_DCCP_ACKVEC=y
+-
+-#
+-# DCCP CCIDs Configuration (EXPERIMENTAL)
+-#
+-CONFIG_IP_DCCP_CCID2=m
+-# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3=m
+-# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+-CONFIG_IP_DCCP_CCID3_RTO=100
+-CONFIG_IP_DCCP_TFRC_LIB=m
+-
+-#
+-# DCCP Kernel Hacking
+-#
+-# CONFIG_IP_DCCP_DEBUG is not set
+-# CONFIG_NET_DCCPPROBE is not set
+-CONFIG_IP_SCTP=m
+-# CONFIG_SCTP_DBG_MSG is not set
+-# CONFIG_SCTP_DBG_OBJCNT is not set
+-# CONFIG_SCTP_HMAC_NONE is not set
+-# CONFIG_SCTP_HMAC_SHA1 is not set
+-CONFIG_SCTP_HMAC_MD5=y
+-# CONFIG_TIPC is not set
+-CONFIG_ATM=m
+-CONFIG_ATM_CLIP=m
+-# CONFIG_ATM_CLIP_NO_ICMP is not set
+-CONFIG_ATM_LANE=m
+-CONFIG_ATM_MPOA=m
+-CONFIG_ATM_BR2684=m
+-# CONFIG_ATM_BR2684_IPFILTER is not set
+-CONFIG_STP=m
+-CONFIG_GARP=m
+-CONFIG_BRIDGE=m
+-CONFIG_VLAN_8021Q=m
+-CONFIG_VLAN_8021Q_GVRP=y
+-CONFIG_DECNET=m
+-# CONFIG_DECNET_ROUTER is not set
+-CONFIG_LLC=y
+-CONFIG_LLC2=m
+-CONFIG_IPX=m
+-CONFIG_IPX_INTERN=y
+-CONFIG_ATALK=m
+-CONFIG_DEV_APPLETALK=m
+-CONFIG_IPDDP=m
+-CONFIG_IPDDP_ENCAP=y
+-CONFIG_IPDDP_DECAP=y
+-CONFIG_X25=m
+-CONFIG_LAPB=m
+-CONFIG_ECONET=m
+-# CONFIG_ECONET_AUNUDP is not set
+-# CONFIG_ECONET_NATIVE is not set
+-CONFIG_WAN_ROUTER=m
+-CONFIG_NET_SCHED=y
+-
+-#
+-# Queueing/Scheduling
+-#
+-CONFIG_NET_SCH_CBQ=m
+-CONFIG_NET_SCH_HTB=m
+-CONFIG_NET_SCH_HFSC=m
+-CONFIG_NET_SCH_ATM=m
+-CONFIG_NET_SCH_PRIO=m
+-CONFIG_NET_SCH_MULTIQ=m
+-CONFIG_NET_SCH_RED=m
+-CONFIG_NET_SCH_SFQ=m
+-CONFIG_NET_SCH_TEQL=m
+-CONFIG_NET_SCH_TBF=m
+-CONFIG_NET_SCH_GRED=m
+-CONFIG_NET_SCH_DSMARK=m
+-CONFIG_NET_SCH_NETEM=m
+-CONFIG_NET_SCH_INGRESS=m
+-
+-#
+-# Classification
+-#
+-CONFIG_NET_CLS=y
+-CONFIG_NET_CLS_BASIC=m
+-CONFIG_NET_CLS_TCINDEX=m
+-CONFIG_NET_CLS_ROUTE4=m
+-CONFIG_NET_CLS_ROUTE=y
+-CONFIG_NET_CLS_FW=m
+-CONFIG_NET_CLS_U32=m
+-CONFIG_CLS_U32_PERF=y
+-CONFIG_CLS_U32_MARK=y
+-CONFIG_NET_CLS_RSVP=m
+-CONFIG_NET_CLS_RSVP6=m
+-CONFIG_NET_CLS_FLOW=m
+-CONFIG_NET_EMATCH=y
+-CONFIG_NET_EMATCH_STACK=32
+-CONFIG_NET_EMATCH_CMP=m
+-CONFIG_NET_EMATCH_NBYTE=m
+-CONFIG_NET_EMATCH_U32=m
+-CONFIG_NET_EMATCH_META=m
+-CONFIG_NET_EMATCH_TEXT=m
+-CONFIG_NET_CLS_ACT=y
+-CONFIG_NET_ACT_POLICE=m
+-CONFIG_NET_ACT_GACT=m
+-CONFIG_GACT_PROB=y
+-CONFIG_NET_ACT_MIRRED=m
+-CONFIG_NET_ACT_IPT=m
+-CONFIG_NET_ACT_NAT=m
+-CONFIG_NET_ACT_PEDIT=m
+-CONFIG_NET_ACT_SIMP=m
+-CONFIG_NET_ACT_SKBEDIT=m
+-# CONFIG_NET_CLS_IND is not set
+-CONFIG_NET_SCH_FIFO=y
+-CONFIG_DCB=m
+-CONFIG_DCBNL=y
+-
+-#
+-# Network testing
+-#
+-CONFIG_NET_PKTGEN=m
+-CONFIG_NET_TCPPROBE=m
+-CONFIG_HAMRADIO=y
+-
+-#
+-# Packet Radio protocols
+-#
+-CONFIG_AX25=m
+-CONFIG_AX25_DAMA_SLAVE=y
+-CONFIG_NETROM=m
+-CONFIG_ROSE=m
+-
+-#
+-# AX.25 network device drivers
+-#
+-CONFIG_MKISS=m
+-CONFIG_6PACK=m
+-CONFIG_BPQETHER=m
+-CONFIG_BAYCOM_SER_FDX=m
+-CONFIG_BAYCOM_SER_HDX=m
+-CONFIG_BAYCOM_PAR=m
+-CONFIG_YAM=m
+-CONFIG_CAN=m
+-CONFIG_CAN_RAW=m
+-CONFIG_CAN_BCM=m
+-
+-#
+-# CAN Device Drivers
+-#
+-CONFIG_CAN_VCAN=m
+-# CONFIG_CAN_DEBUG_DEVICES is not set
+-CONFIG_IRDA=m
+-
+-#
+-# IrDA protocols
+-#
+-CONFIG_IRLAN=m
+-CONFIG_IRNET=m
+-CONFIG_IRCOMM=m
+-CONFIG_IRDA_ULTRA=y
+-
+-#
+-# IrDA options
+-#
+-CONFIG_IRDA_CACHE_LAST_LSAP=y
+-# CONFIG_IRDA_FAST_RR is not set
+-# CONFIG_IRDA_DEBUG is not set
+-
+-#
+-# Infrared-port device drivers
+-#
+-
+-#
+-# SIR device drivers
+-#
+-CONFIG_IRTTY_SIR=m
+-
+-#
+-# Dongle support
+-#
+-CONFIG_DONGLE=y
+-CONFIG_ESI_DONGLE=m
+-CONFIG_ACTISYS_DONGLE=m
+-CONFIG_TEKRAM_DONGLE=m
+-CONFIG_TOIM3232_DONGLE=m
+-CONFIG_LITELINK_DONGLE=m
+-CONFIG_MA600_DONGLE=m
+-CONFIG_GIRBIL_DONGLE=m
+-CONFIG_MCP2120_DONGLE=m
+-CONFIG_OLD_BELKIN_DONGLE=m
+-CONFIG_ACT200L_DONGLE=m
+-CONFIG_KINGSUN_DONGLE=m
+-CONFIG_KSDAZZLE_DONGLE=m
+-CONFIG_KS959_DONGLE=m
+-
+-#
+-# FIR device drivers
+-#
+-CONFIG_USB_IRDA=m
+-CONFIG_SIGMATEL_FIR=m
+-CONFIG_NSC_FIR=m
+-CONFIG_WINBOND_FIR=m
+-CONFIG_SMC_IRCC_FIR=m
+-CONFIG_ALI_FIR=m
+-CONFIG_VLSI_FIR=m
+-CONFIG_VIA_FIR=m
+-CONFIG_MCS_FIR=m
+-CONFIG_BT=m
+-CONFIG_BT_L2CAP=m
+-CONFIG_BT_SCO=m
+-CONFIG_BT_RFCOMM=m
+-CONFIG_BT_RFCOMM_TTY=y
+-CONFIG_BT_BNEP=m
+-CONFIG_BT_BNEP_MC_FILTER=y
+-CONFIG_BT_BNEP_PROTO_FILTER=y
+-CONFIG_BT_CMTP=m
+-CONFIG_BT_HIDP=m
+-
+-#
+-# Bluetooth device drivers
+-#
+-CONFIG_BT_HCIBTUSB=m
+-CONFIG_BT_HCIBTSDIO=m
+-CONFIG_BT_HCIUART=m
+-CONFIG_BT_HCIUART_H4=y
+-CONFIG_BT_HCIUART_BCSP=y
+-CONFIG_BT_HCIUART_LL=y
+-CONFIG_BT_HCIBCM203X=m
+-CONFIG_BT_HCIBPA10X=m
+-CONFIG_BT_HCIBFUSB=m
+-CONFIG_BT_HCIDTL1=m
+-CONFIG_BT_HCIBT3C=m
+-CONFIG_BT_HCIBLUECARD=m
+-CONFIG_BT_HCIBTUART=m
+-CONFIG_BT_HCIVHCI=m
+-CONFIG_AF_RXRPC=m
+-# CONFIG_AF_RXRPC_DEBUG is not set
+-CONFIG_RXKAD=m
+-CONFIG_FIB_RULES=y
+-
+-#
+-# Wireless
+-#
+-CONFIG_CFG80211=m
+-CONFIG_NL80211=y
+-CONFIG_WIRELESS_EXT=y
+-CONFIG_WIRELESS_EXT_SYSFS=y
+-CONFIG_MAC80211=m
+-
+-#
+-# Rate control algorithm selection
+-#
+-CONFIG_MAC80211_RC_PID=y
+-CONFIG_MAC80211_RC_DEFAULT_PID=y
+-CONFIG_MAC80211_RC_DEFAULT="pid"
+-CONFIG_MAC80211_MESH=y
+-CONFIG_MAC80211_LEDS=y
+-CONFIG_MAC80211_DEBUGFS=y
+-# CONFIG_MAC80211_DEBUG_MENU is not set
+-CONFIG_IEEE80211=m
+-# CONFIG_IEEE80211_DEBUG is not set
+-CONFIG_IEEE80211_CRYPT_WEP=m
+-CONFIG_IEEE80211_CRYPT_CCMP=m
+-CONFIG_IEEE80211_CRYPT_TKIP=m
+-CONFIG_RFKILL=m
+-CONFIG_RFKILL_INPUT=m
+-CONFIG_RFKILL_LEDS=y
+-CONFIG_NET_9P=m
+-CONFIG_NET_9P_VIRTIO=m
+-# CONFIG_NET_9P_DEBUG is not set
+-CONFIG_NETVM=y
+-
+-#
+-# Device Drivers
+-#
+-
+-#
+-# Generic Driver Options
+-#
+-CONFIG_UEVENT_HELPER_PATH=""
+-# CONFIG_STANDALONE is not set
+-CONFIG_PREVENT_FIRMWARE_BUILD=y
+-CONFIG_FW_LOADER=y
+-CONFIG_FIRMWARE_IN_KERNEL=y
+-CONFIG_EXTRA_FIRMWARE=""
+-# CONFIG_DEBUG_DRIVER is not set
+-# CONFIG_DEBUG_DEVRES is not set
+-# CONFIG_SYS_HYPERVISOR is not set
+-CONFIG_CONNECTOR=y
+-CONFIG_PROC_EVENTS=y
+-CONFIG_MTD=m
+-# CONFIG_MTD_DEBUG is not set
+-CONFIG_MTD_CONCAT=m
+-CONFIG_MTD_PARTITIONS=y
+-CONFIG_MTD_REDBOOT_PARTS=m
+-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+-CONFIG_MTD_AR7_PARTS=m
+-
+-#
+-# User Modules And Translation Layers
+-#
+-CONFIG_MTD_CHAR=m
+-CONFIG_MTD_BLKDEVS=m
+-CONFIG_MTD_BLOCK=m
+-# CONFIG_MTD_BLOCK_RO is not set
+-# CONFIG_FTL is not set
+-# CONFIG_NFTL is not set
+-# CONFIG_INFTL is not set
+-CONFIG_RFD_FTL=m
+-# CONFIG_SSFDC is not set
+-CONFIG_MTD_OOPS=m
+-
+-#
+-# RAM/ROM/Flash chip drivers
+-#
+-CONFIG_MTD_CFI=m
+-CONFIG_MTD_JEDECPROBE=m
+-CONFIG_MTD_GEN_PROBE=m
+-CONFIG_MTD_CFI_ADV_OPTIONS=y
+-CONFIG_MTD_CFI_NOSWAP=y
+-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_GEOMETRY is not set
+-CONFIG_MTD_MAP_BANK_WIDTH_1=y
+-CONFIG_MTD_MAP_BANK_WIDTH_2=y
+-CONFIG_MTD_MAP_BANK_WIDTH_4=y
+-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+-CONFIG_MTD_CFI_I1=y
+-CONFIG_MTD_CFI_I2=y
+-# CONFIG_MTD_CFI_I4 is not set
+-# CONFIG_MTD_CFI_I8 is not set
+-# CONFIG_MTD_OTP is not set
+-CONFIG_MTD_CFI_INTELEXT=m
+-CONFIG_MTD_CFI_AMDSTD=m
+-CONFIG_MTD_CFI_STAA=m
+-CONFIG_MTD_CFI_UTIL=m
+-# CONFIG_MTD_RAM is not set
+-# CONFIG_MTD_ROM is not set
+-CONFIG_MTD_ABSENT=m
+-
+-#
+-# Mapping drivers for chip access
+-#
+-CONFIG_MTD_COMPLEX_MAPPINGS=y
+-CONFIG_MTD_PHYSMAP=m
+-CONFIG_MTD_PHYSMAP_START=0x8000000
+-CONFIG_MTD_PHYSMAP_LEN=0x4000000
+-CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+-# CONFIG_MTD_SC520CDP is not set
+-# CONFIG_MTD_NETSC520 is not set
+-CONFIG_MTD_TS5500=m
+-# CONFIG_MTD_SBC_GXX is not set
+-CONFIG_MTD_AMD76XROM=m
+-CONFIG_MTD_ICHXROM=m
+-CONFIG_MTD_ESB2ROM=m
+-CONFIG_MTD_CK804XROM=m
+-CONFIG_MTD_SCB2_FLASH=m
+-# CONFIG_MTD_NETtel is not set
+-# CONFIG_MTD_DILNETPC is not set
+-# CONFIG_MTD_L440GX is not set
+-CONFIG_MTD_PCI=m
+-CONFIG_MTD_INTEL_VR_NOR=m
+-# CONFIG_MTD_PLATRAM is not set
+-
+-#
+-# Self-contained MTD device drivers
+-#
+-CONFIG_MTD_PMC551=m
+-CONFIG_MTD_PMC551_BUGFIX=y
+-# CONFIG_MTD_PMC551_DEBUG is not set
+-# CONFIG_MTD_DATAFLASH is not set
+-# CONFIG_MTD_M25P80 is not set
+-CONFIG_MTD_SLRAM=m
+-CONFIG_MTD_PHRAM=m
+-CONFIG_MTD_MTDRAM=m
+-CONFIG_MTDRAM_TOTAL_SIZE=4096
+-CONFIG_MTDRAM_ERASE_SIZE=128
+-CONFIG_MTD_BLOCK2MTD=m
+-
+-#
+-# Disk-On-Chip Device Drivers
+-#
+-CONFIG_MTD_DOC2000=m
+-CONFIG_MTD_DOC2001=m
+-CONFIG_MTD_DOC2001PLUS=m
+-CONFIG_MTD_DOCPROBE=m
+-CONFIG_MTD_DOCECC=m
+-CONFIG_MTD_DOCPROBE_ADVANCED=y
+-CONFIG_MTD_DOCPROBE_ADDRESS=0x0000
+-CONFIG_MTD_DOCPROBE_HIGH=y
+-CONFIG_MTD_DOCPROBE_55AA=y
+-CONFIG_MTD_NAND=m
+-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+-CONFIG_MTD_NAND_ECC_SMC=y
+-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+-CONFIG_MTD_NAND_IDS=m
+-CONFIG_MTD_NAND_DISKONCHIP=m
+-# CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set
+-CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0
+-CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE=y
+-CONFIG_MTD_NAND_CAFE=m
+-CONFIG_MTD_NAND_NANDSIM=m
+-CONFIG_MTD_NAND_PLATFORM=m
+-CONFIG_MTD_ALAUDA=m
+-CONFIG_MTD_ONENAND=m
+-# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
+-CONFIG_MTD_ONENAND_OTP=y
+-CONFIG_MTD_ONENAND_2X_PROGRAM=y
+-CONFIG_MTD_ONENAND_SIM=m
+-
+-#
+-# UBI - Unsorted block images
+-#
+-CONFIG_MTD_UBI=m
+-CONFIG_MTD_UBI_WL_THRESHOLD=4096
+-CONFIG_MTD_UBI_BEB_RESERVE=1
+-# CONFIG_MTD_UBI_GLUEBI is not set
+-
+-#
+-# UBI debugging options
+-#
+-# CONFIG_MTD_UBI_DEBUG is not set
+-CONFIG_PARPORT=m
+-CONFIG_PARPORT_PC=m
+-CONFIG_PARPORT_SERIAL=m
+-CONFIG_PARPORT_PC_FIFO=y
+-CONFIG_PARPORT_PC_SUPERIO=y
+-CONFIG_PARPORT_PC_PCMCIA=m
+-# CONFIG_PARPORT_GSC is not set
+-CONFIG_PARPORT_AX88796=m
+-CONFIG_PARPORT_1284=y
+-CONFIG_PARPORT_NOT_PC=y
+-CONFIG_PNP=y
+-# CONFIG_PNP_DEBUG is not set
+-
+-#
+-# Protocols
+-#
+-CONFIG_PNPACPI=y
+-CONFIG_BLK_DEV=y
+-CONFIG_BLK_DEV_FD=m
+-CONFIG_PARIDE=m
+-
+-#
+-# Parallel IDE high-level drivers
+-#
+-CONFIG_PARIDE_PD=m
+-CONFIG_PARIDE_PCD=m
+-CONFIG_PARIDE_PF=m
+-CONFIG_PARIDE_PT=m
+-CONFIG_PARIDE_PG=m
+-
+-#
+-# Parallel IDE protocol modules
+-#
+-CONFIG_PARIDE_ATEN=m
+-CONFIG_PARIDE_BPCK=m
+-CONFIG_PARIDE_COMM=m
+-CONFIG_PARIDE_DSTR=m
+-CONFIG_PARIDE_FIT2=m
+-CONFIG_PARIDE_FIT3=m
+-CONFIG_PARIDE_EPAT=m
+-CONFIG_PARIDE_EPATC8=y
+-CONFIG_PARIDE_EPIA=m
+-CONFIG_PARIDE_FRIQ=m
+-CONFIG_PARIDE_FRPW=m
+-CONFIG_PARIDE_KBIC=m
+-CONFIG_PARIDE_KTTI=m
+-CONFIG_PARIDE_ON20=m
+-CONFIG_PARIDE_ON26=m
+-CONFIG_BLK_CPQ_DA=m
+-CONFIG_BLK_CPQ_CISS_DA=m
+-CONFIG_CISS_SCSI_TAPE=y
+-CONFIG_BLK_DEV_DAC960=m
+-CONFIG_BLK_DEV_UMEM=m
+-# CONFIG_BLK_DEV_COW_COMMON is not set
+-CONFIG_BLK_DEV_LOOP=m
+-CONFIG_BLK_DEV_CRYPTOLOOP=m
+-CONFIG_BLK_DEV_NBD=m
+-CONFIG_BLK_DEV_SX8=m
+-# CONFIG_BLK_DEV_UB is not set
+-CONFIG_BLK_DEV_RAM=m
+-CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=128000
+-CONFIG_BLK_DEV_XIP=y
+-CONFIG_CDROM_PKTCDVD=m
+-CONFIG_CDROM_PKTCDVD_BUFFERS=8
+-CONFIG_CDROM_PKTCDVD_WCACHE=y
+-CONFIG_ATA_OVER_ETH=m
+-CONFIG_CIPHER_TWOFISH=m
+-CONFIG_VIRTIO_BLK=m
+-# CONFIG_BLK_DEV_HD is not set
+-CONFIG_MISC_DEVICES=y
+-CONFIG_IBM_ASM=m
+-CONFIG_PHANTOM=m
+-CONFIG_EEPROM_93CX6=m
+-CONFIG_SGI_IOC4=m
+-CONFIG_TIFM_CORE=m
+-CONFIG_TIFM_7XX1=m
+-CONFIG_ACER_WMI=m
+-CONFIG_ASUS_LAPTOP=m
+-CONFIG_FUJITSU_LAPTOP=m
+-# CONFIG_FUJITSU_LAPTOP_DEBUG is not set
+-CONFIG_HP_WMI=m
+-CONFIG_MSI_LAPTOP=m
+-CONFIG_PANASONIC_LAPTOP=m
+-CONFIG_COMPAL_LAPTOP=m
+-CONFIG_SONY_LAPTOP=m
+-CONFIG_SONYPI_COMPAT=y
+-CONFIG_THINKPAD_ACPI=m
+-# CONFIG_THINKPAD_ACPI_DEBUG is not set
+-CONFIG_THINKPAD_ACPI_BAY=y
+-CONFIG_THINKPAD_ACPI_VIDEO=y
+-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+-CONFIG_INTEL_MENLOW=m
+-CONFIG_EEEPC_LAPTOP=m
+-CONFIG_ENCLOSURE_SERVICES=m
+-CONFIG_SGI_XP=m
+-CONFIG_HP_ILO=m
+-CONFIG_SGI_GRU=m
+-# CONFIG_SGI_GRU_DEBUG is not set
+-CONFIG_HAVE_IDE=y
+-CONFIG_IDE=m
+-CONFIG_BLK_DEV_IDE=m
+-
+-#
+-# Please see Documentation/ide/ide.txt for help/info on IDE drives
+-#
+-CONFIG_IDE_TIMINGS=y
+-CONFIG_IDE_ATAPI=y
+-# CONFIG_BLK_DEV_IDE_SATA is not set
+-CONFIG_BLK_DEV_IDEDISK=m
+-CONFIG_IDEDISK_MULTI_MODE=y
+-CONFIG_BLK_DEV_IDECS=m
+-CONFIG_BLK_DEV_DELKIN=m
+-CONFIG_BLK_DEV_IDECD=m
+-CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+-CONFIG_BLK_DEV_IDETAPE=m
+-CONFIG_BLK_DEV_IDEFLOPPY=m
+-CONFIG_BLK_DEV_IDESCSI=m
+-CONFIG_BLK_DEV_IDEACPI=y
+-# CONFIG_IDE_TASK_IOCTL is not set
+-CONFIG_IDE_PROC_FS=y
+-
+-#
+-# IDE chipset support/bugfixes
+-#
+-CONFIG_IDE_GENERIC=m
+-CONFIG_BLK_DEV_PLATFORM=m
+-CONFIG_BLK_DEV_CMD640=m
+-CONFIG_BLK_DEV_CMD640_ENHANCED=y
+-CONFIG_BLK_DEV_IDEPNP=m
+-CONFIG_BLK_DEV_IDEDMA_SFF=y
+-
+-#
+-# PCI IDE chipsets support
+-#
+-CONFIG_BLK_DEV_IDEPCI=y
+-CONFIG_BLK_DEV_OFFBOARD=y
+-CONFIG_BLK_DEV_GENERIC=m
+-# CONFIG_BLK_DEV_OPTI621 is not set
+-CONFIG_BLK_DEV_RZ1000=m
+-CONFIG_BLK_DEV_IDEDMA_PCI=y
+-CONFIG_BLK_DEV_AEC62XX=m
+-CONFIG_BLK_DEV_ALI15X3=m
+-CONFIG_BLK_DEV_AMD74XX=m
+-CONFIG_BLK_DEV_ATIIXP=m
+-CONFIG_BLK_DEV_CMD64X=m
+-CONFIG_BLK_DEV_TRIFLEX=m
+-CONFIG_BLK_DEV_CS5520=m
+-CONFIG_BLK_DEV_CS5530=m
+-CONFIG_BLK_DEV_HPT366=m
+-CONFIG_BLK_DEV_JMICRON=m
+-CONFIG_BLK_DEV_SC1200=m
+-CONFIG_BLK_DEV_PIIX=m
+-CONFIG_BLK_DEV_IT8213=m
+-CONFIG_BLK_DEV_IT821X=m
+-CONFIG_BLK_DEV_NS87415=m
+-CONFIG_BLK_DEV_PDC202XX_OLD=m
+-CONFIG_BLK_DEV_PDC202XX_NEW=m
+-CONFIG_BLK_DEV_SVWKS=m
+-CONFIG_BLK_DEV_SIIMAGE=m
+-CONFIG_BLK_DEV_SIS5513=m
+-CONFIG_BLK_DEV_SLC90E66=m
+-# CONFIG_BLK_DEV_TRM290 is not set
+-CONFIG_BLK_DEV_VIA82CXXX=m
+-# CONFIG_BLK_DEV_TC86C001 is not set
+-CONFIG_BLK_DEV_IDEDMA=y
+-
+-#
+-# SCSI device support
+-#
+-CONFIG_RAID_ATTRS=m
+-CONFIG_SCSI=m
+-CONFIG_SCSI_DMA=y
+-CONFIG_SCSI_TGT=m
+-CONFIG_SCSI_NETLINK=y
+-CONFIG_SCSI_PROC_FS=y
+-
+-#
+-# SCSI support type (disk, tape, CD-ROM)
+-#
+-CONFIG_BLK_DEV_SD=m
+-CONFIG_SD_IOSTATS=y
+-CONFIG_CHR_DEV_ST=m
+-CONFIG_CHR_DEV_OSST=m
+-CONFIG_BLK_DEV_SR=m
+-# CONFIG_BLK_DEV_SR_VENDOR is not set
+-CONFIG_CHR_DEV_SG=m
+-CONFIG_CHR_DEV_SCH=m
+-CONFIG_SCSI_ENCLOSURE=m
+-
+-#
+-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+-#
+-CONFIG_SCSI_MULTI_LUN=y
+-CONFIG_SCSI_CONSTANTS=y
+-CONFIG_SCSI_LOGGING=y
+-# CONFIG_SCSI_SCAN_ASYNC is not set
+-CONFIG_SCSI_WAIT_SCAN=m
+-
+-#
+-# SCSI Transports
+-#
+-CONFIG_SCSI_SPI_ATTRS=m
+-CONFIG_SCSI_FC_ATTRS=m
+-CONFIG_SCSI_FC_TGT_ATTRS=y
+-CONFIG_SCSI_ISCSI_ATTRS=m
+-CONFIG_SCSI_SAS_ATTRS=m
+-CONFIG_SCSI_SAS_LIBSAS=m
+-CONFIG_SCSI_SAS_ATA=y
+-CONFIG_SCSI_SAS_HOST_SMP=y
+-CONFIG_SCSI_SAS_LIBSAS_DEBUG=y
+-CONFIG_SCSI_SRP_ATTRS=m
+-CONFIG_SCSI_SRP_TGT_ATTRS=y
+-CONFIG_SCSI_LOWLEVEL=y
+-CONFIG_ISCSI_TCP=m
+-CONFIG_SCSI_CXGB3_ISCSI=m
+-CONFIG_BLK_DEV_3W_XXXX_RAID=m
+-CONFIG_SCSI_3W_9XXX=m
+-CONFIG_SCSI_ACARD=m
+-CONFIG_SCSI_AACRAID=m
+-CONFIG_SCSI_AIC7XXX=m
+-CONFIG_AIC7XXX_CMDS_PER_DEVICE=32
+-CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+-CONFIG_AIC7XXX_DEBUG_MASK=0
+-CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC7XXX_OLD=m
+-CONFIG_SCSI_AIC79XX=m
+-CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+-CONFIG_AIC79XX_RESET_DELAY_MS=15000
+-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+-CONFIG_AIC79XX_DEBUG_MASK=0
+-CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+-CONFIG_SCSI_AIC94XX=m
+-CONFIG_AIC94XX_DEBUG=y
+-CONFIG_SCSI_DPT_I2O=m
+-CONFIG_SCSI_ADVANSYS=m
+-CONFIG_SCSI_ARCMSR=m
+-CONFIG_SCSI_ARCMSR_AER=y
+-CONFIG_MEGARAID_NEWGEN=y
+-CONFIG_MEGARAID_MM=m
+-CONFIG_MEGARAID_MAILBOX=m
+-CONFIG_MEGARAID_LEGACY=m
+-CONFIG_MEGARAID_SAS=m
+-CONFIG_SCSI_HPTIOP=m
+-CONFIG_SCSI_BUSLOGIC=m
+-CONFIG_LIBFC=m
+-CONFIG_FCOE=m
+-CONFIG_SCSI_DMX3191D=m
+-CONFIG_SCSI_EATA=m
+-CONFIG_SCSI_EATA_TAGGED_QUEUE=y
+-CONFIG_SCSI_EATA_LINKED_COMMANDS=y
+-CONFIG_SCSI_EATA_MAX_TAGS=16
+-CONFIG_SCSI_FUTURE_DOMAIN=m
+-CONFIG_SCSI_GDTH=m
+-CONFIG_SCSI_IPS=m
+-CONFIG_SCSI_INITIO=m
+-# CONFIG_SCSI_INIA100 is not set
+-CONFIG_SCSI_PPA=m
+-CONFIG_SCSI_IMM=m
+-# CONFIG_SCSI_IZIP_EPP16 is not set
+-# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+-CONFIG_SCSI_MVSAS=m
+-CONFIG_SCSI_STEX=m
+-CONFIG_SCSI_SYM53C8XX_2=m
+-CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+-CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+-CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+-CONFIG_SCSI_SYM53C8XX_MMIO=y
+-# CONFIG_SCSI_IPR is not set
+-CONFIG_SCSI_QLOGIC_1280=m
+-CONFIG_SCSI_QLA_FC=m
+-CONFIG_SCSI_QLA_ISCSI=m
+-CONFIG_SCSI_LPFC=m
+-CONFIG_SCSI_DC395x=m
+-CONFIG_SCSI_DC390T=m
+-CONFIG_SCSI_DEBUG=m
+-CONFIG_SCSI_SRP=m
+-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+-CONFIG_PCMCIA_FDOMAIN=m
+-CONFIG_PCMCIA_QLOGIC=m
+-CONFIG_PCMCIA_SYM53C500=m
+-CONFIG_SCSI_DH=m
+-CONFIG_SCSI_DH_RDAC=m
+-CONFIG_SCSI_DH_HP_SW=m
+-CONFIG_SCSI_DH_EMC=m
+-CONFIG_SCSI_DH_ALUA=m
+-CONFIG_ATA=m
+-# CONFIG_ATA_NONSTANDARD is not set
+-CONFIG_ATA_ACPI=y
+-CONFIG_SATA_PMP=y
+-CONFIG_SATA_AHCI=m
+-CONFIG_SATA_SIL24=m
+-CONFIG_ATA_SFF=y
+-CONFIG_SATA_SVW=m
+-CONFIG_ATA_PIIX=m
+-CONFIG_SATA_MV=m
+-CONFIG_SATA_NV=m
+-CONFIG_PDC_ADMA=m
+-CONFIG_SATA_QSTOR=m
+-CONFIG_SATA_PROMISE=m
+-CONFIG_SATA_SX4=m
+-CONFIG_SATA_SIL=m
+-CONFIG_SATA_SIS=m
+-CONFIG_SATA_ULI=m
+-CONFIG_SATA_VIA=m
+-CONFIG_SATA_VITESSE=m
+-CONFIG_SATA_INIC162X=m
+-CONFIG_PATA_ACPI=m
+-CONFIG_PATA_ALI=m
+-CONFIG_PATA_AMD=m
+-CONFIG_PATA_ARTOP=m
+-CONFIG_PATA_ATIIXP=m
+-CONFIG_PATA_CMD640_PCI=m
+-CONFIG_PATA_CMD64X=m
+-CONFIG_PATA_CS5520=m
+-CONFIG_PATA_CS5530=m
+-CONFIG_PATA_CYPRESS=m
+-CONFIG_PATA_EFAR=m
+-CONFIG_ATA_GENERIC=m
+-CONFIG_PATA_HPT366=m
+-CONFIG_PATA_HPT37X=m
+-CONFIG_PATA_HPT3X2N=m
+-CONFIG_PATA_HPT3X3=m
+-# CONFIG_PATA_HPT3X3_DMA is not set
+-CONFIG_PATA_IT821X=m
+-CONFIG_PATA_IT8213=m
+-CONFIG_PATA_JMICRON=m
+-CONFIG_PATA_TRIFLEX=m
+-CONFIG_PATA_MARVELL=m
+-CONFIG_PATA_MPIIX=m
+-CONFIG_PATA_OLDPIIX=m
+-CONFIG_PATA_NETCELL=m
+-CONFIG_PATA_NINJA32=m
+-CONFIG_PATA_NS87410=m
+-CONFIG_PATA_NS87415=m
+-CONFIG_PATA_OPTI=m
+-CONFIG_PATA_OPTIDMA=m
+-CONFIG_PATA_PCMCIA=m
+-CONFIG_PATA_PDC_OLD=m
+-CONFIG_PATA_RADISYS=m
+-CONFIG_PATA_RZ1000=m
+-CONFIG_PATA_SC1200=m
+-CONFIG_PATA_SERVERWORKS=m
+-CONFIG_PATA_PDC2027X=m
+-CONFIG_PATA_SIL680=m
+-CONFIG_PATA_SIS=m
+-CONFIG_PATA_VIA=m
+-CONFIG_PATA_WINBOND=m
+-CONFIG_PATA_SCH=m
+-CONFIG_MD=y
+-CONFIG_BLK_DEV_MD=y
+-CONFIG_MD_LINEAR=m
+-CONFIG_MD_RAID0=m
+-CONFIG_MD_RAID1=m
+-CONFIG_MD_RAID10=m
+-CONFIG_MD_RAID456=m
+-CONFIG_MD_RAID5_RESHAPE=y
+-CONFIG_MD_MULTIPATH=m
+-CONFIG_MD_FAULTY=m
+-CONFIG_BLK_DEV_DM=m
+-# CONFIG_DM_DEBUG is not set
+-CONFIG_DM_CRYPT=m
+-CONFIG_DM_SNAPSHOT=m
+-CONFIG_DM_MIRROR=m
+-CONFIG_DM_ZERO=m
+-CONFIG_DM_MULTIPATH=m
+-CONFIG_DM_DELAY=m
+-CONFIG_DM_RAID45=m
+-CONFIG_DM_UEVENT=y
+-CONFIG_FUSION=y
+-CONFIG_FUSION_SPI=m
+-CONFIG_FUSION_FC=m
+-CONFIG_FUSION_SAS=m
+-CONFIG_FUSION_MAX_SGE=128
+-CONFIG_FUSION_MAX_FC_SGE=256
+-CONFIG_FUSION_CTL=m
+-CONFIG_FUSION_LAN=m
+-# CONFIG_FUSION_LOGGING is not set
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-
+-#
+-# Enable only one of the two stacks, unless you know what you are doing
+-#
+-# CONFIG_FIREWIRE is not set
+-CONFIG_IEEE1394=m
+-CONFIG_IEEE1394_OHCI1394=m
+-CONFIG_IEEE1394_PCILYNX=m
+-CONFIG_IEEE1394_SBP2=m
+-# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
+-CONFIG_IEEE1394_ETH1394_ROM_ENTRY=y
+-CONFIG_IEEE1394_ETH1394=m
+-CONFIG_IEEE1394_RAWIO=m
+-CONFIG_IEEE1394_VIDEO1394=m
+-CONFIG_IEEE1394_DV1394=m
+-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
+-CONFIG_I2O=m
+-CONFIG_I2O_LCT_NOTIFY_ON_CHANGES=y
+-CONFIG_I2O_EXT_ADAPTEC=y
+-CONFIG_I2O_EXT_ADAPTEC_DMA64=y
+-CONFIG_I2O_CONFIG=m
+-CONFIG_I2O_CONFIG_OLD_IOCTL=y
+-CONFIG_I2O_BUS=m
+-CONFIG_I2O_BLOCK=m
+-CONFIG_I2O_SCSI=m
+-CONFIG_I2O_PROC=m
+-# CONFIG_MACINTOSH_DRIVERS is not set
+-CONFIG_NETDEVICES=y
+-CONFIG_IFB=m
+-CONFIG_DUMMY=m
+-CONFIG_BONDING=m
+-CONFIG_MACVLAN=m
+-CONFIG_EQUALIZER=m
+-CONFIG_TUN=m
+-CONFIG_VETH=m
+-# CONFIG_NET_SB1000 is not set
+-CONFIG_ARCNET=m
+-CONFIG_ARCNET_1201=m
+-CONFIG_ARCNET_1051=m
+-CONFIG_ARCNET_RAW=m
+-CONFIG_ARCNET_CAP=m
+-CONFIG_ARCNET_COM90xx=m
+-CONFIG_ARCNET_COM90xxIO=m
+-CONFIG_ARCNET_RIM_I=m
+-# CONFIG_ARCNET_COM20020 is not set
+-CONFIG_PHYLIB=m
+-
+-#
+-# MII PHY device drivers
+-#
+-CONFIG_MARVELL_PHY=m
+-CONFIG_DAVICOM_PHY=m
+-CONFIG_QSEMI_PHY=m
+-CONFIG_LXT_PHY=m
+-CONFIG_CICADA_PHY=m
+-CONFIG_VITESSE_PHY=m
+-CONFIG_SMSC_PHY=m
+-CONFIG_BROADCOM_PHY=m
+-CONFIG_ICPLUS_PHY=m
+-CONFIG_REALTEK_PHY=m
+-CONFIG_MDIO_BITBANG=m
+-CONFIG_NET_ETHERNET=y
+-CONFIG_MII=m
+-CONFIG_HAPPYMEAL=m
+-CONFIG_SUNGEM=m
+-CONFIG_CASSINI=m
+-CONFIG_NET_VENDOR_3COM=y
+-CONFIG_VORTEX=m
+-CONFIG_TYPHOON=m
+-CONFIG_ENC28J60=m
+-# CONFIG_ENC28J60_WRITEVERIFY is not set
+-CONFIG_NET_TULIP=y
+-CONFIG_DE2104X=m
+-CONFIG_TULIP=m
+-# CONFIG_TULIP_MWI is not set
+-# CONFIG_TULIP_MMIO is not set
+-CONFIG_TULIP_NAPI=y
+-CONFIG_TULIP_NAPI_HW_MITIGATION=y
+-CONFIG_DE4X5=m
+-CONFIG_WINBOND_840=m
+-CONFIG_DM9102=m
+-CONFIG_ULI526X=m
+-CONFIG_PCMCIA_XIRCOM=m
+-CONFIG_HP100=m
+-# CONFIG_IBM_NEW_EMAC_ZMII is not set
+-# CONFIG_IBM_NEW_EMAC_RGMII is not set
+-# CONFIG_IBM_NEW_EMAC_TAH is not set
+-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+-CONFIG_NET_PCI=y
+-CONFIG_PCNET32=m
+-CONFIG_AMD8111_ETH=m
+-CONFIG_ADAPTEC_STARFIRE=m
+-CONFIG_B44=m
+-CONFIG_B44_PCI_AUTOSELECT=y
+-CONFIG_B44_PCICORE_AUTOSELECT=y
+-CONFIG_B44_PCI=y
+-CONFIG_FORCEDETH=m
+-CONFIG_FORCEDETH_NAPI=y
+-CONFIG_EEPRO100=m
+-CONFIG_E100=m
+-CONFIG_FEALNX=m
+-CONFIG_NATSEMI=m
+-CONFIG_NE2K_PCI=m
+-CONFIG_8139CP=m
+-CONFIG_8139TOO=m
+-# CONFIG_8139TOO_PIO is not set
+-# CONFIG_8139TOO_TUNE_TWISTER is not set
+-CONFIG_8139TOO_8129=y
+-# CONFIG_8139_OLD_RX_RESET is not set
+-CONFIG_R6040=m
+-CONFIG_SIS900=m
+-CONFIG_EPIC100=m
+-CONFIG_SUNDANCE=m
+-# CONFIG_SUNDANCE_MMIO is not set
+-CONFIG_TLAN=m
+-CONFIG_VIA_RHINE=m
+-# CONFIG_VIA_RHINE_MMIO is not set
+-CONFIG_SC92031=m
+-# CONFIG_NET_POCKET is not set
+-CONFIG_ATL2=m
+-CONFIG_NETDEV_1000=y
+-CONFIG_ACENIC=m
+-# CONFIG_ACENIC_OMIT_TIGON_I is not set
+-CONFIG_DL2K=m
+-CONFIG_E1000=m
+-# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+-CONFIG_E1000E=m
+-CONFIG_IP1000=m
+-CONFIG_IGB=m
+-CONFIG_IGB_LRO=y
+-CONFIG_NS83820=m
+-CONFIG_HAMACHI=m
+-CONFIG_YELLOWFIN=m
+-CONFIG_R8169=m
+-CONFIG_R8169_VLAN=y
+-CONFIG_SIS190=m
+-CONFIG_SKGE=m
+-# CONFIG_SKGE_DEBUG is not set
+-CONFIG_SKY2=m
+-# CONFIG_SKY2_DEBUG is not set
+-CONFIG_VIA_VELOCITY=m
+-CONFIG_TIGON3=m
+-CONFIG_BNX2=m
+-CONFIG_QLA3XXX=m
+-CONFIG_ATL1=m
+-CONFIG_ATL1E=m
+-CONFIG_NETDEV_10000=y
+-CONFIG_CHELSIO_T1=m
+-CONFIG_CHELSIO_T1_1G=y
+-CONFIG_CHELSIO_T3=m
+-CONFIG_IXGBE=m
+-CONFIG_IXGBE_LRO=y
+-CONFIG_IXGBE_DCB=y
+-CONFIG_IXGB=m
+-CONFIG_S2IO=m
+-CONFIG_MYRI10GE=m
+-CONFIG_NETXEN_NIC=m
+-CONFIG_NIU=m
+-CONFIG_MLX4_CORE=m
+-CONFIG_MLX4_DEBUG=y
+-CONFIG_TEHUTI=m
+-CONFIG_BNX2X=m
+-CONFIG_SFC=m
+-# CONFIG_SFC_RESOURCE is not set
+-CONFIG_TR=y
+-CONFIG_IBMOL=m
+-CONFIG_3C359=m
+-CONFIG_TMS380TR=m
+-CONFIG_TMSPCI=m
+-CONFIG_ABYSS=m
+-
+-#
+-# Wireless LAN
+-#
+-CONFIG_WLAN_PRE80211=y
+-CONFIG_STRIP=m
+-CONFIG_PCMCIA_WAVELAN=m
+-CONFIG_PCMCIA_NETWAVE=m
+-CONFIG_WLAN_80211=y
+-CONFIG_PCMCIA_RAYCS=m
+-CONFIG_IPW2100=m
+-CONFIG_IPW2100_MONITOR=y
+-# CONFIG_IPW2100_DEBUG is not set
+-CONFIG_IPW2200=m
+-CONFIG_IPW2200_MONITOR=y
+-CONFIG_IPW2200_RADIOTAP=y
+-CONFIG_IPW2200_PROMISCUOUS=y
+-CONFIG_IPW2200_QOS=y
+-# CONFIG_IPW2200_DEBUG is not set
+-CONFIG_LIBERTAS=m
+-CONFIG_LIBERTAS_USB=m
+-CONFIG_LIBERTAS_CS=m
+-CONFIG_LIBERTAS_SDIO=m
+-# CONFIG_LIBERTAS_DEBUG is not set
+-CONFIG_AIRO=m
+-CONFIG_HERMES=m
+-CONFIG_PLX_HERMES=m
+-CONFIG_TMD_HERMES=m
+-CONFIG_NORTEL_HERMES=m
+-CONFIG_PCI_HERMES=m
+-CONFIG_PCMCIA_HERMES=m
+-CONFIG_PCMCIA_SPECTRUM=m
+-CONFIG_ATMEL=m
+-CONFIG_PCI_ATMEL=m
+-CONFIG_PCMCIA_ATMEL=m
+-CONFIG_AIRO_CS=m
+-CONFIG_PCMCIA_WL3501=m
+-CONFIG_PRISM54=m
+-CONFIG_USB_ZD1201=m
+-CONFIG_USB_NET_RNDIS_WLAN=m
+-CONFIG_RTL8180=m
+-CONFIG_RTL8187=m
+-CONFIG_ADM8211=m
+-CONFIG_MAC80211_HWSIM=m
+-CONFIG_P54_COMMON=m
+-CONFIG_P54_USB=m
+-CONFIG_P54_PCI=m
+-CONFIG_ATH5K=m
+-# CONFIG_ATH5K_DEBUG is not set
+-CONFIG_ATH9K=m
+-CONFIG_IWLWIFI=m
+-CONFIG_IWLCORE=m
+-CONFIG_IWLWIFI_LEDS=y
+-CONFIG_IWLWIFI_RFKILL=y
+-# CONFIG_IWLWIFI_DEBUG is not set
+-CONFIG_IWLAGN=m
+-CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWLAGN_LEDS=y
+-CONFIG_IWL4965=y
+-CONFIG_IWL5000=y
+-CONFIG_IWL3945=m
+-CONFIG_IWL3945_RFKILL=y
+-CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
+-CONFIG_IWL3945_LEDS=y
+-# CONFIG_IWL3945_DEBUG is not set
+-CONFIG_HOSTAP=m
+-CONFIG_HOSTAP_FIRMWARE=y
+-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+-CONFIG_HOSTAP_PLX=m
+-CONFIG_HOSTAP_PCI=m
+-CONFIG_HOSTAP_CS=m
+-CONFIG_B43=m
+-CONFIG_B43_PCI_AUTOSELECT=y
+-CONFIG_B43_PCICORE_AUTOSELECT=y
+-CONFIG_B43_PCMCIA=y
+-CONFIG_B43_PIO=y
+-CONFIG_B43_LEDS=y
+-CONFIG_B43_RFKILL=y
+-# CONFIG_B43_DEBUG is not set
+-CONFIG_B43LEGACY=m
+-CONFIG_B43LEGACY_PCI_AUTOSELECT=y
+-CONFIG_B43LEGACY_PCICORE_AUTOSELECT=y
+-CONFIG_B43LEGACY_LEDS=y
+-CONFIG_B43LEGACY_RFKILL=y
+-# CONFIG_B43LEGACY_DEBUG is not set
+-CONFIG_B43LEGACY_DMA=y
+-CONFIG_B43LEGACY_PIO=y
+-CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
+-# CONFIG_B43LEGACY_DMA_MODE is not set
+-# CONFIG_B43LEGACY_PIO_MODE is not set
+-CONFIG_ZD1211RW=m
+-# CONFIG_ZD1211RW_DEBUG is not set
+-CONFIG_RT2X00=m
+-CONFIG_RT2X00_LIB=m
+-CONFIG_RT2X00_LIB_PCI=m
+-CONFIG_RT2X00_LIB_USB=m
+-CONFIG_RT2X00_LIB_FIRMWARE=y
+-CONFIG_RT2X00_LIB_RFKILL=y
+-CONFIG_RT2X00_LIB_LEDS=y
+-CONFIG_RT2400PCI=m
+-CONFIG_RT2400PCI_RFKILL=y
+-CONFIG_RT2400PCI_LEDS=y
+-CONFIG_RT2500PCI=m
+-CONFIG_RT2500PCI_RFKILL=y
+-CONFIG_RT2500PCI_LEDS=y
+-CONFIG_RT61PCI=m
+-CONFIG_RT61PCI_RFKILL=y
+-CONFIG_RT61PCI_LEDS=y
+-CONFIG_RT2500USB=m
+-CONFIG_RT2500USB_LEDS=y
+-CONFIG_RT73USB=m
+-CONFIG_RT73USB_LEDS=y
+-# CONFIG_RT2X00_LIB_DEBUGFS is not set
+-# CONFIG_RT2X00_DEBUG is not set
+-
+-#
+-# USB Network Adapters
+-#
+-CONFIG_USB_CATC=m
+-CONFIG_USB_KAWETH=m
+-CONFIG_USB_PEGASUS=m
+-CONFIG_USB_RTL8150=m
+-CONFIG_USB_USBNET=m
+-CONFIG_USB_NET_AX8817X=m
+-CONFIG_USB_NET_CDCETHER=m
+-CONFIG_USB_NET_DM9601=m
+-CONFIG_USB_NET_GL620A=m
+-CONFIG_USB_NET_NET1080=m
+-CONFIG_USB_NET_PLUSB=m
+-CONFIG_USB_NET_MCS7830=m
+-CONFIG_USB_NET_RNDIS_HOST=m
+-CONFIG_USB_NET_CDC_SUBSET=m
+-CONFIG_USB_ALI_M5632=y
+-CONFIG_USB_AN2720=y
+-CONFIG_USB_BELKIN=y
+-CONFIG_USB_ARMLINUX=y
+-CONFIG_USB_EPSON2888=y
+-CONFIG_USB_KC2190=y
+-CONFIG_USB_NET_ZAURUS=m
+-CONFIG_USB_HSO=m
+-CONFIG_NET_PCMCIA=y
+-CONFIG_PCMCIA_3C589=m
+-CONFIG_PCMCIA_3C574=m
+-CONFIG_PCMCIA_FMVJ18X=m
+-CONFIG_PCMCIA_PCNET=m
+-CONFIG_PCMCIA_NMCLAN=m
+-CONFIG_PCMCIA_SMC91C92=m
+-CONFIG_PCMCIA_XIRC2PS=m
+-CONFIG_PCMCIA_AXNET=m
+-CONFIG_WAN=y
+-CONFIG_LANMEDIA=m
+-CONFIG_HDLC=m
+-CONFIG_HDLC_RAW=m
+-CONFIG_HDLC_RAW_ETH=m
+-CONFIG_HDLC_CISCO=m
+-CONFIG_HDLC_FR=m
+-CONFIG_HDLC_PPP=m
+-CONFIG_HDLC_X25=m
+-CONFIG_PCI200SYN=m
+-CONFIG_WANXL=m
+-# CONFIG_PC300 is not set
+-CONFIG_PC300TOO=m
+-CONFIG_FARSYNC=m
+-# CONFIG_DSCC4 is not set
+-CONFIG_DLCI=m
+-CONFIG_DLCI_MAX=8
+-# CONFIG_WAN_ROUTER_DRIVERS is not set
+-CONFIG_LAPBETHER=m
+-CONFIG_X25_ASY=m
+-# CONFIG_SBNI is not set
+-CONFIG_ATM_DRIVERS=y
+-CONFIG_ATM_DUMMY=m
+-CONFIG_ATM_TCP=m
+-CONFIG_ATM_LANAI=m
+-CONFIG_ATM_ENI=m
+-# CONFIG_ATM_ENI_DEBUG is not set
+-CONFIG_ATM_ENI_TUNE_BURST=y
+-# CONFIG_ATM_ENI_BURST_TX_16W is not set
+-CONFIG_ATM_ENI_BURST_TX_8W=y
+-CONFIG_ATM_ENI_BURST_TX_4W=y
+-CONFIG_ATM_ENI_BURST_TX_2W=y
+-# CONFIG_ATM_ENI_BURST_RX_16W is not set
+-# CONFIG_ATM_ENI_BURST_RX_8W is not set
+-CONFIG_ATM_ENI_BURST_RX_4W=y
+-CONFIG_ATM_ENI_BURST_RX_2W=y
+-CONFIG_ATM_FIRESTREAM=m
+-CONFIG_ATM_ZATM=m
+-# CONFIG_ATM_ZATM_DEBUG is not set
+-CONFIG_ATM_IDT77252=m
+-# CONFIG_ATM_IDT77252_DEBUG is not set
+-# CONFIG_ATM_IDT77252_RCV_ALL is not set
+-CONFIG_ATM_IDT77252_USE_SUNI=y
+-CONFIG_ATM_AMBASSADOR=m
+-# CONFIG_ATM_AMBASSADOR_DEBUG is not set
+-CONFIG_ATM_HORIZON=m
+-# CONFIG_ATM_HORIZON_DEBUG is not set
+-CONFIG_ATM_IA=m
+-# CONFIG_ATM_IA_DEBUG is not set
+-CONFIG_ATM_FORE200E=m
+-CONFIG_ATM_FORE200E_USE_TASKLET=y
+-CONFIG_ATM_FORE200E_TX_RETRY=16
+-CONFIG_ATM_FORE200E_DEBUG=0
+-CONFIG_ATM_HE=m
+-CONFIG_ATM_HE_USE_SUNI=y
+-CONFIG_FDDI=y
+-# CONFIG_DEFXX is not set
+-CONFIG_SKFP=m
+-CONFIG_HIPPI=y
+-CONFIG_ROADRUNNER=m
+-CONFIG_ROADRUNNER_LARGE_RINGS=y
+-CONFIG_PLIP=m
+-CONFIG_PPP=m
+-CONFIG_PPP_MULTILINK=y
+-CONFIG_PPP_FILTER=y
+-CONFIG_PPP_ASYNC=m
+-CONFIG_PPP_SYNC_TTY=m
+-CONFIG_PPP_DEFLATE=m
+-CONFIG_PPP_BSDCOMP=m
+-CONFIG_PPP_MPPE=m
+-CONFIG_PPPOE=m
+-CONFIG_PPPOATM=m
+-CONFIG_PPPOL2TP=m
+-CONFIG_SLIP=m
+-CONFIG_SLIP_COMPRESSED=y
+-CONFIG_SLHC=m
+-CONFIG_SLIP_SMART=y
+-CONFIG_SLIP_MODE_SLIP6=y
+-CONFIG_NET_FC=y
+-CONFIG_NETCONSOLE=m
+-CONFIG_NETCONSOLE_DYNAMIC=y
+-CONFIG_NETPOLL=y
+-CONFIG_NETPOLL_TRAP=y
+-CONFIG_NET_POLL_CONTROLLER=y
+-CONFIG_VIRTIO_NET=m
+-CONFIG_ISDN=y
+-CONFIG_MISDN=m
+-CONFIG_MISDN_DSP=m
+-CONFIG_MISDN_L1OIP=m
+-
+-#
+-# mISDN hardware drivers
+-#
+-CONFIG_MISDN_HFCPCI=m
+-CONFIG_MISDN_HFCMULTI=m
+-CONFIG_ISDN_I4L=m
+-CONFIG_ISDN_PPP=y
+-CONFIG_ISDN_PPP_VJ=y
+-CONFIG_ISDN_MPP=y
+-CONFIG_IPPP_FILTER=y
+-CONFIG_ISDN_PPP_BSDCOMP=m
+-CONFIG_ISDN_AUDIO=y
+-CONFIG_ISDN_TTY_FAX=y
+-CONFIG_ISDN_X25=y
+-
+-#
+-# ISDN feature submodules
+-#
+-CONFIG_ISDN_DIVERSION=m
+-
+-#
+-# ISDN4Linux hardware drivers
+-#
+-
+-#
+-# Passive cards
+-#
+-CONFIG_ISDN_DRV_HISAX=m
+-
+-#
+-# D-channel protocol features
+-#
+-CONFIG_HISAX_EURO=y
+-CONFIG_DE_AOC=y
+-# CONFIG_HISAX_NO_SENDCOMPLETE is not set
+-# CONFIG_HISAX_NO_LLC is not set
+-# CONFIG_HISAX_NO_KEYPAD is not set
+-CONFIG_HISAX_1TR6=y
+-CONFIG_HISAX_NI1=y
+-CONFIG_HISAX_MAX_CARDS=8
+-
+-#
+-# HiSax supported cards
+-#
+-CONFIG_HISAX_16_3=y
+-CONFIG_HISAX_TELESPCI=y
+-CONFIG_HISAX_S0BOX=y
+-CONFIG_HISAX_FRITZPCI=y
+-CONFIG_HISAX_AVM_A1_PCMCIA=y
+-CONFIG_HISAX_ELSA=y
+-CONFIG_HISAX_DIEHLDIVA=y
+-CONFIG_HISAX_SEDLBAUER=y
+-CONFIG_HISAX_NETJET=y
+-CONFIG_HISAX_NETJET_U=y
+-CONFIG_HISAX_NICCY=y
+-CONFIG_HISAX_BKM_A4T=y
+-CONFIG_HISAX_SCT_QUADRO=y
+-CONFIG_HISAX_GAZEL=y
+-CONFIG_HISAX_HFC_PCI=y
+-CONFIG_HISAX_W6692=y
+-CONFIG_HISAX_HFC_SX=y
+-CONFIG_HISAX_ENTERNOW_PCI=y
+-CONFIG_HISAX_DEBUG=y
+-
+-#
+-# HiSax PCMCIA card service modules
+-#
+-CONFIG_HISAX_SEDLBAUER_CS=m
+-CONFIG_HISAX_ELSA_CS=m
+-CONFIG_HISAX_AVM_A1_CS=m
+-CONFIG_HISAX_TELES_CS=m
+-
+-#
+-# HiSax sub driver modules
+-#
+-CONFIG_HISAX_ST5481=m
+-CONFIG_HISAX_HFCUSB=m
+-CONFIG_HISAX_HFC4S8S=m
+-CONFIG_HISAX_FRITZ_PCIPNP=m
+-CONFIG_HISAX_HDLC=y
+-
+-#
+-# Active cards
+-#
+-CONFIG_HYSDN=m
+-CONFIG_HYSDN_CAPI=y
+-CONFIG_ISDN_DRV_GIGASET=m
+-CONFIG_GIGASET_BASE=m
+-CONFIG_GIGASET_M105=m
+-CONFIG_GIGASET_M101=m
+-# CONFIG_GIGASET_DEBUG is not set
+-CONFIG_GIGASET_UNDOCREQ=y
+-CONFIG_ISDN_CAPI=m
+-CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON=y
+-CONFIG_CAPI_TRACE=y
+-CONFIG_ISDN_CAPI_MIDDLEWARE=y
+-CONFIG_ISDN_CAPI_CAPI20=m
+-CONFIG_ISDN_CAPI_CAPIFS_BOOL=y
+-CONFIG_ISDN_CAPI_CAPIFS=m
+-CONFIG_ISDN_CAPI_CAPIDRV=m
+-
+-#
+-# CAPI hardware drivers
+-#
+-CONFIG_CAPI_AVM=y
+-CONFIG_ISDN_DRV_AVMB1_B1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
+-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
+-CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
+-CONFIG_ISDN_DRV_AVMB1_T1PCI=m
+-CONFIG_ISDN_DRV_AVMB1_C4=m
+-# CONFIG_CAPI_EICON is not set
+-CONFIG_PHONE=m
+-CONFIG_PHONE_IXJ=m
+-CONFIG_PHONE_IXJ_PCMCIA=m
+-
+-#
+-# Input device support
+-#
+-CONFIG_INPUT=y
+-CONFIG_INPUT_FF_MEMLESS=m
+-CONFIG_INPUT_POLLDEV=m
+-
+-#
+-# Userland interfaces
+-#
+-CONFIG_INPUT_MOUSEDEV=y
+-CONFIG_INPUT_MOUSEDEV_PSAUX=y
+-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+-CONFIG_INPUT_JOYDEV=m
+-CONFIG_INPUT_EVDEV=y
+-# CONFIG_INPUT_EVBUG is not set
+-
+-#
+-# Input Device Drivers
+-#
+-CONFIG_INPUT_KEYBOARD=y
+-CONFIG_KEYBOARD_ATKBD=y
+-CONFIG_KEYBOARD_SUNKBD=m
+-# CONFIG_KEYBOARD_LKKBD is not set
+-CONFIG_KEYBOARD_XTKBD=m
+-CONFIG_KEYBOARD_NEWTON=m
+-# CONFIG_KEYBOARD_STOWAWAY is not set
+-CONFIG_KEYBOARD_GPIO=m
+-CONFIG_INPUT_MOUSE=y
+-CONFIG_MOUSE_PS2=y
+-CONFIG_MOUSE_PS2_ALPS=y
+-CONFIG_MOUSE_PS2_LOGIPS2PP=y
+-CONFIG_MOUSE_PS2_SYNAPTICS=y
+-CONFIG_MOUSE_PS2_LIFEBOOK=y
+-CONFIG_MOUSE_PS2_TRACKPOINT=y
+-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+-CONFIG_MOUSE_SERIAL=m
+-CONFIG_MOUSE_APPLETOUCH=m
+-CONFIG_MOUSE_BCM5974=m
+-# CONFIG_MOUSE_VSXXXAA is not set
+-CONFIG_MOUSE_GPIO=m
+-CONFIG_INPUT_JOYSTICK=y
+-CONFIG_JOYSTICK_ANALOG=m
+-CONFIG_JOYSTICK_A3D=m
+-CONFIG_JOYSTICK_ADI=m
+-CONFIG_JOYSTICK_COBRA=m
+-CONFIG_JOYSTICK_GF2K=m
+-CONFIG_JOYSTICK_GRIP=m
+-CONFIG_JOYSTICK_GRIP_MP=m
+-CONFIG_JOYSTICK_GUILLEMOT=m
+-CONFIG_JOYSTICK_INTERACT=m
+-CONFIG_JOYSTICK_SIDEWINDER=m
+-CONFIG_JOYSTICK_TMDC=m
+-CONFIG_JOYSTICK_IFORCE=m
+-CONFIG_JOYSTICK_IFORCE_USB=y
+-CONFIG_JOYSTICK_IFORCE_232=y
+-CONFIG_JOYSTICK_WARRIOR=m
+-CONFIG_JOYSTICK_MAGELLAN=m
+-CONFIG_JOYSTICK_SPACEORB=m
+-CONFIG_JOYSTICK_SPACEBALL=m
+-CONFIG_JOYSTICK_STINGER=m
+-CONFIG_JOYSTICK_TWIDJOY=m
+-CONFIG_JOYSTICK_ZHENHUA=m
+-CONFIG_JOYSTICK_DB9=m
+-CONFIG_JOYSTICK_GAMECON=m
+-CONFIG_JOYSTICK_TURBOGRAFX=m
+-CONFIG_JOYSTICK_JOYDUMP=m
+-CONFIG_JOYSTICK_XPAD=m
+-CONFIG_JOYSTICK_XPAD_FF=y
+-CONFIG_JOYSTICK_XPAD_LEDS=y
+-CONFIG_INPUT_TABLET=y
+-CONFIG_TABLET_USB_ACECAD=m
+-CONFIG_TABLET_USB_AIPTEK=m
+-CONFIG_TABLET_USB_GTCO=m
+-CONFIG_TABLET_USB_KBTAB=m
+-CONFIG_TABLET_USB_WACOM=m
+-CONFIG_INPUT_TOUCHSCREEN=y
+-CONFIG_TOUCHSCREEN_ADS7846=m
+-CONFIG_TOUCHSCREEN_FUJITSU=m
+-CONFIG_TOUCHSCREEN_GUNZE=m
+-CONFIG_TOUCHSCREEN_ELO=m
+-CONFIG_TOUCHSCREEN_ELOUSB=m
+-CONFIG_TOUCHSCREEN_MTOUCH=m
+-CONFIG_TOUCHSCREEN_INEXIO=m
+-CONFIG_TOUCHSCREEN_MK712=m
+-CONFIG_TOUCHSCREEN_PENMOUNT=m
+-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+-CONFIG_TOUCHSCREEN_TOUCHWIN=m
+-CONFIG_TOUCHSCREEN_UCB1400=m
+-CONFIG_TOUCHSCREEN_WM97XX=m
+-CONFIG_TOUCHSCREEN_WM9705=y
+-CONFIG_TOUCHSCREEN_WM9712=y
+-CONFIG_TOUCHSCREEN_WM9713=y
+-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+-CONFIG_TOUCHSCREEN_USB_EGALAX=y
+-CONFIG_TOUCHSCREEN_USB_PANJIT=y
+-CONFIG_TOUCHSCREEN_USB_3M=y
+-CONFIG_TOUCHSCREEN_USB_ITM=y
+-CONFIG_TOUCHSCREEN_USB_ETURBO=y
+-CONFIG_TOUCHSCREEN_USB_GUNZE=y
+-CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+-CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+-CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+-CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+-CONFIG_TOUCHSCREEN_USB_GOTOP=y
+-CONFIG_TOUCHSCREEN_TOUCHIT213=m
+-CONFIG_INPUT_MISC=y
+-CONFIG_INPUT_PCSPKR=m
+-CONFIG_INPUT_APANEL=m
+-CONFIG_INPUT_ATLAS_BTNS=m
+-CONFIG_INPUT_ATI_REMOTE=m
+-CONFIG_INPUT_ATI_REMOTE2=m
+-CONFIG_INPUT_KEYSPAN_REMOTE=m
+-CONFIG_INPUT_POWERMATE=m
+-CONFIG_INPUT_YEALINK=m
+-CONFIG_INPUT_UINPUT=m
+-
+-#
+-# Hardware I/O ports
+-#
+-CONFIG_SERIO=y
+-CONFIG_SERIO_I8042=y
+-CONFIG_SERIO_SERPORT=m
+-CONFIG_SERIO_CT82C710=m
+-CONFIG_SERIO_PARKBD=m
+-CONFIG_SERIO_PCIPS2=m
+-CONFIG_SERIO_LIBPS2=y
+-CONFIG_SERIO_RAW=m
+-CONFIG_GAMEPORT=m
+-CONFIG_GAMEPORT_NS558=m
+-CONFIG_GAMEPORT_L4=m
+-CONFIG_GAMEPORT_EMU10K1=m
+-CONFIG_GAMEPORT_FM801=m
+-
+-#
+-# Character devices
+-#
+-CONFIG_VT=y
+-CONFIG_CONSOLE_TRANSLATIONS=y
+-CONFIG_VT_CONSOLE=y
+-CONFIG_HW_CONSOLE=y
+-CONFIG_VT_HW_CONSOLE_BINDING=y
+-CONFIG_DEVKMEM=y
+-CONFIG_SERIAL_NONSTANDARD=y
+-CONFIG_COMPUTONE=m
+-CONFIG_ROCKETPORT=m
+-CONFIG_CYCLADES=m
+-# CONFIG_CYZ_INTR is not set
+-CONFIG_DIGIEPCA=m
+-CONFIG_MOXA_INTELLIO=m
+-CONFIG_MOXA_SMARTIO=m
+-CONFIG_ISI=m
+-CONFIG_SYNCLINK=m
+-CONFIG_SYNCLINKMP=m
+-CONFIG_SYNCLINK_GT=m
+-CONFIG_N_HDLC=m
+-CONFIG_RISCOM8=m
+-CONFIG_SPECIALIX=m
+-CONFIG_SX=m
+-CONFIG_RIO=m
+-CONFIG_RIO_OLDPCI=y
+-CONFIG_STALDRV=y
+-CONFIG_NOZOMI=m
+-
+-#
+-# Serial drivers
+-#
+-CONFIG_SERIAL_8250=y
+-CONFIG_SERIAL_8250_CONSOLE=y
+-CONFIG_FIX_EARLYCON_MEM=y
+-CONFIG_SERIAL_8250_PCI=y
+-CONFIG_SERIAL_8250_PNP=y
+-CONFIG_SERIAL_8250_CS=m
+-CONFIG_SERIAL_8250_NR_UARTS=16
+-CONFIG_SERIAL_8250_RUNTIME_UARTS=8
+-# CONFIG_SERIAL_8250_EXTENDED is not set
+-
+-#
+-# Non-8250 serial port support
+-#
+-CONFIG_SERIAL_CORE=y
+-CONFIG_SERIAL_CORE_CONSOLE=y
+-CONFIG_SERIAL_JSM=m
+-CONFIG_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=0
+-CONFIG_PRINTER=m
+-# CONFIG_LP_CONSOLE is not set
+-CONFIG_PPDEV=m
+-CONFIG_HVC_DRIVER=y
+-CONFIG_VIRTIO_CONSOLE=m
+-CONFIG_IPMI_HANDLER=m
+-CONFIG_IPMI_PANIC_EVENT=y
+-# CONFIG_IPMI_PANIC_STRING is not set
+-CONFIG_IPMI_DEVICE_INTERFACE=m
+-CONFIG_IPMI_SI=m
+-CONFIG_IPMI_WATCHDOG=m
+-CONFIG_IPMI_POWEROFF=m
+-CONFIG_HW_RANDOM=y
+-CONFIG_HW_RANDOM_INTEL=m
+-CONFIG_HW_RANDOM_AMD=m
+-CONFIG_HW_RANDOM_VIRTIO=m
+-CONFIG_NVRAM=y
+-CONFIG_R3964=m
+-CONFIG_APPLICOM=m
+-
+-#
+-# PCMCIA character devices
+-#
+-CONFIG_SYNCLINK_CS=m
+-CONFIG_CARDMAN_4000=m
+-CONFIG_CARDMAN_4040=m
+-CONFIG_IPWIRELESS=m
+-# CONFIG_MWAVE is not set
+-CONFIG_PC8736x_GPIO=m
+-CONFIG_NSC_GPIO=m
+-CONFIG_RAW_DRIVER=m
+-CONFIG_MAX_RAW_DEVS=4096
+-CONFIG_HPET=y
+-CONFIG_HPET_MMAP=y
+-CONFIG_HANGCHECK_TIMER=m
+-CONFIG_TCG_TPM=m
+-CONFIG_TCG_TIS=m
+-CONFIG_TCG_NSC=m
+-CONFIG_TCG_ATMEL=m
+-CONFIG_TCG_INFINEON=m
+-CONFIG_TELCLOCK=m
+-CONFIG_DEVPORT=y
+-CONFIG_CRASHER=m
+-CONFIG_I2C=m
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=m
+-CONFIG_I2C_HELPER_AUTO=y
+-CONFIG_I2C_ALGOBIT=m
+-CONFIG_I2C_ALGOPCA=m
+-
+-#
+-# I2C Hardware Bus support
+-#
+-
+-#
+-# PC SMBus host controller drivers
+-#
+-CONFIG_I2C_ALI1535=m
+-CONFIG_I2C_ALI1563=m
+-CONFIG_I2C_ALI15X3=m
+-CONFIG_I2C_AMD756=m
+-CONFIG_I2C_AMD756_S4882=m
+-CONFIG_I2C_AMD8111=m
+-CONFIG_I2C_I801=m
+-CONFIG_I2C_ISCH=m
+-CONFIG_I2C_PIIX4=m
+-CONFIG_I2C_NFORCE2=m
+-CONFIG_I2C_NFORCE2_S4985=m
+-CONFIG_I2C_SIS5595=m
+-CONFIG_I2C_SIS630=m
+-CONFIG_I2C_SIS96X=m
+-CONFIG_I2C_VIA=m
+-CONFIG_I2C_VIAPRO=m
+-
+-#
+-# I2C system bus drivers (mostly embedded / system-on-chip)
+-#
+-CONFIG_I2C_GPIO=m
+-CONFIG_I2C_OCORES=m
+-# CONFIG_I2C_SIMTEC is not set
+-
+-#
+-# External I2C/SMBus adapter drivers
+-#
+-CONFIG_I2C_PARPORT=m
+-CONFIG_I2C_PARPORT_LIGHT=m
+-CONFIG_I2C_TAOS_EVM=m
+-CONFIG_I2C_TINY_USB=m
+-
+-#
+-# Graphics adapter I2C/DDC channel drivers
+-#
+-CONFIG_I2C_VOODOO3=m
+-
+-#
+-# Other I2C/SMBus bus drivers
+-#
+-CONFIG_I2C_PCA_PLATFORM=m
+-CONFIG_I2C_STUB=m
+-
+-#
+-# Miscellaneous I2C Chip support
+-#
+-CONFIG_DS1682=m
+-CONFIG_AT24=m
+-CONFIG_SENSORS_EEPROM=m
+-CONFIG_SENSORS_PCF8591=m
+-# CONFIG_TPS65010 is not set
+-CONFIG_SENSORS_MAX6875=m
+-CONFIG_SENSORS_TSL2550=m
+-# CONFIG_I2C_DEBUG_CORE is not set
+-# CONFIG_I2C_DEBUG_ALGO is not set
+-# CONFIG_I2C_DEBUG_BUS is not set
+-# CONFIG_I2C_DEBUG_CHIP is not set
+-CONFIG_SPI=y
+-CONFIG_SPI_DEBUG=y
+-CONFIG_SPI_MASTER=y
+-
+-#
+-# SPI Master Controller Drivers
+-#
+-CONFIG_SPI_BITBANG=m
+-CONFIG_SPI_BUTTERFLY=m
+-CONFIG_SPI_LM70_LLP=m
+-
+-#
+-# SPI Protocol Masters
+-#
+-CONFIG_SPI_AT25=m
+-CONFIG_SPI_SPIDEV=m
+-CONFIG_SPI_TLE62X0=m
+-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
+-CONFIG_GPIOLIB=y
+-# CONFIG_DEBUG_GPIO is not set
+-CONFIG_GPIO_SYSFS=y
+-
+-#
+-# I2C GPIO expanders:
+-#
+-CONFIG_GPIO_MAX732X=m
+-CONFIG_GPIO_PCA953X=m
+-CONFIG_GPIO_PCF857X=m
+-
+-#
+-# PCI GPIO expanders:
+-#
+-
+-#
+-# SPI GPIO expanders:
+-#
+-CONFIG_GPIO_MAX7301=m
+-CONFIG_GPIO_MCP23S08=m
+-CONFIG_W1=m
+-CONFIG_W1_CON=y
+-
+-#
+-# 1-wire Bus Masters
+-#
+-CONFIG_W1_MASTER_MATROX=m
+-CONFIG_W1_MASTER_DS2490=m
+-CONFIG_W1_MASTER_DS2482=m
+-CONFIG_W1_MASTER_GPIO=m
+-
+-#
+-# 1-wire Slaves
+-#
+-CONFIG_W1_SLAVE_THERM=m
+-CONFIG_W1_SLAVE_SMEM=m
+-CONFIG_W1_SLAVE_DS2433=m
+-CONFIG_W1_SLAVE_DS2433_CRC=y
+-CONFIG_W1_SLAVE_DS2760=m
+-CONFIG_POWER_SUPPLY=y
+-# CONFIG_POWER_SUPPLY_DEBUG is not set
+-CONFIG_PDA_POWER=m
+-CONFIG_BATTERY_DS2760=m
+-CONFIG_HWMON=m
+-CONFIG_HWMON_VID=m
+-CONFIG_SENSORS_ABITUGURU=m
+-CONFIG_SENSORS_ABITUGURU3=m
+-CONFIG_SENSORS_AD7414=m
+-CONFIG_SENSORS_AD7418=m
+-CONFIG_SENSORS_ADCXX=m
+-CONFIG_SENSORS_ADM1021=m
+-CONFIG_SENSORS_ADM1025=m
+-CONFIG_SENSORS_ADM1026=m
+-CONFIG_SENSORS_ADM1029=m
+-CONFIG_SENSORS_ADM1031=m
+-CONFIG_SENSORS_ADM9240=m
+-CONFIG_SENSORS_ADT7470=m
+-CONFIG_SENSORS_ADT7473=m
+-CONFIG_SENSORS_K8TEMP=m
+-CONFIG_SENSORS_ASB100=m
+-CONFIG_SENSORS_ATXP1=m
+-CONFIG_SENSORS_DS1621=m
+-CONFIG_SENSORS_I5K_AMB=m
+-CONFIG_SENSORS_F71805F=m
+-CONFIG_SENSORS_F71882FG=m
+-CONFIG_SENSORS_F75375S=m
+-CONFIG_SENSORS_FSCHER=m
+-CONFIG_SENSORS_FSCPOS=m
+-CONFIG_SENSORS_FSCHMD=m
+-CONFIG_SENSORS_GL518SM=m
+-CONFIG_SENSORS_GL520SM=m
+-CONFIG_SENSORS_CORETEMP=m
+-CONFIG_SENSORS_IBMAEM=m
+-CONFIG_SENSORS_IBMPEX=m
+-CONFIG_SENSORS_IT87=m
+-CONFIG_SENSORS_LM63=m
+-CONFIG_SENSORS_LM70=m
+-CONFIG_SENSORS_LM75=m
+-CONFIG_SENSORS_LM77=m
+-CONFIG_SENSORS_LM78=m
+-CONFIG_SENSORS_LM80=m
+-CONFIG_SENSORS_LM83=m
+-CONFIG_SENSORS_LM85=m
+-CONFIG_SENSORS_LM87=m
+-CONFIG_SENSORS_LM90=m
+-CONFIG_SENSORS_LM92=m
+-CONFIG_SENSORS_LM93=m
+-CONFIG_SENSORS_MAX1619=m
+-CONFIG_SENSORS_MAX6650=m
+-CONFIG_SENSORS_PC87360=m
+-CONFIG_SENSORS_PC87427=m
+-CONFIG_SENSORS_SIS5595=m
+-CONFIG_SENSORS_DME1737=m
+-CONFIG_SENSORS_SMSC47M1=m
+-CONFIG_SENSORS_SMSC47M192=m
+-CONFIG_SENSORS_SMSC47B397=m
+-CONFIG_SENSORS_ADS7828=m
+-CONFIG_SENSORS_THMC50=m
+-CONFIG_SENSORS_VIA686A=m
+-CONFIG_SENSORS_VT1211=m
+-CONFIG_SENSORS_VT8231=m
+-CONFIG_SENSORS_W83781D=m
+-CONFIG_SENSORS_W83791D=m
+-CONFIG_SENSORS_W83792D=m
+-CONFIG_SENSORS_W83793=m
+-CONFIG_SENSORS_W83L785TS=m
+-CONFIG_SENSORS_W83L786NG=m
+-CONFIG_SENSORS_W83627HF=m
+-CONFIG_SENSORS_W83627EHF=m
+-CONFIG_SENSORS_HDAPS=m
+-CONFIG_SENSORS_APPLESMC=m
+-# CONFIG_HWMON_DEBUG_CHIP is not set
+-CONFIG_THERMAL=m
+-CONFIG_THERMAL_HWMON=y
+-CONFIG_WATCHDOG=y
+-# CONFIG_WATCHDOG_NOWAYOUT is not set
+-
+-#
+-# Watchdog Device Drivers
+-#
+-CONFIG_SOFT_WATCHDOG=m
+-CONFIG_ACQUIRE_WDT=m
+-CONFIG_ADVANTECH_WDT=m
+-CONFIG_ALIM1535_WDT=m
+-CONFIG_ALIM7101_WDT=m
+-CONFIG_SC520_WDT=m
+-CONFIG_EUROTECH_WDT=m
+-CONFIG_IB700_WDT=m
+-CONFIG_IBMASR=m
+-CONFIG_WAFER_WDT=m
+-CONFIG_I6300ESB_WDT=m
+-CONFIG_ITCO_WDT=m
+-CONFIG_ITCO_VENDOR_SUPPORT=y
+-CONFIG_IT8712F_WDT=m
+-CONFIG_HP_WATCHDOG=m
+-CONFIG_SC1200_WDT=m
+-CONFIG_PC87413_WDT=m
+-CONFIG_60XX_WDT=m
+-CONFIG_SBC8360_WDT=m
+-CONFIG_CPU5_WDT=m
+-CONFIG_SMSC37B787_WDT=m
+-CONFIG_W83627HF_WDT=m
+-CONFIG_W83697HF_WDT=m
+-CONFIG_W83877F_WDT=m
+-CONFIG_W83977F_WDT=m
+-CONFIG_MACHZ_WDT=m
+-CONFIG_SBC_EPX_C3_WATCHDOG=m
+-
+-#
+-# PCI-based Watchdog Cards
+-#
+-CONFIG_PCIPCWATCHDOG=m
+-CONFIG_WDTPCI=m
+-CONFIG_WDT_501_PCI=y
+-
+-#
+-# USB-based Watchdog Cards
+-#
+-CONFIG_USBPCWATCHDOG=m
+-
+-#
+-# Sonics Silicon Backplane
+-#
+-CONFIG_SSB_POSSIBLE=y
+-CONFIG_SSB=m
+-CONFIG_SSB_SPROM=y
+-CONFIG_SSB_BLOCKIO=y
+-CONFIG_SSB_PCIHOST_POSSIBLE=y
+-CONFIG_SSB_PCIHOST=y
+-CONFIG_SSB_B43_PCI_BRIDGE=y
+-CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+-CONFIG_SSB_PCMCIAHOST=y
+-# CONFIG_SSB_DEBUG is not set
+-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+-CONFIG_SSB_DRIVER_PCICORE=y
+-
+-#
+-# Multifunction device drivers
+-#
+-# CONFIG_MFD_CORE is not set
+-CONFIG_MFD_SM501=m
+-CONFIG_MFD_SM501_GPIO=y
+-CONFIG_HTC_PASIC3=m
+-# CONFIG_MFD_TMIO is not set
+-
+-#
+-# Multimedia devices
+-#
+-
+-#
+-# Multimedia core support
+-#
+-CONFIG_VIDEO_DEV=m
+-CONFIG_VIDEO_V4L2_COMMON=m
+-CONFIG_VIDEO_ALLOW_V4L1=y
+-CONFIG_VIDEO_V4L1_COMPAT=y
+-CONFIG_DVB_CORE=m
+-CONFIG_VIDEO_MEDIA=m
+-
+-#
+-# Multimedia drivers
+-#
+-CONFIG_VIDEO_SAA7146=m
+-CONFIG_VIDEO_SAA7146_VV=m
+-CONFIG_MEDIA_ATTACH=y
+-CONFIG_MEDIA_TUNER=m
+-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
+-CONFIG_MEDIA_TUNER_SIMPLE=m
+-CONFIG_MEDIA_TUNER_TDA8290=m
+-CONFIG_MEDIA_TUNER_TDA827X=m
+-CONFIG_MEDIA_TUNER_TDA18271=m
+-CONFIG_MEDIA_TUNER_TDA9887=m
+-CONFIG_MEDIA_TUNER_TEA5761=m
+-CONFIG_MEDIA_TUNER_TEA5767=m
+-CONFIG_MEDIA_TUNER_MT20XX=m
+-CONFIG_MEDIA_TUNER_MT2060=m
+-CONFIG_MEDIA_TUNER_MT2266=m
+-CONFIG_MEDIA_TUNER_MT2131=m
+-CONFIG_MEDIA_TUNER_QT1010=m
+-CONFIG_MEDIA_TUNER_XC2028=m
+-CONFIG_MEDIA_TUNER_XC5000=m
+-CONFIG_MEDIA_TUNER_MXL5005S=m
+-CONFIG_MEDIA_TUNER_MXL5007T=m
+-CONFIG_VIDEO_V4L2=m
+-CONFIG_VIDEO_V4L1=m
+-CONFIG_VIDEOBUF_GEN=m
+-CONFIG_VIDEOBUF_DMA_SG=m
+-CONFIG_VIDEOBUF_VMALLOC=m
+-CONFIG_VIDEOBUF_DMA_CONTIG=m
+-CONFIG_VIDEOBUF_DVB=m
+-CONFIG_VIDEO_BTCX=m
+-CONFIG_VIDEO_IR=m
+-CONFIG_VIDEO_TVEEPROM=m
+-CONFIG_VIDEO_TUNER=m
+-CONFIG_VIDEO_CAPTURE_DRIVERS=y
+-# CONFIG_VIDEO_ADV_DEBUG is not set
+-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
+-CONFIG_VIDEO_IR_I2C=m
+-CONFIG_VIDEO_TVAUDIO=m
+-CONFIG_VIDEO_TDA7432=m
+-CONFIG_VIDEO_TDA9840=m
+-CONFIG_VIDEO_TDA9875=m
+-CONFIG_VIDEO_TEA6415C=m
+-CONFIG_VIDEO_TEA6420=m
+-CONFIG_VIDEO_MSP3400=m
+-CONFIG_VIDEO_CS5345=m
+-CONFIG_VIDEO_CS53L32A=m
+-CONFIG_VIDEO_M52790=m
+-CONFIG_VIDEO_WM8775=m
+-CONFIG_VIDEO_WM8739=m
+-CONFIG_VIDEO_VP27SMPX=m
+-CONFIG_VIDEO_BT819=m
+-CONFIG_VIDEO_BT856=m
+-CONFIG_VIDEO_KS0127=m
+-CONFIG_VIDEO_OV7670=m
+-CONFIG_VIDEO_SAA7110=m
+-CONFIG_VIDEO_SAA7111=m
+-CONFIG_VIDEO_SAA7114=m
+-CONFIG_VIDEO_SAA711X=m
+-CONFIG_VIDEO_SAA717X=m
+-CONFIG_VIDEO_TVP5150=m
+-CONFIG_VIDEO_VPX3220=m
+-CONFIG_VIDEO_CX25840=m
+-CONFIG_VIDEO_CX2341X=m
+-CONFIG_VIDEO_SAA7127=m
+-CONFIG_VIDEO_SAA7185=m
+-CONFIG_VIDEO_ADV7170=m
+-CONFIG_VIDEO_ADV7175=m
+-CONFIG_VIDEO_UPD64031A=m
+-CONFIG_VIDEO_UPD64083=m
+-CONFIG_VIDEO_VIVI=m
+-CONFIG_VIDEO_BT848=m
+-CONFIG_VIDEO_BT848_DVB=y
+-CONFIG_VIDEO_SAA6588=m
+-CONFIG_VIDEO_BWQCAM=m
+-CONFIG_VIDEO_CQCAM=m
+-CONFIG_VIDEO_W9966=m
+-CONFIG_VIDEO_CPIA=m
+-CONFIG_VIDEO_CPIA_PP=m
+-CONFIG_VIDEO_CPIA_USB=m
+-CONFIG_VIDEO_CPIA2=m
+-CONFIG_VIDEO_SAA5246A=m
+-CONFIG_VIDEO_SAA5249=m
+-# CONFIG_TUNER_3036 is not set
+-CONFIG_VIDEO_STRADIS=m
+-CONFIG_VIDEO_ZORAN=m
+-CONFIG_VIDEO_ZORAN_DC30=m
+-CONFIG_VIDEO_ZORAN_ZR36060=m
+-CONFIG_VIDEO_ZORAN_BUZ=m
+-CONFIG_VIDEO_ZORAN_DC10=m
+-CONFIG_VIDEO_ZORAN_LML33=m
+-CONFIG_VIDEO_ZORAN_LML33R10=m
+-CONFIG_VIDEO_ZORAN_AVS6EYES=m
+-CONFIG_VIDEO_MEYE=m
+-CONFIG_VIDEO_SAA7134=m
+-CONFIG_VIDEO_SAA7134_ALSA=m
+-CONFIG_VIDEO_SAA7134_DVB=m
+-CONFIG_VIDEO_MXB=m
+-# CONFIG_VIDEO_DPC is not set
+-CONFIG_VIDEO_HEXIUM_ORION=m
+-CONFIG_VIDEO_HEXIUM_GEMINI=m
+-CONFIG_VIDEO_CX88=m
+-CONFIG_VIDEO_CX88_ALSA=m
+-CONFIG_VIDEO_CX88_BLACKBIRD=m
+-CONFIG_VIDEO_CX88_DVB=m
+-CONFIG_VIDEO_CX88_VP3054=m
+-CONFIG_VIDEO_CX23885=m
+-CONFIG_VIDEO_AU0828=m
+-CONFIG_VIDEO_IVTV=m
+-CONFIG_VIDEO_FB_IVTV=m
+-CONFIG_VIDEO_CX18=m
+-CONFIG_VIDEO_CAFE_CCIC=m
+-CONFIG_V4L_USB_DRIVERS=y
+-CONFIG_USB_VIDEO_CLASS=m
+-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+-CONFIG_USB_GSPCA=m
+-CONFIG_VIDEO_PVRUSB2=m
+-CONFIG_VIDEO_PVRUSB2_SYSFS=y
+-CONFIG_VIDEO_PVRUSB2_DVB=y
+-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+-CONFIG_VIDEO_EM28XX=m
+-CONFIG_VIDEO_EM28XX_ALSA=m
+-CONFIG_VIDEO_EM28XX_DVB=m
+-CONFIG_VIDEO_USBVISION=m
+-CONFIG_VIDEO_USBVIDEO=m
+-CONFIG_USB_VICAM=m
+-CONFIG_USB_IBMCAM=m
+-CONFIG_USB_KONICAWC=m
+-CONFIG_USB_QUICKCAM_MESSENGER=m
+-CONFIG_USB_ET61X251=m
+-CONFIG_VIDEO_OVCAMCHIP=m
+-CONFIG_USB_W9968CF=m
+-CONFIG_USB_OV511=m
+-CONFIG_USB_SE401=m
+-CONFIG_USB_SN9C102=m
+-CONFIG_USB_STV680=m
+-CONFIG_USB_ZC0301=m
+-CONFIG_USB_PWC=m
+-# CONFIG_USB_PWC_DEBUG is not set
+-CONFIG_USB_ZR364XX=m
+-CONFIG_USB_STKWEBCAM=m
+-CONFIG_USB_S2255=m
+-CONFIG_SOC_CAMERA=m
+-CONFIG_SOC_CAMERA_MT9M001=m
+-CONFIG_MT9M001_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_MT9V022=m
+-CONFIG_MT9V022_PCA9536_SWITCH=y
+-CONFIG_SOC_CAMERA_PLATFORM=m
+-CONFIG_VIDEO_SH_MOBILE_CEU=m
+-CONFIG_RADIO_ADAPTERS=y
+-CONFIG_RADIO_GEMTEK_PCI=m
+-CONFIG_RADIO_MAXIRADIO=m
+-CONFIG_RADIO_MAESTRO=m
+-CONFIG_USB_DSBR=m
+-CONFIG_USB_SI470X=m
+-CONFIG_DVB_CAPTURE_DRIVERS=y
+-
+-#
+-# Supported SAA7146 based PCI Adapters
+-#
+-CONFIG_TTPCI_EEPROM=m
+-CONFIG_DVB_AV7110=m
+-# CONFIG_DVB_AV7110_FIRMWARE is not set
+-CONFIG_DVB_AV7110_OSD=y
+-CONFIG_DVB_BUDGET_CORE=m
+-CONFIG_DVB_BUDGET=m
+-CONFIG_DVB_BUDGET_CI=m
+-CONFIG_DVB_BUDGET_AV=m
+-CONFIG_DVB_BUDGET_PATCH=m
+-
+-#
+-# Supported USB Adapters
+-#
+-CONFIG_DVB_USB=m
+-# CONFIG_DVB_USB_DEBUG is not set
+-CONFIG_DVB_USB_A800=m
+-CONFIG_DVB_USB_DIBUSB_MB=m
+-# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
+-CONFIG_DVB_USB_DIBUSB_MC=m
+-CONFIG_DVB_USB_DIB0700=m
+-CONFIG_DVB_USB_UMT_010=m
+-CONFIG_DVB_USB_CXUSB=m
+-CONFIG_DVB_USB_M920X=m
+-CONFIG_DVB_USB_GL861=m
+-CONFIG_DVB_USB_AU6610=m
+-CONFIG_DVB_USB_DIGITV=m
+-CONFIG_DVB_USB_VP7045=m
+-CONFIG_DVB_USB_VP702X=m
+-CONFIG_DVB_USB_GP8PSK=m
+-CONFIG_DVB_USB_NOVA_T_USB2=m
+-CONFIG_DVB_USB_TTUSB2=m
+-CONFIG_DVB_USB_DTT200U=m
+-CONFIG_DVB_USB_OPERA1=m
+-CONFIG_DVB_USB_AF9005=m
+-CONFIG_DVB_USB_AF9005_REMOTE=m
+-CONFIG_DVB_USB_DW2102=m
+-CONFIG_DVB_USB_ANYSEE=m
+-CONFIG_DVB_TTUSB_BUDGET=m
+-CONFIG_DVB_TTUSB_DEC=m
+-CONFIG_DVB_CINERGYT2=m
+-# CONFIG_DVB_CINERGYT2_TUNING is not set
+-CONFIG_DVB_SIANO_SMS1XXX=m
+-CONFIG_DVB_SIANO_SMS1XXX_SMS_IDS=y
+-
+-#
+-# Supported FlexCopII (B2C2) Adapters
+-#
+-CONFIG_DVB_B2C2_FLEXCOP=m
+-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+-CONFIG_DVB_B2C2_FLEXCOP_USB=m
+-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
+-
+-#
+-# Supported BT878 Adapters
+-#
+-CONFIG_DVB_BT8XX=m
+-
+-#
+-# Supported Pluto2 Adapters
+-#
+-CONFIG_DVB_PLUTO2=m
+-
+-#
+-# Supported DVB Frontends
+-#
+-
+-#
+-# Customise DVB Frontends
+-#
+-# CONFIG_DVB_FE_CUSTOMISE is not set
+-
+-#
+-# DVB-S (satellite) frontends
+-#
+-CONFIG_DVB_CX24110=m
+-CONFIG_DVB_CX24123=m
+-CONFIG_DVB_MT312=m
+-CONFIG_DVB_S5H1420=m
+-CONFIG_DVB_STV0299=m
+-CONFIG_DVB_TDA8083=m
+-CONFIG_DVB_TDA10086=m
+-CONFIG_DVB_VES1X93=m
+-CONFIG_DVB_TUNER_ITD1000=m
+-CONFIG_DVB_TDA826X=m
+-CONFIG_DVB_TUA6100=m
+-
+-#
+-# DVB-T (terrestrial) frontends
+-#
+-CONFIG_DVB_SP8870=m
+-CONFIG_DVB_SP887X=m
+-CONFIG_DVB_CX22700=m
+-CONFIG_DVB_CX22702=m
+-CONFIG_DVB_DRX397XD=m
+-CONFIG_DVB_L64781=m
+-CONFIG_DVB_TDA1004X=m
+-CONFIG_DVB_NXT6000=m
+-CONFIG_DVB_MT352=m
+-CONFIG_DVB_ZL10353=m
+-CONFIG_DVB_DIB3000MB=m
+-CONFIG_DVB_DIB3000MC=m
+-CONFIG_DVB_DIB7000M=m
+-CONFIG_DVB_DIB7000P=m
+-CONFIG_DVB_TDA10048=m
+-
+-#
+-# DVB-C (cable) frontends
+-#
+-CONFIG_DVB_VES1820=m
+-CONFIG_DVB_TDA10021=m
+-CONFIG_DVB_TDA10023=m
+-CONFIG_DVB_STV0297=m
+-
+-#
+-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+-#
+-CONFIG_DVB_NXT200X=m
+-CONFIG_DVB_OR51211=m
+-CONFIG_DVB_OR51132=m
+-CONFIG_DVB_BCM3510=m
+-CONFIG_DVB_LGDT330X=m
+-CONFIG_DVB_S5H1409=m
+-CONFIG_DVB_AU8522=m
+-CONFIG_DVB_S5H1411=m
+-
+-#
+-# Digital terrestrial only tuners/PLL
+-#
+-CONFIG_DVB_PLL=m
+-CONFIG_DVB_TUNER_DIB0070=m
+-
+-#
+-# SEC control devices for DVB-S
+-#
+-CONFIG_DVB_LNBP21=m
+-CONFIG_DVB_ISL6405=m
+-CONFIG_DVB_ISL6421=m
+-CONFIG_DAB=y
+-CONFIG_USB_DABUSB=m
+-
+-#
+-# Graphics support
+-#
+-CONFIG_AGP=y
+-CONFIG_AGP_AMD64=y
+-CONFIG_AGP_INTEL=m
+-CONFIG_AGP_SIS=m
+-CONFIG_AGP_VIA=m
+-CONFIG_DRM=m
+-CONFIG_DRM_TDFX=m
+-CONFIG_DRM_R128=m
+-CONFIG_DRM_RADEON=m
+-CONFIG_DRM_I810=m
+-# CONFIG_DRM_I830 is not set
+-CONFIG_DRM_I915=m
+-CONFIG_DRM_MGA=m
+-CONFIG_DRM_SIS=m
+-CONFIG_DRM_VIA=m
+-CONFIG_DRM_VIA_CHROME9=m
+-CONFIG_DRM_SAVAGE=m
+-CONFIG_VGASTATE=m
+-CONFIG_VIDEO_OUTPUT_CONTROL=m
+-CONFIG_FB=y
+-CONFIG_FIRMWARE_EDID=y
+-CONFIG_FB_DDC=m
+-CONFIG_FB_CFB_FILLRECT=y
+-CONFIG_FB_CFB_COPYAREA=y
+-CONFIG_FB_CFB_IMAGEBLIT=y
+-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+-CONFIG_FB_SYS_FILLRECT=m
+-CONFIG_FB_SYS_COPYAREA=m
+-CONFIG_FB_SYS_IMAGEBLIT=m
+-# CONFIG_FB_FOREIGN_ENDIAN is not set
+-CONFIG_FB_SYS_FOPS=m
+-CONFIG_FB_DEFERRED_IO=y
+-CONFIG_FB_HECUBA=m
+-CONFIG_FB_SVGALIB=m
+-# CONFIG_FB_MACMODES is not set
+-CONFIG_FB_BACKLIGHT=y
+-CONFIG_FB_MODE_HELPERS=y
+-CONFIG_FB_TILEBLITTING=y
+-
+-#
+-# Frame buffer hardware drivers
+-#
+-CONFIG_FB_CIRRUS=m
+-# CONFIG_FB_PM2 is not set
+-CONFIG_FB_CYBER2000=m
+-CONFIG_FB_ARC=m
+-# CONFIG_FB_ASILIANT is not set
+-# CONFIG_FB_IMSTT is not set
+-CONFIG_FB_VGA16=m
+-CONFIG_FB_UVESA=m
+-CONFIG_FB_VESA=y
+-CONFIG_FB_EFI=y
+-CONFIG_FB_IMAC=y
+-CONFIG_FB_N411=m
+-CONFIG_FB_HGA=m
+-CONFIG_FB_HGA_ACCEL=y
+-CONFIG_FB_S1D13XXX=m
+-CONFIG_FB_NVIDIA=m
+-CONFIG_FB_NVIDIA_I2C=y
+-# CONFIG_FB_NVIDIA_DEBUG is not set
+-CONFIG_FB_NVIDIA_BACKLIGHT=y
+-CONFIG_FB_RIVA=m
+-CONFIG_FB_RIVA_I2C=y
+-# CONFIG_FB_RIVA_DEBUG is not set
+-CONFIG_FB_RIVA_BACKLIGHT=y
+-CONFIG_FB_LE80578=m
+-CONFIG_FB_CARILLO_RANCH=m
+-CONFIG_FB_INTEL=m
+-# CONFIG_FB_INTEL_DEBUG is not set
+-CONFIG_FB_INTEL_I2C=y
+-CONFIG_FB_MATROX=m
+-CONFIG_FB_MATROX_MILLENIUM=y
+-CONFIG_FB_MATROX_MYSTIQUE=y
+-CONFIG_FB_MATROX_G=y
+-CONFIG_FB_MATROX_I2C=m
+-CONFIG_FB_MATROX_MAVEN=m
+-CONFIG_FB_MATROX_MULTIHEAD=y
+-CONFIG_FB_RADEON=m
+-CONFIG_FB_RADEON_I2C=y
+-CONFIG_FB_RADEON_BACKLIGHT=y
+-# CONFIG_FB_RADEON_DEBUG is not set
+-CONFIG_FB_ATY128=m
+-CONFIG_FB_ATY128_BACKLIGHT=y
+-CONFIG_FB_ATY=m
+-CONFIG_FB_ATY_CT=y
+-CONFIG_FB_ATY_GENERIC_LCD=y
+-CONFIG_FB_ATY_GX=y
+-CONFIG_FB_ATY_BACKLIGHT=y
+-# CONFIG_FB_S3 is not set
+-CONFIG_FB_SAVAGE=m
+-CONFIG_FB_SAVAGE_I2C=y
+-CONFIG_FB_SAVAGE_ACCEL=y
+-CONFIG_FB_SIS=m
+-CONFIG_FB_SIS_300=y
+-CONFIG_FB_SIS_315=y
+-CONFIG_FB_NEOMAGIC=m
+-CONFIG_FB_KYRO=m
+-CONFIG_FB_3DFX=m
+-CONFIG_FB_3DFX_ACCEL=y
+-CONFIG_FB_VOODOO1=m
+-CONFIG_FB_VT8623=m
+-CONFIG_FB_TRIDENT=m
+-CONFIG_FB_TRIDENT_ACCEL=y
+-CONFIG_FB_ARK=m
+-CONFIG_FB_PM3=m
+-CONFIG_FB_CARMINE=m
+-CONFIG_FB_CARMINE_DRAM_EVAL=y
+-# CONFIG_CARMINE_DRAM_CUSTOM is not set
+-CONFIG_FB_GEODE=y
+-CONFIG_FB_GEODE_LX=m
+-CONFIG_FB_GEODE_GX=m
+-CONFIG_FB_GEODE_GX1=m
+-CONFIG_FB_SM501=m
+-CONFIG_FB_VIRTUAL=m
+-CONFIG_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_LCD_CLASS_DEVICE=m
+-CONFIG_LCD_LTV350QV=m
+-CONFIG_LCD_ILI9320=m
+-CONFIG_LCD_VGG2432A4=m
+-CONFIG_LCD_PLATFORM=m
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+-CONFIG_BACKLIGHT_CORGI=m
+-CONFIG_BACKLIGHT_PROGEAR=m
+-CONFIG_BACKLIGHT_CARILLO_RANCH=m
+-CONFIG_BACKLIGHT_MBP_NVIDIA=m
+-
+-#
+-# Display device support
+-#
+-CONFIG_DISPLAY_SUPPORT=m
+-
+-#
+-# Display hardware drivers
+-#
+-
+-#
+-# Console display driver support
+-#
+-CONFIG_VGA_CONSOLE=y
+-CONFIG_VGACON_SOFT_SCROLLBACK=y
+-CONFIG_VGACON_SOFT_SCROLLBACK_SIZE=64
+-CONFIG_VIDEO_SELECT=y
+-CONFIG_DUMMY_CONSOLE=y
+-CONFIG_FRAMEBUFFER_CONSOLE=y
+-# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+-# CONFIG_FONTS is not set
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+-# CONFIG_LOGO is not set
+-
+-#
+-# Bootsplash configuration
+-#
+-CONFIG_BOOTSPLASH=y
+-CONFIG_SOUND=m
+-CONFIG_SND=m
+-CONFIG_SND_TIMER=m
+-CONFIG_SND_PCM=m
+-CONFIG_SND_HWDEP=m
+-CONFIG_SND_RAWMIDI=m
+-CONFIG_SND_SEQUENCER=m
+-CONFIG_SND_SEQ_DUMMY=m
+-CONFIG_SND_OSSEMUL=y
+-CONFIG_SND_MIXER_OSS=m
+-CONFIG_SND_PCM_OSS=m
+-CONFIG_SND_PCM_OSS_PLUGINS=y
+-CONFIG_SND_SEQUENCER_OSS=y
+-CONFIG_SND_DYNAMIC_MINORS=y
+-CONFIG_SND_SUPPORT_OLD_API=y
+-CONFIG_SND_VERBOSE_PROCFS=y
+-CONFIG_SND_VERBOSE_PRINTK=y
+-CONFIG_SND_DEBUG=y
+-# CONFIG_SND_DEBUG_VERBOSE is not set
+-# CONFIG_SND_PCM_XRUN_DEBUG is not set
+-CONFIG_SND_VMASTER=y
+-CONFIG_SND_MPU401_UART=m
+-CONFIG_SND_OPL3_LIB=m
+-CONFIG_SND_VX_LIB=m
+-CONFIG_SND_AC97_CODEC=m
+-CONFIG_SND_DRIVERS=y
+-# CONFIG_SND_PCSP is not set
+-CONFIG_SND_DUMMY=m
+-CONFIG_SND_VIRMIDI=m
+-CONFIG_SND_MTPAV=m
+-CONFIG_SND_MTS64=m
+-CONFIG_SND_SERIAL_U16550=m
+-CONFIG_SND_MPU401=m
+-CONFIG_SND_PORTMAN2X4=m
+-CONFIG_SND_AC97_POWER_SAVE=y
+-CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_SB_COMMON=m
+-CONFIG_SND_PCI=y
+-CONFIG_SND_AD1889=m
+-CONFIG_SND_ALS300=m
+-CONFIG_SND_ALS4000=m
+-CONFIG_SND_ALI5451=m
+-CONFIG_SND_ATIIXP=m
+-CONFIG_SND_ATIIXP_MODEM=m
+-CONFIG_SND_AU8810=m
+-CONFIG_SND_AU8820=m
+-CONFIG_SND_AU8830=m
+-CONFIG_SND_AW2=m
+-CONFIG_SND_AZT3328=m
+-CONFIG_SND_BT87X=m
+-# CONFIG_SND_BT87X_OVERCLOCK is not set
+-CONFIG_SND_CA0106=m
+-CONFIG_SND_CMIPCI=m
+-CONFIG_SND_OXYGEN_LIB=m
+-CONFIG_SND_OXYGEN=m
+-CONFIG_SND_CS4281=m
+-CONFIG_SND_CS46XX=m
+-CONFIG_SND_CS46XX_NEW_DSP=y
+-# CONFIG_SND_CS5530 is not set
+-CONFIG_SND_DARLA20=m
+-CONFIG_SND_GINA20=m
+-CONFIG_SND_LAYLA20=m
+-CONFIG_SND_DARLA24=m
+-CONFIG_SND_GINA24=m
+-CONFIG_SND_LAYLA24=m
+-CONFIG_SND_MONA=m
+-CONFIG_SND_MIA=m
+-CONFIG_SND_ECHO3G=m
+-CONFIG_SND_INDIGO=m
+-CONFIG_SND_INDIGOIO=m
+-CONFIG_SND_INDIGODJ=m
+-CONFIG_SND_EMU10K1=m
+-CONFIG_SND_EMU10K1X=m
+-CONFIG_SND_ENS1370=m
+-CONFIG_SND_ENS1371=m
+-CONFIG_SND_ES1938=m
+-CONFIG_SND_ES1968=m
+-CONFIG_SND_FM801=m
+-CONFIG_SND_FM801_TEA575X_BOOL=y
+-CONFIG_SND_FM801_TEA575X=m
+-CONFIG_SND_HDA_INTEL=m
+-CONFIG_SND_HDA_HWDEP=y
+-CONFIG_SND_HDA_INPUT_BEEP=y
+-CONFIG_SND_HDA_CODEC_REALTEK=y
+-CONFIG_SND_HDA_CODEC_ANALOG=y
+-CONFIG_SND_HDA_CODEC_SIGMATEL=y
+-CONFIG_SND_HDA_CODEC_VIA=y
+-CONFIG_SND_HDA_CODEC_ATIHDMI=y
+-CONFIG_SND_HDA_CODEC_NVHDMI=y
+-CONFIG_SND_HDA_CODEC_CONEXANT=y
+-CONFIG_SND_HDA_CODEC_CMEDIA=y
+-CONFIG_SND_HDA_CODEC_SI3054=y
+-CONFIG_SND_HDA_GENERIC=y
+-CONFIG_SND_HDA_POWER_SAVE=y
+-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+-CONFIG_SND_HDSP=m
+-CONFIG_SND_HDSPM=m
+-CONFIG_SND_HIFIER=m
+-CONFIG_SND_ICE1712=m
+-CONFIG_SND_ICE1724=m
+-CONFIG_SND_INTEL8X0=m
+-CONFIG_SND_INTEL8X0M=m
+-CONFIG_SND_KORG1212=m
+-CONFIG_SND_MAESTRO3=m
+-CONFIG_SND_MIXART=m
+-CONFIG_SND_NM256=m
+-CONFIG_SND_PCXHR=m
+-CONFIG_SND_RIPTIDE=m
+-CONFIG_SND_RME32=m
+-CONFIG_SND_RME96=m
+-CONFIG_SND_RME9652=m
+-CONFIG_SND_SONICVIBES=m
+-CONFIG_SND_TRIDENT=m
+-CONFIG_SND_VIA82XX=m
+-CONFIG_SND_VIA82XX_MODEM=m
+-CONFIG_SND_VIRTUOSO=m
+-CONFIG_SND_VX222=m
+-CONFIG_SND_YMFPCI=m
+-CONFIG_SND_SPI=y
+-CONFIG_SND_USB=y
+-CONFIG_SND_USB_AUDIO=m
+-CONFIG_SND_USB_USX2Y=m
+-CONFIG_SND_USB_CAIAQ=m
+-CONFIG_SND_USB_CAIAQ_INPUT=y
+-CONFIG_SND_PCMCIA=y
+-CONFIG_SND_VXPOCKET=m
+-CONFIG_SND_PDAUDIOCF=m
+-# CONFIG_SND_SOC is not set
+-CONFIG_SOUND_PRIME=m
+-CONFIG_SOUND_OSS=m
+-CONFIG_SOUND_TRACEINIT=y
+-CONFIG_SOUND_DMAP=y
+-CONFIG_SOUND_SSCAPE=m
+-CONFIG_SOUND_VMIDI=m
+-CONFIG_SOUND_TRIX=m
+-CONFIG_SOUND_MSS=m
+-CONFIG_SOUND_MPU401=m
+-CONFIG_SOUND_PAS=m
+-CONFIG_SOUND_PSS=m
+-CONFIG_PSS_MIXER=y
+-# CONFIG_PSS_HAVE_BOOT is not set
+-# CONFIG_SOUND_SB is not set
+-CONFIG_SOUND_YM3812=m
+-CONFIG_SOUND_UART6850=m
+-CONFIG_SOUND_AEDSP16=m
+-CONFIG_SC6600=y
+-CONFIG_SC6600_JOY=y
+-CONFIG_SC6600_CDROM=4
+-CONFIG_SC6600_CDROMBASE=0x0
+-CONFIG_AEDSP16_MSS=y
+-# CONFIG_AEDSP16_SBPRO is not set
+-CONFIG_AC97_BUS=m
+-CONFIG_HID_SUPPORT=y
+-CONFIG_HID=m
+-# CONFIG_HID_DEBUG is not set
+-CONFIG_HIDRAW=y
+-
+-#
+-# USB Input Devices
+-#
+-CONFIG_USB_HID=m
+-CONFIG_USB_HIDINPUT_POWERBOOK=y
+-CONFIG_HID_FF=y
+-CONFIG_HID_PID=y
+-CONFIG_LOGITECH_FF=y
+-# CONFIG_LOGIRUMBLEPAD2_FF is not set
+-CONFIG_PANTHERLORD_FF=y
+-CONFIG_THRUSTMASTER_FF=y
+-CONFIG_ZEROPLUS_FF=y
+-CONFIG_USB_HIDDEV=y
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
+-CONFIG_USB_SUPPORT=y
+-CONFIG_USB_ARCH_HAS_HCD=y
+-CONFIG_USB_ARCH_HAS_OHCI=y
+-CONFIG_USB_ARCH_HAS_EHCI=y
+-CONFIG_USB=m
+-# CONFIG_USB_DEBUG is not set
+-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+-
+-#
+-# Miscellaneous USB options
+-#
+-CONFIG_USB_DEVICEFS=y
+-# CONFIG_USB_DEVICE_CLASS is not set
+-# CONFIG_USB_DYNAMIC_MINORS is not set
+-CONFIG_USB_SUSPEND=y
+-# CONFIG_USB_OTG is not set
+-CONFIG_USB_MON=y
+-
+-#
+-# USB Host Controller Drivers
+-#
+-CONFIG_USB_C67X00_HCD=m
+-CONFIG_USB_EHCI_HCD=m
+-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+-CONFIG_USB_EHCI_TT_NEWSCHED=y
+-CONFIG_USB_ISP116X_HCD=m
+-CONFIG_USB_ISP1760_HCD=m
+-CONFIG_USB_OHCI_HCD=m
+-# CONFIG_USB_OHCI_HCD_SSB is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+-# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+-CONFIG_USB_UHCI_HCD=m
+-# CONFIG_USB_U132_HCD is not set
+-CONFIG_USB_SL811_HCD=m
+-CONFIG_USB_SL811_CS=m
+-CONFIG_USB_R8A66597_HCD=m
+-
+-#
+-# Enable Host or Gadget support to see Inventra options
+-#
+-
+-#
+-# USB Device Class drivers
+-#
+-CONFIG_USB_ACM=m
+-CONFIG_USB_PRINTER=m
+-CONFIG_USB_WDM=m
+-
+-#
+-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+-#
+-
+-#
+-# may also be needed; see USB_STORAGE Help for more information
+-#
+-CONFIG_USB_STORAGE=m
+-# CONFIG_USB_STORAGE_DEBUG is not set
+-CONFIG_USB_STORAGE_DATAFAB=y
+-CONFIG_USB_STORAGE_FREECOM=y
+-CONFIG_USB_STORAGE_ISD200=y
+-CONFIG_USB_STORAGE_DPCM=y
+-CONFIG_USB_STORAGE_USBAT=y
+-CONFIG_USB_STORAGE_SDDR09=y
+-CONFIG_USB_STORAGE_SDDR55=y
+-CONFIG_USB_STORAGE_JUMPSHOT=y
+-CONFIG_USB_STORAGE_ALAUDA=y
+-CONFIG_USB_STORAGE_ONETOUCH=y
+-CONFIG_USB_STORAGE_KARMA=y
+-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+-# CONFIG_USB_LIBUSUAL is not set
+-
+-#
+-# USB Imaging devices
+-#
+-CONFIG_USB_MDC800=m
+-CONFIG_USB_MICROTEK=m
+-
+-#
+-# USB port drivers
+-#
+-CONFIG_USB_USS720=m
+-CONFIG_USB_SERIAL=m
+-CONFIG_USB_EZUSB=y
+-CONFIG_USB_SERIAL_GENERIC=y
+-CONFIG_USB_SERIAL_AIRCABLE=m
+-CONFIG_USB_SERIAL_ARK3116=m
+-CONFIG_USB_SERIAL_BELKIN=m
+-CONFIG_USB_SERIAL_CH341=m
+-CONFIG_USB_SERIAL_WHITEHEAT=m
+-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+-CONFIG_USB_SERIAL_CP2101=m
+-CONFIG_USB_SERIAL_CYPRESS_M8=m
+-CONFIG_USB_SERIAL_EMPEG=m
+-CONFIG_USB_SERIAL_FTDI_SIO=m
+-CONFIG_USB_SERIAL_FUNSOFT=m
+-CONFIG_USB_SERIAL_VISOR=m
+-CONFIG_USB_SERIAL_IPAQ=m
+-CONFIG_USB_SERIAL_IR=m
+-CONFIG_USB_SERIAL_EDGEPORT=m
+-CONFIG_USB_SERIAL_EDGEPORT_TI=m
+-CONFIG_USB_SERIAL_GARMIN=m
+-CONFIG_USB_SERIAL_IPW=m
+-CONFIG_USB_SERIAL_IUU=m
+-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+-CONFIG_USB_SERIAL_KEYSPAN=m
+-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
+-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
+-CONFIG_USB_SERIAL_KLSI=m
+-CONFIG_USB_SERIAL_KOBIL_SCT=m
+-CONFIG_USB_SERIAL_MCT_U232=m
+-CONFIG_USB_SERIAL_MOS7720=m
+-CONFIG_USB_SERIAL_MOS7840=m
+-CONFIG_USB_SERIAL_MOTOROLA=m
+-CONFIG_USB_SERIAL_NAVMAN=m
+-CONFIG_USB_SERIAL_PL2303=m
+-CONFIG_USB_SERIAL_OTI6858=m
+-CONFIG_USB_SERIAL_QUALCOMM=m
+-CONFIG_USB_SERIAL_SPCP8X5=m
+-CONFIG_USB_SERIAL_HP4X=m
+-CONFIG_USB_SERIAL_SAFE=m
+-CONFIG_USB_SERIAL_SAFE_PADDED=y
+-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+-CONFIG_USB_SERIAL_TI=m
+-CONFIG_USB_SERIAL_CYBERJACK=m
+-CONFIG_USB_SERIAL_XIRCOM=m
+-CONFIG_USB_SERIAL_OPTION=m
+-CONFIG_USB_SERIAL_OMNINET=m
+-CONFIG_USB_SERIAL_DEBUG=m
+-
+-#
+-# USB Miscellaneous drivers
+-#
+-CONFIG_USB_EMI62=m
+-CONFIG_USB_EMI26=m
+-CONFIG_USB_ADUTUX=m
+-CONFIG_USB_RIO500=m
+-CONFIG_USB_LEGOTOWER=m
+-CONFIG_USB_LCD=m
+-CONFIG_USB_BERRY_CHARGE=m
+-CONFIG_USB_LED=m
+-CONFIG_USB_CYPRESS_CY7C63=m
+-CONFIG_USB_CYTHERM=m
+-CONFIG_USB_PHIDGET=m
+-CONFIG_USB_PHIDGETKIT=m
+-CONFIG_USB_PHIDGETMOTORCONTROL=m
+-CONFIG_USB_PHIDGETSERVO=m
+-CONFIG_USB_IDMOUSE=m
+-CONFIG_USB_FTDI_ELAN=m
+-CONFIG_USB_APPLEDISPLAY=m
+-CONFIG_USB_SISUSBVGA=m
+-CONFIG_USB_SISUSBVGA_CON=y
+-CONFIG_USB_LD=m
+-CONFIG_USB_TRANCEVIBRATOR=m
+-CONFIG_USB_IOWARRIOR=m
+-# CONFIG_USB_TEST is not set
+-CONFIG_USB_ISIGHTFW=m
+-CONFIG_USB_ATM=m
+-CONFIG_USB_SPEEDTOUCH=m
+-CONFIG_USB_CXACRU=m
+-CONFIG_USB_UEAGLEATM=m
+-CONFIG_USB_XUSBATM=m
+-# CONFIG_USB_GADGET is not set
+-CONFIG_MMC=m
+-# CONFIG_MMC_DEBUG is not set
+-# CONFIG_MMC_UNSAFE_RESUME is not set
+-
+-#
+-# MMC/SD Card Drivers
+-#
+-CONFIG_MMC_BLOCK=m
+-CONFIG_MMC_BLOCK_BOUNCE=y
+-CONFIG_SDIO_UART=m
+-CONFIG_MMC_TEST=m
+-
+-#
+-# MMC/SD Host Controller Drivers
+-#
+-CONFIG_MMC_SDHCI=m
+-CONFIG_MMC_SDHCI_PCI=m
+-CONFIG_MMC_RICOH_MMC=m
+-CONFIG_MMC_WBSD=m
+-CONFIG_MMC_TIFM_SD=m
+-CONFIG_MMC_SPI=m
+-CONFIG_MMC_SDRICOH_CS=m
+-CONFIG_MEMSTICK=m
+-# CONFIG_MEMSTICK_DEBUG is not set
+-
+-#
+-# MemoryStick drivers
+-#
+-# CONFIG_MEMSTICK_UNSAFE_RESUME is not set
+-CONFIG_MSPRO_BLOCK=m
+-
+-#
+-# MemoryStick Host Controller Drivers
+-#
+-CONFIG_MEMSTICK_TIFM_MS=m
+-CONFIG_MEMSTICK_JMICRON_38X=m
+-CONFIG_NEW_LEDS=y
+-CONFIG_LEDS_CLASS=m
+-
+-#
+-# LED drivers
+-#
+-CONFIG_LEDS_PCA9532=m
+-CONFIG_LEDS_GPIO=m
+-CONFIG_LEDS_CLEVO_MAIL=m
+-CONFIG_LEDS_PCA955X=m
+-
+-#
+-# LED Triggers
+-#
+-CONFIG_LEDS_TRIGGERS=y
+-CONFIG_LEDS_TRIGGER_TIMER=m
+-CONFIG_LEDS_TRIGGER_IDE_DISK=y
+-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+-# CONFIG_ACCESSIBILITY is not set
+-CONFIG_INFINIBAND=m
+-CONFIG_INFINIBAND_USER_MAD=m
+-CONFIG_INFINIBAND_USER_ACCESS=m
+-CONFIG_INFINIBAND_USER_MEM=y
+-CONFIG_INFINIBAND_ADDR_TRANS=y
+-CONFIG_INFINIBAND_MTHCA=m
+-CONFIG_INFINIBAND_MTHCA_DEBUG=y
+-CONFIG_INFINIBAND_IPATH=m
+-CONFIG_INFINIBAND_AMSO1100=m
+-# CONFIG_INFINIBAND_AMSO1100_DEBUG is not set
+-CONFIG_INFINIBAND_CXGB3=m
+-# CONFIG_INFINIBAND_CXGB3_DEBUG is not set
+-CONFIG_MLX4_INFINIBAND=m
+-CONFIG_INFINIBAND_NES=m
+-# CONFIG_INFINIBAND_NES_DEBUG is not set
+-CONFIG_INFINIBAND_IPOIB=m
+-CONFIG_INFINIBAND_IPOIB_CM=y
+-CONFIG_INFINIBAND_IPOIB_DEBUG=y
+-# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
+-CONFIG_INFINIBAND_SRP=m
+-CONFIG_INFINIBAND_ISER=m
+-CONFIG_EDAC=y
+-
+-#
+-# Reporting subsystems
+-#
+-# CONFIG_EDAC_DEBUG is not set
+-CONFIG_EDAC_MM_EDAC=m
+-CONFIG_EDAC_E752X=m
+-CONFIG_EDAC_I82975X=m
+-CONFIG_EDAC_I3000=m
+-CONFIG_EDAC_I5000=m
+-CONFIG_EDAC_I5100=m
+-CONFIG_RTC_LIB=m
+-CONFIG_RTC_CLASS=m
+-
+-#
+-# RTC interfaces
+-#
+-CONFIG_RTC_INTF_SYSFS=y
+-CONFIG_RTC_INTF_PROC=y
+-CONFIG_RTC_INTF_DEV=y
+-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+-CONFIG_RTC_DRV_TEST=m
+-
+-#
+-# I2C RTC drivers
+-#
+-CONFIG_RTC_DRV_DS1307=m
+-CONFIG_RTC_DRV_DS1374=m
+-CONFIG_RTC_DRV_DS1672=m
+-CONFIG_RTC_DRV_MAX6900=m
+-CONFIG_RTC_DRV_RS5C372=m
+-CONFIG_RTC_DRV_ISL1208=m
+-CONFIG_RTC_DRV_X1205=m
+-CONFIG_RTC_DRV_PCF8563=m
+-CONFIG_RTC_DRV_PCF8583=m
+-CONFIG_RTC_DRV_M41T80=m
+-CONFIG_RTC_DRV_M41T80_WDT=y
+-CONFIG_RTC_DRV_S35390A=m
+-CONFIG_RTC_DRV_FM3130=m
+-
+-#
+-# SPI RTC drivers
+-#
+-CONFIG_RTC_DRV_M41T94=m
+-CONFIG_RTC_DRV_DS1305=m
+-CONFIG_RTC_DRV_MAX6902=m
+-CONFIG_RTC_DRV_R9701=m
+-CONFIG_RTC_DRV_RS5C348=m
+-
+-#
+-# Platform RTC drivers
+-#
+-CONFIG_RTC_DRV_CMOS=m
+-CONFIG_RTC_DRV_DS1511=m
+-CONFIG_RTC_DRV_DS1553=m
+-CONFIG_RTC_DRV_DS1742=m
+-CONFIG_RTC_DRV_STK17TA8=m
+-CONFIG_RTC_DRV_M48T86=m
+-CONFIG_RTC_DRV_M48T59=m
+-CONFIG_RTC_DRV_V3020=m
+-
+-#
+-# on-CPU RTC drivers
+-#
+-CONFIG_DMADEVICES=y
+-
+-#
+-# DMA Devices
+-#
+-CONFIG_INTEL_IOATDMA=m
+-CONFIG_DMA_ENGINE=y
+-
+-#
+-# DMA Clients
+-#
+-CONFIG_NET_DMA=y
+-CONFIG_DMATEST=m
+-CONFIG_DCA=m
+-CONFIG_AUXDISPLAY=y
+-# CONFIG_KS0108 is not set
+-CONFIG_UIO=m
+-CONFIG_UIO_CIF=m
+-CONFIG_UIO_PDRV=m
+-CONFIG_UIO_PDRV_GENIRQ=m
+-CONFIG_UIO_SMX=m
+-CONFIG_STAGING=y
+-CONFIG_ET131X=m
+-# CONFIG_ET131X_DEBUG is not set
+-CONFIG_SLICOSS=m
+-CONFIG_SXG=m
+-CONFIG_ME4000=m
+-CONFIG_VIDEO_GO7007=m
+-CONFIG_VIDEO_GO7007_USB=m
+-CONFIG_USB_IP_COMMON=m
+-CONFIG_USB_IP_VHCI_HCD=m
+-CONFIG_USB_IP_HOST=m
+-CONFIG_W35UND=m
+-CONFIG_PRISM2_USB=m
+-CONFIG_ECHO=m
+-CONFIG_USB_ATMEL=m
+-CONFIG_AGNX=m
+-CONFIG_OTUS=m
+-CONFIG_RT2860=m
+-CONFIG_RT2870=m
+-CONFIG_RT3070=m
+-CONFIG_BENET=m
+-CONFIG_RTL8187SE=m
+-CONFIG_DRM_PSB=m
+-
+-#
+-# Firmware Drivers
+-#
+-CONFIG_EDD=m
+-# CONFIG_EDD_OFF is not set
+-CONFIG_FIRMWARE_MEMMAP=y
+-CONFIG_EFI_VARS=m
+-CONFIG_DELL_RBU=m
+-CONFIG_DCDBAS=m
+-CONFIG_DMIID=y
+-CONFIG_ISCSI_IBFT_FIND=y
+-CONFIG_ISCSI_IBFT=m
+-
+-#
+-# File systems
+-#
+-CONFIG_EXT2_FS=m
+-CONFIG_EXT2_FS_XATTR=y
+-CONFIG_EXT2_FS_POSIX_ACL=y
+-CONFIG_EXT2_FS_SECURITY=y
+-# CONFIG_EXT2_FS_XIP is not set
+-CONFIG_EXT3_FS=m
+-CONFIG_EXT3_FS_XATTR=y
+-CONFIG_EXT3_FS_POSIX_ACL=y
+-CONFIG_EXT3_FS_NFS4ACL=y
+-CONFIG_EXT3_FS_SECURITY=y
+-CONFIG_EXT4DEV_FS=m
+-CONFIG_EXT4DEV_FS_XATTR=y
+-CONFIG_EXT4DEV_FS_POSIX_ACL=y
+-CONFIG_EXT4DEV_FS_SECURITY=y
+-CONFIG_JBD=m
+-CONFIG_JBD_DEBUG=y
+-CONFIG_JBD2=m
+-CONFIG_JBD2_DEBUG=y
+-CONFIG_FS_MBCACHE=m
+-CONFIG_REISERFS_FS=m
+-# CONFIG_REISERFS_CHECK is not set
+-# CONFIG_REISERFS_PROC_INFO is not set
+-CONFIG_REISERFS_FS_XATTR=y
+-CONFIG_REISERFS_FS_POSIX_ACL=y
+-CONFIG_REISERFS_FS_SECURITY=y
+-CONFIG_JFS_FS=m
+-CONFIG_JFS_POSIX_ACL=y
+-CONFIG_JFS_SECURITY=y
+-# CONFIG_JFS_DEBUG is not set
+-CONFIG_JFS_STATISTICS=y
+-CONFIG_FS_POSIX_ACL=y
+-CONFIG_FS_NFS4ACL=y
+-CONFIG_XFS_FS=m
+-CONFIG_XFS_QUOTA=y
+-CONFIG_XFS_DMAPI=m
+-CONFIG_XFS_POSIX_ACL=y
+-CONFIG_XFS_RT=y
+-# CONFIG_XFS_DEBUG is not set
+-CONFIG_GFS2_FS=m
+-CONFIG_GFS2_FS_LOCKING_DLM=m
+-CONFIG_OCFS2_FS=m
+-CONFIG_OCFS2_FS_O2CB=m
+-CONFIG_OCFS2_FS_USERSPACE_CLUSTER=m
+-CONFIG_OCFS2_FS_STATS=y
+-# CONFIG_OCFS2_DEBUG_MASKLOG is not set
+-# CONFIG_OCFS2_DEBUG_FS is not set
+-# CONFIG_OCFS2_COMPAT_JBD is not set
+-CONFIG_DNOTIFY=y
+-CONFIG_INOTIFY=y
+-CONFIG_INOTIFY_USER=y
+-CONFIG_DMAPI=m
+-# CONFIG_DMAPI_DEBUG is not set
+-CONFIG_QUOTA=y
+-CONFIG_QUOTA_NETLINK_INTERFACE=y
+-CONFIG_PRINT_QUOTA_WARNING=y
+-CONFIG_QUOTA_TREE=m
+-CONFIG_QFMT_V1=m
+-CONFIG_QFMT_V2=m
+-CONFIG_QUOTACTL=y
+-CONFIG_AUTOFS_FS=m
+-CONFIG_AUTOFS4_FS=m
+-CONFIG_FUSE_FS=m
+-CONFIG_GENERIC_ACL=y
+-
+-#
+-# CD-ROM/DVD Filesystems
+-#
+-CONFIG_ISO9660_FS=y
+-CONFIG_JOLIET=y
+-CONFIG_ZISOFS=y
+-CONFIG_UDF_FS=m
+-CONFIG_UDF_NLS=y
+-
+-#
+-# DOS/FAT/NT Filesystems
+-#
+-CONFIG_FAT_FS=m
+-CONFIG_MSDOS_FS=m
+-CONFIG_VFAT_FS=m
+-CONFIG_FAT_DEFAULT_CODEPAGE=437
+-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+-CONFIG_NTFS_FS=m
+-# CONFIG_NTFS_DEBUG is not set
+-CONFIG_NTFS_RW=y
+-
+-#
+-# Pseudo filesystems
+-#
+-CONFIG_PROC_FS=y
+-CONFIG_PROC_KCORE=y
+-CONFIG_PROC_VMCORE=y
+-CONFIG_PROC_SYSCTL=y
+-CONFIG_SYSFS=y
+-CONFIG_TMPFS=y
+-CONFIG_TMPFS_POSIX_ACL=y
+-CONFIG_HUGETLBFS=y
+-CONFIG_HUGETLB_PAGE=y
+-CONFIG_CONFIGFS_FS=m
+-
+-#
+-# Miscellaneous filesystems
+-#
+-CONFIG_ADFS_FS=m
+-# CONFIG_ADFS_FS_RW is not set
+-CONFIG_AFFS_FS=m
+-CONFIG_ECRYPT_FS=m
+-CONFIG_HFS_FS=m
+-CONFIG_HFSPLUS_FS=m
+-CONFIG_BEFS_FS=m
+-# CONFIG_BEFS_DEBUG is not set
+-CONFIG_BFS_FS=m
+-CONFIG_EFS_FS=m
+-CONFIG_JFFS2_FS=m
+-CONFIG_JFFS2_FS_DEBUG=0
+-CONFIG_JFFS2_FS_WRITEBUFFER=y
+-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+-CONFIG_JFFS2_SUMMARY=y
+-CONFIG_JFFS2_FS_XATTR=y
+-CONFIG_JFFS2_FS_POSIX_ACL=y
+-CONFIG_JFFS2_FS_SECURITY=y
+-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+-CONFIG_JFFS2_ZLIB=y
+-# CONFIG_JFFS2_LZO is not set
+-CONFIG_JFFS2_RTIME=y
+-# CONFIG_JFFS2_RUBIN is not set
+-# CONFIG_JFFS2_CMODE_NONE is not set
+-CONFIG_JFFS2_CMODE_PRIORITY=y
+-# CONFIG_JFFS2_CMODE_SIZE is not set
+-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+-CONFIG_UBIFS_FS=m
+-CONFIG_UBIFS_FS_XATTR=y
+-CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+-CONFIG_UBIFS_FS_LZO=y
+-CONFIG_UBIFS_FS_ZLIB=y
+-# CONFIG_UBIFS_FS_DEBUG is not set
+-CONFIG_CRAMFS=m
+-CONFIG_SQUASHFS=m
+-# CONFIG_SQUASHFS_EMBEDDED is not set
+-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+-CONFIG_VXFS_FS=m
+-CONFIG_MINIX_FS=y
+-CONFIG_OMFS_FS=m
+-CONFIG_HPFS_FS=m
+-CONFIG_QNX4FS_FS=m
+-CONFIG_ROMFS_FS=m
+-CONFIG_SYSV_FS=m
+-CONFIG_UFS_FS=m
+-CONFIG_UFS_FS_WRITE=y
+-# CONFIG_UFS_DEBUG is not set
+-CONFIG_NETWORK_FILESYSTEMS=y
+-CONFIG_NFS_FS=m
+-CONFIG_NFS_V3=y
+-CONFIG_NFS_V3_ACL=y
+-CONFIG_NFS_V4=y
+-CONFIG_NFS_SWAP=y
+-CONFIG_NFSD=m
+-CONFIG_NFSD_V2_ACL=y
+-CONFIG_NFSD_V3=y
+-CONFIG_NFSD_V3_ACL=y
+-CONFIG_NFSD_V4=y
+-CONFIG_LOCKD=m
+-CONFIG_LOCKD_V4=y
+-CONFIG_EXPORTFS=m
+-CONFIG_NFS_ACL_SUPPORT=m
+-CONFIG_NFS_COMMON=y
+-CONFIG_SUNRPC=m
+-CONFIG_SUNRPC_GSS=m
+-CONFIG_SUNRPC_XPRT_RDMA=m
+-CONFIG_SUNRPC_SWAP=y
+-CONFIG_RPCSEC_GSS_KRB5=m
+-CONFIG_RPCSEC_GSS_SPKM3=m
+-# CONFIG_SMB_FS is not set
+-CONFIG_CIFS=m
+-CONFIG_CIFS_STATS=y
+-CONFIG_CIFS_STATS2=y
+-CONFIG_CIFS_WEAK_PW_HASH=y
+-CONFIG_CIFS_UPCALL=y
+-CONFIG_CIFS_XATTR=y
+-CONFIG_CIFS_POSIX=y
+-# CONFIG_CIFS_DEBUG2 is not set
+-CONFIG_CIFS_EXPERIMENTAL=y
+-CONFIG_CIFS_DFS_UPCALL=y
+-CONFIG_NCP_FS=m
+-CONFIG_NCPFS_PACKET_SIGNING=y
+-CONFIG_NCPFS_IOCTL_LOCKING=y
+-CONFIG_NCPFS_STRONG=y
+-CONFIG_NCPFS_NFS_NS=y
+-CONFIG_NCPFS_OS2_NS=y
+-CONFIG_NCPFS_SMALLDOS=y
+-CONFIG_NCPFS_NLS=y
+-CONFIG_NCPFS_EXTRAS=y
+-CONFIG_CODA_FS=m
+-CONFIG_AFS_FS=m
+-# CONFIG_AFS_DEBUG is not set
+-CONFIG_9P_FS=m
+-CONFIG_NOVFS=m
+-
+-#
+-# Partition Types
+-#
+-CONFIG_PARTITION_ADVANCED=y
+-# CONFIG_ACORN_PARTITION is not set
+-CONFIG_OSF_PARTITION=y
+-# CONFIG_AMIGA_PARTITION is not set
+-CONFIG_ATARI_PARTITION=y
+-CONFIG_MAC_PARTITION=y
+-CONFIG_MSDOS_PARTITION=y
+-CONFIG_BSD_DISKLABEL=y
+-# CONFIG_MINIX_SUBPARTITION is not set
+-CONFIG_SOLARIS_X86_PARTITION=y
+-CONFIG_UNIXWARE_DISKLABEL=y
+-CONFIG_LDM_PARTITION=y
+-# CONFIG_LDM_DEBUG is not set
+-CONFIG_SGI_PARTITION=y
+-CONFIG_ULTRIX_PARTITION=y
+-CONFIG_SUN_PARTITION=y
+-CONFIG_KARMA_PARTITION=y
+-CONFIG_EFI_PARTITION=y
+-CONFIG_SYSV68_PARTITION=y
+-CONFIG_NLS=y
+-CONFIG_NLS_DEFAULT="utf8"
+-CONFIG_NLS_CODEPAGE_437=m
+-CONFIG_NLS_CODEPAGE_737=m
+-CONFIG_NLS_CODEPAGE_775=m
+-CONFIG_NLS_CODEPAGE_850=m
+-CONFIG_NLS_CODEPAGE_852=m
+-CONFIG_NLS_CODEPAGE_855=m
+-CONFIG_NLS_CODEPAGE_857=m
+-CONFIG_NLS_CODEPAGE_860=m
+-CONFIG_NLS_CODEPAGE_861=m
+-CONFIG_NLS_CODEPAGE_862=m
+-CONFIG_NLS_CODEPAGE_863=m
+-CONFIG_NLS_CODEPAGE_864=m
+-CONFIG_NLS_CODEPAGE_865=m
+-CONFIG_NLS_CODEPAGE_866=m
+-CONFIG_NLS_CODEPAGE_869=m
+-CONFIG_NLS_CODEPAGE_936=m
+-CONFIG_NLS_CODEPAGE_950=m
+-CONFIG_NLS_CODEPAGE_932=m
+-CONFIG_NLS_CODEPAGE_949=m
+-CONFIG_NLS_CODEPAGE_874=m
+-CONFIG_NLS_ISO8859_8=m
+-CONFIG_NLS_CODEPAGE_1250=m
+-CONFIG_NLS_CODEPAGE_1251=m
+-CONFIG_NLS_ASCII=m
+-CONFIG_NLS_ISO8859_1=m
+-CONFIG_NLS_ISO8859_2=m
+-CONFIG_NLS_ISO8859_3=m
+-CONFIG_NLS_ISO8859_4=m
+-CONFIG_NLS_ISO8859_5=m
+-CONFIG_NLS_ISO8859_6=m
+-CONFIG_NLS_ISO8859_7=m
+-CONFIG_NLS_ISO8859_9=m
+-CONFIG_NLS_ISO8859_13=m
+-CONFIG_NLS_ISO8859_14=m
+-CONFIG_NLS_ISO8859_15=m
+-CONFIG_NLS_KOI8_R=m
+-CONFIG_NLS_KOI8_U=m
+-CONFIG_NLS_UTF8=m
+-CONFIG_DLM=m
+-# CONFIG_DLM_DEBUG is not set
+-
+-#
+-# Kernel hacking
+-#
+-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+-# CONFIG_PRINTK_TIME is not set
+-CONFIG_ENABLE_WARN_DEPRECATED=y
+-# CONFIG_ENABLE_MUST_CHECK is not set
+-CONFIG_FRAME_WARN=1024
+-CONFIG_MAGIC_SYSRQ=y
+-CONFIG_UNUSED_SYMBOLS=y
+-CONFIG_DEBUG_FS=y
+-# CONFIG_HEADERS_CHECK is not set
+-CONFIG_DEBUG_KERNEL=y
+-# CONFIG_DEBUG_SHIRQ is not set
+-# CONFIG_DETECT_SOFTLOCKUP is not set
+-CONFIG_SCHED_DEBUG=y
+-CONFIG_SCHEDSTATS=y
+-CONFIG_TIMER_STATS=y
+-# CONFIG_DEBUG_OBJECTS is not set
+-# CONFIG_DEBUG_SLAB is not set
+-# CONFIG_DEBUG_RT_MUTEXES is not set
+-# CONFIG_RT_MUTEX_TESTER is not set
+-# CONFIG_DEBUG_SPINLOCK is not set
+-# CONFIG_DEBUG_MUTEXES is not set
+-# CONFIG_DEBUG_LOCK_ALLOC is not set
+-# CONFIG_PROVE_LOCKING is not set
+-# CONFIG_LOCK_STAT is not set
+-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+-CONFIG_STACKTRACE=y
+-# CONFIG_DEBUG_KOBJECT is not set
+-CONFIG_DEBUG_BUGVERBOSE=y
+-CONFIG_DEBUG_INFO=y
+-# CONFIG_DEBUG_VM is not set
+-# CONFIG_DEBUG_WRITECOUNT is not set
+-CONFIG_DEBUG_MEMORY_INIT=y
+-# CONFIG_DEBUG_LIST is not set
+-# CONFIG_DEBUG_SG is not set
+-# CONFIG_FRAME_POINTER is not set
+-CONFIG_UNWIND_INFO=y
+-CONFIG_STACK_UNWIND=y
+-# CONFIG_BOOT_PRINTK_DELAY is not set
+-CONFIG_RCU_TORTURE_TEST=m
+-# CONFIG_KPROBES_SANITY_TEST is not set
+-CONFIG_BACKTRACE_SELF_TEST=m
+-CONFIG_LKDTM=m
+-# CONFIG_FAULT_INJECTION is not set
+-CONFIG_LATENCYTOP=y
+-CONFIG_SYSCTL_SYSCALL_CHECK=y
+-CONFIG_HAVE_FTRACE=y
+-CONFIG_HAVE_DYNAMIC_FTRACE=y
+-# CONFIG_FTRACE is not set
+-# CONFIG_IRQSOFF_TRACER is not set
+-# CONFIG_SYSPROF_TRACER is not set
+-# CONFIG_SCHED_TRACER is not set
+-# CONFIG_CONTEXT_SWITCH_TRACER is not set
+-CONFIG_PROVIDE_OHCI1394_DMA_INIT=y
+-CONFIG_DYNAMIC_PRINTK_DEBUG=y
+-# CONFIG_SAMPLES is not set
+-CONFIG_HAVE_ARCH_KGDB=y
+-# CONFIG_KGDB is not set
+-# CONFIG_STRICT_DEVMEM is not set
+-# CONFIG_X86_VERBOSE_BOOTUP is not set
+-CONFIG_EARLY_PRINTK=y
+-CONFIG_EARLY_PRINTK_DBGP=y
+-# CONFIG_DEBUG_STACKOVERFLOW is not set
+-# CONFIG_DEBUG_STACK_USAGE is not set
+-# CONFIG_DEBUG_PAGEALLOC is not set
+-# CONFIG_DEBUG_PER_CPU_MAPS is not set
+-# CONFIG_X86_PTDUMP is not set
+-CONFIG_DEBUG_RODATA=y
+-# CONFIG_DEBUG_RODATA_TEST is not set
+-# CONFIG_DEBUG_NX_TEST is not set
+-# CONFIG_IOMMU_DEBUG is not set
+-# CONFIG_MMIOTRACE is not set
+-CONFIG_IO_DELAY_TYPE_0X80=0
+-CONFIG_IO_DELAY_TYPE_0XED=1
+-CONFIG_IO_DELAY_TYPE_UDELAY=2
+-CONFIG_IO_DELAY_TYPE_NONE=3
+-CONFIG_IO_DELAY_0X80=y
+-# CONFIG_IO_DELAY_0XED is not set
+-# CONFIG_IO_DELAY_UDELAY is not set
+-# CONFIG_IO_DELAY_NONE is not set
+-CONFIG_DEFAULT_IO_DELAY_TYPE=0
+-# CONFIG_DEBUG_BOOT_PARAMS is not set
+-# CONFIG_CPA_DEBUG is not set
+-# CONFIG_OPTIMIZE_INLINING is not set
+-CONFIG_KDB=y
+-CONFIG_KDB_MODULES=m
+-CONFIG_KDB_OFF=y
+-CONFIG_KDB_CONTINUE_CATASTROPHIC=0
+-CONFIG_KDB_USB=y
+-CONFIG_KDB_KDUMP=y
+-
+-#
+-# Security options
+-#
+-CONFIG_KEYS=y
+-CONFIG_KEYS_DEBUG_PROC_KEYS=y
+-CONFIG_SECURITY=y
+-CONFIG_SECURITY_DEFAULT="apparmor"
+-CONFIG_SECURITY_NETWORK=y
+-# CONFIG_SECURITY_NETWORK_XFRM is not set
+-CONFIG_SECURITY_FILE_CAPABILITIES=y
+-CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
+-CONFIG_SECURITY_SELINUX=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
+-CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
+-CONFIG_SECURITY_SELINUX_DISABLE=y
+-CONFIG_SECURITY_SELINUX_DEVELOP=y
+-CONFIG_SECURITY_SELINUX_AVC_STATS=y
+-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
+-CONFIG_SECURITY_SELINUX_ENABLE_SECMARK_DEFAULT=y
+-# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
+-CONFIG_SECURITY_APPARMOR=y
+-CONFIG_SECURITY_APPARMOR_BOOTPARAM_VALUE=1
+-CONFIG_SECURITY_APPARMOR_DISABLE=y
+-CONFIG_XOR_BLOCKS=m
+-CONFIG_ASYNC_CORE=m
+-CONFIG_ASYNC_MEMCPY=m
+-CONFIG_ASYNC_XOR=m
+-CONFIG_CRYPTO=y
+-
+-#
+-# Crypto core or helper
+-#
+-CONFIG_CRYPTO_ALGAPI=y
+-CONFIG_CRYPTO_AEAD=m
+-CONFIG_CRYPTO_BLKCIPHER=m
+-CONFIG_CRYPTO_HASH=y
+-CONFIG_CRYPTO_MANAGER=y
+-CONFIG_CRYPTO_GF128MUL=m
+-CONFIG_CRYPTO_NULL=m
+-CONFIG_CRYPTO_CRYPTD=m
+-CONFIG_CRYPTO_AUTHENC=m
+-CONFIG_CRYPTO_TEST=m
+-
+-#
+-# Authenticated Encryption with Associated Data
+-#
+-CONFIG_CRYPTO_CCM=m
+-CONFIG_CRYPTO_GCM=m
+-CONFIG_CRYPTO_SEQIV=m
+-
+-#
+-# Block modes
+-#
+-CONFIG_CRYPTO_CBC=m
+-CONFIG_CRYPTO_CTR=m
+-CONFIG_CRYPTO_CTS=m
+-CONFIG_CRYPTO_ECB=m
+-CONFIG_CRYPTO_LRW=m
+-CONFIG_CRYPTO_PCBC=m
+-CONFIG_CRYPTO_XTS=m
+-
+-#
+-# Hash modes
+-#
+-CONFIG_CRYPTO_HMAC=y
+-CONFIG_CRYPTO_XCBC=m
+-
+-#
+-# Digest
+-#
+-CONFIG_CRYPTO_CRC32C=m
+-CONFIG_CRYPTO_MD4=m
+-CONFIG_CRYPTO_MD5=m
+-CONFIG_CRYPTO_MICHAEL_MIC=m
+-CONFIG_CRYPTO_RMD128=m
+-CONFIG_CRYPTO_RMD160=m
+-CONFIG_CRYPTO_RMD256=m
+-CONFIG_CRYPTO_RMD320=m
+-CONFIG_CRYPTO_SHA1=m
+-CONFIG_CRYPTO_SHA256=m
+-CONFIG_CRYPTO_SHA512=m
+-CONFIG_CRYPTO_TGR192=m
+-CONFIG_CRYPTO_WP512=m
+-
+-#
+-# Ciphers
+-#
+-CONFIG_CRYPTO_AES=m
+-CONFIG_CRYPTO_AES_X86_64=m
+-CONFIG_CRYPTO_ANUBIS=m
+-CONFIG_CRYPTO_ARC4=m
+-CONFIG_CRYPTO_BLOWFISH=m
+-CONFIG_CRYPTO_CAMELLIA=m
+-CONFIG_CRYPTO_CAST5=m
+-CONFIG_CRYPTO_CAST6=m
+-CONFIG_CRYPTO_DES=m
+-CONFIG_CRYPTO_FCRYPT=m
+-CONFIG_CRYPTO_KHAZAD=m
+-CONFIG_CRYPTO_SALSA20=m
+-CONFIG_CRYPTO_SALSA20_X86_64=m
+-CONFIG_CRYPTO_SEED=m
+-CONFIG_CRYPTO_SERPENT=m
+-CONFIG_CRYPTO_TEA=m
+-# CONFIG_CRYPTO_TWOFISH is not set
+-CONFIG_CRYPTO_TWOFISH_COMMON=m
+-CONFIG_CRYPTO_TWOFISH_X86_64=m
+-
+-#
+-# Compression
+-#
+-CONFIG_CRYPTO_DEFLATE=m
+-CONFIG_CRYPTO_LZO=m
+-CONFIG_CRYPTO_HW=y
+-CONFIG_CRYPTO_DEV_HIFN_795X=m
+-CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y
+-CONFIG_HAVE_KVM=y
+-CONFIG_VIRTUALIZATION=y
+-CONFIG_KVM_KMP=y
+-# CONFIG_KVM is not set
+-CONFIG_VIRTIO=m
+-CONFIG_VIRTIO_RING=m
+-CONFIG_VIRTIO_PCI=m
+-CONFIG_VIRTIO_BALLOON=m
+-
+-#
+-# Library routines
+-#
+-CONFIG_BITREVERSE=y
+-CONFIG_GENERIC_FIND_FIRST_BIT=y
+-CONFIG_GENERIC_FIND_NEXT_BIT=y
+-CONFIG_CRC_CCITT=m
+-CONFIG_CRC16=m
+-CONFIG_CRC_T10DIF=m
+-CONFIG_CRC_ITU_T=m
+-CONFIG_CRC32=y
+-CONFIG_CRC7=m
+-CONFIG_LIBCRC32C=m
+-CONFIG_ZLIB_INFLATE=y
+-CONFIG_ZLIB_DEFLATE=m
+-CONFIG_LZO_COMPRESS=m
+-CONFIG_LZO_DECOMPRESS=m
+-CONFIG_GENERIC_ALLOCATOR=y
+-CONFIG_REED_SOLOMON=m
+-CONFIG_REED_SOLOMON_DEC16=y
+-CONFIG_TEXTSEARCH=y
+-CONFIG_TEXTSEARCH_KMP=m
+-CONFIG_TEXTSEARCH_BM=m
+-CONFIG_TEXTSEARCH_FSM=m
+-CONFIG_PLIST=y
+-CONFIG_HAS_IOMEM=y
+-CONFIG_HAS_IOPORT=y
+-CONFIG_HAS_DMA=y
+-CONFIG_CHECK_SIGNATURE=y
+diff --git a/lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch b/lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch
+deleted file mode 100644
+index dea7372..0000000
+--- a/lustre/kernel_patches/patches/blkdev_tunables-2.6-sles11.patch
++++ /dev/null
+@@ -1,11 +0,0 @@
+---- linux-2.6.27.19-5.orig/include/linux/blkdev.h	2009-03-17 12:48:06.000000000 -0400
+-+++ linux-2.6.27.19-5/include/linux/blkdev.h	2009-09-04 18:04:43.000000000 -0400
+-@@ -904,7 +904,7 @@ extern void blk_set_cmd_filter_defaults(
+- #define MAX_PHYS_SEGMENTS 128
+- #define MAX_HW_SEGMENTS 128
+- #define SAFE_MAX_SECTORS 255
+--#define BLK_DEF_MAX_SECTORS 1024
+-+#define BLK_DEF_MAX_SECTORS 2048
+- 
+- #define MAX_SEGMENT_SIZE	65536
+- 
+diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch
+new file mode 100644
+index 0000000..dd93552
+--- /dev/null
++++ b/lustre/kernel_patches/patches/blkdev_tunables-3.0-sles11.patch
+@@ -0,0 +1,119 @@
++--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
+++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
++@@ -19,6 +19,12 @@
++ 
++ unsigned long blk_max_pfn;
++ 
+++int default_max_sectors = BLK_DEF_MAX_SECTORS;
+++module_param(default_max_sectors, int, 0);
+++
+++int default_max_segments = BLK_MAX_SEGMENTS;
+++module_param(default_max_segments, int, 0);
+++
++ /**
++  * blk_queue_prep_rq - set a prepare_request function for queue
++  * @q:		queue
++@@ -108,7 +114,7 @@
++  */
++ void blk_set_default_limits(struct queue_limits *lim)
++ {
++-	lim->max_segments = BLK_MAX_SEGMENTS;
+++	lim->max_segments = default_max_segments;
++ 	lim->max_integrity_segments = 0;
++ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
++ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
++@@ -255,7 +261,7 @@
++ 
++ 	limits->max_hw_sectors = max_hw_sectors;
++ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
++-				    BLK_DEF_MAX_SECTORS);
+++				    default_max_sectors);
++ }
++ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
++ 
++--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
+++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
++@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
++	  there should be no noticeable performance impact as long as you have
++	  logging turned off.
++ 
+++config SCSI_MAX_SG_SEGMENTS
+++	int "Maximum SCSI scatter gather segment size"
+++	range 32 256 
+++	default "128"
+++	depends on SCSI
+++	help
+++	  Control the maximum limit for scatter gather buffers for the
+++	  SCSI device.
+++
++ config SCSI_SCAN_ASYNC
++ 	bool "Asynchronous SCSI scanning"
++ 	depends on SCSI
++--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
+++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
++@@ -20,7 +20,7 @@ struct scsi_cmnd;
++  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
++  * minimum value is 32
++  */
++-#define SCSI_MAX_SG_SEGMENTS	128
+++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
++ 
++ /*
++  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
++--- a/drivers/scsi/isci/init.c	2013-02-08 10:13:00.000000000 -0500
+++++ b/drivers/scsi/isci/init.c	2013-02-08 10:15:04.000000000 -0500
++@@ -118,6 +118,10 @@ unsigned char phy_gen = 3;
++ module_param(phy_gen, byte, 0);
++ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
++ 
+++u16 sg_table_size = SG_ALL;
+++module_param(sg_table_size, ushort, 0);
+++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
+++
++ unsigned char max_concurr_spinup = 1;
++ module_param(max_concurr_spinup, byte, 0);
++ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
++@@ -155,7 +159,6 @@ static struct scsi_host_template isci_sh
++ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
++ 	.cmd_per_lun			= 1,
++ 	.this_id			= -1,
++-	.sg_tablesize			= SG_ALL,
++ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
++ 	.use_clustering			= ENABLE_CLUSTERING,
++ 	.eh_device_reset_handler	= sas_eh_device_reset_handler,
++@@ -407,6 +410,7 @@ static struct isci_host *isci_host_alloc
++ 	isci_host->pdev = pdev;
++ 	isci_host->id = id;
++ 
+++	isci_sht.sg_tablesize = sg_table_size;
++ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
++ 	if (!shost)
++ 		return NULL;
++--- a/drivers/message/fusion/Kconfig	2013-02-08 10:21:25.000000000 -0500
+++++ b/drivers/message/fusion/Kconfig	2013-02-08 10:22:37.000000000 -0500
++@@ -61,9 +61,9 @@
++ 	  LSISAS1078
++ 
++ config FUSION_MAX_SGE
++-	int "Maximum number of scatter gather entries for SAS and SPI (16 - 128)"
++-	default "128"
++-	range 16 128
+++	int "Maximum number of scatter gather entries for SAS and SPI (16 - 256)"
+++	default "256"
+++	range 16 256 
++ 	help
++ 	  This option allows you to specify the maximum number of scatter-
++ 	  gather entries per I/O. The driver default is 128, which matches
++--- a/drivers/message/fusion/mptbase.h	2013-02-08 10:32:45.000000000 -0500
+++++ b/drivers/message/fusion/mptbase.h	2013-02-08 10:32:55.000000000 -0500
++@@ -168,8 +168,8 @@
++ #ifdef  CONFIG_FUSION_MAX_SGE
++ #if     CONFIG_FUSION_MAX_SGE  < 16
++ #define MPT_SCSI_SG_DEPTH	16
++-#elif   CONFIG_FUSION_MAX_SGE  > 128
++-#define MPT_SCSI_SG_DEPTH	128
+++#elif   CONFIG_FUSION_MAX_SGE  > 256
+++#define MPT_SCSI_SG_DEPTH	256
++ #else
++ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
++ #endif
+diff --git a/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
+new file mode 100644
+index 0000000..1a98fb5
+--- /dev/null
++++ b/lustre/kernel_patches/patches/blkdev_tunables-3.7.patch
+@@ -0,0 +1,128 @@
++--- a/block/blk-settings.c	2013-02-06 12:40:44.000000000 -0500
+++++ b/block/blk-settings.c	2013-02-06 12:55:28.000000000 -0500
++@@ -19,6 +19,12 @@
++ 
++ unsigned long blk_max_pfn;
++ 
+++int default_max_sectors = BLK_DEF_MAX_SECTORS;
+++module_param(default_max_sectors, int, 0);
+++
+++int default_max_segments = BLK_MAX_SEGMENTS;
+++module_param(default_max_segments, int, 0);
+++
++ /**
++  * blk_queue_prep_rq - set a prepare_request function for queue
++  * @q:		queue
++@@ -108,7 +114,7 @@
++  */
++ void blk_set_default_limits(struct queue_limits *lim)
++ {
++-	lim->max_segments = BLK_MAX_SEGMENTS;
+++	lim->max_segments = default_max_segments;
++ 	lim->max_integrity_segments = 0;
++ 	lim->seg_boundary_mask = BLK_SEG_BOUNDARY_MASK;
++ 	lim->max_segment_size = BLK_MAX_SEGMENT_SIZE;
++@@ -255,7 +261,7 @@
++ 
++ 	limits->max_hw_sectors = max_hw_sectors;
++ 	limits->max_sectors = min_t(unsigned int, max_hw_sectors,
++-				    BLK_DEF_MAX_SECTORS);
+++				    default_max_sectors);
++ }
++ EXPORT_SYMBOL(blk_limits_max_hw_sectors);
++ 
++--- a/drivers/scsi/Kconfig	2013-02-07 09:25:49.000000000 -0500
+++++ b/drivers/scsi/Kconfig	2013-02-07 09:30:15.000000000 -0500
++@@ -245,6 +245,15 @@ config SCSI_SCAN_ASYNC
++	  there should be no noticeable performance impact as long as you have
++	  logging turned off.
++ 
+++config SCSI_MAX_SG_SEGMENTS
+++	int "Maximum SCSI scatter gather segment size"
+++	range 32 256 
+++	default "128"
+++	depends on SCSI
+++	help
+++	  Control the maximum limit for scatter gather buffers for the
+++	  SCSI device.
+++
++ config SCSI_SCAN_ASYNC
++ 	bool "Asynchronous SCSI scanning"
++ 	depends on SCSI
++--- a/include/scsi/scsi.h	2013-02-07 09:55:02.000000000 -0500
+++++ b/include/scsi/scsi.h	2013-02-07 09:55:20.000000000 -0500
++@@ -20,7 +20,7 @@ struct scsi_cmnd;
++  * to SG_MAX_SINGLE_ALLOC to pack correctly at the highest order.  The
++  * minimum value is 32
++  */
++-#define SCSI_MAX_SG_SEGMENTS	128
+++#define SCSI_MAX_SG_SEGMENTS	CONFIG_SCSI_MAX_SG_SEGMENTS
++ 
++ /*
++  * Like SCSI_MAX_SG_SEGMENTS, but for archs that have sg chaining. This limit
++--- a/drivers/scsi/isci/init.c	2013-02-07 09:59:49.000000000 -0500
+++++ b/drivers/scsi/isci/init.c	2013-02-07 10:01:51.000000000 -0500
++@@ -119,6 +119,10 @@
++ module_param(phy_gen, byte, 0);
++ MODULE_PARM_DESC(phy_gen, "PHY generation (1: 1.5Gbps 2: 3.0Gbps 3: 6.0Gbps)");
++ 
+++u16 sg_table_size = SG_ALL;
+++module_param(sg_table_size, ushort, 0);
+++MODULE_PARM_DESC(sg_table_size, "Size in KB of scatter gather table");
+++
++ unsigned char max_concurr_spinup;
++ module_param(max_concurr_spinup, byte, 0);
++ MODULE_PARM_DESC(max_concurr_spinup, "Max concurrent device spinup");
++@@ -163,7 +167,6 @@
++ 	.can_queue			= ISCI_CAN_QUEUE_VAL,
++ 	.cmd_per_lun			= 1,
++ 	.this_id			= -1,
++-	.sg_tablesize			= SG_ALL,
++ 	.max_sectors			= SCSI_DEFAULT_MAX_SECTORS,
++ 	.use_clustering			= ENABLE_CLUSTERING,
++ 	.eh_abort_handler		= sas_eh_abort_handler,
++@@ -573,6 +576,7 @@
++ 
++ 		INIT_LIST_HEAD(&idev->node);
++ 	}
+++	isci_sht.sg_tablesize = sg_table_size;
++ 
++ 	shost = scsi_host_alloc(&isci_sht, sizeof(void *));
++ 	if (!shost)
++Increase MAX_SGE for fusion mpt driver.
++
++Index: linux-2.6.32.i386/drivers/message/fusion/Kconfig
++===================================================================
++--- linux-2.6.32.i386.orig/drivers/message/fusion/Kconfig	2009-12-03 09:21:21.000000000 +0530
+++++ linux-2.6.32.i386/drivers/message/fusion/Kconfig	2010-03-16 16:45:08.000000000 +0530
++@@ -61,9 +61,9 @@
++ 	  LSISAS1078
++ 
++ config FUSION_MAX_SGE
++-	int "Maximum number of scatter gather entries (16 - 128)"
++-	default "128"
++-	range 16 128
+++	int "Maximum number of scatter gather entries (16 - 256)"
+++	default "256"
+++	range 16 256
++ 	help
++ 	  This option allows you to specify the maximum number of scatter-
++ 	  gather entries per I/O. The driver default is 128, which matches
++Index: linux-2.6.32.i386/drivers/message/fusion/mptbase.h
++===================================================================
++--- linux-2.6.32.i386.orig/drivers/message/fusion/mptbase.h	2009-12-03 09:21:21.000000000 +0530
+++++ linux-2.6.32.i386/drivers/message/fusion/mptbase.h	2010-03-16 16:46:54.000000000 +0530
++@@ -165,10 +165,10 @@
++  * Set the MAX_SGE value based on user input.
++  */
++ #ifdef CONFIG_FUSION_MAX_SGE
++-#if CONFIG_FUSION_MAX_SGE  < 16
+++#if CONFIG_FUSION_MAX_SGE < 16
++ #define MPT_SCSI_SG_DEPTH	16
++-#elif CONFIG_FUSION_MAX_SGE  > 128
++-#define MPT_SCSI_SG_DEPTH	128
+++#elif CONFIG_FUSION_MAX_SGE > 256
+++#define MPT_SCSI_SG_DEPTH	256
++ #else
++ #define MPT_SCSI_SG_DEPTH	CONFIG_FUSION_MAX_SGE
++ #endif
+diff --git a/lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch b/lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch
+deleted file mode 100644
+index 8e465e2..0000000
+--- a/lustre/kernel_patches/patches/dev_read_only-2.6.27-vanilla.patch
++++ /dev/null
+@@ -1,166 +0,0 @@
+-This patch is no longer needed for Lustre.  It is only included
+-for testing and ease of using the same kernel with older Lustre
+-versions.  This testing functionality was replaced in Linux 3.0
+-by the dm-flakey driver.
+-
+-This functionality is mainly used during testing, in order to
+-simulate a server crash for ldiskfs by discarding all of the
+-writes to the filesystem.  For recovery testing we could simulate
+-this by using a special loopback or DM device that also discards
+-writes to the device.
+-
+-This functionality is also used by target "failback" in order
+-to speed up service shutdown and takeover by the other node
+-during controlled operation.  However, it would also be possible
+-to do this by simply allowing all of the in-flight requests to
+-complete and then waiting for the service to stop.  This will
+-also be needed by the DMU-OSD, because discarding of writes on
+-a DMU-based target is not safe as it could trigger a storage
+-failure if the data is ever read from disk again and the
+-checksum does not match that expected by the block pointer.
+-
+-Index: linux-2.6.27.21-0.1/block/blk-core.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/block/blk-core.c	2009-04-23 02:12:51.000000000 -0600
+-+++ linux-2.6.27.21-0.1/block/blk-core.c	2009-05-22 08:38:02.000000000 -0600
+-@@ -1335,6 +1335,8 @@
+- 
+- #endif /* CONFIG_FAIL_MAKE_REQUEST */
+- 
+-+int dev_check_rdonly(struct block_device *bdev);
+-+
+- /*
+-  * Check whether this bio extends beyond the end of the device.
+-  */
+-@@ -1436,6 +1438,12 @@
+- 
+- 		if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
+- 			goto end_io;
+-
+-+               /* this is cfs's dev_rdonly check */
+-+               if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+-+                       bio_endio(bio, bio->bi_size, 0);
+-+                       break;
+-+               }
+-+
+- 		if (should_fail_request(bio))
+- 			goto end_io;
+-@@ -2189,6 +2197,91 @@
+- }
+- EXPORT_SYMBOL(kblockd_flush_work);
+- 
+-+ /*
+-+ * Debug code for turning block devices "read-only" (will discard writes
+-+ * silently).  This is for filesystem crash/recovery testing.
+-+ */
+-+struct deventry {
+-+	dev_t dev;
+-+	struct deventry *next;
+-+};
+-+
+-+static struct deventry *devlist = NULL;
+-+static spinlock_t devlock = SPIN_LOCK_UNLOCKED; 
+-+
+-+int dev_check_rdonly(struct block_device *bdev) 
+-+{
+-+	struct deventry *cur;
+-+	if (!bdev) return 0;
+-+	spin_lock(&devlock);
+-+	cur = devlist;
+-+	while(cur) {
+-+		if (bdev->bd_dev == cur->dev) {
+-+			spin_unlock(&devlock);
+-+			return 1;
+-+	}
+-+		cur = cur->next;
+-+	}
+-+	spin_unlock(&devlock);
+-+	return 0;
+-+}
+-+
+-+void dev_set_rdonly(struct block_device *bdev)
+-+{
+-+	struct deventry *newdev, *cur;
+-+
+-+	if (!bdev) 
+-+		return;
+-+	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
+-+	if (!newdev) 
+-+		return;
+-+	
+-+	spin_lock(&devlock);
+-+	cur = devlist;
+-+	while(cur) {
+-+		if (bdev->bd_dev == cur->dev) {
+-+			spin_unlock(&devlock);
+-+			kfree(newdev);
+-+			return;
+-+		}
+-+		cur = cur->next;
+-+	}
+-+	newdev->dev = bdev->bd_dev;
+-+	newdev->next = devlist;
+-+	devlist = newdev;
+-+	spin_unlock(&devlock);
+-+	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
+-+	       bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
+-+}
+-+
+-+void dev_clear_rdonly(struct block_device *bdev) 
+-+{
+-+	struct deventry *cur, *last = NULL;
+-+	if (!bdev) return;
+-+	spin_lock(&devlock);
+-+	cur = devlist;
+-+	while(cur) {
+-+		if (bdev->bd_dev == cur->dev) {
+-+			if (last) 
+-+				last->next = cur->next;
+-+			else
+-+				devlist = cur->next;
+-+			spin_unlock(&devlock);
+-+			kfree(cur);
+-+			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
+-+			       bdev->bd_disk ? bdev->bd_disk->disk_name :
+-+					       "unknown block", bdev->bd_dev);
+-+			return;
+-+		}
+-+		last = cur;
+-+		cur = cur->next;
+-+	}
+-+	spin_unlock(&devlock);
+-+}
+-+
+-+EXPORT_SYMBOL(dev_set_rdonly);
+-+EXPORT_SYMBOL(dev_clear_rdonly);
+-+EXPORT_SYMBOL(dev_check_rdonly);
+- int __init blk_dev_init(void)
+- {
+- 	kblockd_workqueue = create_workqueue("kblockd");
+-Index: linux-2.6.27.21-0.1/fs/block_dev.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/fs/block_dev.c	2009-04-23 02:12:56.000000000 -0600
+-+++ linux-2.6.27.21-0.1/fs/block_dev.c	2009-05-22 08:38:02.000000000 -0600
+-@@ -1208,6 +1208,7 @@
+- 		if (bdev != bdev->bd_contains)
+- 			victim = bdev->bd_contains;
+- 		bdev->bd_contains = NULL;
+-+		dev_clear_rdonly(bdev);
+- 	}
+- 	unlock_kernel();
+- 	mutex_unlock(&bdev->bd_mutex);
+-Index: linux-2.6.27.21-0.1/include/linux/fs.h
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/include/linux/fs.h	2009-05-22 08:38:00.000000000 -0600
+-+++ linux-2.6.27.21-0.1/include/linux/fs.h	2009-05-22 08:38:02.000000000 -0600
+-@@ -1898,6 +1898,10 @@
+- extern void submit_bio(int, struct bio *);
+- extern int bdev_read_only(struct block_device *);
+- #endif
+-+#define HAVE_CLEAR_RDONLY_ON_PUT
+-+extern void dev_set_rdonly(struct block_device *bdev);
+-+extern int dev_check_rdonly(struct block_device *bdev);
+-+extern void dev_clear_rdonly(struct block_device *bdev);
+- extern int set_blocksize(struct block_device *, int);
+- extern int sb_set_blocksize(struct super_block *, int);
+- extern int sb_min_blocksize(struct super_block *, int);
+diff --git a/lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch b/lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch
+new file mode 100644
+index 0000000..8d03b19
+--- /dev/null
++++ b/lustre/kernel_patches/patches/dev_read_only-3.0-sles11.patch
+@@ -0,0 +1,174 @@
++This patch is no longer needed for Lustre.  It is only included
++for testing and ease of using the same kernel with older Lustre
++versions.  This testing functionality was replaced in Linux 3.0
++by the dm-flakey driver.
++
++This functionality is mainly used during testing, in order to
++simulate a server crash for ldiskfs by discarding all of the
++writes to the filesystem.  For recovery testing we could simulate
++this by using a special loopback or DM device that also discards
++writes to the device.
++
++This functionality is also used by target "failback" in order
++to speed up service shutdown and takeover by the other node
++during controlled operation.  However, it would also be possible
++to do this by simply allowing all of the in-flight requests to
++complete and then waiting for the service to stop.  This will
++also be needed by the DMU-OSD, because discarding of writes on
++a DMU-based target is not safe as it could trigger a storage
++failure if the data is ever read from disk again and the
++checksum does not match that expected by the block pointer.
++
++Index: linux-3.0/block/blk-core.c
++===================================================================
++--- linux-3.0.orig/block/blk-core.c	2013-01-25 11:25:32.000000000 -0500
+++++ linux-3.0/block/blk-core.c	2013-01-25 11:31:53.000000000 -0500
++@@ -1390,6 +1390,8 @@
++ 
++ #endif /* CONFIG_FAIL_MAKE_REQUEST */
++ 
+++int dev_check_rdonly(struct block_device *bdev);
+++
++ /*
++  * Check whether this bio extends beyond the end of the device.
++  */
++@@ -1491,6 +1493,12 @@
++ 		if (unlikely(test_bit(QUEUE_FLAG_DEAD, &q->queue_flags)))
++ 			goto end_io;
++ 
+++		/* this is cfs's dev_rdonly check */
+++		if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+++			err = 0;
+++			goto end_io;
+++		}
+++
++ 		if (should_fail_request(bio))
++ 			goto end_io;
++ 
++@@ -2796,6 +2804,99 @@
++ }
++ EXPORT_SYMBOL(blk_finish_plug);
++ 
+++/*
+++ * Debug code for turning block devices "read-only" (will discard writes
+++ * silently).  This is for filesystem crash/recovery testing.
+++ */
+++struct deventry {
+++	dev_t dev;
+++	struct deventry *next;
+++};
+++
+++static struct deventry *devlist = NULL;
+++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
+++
+++int dev_check_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *cur;
+++
+++	if (!bdev)
+++		return 0;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			spin_unlock(&devlock);
+++			return 1;
+++		}
+++		cur = cur->next;
+++	}
+++	spin_unlock(&devlock);
+++	return 0;
+++}
+++
+++void dev_set_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *newdev, *cur;
+++
+++	if (!bdev)
+++		return;
+++
+++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
+++	if (!newdev)
+++		return;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			spin_unlock(&devlock);
+++			kfree(newdev);
+++			return;
+++		}
+++		cur = cur->next;
+++	}
+++	newdev->dev = bdev->bd_dev;
+++	newdev->next = devlist;
+++	devlist = newdev;
+++	spin_unlock(&devlock);
+++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
+++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
+++}
+++
+++void dev_clear_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *cur, *last = NULL;
+++
+++	if (!bdev)
+++		return;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			if (last)
+++				last->next = cur->next;
+++			else
+++				devlist = cur->next;
+++			spin_unlock(&devlock);
+++			kfree(cur);
+++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
+++				bdev->bd_disk ? bdev->bd_disk->disk_name :
+++				"unknown block", bdev->bd_dev);
+++			return;
+++		}
+++		last = cur;
+++		cur = cur->next;
+++	}
+++	spin_unlock(&devlock);
+++}
+++
+++EXPORT_SYMBOL(dev_set_rdonly);
+++EXPORT_SYMBOL(dev_clear_rdonly);
+++EXPORT_SYMBOL(dev_check_rdonly);
+++
++ int __init blk_dev_init(void)
++ {
++ 	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
++Index: linux-2.6.32-131.0.15.el6.x86_64/fs/block_dev.c
++===================================================================
++--- linux-2.6.32-131.0.15.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
+++++ linux-2.6.32-131.0.15.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
++@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
++ 		if (bdev != bdev->bd_contains)
++ 			victim = bdev->bd_contains;
++ 		bdev->bd_contains = NULL;
+++		dev_clear_rdonly(bdev);
++
++		put_disk(disk);
++		module_put(owner);
++Index: linux-2.6.32-131.0.15.el6.x86_64/include/linux/fs.h
++===================================================================
++--- linux-2.6.32-131.0.15.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
+++++ linux-2.6.32-131.0.15.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
++@@ -2244,6 +2244,10 @@ struct bio;
++ extern void submit_bio(int, struct bio *);
++ extern int bdev_read_only(struct block_device *);
++ #endif
+++#define HAVE_CLEAR_RDONLY_ON_PUT
+++extern void dev_set_rdonly(struct block_device *bdev);
+++extern int dev_check_rdonly(struct block_device *bdev);
+++extern void dev_clear_rdonly(struct block_device *bdev);
++ extern int set_blocksize(struct block_device *, int);
++ extern int sb_set_blocksize(struct super_block *, int);
++ extern int sb_min_blocksize(struct super_block *, int);
+diff --git a/lustre/kernel_patches/patches/dev_read_only-3.7.patch b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
+new file mode 100644
+index 0000000..7fb0b98
+--- /dev/null
++++ b/lustre/kernel_patches/patches/dev_read_only-3.7.patch
+@@ -0,0 +1,174 @@
++This patch is no longer needed for Lustre.  It is only included
++for testing and ease of using the same kernel with older Lustre
++versions.  This testing functionality was replaced in Linux 3.0
++by the dm-flakey driver.
++
++This functionality is mainly used during testing, in order to
++simulate a server crash for ldiskfs by discarding all of the
++writes to the filesystem.  For recovery testing we could simulate
++this by using a special loopback or DM device that also discards
++writes to the device.
++
++This functionality is also used by target "failback" in order
++to speed up service shutdown and takeover by the other node
++during controlled operation.  However, it would also be possible
++to do this by simply allowing all of the in-flight requests to
++complete and then waiting for the service to stop.  This will
++also be needed by the DMU-OSD, because discarding of writes on
++a DMU-based target is not safe as it could trigger a storage
++failure if the data is ever read from disk again and the
++checksum does not match that expected by the block pointer.
++
++Index: linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c
++===================================================================
++--- linux-3.6.0-0.3.fc.el6.x86_64.orig/block/blk-core.c	2012-09-30 19:47:46.000000000 -0400
+++++ linux-3.6.0-0.3.fc.el6.x86_64/block/blk-core.c	2012-11-16 11:35:04.419174277 -0500
++@@ -1606,6 +1606,8 @@ static inline bool should_fail_request(s
++
++ #endif /* CONFIG_FAIL_MAKE_REQUEST */
++
+++int dev_check_rdonly(struct block_device *bdev);
+++
++ /*
++  * Check whether this bio extends beyond the end of the device.
++  */
++@@ -1668,6 +1670,12 @@ generic_make_request_checks(struct bio *
++		goto end_io;
++	}
++
+++	/* this is cfs's dev_rdonly check */
+++	if (bio_rw(bio) == WRITE && dev_check_rdonly(bio->bi_bdev)) {
+++		err = 0;
+++		goto end_io;
+++	}
+++
++	part = bio->bi_bdev->bd_part;
++	if (should_fail_request(part, bio->bi_size) ||
++	    should_fail_request(&part_to_disk(part)->part0,
++@@ -3034,6 +3042,99 @@ void blk_finish_plug(struct blk_plug *pl
++ }
++ EXPORT_SYMBOL(blk_finish_plug);
++
+++/*
+++ * Debug code for turning block devices "read-only" (will discard writes
+++ * silently).  This is for filesystem crash/recovery testing.
+++ */
+++struct deventry {
+++	dev_t dev;
+++	struct deventry *next;
+++};
+++
+++static struct deventry *devlist = NULL;
+++static spinlock_t devlock = __SPIN_LOCK_UNLOCKED(devlock);
+++
+++int dev_check_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *cur;
+++
+++	if (!bdev)
+++		return 0;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			spin_unlock(&devlock);
+++			return 1;
+++		}
+++		cur = cur->next;
+++	}
+++	spin_unlock(&devlock);
+++	return 0;
+++}
+++
+++void dev_set_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *newdev, *cur;
+++
+++	if (!bdev)
+++		return;
+++
+++	newdev = kmalloc(sizeof(struct deventry), GFP_KERNEL);
+++	if (!newdev)
+++		return;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			spin_unlock(&devlock);
+++			kfree(newdev);
+++			return;
+++		}
+++		cur = cur->next;
+++	}
+++	newdev->dev = bdev->bd_dev;
+++	newdev->next = devlist;
+++	devlist = newdev;
+++	spin_unlock(&devlock);
+++	printk(KERN_WARNING "Turning device %s (%#x) read-only\n",
+++		bdev->bd_disk ? bdev->bd_disk->disk_name : "", bdev->bd_dev);
+++}
+++
+++void dev_clear_rdonly(struct block_device *bdev)
+++{
+++	struct deventry *cur, *last = NULL;
+++
+++	if (!bdev)
+++		return;
+++
+++	spin_lock(&devlock);
+++	cur = devlist;
+++	while(cur) {
+++		if (bdev->bd_dev == cur->dev) {
+++			if (last)
+++				last->next = cur->next;
+++			else
+++				devlist = cur->next;
+++			spin_unlock(&devlock);
+++			kfree(cur);
+++			printk(KERN_WARNING "Removing read-only on %s (%#x)\n",
+++				bdev->bd_disk ? bdev->bd_disk->disk_name :
+++				"unknown block", bdev->bd_dev);
+++			return;
+++		}
+++		last = cur;
+++		cur = cur->next;
+++	}
+++	spin_unlock(&devlock);
+++}
+++
+++EXPORT_SYMBOL(dev_set_rdonly);
+++EXPORT_SYMBOL(dev_clear_rdonly);
+++EXPORT_SYMBOL(dev_check_rdonly);
+++
++ int __init blk_dev_init(void)
++ {
++	BUILD_BUG_ON(__REQ_NR_BITS > 8 *
++Index: linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c
++===================================================================
++--- linux-3.6.0-0.3.fc.el6.x86_64.orig/fs/block_dev.c	2011-05-10 21:38:29.000000000 +0300
+++++ linux-3.6.0-0.3.fc.el6.x86_64/fs/block_dev.c	2011-05-19 21:01:04.000000000 +0300
++@@ -1389,6 +1389,7 @@ static int __blkdev_put(struct block_dev
++		if (bdev != bdev->bd_contains)
++			victim = bdev->bd_contains;
++		bdev->bd_contains = NULL;
+++		dev_clear_rdonly(bdev);
++
++		put_disk(disk);
++		module_put(owner);
++Index: linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h
++===================================================================
++--- linux-3.6.0-0.3.fc.el6.x86_64.orig/include/linux/fs.h	2011-05-10 21:38:29.000000000 +0300
+++++ linux-3.6.0-0.3.fc.el6.x86_64/include/linux/fs.h	2011-05-19 21:01:04.000000000 +0300
++@@ -2244,6 +2244,10 @@ struct bio;
++ extern void submit_bio(int, struct bio *);
++ extern int bdev_read_only(struct block_device *);
++ #endif
+++#define HAVE_CLEAR_RDONLY_ON_PUT
+++extern void dev_set_rdonly(struct block_device *bdev);
+++extern int dev_check_rdonly(struct block_device *bdev);
+++extern void dev_clear_rdonly(struct block_device *bdev);
++ extern int set_blocksize(struct block_device *, int);
++ extern int sb_set_blocksize(struct super_block *, int);
++ extern int sb_min_blocksize(struct super_block *, int);
+diff --git a/lustre/kernel_patches/patches/export-2.6.27-vanilla.patch b/lustre/kernel_patches/patches/export-2.6.27-vanilla.patch
+deleted file mode 100644
+index 9575561..0000000
+--- a/lustre/kernel_patches/patches/export-2.6.27-vanilla.patch
++++ /dev/null
+@@ -1,24 +0,0 @@
+-Index: linux-2.6/fs/jbd/journal.c
+-===================================================================
+---- linux-2.6.orig/fs/jbd2/journal.c	2006-07-15 16:13:50.000000000 +0800
+-+++ linux-2.6/fs/jbd2/journal.c	2006-07-15 16:22:04.000000000 +0800
+-@@ -74,6 +74,7 @@ EXPORT_SYMBOL(journal_abort);
+- 	spin_unlock(&journal->j_state_lock);
+- 	return ret;
+- }
+-+EXPORT_SYMBOL(jbd2_log_start_commit);
+- 
+- /*
+-  * Force and wait upon a commit if the calling process is not within
+-Index: linux-2.6/kernel/sys.c
+-===================================================================
+---- linux-2.6.orig/security/security.c
+-+++ linux-2.6/security/security.c
+-@@ -74,6 +74,7 @@
+- 		return 0;
+- 	return security_ops->inode_unlink(dir, dentry, mnt);
+- }
+-+EXPORT_SYMBOL(security_inode_unlink);
+- 
+- int security_inode_symlink(struct inode *dir, struct dentry *dentry,
+- 			   struct vfsmount *mnt, const char *old_name)
+diff --git a/lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch b/lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch
+deleted file mode 100644
+index 1940403..0000000
+--- a/lustre/kernel_patches/patches/iopen-misc-2.6.22-vanilla.patch
++++ /dev/null
+@@ -1,70 +0,0 @@
+-This patch is needed to allow sharing the kernel with 1.8, and until
+-the MGS and llog code has been moved over to using the OSD interface.
+-
+-Index: linux-2.6.22.5/fs/dcache.c
+-===================================================================
+---- linux-2.6.22.5.orig/fs/dcache.c	2008-02-21 00:56:29.000000000 -0700
+-+++ linux-2.6.22.5/fs/dcache.c	2008-02-21 00:57:02.000000000 -0700
+-@@ -1441,13 +1441,22 @@
+-  * Adds a dentry to the hash according to its name.
+-  */
+-  
+--void d_rehash(struct dentry * entry)
+-+void d_rehash_cond(struct dentry * entry, int lock)
+- {
+--	spin_lock(&dcache_lock);
+-+	if (lock)
+-+		spin_lock(&dcache_lock);
+- 	spin_lock(&entry->d_lock);
+- 	_d_rehash(entry);
+- 	spin_unlock(&entry->d_lock);
+--	spin_unlock(&dcache_lock);
+-+	if (lock)
+-+		spin_unlock(&dcache_lock);
+-+}
+-+
+-+EXPORT_SYMBOL(d_rehash_cond);
+-+
+-+void d_rehash(struct dentry * entry)
+-+{
+-+	d_rehash_cond(entry, 1);
+- }
+- 
+- #define do_switch(x,y) do { \
+-@@ -1537,7 +1546,7 @@
+-  * Update the dcache to reflect the move of a file name. Negative
+-  * dcache entries should not be moved in this way.
+-  */
+--static void d_move_locked(struct dentry * dentry, struct dentry * target)
+-+void d_move_locked(struct dentry * dentry, struct dentry * target)
+- {
+- 	struct hlist_head *list;
+- 
+-@@ -1595,6 +1604,7 @@
+- 	spin_unlock(&dentry->d_lock);
+- 	write_sequnlock(&rename_lock);
+- }
+-+EXPORT_SYMBOL(d_move_locked);
+- 
+- /**
+-  * d_move - move a dentry
+-Index: linux-2.6.22.5/include/linux/dcache.h
+-===================================================================
+---- linux-2.6.22.5.orig/include/linux/dcache.h	2008-02-21 00:56:29.000000000 -0700
+-+++ linux-2.6.22.5/include/linux/dcache.h	2008-02-21 00:57:02.000000000 -0700
+-@@ -251,6 +251,7 @@ extern int have_submounts(struct dentry 
+-  * This adds the entry to the hash queues.
+-  */
+- extern void d_rehash(struct dentry *);
+-+extern void d_rehash_cond(struct dentry *, int lock);
+- 
+- /**
+-  * d_add - add dentry to hash queues
+-@@ -286,6 +287,7 @@ static inline struct dentry *d_add_uniqu
+- 
+- /* used for rename() and baskets */
+- extern void d_move(struct dentry *, struct dentry *);
+-+extern void d_move_locked(struct dentry *, struct dentry *);
+- 
+- /* appendix may either be NULL or be used for transname suffixes */
+- extern struct dentry * d_lookup(struct dentry *, struct qstr *);
+diff --git a/lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch b/lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch
+deleted file mode 100644
+index ee1f2df..0000000
+--- a/lustre/kernel_patches/patches/jbd2-jcberr-2.6-sles11.patch
++++ /dev/null
+@@ -1,225 +0,0 @@
+-This patch is no longer needed for Lustre, since Lustre 2.2.  It is kept
+-in the kernel patch series for compatibility with older Lustre releases
+-to simplify the upgrade process so that both the kernel and Lustre do
+-not need to be upgraded at the same time.  See Jira issue LU-433.
+-
+-Index: linux-2.6.27.21-0.1/include/linux/jbd2.h
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/include/linux/jbd2.h
+-+++ linux-2.6.27.21-0.1/include/linux/jbd2.h
+-@@ -413,6 +413,27 @@ struct jbd2_inode {
+- 	unsigned int i_flags;
+- };
+- 
+-+#define HAVE_JOURNAL_CALLBACK_STATUS
+-+/**
+-+ *   struct journal_callback - Base structure for callback information.
+-+ *   @jcb_list: list information for other callbacks attached to the same handle.
+-+ *   @jcb_func: Function to call with this callback structure.
+-+ *
+-+ *   This struct is a 'seed' structure for a using with your own callback
+-+ *   structs. If you are using callbacks you must allocate one of these
+-+ *   or another struct of your own definition which has this struct
+-+ *   as it's first element and pass it to journal_callback_set().
+-+ *
+-+ *   This is used internally by jbd2 to maintain callback information.
+-+ *
+-+ *   See journal_callback_set for more information.
+-+ **/
+-+struct journal_callback {
+-+	struct list_head jcb_list;		/* t_jcb_lock */
+-+	void (*jcb_func)(struct journal_callback *jcb, int error);
+-+	/* user data goes here */
+-+};
+-+
+- struct jbd2_revoke_table_s;
+- 
+- /**
+-@@ -421,6 +442,7 @@ struct jbd2_revoke_table_s;
+-  * @h_transaction: Which compound transaction is this update a part of?
+-  * @h_buffer_credits: Number of remaining buffers we are allowed to dirty.
+-  * @h_ref: Reference count on this handle
+-+ * @h_jcb: List of application registered callbacks for this handle.
+-  * @h_err: Field for caller's use to track errors through large fs operations
+-  * @h_sync: flag for sync-on-close
+-  * @h_jdata: flag to force data journaling
+-@@ -446,6 +468,13 @@ struct handle_s
+- 	/* operations */
+- 	int			h_err;
+- 
+-+	/*
+-+	 * List of application registered callbacks for this handle. The
+-+	 * function(s) will be called after the transaction that this handle is
+-+	 * part of has been committed to disk. [t_jcb_lock]
+-+	 */
+-+	struct list_head	h_jcb;
+-+
+- 	/* Flags [no locking] */
+- 	unsigned int	h_sync:		1;	/* sync-on-close */
+- 	unsigned int	h_jdata:	1;	/* force data journaling */
+-@@ -501,6 +530,8 @@ struct transaction_chp_stats_s {
+-  *    j_state_lock
+-  *    ->j_list_lock			(journal_unmap_buffer)
+-  *
+-+ *    t_handle_lock
+-+ *    ->t_jcb_lock
+-  */
+- 
+- struct transaction_s
+-@@ -641,6 +672,15 @@ struct transaction_s
+- 	 */
+- 	int t_handle_count;
+- 
+-+	/*
+-+	 * Protects the callback list
+-+	 */
+-+	spinlock_t		t_jcb_lock;
+-+	/*
+-+	 * List of registered callback functions for this transaction.
+-+	 * Called when the transaction is committed. [t_jcb_lock]
+-+	 */
+-+	struct list_head	t_jcb;
+- };
+- 
+- struct transaction_run_stats_s {
+-@@ -1044,6 +1084,9 @@ extern int	 jbd2_journal_stop(handle_t *
+- extern int	 jbd2_journal_flush (journal_t *);
+- extern void	 jbd2_journal_lock_updates (journal_t *);
+- extern void	 jbd2_journal_unlock_updates (journal_t *);
+-+extern void	 jbd2_journal_callback_set(handle_t *handle,
+-+                                      void (*fn)(struct journal_callback *,int),
+-+                                      struct journal_callback *jcb);
+- 
+- extern journal_t * jbd2_journal_init_dev(struct block_device *bdev,
+- 				struct block_device *fs_dev,
+-Index: linux-2.6.27.21-0.1/fs/jbd2/checkpoint.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/fs/jbd2/checkpoint.c
+-+++ linux-2.6.27.21-0.1/fs/jbd2/checkpoint.c
+-@@ -728,6 +728,7 @@ void __jbd2_journal_drop_transaction(jou
+- 	J_ASSERT(transaction->t_checkpoint_list == NULL);
+- 	J_ASSERT(transaction->t_checkpoint_io_list == NULL);
+- 	J_ASSERT(transaction->t_updates == 0);
+-+	J_ASSERT(list_empty(&transaction->t_jcb));
+- 	J_ASSERT(journal->j_committing_transaction != transaction);
+- 	J_ASSERT(journal->j_running_transaction != transaction);
+- 
+-Index: linux-2.6.27.21-0.1/fs/jbd2/commit.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/fs/jbd2/commit.c
+-+++ linux-2.6.27.21-0.1/fs/jbd2/commit.c
+-@@ -805,6 +805,30 @@ wait_for_iobuf:
+-            transaction can be removed from any checkpoint list it was on
+-            before. */
+- 
+-+	/*
+-+	 * Call any callbacks that had been registered for handles in this
+-+	 * transaction.  It is up to the callback to free any allocated
+-+	 * memory.
+-+	 *
+-+	 * The spinlocking (t_jcb_lock) here is surely unnecessary...
+-+	 */
+-+	spin_lock(&commit_transaction->t_jcb_lock);
+-+	if (!list_empty(&commit_transaction->t_jcb)) {
+-+		struct list_head *p, *n;
+-+		int error = is_journal_aborted(journal);
+-+
+-+		list_for_each_safe(p, n, &commit_transaction->t_jcb) {
+-+			struct journal_callback *jcb;
+-+
+-+			jcb = list_entry(p, struct journal_callback, jcb_list);
+-+			list_del(p);
+-+			spin_unlock(&commit_transaction->t_jcb_lock);
+-+			jcb->jcb_func(jcb, error);
+-+			spin_lock(&commit_transaction->t_jcb_lock);
+-+		}
+-+	}
+-+	spin_unlock(&commit_transaction->t_jcb_lock);
+-+
+- 	jbd_debug(3, "JBD: commit phase 6\n");
+- 
+- 	J_ASSERT(list_empty(&commit_transaction->t_inode_list));
+-Index: linux-2.6.27.21-0.1/fs/jbd2/journal.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/fs/jbd2/journal.c
+-+++ linux-2.6.27.21-0.1/fs/jbd2/journal.c
+-@@ -84,6 +84,8 @@ EXPORT_SYMBOL(jbd2_journal_file_inode);
+- EXPORT_SYMBOL(jbd2_journal_init_jbd_inode);
+- EXPORT_SYMBOL(jbd2_journal_release_jbd_inode);
+- EXPORT_SYMBOL(jbd2_journal_begin_ordered_truncate);
+-+EXPORT_SYMBOL(jbd2_journal_callback_set);
+-+EXPORT_SYMBOL(jbd2_journal_bmap);
+- 
+- static int journal_convert_superblock_v1(journal_t *, journal_superblock_t *);
+- static void __journal_abort_soft (journal_t *journal, int errno);
+-Index: linux-2.6.27.21-0.1/fs/jbd2/transaction.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/fs/jbd2/transaction.c
+-+++ linux-2.6.27.21-0.1/fs/jbd2/transaction.c
+-@@ -50,7 +50,9 @@ jbd2_get_transaction(journal_t *journal,
+- 	transaction->t_state = T_RUNNING;
+- 	transaction->t_tid = journal->j_transaction_sequence++;
+- 	transaction->t_expires = jiffies + journal->j_commit_interval;
+-+	INIT_LIST_HEAD(&transaction->t_jcb);
+- 	spin_lock_init(&transaction->t_handle_lock);
+-+	spin_lock_init(&transaction->t_jcb_lock);
+- 	INIT_LIST_HEAD(&transaction->t_inode_list);
+- 
+- 	/* Set up the commit timer for the new transaction. */
+-@@ -252,6 +254,7 @@ static handle_t *new_handle(int nblocks)
+- 	memset(handle, 0, sizeof(*handle));
+- 	handle->h_buffer_credits = nblocks;
+- 	handle->h_ref = 1;
+-+	INIT_LIST_HEAD(&handle->h_jcb);
+- 
+- 	lockdep_init_map(&handle->h_lockdep_map, "jbd2_handle",
+- 						&jbd2_handle_key, 0);
+-@@ -1173,6 +1176,36 @@ drop:
+- }
+- 
+- /**
+-+ * void jbd2_journal_callback_set() -  Register a callback function for this handle.
+-+ * @handle: handle to attach the callback to.
+-+ * @func: function to callback.
+-+ * @jcb:  structure with additional information required by func() , and
+-+ *	some space for jbd2 internal information.
+-+ *
+-+ * The function will be
+-+ * called when the transaction that this handle is part of has been
+-+ * committed to disk with the original callback data struct and the
+-+ * error status of the journal as parameters.  There is no guarantee of
+-+ * ordering between handles within a single transaction, nor between
+-+ * callbacks registered on the same handle.
+-+ *
+-+ * The caller is responsible for allocating the journal_callback struct.
+-+ * This is to allow the caller to add as much extra data to the callback
+-+ * as needed, but reduce the overhead of multiple allocations.  The caller
+-+ * allocated struct must start with a struct journal_callback at offset 0,
+-+ * and has the caller-specific data afterwards.
+-+ */
+-+void jbd2_journal_callback_set(handle_t *handle,
+-+		      void (*func)(struct journal_callback *jcb, int error),
+-+		      struct journal_callback *jcb)
+-+{
+-+	spin_lock(&handle->h_transaction->t_jcb_lock);
+-+	list_add_tail(&jcb->jcb_list, &handle->h_jcb);
+-+	spin_unlock(&handle->h_transaction->t_jcb_lock);
+-+	jcb->jcb_func = func;
+-+}
+-+
+-+/**
+-  * int jbd2_journal_stop() - complete a transaction
+-  * @handle: tranaction to complete.
+-  *
+-@@ -1246,6 +1279,11 @@ int jbd2_journal_stop(handle_t *handle)
+- 			wake_up(&journal->j_wait_transaction_locked);
+- 	}
+- 
+-+	/* Move callbacks from the handle to the transaction. */
+-+	spin_lock(&transaction->t_jcb_lock);
+-+	list_splice(&handle->h_jcb, &transaction->t_jcb);
+-+	spin_unlock(&transaction->t_jcb_lock);
+-+
+- 	/*
+- 	 * If the handle is marked SYNC, we need to set another commit
+- 	 * going!  We also want to force a commit if the current
+diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
+new file mode 100644
+index 0000000..70b9992
+--- /dev/null
++++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-3.7.patch
+@@ -0,0 +1,21 @@
++--- linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c.orig	2012-11-21 08:51:15.312175089 -0500
+++++ linux-3.6.0-0.3.fc.el6.x86_64/drivers/md/raid5.c		2012-11-21 09:02:38.415174560 -0500
++@@ -2394,6 +2394,8 @@ static int add_stripe_bio(struct stripe_
++		bi->bi_next = *bip;
++	*bip = bi;
++	raid5_inc_bi_active_stripes(bi);
+++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
+++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);	/* force to read from disk. */
++
++	if (forwrite) {
++		/* check if page is covered */
++@@ -4217,6 +4222,9 @@ static void make_request(struct mddev *m
++
++		bio_endio(bi, 0);
++	}
+++
+++	if (bi->bi_rw & REQ_SYNC)
+++		md_wakeup_thread(mddev->thread);
++ }
++
++ static sector_t raid5_size(struct mddev *mddev, sector_t sectors, int raid_disks);
+diff --git a/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch
+new file mode 100644
+index 0000000..3b19291
+--- /dev/null
++++ b/lustre/kernel_patches/patches/raid5-mmp-unplug-dev-sles11sp2.patch
+@@ -0,0 +1,29 @@
++Force MD devices to pass SYNC reads directly to the disk
++instead of handling from cache.  This is needed for MMP
++on MD RAID devices, and in theory could be accepted in
++the upstream kernel.  Not needed for DMU.
++
++Index: linux-3.0.35/drivers/md/raid5.c
++===================================================================
++--- linux-3.0.35.orig/drivers/md/raid5.c	2012-06-22 06:09:49.000000000 -0400
+++++ linux-3.0.35/drivers/md/raid5.c	2013-01-25 10:11:10.076431000 -0500
++@@ -2169,6 +2169,9 @@ static int add_stripe_bio(struct stripe_
++ 		bi->bi_next = *bip;
++ 	*bip = bi;
++ 	bi->bi_phys_segments++;
+++	/* force to read from disk. */
+++	if ((bi->bi_rw & REQ_SYNC) && !forwrite)
+++		clear_bit(R5_UPTODATE, &sh->dev[dd_idx].flags);
++ 	spin_unlock_irq(&conf->device_lock);
++ 	spin_unlock(&sh->lock);
++ 
++@@ -4097,6 +4100,9 @@ static int make_request(mddev_t *mddev,
++ 		bio_endio(bi, 0);
++ 	}
++ 
+++	if (bi->bi_rw & REQ_SYNC)
+++		md_wakeup_thread(mddev->thread);
+++
++ 	return 0;
++ }
++ 
+diff --git a/lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch b/lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch
+deleted file mode 100644
+index 33faa8e..0000000
+--- a/lustre/kernel_patches/patches/sd_iostats-2.6.27-vanilla.patch
++++ /dev/null
+@@ -1,579 +0,0 @@
+-Index: linux-2.6.27.21-0.1/drivers/scsi/Kconfig
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/drivers/scsi/Kconfig	2009-04-23 02:12:56.000000000 -0600
+-+++ linux-2.6.27.21-0.1/drivers/scsi/Kconfig	2009-05-22 08:38:28.000000000 -0600
+-@@ -82,6 +82,14 @@
+- 	  In this case, do not compile the driver for your SCSI host adapter
+- 	  (below) as a module either.
+- 
+-+config SD_IOSTATS
+-+   bool "Enable SCSI disk I/O stats"
+-+   depends on BLK_DEV_SD
+-+   default y
+-+   ---help---
+-+     This enables SCSI disk I/O stats collection.  You must also enable
+-+     /proc file system support if you want this feature.
+-+
+- config CHR_DEV_ST
+- 	tristate "SCSI tape support"
+- 	depends on SCSI
+-Index: linux-2.6.27.21-0.1/drivers/scsi/scsi_proc.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/drivers/scsi/scsi_proc.c	2009-04-23 02:12:56.000000000 -0600
+-+++ linux-2.6.27.21-0.1/drivers/scsi/scsi_proc.c	2009-05-22 08:38:28.000000000 -0600
+-@@ -40,7 +40,8 @@
+- /* 4K page size, but our output routines, use some slack for overruns */
+- #define PROC_BLOCK_SIZE (3*1024)
+- 
+--static struct proc_dir_entry *proc_scsi;
+-+struct proc_dir_entry *proc_scsi;
+-+EXPORT_SYMBOL(proc_scsi);
+- 
+- /* Protect sht->present and sht->proc_dir */
+- static DEFINE_MUTEX(global_host_template_mutex);
+-Index: linux-2.6.27.21-0.1/drivers/scsi/sd.c
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/drivers/scsi/sd.c	2009-04-23 02:12:56.000000000 -0600
+-+++ linux-2.6.27.21-0.1/drivers/scsi/sd.c	2009-05-22 08:38:28.000000000 -0600
+-@@ -108,6 +108,24 @@
+-  * object after last put) */
+- static DEFINE_MUTEX(sd_ref_mutex);
+- 
+-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
+-+# include <linux/proc_fs.h>
+-+# include <linux/seq_file.h>
+-+struct proc_dir_entry *sd_iostats_procdir = NULL;
+-+char sd_iostats_procdir_name[] = "sd_iostats";
+-+static struct file_operations sd_iostats_proc_fops;
+-+
+-+extern void sd_iostats_init(void);
+-+extern void sd_iostats_fini(void);
+-+void sd_iostats_start_req(struct scsi_cmnd *SCpnt);
+-+void sd_iostats_finish_req(struct scsi_cmnd *SCpnt);
+-+#else
+-+static inline void sd_iostats_init(void) {}
+-+static inline void sd_iostats_fini(void) {}
+-+static inline void sd_iostats_start_req(struct scsi_cmnd *SCpnt) {}
+-+static inline void sd_iostats_finish_req(struct scsi_cmnd *SCpnt) {}
+-+#endif
+-+
+- static const char *sd_cache_types[] = {
+- 	"write through", "none", "write back",
+- 	"write back, no read (daft)"
+-@@ -571,6 +589,8 @@
+- 	if (sdkp->protection_type || scsi_prot_sg_count(SCpnt))
+- 		sd_dif_op(SCpnt, sdkp->protection_type, scsi_prot_sg_count(SCpnt));
+- 
+-+	sd_iostats_start_req(SCpnt);
+-+
+- 	/*
+- 	 * We shouldn't disconnect in the middle of a sector, so with a dumb
+- 	 * host adapter, it's safe to assume that we can at least transfer
+-@@ -1091,6 +1111,7 @@
+- 		break;
+- 	}
+-  out:
+-+	sd_iostats_finish_req(SCpnt);
+- 	if (rq_data_dir(SCpnt->request) == READ && scsi_prot_sg_count(SCpnt))
+- 		sd_dif_complete(SCpnt, good_bytes);
+- 
+-@@ -1873,6 +1894,36 @@
+- 	if (sdp->removable)
+- 		gd->flags |= GENHD_FL_REMOVABLE;
+- 
+-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
+-+	sdkp->stats = kzalloc(sizeof(iostat_stats_t), GFP_KERNEL);
+-+	if (!sdkp->stats) {
+-+		printk(KERN_WARNING "cannot allocate iostat structure for"
+-+				    "%s\n", gd->disk_name);
+-+	} else {
+-+		do_gettimeofday(&sdkp->stats->iostat_timeval);
+-+		sdkp->stats->iostat_queue_stamp = jiffies;
+-+		spin_lock_init(&sdkp->stats->iostat_lock);
+-+		if (sd_iostats_procdir) {
+-+			struct proc_dir_entry *pde;
+-+			pde = create_proc_entry(gd->disk_name, S_IRUGO | S_IWUSR,
+-+					        sd_iostats_procdir);
+-+			if (!pde) {
+-+				printk(KERN_WARNING "Can't create /proc/scsi/"
+-+						    "%s/%s\n",
+-+						    sd_iostats_procdir_name,
+-+						    gd->disk_name);
+-+				kfree(sdkp->stats);
+-+				sdkp->stats = NULL;
+-+			} else {
+-+				pde->proc_fops = &sd_iostats_proc_fops;
+-+				pde->data = gd;
+-+			}
+-+		} else {
+-+			kfree(sdkp->stats);
+-+			sdkp->stats = NULL;
+-+		}
+-+	}
+-+#endif
+- 	dev_set_drvdata(dev, sdkp);
+- 	add_disk(gd);
+- 	sd_dif_config_host(sdkp);
+-@@ -1923,6 +1974,366 @@
+- 	return 0;
+- }
+- 
+-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
+-+static int
+-+sd_iostats_seq_show(struct seq_file *seq, void *v)
+-+{
+-+	struct timeval     now;
+-+	struct gendisk *disk = seq->private;
+-+	iostat_stats_t    *stats;
+-+	unsigned long long read_len;
+-+	unsigned long long read_len_tot;
+-+	unsigned long      read_num;
+-+	unsigned long      read_num_tot;
+-+	unsigned long long write_len;
+-+	unsigned long long write_len_tot;
+-+	unsigned long      write_num;
+-+	unsigned long      write_num_tot;
+-+	int                i;
+-+	int                maxi;
+-+
+-+	stats = scsi_disk(disk)->stats;
+-+	if (stats == NULL) {
+-+		printk(KERN_ERR "sd_iostats_seq_show: NULL stats entry\n");
+-+		BUG();
+-+	}
+-+
+-+	do_gettimeofday(&now);
+-+	now.tv_sec -= stats->iostat_timeval.tv_sec;
+-+	now.tv_usec -= stats->iostat_timeval.tv_usec;
+-+	if (now.tv_usec < 0) {
+-+		now.tv_usec += 1000000;
+-+		now.tv_sec--;
+-+	}
+-+
+-+	/* this sampling races with updates */
+-+	seq_printf(seq, "index:        %lu   snapshot_time:         %lu.%06lu\n",
+-+			(unsigned long) scsi_disk(disk)->index,
+-+			now.tv_sec, now.tv_usec);
+-+
+-+	for (i = IOSTAT_NCOUNTERS - 1; i > 0; i--)
+-+		if (stats->iostat_read_histogram[i].iostat_count != 0 ||
+-+				stats->iostat_write_histogram[i].iostat_count != 0)
+-+			break;
+-+	maxi = i;
+-+
+-+	seq_printf(seq, "%8s %8s %12s %8s %12s\n", "size", 
+-+			"reads", "total", "writes", "total");
+-+
+-+	read_len_tot = write_len_tot = 0;
+-+	read_num_tot = write_num_tot = 0;
+-+	for (i = 0; i <= maxi; i++) {
+-+		read_len = stats->iostat_read_histogram[i].iostat_size;
+-+		read_len_tot += read_len;
+-+		read_num = stats->iostat_read_histogram[i].iostat_count;
+-+		read_num_tot += read_num;
+-+
+-+		write_len = stats->iostat_write_histogram[i].iostat_size;
+-+		write_len_tot += write_len;
+-+		write_num = stats->iostat_write_histogram[i].iostat_count;
+-+		write_num_tot += write_num;
+-+
+-+		seq_printf (seq, "%8d %8lu %12llu %8lu %12llu\n", 
+-+				512<<i, read_num, read_len, write_num, write_len);
+-+	}
+-+
+-+	seq_printf(seq, "%8s %8lu %12llu %8lu %12llu\n\n", "total",
+-+			read_num_tot, read_len_tot, 
+-+			write_num_tot, write_len_tot);
+-+
+-+	seq_printf(seq, "%8s %8s %8s\n", "qdepth", "ticks", "%");
+-+	for (i = 0; i < IOSTAT_NCOUNTERS; i++) {
+-+		unsigned long long ticks, percent;
+-+		ticks = stats->iostat_queue_ticks[i];
+-+		if (ticks == 0)
+-+			continue;
+-+		percent = stats->iostat_queue_ticks[i] * 100;
+-+		do_div(percent, stats->iostat_queue_ticks_sum);
+-+		seq_printf(seq, "%8d %8llu %8llu\n", i, ticks, percent);
+-+	}
+-+
+-+	if (stats->iostat_reqs != 0) {
+-+		unsigned long long aveseek = 0, percent = 0;
+-+
+-+		if (stats->iostat_seeks) {
+-+			aveseek = stats->iostat_seek_sectors;
+-+			do_div(aveseek, stats->iostat_seeks);
+-+			percent = stats->iostat_seeks * 100;
+-+			do_div(percent, stats->iostat_reqs);
+-+		}
+-+
+-+		seq_printf(seq, "\n%llu sectors in %llu reqs: %llu seek(s) over "
+-+				"%llu sectors in ave, %llu%% of all reqs\n",
+-+				stats->iostat_sectors, stats->iostat_reqs,
+-+				stats->iostat_seeks, aveseek, percent);
+-+	}
+-+
+-+	seq_printf(seq, "\n%16s %8s %8s %8s %8s\n", "process time", "reads",
+-+			"%%", "writes", "%%");
+-+	for (i = 0; i < IOSTAT_NCOUNTERS; i++) {
+-+		unsigned long read_percent = 0, write_percent = 0;
+-+		if (stats->iostat_wtime[i] == 0 &&
+-+				stats->iostat_rtime[i] == 0)
+-+			continue;
+-+		if (stats->iostat_read_reqs)
+-+			read_percent = stats->iostat_rtime[i] * 100 / 
+-+				stats->iostat_read_reqs;
+-+		if (stats->iostat_write_reqs)
+-+			write_percent = stats->iostat_wtime[i] * 100 / 
+-+				stats->iostat_write_reqs;
+-+		seq_printf(seq, "%16u %8lu %8lu %8lu %8lu\n",
+-+				jiffies_to_msecs(((1UL << i) >> 1) << 1),
+-+				stats->iostat_rtime[i], read_percent,
+-+				stats->iostat_wtime[i], write_percent);
+-+	}
+-+
+-+	seq_printf(seq, "\n%16s %8s %8s %8s %8s\n", "time in queue", "reads",
+-+			"%%", "writes", "%%");
+-+	for (i = 0; i < IOSTAT_NCOUNTERS; i++) {
+-+		unsigned long read_percent = 0, write_percent = 0;
+-+		if (stats->iostat_wtime_in_queue[i] == 0 &&
+-+				stats->iostat_rtime_in_queue[i] == 0)
+-+			continue;
+-+		if (stats->iostat_read_reqs)
+-+			read_percent = stats->iostat_rtime_in_queue[i] * 100 / 
+-+				stats->iostat_read_reqs;
+-+		if (stats->iostat_write_reqs)
+-+			write_percent = stats->iostat_wtime_in_queue[i] * 100 / 
+-+				stats->iostat_write_reqs;
+-+		seq_printf(seq, "%16u %8lu %8lu %8lu %8lu\n",
+-+				jiffies_to_msecs(((1UL << i) >> 1) << 1),
+-+				stats->iostat_rtime_in_queue[i],
+-+				read_percent,
+-+				stats->iostat_wtime_in_queue[i],
+-+				write_percent);
+-+	}
+-+
+-+	return 0;
+-+}
+-+
+-+static void *
+-+sd_iostats_seq_start(struct seq_file *p, loff_t *pos)
+-+{
+-+	return (*pos == 0) ? (void *)1 : NULL;
+-+}
+-+
+-+static void *
+-+sd_iostats_seq_next(struct seq_file *p, void *v, loff_t *pos)
+-+{
+-+	++*pos;
+-+	return NULL;
+-+}
+-+
+-+static void
+-+sd_iostats_seq_stop(struct seq_file *p, void *v)
+-+{
+-+}
+-+
+-+static struct seq_operations sd_iostats_seqops = {
+-+	.start = sd_iostats_seq_start,
+-+	.stop  = sd_iostats_seq_stop,
+-+	.next  = sd_iostats_seq_next,
+-+	.show  = sd_iostats_seq_show,
+-+};
+-+
+-+static int
+-+sd_iostats_seq_open (struct inode *inode, struct file *file)
+-+{
+-+	int rc;
+-+
+-+	rc = seq_open(file, &sd_iostats_seqops);
+-+	if (rc != 0)
+-+		return rc;
+-+
+-+	((struct seq_file *)file->private_data)->private = PDE(inode)->data;
+-+	return 0;
+-+}
+-+
+-+static ssize_t
+-+sd_iostats_seq_write(struct file *file, const char *buffer,
+-+		     size_t len, loff_t *off)
+-+{
+-+	struct seq_file   *seq = file->private_data;
+-+	struct gendisk *disk = seq->private;
+-+	iostat_stats_t    *stats = scsi_disk(disk)->stats;
+-+	unsigned long      flags;
+-+	unsigned long      qdepth;
+-+
+-+
+-+	spin_lock_irqsave (&stats->iostat_lock, flags);
+-+	qdepth = stats->iostat_queue_depth;
+-+	memset (stats, 0, offsetof(iostat_stats_t, iostat_lock));
+-+	do_gettimeofday(&stats->iostat_timeval);
+-+	stats->iostat_queue_stamp = jiffies;
+-+	stats->iostat_queue_depth = qdepth;
+-+	spin_unlock_irqrestore (&stats->iostat_lock, flags);
+-+
+-+	return len;
+-+}
+-+
+-+static struct file_operations sd_iostats_proc_fops = {
+-+	.owner   = THIS_MODULE,
+-+	.open    = sd_iostats_seq_open,
+-+	.read    = seq_read,
+-+	.write   = sd_iostats_seq_write,
+-+	.llseek  = seq_lseek,
+-+	.release = seq_release,
+-+};
+-+
+-+extern struct proc_dir_entry *proc_scsi;
+-+
+-+void
+-+sd_iostats_init(void)
+-+{
+-+	if (proc_scsi == NULL) {
+-+		printk(KERN_WARNING "No access to sd iostats: "
+-+			"proc_scsi is NULL\n");
+-+		return;
+-+	}
+-+
+-+	sd_iostats_procdir = create_proc_entry(sd_iostats_procdir_name,
+-+					       S_IFDIR | S_IRUGO | S_IXUGO,
+-+					        proc_scsi);
+-+	if (sd_iostats_procdir == NULL) {
+-+		printk(KERN_WARNING "No access to sd iostats: "
+-+			"can't create /proc/scsi/%s\n", sd_iostats_procdir_name);
+-+		return;
+-+	}
+-+}
+-+
+-+void sd_iostats_fini(void)
+-+{
+-+	if (proc_scsi != NULL && sd_iostats_procdir != NULL)
+-+		remove_proc_entry(sd_iostats_procdir_name, proc_scsi);
+-+
+-+	sd_iostats_procdir = NULL;
+-+}
+-+
+-+void sd_iostats_finish_req(struct scsi_cmnd *SCpnt)
+-+{
+-+	struct request		*rq = SCpnt->request;
+-+	iostat_stats_t		*stats;
+-+	unsigned long		*tcounter;
+-+	int			tbucket;
+-+	int			tmp;
+-+	unsigned long		irqflags;
+-+	unsigned long		i;
+-+
+-+	stats = scsi_disk(rq->rq_disk)->stats;
+-+	if (stats == NULL)
+-+		return;
+-+
+-+	tmp = jiffies - rq->start_time;
+-+	for (tbucket = 0; tmp > 1; tbucket++)
+-+		tmp >>= 1;
+-+	if (tbucket >= IOSTAT_NCOUNTERS)
+-+		tbucket = IOSTAT_NCOUNTERS - 1;
+-+	//printk("%u ticks in D to %u\n", jiffies - rq->start_time, tbucket);
+-+
+-+	tcounter = rq_data_dir(rq) == WRITE ?
+-+		&stats->iostat_wtime[tbucket] : &stats->iostat_rtime[tbucket];
+-+
+-+	spin_lock_irqsave(&stats->iostat_lock, irqflags);
+-+
+-+	/* update delay stats */
+-+	(*tcounter)++;
+-+
+-+	/* update queue depth stats */
+-+	i = stats->iostat_queue_depth;
+-+	if (i >= IOSTAT_NCOUNTERS)
+-+		i = IOSTAT_NCOUNTERS - 1;
+-+	stats->iostat_queue_ticks[i] += jiffies - stats->iostat_queue_stamp;
+-+	stats->iostat_queue_ticks_sum += jiffies - stats->iostat_queue_stamp;
+-+	BUG_ON(stats->iostat_queue_depth == 0);
+-+	stats->iostat_queue_depth--;
+-+
+-+	/* update seek stats. XXX: not sure about nr_sectors */
+-+	stats->iostat_sectors += rq->nr_sectors;
+-+	stats->iostat_reqs++;
+-+	if (rq->sector != stats->iostat_next_sector) {
+-+		stats->iostat_seek_sectors +=
+-+			rq->sector > stats->iostat_next_sector ?
+-+			rq->sector - stats->iostat_next_sector :
+-+			stats->iostat_next_sector - rq->sector;
+-+		stats->iostat_seeks++;
+-+	}
+-+	stats->iostat_next_sector = rq->sector + rq->nr_sectors;
+-+
+-+	stats->iostat_queue_stamp = jiffies;
+-+
+-+	spin_unlock_irqrestore(&stats->iostat_lock, irqflags);
+-+}
+-+
+-+void sd_iostats_start_req(struct scsi_cmnd *SCpnt)
+-+{
+-+	struct request		*rq = SCpnt->request;
+-+	iostat_stats_t		*stats;
+-+	iostat_counter_t	*counter;
+-+	int			bucket;
+-+	int			tbucket;
+-+	int			tmp;
+-+	unsigned long		irqflags;
+-+	unsigned long		i;
+-+	int			nsect;
+-+
+-+	stats = scsi_disk(rq->rq_disk)->stats;
+-+	if (stats == NULL)
+-+		return;
+-+
+-+	nsect = scsi_bufflen(SCpnt) >> 9;
+-+	for (bucket = 0, tmp = nsect; tmp > 1; bucket++)
+-+		tmp >>= 1;
+-+
+-+	if (bucket >= IOSTAT_NCOUNTERS) {
+-+		printk (KERN_ERR "sd_iostats_bump: nsect %d too big\n", nsect);
+-+		BUG();
+-+	}
+-+
+-+	counter = rq_data_dir(rq) == WRITE ?
+-+		&stats->iostat_write_histogram[bucket] :
+-+		&stats->iostat_read_histogram[bucket];
+-+
+-+	tmp = jiffies - rq->start_time;
+-+	for (tbucket = 0; tmp > 1; tbucket++)
+-+		tmp >>= 1;
+-+	if (tbucket >= IOSTAT_NCOUNTERS)
+-+		tbucket = IOSTAT_NCOUNTERS - 1;
+-+	//printk("%u ticks in Q to %u\n", jiffies - rq->start_time, tbucket);
+-+
+-+	/* an ugly hack to know exact processing time. the right
+-+	 * solution is to add one more field to struct request
+-+	 * hopefully it will break nothing ... */
+-+	rq->start_time = jiffies;
+-+
+-+	spin_lock_irqsave(&stats->iostat_lock, irqflags);
+-+
+-+	/* update queue depth stats */
+-+	i = stats->iostat_queue_depth;
+-+	if (i >= IOSTAT_NCOUNTERS)
+-+		i = IOSTAT_NCOUNTERS - 1;
+-+	stats->iostat_queue_ticks[i] += jiffies - stats->iostat_queue_stamp;
+-+	stats->iostat_queue_ticks_sum += jiffies - stats->iostat_queue_stamp;
+-+	stats->iostat_queue_depth++;
+-+
+-+	/* update delay stats */
+-+	if (rq_data_dir(rq) == WRITE) {
+-+		stats->iostat_wtime_in_queue[tbucket]++;
+-+		stats->iostat_write_reqs++;
+-+	} else {
+-+		stats->iostat_rtime_in_queue[tbucket]++;
+-+		stats->iostat_read_reqs++;
+-+	}
+-+
+-+	/* update size stats */
+-+	counter->iostat_size += nsect;
+-+	counter->iostat_count++;
+-+
+-+	stats->iostat_queue_stamp = jiffies;
+-+
+-+	spin_unlock_irqrestore(&stats->iostat_lock, irqflags);
+-+}
+-+#endif
+-+
+- /**
+-  *	scsi_disk_release - Called to free the scsi_disk structure
+-  *	@dev: pointer to embedded class device
+-@@ -1941,10 +2352,16 @@
+- 	ida_remove(&sd_index_ida, sdkp->index);
+- 	spin_unlock(&sd_index_lock);
+- 
+-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
+-+	if (sdkp->stats) {
+-+		remove_proc_entry(disk->disk_name, sd_iostats_procdir);
+-+		kfree(sdkp->stats);
+-+		sdkp->stats = NULL;
+-+	}
+-+#endif
+- 	disk->private_data = NULL;
+- 	put_disk(disk);
+- 	put_device(&sdkp->device->sdev_gendev);
+--
+- 	kfree(sdkp);
+- }
+- 
+-@@ -2061,6 +2478,8 @@
+- 	if (!majors)
+- 		return -ENODEV;
+- 
+-+	sd_iostats_init();
+-+
+- 	err = class_register(&sd_disk_class);
+- 	if (err)
+- 		goto err_out;
+-@@ -2076,6 +2495,7 @@
+- err_out:
+- 	for (i = 0; i < SD_MAJORS; i++)
+- 		unregister_blkdev(sd_major(i), "sd");
+-+	sd_iostats_fini();
+- 	return err;
+- }
+- 
+-Index: linux-2.6.27.21-0.1/drivers/scsi/sd.h
+-===================================================================
+---- linux-2.6.27.21-0.1.orig/drivers/scsi/sd.h	2009-04-23 02:12:56.000000000 -0600
+-+++ linux-2.6.27.21-0.1/drivers/scsi/sd.h	2009-05-22 08:38:28.000000000 -0600
+-@@ -37,6 +37,46 @@
+-  */
+- #define SD_LAST_BUGGY_SECTORS	8
+- 
+-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
+-+typedef struct {
+-+	unsigned long long iostat_size;
+-+	unsigned long long iostat_count;
+-+} iostat_counter_t;
+-+
+-+#define IOSTAT_NCOUNTERS 16
+-+typedef struct {
+-+	iostat_counter_t	iostat_read_histogram[IOSTAT_NCOUNTERS];
+-+	iostat_counter_t	iostat_write_histogram[IOSTAT_NCOUNTERS];
+-+	struct timeval		iostat_timeval;
+-+
+-+	/* queue depth: how well the pipe is filled up */
+-+	unsigned long long	iostat_queue_ticks[IOSTAT_NCOUNTERS];
+-+	unsigned long long	iostat_queue_ticks_sum;
+-+	unsigned long		iostat_queue_depth;
+-+	unsigned long		iostat_queue_stamp;
+-+
+-+	/* seeks: how linear the traffic is */
+-+	unsigned long long	iostat_next_sector;
+-+	unsigned long long	iostat_seek_sectors;
+-+	unsigned long long	iostat_seeks;
+-+	unsigned long long	iostat_sectors;
+-+	unsigned long long	iostat_reqs;
+-+	unsigned long		iostat_read_reqs;
+-+	unsigned long		iostat_write_reqs;
+-+
+-+	/* process time: how long it takes to process requests */
+-+	unsigned long		iostat_rtime[IOSTAT_NCOUNTERS];
+-+	unsigned long		iostat_wtime[IOSTAT_NCOUNTERS];
+-+
+-+	/* queue time: how long process spent in elevator's queue */
+-+	unsigned long		iostat_rtime_in_queue[IOSTAT_NCOUNTERS];
+-+	unsigned long		iostat_wtime_in_queue[IOSTAT_NCOUNTERS];
+-+
+-+	/* must be the last field, as it's used to know size to be memset'ed */
+-+	spinlock_t		iostat_lock;
+-+} ____cacheline_aligned_in_smp iostat_stats_t;
+-+#endif
+-+
+- struct scsi_disk {
+- 	struct scsi_driver *driver;	/* always &sd_template */
+- 	struct scsi_device *device;
+-@@ -53,6 +93,9 @@
+- 	unsigned	WCE : 1;	/* state of disk WCE bit */
+- 	unsigned	RCD : 1;	/* state of disk RCD bit, unused */
+- 	unsigned	DPOFUA : 1;	/* state of disk DPOFUA bit */
+-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
+-+	iostat_stats_t	*stats;		/* scsi disk statistics */
+-+#endif
+- };
+- #define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
+- 
+diff --git a/lustre/kernel_patches/series/2.6-sles11.series b/lustre/kernel_patches/series/2.6-sles11.series
+index 7626923..f1af7d2 100644
+--- a/lustre/kernel_patches/series/2.6-sles11.series
++++ b/lustre/kernel_patches/series/2.6-sles11.series
+@@ -1,11 +1,6 @@
+-iopen-misc-2.6.22-vanilla.patch
+-export_symbols-2.6.22-vanilla.patch 
+-dev_read_only-2.6.27-vanilla.patch 
+-export-2.6.27-vanilla.patch 
+-sd_iostats-2.6.27-vanilla.patch
+-blkdev_tunables-2.6-sles11.patch
+-md-mmp-unplug-dev-sles11.patch
+-quota-support-64-bit-quota-format.patch
+-jbd2-jcberr-2.6-sles11.patch
+-jbd2-commit-timer-no-jiffies-rounding.diff
+-bio_add_page.patch
++lustre_version.patch
++mpt-fusion-max-sge-rhel6.patch
++raid5-mmp-unplug-dev-rhel6.patch
++dev_read_only-2.6.32-rhel6.patch
++blkdev_tunables-2.6-rhel6.patch
++bh_lru_size_config.patch
+diff --git a/lustre/kernel_patches/series/3.0-sles11.series b/lustre/kernel_patches/series/3.0-sles11.series
+index de1a254..9abf8b1 100644
+--- a/lustre/kernel_patches/series/3.0-sles11.series
++++ b/lustre/kernel_patches/series/3.0-sles11.series
+@@ -1,3 +1,4 @@
+-# This file is a place holder for the patch series file
+-# The correct patches will be placed in here for SLES-SP2 3.x kernel server build
+-# The changes for SLES server are beyond the scope of change request LU-1691
++raid5-mmp-unplug-dev-sles11sp2.patch
++dev_read_only-3.0-sles11.patch
++blkdev_tunables-3.0-sles11.patch
++bh_lru_size_config.patch
+diff --git a/lustre/kernel_patches/series/3.x-fc18.series b/lustre/kernel_patches/series/3.x-fc18.series
+new file mode 100644
+index 0000000..387a2dd
+--- /dev/null
++++ b/lustre/kernel_patches/series/3.x-fc18.series
+@@ -0,0 +1,4 @@
++raid5-mmp-unplug-dev-3.7.patch
++dev_read_only-3.7.patch
++blkdev_tunables-3.7.patch
++bh_lru_size_config.patch
+diff --git a/lustre/kernel_patches/targets/2.6-sles10.target.in b/lustre/kernel_patches/targets/2.6-sles10.target.in
+deleted file mode 100644
+index 2eb48dd..0000000
+--- a/lustre/kernel_patches/targets/2.6-sles10.target.in
++++ /dev/null
+@@ -1,41 +0,0 @@
+-lnxmaj="2.6.16"
+-lnxmin=".60"
+-lnxrel="0.69.1"
+-# use this when there is an "RPM fix" which means that the name of the
+-# (source) RPM has been updated but the version of the kernel inside the
+-# RPM is not also updated
+-rpmfix=""
+-
+-# this is the delimeter that goes before the "smp" at the end of the version
+-# defaults to empty
+-FLAVOR_DELIMITER="-"
+-
+-KERNEL_SRPM=kernel-source-${lnxmaj}${lnxmin}-${lnxrel}${rpmfix}.src.rpm
+-SERIES=""
+-VERSION=$lnxmaj
+-EXTRA_VERSION="${lnxmin#.}-${lnxrel}_lustre.@VERSION@"
+-LUSTRE_VERSION=@VERSION@
+-
+-OFED_VERSION=inkernel
+-# if using "inkernel" on sles10, we need to know which version of ofed-devel
+-# to use
+-OFED_DEVEL_VERSION="1.4.2-0.8.4.1682.0.PTF.578796"
+-
+-BASE_ARCHS="i686 ppc x86_64 ia64 ppc64"
+-BIGMEM_ARCHS=""
+-BOOT_ARCHS=""
+-JENSEN_ARCHS=""
+-SMP_ARCHS="x86_64 ia64"
+-BIGSMP_ARCHS="i686"
+-PSERIES64_ARCHS="ppc"
+-PPC64_ARCHS="ppc64"
+-UP_ARCHS=""
+-SRC_ARCHS=""
+-#RPMSMPTYPE="smp"
+-
+-for cc in gcc ; do
+-    if which $cc >/dev/null 2>/dev/null ; then
+-        export CC=$cc
+-        break
+-    fi
+-done
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
similarity index 96%
rename from sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
rename to sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
index 836bd9f..6ecd22d 100644
--- a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
+++ b/sys-cluster/lustre/files/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -1,7 +1,7 @@
-From 96f2fa9ccf8fe00d4b0bdb79f6821ccc140fa87c Mon Sep 17 00:00:00 2001
+From 6b3e1409cb327ab840c890e2bf01a55badaf720d Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:14:09 +0800
-Subject: [PATCH 2/9] LU-2686 kernel: sock_map_fd() replaced by
+Subject: [PATCH 03/11] LU-2686 kernel: sock_map_fd() replaced by
  sock_alloc_file()
 
 Use sock_alloc_file() replace sock_map_fd().

diff --git a/sys-cluster/lustre/files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
similarity index 98%
rename from sys-cluster/lustre/files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
rename to sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index 3aac639..30bee1e 100644
--- a/sys-cluster/lustre/files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
+++ b/sys-cluster/lustre/files/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,7 +1,7 @@
-From 40fc79f1ea2b8ce3ab895af2a0c6dcf2c1a3ab04 Mon Sep 17 00:00:00 2001
+From def3a96c6a0755136d13796e5ca4b620a22b125b Mon Sep 17 00:00:00 2001
 From: yangsheng <yang.sheng@intel.com>
 Date: Mon, 8 Apr 2013 21:04:22 +0800
-Subject: [PATCH 5/9] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
+Subject: [PATCH 04/11] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
 Add uapi header to include search path.
 
@@ -152,7 +152,7 @@ index 2feec80..aee760e 100644
  	# enable extensive workarounds to get this to build
  	# modules
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index b9ff1ca..9447b2b 100644
+index 0354dd4..c71702b 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -328,6 +328,7 @@ AC_TRY_RUN([

diff --git a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
similarity index 95%
rename from sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
rename to sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 65db8d0..3f2b644 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From f8338a543db484f72f221ac57444afb96a852cfb Mon Sep 17 00:00:00 2001
+From 55b8ccf5de7c8666695245ad95b528185b6c4cf3 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 3/9] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 05/11] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
@@ -67,10 +67,10 @@ index 53975ab..fa4e4d4 100644
 +#endif
  #endif
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 40c4680..b9ff1ca 100644
+index c71702b..2f4265a 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2233,6 +2233,25 @@ LB_LINUX_TRY_COMPILE([
+@@ -2234,6 +2234,25 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -96,7 +96,7 @@ index 40c4680..b9ff1ca 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2414,6 +2433,8 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2415,6 +2434,8 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_DENTRY_OPEN_USE_PATH
  	 LC_HAVE_IOP_ATOMIC_OPEN
  

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
similarity index 95%
rename from sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
rename to sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
index 72c0d64..59b81d4 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0006-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From 954e9511b7f162f4cee82b9c03d8fff7adc09e64 Mon Sep 17 00:00:00 2001
+From dcecd2b8def2c9d034f4d3e02edcdac5373e47ef Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 4/9] LU-2800 llite: introduce local getname()
+Subject: [PATCH 06/11] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
deleted file mode 100644
index 2ab2042..0000000
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ /dev/null
@@ -1,2965 +0,0 @@
-From 1ab28dd30f7303302d4b5825d7b0e0417a339eee Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 7/9] LU-2850 kernel: 3.8 upstream kills daemonize()
-
-kernel_thread() is a low level kernel function.
-Instead of calling kernel_thread() and relying on daemonize()
-to create new kernel threads, we should really switch to
-kthread_run() and elimilate daemonize().
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
----
- libcfs/autoconf/lustre-libcfs.m4           | 19 -------
- libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
- libcfs/include/libcfs/libcfs.h             | 13 +----
- libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
- libcfs/include/libcfs/posix/libcfs.h       |  1 +
- libcfs/include/libcfs/user-prim.h          |  5 +-
- libcfs/include/libcfs/winnt/winnt-prim.h   |  4 --
- libcfs/libcfs/Makefile.in                  |  4 +-
- libcfs/libcfs/darwin/darwin-prim.c         | 39 +++++++-------
- libcfs/libcfs/darwin/darwin-utils.c        |  2 +-
- libcfs/libcfs/debug.c                      | 20 ++++----
- libcfs/libcfs/linux/Makefile.am            |  2 +-
- libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
- libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
- libcfs/libcfs/tracefile.c                  | 15 +++---
- libcfs/libcfs/user-prim.c                  | 38 +++++++-------
- libcfs/libcfs/watchdog.c                   | 25 ++++-----
- libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
- libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
- libcfs/libcfs/workitem.c                   | 26 +++++-----
- lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
- lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
- lnet/klnds/gnilnd/gnilnd_stack.c           |  1 -
- lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
- lnet/klnds/mxlnd/mxlnd_cb.c                | 11 ----
- lnet/klnds/o2iblnd/o2iblnd.c               | 13 +++--
- lnet/klnds/o2iblnd/o2iblnd.h               |  2 +-
- lnet/klnds/o2iblnd/o2iblnd_cb.c            | 23 +++------
- lnet/klnds/ptllnd/ptllnd.c                 |  5 +-
- lnet/klnds/ptllnd/ptllnd_cb.c              | 25 ++++-----
- lnet/klnds/qswlnd/qswlnd.c                 |  3 +-
- lnet/klnds/qswlnd/qswlnd_cb.c              | 13 +++--
- lnet/klnds/ralnd/ralnd.c                   | 10 ++--
- lnet/klnds/ralnd/ralnd.h                   |  2 +-
- lnet/klnds/ralnd/ralnd_cb.c                | 19 ++-----
- lnet/klnds/socklnd/socklnd.c               | 19 +++++--
- lnet/klnds/socklnd/socklnd.h               |  2 +-
- lnet/klnds/socklnd/socklnd_cb.c            | 30 ++++-------
- lnet/lnet/acceptor.c                       | 11 ++--
- lnet/lnet/module.c                         | 10 ++--
- lnet/lnet/router.c                         | 20 ++++----
- lnet/selftest/timer.c                      | 11 ++--
- lnet/ulnds/socklnd/usocklnd.c              | 17 ++++---
- lustre/ldlm/ldlm_lib.c                     | 31 +++++-------
- lustre/ldlm/ldlm_lockd.c                   | 41 +++++++--------
- lustre/ldlm/ldlm_pool.c                    | 53 +++++++++----------
- lustre/llite/llite_capa.c                  | 25 +++++----
- lustre/llite/llite_close.c                 | 26 ++++------
- lustre/llite/lloop.c                       | 10 ++--
- lustre/llite/statahead.c                   | 61 +++++++++++-----------
- lustre/mdc/mdc_request.c                   | 34 ++++++-------
- lustre/mdd/mdd_lfsck.c                     |  7 ++-
- lustre/mdt/mdt_capa.c                      | 26 +++++-----
- lustre/mgc/mgc_request.c                   | 31 ++++++------
- lustre/mgs/mgs_nids.c                      | 13 ++---
- lustre/obdclass/genops.c                   | 22 +++-----
- lustre/obdclass/llog.c                     |  8 +--
- lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
- lustre/osp/osp_precreate.c                 | 15 +++---
- lustre/osp/osp_sync.c                      |  9 ++--
- lustre/ptlrpc/import.c                     | 34 +++++++------
- lustre/ptlrpc/pinger.c                     | 39 +++++++-------
- lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
- lustre/ptlrpc/sec_gc.c                     | 12 ++---
- lustre/ptlrpc/service.c                    | 19 ++++---
- lustre/quota/qmt_lock.c                    | 17 +++----
- lustre/quota/qsd_reint.c                   |  6 +--
- lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 515 insertions(+), 745 deletions(-)
- delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 4545a7a..03a428c 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -696,23 +696,6 @@ LB_LINUX_TRY_COMPILE([
- ])
- ])
- 
--# 2.6.18 store oom parameters in task struct.
--# 2.6.32 store oom parameters in signal struct
--AC_DEFUN([LIBCFS_OOMADJ_IN_SIG],
--[AC_MSG_CHECKING([kernel store oom parameters in task])
--LB_LINUX_TRY_COMPILE([
--        #include <linux/sched.h>
--],[
--        ((struct signal_struct *)0)->oom_adj = 0;
--],[
--        AC_MSG_RESULT(yes)
--        AC_DEFINE(HAVE_OOMADJ_IN_SIG, 1,
--                  [kernel store a oom parameters in signal struct])
--],[
--        AC_MSG_RESULT(no)
--])
--])
--
- #
- # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
- #
-@@ -865,8 +848,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
- # 2.6.32
- LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
- LC_SHRINKER_WANT_SHRINK_PTR
--LIBCFS_HAVE_OOM_H
--LIBCFS_OOMADJ_IN_SIG
- # 2.6.33
- LIBCFS_SYSCTL_CTLNAME
- # 2.6.34
-diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
-index 7bc7af3..583e257 100644
---- a/libcfs/include/libcfs/darwin/darwin-prim.h
-+++ b/libcfs/include/libcfs/darwin/darwin-prim.h
-@@ -202,10 +202,8 @@ extern task_t	kernel_task;
- 
- #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
- 
--#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
--
--extern int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flag);
--
-+extern cfs_task_t kthread_run(cfs_thread_t func, void *arg,
-+			      const char namefmt[], ...);
- 
- /*
-  * Wait Queue implementation
-diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h
-index 2375ed9..34c36a3 100644
---- a/libcfs/include/libcfs/libcfs.h
-+++ b/libcfs/include/libcfs/libcfs.h
-@@ -226,8 +226,7 @@ void cfs_enter_debugger(void);
- /*
-  * Defined by platform
-  */
--void cfs_daemonize(char *str);
--int cfs_daemonize_ctxt(char *str);
-+int unshare_fs_struct(void);
- cfs_sigset_t cfs_get_blocked_sigs(void);
- cfs_sigset_t cfs_block_allsigs(void);
- cfs_sigset_t cfs_block_sigs(unsigned long sigs);
-@@ -236,16 +235,6 @@ void cfs_restore_sigs(cfs_sigset_t);
- int cfs_signal_pending(void);
- void cfs_clear_sigpending(void);
- 
--/*
-- * XXX Liang:
-- * these macros should be removed in the future,
-- * we keep them just for keeping libcfs compatible
-- * with other branches.
-- */
--#define libcfs_daemonize(s)     cfs_daemonize(s)
--#define cfs_sigmask_lock(f)     do { f= 0; } while (0)
--#define cfs_sigmask_unlock(f)   do { f= 0; } while (0)
--
- int convert_server_error(__u64 ecode);
- int convert_client_oflag(int cflag, int *result);
- 
-diff --git a/libcfs/include/libcfs/linux/linux-prim.h b/libcfs/include/libcfs/linux/linux-prim.h
-index 1aeb5aa..31298e1 100644
---- a/libcfs/include/libcfs/linux/linux-prim.h
-+++ b/libcfs/include/libcfs/linux/linux-prim.h
-@@ -183,15 +183,6 @@ typedef long                            cfs_task_state_t;
- 
- #define CFS_DECL_WAITQ(wq)		DECLARE_WAIT_QUEUE_HEAD(wq)
- 
--#define cfs_kthread_run(fn, data, fmt, arg...) kthread_run(fn, data, fmt, ##arg)
--
--/* Kernel thread */
--typedef int (*cfs_thread_t)(void *);
--
--#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
--extern int cfs_create_thread(int (*fn)(void *),
--                             void *arg, unsigned long flags);
--
- /*
-  * Task struct
-  */
-diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 91158bc..c21e2e6 100644
---- a/libcfs/include/libcfs/posix/libcfs.h
-+++ b/libcfs/include/libcfs/posix/libcfs.h
-@@ -110,6 +110,7 @@
- typedef unsigned long long cfs_cycles_t;
- 
- #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L)
-+#define IS_ERR_VALUE(a) (IS_ERR(a))
- #define PTR_ERR(a) ((long)(a))
- #define ERR_PTR(a) ((void*)((long)(a)))
- 
-diff --git a/libcfs/include/libcfs/user-prim.h b/libcfs/include/libcfs/user-prim.h
-index 85253d8..c4e806c 100644
---- a/libcfs/include/libcfs/user-prim.h
-+++ b/libcfs/include/libcfs/user-prim.h
-@@ -157,9 +157,10 @@ static inline int cfs_psdev_deregister(cfs_psdev_t *foo)
- 
- #ifdef HAVE_LIBPTHREAD
- typedef int (*cfs_thread_t)(void *);
--int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags);
-+void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...);
- #else
--#define cfs_create_thread(l,m) LBUG()
-+/* Fine, crash, but stop giving me compile warnings */
-+#define kthread_run(f, a, n, ...) LBUG()
- #endif
- 
- uid_t cfs_curproc_uid(void);
-diff --git a/libcfs/include/libcfs/winnt/winnt-prim.h b/libcfs/include/libcfs/winnt/winnt-prim.h
-index 985af01..e234bba 100644
---- a/libcfs/include/libcfs/winnt/winnt-prim.h
-+++ b/libcfs/include/libcfs/winnt/winnt-prim.h
-@@ -442,8 +442,6 @@ typedef struct _cfs_thread_context {
-     void *              arg;
- } cfs_thread_context_t;
- 
--int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
--
- /*
-  * thread creation flags from Linux, not used in winnt
-  */
-@@ -461,8 +459,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
- 
- #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
- 
--#define CFS_DAEMON_FLAGS (CLONE_VM|CLONE_FILES)
--
- /*
-  * group_info: linux/sched.h
-  */
-diff --git a/libcfs/libcfs/Makefile.in b/libcfs/libcfs/Makefile.in
-index 71852cc..ddfadde 100644
---- a/libcfs/libcfs/Makefile.in
-+++ b/libcfs/libcfs/Makefile.in
-@@ -3,7 +3,7 @@ MODULES = libcfs
- libcfs-linux-objs := linux-tracefile.o linux-debug.o
- libcfs-linux-objs += linux-prim.o linux-mem.o linux-cpu.o
- libcfs-linux-objs += linux-fs.o linux-sync.o linux-tcpip.o
--libcfs-linux-objs += linux-lwt.o linux-proc.o linux-curproc.o
-+libcfs-linux-objs += linux-proc.o linux-curproc.o
- libcfs-linux-objs += linux-utils.o linux-module.o
- libcfs-linux-objs += linux-crypto.o linux-crypto-crc32.o
- libcfs-linux-objs += linux-crypto-adler.o
-@@ -29,7 +29,7 @@ sources:
- 
- libcfs-linux-objs := $(addprefix linux/,$(libcfs-linux-objs))
- 
--libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \
-+libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \
- 		   watchdog.o libcfs_string.o hash.o kernel_user_comm.o \
- 		   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
- 		   libcfs_mem.o libcfs_lock.o heap.o
-diff --git a/libcfs/libcfs/darwin/darwin-prim.c b/libcfs/libcfs/darwin/darwin-prim.c
-index 68d1c0d..8e0901f 100644
---- a/libcfs/libcfs/darwin/darwin-prim.c
-+++ b/libcfs/libcfs/darwin/darwin-prim.c
-@@ -333,24 +333,29 @@ cfs_thread_agent (void)
- 
- extern thread_t kernel_thread(task_t task, void (*start)(void));
- 
--int
--cfs_create_thread(cfs_thread_t  func, void *arg, unsigned long flag)
--{
--        int ret = 0;
--        thread_t th = NULL;
--
--        thread_arg_hold(&cfs_thread_arg, func, arg);
--        th = kernel_thread(kernel_task, cfs_thread_agent);
--        thread_arg_release(&cfs_thread_arg);
--        if (th == THREAD_NULL)
-+cfs_task_t
-+kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
-+{
-+	int ret = 0;
-+	thread_t th = NULL;
-+
-+	thread_arg_hold(&cfs_thread_arg, func, arg);
-+	th = kernel_thread(kernel_task, cfs_thread_agent);
-+	thread_arg_release(&cfs_thread_arg);
-+	if (th != THREAD_NULL) {
-+		/*
-+		 * FIXME: change child thread name...
-+		 * cfs_curproc_comm() is already broken. So it is left as is...
-+		va_list args;
-+		va_start(args, namefmt);
-+		snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX,
-+			 namefmt, args);
-+		va_end(args);
-+		 */
-+	} else {
-                 ret = -1;
--        return ret;
--}
--
--void cfs_daemonize(char *str)
--{
--        snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX, "%s", str);
--        return;
-+	}
-+	return (cfs_task_t)((long)ret);
- }
- 
- /*
-diff --git a/libcfs/libcfs/darwin/darwin-utils.c b/libcfs/libcfs/darwin/darwin-utils.c
-index c66f8e8..909b586 100644
---- a/libcfs/libcfs/darwin/darwin-utils.c
-+++ b/libcfs/libcfs/darwin/darwin-utils.c
-@@ -531,7 +531,7 @@ static int is_last_frame(void *addr)
- 		return 1;
- 	else if (is_addr_in_range(addr, trap, syscall_trace))
- 		return 1;
--	else if (is_addr_in_range(addr, cfs_thread_agent, cfs_create_thread))
-+	else if (is_addr_in_range(addr, cfs_thread_agent, kthread_run))
- 		return 1;
- 	else
- 		return 0;
-diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c
-index f503781..16a8e99 100644
---- a/libcfs/libcfs/debug.c
-+++ b/libcfs/libcfs/debug.c
-@@ -367,16 +367,16 @@ void libcfs_debug_dumplog(void)
-         /* we're being careful to ensure that the kernel thread is
-          * able to set our state to running as it exits before we
-          * get to schedule() */
--        cfs_waitlink_init(&wait);
--        cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
--        cfs_waitq_add(&debug_ctlwq, &wait);
--
--        dumper = cfs_kthread_run(libcfs_debug_dumplog_thread,
--                                 (void*)(long)cfs_curproc_pid(),
--                                 "libcfs_debug_dumper");
--        if (IS_ERR(dumper))
--                printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
--                       " %ld\n", PTR_ERR(dumper));
-+	cfs_waitlink_init(&wait);
-+	cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
-+	cfs_waitq_add(&debug_ctlwq, &wait);
-+
-+	dumper = kthread_run(libcfs_debug_dumplog_thread,
-+			     (void *)(long)cfs_curproc_pid(),
-+			     "libcfs_debug_dumper");
-+	if (IS_ERR(dumper))
-+		printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
-+		       " %ld\n", PTR_ERR(dumper));
-         else
-                 cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
- 
-diff --git a/libcfs/libcfs/linux/Makefile.am b/libcfs/libcfs/linux/Makefile.am
-index bb75462..3c0209f 100644
---- a/libcfs/libcfs/linux/Makefile.am
-+++ b/libcfs/libcfs/linux/Makefile.am
-@@ -1,4 +1,4 @@
--EXTRA_DIST = linux-debug.c linux-lwt.c linux-prim.c linux-tracefile.c	\
-+EXTRA_DIST = linux-debug.c linux-prim.c linux-tracefile.c	\
- 	linux-fs.c linux-mem.c linux-proc.c linux-utils.c linux-lock.c	\
- 	linux-module.c linux-sync.c linux-curproc.c linux-tcpip.c	\
- 	linux-cpu.c linux-crypto.c linux-crypto-crc32.c linux-crypto-adler.c \
-diff --git a/libcfs/libcfs/linux/linux-lwt.c b/libcfs/libcfs/linux/linux-lwt.c
-deleted file mode 100644
-index d9d4dc1..0000000
---- a/libcfs/libcfs/linux/linux-lwt.c
-+++ /dev/null
-@@ -1,81 +0,0 @@
--/*
-- * GPL HEADER START
-- *
-- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-- *
-- * This program is free software; you can redistribute it and/or modify
-- * it under the terms of the GNU General Public License version 2 only,
-- * as published by the Free Software Foundation.
-- *
-- * 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 version 2 for more details (a copy is included
-- * in the LICENSE file that accompanied this code).
-- *
-- * You should have received a copy of the GNU General Public License
-- * version 2 along with this program; If not, see
-- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
-- *
-- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
-- * CA 95054 USA or visit www.sun.com if you need additional information or
-- * have any questions.
-- *
-- * GPL HEADER END
-- */
--/*
-- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
-- * Use is subject to license terms.
-- *
-- * Copyright (c) 2012, Intel Corporation.
-- */
--/*
-- * This file is part of Lustre, http://www.lustre.org/
-- * Lustre is a trademark of Sun Microsystems, Inc.
-- */
--
--# define DEBUG_SUBSYSTEM S_LNET
--#include <linux/module.h>
--#include <linux/sched.h>
--#include <linux/spinlock.h>
--
--#ifdef HAVE_LINUX_OOM_H
--#include <linux/oom.h>
--#else
--#include <linux/mm.h>
--#endif
--
--int oom_get_adj(struct task_struct *task, int scope)
--{
--	int oom_adj;
--#ifdef HAVE_OOMADJ_IN_SIG
--	unsigned long flags;
--
--	spin_lock_irqsave(&task->sighand->siglock, flags);
--	oom_adj = task->signal->oom_adj;
--	task->signal->oom_adj = scope;
--	spin_unlock_irqrestore(&task->sighand->siglock, flags);
--
--#else
--	oom_adj = task->oomkilladj;
--	task->oomkilladj = scope;
--#endif
--	return oom_adj;
--}
--
--int cfs_create_thread(int (*fn)(void *),
--                      void *arg, unsigned long flags)
--{
--        void *orig_info = current->journal_info;
--        int rc;
--        int old_oom;
--
--        old_oom = oom_get_adj(current, OOM_DISABLE);
--        current->journal_info = NULL;
--        rc = kernel_thread(fn, arg, flags);
--        current->journal_info = orig_info;
--        oom_get_adj(current, old_oom);
--
--        return rc;
--}
--EXPORT_SYMBOL(cfs_create_thread);
-diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index afb4465..6da1744 100644
---- a/libcfs/libcfs/linux/linux-prim.c
-+++ b/libcfs/libcfs/linux/linux-prim.c
-@@ -259,34 +259,20 @@ void cfs_enter_debugger(void)
- #endif
- }
- 
--void cfs_daemonize(char *str) {
--        unsigned long flags;
--
--        daemonize(str);
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--}
--
--int cfs_daemonize_ctxt(char *str) {
--
--        cfs_daemonize(str);
- #ifndef HAVE_UNSHARE_FS_STRUCT
--        {
--        struct task_struct *tsk = current;
--        struct fs_struct *fs = NULL;
--        fs = copy_fs_struct(tsk->fs);
--        if (fs == NULL)
--                return -ENOMEM;
--        exit_fs(tsk);
--        tsk->fs = fs;
--        }
--#else
--        unshare_fs_struct();
-+int unshare_fs_struct(void)
-+{
-+	struct task_struct *tsk = current;
-+	struct fs_struct *fs = NULL;
-+	fs = copy_fs_struct(tsk->fs);
-+	if (fs == NULL)
-+		return -ENOMEM;
-+	exit_fs(tsk);
-+	tsk->fs = fs;
-+	return 0;
-+}
-+EXPORT_SYMBOL(unshare_fs_struct);
- #endif
--        return 0;
--}
- 
- sigset_t
- cfs_block_allsigs(void)
-@@ -373,8 +359,6 @@ libcfs_arch_cleanup(void)
- EXPORT_SYMBOL(libcfs_arch_init);
- EXPORT_SYMBOL(libcfs_arch_cleanup);
- EXPORT_SYMBOL(cfs_enter_debugger);
--EXPORT_SYMBOL(cfs_daemonize);
--EXPORT_SYMBOL(cfs_daemonize_ctxt);
- EXPORT_SYMBOL(cfs_block_allsigs);
- EXPORT_SYMBOL(cfs_block_sigs);
- EXPORT_SYMBOL(cfs_block_sigsinv);
-diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
-index d455e42..f874974 100644
---- a/libcfs/libcfs/tracefile.c
-+++ b/libcfs/libcfs/tracefile.c
-@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
- 
- 	/* we're started late enough that we pick up init's fs context */
- 	/* this is so broken in uml?  what on earth is going on? */
--	cfs_daemonize("ktracefiled");
- 
- 	spin_lock_init(&pc.pc_lock);
- 	complete(&tctl->tctl_start);
-@@ -1106,16 +1105,16 @@ int cfs_trace_start_thread(void)
- 
- 	init_completion(&tctl->tctl_start);
- 	init_completion(&tctl->tctl_stop);
--        cfs_waitq_init(&tctl->tctl_waitq);
--        cfs_atomic_set(&tctl->tctl_shutdown, 0);
-+	cfs_waitq_init(&tctl->tctl_waitq);
-+	cfs_atomic_set(&tctl->tctl_shutdown, 0);
- 
--        if (cfs_create_thread(tracefiled, tctl, 0) < 0) {
--                rc = -ECHILD;
--                goto out;
--        }
-+	if (IS_ERR(kthread_run(tracefiled, tctl, "ktracefiled"))) {
-+		rc = -ECHILD;
-+		goto out;
-+	}
- 
- 	wait_for_completion(&tctl->tctl_start);
--        thread_running = 1;
-+	thread_running = 1;
- out:
- 	mutex_unlock(&cfs_trace_thread_mutex);
-         return rc;
-diff --git a/libcfs/libcfs/user-prim.c b/libcfs/libcfs/user-prim.c
-index eb21418..9f2b7b3 100644
---- a/libcfs/libcfs/user-prim.c
-+++ b/libcfs/libcfs/user-prim.c
-@@ -223,24 +223,25 @@ static void *cfs_thread_helper(void *data)
-         return NULL;
- }
- 
--int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags)
-+void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
- {
--        pthread_t tid;
--        pthread_attr_t tattr;
--        int rc;
--        struct lustre_thread_arg *targ_p = malloc(sizeof(struct lustre_thread_arg));
-+	pthread_t tid;
-+	pthread_attr_t tattr;
-+	int rc;
-+	struct lustre_thread_arg *targ_p =
-+				malloc(sizeof(struct lustre_thread_arg));
- 
--        if ( targ_p == NULL )
--                return -ENOMEM;
-+	if (targ_p == NULL)
-+		return ERR_PTR(-ENOMEM);
- 
--        targ_p->f = func;
--        targ_p->arg = arg;
-+	targ_p->f = func;
-+	targ_p->arg = arg;
- 
--        pthread_attr_init(&tattr);
--        pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
--        rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
--        pthread_attr_destroy(&tattr);
--        return -rc;
-+	pthread_attr_init(&tattr);
-+	pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
-+	rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
-+	pthread_attr_destroy(&tattr);
-+	return ERR_PTR(rc);
- }
- #endif
- 
-@@ -314,14 +315,9 @@ void cfs_enter_debugger(void)
-          */
- }
- 
--void cfs_daemonize(char *str)
-+int unshare_fs_struct()
- {
--        return;
--}
--
--int cfs_daemonize_ctxt(char *str)
--{
--        return 0;
-+	return 0;
- }
- 
- cfs_sigset_t cfs_block_allsigs(void)
-diff --git a/libcfs/libcfs/watchdog.c b/libcfs/libcfs/watchdog.c
-index e08fe68..0981a2c 100644
---- a/libcfs/libcfs/watchdog.c
-+++ b/libcfs/libcfs/watchdog.c
-@@ -213,19 +213,11 @@ static void lcw_dump_stack(struct lc_watchdog *lcw)
- static int lcw_dispatch_main(void *data)
- {
-         int                 rc = 0;
--        unsigned long       flags;
-         struct lc_watchdog *lcw;
-         CFS_LIST_HEAD      (zombies);
- 
-         ENTRY;
- 
--        cfs_daemonize("lc_watchdogd");
--
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--
- 	complete(&lcw_start_completion);
- 
-         while (1) {
-@@ -312,7 +304,7 @@ static int lcw_dispatch_main(void *data)
- 
- static void lcw_dispatch_start(void)
- {
--	int rc;
-+	cfs_task_t *task;
- 
- 	ENTRY;
- 	LASSERT(lcw_refcount == 1);
-@@ -321,13 +313,14 @@ static void lcw_dispatch_start(void)
- 	init_completion(&lcw_start_completion);
-         cfs_waitq_init(&lcw_event_waitq);
- 
--        CDEBUG(D_INFO, "starting dispatch thread\n");
--        rc = cfs_create_thread(lcw_dispatch_main, NULL, 0);
--        if (rc < 0) {
--                CERROR("error spawning watchdog dispatch thread: %d\n", rc);
--                EXIT;
--                return;
--        }
-+	CDEBUG(D_INFO, "starting dispatch thread\n");
-+	task = kthread_run(lcw_dispatch_main, NULL, "lc_watchdogd");
-+	if (IS_ERR(task)) {
-+		CERROR("error spawning watchdog dispatch thread: %ld\n",
-+			PTR_ERR(task));
-+		EXIT;
-+		return;
-+	}
- 	wait_for_completion(&lcw_start_completion);
- 	CDEBUG(D_INFO, "watchdog dispatcher initialization complete.\n");
- 
-diff --git a/libcfs/libcfs/winnt/winnt-prim.c b/libcfs/libcfs/winnt/winnt-prim.c
-index 8596a40..1d04567 100644
---- a/libcfs/libcfs/winnt/winnt-prim.c
-+++ b/libcfs/libcfs/winnt/winnt-prim.c
-@@ -82,22 +82,22 @@ cfs_thread_proc(
- }
- 
- /*
-- * cfs_create_thread
-+ * kthread_run
-  *   Create a system thread to execute the routine specified
-  *
-  * Arguments:
-  *   func:  function to be executed in the thread
-  *   arg:   argument transferred to func function
-- *   flag:  thread creation flags.
-+ *   name:  thread name to create
-  *
-  * Return Value:
-- *   int:   0 on success or error codes
-+ *   cfs_task_t:   0 on success or error codes
-  *
-  * Notes:
-  *   N/A
-  */
- 
--int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
-+cfs_task_t kthread_run(int (*func)(void *), void *arg, char *name)
- {
-     cfs_handle_t  thread = NULL;
-     NTSTATUS      status;
-@@ -108,7 +108,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
-     context = cfs_alloc(sizeof(cfs_thread_context_t), CFS_ALLOC_ZERO);
- 
-     if (!context) {
--        return -ENOMEM;
-+	return ERR_PTR(-ENOMEM);
-     }
- 
-     context->func  = func;
-@@ -130,7 +130,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
- 
-         /* We need translate the nt status to linux error code */
- 
--        return cfs_error_code(status);
-+	return ERR_PTR(cfs_error_code(status));
-     }
- 
-     //
-@@ -139,7 +139,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
- 
-     ZwClose(thread);
- 
--    return 0;
-+	return (cfs_task_t)0;
- }
- 
- 
-@@ -529,18 +529,9 @@ cfs_time_t cfs_timer_deadline(cfs_timer_t * timer)
-     return timer->deadline;
- }
- 
--/*
-- * daemonize routine stub
-- */
--
--void cfs_daemonize(char *str)
-+int unshare_fs_struct()
- {
--    return;
--}
--
--int cfs_daemonize_ctxt(char *str) {
--    cfs_daemonize(str);
--    return 0;
-+	return 0;
- }
- 
- /*
-diff --git a/libcfs/libcfs/winnt/winnt-tcpip.c b/libcfs/libcfs/winnt/winnt-tcpip.c
-index 6fbf0a5..50d784f 100644
---- a/libcfs/libcfs/winnt/winnt-tcpip.c
-+++ b/libcfs/libcfs/winnt/winnt-tcpip.c
-@@ -5898,10 +5898,10 @@ ks_init_tdi_data()
-     }
-     for (i = 0; i < ks_data.ksnd_engine_nums; i++) {
- 		spin_lock_init(&ks_data.ksnd_engine_mgr[i].lock);
--        cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
--        cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
--        CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
--        cfs_create_thread(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], 0);
-+	cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
-+	cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
-+	CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
-+	kthread_run(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], "");
-     }
- 
-     /* register pnp handlers to watch network condition */
-diff --git a/libcfs/libcfs/workitem.c b/libcfs/libcfs/workitem.c
-index db839e5..309cfec 100644
---- a/libcfs/libcfs/workitem.c
-+++ b/libcfs/libcfs/workitem.c
-@@ -245,17 +245,7 @@ static int
- cfs_wi_scheduler (void *arg)
- {
- 	struct cfs_wi_sched	*sched = (cfs_wi_sched_t *)arg;
--	char			name[16];
--
--	if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
--		snprintf(name, sizeof(name), "%s_%02d_%02d",
--			 sched->ws_name, sched->ws_cpt, sched->ws_nthreads);
--	} else {
--		snprintf(name, sizeof(name), "%s_%02d",
--			 sched->ws_name, sched->ws_nthreads);
--	}
- 
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* CPT affinity scheduler? */
-@@ -463,6 +453,8 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
- 	rc = 0;
- #ifdef __KERNEL__
- 	while (nthrs > 0)  {
-+		char	name[16];
-+		cfs_task_t	*task;
- 		spin_lock(&cfs_wi_data.wi_glock);
- 		while (sched->ws_starting > 0) {
- 			spin_unlock(&cfs_wi_data.wi_glock);
-@@ -473,11 +465,21 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
- 		sched->ws_starting++;
- 		spin_unlock(&cfs_wi_data.wi_glock);
- 
--		rc = cfs_create_thread(cfs_wi_scheduler, sched, 0);
--		if (rc >= 0) {
-+		if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
-+			snprintf(name, sizeof(name), "%s_%02d_%02d",
-+				 sched->ws_name, sched->ws_cpt,
-+				 sched->ws_nthreads);
-+		} else {
-+			snprintf(name, sizeof(name), "%s_%02d",
-+				 sched->ws_name, sched->ws_nthreads);
-+		}
-+
-+		task = kthread_run(cfs_wi_scheduler, sched, name);
-+		if (!IS_ERR(task)) {
- 			nthrs--;
- 			continue;
- 		}
-+		rc = PTR_ERR(task);
- 
- 		CERROR("Failed to create thread for WI scheduler %s: %d\n",
- 		       name, rc);
-diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
-index 56be88a..53d8337 100644
---- a/lnet/klnds/gnilnd/gnilnd_cb.c
-+++ b/lnet/klnds/gnilnd/gnilnd_cb.c
-@@ -2609,7 +2609,6 @@ kgnilnd_reaper(void *arg)
- 	struct timer_list  timer;
- 	DEFINE_WAIT(wait);
- 
--	cfs_daemonize("kgnilnd_rpr");
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-@@ -4247,14 +4246,11 @@ kgnilnd_scheduler(void *arg)
- {
- 	int               threadno = (long)arg;
- 	kgn_device_t     *dev;
--	char              name[16];
- 	int               busy_loops = 0;
- 	DEFINE_WAIT(wait);
- 
- 	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
- 
--	snprintf(name, sizeof(name), "kgnilnd_sd_%02d", threadno);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-diff --git a/lnet/klnds/gnilnd/gnilnd_conn.c b/lnet/klnds/gnilnd/gnilnd_conn.c
-index 38aee5b..a64ed3f 100644
---- a/lnet/klnds/gnilnd/gnilnd_conn.c
-+++ b/lnet/klnds/gnilnd/gnilnd_conn.c
-@@ -2157,13 +2157,10 @@ int
- kgnilnd_dgram_waitq(void *arg)
- {
- 	kgn_device_t     *dev = (kgn_device_t *) arg;
--	char              name[16];
- 	gni_return_t      grc;
- 	__u64             readyid;
- 	DEFINE_WAIT(mover_done);
- 
--	snprintf(name, sizeof(name), "kgnilnd_dgn_%02d", dev->gnd_id);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	/* all gnilnd threads need to run fairly urgently */
-@@ -2312,15 +2309,12 @@ int
- kgnilnd_dgram_mover(void *arg)
- {
- 	kgn_device_t            *dev = (kgn_device_t *)arg;
--	char                     name[16];
- 	int                      rc, did_something;
- 	unsigned long            next_purge_check = jiffies - 1;
- 	unsigned long            timeout;
- 	struct timer_list        timer;
- 	DEFINE_WAIT(wait);
- 
--	snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 	/* all gnilnd threads need to run fairly urgently */
- 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
-diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
-index 10ae493..9dbc3a1 100644
---- a/lnet/klnds/gnilnd/gnilnd_stack.c
-+++ b/lnet/klnds/gnilnd/gnilnd_stack.c
-@@ -362,7 +362,6 @@ kgnilnd_ruhroh_thread(void *arg)
- 	int                i = 1;
- 	DEFINE_WAIT(wait);
- 
--	cfs_daemonize("kgnilnd_rr");
- 	cfs_block_allsigs();
- 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
- 	kgnilnd_data.kgn_ruhroh_running = 1;
-diff --git a/lnet/klnds/mxlnd/mxlnd.c b/lnet/klnds/mxlnd/mxlnd.c
-index 558bfaf..dbe998f 100644
---- a/lnet/klnds/mxlnd/mxlnd.c
-+++ b/lnet/klnds/mxlnd/mxlnd.c
-@@ -385,24 +385,25 @@ failed_with_init:
-  * mxlnd_thread_start - spawn a kernel thread with this function
-  * @fn - function pointer
-  * @arg - pointer to the parameter data
-+ * @name - name of new thread
-  *
-  * Returns 0 on success and a negative value on failure
-  */
- int
--mxlnd_thread_start(int (*fn)(void *arg), void *arg)
-+mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        int     pid = 0;
-+	cfs_task *task;
-         int     i   = (int) ((long) arg);
- 
-         cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
- 	init_completion(&kmxlnd_data.kmx_completions[i]);
- 
--        pid = cfs_create_thread(fn, arg, 0);
--        if (pid < 0) {
--                CERROR("cfs_create_thread() failed with %d\n", pid);
--                cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
--        }
--        return pid;
-+	task = kthread_run(fn, arg, name);
-+	if (IS_ERR(task)) {
-+		CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
-+		cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
-+	}
-+	return PTR_ERR(task);
- }
- 
- /**
-@@ -616,9 +617,13 @@ mxlnd_startup (lnet_ni_t *ni)
-                 *kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
- 
-         for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
-+		char                    name[24];
-+		memset(name, 0, sizeof(name));
-+		snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
-                 ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
--                if (ret < 0) {
--                        CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
-+		if (ret < 0) {
-+			CERROR("Starting mxlnd_request_waitd[%d] "
-+				"failed with %d\n", i, ret);
-                         cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-                         mx_wakeup(kmxlnd_data.kmx_endpt);
-                         for (--i; i >= 0; i--) {
-@@ -631,7 +636,8 @@ mxlnd_startup (lnet_ni_t *ni)
-                         goto failed;
-                 }
-         }
--        ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
-+				 "mxlnd_tx_queued");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-@@ -644,7 +650,8 @@ mxlnd_startup (lnet_ni_t *ni)
- 			nthreads * sizeof(struct completion));
-                 goto failed;
-         }
--        ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
-+				 "mxlnd_timeoutd");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-@@ -658,7 +665,8 @@ mxlnd_startup (lnet_ni_t *ni)
- 			nthreads * sizeof(struct completion));
-                 goto failed;
-         }
--        ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
-+	ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
-+				 "mxlnd_connd");
-         if (ret < 0) {
-                 CERROR("Starting mxlnd_connd failed with %d\n", ret);
-                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
-diff --git a/lnet/klnds/mxlnd/mxlnd_cb.c b/lnet/klnds/mxlnd/mxlnd_cb.c
-index 5b67392..4b3961b 100644
---- a/lnet/klnds/mxlnd/mxlnd_cb.c
-+++ b/lnet/klnds/mxlnd/mxlnd_cb.c
-@@ -2554,8 +2554,6 @@ mxlnd_tx_queued(void *arg)
- 	spinlock_t		*tx_q_lock = &kmxlnd_data.kmx_tx_queue_lock;
- 	rwlock_t		*g_lock  = &kmxlnd_data.kmx_global_lock;
- 
--	cfs_daemonize("mxlnd_tx_queued");
--
- 	while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
- 		ret = down_interruptible(&kmxlnd_data.kmx_tx_queue_sem);
- 		if (cfs_atomic_read(&kmxlnd_data.kmx_shutdown))
-@@ -3485,7 +3483,6 @@ int
- mxlnd_request_waitd(void *arg)
- {
-         long                    id              = (long) arg;
--        char                    name[24];
-         __u32                   result          = 0;
-         mx_return_t             mxret           = MX_SUCCESS;
-         mx_status_t             status;
-@@ -3497,10 +3494,6 @@ mxlnd_request_waitd(void *arg)
-         int                     count           = 0;
- #endif
- 
--        memset(name, 0, sizeof(name));
--        snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", id);
--        cfs_daemonize(name);
--
-         memset(&status, 0, sizeof(status));
- 
-         CDEBUG(D_NET, "%s starting\n", name);
-@@ -3965,8 +3958,6 @@ mxlnd_connd(void *arg)
- {
-         long                    id              = (long) arg;
- 
--        cfs_daemonize("mxlnd_connd");
--
-         CDEBUG(D_NET, "connd starting\n");
- 
-         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
-@@ -4040,8 +4031,6 @@ mxlnd_timeoutd(void *arg)
-         kmx_conn_t     *conn    = NULL;
- 	rwlock_t   *g_lock  = &kmxlnd_data.kmx_global_lock;
- 
--        cfs_daemonize("mxlnd_timeoutd");
--
-         CDEBUG(D_NET, "timeoutd starting\n");
- 
-         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c
-index 7d3c025..86298dd 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd.c
-@@ -3011,14 +3011,15 @@ kiblnd_base_startup(void)
-         kiblnd_data.kib_init = IBLND_INIT_DATA;
-         /*****************************************************/
- 
--        rc = kiblnd_thread_start(kiblnd_connd, NULL);
-+	rc = kiblnd_thread_start(kiblnd_connd, NULL, "kiblnd_connd");
-         if (rc != 0) {
-                 CERROR("Can't spawn o2iblnd connd: %d\n", rc);
-                 goto failed;
-         }
- 
--        if (*kiblnd_tunables.kib_dev_failover != 0)
--                rc = kiblnd_thread_start(kiblnd_failover_thread, NULL);
-+	if (*kiblnd_tunables.kib_dev_failover != 0)
-+		rc = kiblnd_thread_start(kiblnd_failover_thread, NULL,
-+					 "kiblnd_failover");
- 
-         if (rc != 0) {
-                 CERROR("Can't spawn o2iblnd failover thread: %d\n", rc);
-@@ -3060,9 +3061,11 @@ kiblnd_start_schedulers(struct kib_sched_info *sched)
- 
- 	for (i = 0; i < nthrs; i++) {
- 		long	id;
--
-+		char	name[20];
- 		id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
--		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id);
-+		snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
-+			 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
-+		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id, name);
- 		if (rc == 0)
- 			continue;
- 
-diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
-index 87c7cc0..7585657 100644
---- a/lnet/klnds/o2iblnd/o2iblnd.h
-+++ b/lnet/klnds/o2iblnd/o2iblnd.h
-@@ -1067,7 +1067,7 @@ void kiblnd_tunables_fini(void);
- 
- int  kiblnd_connd (void *arg);
- int  kiblnd_scheduler(void *arg);
--int  kiblnd_thread_start (int (*fn)(void *arg), void *arg);
-+int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
- int  kiblnd_failover_thread (void *arg);
- 
- int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
-diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c
-index 3cc7985..af92311 100644
---- a/lnet/klnds/o2iblnd/o2iblnd_cb.c
-+++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c
-@@ -1805,15 +1805,15 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
- }
- 
- int
--kiblnd_thread_start (int (*fn)(void *arg), void *arg)
-+kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = kthread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
--        cfs_atomic_inc (&kiblnd_data.kib_nthreads);
--        return (0);
-+	cfs_atomic_inc(&kiblnd_data.kib_nthreads);
-+	return 0;
- }
- 
- void
-@@ -3135,7 +3135,6 @@ kiblnd_connd (void *arg)
-         int                peer_index = 0;
-         unsigned long      deadline = jiffies;
- 
--        cfs_daemonize ("kiblnd_connd");
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init (&wait);
-@@ -3329,15 +3328,10 @@ kiblnd_scheduler(void *arg)
- 	cfs_waitlink_t		wait;
- 	unsigned long		flags;
- 	struct ib_wc		wc;
--	char			name[20];
- 	int			did_something;
- 	int			busy_loops = 0;
- 	int			rc;
- 
--	snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
--		 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
--
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	cfs_waitlink_init(&wait);
-@@ -3346,10 +3340,10 @@ kiblnd_scheduler(void *arg)
- 
- 	rc = cfs_cpt_bind(lnet_cpt_table(), sched->ibs_cpt);
- 	if (rc != 0) {
--		CWARN("Failed to bind %s on CPT %d, please verify whether "
-+		CWARN("Failed to bind on CPT %d, please verify whether "
- 		      "all CPUs are healthy and reload modules if necessary, "
- 		      "otherwise your system might under risk of low "
--		      "performance\n", name, sched->ibs_cpt);
-+		      "performance\n", sched->ibs_cpt);
- 	}
- 
- 	spin_lock_irqsave(&sched->ibs_lock, flags);
-@@ -3464,7 +3458,6 @@ kiblnd_failover_thread(void *arg)
- 
-         LASSERT (*kiblnd_tunables.kib_dev_failover != 0);
- 
--        cfs_daemonize ("kiblnd_failover");
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init(&wait);
-diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c
-index 791f5c2..2edf87d 100644
---- a/lnet/klnds/ptllnd/ptllnd.c
-+++ b/lnet/klnds/ptllnd/ptllnd.c
-@@ -643,6 +643,7 @@ kptllnd_base_startup (void)
-         struct timeval  tv;
-         lnet_process_id_t  target;
-         ptl_err_t       ptl_rc;
-+	char            name[16];
- 
-         if (*kptllnd_tunables.kptl_max_procs_per_node < 1) {
-                 CERROR("max_procs_per_node must be >= 1\n");
-@@ -824,6 +825,7 @@ kptllnd_base_startup (void)
-          * now that PTLLND_INIT_DATA state has been entered */
-         CDEBUG(D_NET, "starting %d scheduler threads\n", PTLLND_N_SCHED);
-         for (i = 0; i < PTLLND_N_SCHED; i++) {
-+		snprintf(name, sizeof(name), "kptllnd_sd_%02d", i);
-                 rc = kptllnd_thread_start(kptllnd_scheduler, (void *)((long)i));
-                 if (rc != 0) {
-                         CERROR("Can't spawn scheduler[%d]: %d\n", i, rc);
-@@ -831,7 +833,8 @@ kptllnd_base_startup (void)
-                 }
-         }
- 
--        rc = kptllnd_thread_start(kptllnd_watchdog, NULL);
-+	snprintf(name, sizeof(name), "kptllnd_wd_%02d", i);
-+	rc = kptllnd_thread_start(kptllnd_watchdog, NULL, name);
-         if (rc != 0) {
-                 CERROR("Can't spawn watchdog: %d\n", rc);
-                 goto failed;
-diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c
-index e815607..7be7e4d 100644
---- a/lnet/klnds/ptllnd/ptllnd_cb.c
-+++ b/lnet/klnds/ptllnd/ptllnd_cb.c
-@@ -651,26 +651,24 @@ kptllnd_thread_fini (void)
- }
- 
- int
--kptllnd_thread_start (int (*fn)(void *arg), void *arg)
-+kptllnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long                pid;
-+	cfs_task_t *task;
- 
--        cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
-+	cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
- 
--        pid = cfs_create_thread (fn, arg, 0);
--        if (pid >= 0)
--                return 0;
--
--        CERROR("Failed to start thread: error %d\n", (int)pid);
--        kptllnd_thread_fini();
--        return (int)pid;
-+	task = kthread_run(fn, arg, name);
-+	if (IS_ERR(task)) {
-+		CERROR("Failed to start thread: error %ld\n", PTR_ERR(task));
-+		kptllnd_thread_fini();
-+	}
-+	return PTR_ERR(task);
- }
- 
- int
- kptllnd_watchdog(void *arg)
- {
-         int                 id = (long)arg;
--        char                name[16];
-         cfs_waitlink_t      waitlink;
-         int                 stamp = 0;
-         int                 peer_index = 0;
-@@ -678,8 +676,6 @@ kptllnd_watchdog(void *arg)
-         int                 timeout;
-         int                 i;
- 
--        snprintf(name, sizeof(name), "kptllnd_wd_%02d", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&waitlink);
-@@ -740,7 +736,6 @@ int
- kptllnd_scheduler (void *arg)
- {
-         int                 id = (long)arg;
--        char                name[16];
-         cfs_waitlink_t      waitlink;
-         unsigned long       flags;
-         int                 did_something;
-@@ -749,8 +744,6 @@ kptllnd_scheduler (void *arg)
-         kptl_rx_buffer_t   *rxb;
-         kptl_tx_t          *tx;
- 
--        snprintf(name, sizeof(name), "kptllnd_sd_%02d", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&waitlink);
-diff --git a/lnet/klnds/qswlnd/qswlnd.c b/lnet/klnds/qswlnd/qswlnd.c
-index eb6c659..4df26ee 100644
---- a/lnet/klnds/qswlnd/qswlnd.c
-+++ b/lnet/klnds/qswlnd/qswlnd.c
-@@ -526,7 +526,8 @@ kqswnal_startup (lnet_ni_t *ni)
- 	/**********************************************************************/
- 	/* Spawn scheduling threads */
- 	for (i = 0; i < cfs_num_online_cpus(); i++) {
--		rc = kqswnal_thread_start (kqswnal_scheduler, NULL);
-+		rc = kqswnal_thread_start(kqswnal_scheduler, NULL,
-+					  "kqswnal_sched");
- 		if (rc != 0)
- 		{
- 			CERROR ("failed to spawn scheduling thread: %d\n", rc);
-diff --git a/lnet/klnds/qswlnd/qswlnd_cb.c b/lnet/klnds/qswlnd/qswlnd_cb.c
-index 243918b..50cc744 100644
---- a/lnet/klnds/qswlnd/qswlnd_cb.c
-+++ b/lnet/klnds/qswlnd/qswlnd_cb.c
-@@ -1655,15 +1655,15 @@ kqswnal_recv (lnet_ni_t     *ni,
- }
- 
- int
--kqswnal_thread_start (int (*fn)(void *arg), void *arg)
-+kqswnal_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = cfs_thread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
--        cfs_atomic_inc (&kqswnal_data.kqn_nthreads);
--        return (0);
-+	cfs_atomic_inc(&kqswnal_data.kqn_nthreads);
-+	return 0;
- }
- 
- void
-@@ -1682,7 +1682,6 @@ kqswnal_scheduler (void *arg)
-         int              counter = 0;
-         int              did_something;
- 
--        cfs_daemonize ("kqswnal_sched");
-         cfs_block_allsigs ();
- 
- 	spin_lock_irqsave(&kqswnal_data.kqn_sched_lock, flags);
-diff --git a/lnet/klnds/ralnd/ralnd.c b/lnet/klnds/ralnd/ralnd.c
-index ca68fef..eabefae 100644
---- a/lnet/klnds/ralnd/ralnd.c
-+++ b/lnet/klnds/ralnd/ralnd.c
-@@ -1566,6 +1566,7 @@ kranal_startup (lnet_ni_t *ni)
-         int               rc;
-         int               i;
-         kra_device_t     *dev;
-+	char		  name[16];
- 
-         LASSERT (ni->ni_lnd == &the_kralnd);
- 
-@@ -1658,14 +1659,16 @@ kranal_startup (lnet_ni_t *ni)
-         if (rc != 0)
-                 goto failed;
- 
--        rc = kranal_thread_start(kranal_reaper, NULL);
-+	rc = kranal_thread_start(kranal_reaper, NULL, "kranal_reaper");
-         if (rc != 0) {
-                 CERROR("Can't spawn ranal reaper: %d\n", rc);
-                 goto failed;
-         }
- 
-         for (i = 0; i < *kranal_tunables.kra_n_connd; i++) {
--                rc = kranal_thread_start(kranal_connd, (void *)(unsigned long)i);
-+		snprintf(name, sizeof(name), "kranal_connd_%02ld", i);
-+		rc = kranal_thread_start(kranal_connd,
-+					 (void *)(unsigned long)i, name);
-                 if (rc != 0) {
-                         CERROR("Can't spawn ranal connd[%d]: %d\n",
-                                i, rc);
-@@ -1691,7 +1694,8 @@ kranal_startup (lnet_ni_t *ni)
-         
-         for (i = 0; i < kranal_data.kra_ndevs; i++) {
-                 dev = &kranal_data.kra_devices[i];
--                rc = kranal_thread_start(kranal_scheduler, dev);
-+		snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
-+		rc = kranal_thread_start(kranal_scheduler, dev, name);
-                 if (rc != 0) {
-                         CERROR("Can't spawn ranal scheduler[%d]: %d\n",
-                                i, rc);
-diff --git a/lnet/klnds/ralnd/ralnd.h b/lnet/klnds/ralnd/ralnd.h
-index d9fd100..8b92cdc 100644
---- a/lnet/klnds/ralnd/ralnd.h
-+++ b/lnet/klnds/ralnd/ralnd.h
-@@ -452,7 +452,7 @@ extern kra_peer_t *kranal_find_peer_locked (lnet_nid_t nid);
- extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
- extern int kranal_del_peer (lnet_nid_t nid);
- extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
--extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
-+extern int kranal_thread_start(int(*fn)(void *arg), void *arg, char *name);
- extern int kranal_connd (void *arg);
- extern int kranal_reaper (void *arg);
- extern int kranal_scheduler (void *arg);
-diff --git a/lnet/klnds/ralnd/ralnd_cb.c b/lnet/klnds/ralnd/ralnd_cb.c
-index 8c7f053..05de1c1 100644
---- a/lnet/klnds/ralnd/ralnd_cb.c
-+++ b/lnet/klnds/ralnd/ralnd_cb.c
-@@ -891,15 +891,13 @@ kranal_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
- }
- 
- int
--kranal_thread_start (int(*fn)(void *arg), void *arg)
-+kranal_thread_start(int(*fn)(void *arg), void *arg, char *name)
- {
--        long    pid = cfs_create_thread(fn, arg, 0);
-+	cfs_task_t *task = cfs_thread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return(int)pid;
--
--        cfs_atomic_inc(&kranal_data.kra_nthreads);
--        return 0;
-+	if (!IS_ERR(task))
-+		cfs_atomic_inc(&kranal_data.kra_nthreads);
-+	return PTR_ERR(task);
- }
- 
- void
-@@ -1054,15 +1052,12 @@ int
- kranal_connd (void *arg)
- {
-         long               id = (long)arg;
--        char               name[16];
-         cfs_waitlink_t     wait;
-         unsigned long      flags;
-         kra_peer_t        *peer;
-         kra_acceptsock_t  *ras;
-         int                did_something;
- 
--        snprintf(name, sizeof(name), "kranal_connd_%02ld", id);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&wait);
-@@ -1159,7 +1154,6 @@ kranal_reaper (void *arg)
-         long               next_min_timeout = CFS_MAX_SCHEDULE_TIMEOUT;
-         long               current_min_timeout = 1;
- 
--        cfs_daemonize("kranal_reaper");
-         cfs_block_allsigs();
- 
-         cfs_waitlink_init(&wait);
-@@ -1932,7 +1926,6 @@ kranal_scheduler (void *arg)
- {
-         kra_device_t     *dev = (kra_device_t *)arg;
-         cfs_waitlink_t    wait;
--        char              name[16];
-         kra_conn_t       *conn;
-         unsigned long     flags;
-         unsigned long     deadline;
-@@ -1945,8 +1938,6 @@ kranal_scheduler (void *arg)
-         int               dropped_lock;
-         int               busy_loops = 0;
- 
--        snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         dev->rad_scheduler = current;
-diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c
-index 9376b08..c70ceeb 100644
---- a/lnet/klnds/socklnd/socklnd.c
-+++ b/lnet/klnds/socklnd/socklnd.c
-@@ -2465,12 +2465,15 @@ ksocknal_base_startup(void)
-         }
- 
-         for (i = 0; i < *ksocknal_tunables.ksnd_nconnds; i++) {
-+		char name[16];
- 		spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- 		ksocknal_data.ksnd_connd_starting++;
- 		spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- 
-+
-+		snprintf(name, sizeof(name), "socknal_cd%02d", i);
- 		rc = ksocknal_thread_start(ksocknal_connd,
--					   (void *)((ulong_ptr_t)i));
-+					   (void *)((ulong_ptr_t)i), name);
- 		if (rc != 0) {
- 			spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
- 			ksocknal_data.ksnd_connd_starting--;
-@@ -2480,7 +2483,7 @@ ksocknal_base_startup(void)
-                 }
-         }
- 
--        rc = ksocknal_thread_start (ksocknal_reaper, NULL);
-+	rc = ksocknal_thread_start(ksocknal_reaper, NULL, "socknal_reaper");
-         if (rc != 0) {
-                 CERROR ("Can't spawn socknal reaper: %d\n", rc);
-                 goto failed;
-@@ -2724,10 +2727,16 @@ ksocknal_start_schedulers(struct ksock_sched_info *info)
- 	}
- 
- 	for (i = 0; i < nthrs; i++) {
--		long	id;
--
-+		long		id;
-+		char		name[20];
-+		ksock_sched_t	*sched;
- 		id = KSOCK_THREAD_ID(info->ksi_cpt, info->ksi_nthreads + i);
--		rc = ksocknal_thread_start(ksocknal_scheduler, (void *)id);
-+		sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
-+		snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
-+			 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
-+
-+		rc = ksocknal_thread_start(ksocknal_scheduler,
-+					   (void *)id, name);
- 		if (rc == 0)
- 			continue;
- 
-diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
-index abdf25a..1094397 100644
---- a/lnet/klnds/socklnd/socklnd.h
-+++ b/lnet/klnds/socklnd/socklnd.h
-@@ -581,7 +581,7 @@ extern void ksocknal_txlist_done (lnet_ni_t *ni, cfs_list_t *txlist,
-                                   int error);
- extern void ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive);
- extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when);
--extern int ksocknal_thread_start (int (*fn)(void *arg), void *arg);
-+extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
- extern void ksocknal_thread_fini (void);
- extern void ksocknal_launch_all_connections_locked (ksock_peer_t *peer);
- extern ksock_route_t *ksocknal_find_connectable_route_locked (ksock_peer_t *peer);
-diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c
-index b24127d..e624753 100644
---- a/lnet/klnds/socklnd/socklnd_cb.c
-+++ b/lnet/klnds/socklnd/socklnd_cb.c
-@@ -1007,17 +1007,17 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
- }
- 
- int
--ksocknal_thread_start (int (*fn)(void *arg), void *arg)
-+ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
- {
--        long          pid = cfs_create_thread (fn, arg, 0);
-+	cfs_task_t *task = kthread_run(fn, arg, name);
- 
--        if (pid < 0)
--                return ((int)pid);
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
- 	write_lock_bh(&ksocknal_data.ksnd_global_lock);
--        ksocknal_data.ksnd_nthreads++;
-+	ksocknal_data.ksnd_nthreads++;
- 	write_unlock_bh(&ksocknal_data.ksnd_global_lock);
--        return (0);
-+	return 0;
- }
- 
- void
-@@ -1396,22 +1396,17 @@ int ksocknal_scheduler(void *arg)
- 	ksock_tx_t		*tx;
- 	int			rc;
- 	int			nloops = 0;
--	char			name[20];
- 	long			id = (long)arg;
- 
- 	info = ksocknal_data.ksnd_sched_info[KSOCK_THREAD_CPT(id)];
- 	sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
- 
--	snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
--		 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
--
--	cfs_daemonize(name);
- 	cfs_block_allsigs();
- 
- 	rc = cfs_cpt_bind(lnet_cpt_table(), info->ksi_cpt);
- 	if (rc != 0) {
--		CERROR("Can't set CPT affinity for %s to %d: %d\n",
--		       name, info->ksi_cpt, rc);
-+		CERROR("Can't set CPT affinity to %d: %d\n",
-+		       info->ksi_cpt, rc);
- 	}
- 
- 	spin_lock_bh(&sched->kss_lock);
-@@ -2023,6 +2018,7 @@ ksocknal_connect (ksock_route_t *route)
- static int
- ksocknal_connd_check_start(long sec, long *timeout)
- {
-+	char name[16];
-         int rc;
-         int total = ksocknal_data.ksnd_connd_starting +
-                     ksocknal_data.ksnd_connd_running;
-@@ -2060,7 +2056,8 @@ ksocknal_connd_check_start(long sec, long *timeout)
- 	spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
- 
- 	/* NB: total is the next id */
--	rc = ksocknal_thread_start(ksocknal_connd, (void *)((long)total));
-+	snprintf(name, sizeof(name), "socknal_cd%02d", total);
-+	rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
- 
- 	spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
-         if (rc == 0)
-@@ -2145,15 +2142,11 @@ int
- ksocknal_connd (void *arg)
- {
- 	spinlock_t    *connd_lock = &ksocknal_data.ksnd_connd_lock;
--        long               id = (long)(long_ptr_t)arg;
--        char               name[16];
-         ksock_connreq_t   *cr;
-         cfs_waitlink_t     wait;
-         int                nloops = 0;
-         int                cons_retry = 0;
- 
--        snprintf (name, sizeof (name), "socknal_cd%02ld", id);
--        cfs_daemonize (name);
-         cfs_block_allsigs ();
- 
-         cfs_waitlink_init (&wait);
-@@ -2546,7 +2539,6 @@ ksocknal_reaper (void *arg)
-         int                peer_index = 0;
-         cfs_time_t         deadline = cfs_time_current();
- 
--        cfs_daemonize ("socknal_reaper");
-         cfs_block_allsigs ();
- 
-         CFS_INIT_LIST_HEAD(&enomem_conns);
-diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
-index 9e9b236..9bdac05 100644
---- a/lnet/lnet/acceptor.c
-+++ b/lnet/lnet/acceptor.c
-@@ -389,7 +389,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
- int
- lnet_acceptor(void *arg)
- {
--        char           name[16];
-         cfs_socket_t  *newsock;
-         int            rc;
-         __u32          magic;
-@@ -399,8 +398,6 @@ lnet_acceptor(void *arg)
- 
-         LASSERT (lnet_acceptor_state.pta_sock == NULL);
- 
--        snprintf(name, sizeof(name), "acceptor_%03d", accept_port);
--        cfs_daemonize(name);
-         cfs_block_allsigs();
- 
-         rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock,
-@@ -532,9 +529,11 @@ lnet_acceptor_start(void)
- 	if (lnet_count_acceptor_nis() == 0)  /* not required */
- 		return 0;
- 
--	rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
--	if (rc2 < 0) {
--		CERROR("Can't start acceptor thread: %d\n", rc);
-+	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
-+				  (void *)(ulong_ptr_t)secure,
-+				  "acceptor_%03ld", secure));
-+	if (IS_ERR_VALUE(rc2)) {
-+		CERROR("Can't start acceptor thread: %ld\n", rc2);
- 		fini_completion(&lnet_acceptor_state.pta_signal);
- 
- 		return -ESRCH;
-diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c
-index 770345d..9d57479 100644
---- a/lnet/lnet/module.c
-+++ b/lnet/lnet/module.c
-@@ -127,11 +127,11 @@ init_lnet(void)
-         rc = libcfs_register_ioctl(&lnet_ioctl_handler);
-         LASSERT (rc == 0);
- 
--        if (config_on_load) {
--                /* Have to schedule a separate thread to avoid deadlocking
--                 * in modload */
--                (void) cfs_create_thread(lnet_configure, NULL, 0);
--        }
-+	if (config_on_load) {
-+		/* Have to schedule a separate thread to avoid deadlocking
-+		 * in modload */
-+		(void) kthread_run(lnet_configure, NULL, "lnet_initd");
-+	}
- 
-         RETURN(0);
- }
-diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c
-index 80c0a59..50495a6 100644
---- a/lnet/lnet/router.c
-+++ b/lnet/lnet/router.c
-@@ -1095,16 +1095,17 @@ lnet_router_checker_start(void)
- 
-         the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
- #ifdef __KERNEL__
--        rc = cfs_create_thread(lnet_router_checker, NULL, 0);
--        if (rc < 0) {
--                CERROR("Can't start router checker thread: %d\n", rc);
--                /* block until event callback signals exit */
-+	rc = PTR_ERR(kthread_run(lnet_router_checker,
-+				 NULL, "router_checker"));
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("Can't start router checker thread: %d\n", rc);
-+		/* block until event callback signals exit */
- 		down(&the_lnet.ln_rc_signal);
--                rc = LNetEQFree(the_lnet.ln_rc_eqh);
--                LASSERT (rc == 0);
--                the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
--                return -ENOMEM;
--        }
-+		rc = LNetEQFree(the_lnet.ln_rc_eqh);
-+		LASSERT(rc == 0);
-+		the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
-+		return -ENOMEM;
-+	}
- #endif
- 
-         if (check_routers_before_use) {
-@@ -1230,7 +1231,6 @@ lnet_router_checker(void *arg)
-         lnet_peer_t       *rtr;
-         cfs_list_t        *entry;
- 
--        cfs_daemonize("router_checker");
-         cfs_block_allsigs();
- 
-         LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING);
-diff --git a/lnet/selftest/timer.c b/lnet/selftest/timer.c
-index a66a336..f2f8262 100644
---- a/lnet/selftest/timer.c
-+++ b/lnet/selftest/timer.c
-@@ -183,7 +183,6 @@ stt_timer_main (void *arg)
- 
-         SET_BUT_UNUSED(rc);
- 
--        cfs_daemonize("st_timer");
-         cfs_block_allsigs();
- 
-         while (!stt_data.stt_shuttingdown) {
-@@ -204,13 +203,13 @@ stt_timer_main (void *arg)
- int
- stt_start_timer_thread (void)
- {
--        long pid;
-+	cfs_task_t *task;
- 
--        LASSERT (!stt_data.stt_shuttingdown);
-+	LASSERT(!stt_data.stt_shuttingdown);
- 
--        pid = cfs_create_thread(stt_timer_main, NULL, 0);
--        if (pid < 0)
--                return (int)pid;
-+	task = kthread_run(stt_timer_main, NULL, "st_timer");
-+	if (IS_ERR(task))
-+		return PTR_ERR(task);
- 
- 	spin_lock(&stt_data.stt_lock);
- 	stt_data.stt_nthreads++;
-diff --git a/lnet/ulnds/socklnd/usocklnd.c b/lnet/ulnds/socklnd/usocklnd.c
-index cc8c4c8..d4d5027 100644
---- a/lnet/ulnds/socklnd/usocklnd.c
-+++ b/lnet/ulnds/socklnd/usocklnd.c
-@@ -296,14 +296,15 @@ usocklnd_base_startup()
-         pthread_rwlock_init(&usock_data.ud_peers_lock, NULL);
- 
-         /* Spawn poll threads */
--        for (i = 0; i < usock_data.ud_npollthreads; i++) {
--                rc = cfs_create_thread(usocklnd_poll_thread,
--                                       &usock_data.ud_pollthreads[i], 0);
--                if (rc) {
--                        usocklnd_base_shutdown(i);
--                        return rc;
--                }
--        }
-+	for (i = 0; i < usock_data.ud_npollthreads; i++) {
-+		rc = PTR_ERR(kthread_run(usocklnd_poll_thread,
-+					     &usock_data.ud_pollthreads[i],
-+					     ""));
-+		if (IS_ERR_VALUE(rc)) {
-+			usocklnd_base_shutdown(i);
-+			return rc;
-+		}
-+	}
- 
-         usock_data.ud_state = UD_STATE_INITIALIZED;
- 
-diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
-index 2e3a1d5..e61583a 100644
---- a/lustre/ldlm/ldlm_lib.c
-+++ b/lustre/ldlm/ldlm_lib.c
-@@ -1975,19 +1975,12 @@ static int target_recovery_thread(void *arg)
-         struct ptlrpc_request *req;
-         struct target_recovery_data *trd = &obd->obd_recovery_data;
-         unsigned long delta;
--        unsigned long flags;
-         struct lu_env *env;
-         struct ptlrpc_thread *thread = NULL;
-         int rc = 0;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("tgt_recov");
--
--        SIGNAL_MASK_LOCK(current, flags);
--        sigfillset(&current->blocked);
--        RECALC_SIGPENDING;
--        SIGNAL_MASK_UNLOCK(current, flags);
--
-+	unshare_fs_struct();
-         OBD_ALLOC_PTR(thread);
-         if (thread == NULL)
-                 RETURN(-ENOMEM);
-@@ -2112,22 +2105,24 @@ static int target_recovery_thread(void *arg)
- static int target_start_recovery_thread(struct lu_target *lut,
-                                         svc_handler_t handler)
- {
--        struct obd_device *obd = lut->lut_obd;
--        int rc = 0;
--        struct target_recovery_data *trd = &obd->obd_recovery_data;
-+	struct obd_device *obd = lut->lut_obd;
-+	int rc = 0;
-+	struct target_recovery_data *trd = &obd->obd_recovery_data;
- 
--        memset(trd, 0, sizeof(*trd));
-+	memset(trd, 0, sizeof(*trd));
- 	init_completion(&trd->trd_starting);
- 	init_completion(&trd->trd_finishing);
--        trd->trd_recovery_handler = handler;
-+	trd->trd_recovery_handler = handler;
- 
--        if (cfs_create_thread(target_recovery_thread, lut, 0) > 0) {
-+	if (!IS_ERR(kthread_run(target_recovery_thread,
-+				lut, "tgt_recov"))) {
- 		wait_for_completion(&trd->trd_starting);
--                LASSERT(obd->obd_recovering != 0);
--        } else
--                rc = -ECHILD;
-+		LASSERT(obd->obd_recovering != 0);
-+	} else {
-+		rc = -ECHILD;
-+	}
- 
--        return rc;
-+	return rc;
- }
- 
- void target_stop_recovery_thread(struct obd_device *obd)
-diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 31925ff..3a9bf14 100644
---- a/lustre/ldlm/ldlm_lockd.c
-+++ b/lustre/ldlm/ldlm_lockd.c
-@@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
-         int do_dump;
- 
-         ENTRY;
--        cfs_daemonize("ldlm_elt");
- 
-         expired_lock_thread.elt_state = ELT_READY;
-         cfs_waitq_signal(&expired_lock_thread.elt_waitq);
-@@ -2570,14 +2569,17 @@ static int ldlm_bl_thread_main(void *arg);
- static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
- {
- 	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
--	int rc;
-+	cfs_task_t *task;
- 
- 	init_completion(&bltd.bltd_comp);
--	rc = cfs_create_thread(ldlm_bl_thread_main, &bltd, 0);
--	if (rc < 0) {
--		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %d\n",
--		       cfs_atomic_read(&blp->blp_num_threads), rc);
--		return rc;
-+	bltd.bltd_num = cfs_atomic_read(&blp->blp_num_threads);
-+	snprintf(bltd.bltd_name, sizeof(bltd.bltd_name) - 1,
-+		"ldlm_bl_%02d", bltd.bltd_num);
-+	task = kthread_run(ldlm_bl_thread_main, &bltd, bltd.bltd_name);
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
-+		       cfs_atomic_read(&blp->blp_num_threads), PTR_ERR(task));
-+		return PTR_ERR(task);
- 	}
- 	wait_for_completion(&bltd.bltd_comp);
- 
-@@ -2601,14 +2603,9 @@ static int ldlm_bl_thread_main(void *arg)
- 
-                 blp = bltd->bltd_blp;
- 
--                bltd->bltd_num =
--                        cfs_atomic_inc_return(&blp->blp_num_threads) - 1;
-+		cfs_atomic_inc(&blp->blp_num_threads);
-                 cfs_atomic_inc(&blp->blp_busy_threads);
- 
--                snprintf(bltd->bltd_name, sizeof(bltd->bltd_name) - 1,
--                        "ldlm_bl_%02d", bltd->bltd_num);
--                cfs_daemonize(bltd->bltd_name);
--
- 		complete(&bltd->bltd_comp);
-                 /* cannot use bltd after this, it is only on caller's stack */
-         }
-@@ -2948,22 +2945,22 @@ static int ldlm_setup(void)
- 	}
- 
- # ifdef HAVE_SERVER_SUPPORT
--        CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
--        expired_lock_thread.elt_state = ELT_STOPPED;
--        cfs_waitq_init(&expired_lock_thread.elt_waitq);
-+	CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
-+	expired_lock_thread.elt_state = ELT_STOPPED;
-+	cfs_waitq_init(&expired_lock_thread.elt_waitq);
- 
--        CFS_INIT_LIST_HEAD(&waiting_locks_list);
-+	CFS_INIT_LIST_HEAD(&waiting_locks_list);
- 	spin_lock_init(&waiting_locks_spinlock);
--        cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
-+	cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
- 
--        rc = cfs_create_thread(expired_lock_main, NULL, CFS_DAEMON_FLAGS);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(expired_lock_main, NULL, "ldlm_elt"));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("Cannot start ldlm expired-lock thread: %d\n", rc);
- 		GOTO(out, rc);
- 	}
- 
--        cfs_wait_event(expired_lock_thread.elt_waitq,
--                       expired_lock_thread.elt_state == ELT_READY);
-+	cfs_wait_event(expired_lock_thread.elt_waitq,
-+		       expired_lock_thread.elt_state == ELT_READY);
- # endif /* HAVE_SERVER_SUPPORT */
- 
- 	rc = ldlm_pools_init();
-diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
-index d724a2d..fa14f66 100644
---- a/lustre/ldlm/ldlm_pool.c
-+++ b/lustre/ldlm/ldlm_pool.c
-@@ -1295,15 +1295,13 @@ EXPORT_SYMBOL(ldlm_pools_recalc);
- static int ldlm_pools_thread_main(void *arg)
- {
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
--        char *t_name = "ldlm_poold";
-         ENTRY;
- 
--        cfs_daemonize(t_name);
-         thread_set_flags(thread, SVC_RUNNING);
-         cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-         CDEBUG(D_DLMTRACE, "%s: pool thread starting, process %d\n",
--               t_name, cfs_curproc_pid());
-+		"ldlm_poold", cfs_curproc_pid());
- 
-         while (1) {
-                 struct l_wait_info lwi;
-@@ -1335,43 +1333,38 @@ static int ldlm_pools_thread_main(void *arg)
-         cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-         CDEBUG(D_DLMTRACE, "%s: pool thread exiting, process %d\n",
--               t_name, cfs_curproc_pid());
-+		"ldlm_poold", cfs_curproc_pid());
- 
- 	complete_and_exit(&ldlm_pools_comp, 0);
- }
- 
- static int ldlm_pools_thread_start(void)
- {
--        struct l_wait_info lwi = { 0 };
--        int rc;
--        ENTRY;
-+	struct l_wait_info lwi = { 0 };
-+	cfs_task_t *task;
-+	ENTRY;
- 
--        if (ldlm_pools_thread != NULL)
--                RETURN(-EALREADY);
-+	if (ldlm_pools_thread != NULL)
-+		RETURN(-EALREADY);
- 
--        OBD_ALLOC_PTR(ldlm_pools_thread);
--        if (ldlm_pools_thread == NULL)
--                RETURN(-ENOMEM);
-+	OBD_ALLOC_PTR(ldlm_pools_thread);
-+	if (ldlm_pools_thread == NULL)
-+		RETURN(-ENOMEM);
- 
- 	init_completion(&ldlm_pools_comp);
--        cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
--
--        /*
--         * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
--         * just drop the VM and FILES in cfs_daemonize() right away.
--         */
--        rc = cfs_create_thread(ldlm_pools_thread_main, ldlm_pools_thread,
--                               CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("Can't start pool thread, error %d\n",
--                       rc);
--                OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
--                ldlm_pools_thread = NULL;
--                RETURN(rc);
--        }
--        l_wait_event(ldlm_pools_thread->t_ctl_waitq,
--                     thread_is_running(ldlm_pools_thread), &lwi);
--        RETURN(0);
-+	cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
-+
-+	task = kthread_run(ldlm_pools_thread_main, ldlm_pools_thread,
-+			   "ldlm_poold");
-+	if (IS_ERR(task)) {
-+		CERROR("Can't start pool thread, error %ld\n", PTR_ERR(task));
-+		OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
-+		ldlm_pools_thread = NULL;
-+		RETURN(PTR_ERR(task));
-+	}
-+	l_wait_event(ldlm_pools_thread->t_ctl_waitq,
-+		     thread_is_running(ldlm_pools_thread), &lwi);
-+	RETURN(0);
- }
- 
- static void ldlm_pools_thread_stop(void)
-diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c
-index 1d489e6..5e269b3 100644
---- a/lustre/llite/llite_capa.c
-+++ b/lustre/llite/llite_capa.c
-@@ -173,8 +173,6 @@ static int capa_thread_main(void *unused)
-         int rc;
-         ENTRY;
- 
--        cfs_daemonize("ll_capa");
--
-         thread_set_flags(&ll_capa_thread, SVC_RUNNING);
-         cfs_waitq_signal(&ll_capa_thread.t_ctl_waitq);
- 
-@@ -293,20 +291,21 @@ void ll_capa_timer_callback(unsigned long unused)
- 
- int ll_capa_thread_start(void)
- {
--        int rc;
--        ENTRY;
-+	cfs_task_t *task;
-+	ENTRY;
- 
--        cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
-+	cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
- 
--        rc = cfs_create_thread(capa_thread_main, NULL, 0);
--        if (rc < 0) {
--                CERROR("cannot start expired capa thread: rc %d\n", rc);
--                RETURN(rc);
--        }
--        cfs_wait_event(ll_capa_thread.t_ctl_waitq,
--                       thread_is_running(&ll_capa_thread));
-+	task = kthread_run(capa_thread_main, NULL, "ll_capa");
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start expired capa thread: rc %ld\n",
-+			PTR_ERR(task));
-+		RETURN(PTR_ERR(task));
-+	}
-+	cfs_wait_event(ll_capa_thread.t_ctl_waitq,
-+		       thread_is_running(&ll_capa_thread));
- 
--        RETURN(0);
-+	RETURN(0);
- }
- 
- void ll_capa_thread_stop(void)
-diff --git a/lustre/llite/llite_close.c b/lustre/llite/llite_close.c
-index 26a2c8c..f1a1415 100644
---- a/lustre/llite/llite_close.c
-+++ b/lustre/llite/llite_close.c
-@@ -349,12 +349,6 @@ static int ll_close_thread(void *arg)
-         struct ll_close_queue *lcq = arg;
-         ENTRY;
- 
--        {
--                char name[CFS_CURPROC_COMM_MAX];
--                snprintf(name, sizeof(name) - 1, "ll_close");
--                cfs_daemonize(name);
--        }
--
- 	complete(&lcq->lcq_comp);
- 
-         while (1) {
-@@ -382,25 +376,25 @@ static int ll_close_thread(void *arg)
- 
- int ll_close_thread_start(struct ll_close_queue **lcq_ret)
- {
--        struct ll_close_queue *lcq;
--        pid_t pid;
-+	struct ll_close_queue *lcq;
-+	cfs_task_t *task;
- 
--        if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
--                return -EINTR;
-+	if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
-+		return -EINTR;
- 
--        OBD_ALLOC(lcq, sizeof(*lcq));
--        if (lcq == NULL)
--                return -ENOMEM;
-+	OBD_ALLOC(lcq, sizeof(*lcq));
-+	if (lcq == NULL)
-+		return -ENOMEM;
- 
- 	spin_lock_init(&lcq->lcq_lock);
- 	CFS_INIT_LIST_HEAD(&lcq->lcq_head);
- 	cfs_waitq_init(&lcq->lcq_waitq);
- 	init_completion(&lcq->lcq_comp);
- 
--	pid = cfs_create_thread(ll_close_thread, lcq, 0);
--	if (pid < 0) {
-+	task = kthread_run(ll_close_thread, lcq, "ll_close");
-+	if (IS_ERR(task)) {
- 		OBD_FREE(lcq, sizeof(*lcq));
--		return pid;
-+		return PTR_ERR(task);
- 	}
- 
- 	wait_for_completion(&lcq->lcq_comp);
-diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
-index 4c58181..1d4e2e8 100644
---- a/lustre/llite/lloop.c
-+++ b/lustre/llite/lloop.c
-@@ -420,8 +420,6 @@ static int loop_thread(void *data)
-         int refcheck;
-         int ret = 0;
- 
--        daemonize("lloop%d", lo->lo_number);
--
-         set_user_nice(current, -20);
- 
-         lo->lo_state = LLOOP_BOUND;
-@@ -552,13 +550,13 @@ static int loop_set_fd(struct lloop_device *lo, struct file *unused,
-         set_capacity(disks[lo->lo_number], size);
-         bd_set_size(bdev, size << 9);
- 
--        set_blocksize(bdev, lo->lo_blocksize);
-+	set_blocksize(bdev, lo->lo_blocksize);
- 
--        cfs_create_thread(loop_thread, lo, CLONE_KERNEL);
-+	kthread_run(loop_thread, lo, "lloop%d", lo->lo_number);
- 	down(&lo->lo_sem);
--        return 0;
-+	return 0;
- 
-- out:
-+out:
-         /* This is safe: open() is still holding a reference. */
-         cfs_module_put(THIS_MODULE);
-         return error;
-diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
-index 6d5b7af..3211557 100644
---- a/lustre/llite/statahead.c
-+++ b/lustre/llite/statahead.c
-@@ -981,12 +981,6 @@ static int ll_agl_thread(void *arg)
-         struct l_wait_info        lwi    = { 0 };
-         ENTRY;
- 
--        {
--                char pname[16];
--                snprintf(pname, 15, "ll_agl_%u", plli->lli_opendir_pid);
--                cfs_daemonize(pname);
--        }
--
-         CDEBUG(D_READA, "agl thread started: [pid %d] [parent %.*s]\n",
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-@@ -1040,25 +1034,28 @@ static int ll_agl_thread(void *arg)
- 
- static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
- {
--        struct ptlrpc_thread *thread = &sai->sai_agl_thread;
--        struct l_wait_info    lwi    = { 0 };
--        int                   rc;
--        ENTRY;
-+	struct ptlrpc_thread *thread = &sai->sai_agl_thread;
-+	struct l_wait_info    lwi    = { 0 };
-+	struct ll_inode_info  *plli;
-+	cfs_task_t	      *task;
-+	ENTRY;
- 
--        CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
--               cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
-+	CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
-+	       cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
--        rc = cfs_create_thread(ll_agl_thread, parent, 0);
--        if (rc < 0) {
--                CERROR("can't start ll_agl thread, rc: %d\n", rc);
--                thread_set_flags(thread, SVC_STOPPED);
--                RETURN_EXIT;
--        }
-+	plli = ll_i2info(parent->d_inode);
-+	task = kthread_run(ll_agl_thread, parent,
-+			       "ll_agl_%u", plli->lli_opendir_pid);
-+	if (IS_ERR(task)) {
-+		CERROR("can't start ll_agl thread, rc: %ld\n", PTR_ERR(task));
-+		thread_set_flags(thread, SVC_STOPPED);
-+		RETURN_EXIT;
-+	}
- 
--        l_wait_event(thread->t_ctl_waitq,
--                     thread_is_running(thread) || thread_is_stopped(thread),
--                     &lwi);
--        EXIT;
-+	l_wait_event(thread->t_ctl_waitq,
-+		     thread_is_running(thread) || thread_is_stopped(thread),
-+		     &lwi);
-+	EXIT;
- }
- 
- static int ll_statahead_thread(void *arg)
-@@ -1079,12 +1076,6 @@ static int ll_statahead_thread(void *arg)
-         struct l_wait_info        lwi    = { 0 };
-         ENTRY;
- 
--        {
--                char pname[16];
--                snprintf(pname, 15, "ll_sa_%u", plli->lli_opendir_pid);
--                cfs_daemonize(pname);
--        }
--
-         CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-@@ -1548,6 +1539,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
-         struct ptlrpc_thread     *thread;
-         struct l_wait_info        lwi   = { 0 };
-         int                       rc    = 0;
-+	struct ll_inode_info     *plli;
-         ENTRY;
- 
-         LASSERT(lli->lli_opendir_pid == cfs_curproc_pid());
-@@ -1693,11 +1685,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
-                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
- 
-         lli->lli_sai = sai;
--        rc = cfs_create_thread(ll_statahead_thread, parent, 0);
--        thread = &sai->sai_thread;
--        if (rc < 0) {
--                CERROR("can't start ll_sa thread, rc: %d\n", rc);
--                dput(parent);
-+
-+	plli = ll_i2info(parent->d_inode);
-+	rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
-+				 "ll_sa_%u", plli->lli_opendir_pid));
-+	thread = &sai->sai_thread;
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("can't start ll_sa thread, rc: %d\n", rc);
-+		dput(parent);
-                 lli->lli_opendir_key = NULL;
-                 thread_set_flags(thread, SVC_STOPPED);
-                 thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index c9aa7a0..ead4bcf 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -1566,13 +1566,6 @@ static int mdc_changelog_send_thread(void *csdata)
-         CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
-                cs->cs_fp, cs->cs_startrec);
- 
--        /*
--         * It's important to daemonize here to close unused FDs.
--         * The write fd from pipe is already opened by the caller,
--         * so it's fine to clear all files here
--         */
--        cfs_daemonize("mdc_clg_send_thread");
--
-         OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
-         if (cs->cs_buf == NULL)
-                 GOTO(out, rc = -ENOMEM);
-@@ -1609,12 +1602,10 @@ out:
- 		llog_cat_close(NULL, llh);
-         if (ctxt)
-                 llog_ctxt_put(ctxt);
--        if (cs->cs_buf)
--                OBD_FREE(cs->cs_buf, CR_MAXSIZE);
--        OBD_FREE_PTR(cs);
--        /* detach from parent process so we get cleaned up */
--        cfs_daemonize("cl_send");
--        return rc;
-+	if (cs->cs_buf)
-+		OBD_FREE(cs->cs_buf, CR_MAXSIZE);
-+	OBD_FREE_PTR(cs);
-+	return rc;
- }
- 
- static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1634,13 +1625,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
- 	cs->cs_fp = fget(icc->icc_id);
- 	cs->cs_flags = icc->icc_flags;
- 
--        /* New thread because we should return to user app before
--           writing into our pipe */
--        rc = cfs_create_thread(mdc_changelog_send_thread, cs, CFS_DAEMON_FLAGS);
--        if (rc >= 0) {
--                CDEBUG(D_CHANGELOG, "start changelog thread: %d\n", rc);
--                return 0;
--        }
-+	/*
-+	 * New thread because we should return to user app before
-+	 * writing into our pipe
-+	 */
-+        rc = PTR_ERR(kthread_run(mdc_changelog_send_thread, cs,
-+				 "mdc_clg_send_thread"));
-+	if (!IS_ERR_VALUE(rc)) {
-+		CDEBUG(D_CHANGELOG, "start changelog thread\n");
-+		return 0;
-+	}
- 
-         CERROR("Failed to start changelog thread: %d\n", rc);
-         OBD_FREE_PTR(cs);
-diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
-index 9d7b54c..7ced9dd 100644
---- a/lustre/mdd/mdd_lfsck.c
-+++ b/lustre/mdd/mdd_lfsck.c
-@@ -2525,8 +2525,7 @@ static int mdd_lfsck_main(void *args)
- 	int			 rc;
- 	ENTRY;
- 
--	cfs_daemonize("lfsck");
--	rc = lu_env_init(&env, LCT_MD_THREAD);
-+	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
- 	if (rc != 0) {
- 		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
- 		       mdd_lfsck2name(lfsck), rc);
-@@ -2789,8 +2788,8 @@ trigger:
- 
- 	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
- 	thread_set_flags(thread, 0);
--	rc = cfs_create_thread(mdd_lfsck_main, lfsck, 0);
--	if (rc < 0)
-+	rc = PTR_ERR(kthread_run(mdd_lfsck_main, lfsck, "lfsck"));
-+	if (IS_ERR_VALUE(rc))
- 		CERROR("%s: cannot start LFSCK thread, rc = %d\n",
- 		       mdd_lfsck2name(lfsck), rc);
- 	else
-diff --git a/lustre/mdt/mdt_capa.c b/lustre/mdt/mdt_capa.c
-index 76e2c6f..d4a8bc4 100644
---- a/lustre/mdt/mdt_capa.c
-+++ b/lustre/mdt/mdt_capa.c
-@@ -218,7 +218,7 @@ static int mdt_ck_thread_main(void *args)
-         int                     rc;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("mdt_ck");
-+	unshare_fs_struct();
-         cfs_block_allsigs();
- 
-         thread_set_flags(thread, SVC_RUNNING);
-@@ -290,18 +290,18 @@ static int mdt_ck_thread_main(void *args)
- 
- int mdt_ck_thread_start(struct mdt_device *mdt)
- {
--        struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
--        int rc;
--
--        cfs_waitq_init(&thread->t_ctl_waitq);
--        rc = cfs_create_thread(mdt_ck_thread_main, mdt, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("cannot start mdt_ck thread, rc = %d\n", rc);
--                return rc;
--        }
--
--        l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
--        return 0;
-+	struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
-+	cfs_task_t *task;
-+
-+	cfs_waitq_init(&thread->t_ctl_waitq);
-+	task = kthread_run(mdt_ck_thread_main, mdt, "mdt_ck");
-+	if (IS_ERR(task)) {
-+		CERROR("cannot start mdt_ck thread, rc = %ld\n", PTR_ERR(task));
-+		return PTR_ERR(task);
-+	}
-+
-+	l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
-+	return 0;
- }
- 
- void mdt_ck_thread_stop(struct mdt_device *mdt)
-diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 6b84a29..f7e6514 100644
---- a/lustre/mgc/mgc_request.c
-+++ b/lustre/mgc/mgc_request.c
-@@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
- 
- static int mgc_requeue_thread(void *data)
- {
--        char name[] = "ll_cfg_requeue";
-         int rc = 0;
-         ENTRY;
- 
--        cfs_daemonize(name);
--
-         CDEBUG(D_MGC, "Starting requeue thread\n");
- 
-         /* Keep trying failed locks periodically */
-@@ -776,20 +773,20 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
-         sptlrpc_lprocfs_cliobd_attach(obd);
- 
-         if (cfs_atomic_inc_return(&mgc_count) == 1) {
--                rq_state = 0;
--                cfs_waitq_init(&rq_waitq);
--
--                /* start requeue thread */
--                rc = cfs_create_thread(mgc_requeue_thread, NULL,
--                                       CFS_DAEMON_FLAGS);
--                if (rc < 0) {
--                        CERROR("%s: Cannot start requeue thread (%d),"
--                               "no more log updates!\n",
--                               obd->obd_name, rc);
--                        GOTO(err_cleanup, rc);
--                }
--                /* rc is the pid of mgc_requeue_thread. */
--                rc = 0;
-+		rq_state = 0;
-+		cfs_waitq_init(&rq_waitq);
-+
-+		/* start requeue thread */
-+		rc = PTR_ERR(kthread_run(mgc_requeue_thread, NULL,
-+					     "ll_cfg_requeue"));
-+		if (IS_ERR_VALUE(rc)) {
-+			CERROR("%s: Cannot start requeue thread (%d),"
-+			       "no more log updates!\n",
-+			       obd->obd_name, rc);
-+			GOTO(err_cleanup, rc);
-+		}
-+		/* rc is the pid of mgc_requeue_thread. */
-+		rc = 0;
-         }
- 
-         RETURN(rc);
-diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
-index 781250f..e6abdc4 100644
---- a/lustre/mgs/mgs_nids.c
-+++ b/lustre/mgs/mgs_nids.c
-@@ -440,7 +440,6 @@ static int mgs_ir_notify(void *arg)
- 
-         LASSERTF(sizeof(name) < 32, "name is too large to be in stack.\n");
-         sprintf(name, "mgs_%s_notify", fsdb->fsdb_name);
--        cfs_daemonize(name);
- 
- 	complete(&fsdb->fsdb_notify_comp);
- 
-@@ -471,7 +470,7 @@ static int mgs_ir_notify(void *arg)
- int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
- 		   struct fs_db *fsdb)
- {
--        int rc;
-+	cfs_task_t *task;
- 
-         if (!ir_timeout)
-                 ir_timeout = OBD_IR_MGS_TIMEOUT;
-@@ -488,11 +487,13 @@ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
-         cfs_atomic_set(&fsdb->fsdb_notify_phase, 0);
-         cfs_waitq_init(&fsdb->fsdb_notify_waitq);
- 	init_completion(&fsdb->fsdb_notify_comp);
--        rc = cfs_create_thread(mgs_ir_notify, fsdb, CFS_DAEMON_FLAGS);
--        if (rc > 0)
-+
-+	task = kthread_run(mgs_ir_notify, fsdb,
-+			       "mgs_%s_notify", fsdb->fsdb_name);
-+	if (IS_ERR(task))
- 		wait_for_completion(&fsdb->fsdb_notify_comp);
--        else
--                CERROR("Start notify thread error %d\n", rc);
-+	else
-+		CERROR("Start notify thread error %ld\n", PTR_ERR(task));
- 
- 	mgs_nidtbl_init_fs(env, fsdb);
-         return 0;
-diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index 436aa4d..0e29783 100644
---- a/lustre/obdclass/genops.c
-+++ b/lustre/obdclass/genops.c
-@@ -1744,14 +1744,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
-  */
- static int obd_zombie_impexp_thread(void *unused)
- {
--	int rc;
--
--	rc = cfs_daemonize_ctxt("obd_zombid");
--	if (rc != 0) {
--		complete(&obd_zombie_start);
--		RETURN(rc);
--	}
--
-+	unshare_fs_struct();
- 	complete(&obd_zombie_start);
- 
- 	obd_zombie_pid = cfs_curproc_pid();
-@@ -1800,7 +1793,9 @@ int obd_zombie_impexp_kill(void *arg)
-  */
- int obd_zombie_impexp_init(void)
- {
--	int rc;
-+#ifdef __KERNEL__
-+	cfs_task_t *task;
-+#endif
- 
- 	CFS_INIT_LIST_HEAD(&obd_zombie_imports);
- 	CFS_INIT_LIST_HEAD(&obd_zombie_exports);
-@@ -1811,9 +1806,9 @@ int obd_zombie_impexp_init(void)
- 	obd_zombie_pid = 0;
- 
- #ifdef __KERNEL__
--	rc = cfs_create_thread(obd_zombie_impexp_thread, NULL, 0);
--	if (rc < 0)
--		RETURN(rc);
-+	task = kthread_run(obd_zombie_impexp_thread, NULL, "obd_zombid");
-+	if (IS_ERR(task))
-+		RETURN(PTR_ERR(task));
- 
- 	wait_for_completion(&obd_zombie_start);
- #else
-@@ -1825,9 +1820,8 @@ int obd_zombie_impexp_init(void)
-         obd_zombie_impexp_idle_cb =
-                 liblustre_register_idle_callback("obd_zombi_impexp_check",
-                                                  &obd_zombie_impexp_check, NULL);
--        rc = 0;
- #endif
--        RETURN(rc);
-+	RETURN(0);
- }
- /**
-  * stop destroy zombie import/export thread
-diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
-index 62c496b..d85b048 100644
---- a/lustre/obdclass/llog.c
-+++ b/lustre/obdclass/llog.c
-@@ -438,7 +438,7 @@ static int llog_process_thread_daemonize(void *arg)
- 	struct lu_env			 env;
- 	int				 rc;
- 
--	cfs_daemonize_ctxt("llog_process_thread");
-+	unshare_fs_struct();
- 
- 	/* client env has no keys, tags is just 0 */
- 	rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
-@@ -480,9 +480,9 @@ int llog_process_or_fork(const struct lu_env *env,
- 		 * init the new one in llog_process_thread_daemonize. */
- 		lpi->lpi_env = NULL;
- 		init_completion(&lpi->lpi_completion);
--		rc = cfs_create_thread(llog_process_thread_daemonize, lpi,
--				       CFS_DAEMON_FLAGS);
--		if (rc < 0) {
-+		rc = PTR_ERR(kthread_run(llog_process_thread_daemonize, lpi,
-+					     "llog_process_thread"));
-+		if (IS_ERR_VALUE(rc)) {
- 			CERROR("%s: cannot start thread: rc = %d\n",
- 			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
- 			OBD_FREE_PTR(lpi);
-diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 77acd9e..a9130be 100644
---- a/lustre/osd-ldiskfs/osd_scrub.c
-+++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -979,7 +979,6 @@ static int osd_scrub_main(void *args)
- 	int		      rc;
- 	ENTRY;
- 
--	cfs_daemonize("OI_scrub");
- 	rc = lu_env_init(&env, LCT_DT_THREAD);
- 	if (rc != 0) {
- 		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
-@@ -1554,8 +1553,8 @@ again:
- 
- 	scrub->os_start_flags = flags;
- 	thread_set_flags(thread, 0);
--	rc = cfs_create_thread(osd_scrub_main, dev, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(osd_scrub_main, dev, "OI_scrub"));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("%.16s: cannot start iteration thread, rc = %d\n",
- 		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
- 		RETURN(rc);
-diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 914f988..d0d2ede 100644
---- a/lustre/osp/osp_precreate.c
-+++ b/lustre/osp/osp_precreate.c
-@@ -872,15 +872,11 @@ static int osp_precreate_thread(void *_arg)
- 	struct osp_device	*d = _arg;
- 	struct ptlrpc_thread	*thread = &d->opd_pre_thread;
- 	struct l_wait_info	 lwi = { 0 };
--	char			 pname[16];
- 	struct lu_env		 env;
- 	int			 rc;
- 
- 	ENTRY;
- 
--	sprintf(pname, "osp-pre-%u", d->opd_index);
--	cfs_daemonize(pname);
--
- 	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
- 	if (rc) {
- 		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1251,7 +1247,7 @@ out:
- int osp_init_precreate(struct osp_device *d)
- {
- 	struct l_wait_info	 lwi = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 
- 	ENTRY;
- 
-@@ -1286,10 +1282,11 @@ int osp_init_precreate(struct osp_device *d)
- 	/*
- 	 * start thread handling precreation and statfs updates
- 	 */
--	rc = cfs_create_thread(osp_precreate_thread, d, 0);
--	if (rc < 0) {
--		CERROR("can't start precreate thread %d\n", rc);
--		RETURN(rc);
-+	task = kthread_run(osp_precreate_thread, d,
-+			       "osp-pre-%u", d->opd_index);
-+	if (IS_ERR(task)) {
-+		CERROR("can't start precreate thread %ld\n", PTR_ERR(task));
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
-diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index 4bc9d58..a6952ce 100644
---- a/lustre/osp/osp_sync.c
-+++ b/lustre/osp/osp_sync.c
-@@ -823,7 +823,6 @@ static int osp_sync_thread(void *_arg)
- 	struct llog_handle	*llh;
- 	struct lu_env		 env;
- 	int			 rc, count;
--	char			 pname[16];
- 
- 	ENTRY;
- 
-@@ -834,9 +833,6 @@ static int osp_sync_thread(void *_arg)
- 		RETURN(rc);
- 	}
- 
--	sprintf(pname, "osp-syn-%u", d->opd_index);
--	cfs_daemonize(pname);
--
- 	spin_lock(&d->opd_syn_lock);
- 	thread->t_flags = SVC_RUNNING;
- 	spin_unlock(&d->opd_syn_lock);
-@@ -1041,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
- 	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
- 	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
- 
--	rc = cfs_create_thread(osp_sync_thread, d, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(osp_sync_thread, d,
-+				 "osp-syn-%u", d->opd_index));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("%s: can't start sync thread: rc = %d\n",
- 		       d->opd_obd->obd_name, rc);
- 		GOTO(err_llog, rc);
-diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
-index 7eaee96..9d17417 100644
---- a/lustre/ptlrpc/import.c
-+++ b/lustre/ptlrpc/import.c
-@@ -1263,7 +1263,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
- 
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_imp_inval");
-+	unshare_fs_struct();
- 
-         CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
-                imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
-@@ -1333,20 +1333,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
- 		spin_unlock(&imp->imp_lock);
- 
- #ifdef __KERNEL__
--                /* bug 17802:  XXX client_disconnect_export vs connect request
--                 * race. if client will evicted at this time, we start
--                 * invalidate thread without reference to import and import can
--                 * be freed at same time. */
--                class_import_get(imp);
--                rc = cfs_create_thread(ptlrpc_invalidate_import_thread, imp,
--                                       CFS_DAEMON_FLAGS);
--                if (rc < 0) {
--                        class_import_put(imp);
--                        CERROR("error starting invalidate thread: %d\n", rc);
--                } else {
--                        rc = 0;
--                }
--                RETURN(rc);
-+		{
-+		cfs_task_t *task;
-+		/* bug 17802:  XXX client_disconnect_export vs connect request
-+		 * race. if client will evicted at this time, we start
-+		 * invalidate thread without reference to import and import can
-+		 * be freed at same time. */
-+		class_import_get(imp);
-+		task = kthread_run(ptlrpc_invalidate_import_thread, imp,
-+				     "ll_imp_inval");
-+		if (IS_ERR(task)) {
-+			class_import_put(imp);
-+			CERROR("error starting invalidate thread: %d\n", rc);
-+			rc = PTR_ERR(task);
-+		} else {
-+			rc = 0;
-+		}
-+		RETURN(rc);
-+		}
- #else
-                 ptlrpc_invalidate_import(imp);
- 
-diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
-index 8b7d472..e18bc7d 100644
---- a/lustre/ptlrpc/pinger.c
-+++ b/lustre/ptlrpc/pinger.c
-@@ -306,8 +306,6 @@ static int ptlrpc_pinger_main(void *arg)
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
- 	ENTRY;
- 
--        cfs_daemonize(thread->t_name);
--
-         /* Record that the thread is running */
-         thread_set_flags(thread, SVC_RUNNING);
-         cfs_waitq_signal(&thread->t_ctl_waitq);
-@@ -402,14 +400,14 @@ int ptlrpc_start_pinger(void)
- 
- 	/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
- 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
--        rc = cfs_create_thread(ptlrpc_pinger_main,
--			       pinger_thread, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("cannot start thread: %d\n", rc);
--                OBD_FREE(pinger_thread, sizeof(*pinger_thread));
--                pinger_thread = NULL;
--                RETURN(rc);
--        }
-+	rc = PTR_ERR(kthread_run(ptlrpc_pinger_main,
-+				 pinger_thread, pinger_thread->t_name));
-+	if (IS_ERR_VALUE(rc)) {
-+		CERROR("cannot start thread: %d\n", rc);
-+		OBD_FREE(pinger_thread, sizeof(*pinger_thread));
-+		pinger_thread = NULL;
-+		RETURN(rc);
-+	}
-         l_wait_event(pinger_thread->t_ctl_waitq,
-                      thread_is_running(pinger_thread), &lwi);
- 
-@@ -678,7 +676,7 @@ static int ping_evictor_main(void *arg)
-         time_t expire_time;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_evictor");
-+	unshare_fs_struct();
- 
-         CDEBUG(D_HA, "Starting Ping Evictor\n");
-         pet_state = PET_READY;
-@@ -753,18 +751,19 @@ static int ping_evictor_main(void *arg)
- 
- void ping_evictor_start(void)
- {
--        int rc;
-+	cfs_task_t *task;
- 
--        if (++pet_refcount > 1)
--                return;
-+	if (++pet_refcount > 1)
-+		return;
- 
--        cfs_waitq_init(&pet_waitq);
-+	cfs_waitq_init(&pet_waitq);
- 
--        rc = cfs_create_thread(ping_evictor_main, NULL, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                pet_refcount--;
--                CERROR("Cannot start ping evictor thread: %d\n", rc);
--        }
-+	task = kthread_run(ping_evictor_main, NULL, "ll_evictor");
-+	if (IS_ERR(task)) {
-+		pet_refcount--;
-+		CERROR("Cannot start ping evictor thread: %ld\n",
-+			PTR_ERR(task));
-+	}
- }
- EXPORT_SYMBOL(ping_evictor_start);
- 
-diff --git a/lustre/ptlrpc/ptlrpcd.c b/lustre/ptlrpc/ptlrpcd.c
-index 669b0d7..b6486e0 100644
---- a/lustre/ptlrpc/ptlrpcd.c
-+++ b/lustre/ptlrpc/ptlrpcd.c
-@@ -410,7 +410,7 @@ static int ptlrpcd(void *arg)
-         int rc, exit = 0;
-         ENTRY;
- 
--	cfs_daemonize_ctxt(pc->pc_name);
-+	unshare_fs_struct();
- #if defined(CONFIG_SMP) && \
- (defined(HAVE_CPUMASK_OF_NODE) || defined(HAVE_NODE_TO_CPUMASK))
- 	if (test_bit(LIOD_BIND, &pc->pc_flags)) {
-@@ -709,18 +709,21 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
- 
-         env = 1;
- #ifdef __KERNEL__
--        if (index >= 0) {
--                rc = ptlrpcd_bind(index, max);
--                if (rc < 0)
--                        GOTO(out, rc);
--        }
-+	{
-+		cfs_task_t *task;
-+		if (index >= 0) {
-+			rc = ptlrpcd_bind(index, max);
-+			if (rc < 0)
-+				GOTO(out, rc);
-+		}
- 
--        rc = cfs_create_thread(ptlrpcd, pc, 0);
--        if (rc < 0)
--                GOTO(out, rc);
-+		task = kthread_run(ptlrpcd, pc, pc->pc_name);
-+		if (IS_ERR(task))
-+			GOTO(out, rc = PTR_ERR(task));
- 
--        rc = 0;
--	wait_for_completion(&pc->pc_starting);
-+		rc = 0;
-+		wait_for_completion(&pc->pc_starting);
-+	}
- #else
-         pc->pc_wait_callback =
-                 liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
-diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
-index 7634d22..595f710 100644
---- a/lustre/ptlrpc/sec_gc.c
-+++ b/lustre/ptlrpc/sec_gc.c
-@@ -169,7 +169,7 @@ static int sec_gc_main(void *arg)
-         struct ptlrpc_thread *thread = (struct ptlrpc_thread *) arg;
-         struct l_wait_info    lwi;
- 
--        cfs_daemonize_ctxt("sptlrpc_gc");
-+	unshare_fs_struct();
- 
-         /* Record that the thread is running */
-         thread_set_flags(thread, SVC_RUNNING);
-@@ -222,7 +222,7 @@ again:
- int sptlrpc_gc_init(void)
- {
- 	struct l_wait_info lwi = { 0 };
--	int                rc;
-+	cfs_task_t *task;
- 
- 	mutex_init(&sec_gc_mutex);
- 	spin_lock_init(&sec_gc_list_lock);
-@@ -232,10 +232,10 @@ int sptlrpc_gc_init(void)
-         memset(&sec_gc_thread, 0, sizeof(sec_gc_thread));
-         cfs_waitq_init(&sec_gc_thread.t_ctl_waitq);
- 
--        rc = cfs_create_thread(sec_gc_main, &sec_gc_thread, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("can't start gc thread: %d\n", rc);
--                return rc;
-+	task = kthread_run(sec_gc_main, &sec_gc_thread, "sptlrpc_gc");
-+	if (IS_ERR(task)) {
-+		CERROR("can't start gc thread: %ld\n", PTR_ERR(task));
-+		return PTR_ERR(task);
-         }
- 
-         l_wait_event(sec_gc_thread.t_ctl_waitq,
-diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
-index 63fee6d..7d73b13 100644
---- a/lustre/ptlrpc/service.c
-+++ b/lustre/ptlrpc/service.c
-@@ -2362,7 +2362,7 @@ static int ptlrpc_main(void *arg)
-         ENTRY;
- 
-         thread->t_pid = cfs_curproc_pid();
--        cfs_daemonize_ctxt(thread->t_name);
-+	unshare_fs_struct();
- 
- 	/* NB: we will call cfs_cpt_bind() for all threads, because we
- 	 * might want to run lustre server only on a subset of system CPUs,
-@@ -2557,7 +2557,7 @@ static int ptlrpc_hr_main(void *arg)
- 
- 	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
- 		 hrp->hrp_cpt, hrt->hrt_id);
--	cfs_daemonize_ctxt(threadname);
-+	unshare_fs_struct();
- 
- 	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
- 	if (rc != 0) {
-@@ -2623,10 +2623,13 @@ static int ptlrpc_start_hr_threads(void)
- 		int	rc = 0;
- 
- 		for (j = 0; j < hrp->hrp_nthrs; j++) {
--			rc = cfs_create_thread(ptlrpc_hr_main,
--					       &hrp->hrp_thrs[j],
--					       CLONE_VM | CLONE_FILES);
--			if (rc < 0)
-+			struct	ptlrpc_hr_thread *hrt = &hrp->hrp_thrs[j];
-+			rc = PTR_ERR(kthread_run(ptlrpc_hr_main,
-+						 &hrp->hrp_thrs[j],
-+						 "ptlrpc_hr%02d_%03d",
-+						 hrp->hrp_cpt,
-+						 hrt->hrt_id));
-+			if (IS_ERR_VALUE(rc))
- 				break;
- 		}
- 		cfs_wait_event(ptlrpc_hr.hr_waitq,
-@@ -2818,8 +2821,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
- 	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
- 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
- 	 */
--	rc = cfs_create_thread(ptlrpc_main, thread, CFS_DAEMON_FLAGS);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name));
-+	if (IS_ERR_VALUE(rc)) {
- 		CERROR("cannot start thread '%s': rc %d\n",
- 		       thread->t_name, rc);
- 		spin_lock(&svcpt->scp_lock);
-diff --git a/lustre/quota/qmt_lock.c b/lustre/quota/qmt_lock.c
-index 3236fb5..7c455fe 100644
---- a/lustre/quota/qmt_lock.c
-+++ b/lustre/quota/qmt_lock.c
-@@ -716,7 +716,6 @@ static int qmt_reba_thread(void *arg)
- 	struct l_wait_info	 lwi = { 0 };
- 	struct lu_env		*env;
- 	struct lquota_entry	*lqe, *tmp;
--	char			 pname[MTI_NAME_MAXLEN];
- 	int			 rc;
- 	ENTRY;
- 
-@@ -731,9 +730,6 @@ static int qmt_reba_thread(void *arg)
- 		RETURN(rc);
- 	}
- 
--	snprintf(pname, MTI_NAME_MAXLEN, "qmt_reba_%s", qmt->qmt_svname);
--	cfs_daemonize(pname);
--
- 	thread_set_flags(thread, SVC_RUNNING);
- 	cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-@@ -773,15 +769,16 @@ int qmt_start_reba_thread(struct qmt_device *qmt)
- {
- 	struct ptlrpc_thread	*thread = &qmt->qmt_reba_thread;
- 	struct l_wait_info	 lwi    = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 	ENTRY;
- 
--	rc = cfs_create_thread(qmt_reba_thread, (void *)qmt, 0);
--	if (rc < 0) {
--		CERROR("%s: failed to start rebalance thread (%d)\n",
--		       qmt->qmt_svname, rc);
-+	task = kthread_run(qmt_reba_thread, (void *)qmt,
-+			       "qmt_reba_%s", qmt->qmt_svname);
-+	if (IS_ERR(task)) {
-+		CERROR("%s: failed to start rebalance thread (%ld)\n",
-+		       qmt->qmt_svname, PTR_ERR(task));
- 		thread_set_flags(thread, SVC_STOPPED);
--		RETURN(rc);
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(thread->t_ctl_waitq,
-diff --git a/lustre/quota/qsd_reint.c b/lustre/quota/qsd_reint.c
-index ad2894f..070e535 100644
---- a/lustre/quota/qsd_reint.c
-+++ b/lustre/quota/qsd_reint.c
-@@ -417,8 +417,6 @@ static int qsd_reint_main(void *args)
- 	int			 rc;
- 	ENTRY;
- 
--	cfs_daemonize("qsd_reint");
--
- 	CDEBUG(D_QUOTA, "%s: Starting reintegration thread for "DFID"\n",
- 	       qsd->qsd_svname, PFID(&qqi->qqi_fid));
- 
-@@ -662,8 +660,8 @@ int qsd_start_reint_thread(struct qsd_qtype_info *qqi)
- 		RETURN(0);
- 	}
- 
--	rc = cfs_create_thread(qsd_reint_main, (void *)qqi, 0);
--	if (rc < 0) {
-+	rc = PTR_ERR(kthread_run(qsd_reint_main, (void *)qqi, "qsd_reint"));
-+	if (IS_ERR_VALUE(rc)) {
- 		thread_set_flags(thread, SVC_STOPPED);
- 		write_lock(&qsd->qsd_lock);
- 		qqi->qqi_reint = 0;
-diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c
-index 037fb2b..5ab39e4 100644
---- a/lustre/quota/qsd_writeback.c
-+++ b/lustre/quota/qsd_writeback.c
-@@ -404,7 +404,6 @@ static int qsd_upd_thread(void *arg)
- 	struct l_wait_info	 lwi;
- 	cfs_list_t		 queue;
- 	struct qsd_upd_rec	*upd, *n;
--	char			 pname[MTI_NAME_MAXLEN];
- 	struct lu_env		*env;
- 	int			 qtype, rc = 0;
- 	bool			 uptodate;
-@@ -423,9 +422,6 @@ static int qsd_upd_thread(void *arg)
- 		RETURN(rc);
- 	}
- 
--	snprintf(pname, MTI_NAME_MAXLEN, "lquota_wb_%s", qsd->qsd_svname);
--	cfs_daemonize(pname);
--
- 	thread_set_flags(thread, SVC_RUNNING);
- 	cfs_waitq_signal(&thread->t_ctl_waitq);
- 
-@@ -487,14 +483,16 @@ int qsd_start_upd_thread(struct qsd_instance *qsd)
- {
- 	struct ptlrpc_thread	*thread = &qsd->qsd_upd_thread;
- 	struct l_wait_info	 lwi = { 0 };
--	int			 rc;
-+	cfs_task_t		*task;
- 	ENTRY;
- 
--	rc = cfs_create_thread(qsd_upd_thread, (void *)qsd, 0);
--	if (rc < 0) {
--		CERROR("Fail to start quota update thread. rc: %d\n", rc);
-+	task = kthread_run(qsd_upd_thread, (void *)qsd,
-+			   "lquota_wb_%s", qsd->qsd_svname);
-+	if (IS_ERR(task)) {
-+		CERROR("Fail to start quota update thread. rc: %ld\n",
-+			PTR_ERR(task));
- 		thread_set_flags(thread, SVC_STOPPED);
--		RETURN(rc);
-+		RETURN(PTR_ERR(task));
- 	}
- 
- 	l_wait_event(thread->t_ctl_waitq,
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
similarity index 91%
rename from sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
rename to sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
index bc9a0ef..9d9c836 100644
--- a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From eb03fd5e6cfb84118903ed18fe77a77c4935c662 Mon Sep 17 00:00:00 2001
+From 77a1e2d9c3339f42e9b9617501c126362c3d6088 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 8/9] LU-2987 llite: rcu-free inode
+Subject: [PATCH 07/11] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.
@@ -14,7 +14,7 @@ Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
  2 files changed, 37 insertions(+), 2 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 485b370..c36b055 100644
+index 2f4265a..1731add 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -1683,6 +1683,26 @@ LB_LINUX_TRY_COMPILE([
@@ -44,7 +44,7 @@ index 485b370..c36b055 100644
  # 2.6.38 export blkdev_get_by_dev
  #
  AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
-@@ -2409,6 +2429,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2390,6 +2410,7 @@ AC_DEFUN([LC_PROG_LINUX],
           LC_GENERIC_PERMISSION
           LC_QUOTA_ON_USE_PATH
           LC_DCACHE_LOCK

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
similarity index 72%
rename from sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
rename to sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index d4f0e73..5335b32 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From e6813c71a86696b6ba333d2d0af74f4bcc6d4468 Mon Sep 17 00:00:00 2001
+From 42de9a90abb62598e77cd5ae03f88edf889dfb7c Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Wed, 27 Mar 2013 08:49:01 +0400
-Subject: [PATCH 6/9] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Date: Wed, 17 Apr 2013 13:27:55 +0400
+Subject: [PATCH 08/11] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
@@ -9,15 +9,15 @@ We can open code is for llite though.
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
 ---
- lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
- lustre/llite/vvp_io.c          |  9 +++++++++
- 2 files changed, 32 insertions(+)
+ lustre/autoconf/lustre-core.m4 | 24 ++++++++++++++++++++++++
+ lustre/llite/vvp_io.c          | 10 +++++++++-
+ 2 files changed, 33 insertions(+), 1 deletion(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 9447b2b..485b370 100644
+index 1731add..4305757 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2253,6 +2253,25 @@ LB_LINUX_TRY_COMPILE([
+@@ -2273,6 +2273,26 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -39,11 +39,12 @@ index 9447b2b..485b370 100644
 +])
 +])
 +
++
 +#
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2436,6 +2455,10 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2457,6 +2477,10 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.7
   	 LC_HAVE_POSIXACL_USER_NS
@@ -55,10 +56,10 @@ index 9447b2b..485b370 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index db53842..c261429 100644
+index db53842..aef8e4b 100644
 --- a/lustre/llite/vvp_io.c
 +++ b/lustre/llite/vvp_io.c
-@@ -362,7 +362,16 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
+@@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
  	 * Only ll_inode_size_lock is taken at this level.
  	 */
  	ll_inode_size_lock(inode);
@@ -73,8 +74,10 @@ index db53842..c261429 100644
 +	truncate_setsize(inode, size);
 +#endif
  	ll_inode_size_unlock(inode);
- 
+-
  	return result;
+ }
+ 
 -- 
 1.8.1.5
 

diff --git a/sys-cluster/lustre/files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
new file mode 100644
index 0000000..6d8fe15
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -0,0 +1,115 @@
+From 6cbb83e217da670eba6c48d6a5a8c9248e11290d Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Sun, 31 Mar 2013 19:32:30 +0400
+Subject: [PATCH 09/11] LU-3079 kernel: 3.9 hlist_for_each_entry uses 3 args
+
+In 3.9 hlist_for_each_entry use 3 args since commit
+
+commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
+Author: Sasha Levin <sasha.levin@oracle.com>
+Date:   Wed Feb 27 17:06:00 2013 -0800
+
+    hlist: drop the node parameter from iterators
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I8f38d562607de21771b03575e37cc0498867a570
+---
+ libcfs/include/libcfs/list.h           | 10 ++++++++++
+ lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  5 +++++
+ 3 files changed, 41 insertions(+)
+
+diff --git a/libcfs/include/libcfs/list.h b/libcfs/include/libcfs/list.h
+index be06e74..b747804 100644
+--- a/libcfs/include/libcfs/list.h
++++ b/libcfs/include/libcfs/list.h
+@@ -91,14 +91,24 @@ typedef struct hlist_node cfs_hlist_node_t;
+ #define cfs_hlist_for_each(pos, head)      hlist_for_each(pos, head)
+ #define cfs_hlist_for_each_safe(pos, n, head) \
+         hlist_for_each_safe(pos, n, head)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define cfs_hlist_for_each_entry(tpos, pos, head, member) \
++	pos = NULL; hlist_for_each_entry(tpos, head, member)
++#else
+ #define cfs_hlist_for_each_entry(tpos, pos, head, member) \
+         hlist_for_each_entry(tpos, pos, head, member)
++#endif
+ #define cfs_hlist_for_each_entry_continue(tpos, pos, member) \
+         hlist_for_each_entry_continue(tpos, pos, member)
+ #define cfs_hlist_for_each_entry_from(tpos, pos, member) \
+         hlist_for_each_entry_from(tpos, pos, member)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
++	pos = NULL; hlist_for_each_entry_safe(tpos, n, head, member)
++#else
+ #define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
+         hlist_for_each_entry_safe(tpos, pos, n, head, member)
++#endif
+ 
+ #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
+ #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 4305757..29fd787 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2293,6 +2293,29 @@ LB_LINUX_TRY_COMPILE([
+ 
+ 
+ #
++# 3.9 uses hlist_for_each_entry with 3 args
++# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
++#
++AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
++[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/list.h>
++	#include <linux/fs.h>
++],[
++	struct inode *inode;
++	struct dentry *dentry;
++	hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
++		continue;
++	}
++],[
++	AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2481,6 +2504,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 # 3.8
+ 	 LC_HAVE_MM_VMTRUNCATE
+ 
++	 # 3.9
++	 LC_HAVE_HLIST_FOR_EACH_3ARG
++
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+ 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 54effc5..7571513 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -617,8 +617,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
+ #define ll_d_hlist_empty(list) hlist_empty(list)
+ #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
+ #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
++	p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
++#else
+ #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
+         hlist_for_each_entry(dentry, p, i_dentry, alias)
++#endif
+ #else
+ #define ll_d_hlist_node list_head
+ #define ll_d_hlist_empty(list) list_empty(list)
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
new file mode 100644
index 0000000..4e16cfb
--- /dev/null
+++ b/sys-cluster/lustre/files/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -0,0 +1,82 @@
+From ebc9570b69d08bb308b2317486de3062a06f59d0 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Sun, 31 Mar 2013 20:13:21 +0400
+Subject: [PATCH 10/11] LU-3079 kernel: f_vfsmnt replaced by f_path.mnt
+
+In linux 3.9 f_vfsmnt was killed and replaced
+
+commit 182be684784334598eee1d90274e7f7aa0063616
+Author: Al Viro <viro@zeniv.linux.org.uk>
+Date:   Thu Jan 24 02:21:54 2013 -0500
+
+    kill f_vfsmnt
+
+    very few users left...
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
+---
+ lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
+ lustre/llite/dir.c             |  4 ++++
+ 2 files changed, 27 insertions(+)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 29fd787..ea5b5fb 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2316,6 +2316,28 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.9 killed f_vfsmnt by
++# 182be684784334598eee1d90274e7f7aa0063616
++# replacement is f_path.mnt
++#
++AC_DEFUN([LC_HAVE_F_PATH_MNT],
++[AC_MSG_CHECKING([if struct file has f_path.mnt])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct file *fp = NULL;
++	struct path  path;
++
++	path.mnt = fp->f_path.mnt;
++],[
++	AC_DEFINE(HAVE_F_PATH_MNT,1,[yes])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2506,6 +2528,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.9
+ 	 LC_HAVE_HLIST_FOR_EACH_3ARG
++	 LC_HAVE_F_PATH_MNT
+ 
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index 14ea720..14d275c 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -639,7 +639,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+         }
+ 	filp->f_version = inode->i_version;
+ #ifdef HAVE_TOUCH_ATIME_1ARG
++#ifdef HAVE_F_PATH_MNT
++	path.mnt = filp->f_path.mnt;
++#else
+ 	path.mnt = filp->f_vfsmnt;
++#endif
+ 	path.dentry = filp->f_dentry;
+ 	touch_atime(&path);
+ #else
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
similarity index 95%
rename from sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
rename to sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
index be8f0da..6908caa 100644
--- a/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ b/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -1,7 +1,7 @@
-From eb4e257e6d9bab8401bc746a3d00c80be5748e92 Mon Sep 17 00:00:00 2001
+From b9af425cb67ad9d27a8319a308fecd794478479e Mon Sep 17 00:00:00 2001
 From: Brian Behlendorf <behlendorf1@llnl.gov>
 Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 9/9] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+Subject: [PATCH 11/11] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
 
 With the release of zfs-0.6.1 the default install location of
 the zfs kmod headers and objects has changed.  The kmod headers
@@ -50,11 +50,11 @@ Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
  autoMakefile.am                |   2 +-
  config/lustre-build-ldiskfs.m4 |   1 -
  config/lustre-build-zfs.m4     | 731 ++++++++++++++++++-----------------------
- contrib/lbuild/lbuild          |  72 +---
+ contrib/lbuild/lbuild          |  83 ++---
  lustre.spec.in                 |   2 +-
  lustre/osd-zfs/Makefile.in     |   3 +-
  lustre/utils/Makefile.am       |   6 +-
- 7 files changed, 340 insertions(+), 477 deletions(-)
+ 7 files changed, 351 insertions(+), 477 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
 index bfec407..27e16c1 100644
@@ -847,42 +847,68 @@ index bfc647f..507afd8 100644
 +	AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
  ])
 diff --git a/contrib/lbuild/lbuild b/contrib/lbuild/lbuild
-index f389505..d22a9f6 100755
+index f389505..075fcb0 100755
 --- a/contrib/lbuild/lbuild
 +++ b/contrib/lbuild/lbuild
-@@ -1009,10 +1009,10 @@ build_spl_zfs() {
+@@ -996,11 +996,14 @@ build_lustre() {
+ # return 0 if successful, else 255
+ build_spl_zfs() {
+     # make sure the RPM build environment is set up
++    pushd $TOPDIR
+     create_rpmbuild_dirs
++    popd
+ 
+     # The spl/zfs spec files expect RPM_BUILD_ROOT to point to the root of the
+     # destination for the rpms
+     export RPM_BUILD_ROOT=$TOPDIR
++    SPLZFSVER=${SPLZFSVER:-0.6.1}
+ 
+     # The files expect a kver to be set to the kernel version .
+     kver=$(cat ${LINUX}/include/config/kernel.release)
+@@ -1009,10 +1012,14 @@ build_spl_zfs() {
      local pkg
      for pkg in spl zfs; do
  
 -        local rpmmod spldir
-+        local dkmspkg
++        local rpmpkg
  
          [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/*)"
 -        rpmmod=$pkg-modules
-+        dkmspkg=$pkg-dkms
++	if [ -f $pkg-modules.spec.in ]; then
++	    rpmpkg=$pkg-modules
++	else
++            rpmpkg=$pkg-dkms
++	fi
  
          # need to fetch the repo in order to build it.
          # default to github but allow override
-@@ -1020,6 +1020,8 @@ build_spl_zfs() {
+@@ -1020,6 +1027,14 @@ build_spl_zfs() {
  
          pushd $pkg || return 255
  
++	if [ -n "$SPLZFSTAG" ];
++	    git checkout $SPLZFSTAG
++	else
++	    git checkout -b $pkg-$SPLZFSVER $pkg-$SPLZFSVER
++	fi
++
 +	sh autogen.sh || return 255
 +
          # XXX - _having_ to give a package a kernel just to have it configure
          #       enough to do a "make dist" is truely bogus!
          if  ! ./configure --with-linux=${LINUX} \
-@@ -1028,66 +1030,24 @@ build_spl_zfs() {
+@@ -1028,66 +1043,22 @@ build_spl_zfs() {
              popd
              return 255
          fi
 -        popd
--
+ 
 -        # XXX - dirty hack time.  ~sigh~
 -        #       because the spl tarball contains two .spec files, we cannot
 -        #       simply rebuild the tarball
 -        ln $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
 -            error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
++	make rpm || return 255
  
 -        # First build the userspace tools RPMs
 -        if ! $RPMBUILD $targets -bb $pkg/$pkg.spec \
@@ -892,7 +918,9 @@ index f389505..d22a9f6 100755
 -            --define "_topdir $TOPDIR" 2>&1; then
 -            return 255
 -        fi
-+	make rpm || return 255
++	if $DO_SRC; then
++	    make srpm || return 255
++	fi
  
 -        if $DO_SRC; then
 -            if ! $RPMBUILD -bs $pkg/$pkg.spec \
@@ -903,11 +931,9 @@ index f389505..d22a9f6 100755
 -                return 255
 -            fi
 -        fi
-+	if $DO_SRC; then
-+	    make srpm || return 255
-+	    mkdir -p $TOPDIR/SRPMS/
-+	    mv $pkg*.src.rpm $TOPDIR/SRPMS/
-+	fi
++	$DO_SRC && mv $pkg*.src.rpm $TOPDIR/SRPMS/
++	mv $pkg*.noarch.rpm $TOPDIR/RPMS/noarch/
++	mv *$pkg*.$arch.rpm $TOPDIR/RPMS/$(basearch $arch)/
  
 -        # Now the kernel module RPMs
 -        # Need to provide pointers to the lustre kernel source, objects, usr/src
@@ -923,10 +949,7 @@ index f389505..d22a9f6 100755
 -            --define "_topdir $TOPDIR" 2>&1; then
 -            return 255
 -        fi
-+	mkdir -p $TOPDIR/RPMS/$(basearch)/ $TOPDIR/RPMS/noarch/
-+	mv $pkg*.noarch.rpm $TOPDIR/RPMS/noarch/
-+	mv *$pkg*.$(basearch).rpm $TOPDIR/RPMS/$(basearch)/
- 
+-
 -        if $DO_SRC; then
 -            if ! $RPMBUILD -bs $pkg/$rpmmod.spec \
 -                --nodeps -v \
@@ -947,7 +970,7 @@ index f389505..d22a9f6 100755
 +        # We have built the rpms for the package. Now we need to extract the
          # contained files so we can build further things against them
 -        local rpm=$(ls $TOPDIR/RPMS/*/$rpmmod-devel-*.rpm)
-+        local rpm=$(ls $TOPDIR/RPMS/noarch/$dkmspkg-*.noarch.rpm)
++        local rpm=$(ls $TOPDIR/RPMS/*/$rpmpkg-*.rpm)
  
          # cpio only extract to pwd so we need to go there.
          pushd $TOPDIR

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index f9afeae..ef0f91d 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -34,14 +34,16 @@ RDEPEND="${DEPEND}"
 
 PATCHES=(
 	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
-	"${FILESDIR}/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
-	"${FILESDIR}/0004-LU-2800-llite-introduce-local-getname.patch"
-	"${FILESDIR}/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
-	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
-	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0008-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
+	"${FILESDIR}/0002-LU-1812-kernel-3.0-SuSE-and-3.6-FC18-server-patches.patch"
+	"${FILESDIR}/0003-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
+	"${FILESDIR}/0004-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
+	"${FILESDIR}/0005-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
+	"${FILESDIR}/0006-LU-2800-llite-introduce-local-getname.patch"
+	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
+	"${FILESDIR}/0008-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
+	"${FILESDIR}/0009-LU-3079-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0010-LU-3079-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-04-16 12:08 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-04-16 12:08 UTC (permalink / raw
  To: gentoo-commits

commit:     b80eb8efbb6d563d66b637019493db25333fc829
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 16 12:07:39 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue Apr 16 12:07:39 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=b80eb8ef

Update lustre patches

Package-Manager: portage-2.2.0_alpha173
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   17 +++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    4 +-
 ...nel-sock_map_fd-replaced-by-sock_alloc_fi.patch |  137 +++++++++++++++++++
 ...cfs-use-sock_alloc_file-instead-of-sock_m.patch |  124 -----------------
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    4 +-
 ...004-LU-2800-llite-introduce-local-getname.patch |    4 +-
 ...-kernel-Kernel-update-for-3.7.2-201.fc18.patch} |  143 +++++++++++--------
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |   10 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   44 +-----
 .../files/0008-LU-2987-llite-rcu-free-inode.patch  |   10 +-
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |  115 ----------------
 ...-build-zfs-0.6.1-kmod-dkms-compatibility.patch} |  104 +++++++++++++-
 ...50-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch |   82 -----------
 sys-cluster/lustre/lustre-9999.ebuild              |    8 +-
 14 files changed, 361 insertions(+), 445 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index d65f91b..32b0e92 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,23 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  16 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch,
+  +files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch,
+  +files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  -files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  -files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  -files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0004-LU-2800-llite-introduce-local-getname.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0008-LU-2987-llite-rcu-free-inode.patch, lustre-9999.ebuild:
+  Update lustre patches
+
   16 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Update lustre deps
 

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 254e228..3c5b3f8 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From 6e54f97374f158165cc591c3c41d3db506da26ba Mon Sep 17 00:00:00 2001
+From cd588ca78ac730769a98c105e7f878b3a712116b Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/11] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 1/9] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
new file mode 100644
index 0000000..836bd9f
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch
@@ -0,0 +1,137 @@
+From 96f2fa9ccf8fe00d4b0bdb79f6821ccc140fa87c Mon Sep 17 00:00:00 2001
+From: yangsheng <yang.sheng@intel.com>
+Date: Mon, 8 Apr 2013 21:14:09 +0800
+Subject: [PATCH 2/9] LU-2686 kernel: sock_map_fd() replaced by
+ sock_alloc_file()
+
+Use sock_alloc_file() replace sock_map_fd().
+
+Signed-off-by: yang sheng <yang.sheng@intel.com>
+Change-Id: I04cbcd651689af6b82b48ba5d49ddbf99a6758bf
+---
+ libcfs/autoconf/lustre-libcfs.m4  | 27 ++++++++++++++++++++++++
+ libcfs/libcfs/linux/linux-tcpip.c | 44 +++++++++++++++++++++++----------------
+ 2 files changed, 53 insertions(+), 18 deletions(-)
+
+diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
+index 312542d..4545a7a 100644
+--- a/libcfs/autoconf/lustre-libcfs.m4
++++ b/libcfs/autoconf/lustre-libcfs.m4
+@@ -793,6 +793,31 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# FC18 3.7.2-201 unexport sock_map_fd() change to
++# use sock_alloc_file().
++# upstream commit 56b31d1c9f1e6a3ad92e7bfe252721e05d92b285
++#
++AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE],
++[AC_MSG_CHECKING([sock_alloc_file is exported])
++LB_CHECK_SYMBOL_EXPORT([sock_alloc_file], [net/socket.c],[
++	LB_LINUX_TRY_COMPILE([
++		#include <linux/net.h>
++	],[
++		sock_alloc_file(NULL, 0, NULL);
++	],[
++		AC_MSG_RESULT(yes)
++		AC_DEFINE(HAVE_SOCK_ALLOC_FILE_3ARGS, 1,
++			[sock_alloc_file takes 3 arguments])
++	],[
++		AC_MSG_RESULT(yes)
++		AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
++			[sock_alloc_file is exported])
++	])
++],[
++])
++])
++
++#
+ # LIBCFS_PROG_LINUX
+ #
+ # LNet linux kernel checks
+@@ -850,6 +875,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
+ LC_SK_SLEEP
+ # 2.6.40 fc15
+ LC_SHRINK_CONTROL
++# 3.7
++LIBCFS_SOCK_ALLOC_FILE
+ ])
+ 
+ #
+diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
+index 0a31b55..3be0f68 100644
+--- a/libcfs/libcfs/linux/linux-tcpip.c
++++ b/libcfs/libcfs/linux/linux-tcpip.c
+@@ -47,11 +47,11 @@
+ int
+ libcfs_sock_ioctl(int cmd, unsigned long arg)
+ {
+-        mm_segment_t   oldmm = get_fs();
+-        struct socket  *sock;
+-        int             fd;
+-        int             rc;
+-        struct file     *sock_filp;
++	mm_segment_t    oldmm = get_fs();
++	struct socket  *sock;
++	int             fd = -1;
++	int             rc;
++	struct file    *sock_filp;
+ 
+         rc = sock_create (PF_INET, SOCK_STREAM, 0, &sock);
+         if (rc != 0) {
+@@ -59,21 +59,27 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+                 return rc;
+         }
+ 
+-#ifdef HAVE_SOCK_MAP_FD_2ARG
+-        fd = sock_map_fd(sock,0);
++#if !defined(HAVE_SOCK_ALLOC_FILE) && !defined(HAVE_SOCK_ALLOC_FILE_3ARGS)
++# ifdef HAVE_SOCK_MAP_FD_2ARG
++	fd = sock_map_fd(sock,0);
++# else
++	fd = sock_map_fd(sock);
++# endif
++	if (fd < 0) {
++		rc = fd;
++		goto out;
++	}
++	sock_filp = fget(fd);
+ #else
+-        fd = sock_map_fd(sock);
++# ifdef HAVE_SOCK_ALLOC_FILE_3ARGS
++	sock_filp = sock_alloc_file(sock, 0, NULL);
++# else
++	sock_filp = sock_alloc_file(sock, 0);
++# endif
+ #endif
+-        if (fd < 0) {
+-                rc = fd;
+-                sock_release(sock);
+-                goto out;
+-        }
+-
+-        sock_filp = fget(fd);
+         if (!sock_filp) {
+                 rc = -ENOMEM;
+-                goto out_fd;
++                goto out;
+         }
+ 
+ 	set_fs(KERNEL_DS);
+@@ -83,9 +89,11 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+ 
+         fput(sock_filp);
+ 
+- out_fd:
+-        sys_close(fd);
+  out:
++	if (fd >= 0)
++		sys_close(fd);
++	else
++		sock_release(sock);
+         return rc;
+ }
+ 
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
deleted file mode 100644
index a8797a0..0000000
--- a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 18036cc8a9ddc00c269b9b3b7ea25529a0a25e9b Mon Sep 17 00:00:00 2001
-From: Jeff Mahoney <jeffm@suse.com>
-Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 02/11] LU-2800 libcfs: use sock_alloc_file instead of
- sock_map_fd
-
-v2.6.27 added a second argument to sock_map_fd. Earlier versions are
-out of scope and we can remove the test for the number of arguments.
-
-Commit 56b31d1c (v3.7) made sock_map_fd() static and exported
-sock_alloc_file() instead. For our purposes, we didn't want to expose
-the file in the descriptor table anyway.
-
-Signed-off-by: Jeff Mahoney <jeffm@suse.com>
-Change-Id: I4e12da8c102b5d682db9658187330ae601b00a21
----
- libcfs/autoconf/lustre-libcfs.m4  | 18 ++++++++++--------
- libcfs/libcfs/linux/linux-tcpip.c | 17 ++++++++++++-----
- 2 files changed, 22 insertions(+), 13 deletions(-)
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 312542d..380fd5b 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -500,18 +500,19 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- # 2.6.27 have second argument to sock_map_fd
--AC_DEFUN([LIBCFS_SOCK_MAP_FD_2ARG],
--[AC_MSG_CHECKING([sock_map_fd have second argument])
-+# 3.7 (56b31d1c) un-exported sock_map_fd in favor of sock_alloc_file
-+AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE],
-+[AC_MSG_CHECKING([sock_alloc_file is exported])
- LB_LINUX_TRY_COMPILE([
- 	#include <linux/net.h>
- ],[
--        sock_map_fd(NULL, 0);
-+	sock_alloc_file(NULL, 0, NULL);
- ],[
--        AC_MSG_RESULT(yes)
--        AC_DEFINE(HAVE_SOCK_MAP_FD_2ARG, 1,
--                  [sock_map_fd have second argument])
-+	AC_MSG_RESULT(yes)
-+	AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
-+		  [sock_alloc_file is exported])
- ],[
--        AC_MSG_RESULT(NO)
-+	AC_MSG_RESULT(NO)
- ])
- ])
- 
-@@ -834,7 +835,6 @@ LIBCFS_CPU_TOPOLOGY
- LIBCFS_STRUCT_SHASH_ALG
- # 2.6.30
- LIBCFS_FUNC_UNSHARE_FS_STRUCT
--LIBCFS_SOCK_MAP_FD_2ARG
- # 2.6.31
- LIBCFS_HAVE_SET_MEMS_ALLOWED
- # 2.6.32
-@@ -850,6 +850,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
- LC_SK_SLEEP
- # 2.6.40 fc15
- LC_SHRINK_CONTROL
-+# 3.7
-+LIBCFS_SOCK_ALLOC_FILE
- ])
- 
- #
-diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
-index 0a31b55..b83ed84 100644
---- a/libcfs/libcfs/linux/linux-tcpip.c
-+++ b/libcfs/libcfs/linux/linux-tcpip.c
-@@ -49,7 +49,9 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
- {
-         mm_segment_t   oldmm = get_fs();
-         struct socket  *sock;
-+#ifndef HAVE_SOCK_ALLOC_FILE
-         int             fd;
-+#endif
-         int             rc;
-         struct file     *sock_filp;
- 
-@@ -59,11 +61,8 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
-                 return rc;
-         }
- 
--#ifdef HAVE_SOCK_MAP_FD_2ARG
-+#ifndef HAVE_SOCK_ALLOC_FILE
-         fd = sock_map_fd(sock,0);
--#else
--        fd = sock_map_fd(sock);
--#endif
-         if (fd < 0) {
-                 rc = fd;
-                 sock_release(sock);
-@@ -75,7 +74,13 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
-                 rc = -ENOMEM;
-                 goto out_fd;
-         }
--
-+#else
-+	sock_filp = sock_alloc_file(sock, 0, NULL);
-+	if (IS_ERR(sock_filp)) {
-+		rc = PTR_ERR(sock_filp);
-+		goto out;
-+	}
-+#endif
- 	set_fs(KERNEL_DS);
- 	if (sock_filp->f_op->unlocked_ioctl)
- 		rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg);
-@@ -83,8 +88,10 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
- 
-         fput(sock_filp);
- 
-+#ifndef HAVE_SOCK_ALLOC_FILE
-  out_fd:
-         sys_close(fd);
-+#endif
-  out:
-         return rc;
- }
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index f713d05..65db8d0 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From f2c24d99e4d2bd77411acc300d11ab70fc9d6abc Mon Sep 17 00:00:00 2001
+From f8338a543db484f72f221ac57444afb96a852cfb Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 03/11] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 3/9] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
index 859adce..72c0d64 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From 29d6316336d5673e8c90d819b82fb202357ba9e2 Mon Sep 17 00:00:00 2001
+From 954e9511b7f162f4cee82b9c03d8fff7adc09e64 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 04/11] LU-2800 llite: introduce local getname()
+Subject: [PATCH 4/9] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
similarity index 53%
rename from sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
rename to sys-cluster/lustre/files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
index a0d38e2..3aac639 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch
@@ -1,23 +1,22 @@
-From a0e92d4f975aedaa563d0a9f12ef0774d7cde352 Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 05/11] LU-2850 build: check header files in generated uapi dir
+From 40fc79f1ea2b8ce3ab895af2a0c6dcf2c1a3ab04 Mon Sep 17 00:00:00 2001
+From: yangsheng <yang.sheng@intel.com>
+Date: Mon, 8 Apr 2013 21:04:22 +0800
+Subject: [PATCH 5/9] LU-2686 kernel: Kernel update for 3.7.2-201.fc18
 
-Upstream moved UAPI headers into generated/uapi directory since
-v3.7. We need to check/include necessary header files there.
+Add uapi header to include search path.
 
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: Ib104919189ebc0af7d3b5e9ca3b866b3b98be3dc
+Signed-off-by: yang sheng <yang.sheng@intel.com>
+Change-Id: Id90e091fef63ebf5bb8e7765969aa3148cc31aa2
 ---
  autoMakefile.am                 |  2 +-
- config/lustre-build-linux.m4    | 14 ++++++++------
- ldiskfs/config/ldiskfs-build.m4 | 14 ++++++++------
- lustre/autoconf/lustre-core.m4  |  2 +-
- lustre/scripts/version_tag.pl   |  1 +
- 5 files changed, 19 insertions(+), 14 deletions(-)
+ config/lustre-build-linux.m4    | 21 +++++++++++++--------
+ ldiskfs/config/ldiskfs-build.m4 | 22 ++++++++++++++--------
+ lustre/autoconf/lustre-core.m4  |  1 +
+ lustre/scripts/version_tag.pl   |  4 +++-
+ 5 files changed, 32 insertions(+), 18 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 79bcd65..93608de 100644
+index 79bcd65..bfec407 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -84,7 +84,7 @@ all-am: modules
@@ -25,12 +24,12 @@ index 79bcd65..93608de 100644
  	$(MAKE) CC="$(CC)" -C $(LINUX_OBJ)			     \
  	-f $(PWD)/build/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) \
 -        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
-+        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -I$$(srctree)/arch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iinclude -Iinclude/uapi -Iinclude/generated -Iinclude/generated/uapi $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
++        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iarch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/include/uapi -Iinclude/generated/uapi -include $(CONFIG_INCLUDE)' \
  	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
-index 244d398..b995875 100644
+index 244d398..0ab7cdb 100644
 --- a/config/lustre-build-linux.m4
 +++ b/config/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -38,121 +37,145 @@ index 244d398..b995875 100644
  	LINUXRELEASEHEADER=$AUTOCONF_HDIR/utsrelease.h
  else
 -	LINUXRELEASEHEADER=linux/version.h
-+	LINUXRELEASEHEADER=$LINUXVERSION_HDIR/version.h
++	LINUXRELEASEHEADER=$VERSION_HDIR/version.h
  fi
  LB_LINUX_TRY_MAKE([
  	#include <$LINUXRELEASEHEADER>
+@@ -65,7 +65,7 @@ LB_LINUX_TRY_MAKE([
+ rm -f build/conftest.i
+ if test x$LINUXRELEASE = x ; then
+ 	AC_MSG_RESULT([unknown])
+-	AC_MSG_ERROR([Could not determine Linux release version from linux/version.h.])
++	AC_MSG_ERROR([Could not determine Linux release version from $LINUXRELEASEHEADER.])
+ fi
+ AC_MSG_RESULT([$LINUXRELEASE])
+ AC_SUBST(LINUXRELEASE)
 @@ -96,7 +96,7 @@ AC_SUBST(RELEASE)
  # check is redhat/suse kernels
  AC_MSG_CHECKING([that RedHat kernel])
  LB_LINUX_TRY_COMPILE([
 -		#include <linux/version.h>
-+		#include <$LINUXVERSION_HDIR/version.h>
++		#include <$VERSION_HDIR/version.h>
  	],[
  		#ifndef RHEL_RELEASE_CODE
  		#error "not redhat kernel"
-@@ -222,8 +222,10 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+@@ -222,9 +222,13 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
          [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
  	[AC_MSG_ERROR([Run make config in $LINUX.])])])
          AC_SUBST(AUTOCONF_HDIR)
 -LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
 -	[AC_MSG_ERROR([Run make config in $LINUX.])])
-+LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],[LINUXVERSION_HDIR=generated/uapi/linux],
-+        [LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[LINUXVERSION_HDIR=linux],
-+	[AC_MSG_ERROR([Run make config in $LINUX.])])])
-+        AC_SUBST(LINUXVERSION_HDIR)
- 
+-
++LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
++	[LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
++		[VERSION_HDIR=generated/uapi/linux],
++		[AC_MSG_ERROR([Run make config in $LINUX.])])
++	])
++        AC_SUBST(VERSION_HDIR)
++ 
  # ----------- kconfig.h exists ---------------
  # kernel 3.1, $LINUX/include/linux/kconfig.h is added
-@@ -240,7 +242,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
+ # see kernel commit 2a11c8ea20bf850b3a2c60db8c2e7497d28aba99
+@@ -240,7 +244,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
  # tarred up the tree and ran make dep etc. in it, then
  # version.h gets overwritten with a standard linux one.
  
 -if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
-+if grep rhconfig $LINUX_OBJ/include/$LINUXVERSION_HDIR/version.h >/dev/null ; then
++if grep rhconfig $LINUX_OBJ/include/$VERSION_HDIR/version.h >/dev/null ; then
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-@@ -312,7 +314,7 @@ $2
+@@ -312,7 +316,8 @@ $2
  AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
  [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
  rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
 -AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
-+AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/uapi -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated/uapi -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -I$LINUX/include/uapi -I$LINUX/include/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
++SUBARCH=$(echo $target_cpu | sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/')
++AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/$SUBARCH/include -I$LINUX/arch/$SUBARCH/include/generated -Iinclude -I$LINUX/include -Iinclude2 -I$LINUX/include/uapi -I$LINUX/include/generated -I$LINUX/arch/$SUBARCH/include/uapi -Iarch/$SUBARCH/include/generated/uapi -I$LINUX/include/uapi -Iinclude/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
  	[$4],
  	[_AC_MSG_LOG_CONFTEST
  m4_ifvaln([$5],[$5])dnl])
 diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
-index 2feec80..4a4ecf4 100644
+index 2feec80..aee760e 100644
 --- a/ldiskfs/config/ldiskfs-build.m4
 +++ b/ldiskfs/config/ldiskfs-build.m4
-@@ -1,11 +1,11 @@
- AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
- 	AC_MSG_CHECKING([kernel source version])
- 
--	utsrelease1=${LINUX_OBJ}/include/linux/version.h
-+	utsrelease1=${LINUX_OBJ}/include/$LINUXVERSION_HDIR/version.h
+@@ -4,12 +4,12 @@ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
+ 	utsrelease1=${LINUX_OBJ}/include/linux/version.h
  	utsrelease2=${LINUX_OBJ}/include/linux/utsrelease.h
  	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
- 	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
+-	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
 -		utsrelease=linux/version.h
-+		utsrelease=$LINUXVERSION_HDIR/version.h
++	AS_IF([test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
++		utsrelease=generated/utsrelease.h
  	], [test -r ${utsrelease2} && fgrep -q UTS_RELEASE ${utsrelease2}], [
  		utsrelease=linux/utsrelease.h
- 	], [test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
+-	], [test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
+-		utsrelease=generated/utsrelease.h
++	], [test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
++		utsrelease=linux/version.h
+ 	])
+ 
+ 	AS_IF([test "${utsrelease}"], [
 @@ -64,7 +64,7 @@ AC_SUBST(RELEASE)
  # check is redhat/suse kernels
  AC_MSG_CHECKING([that RedHat kernel])
  LB_LINUX_TRY_COMPILE([
 -		#include <linux/version.h>
-+		#include <$LINUXVERSION_HDIR/version.h>
++		#include <$VERSION_HDIR/version.h>
  	],[
  		#ifndef RHEL_RELEASE_CODE
  		#error "not redhat kernel"
-@@ -190,8 +190,10 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+@@ -190,8 +190,14 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
          [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
  	[AC_MSG_ERROR([Run make config in $LINUX.])])])
          AC_SUBST(AUTOCONF_HDIR)
 -LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
 -	[AC_MSG_ERROR([Run make config in $LINUX.])])
-+LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],[LINUXVERSION_HDIR=generated/uapi/linux],
-+        [LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[LINUXVERSION_HDIR=linux],
-+	[AC_MSG_ERROR([Run make config in $LINUX.])])])
-+        AC_SUBST(LINUXVERSION_HDIR)
++LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h], [VERSION_HDIR=linux],
++       [LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],
++               [VERSION_HDIR=generated/uapi/linux],
++               [AC_MSG_ERROR([Run make config in $LINUX.])])
++       ])
++       AC_SUBST(VERSION_HDIR)
++ 
++
  
  # ----------- kconfig.h exists ---------------
  # kernel 3.1, $LINUX/include/linux/kconfig.h is added
-@@ -208,7 +210,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
+@@ -208,7 +214,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
  # tarred up the tree and ran make dep etc. in it, then
  # version.h gets overwritten with a standard linux one.
  
 -if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
-+if grep rhconfig $LINUX_OBJ/include/$LINUXVERSION_HDIR/version.h >/dev/null ; then
++if grep rhconfig $LINUX_OBJ/include/$VERSION_HDIR/version.h >/dev/null ; then
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index b9ff1ca..c13ad6a 100644
+index b9ff1ca..9447b2b 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -319,7 +319,7 @@ AC_DEFUN([LC_BIT_SPINLOCK_H],
- AC_DEFUN([LC_CONST_ACL_SIZE],
- [AC_MSG_CHECKING([calc acl size])
- tmp_flags="$CFLAGS"
--CFLAGS="$CFLAGS -I$LINUX/include -I$LINUX_OBJ/include -I$LINUX_OBJ/include2 -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -include $AUTOCONF_HDIR/autoconf.h $EXTRA_KCFLAGS"
-+CFLAGS="$CFLAGS -I$LINUX/include -I$LINUX_OBJ/include -I$LINUX_OBJ/include/uapi -I$LINUX_OBJ/include2 -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I $LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/uapi -include $AUTOCONF_HDIR/autoconf.h $EXTRA_KCFLAGS"
- AC_TRY_RUN([
-         #define __KERNEL__
-         #include <linux/types.h>
+@@ -328,6 +328,7 @@ AC_TRY_RUN([
+         #define __LINUX_POSIX_ACL_H
+ 
+         #ifdef CONFIG_FS_POSIX_ACL
++        struct user_namespace;
+         # include <linux/posix_acl_xattr.h>
+         #endif
+ 
 diff --git a/lustre/scripts/version_tag.pl b/lustre/scripts/version_tag.pl
-index 61796c9..942e54f 100644
+index 61796c9..07cbdf8 100644
 --- a/lustre/scripts/version_tag.pl
 +++ b/lustre/scripts/version_tag.pl
-@@ -45,6 +45,7 @@ sub get_kernver($$)
+@@ -43,8 +43,10 @@ sub get_kernver($$)
+     my $objdir = shift;
+ 
      my $ver = new IO::File;
-     if (!$ver->open("$objdir/include/linux/utsrelease.h") &&
+-    if (!$ver->open("$objdir/include/linux/utsrelease.h") &&
++    if (!$ver->open("$objdir/include/generated/utsrelease.h") &&
++        !$ver->open("$objdir/include/linux/utsrelease.h") &&
          !$ver->open("$objdir/include/linux/version.h") &&
-+        !$ver->open("$objdir/include/generated/uapi/linux/version.h") &&
++        !$ver->open("$dir/include/generated/utsrelease.h") &&
          !$ver->open("$dir/include/linux/utsrelease.h") &&
          !$ver->open("$dir/include/linux/version.h")) {
              die "Run make dep on '$dir'\n";

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index c0099c3..d4f0e73 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From de4775789c14be8dce4b8dbb168c06c0055d1ca2 Mon Sep 17 00:00:00 2001
+From e6813c71a86696b6ba333d2d0af74f4bcc6d4468 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 27 Mar 2013 08:49:01 +0400
-Subject: [PATCH 06/11] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 6/9] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
@@ -14,10 +14,10 @@ Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
  2 files changed, 32 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index c13ad6a..604e00b 100644
+index 9447b2b..485b370 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2252,6 +2252,25 @@ LB_LINUX_TRY_COMPILE([
+@@ -2253,6 +2253,25 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -43,7 +43,7 @@ index c13ad6a..604e00b 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2435,6 +2454,10 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2436,6 +2455,10 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.7
   	 LC_HAVE_POSIXACL_USER_NS

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index c8207a0..2ab2042 100644
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,22 +1,17 @@
-From 08c0e5bebb11c18370cce8b437d8e73b9d5d49db Mon Sep 17 00:00:00 2001
+From 1ab28dd30f7303302d4b5825d7b0e0417a339eee Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 07/11] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 7/9] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
 to create new kernel threads, we should really switch to
 kthread_run() and elimilate daemonize().
 
-Conflicts:
-	lustre/obdclass/llog_cat.c
-	lustre/ptlrpc/recov_thread.c
-
 Signed-off-by: Peng Tao <tao.peng@emc.com>
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
 ---
- libcfs/autoconf/lustre-libcfs.m4           | 37 --------------
+ libcfs/autoconf/lustre-libcfs.m4           | 19 -------
  libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
  libcfs/include/libcfs/libcfs.h             | 13 +----
  libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
@@ -84,39 +79,14 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 515 insertions(+), 763 deletions(-)
+ 68 files changed, 515 insertions(+), 745 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 380fd5b..a1ed4b0 100644
+index 4545a7a..03a428c 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -639,24 +639,6 @@ LB_LINUX_TRY_COMPILE([
- ])
- ])
- 
--AC_DEFUN([LIBCFS_HAVE_OOM_H],
--[LB_CHECK_FILE([$LINUX/include/linux/oom.h], [
--        AC_DEFINE(HAVE_LINUX_OOM_H, 1,
--                [kernel has include/oom.h])
--],[
--        AC_MSG_RESULT([no])
--])
--])
--
--AC_DEFUN([LIBCFS_HAVE_KEYTYPE_H],
--[LB_CHECK_FILE([$LINUX/include/linux/key-type.h], [
--        AC_DEFINE(HAVE_LINUX_KEYTYPE_H, 1,
--                [kernel has include/key-type.h])
--],[
--        AC_MSG_RESULT([no])
--])
--])
--
- #
- # check set_mems_allowed
- # 2.6.31 adds function set_mems_allowed in cpuset.h
-@@ -697,23 +679,6 @@ LB_LINUX_TRY_COMPILE([
+@@ -696,23 +696,6 @@ LB_LINUX_TRY_COMPILE([
  ])
  ])
  
@@ -140,7 +110,7 @@ index 380fd5b..a1ed4b0 100644
  #
  # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
  #
-@@ -840,8 +805,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
+@@ -865,8 +848,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
  # 2.6.32
  LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
  LC_SHRINKER_WANT_SHRINK_PTR

diff --git a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
index 915e072..bc9a0ef 100644
--- a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From 1abfc6069f78a8efd6002dfe09b6a8196f47552b Mon Sep 17 00:00:00 2001
+From eb03fd5e6cfb84118903ed18fe77a77c4935c662 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 08/11] LU-2987 llite: rcu-free inode
+Subject: [PATCH 8/9] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.
@@ -14,10 +14,10 @@ Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
  2 files changed, 37 insertions(+), 2 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 604e00b..bf83193 100644
+index 485b370..c36b055 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -1682,6 +1682,26 @@ LB_LINUX_TRY_COMPILE([
+@@ -1683,6 +1683,26 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -44,7 +44,7 @@ index 604e00b..bf83193 100644
  # 2.6.38 export blkdev_get_by_dev
  #
  AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
-@@ -2408,6 +2428,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2409,6 +2429,7 @@ AC_DEFUN([LC_PROG_LINUX],
           LC_GENERIC_PERMISSION
           LC_QUOTA_ON_USE_PATH
           LC_DCACHE_LOCK

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
deleted file mode 100644
index faa30e6..0000000
--- a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ /dev/null
@@ -1,115 +0,0 @@
-From 8ef04c8c6d6d8e9e5ba187ba1e88965aabf9794c Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 09/11] LU-2850 kernel: 3.9 hlist_for_each_entry uses 3 args
-
-In 3.9 hlist_for_each_entry use 3 args since commit
-
-commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
-Author: Sasha Levin <sasha.levin@oracle.com>
-Date:   Wed Feb 27 17:06:00 2013 -0800
-
-    hlist: drop the node parameter from iterators
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: I8f38d562607de21771b03575e37cc0498867a570
----
- libcfs/include/libcfs/list.h           | 10 ++++++++++
- lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++++++++++
- lustre/include/linux/lustre_compat25.h |  5 +++++
- 3 files changed, 41 insertions(+)
-
-diff --git a/libcfs/include/libcfs/list.h b/libcfs/include/libcfs/list.h
-index be06e74..b747804 100644
---- a/libcfs/include/libcfs/list.h
-+++ b/libcfs/include/libcfs/list.h
-@@ -91,14 +91,24 @@ typedef struct hlist_node cfs_hlist_node_t;
- #define cfs_hlist_for_each(pos, head)      hlist_for_each(pos, head)
- #define cfs_hlist_for_each_safe(pos, n, head) \
-         hlist_for_each_safe(pos, n, head)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define cfs_hlist_for_each_entry(tpos, pos, head, member) \
-+	pos = NULL; hlist_for_each_entry(tpos, head, member)
-+#else
- #define cfs_hlist_for_each_entry(tpos, pos, head, member) \
-         hlist_for_each_entry(tpos, pos, head, member)
-+#endif
- #define cfs_hlist_for_each_entry_continue(tpos, pos, member) \
-         hlist_for_each_entry_continue(tpos, pos, member)
- #define cfs_hlist_for_each_entry_from(tpos, pos, member) \
-         hlist_for_each_entry_from(tpos, pos, member)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
-+	pos = NULL; hlist_for_each_entry_safe(tpos, n, head, member)
-+#else
- #define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
-         hlist_for_each_entry_safe(tpos, pos, n, head, member)
-+#endif
- 
- #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
- #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index bf83193..5c1fee2 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2291,6 +2291,29 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.9 uses hlist_for_each_entry with 3 args
-+# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
-+#
-+AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
-+[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/list.h>
-+	#include <linux/fs.h>
-+],[
-+	struct inode *inode;
-+	struct dentry *dentry;
-+	hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
-+		continue;
-+	}
-+],[
-+	AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2479,6 +2502,9 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 # 3.8
- 	 LC_HAVE_MM_VMTRUNCATE
- 
-+	 # 3.9
-+	 LC_HAVE_HLIST_FOR_EACH_3ARG
-+
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index ca485cd..ecd689f 100644
---- a/lustre/include/linux/lustre_compat25.h
-+++ b/lustre/include/linux/lustre_compat25.h
-@@ -620,8 +620,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
- #define ll_d_hlist_empty(list) hlist_empty(list)
- #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
- #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-+	p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
-+#else
- #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-         hlist_for_each_entry(dentry, p, i_dentry, alias)
-+#endif
- #else
- #define ll_d_hlist_node list_head
- #define ll_d_hlist_empty(list) list_empty(list)
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
similarity index 87%
rename from sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
rename to sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
index de36db2..be8f0da 100644
--- a/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
+++ b/sys-cluster/lustre/files/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -1,7 +1,7 @@
-From 1542e6ffacd11b54b5ffe71b0a107be0ce20732d Mon Sep 17 00:00:00 2001
+From eb4e257e6d9bab8401bc746a3d00c80be5748e92 Mon Sep 17 00:00:00 2001
 From: Brian Behlendorf <behlendorf1@llnl.gov>
 Date: Thu, 28 Mar 2013 12:18:27 -0700
-Subject: [PATCH 11/11] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+Subject: [PATCH 9/9] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
 
 With the release of zfs-0.6.1 the default install location of
 the zfs kmod headers and objects has changed.  The kmod headers
@@ -50,14 +50,14 @@ Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
  autoMakefile.am                |   2 +-
  config/lustre-build-ldiskfs.m4 |   1 -
  config/lustre-build-zfs.m4     | 731 ++++++++++++++++++-----------------------
- contrib/lbuild/lbuild          |   2 +
+ contrib/lbuild/lbuild          |  72 +---
  lustre.spec.in                 |   2 +-
  lustre/osd-zfs/Makefile.in     |   3 +-
  lustre/utils/Makefile.am       |   6 +-
- 7 files changed, 326 insertions(+), 421 deletions(-)
+ 7 files changed, 340 insertions(+), 477 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 93608de..5880d1c 100644
+index bfec407..27e16c1 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -1,4 +1,4 @@
@@ -847,9 +847,22 @@ index bfc647f..507afd8 100644
 +	AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
  ])
 diff --git a/contrib/lbuild/lbuild b/contrib/lbuild/lbuild
-index f389505..3eda63f 100755
+index f389505..d22a9f6 100755
 --- a/contrib/lbuild/lbuild
 +++ b/contrib/lbuild/lbuild
+@@ -1009,10 +1009,10 @@ build_spl_zfs() {
+     local pkg
+     for pkg in spl zfs; do
+ 
+-        local rpmmod spldir
++        local dkmspkg
+ 
+         [ "$pkg" == "zfs" ] && spldir="$(ls -d $TOPDIR/usr/src/spl-*/*)"
+-        rpmmod=$pkg-modules
++        dkmspkg=$pkg-dkms
+ 
+         # need to fetch the repo in order to build it.
+         # default to github but allow override
 @@ -1020,6 +1020,8 @@ build_spl_zfs() {
  
          pushd $pkg || return 255
@@ -859,6 +872,85 @@ index f389505..3eda63f 100755
          # XXX - _having_ to give a package a kernel just to have it configure
          #       enough to do a "make dist" is truely bogus!
          if  ! ./configure --with-linux=${LINUX} \
+@@ -1028,66 +1030,24 @@ build_spl_zfs() {
+             popd
+             return 255
+         fi
+-        popd
+-
+-        # XXX - dirty hack time.  ~sigh~
+-        #       because the spl tarball contains two .spec files, we cannot
+-        #       simply rebuild the tarball
+-        ln $pkg/$pkg-*.tar.gz $TOPDIR/SOURCES ||
+-            error "failed to link $pkg/$pkg-*.tar.gz into $TOPDIR/SOURCES"
+ 
+-        # First build the userspace tools RPMs
+-        if ! $RPMBUILD $targets -bb $pkg/$pkg.spec \
+-            --nodeps -v \
+-            --define "configure_args ${CONFIGURE_FLAGS}" \
+-            --define "_tmppath /var/tmp" \
+-            --define "_topdir $TOPDIR" 2>&1; then
+-            return 255
+-        fi
++	make rpm || return 255
+ 
+-        if $DO_SRC; then
+-            if ! $RPMBUILD -bs $pkg/$pkg.spec \
+-                --nodeps -v \
+-                --define "configure_args ${CONFIGURE_FLAGS}" \
+-                --define "_tmppath /var/tmp" \
+-                --define "_topdir $TOPDIR" 2>&1; then
+-                return 255
+-            fi
+-        fi
++	if $DO_SRC; then
++	    make srpm || return 255
++	    mkdir -p $TOPDIR/SRPMS/
++	    mv $pkg*.src.rpm $TOPDIR/SRPMS/
++	fi
+ 
+-        # Now the kernel module RPMs
+-        # Need to provide pointers to the lustre kernel source, objects, usr/src
+-        if ! $RPMBUILD $targets -bb $pkg/$rpmmod.spec \
+-            --nodeps -v \
+-            --define "require_kdir ${linux}" \
+-            ${linuxobj:+--define "require_kobj ${linuxobj}"} \
+-            ${spldir:+--define "require_spldir ${spldir}"} \
+-            --define "configure_args ${CONFIGURE_FLAGS}" \
+-            --define "_usrsrc $TOPDIR/usr/src" \
+-            --define "kver $kver" \
+-            --define "_tmppath /var/tmp" \
+-            --define "_topdir $TOPDIR" 2>&1; then
+-            return 255
+-        fi
++	mkdir -p $TOPDIR/RPMS/$(basearch)/ $TOPDIR/RPMS/noarch/
++	mv $pkg*.noarch.rpm $TOPDIR/RPMS/noarch/
++	mv *$pkg*.$(basearch).rpm $TOPDIR/RPMS/$(basearch)/
+ 
+-        if $DO_SRC; then
+-            if ! $RPMBUILD -bs $pkg/$rpmmod.spec \
+-                --nodeps -v \
+-                --define "require_kdir ${linux}" \
+-                ${linuxobj:+--define "require_kobj ${linuxobj}"} \
+-                ${spldir:+--define "require_spldir ${spldir}"} \
+-                --define "configure_args ${CONFIGURE_FLAGS}" \
+-                --define "_usrsrc $TOPDIR/usr/src" \
+-                --define "kver $kver" \
+-                --define "_tmppath /var/tmp" \
+-                --define "_topdir $TOPDIR" 2>&1; then
+-                return 255
+-            fi
+-        fi
++        popd
+ 
+-        # We have built the rpms for the package. No we need to extract the
++        # We have built the rpms for the package. Now we need to extract the
+         # contained files so we can build further things against them
+-        local rpm=$(ls $TOPDIR/RPMS/*/$rpmmod-devel-*.rpm)
++        local rpm=$(ls $TOPDIR/RPMS/noarch/$dkmspkg-*.noarch.rpm)
+ 
+         # cpio only extract to pwd so we need to go there.
+         pushd $TOPDIR
 diff --git a/lustre.spec.in b/lustre.spec.in
 index edd02f5..11ff302 100644
 --- a/lustre.spec.in

diff --git a/sys-cluster/lustre/files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
deleted file mode 100644
index 611e762..0000000
--- a/sys-cluster/lustre/files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ /dev/null
@@ -1,82 +0,0 @@
-From 3cde88f309039a3c248e15746d20c6492566b18c Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 10/11] LU-2850 kernel: f_vfsmnt replaced by f_path.mnt
-
-In linux 3.9 f_vfsmnt was killed and replaced
-
-commit 182be684784334598eee1d90274e7f7aa0063616
-Author: Al Viro <viro@zeniv.linux.org.uk>
-Date:   Thu Jan 24 02:21:54 2013 -0500
-
-    kill f_vfsmnt
-
-    very few users left...
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
----
- lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
- lustre/llite/dir.c             |  4 ++++
- 2 files changed, 27 insertions(+)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 5c1fee2..439f677 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2314,6 +2314,28 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.9 killed f_vfsmnt by
-+# 182be684784334598eee1d90274e7f7aa0063616
-+# replacement is f_path.mnt
-+#
-+AC_DEFUN([LC_HAVE_F_PATH_MNT],
-+[AC_MSG_CHECKING([if struct file has f_path.mnt])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct file *fp = NULL;
-+	struct path  path;
-+
-+	path.mnt = fp->f_path.mnt;
-+],[
-+	AC_DEFINE(HAVE_F_PATH_MNT,1,[yes])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2504,6 +2526,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 
- 	 # 3.9
- 	 LC_HAVE_HLIST_FOR_EACH_3ARG
-+	 LC_HAVE_F_PATH_MNT
- 
- 	 #
- 	 if test x$enable_server = xyes ; then
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 14ea720..14d275c 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -639,7 +639,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
-         }
- 	filp->f_version = inode->i_version;
- #ifdef HAVE_TOUCH_ATIME_1ARG
-+#ifdef HAVE_F_PATH_MNT
-+	path.mnt = filp->f_path.mnt;
-+#else
- 	path.mnt = filp->f_vfsmnt;
-+#endif
- 	path.dentry = filp->f_dentry;
- 	touch_atime(&path);
- #else
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 4471340..f9afeae 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -34,16 +34,14 @@ RDEPEND="${DEPEND}"
 
 PATCHES=(
 	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch"
+	"${FILESDIR}/0002-LU-2686-kernel-sock_map_fd-replaced-by-sock_alloc_fi.patch"
 	"${FILESDIR}/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
 	"${FILESDIR}/0004-LU-2800-llite-introduce-local-getname.patch"
-	"${FILESDIR}/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
+	"${FILESDIR}/0005-LU-2686-kernel-Kernel-update-for-3.7.2-201.fc18.patch"
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0008-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
-	"${FILESDIR}/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
+	"${FILESDIR}/0009-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-04-16 11:27 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-04-16 11:27 UTC (permalink / raw
  To: gentoo-commits

commit:     c7944dd245c4dd277b1582c50abc24d2bb91b1d4
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Tue Apr 16 11:26:30 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Tue Apr 16 11:26:30 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=c7944dd2

Update lustre patches

Package-Manager: portage-2.2.0_alpha173
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   18 +
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    4 +-
 ...cfs-use-sock_alloc_file-instead-of-sock_m.patch |   10 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    6 +-
 ...004-LU-2800-llite-introduce-local-getname.patch |    4 +-
 ...ld-check-header-files-in-generated-uapi-d.patch |    8 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    6 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   99 ++-
 .../files/0008-LU-2987-llite-rcu-free-inode.patch  |    6 +-
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |    6 +-
 ...ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch |   58 --
 ...0-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch} |    6 +-
 ...3077-build-fix-warnings-in-client-modules.patch |   34 -
 ...7-build-zfs-0.6.1-kmod-dkms-compatibility.patch |  923 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |   12 +-
 15 files changed, 1030 insertions(+), 170 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 4140e1a..bba7cee 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,24 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  16 Apr 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  +files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch,
+  -files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch,
+  -files/0010-LU-3077-build-fix-warnings-in-client-modules.patch,
+  -files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0004-LU-2800-llite-introduce-local-getname.patch,
+  files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0008-LU-2987-llite-rcu-free-inode.patch, lustre-9999.ebuild:
+  Update lustre patches
+
   31 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0010-LU-3077-build-fix-warnings-in-client-modules.patch,
   +files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 7eb7829..254e228 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
-From d0169772fa2ebda3ed5c619d5e5cd6339973b0a0 Mon Sep 17 00:00:00 2001
+From 6e54f97374f158165cc591c3c41d3db506da26ba Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/11] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
index a5b6daf..a8797a0 100644
--- a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -1,7 +1,7 @@
-From 8258deb14e38559bf5ef37bd50a0918cdf473c00 Mon Sep 17 00:00:00 2001
+From 18036cc8a9ddc00c269b9b3b7ea25529a0a25e9b Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 02/12] LU-2800 libcfs: use sock_alloc_file instead of
+Subject: [PATCH 02/11] LU-2800 libcfs: use sock_alloc_file instead of
  sock_map_fd
 
 v2.6.27 added a second argument to sock_map_fd. Earlier versions are
@@ -19,7 +19,7 @@ Change-Id: I4e12da8c102b5d682db9658187330ae601b00a21
  2 files changed, 22 insertions(+), 13 deletions(-)
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index e661f7d..e84cd74 100644
+index 312542d..380fd5b 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
 @@ -500,18 +500,19 @@ LB_LINUX_TRY_COMPILE([
@@ -49,7 +49,7 @@ index e661f7d..e84cd74 100644
  ])
  ])
  
-@@ -824,7 +825,6 @@ LIBCFS_CPU_TOPOLOGY
+@@ -834,7 +835,6 @@ LIBCFS_CPU_TOPOLOGY
  LIBCFS_STRUCT_SHASH_ALG
  # 2.6.30
  LIBCFS_FUNC_UNSHARE_FS_STRUCT
@@ -57,7 +57,7 @@ index e661f7d..e84cd74 100644
  # 2.6.31
  LIBCFS_HAVE_SET_MEMS_ALLOWED
  # 2.6.32
-@@ -840,6 +840,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
+@@ -850,6 +850,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
  LC_SK_SLEEP
  # 2.6.40 fc15
  LC_SHRINK_CONTROL

diff --git a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 8ada9e8..f713d05 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From 3050d2c9cccb51ce521bdbecd471cb6ce18f77b8 Mon Sep 17 00:00:00 2001
+From f2c24d99e4d2bd77411acc300d11ab70fc9d6abc Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 03/12] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 03/11] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
@@ -67,7 +67,7 @@ index 53975ab..fa4e4d4 100644
 +#endif
  #endif
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 601155c..125bde7 100644
+index 40c4680..b9ff1ca 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2233,6 +2233,25 @@ LB_LINUX_TRY_COMPILE([

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
index a0e2421..859adce 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From 4f1bc5cb857ebba89b84d27ed5ed6531b8a59058 Mon Sep 17 00:00:00 2001
+From 29d6316336d5673e8c90d819b82fb202357ba9e2 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 04/12] LU-2800 llite: introduce local getname()
+Subject: [PATCH 04/11] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 78c264f..a0d38e2 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
-From 60c775330c663b7ecd32f314ab156ad0ba0ea072 Mon Sep 17 00:00:00 2001
+From a0e92d4f975aedaa563d0a9f12ef0774d7cde352 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 05/12] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 05/11] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.
@@ -83,7 +83,7 @@ index 244d398..b995875 100644
  	[_AC_MSG_LOG_CONFTEST
  m4_ifvaln([$5],[$5])dnl])
 diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
-index fd0f6d2..d657399 100644
+index 2feec80..4a4ecf4 100644
 --- a/ldiskfs/config/ldiskfs-build.m4
 +++ b/ldiskfs/config/ldiskfs-build.m4
 @@ -1,11 +1,11 @@
@@ -132,7 +132,7 @@ index fd0f6d2..d657399 100644
  	# enable extensive workarounds to get this to build
  	# modules
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 125bde7..5b82ff8 100644
+index b9ff1ca..c13ad6a 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -319,7 +319,7 @@ AC_DEFUN([LC_BIT_SPINLOCK_H],

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 39f4b4b..c0099c3 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From 19491f9e67e43ae10ae1f71e38730606e2c518a8 Mon Sep 17 00:00:00 2001
+From de4775789c14be8dce4b8dbb168c06c0055d1ca2 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 27 Mar 2013 08:49:01 +0400
-Subject: [PATCH 06/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 06/11] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
@@ -14,7 +14,7 @@ Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
  2 files changed, 32 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 5b82ff8..d736343 100644
+index c13ad6a..604e00b 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2252,6 +2252,25 @@ LB_LINUX_TRY_COMPILE([

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 608af56..c8207a0 100644
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
-From fc013881dd3b551e8fb8a5f6722a359c56c7bf63 Mon Sep 17 00:00:00 2001
+From 08c0e5bebb11c18370cce8b437d8e73b9d5d49db Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 07/12] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 07/11] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
@@ -16,7 +16,7 @@ Signed-off-by: Peng Tao <tao.peng@emc.com>
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
 ---
- libcfs/autoconf/lustre-libcfs.m4           | 28 -----------
+ libcfs/autoconf/lustre-libcfs.m4           | 37 --------------
  libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
  libcfs/include/libcfs/libcfs.h             | 13 +----
  libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
@@ -67,7 +67,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/llite/lloop.c                       | 10 ++--
  lustre/llite/statahead.c                   | 61 +++++++++++-----------
  lustre/mdc/mdc_request.c                   | 34 ++++++-------
- lustre/mdd/mdd_lfsck.c                     |  5 +-
+ lustre/mdd/mdd_lfsck.c                     |  7 ++-
  lustre/mdt/mdt_capa.c                      | 26 +++++-----
  lustre/mgc/mgc_request.c                   | 31 ++++++------
  lustre/mgs/mgs_nids.c                      | 13 ++---
@@ -84,14 +84,14 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 68 files changed, 514 insertions(+), 753 deletions(-)
+ 68 files changed, 515 insertions(+), 763 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index e84cd74..5789166 100644
+index 380fd5b..a1ed4b0 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -639,15 +639,6 @@ LB_LINUX_TRY_COMPILE([
+@@ -639,24 +639,6 @@ LB_LINUX_TRY_COMPILE([
  ])
  ])
  
@@ -104,10 +104,19 @@ index e84cd74..5789166 100644
 -])
 -])
 -
+-AC_DEFUN([LIBCFS_HAVE_KEYTYPE_H],
+-[LB_CHECK_FILE([$LINUX/include/linux/key-type.h], [
+-        AC_DEFINE(HAVE_LINUX_KEYTYPE_H, 1,
+-                [kernel has include/key-type.h])
+-],[
+-        AC_MSG_RESULT([no])
+-])
+-])
+-
  #
  # check set_mems_allowed
  # 2.6.31 adds function set_mems_allowed in cpuset.h
-@@ -688,23 +679,6 @@ LB_LINUX_TRY_COMPILE([
+@@ -697,23 +679,6 @@ LB_LINUX_TRY_COMPILE([
  ])
  ])
  
@@ -131,7 +140,7 @@ index e84cd74..5789166 100644
  #
  # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
  #
-@@ -830,8 +804,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
+@@ -840,8 +805,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
  # 2.6.32
  LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
  LC_SHRINKER_WANT_SHRINK_PTR
@@ -1804,7 +1813,7 @@ index 2e3a1d5..e61583a 100644
  
  void target_stop_recovery_thread(struct obd_device *obd)
 diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 8d2057f..d3d1e59 100644
+index 31925ff..3a9bf14 100644
 --- a/lustre/ldlm/ldlm_lockd.c
 +++ b/lustre/ldlm/ldlm_lockd.c
 @@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
@@ -2267,18 +2276,20 @@ index c9aa7a0..ead4bcf 100644
          CERROR("Failed to start changelog thread: %d\n", rc);
          OBD_FREE_PTR(cs);
 diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
-index bca6ce1..540b7a1 100644
+index 9d7b54c..7ced9dd 100644
 --- a/lustre/mdd/mdd_lfsck.c
 +++ b/lustre/mdd/mdd_lfsck.c
-@@ -2615,7 +2615,6 @@ static int mdd_lfsck_main(void *args)
+@@ -2525,8 +2525,7 @@ static int mdd_lfsck_main(void *args)
  	int			 rc;
  	ENTRY;
  
 -	cfs_daemonize("lfsck");
- 	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
+-	rc = lu_env_init(&env, LCT_MD_THREAD);
++	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
  	if (rc != 0) {
  		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
-@@ -2879,8 +2878,8 @@ trigger:
+ 		       mdd_lfsck2name(lfsck), rc);
+@@ -2789,8 +2788,8 @@ trigger:
  
  	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
  	thread_set_flags(thread, 0);
@@ -2334,7 +2345,7 @@ index 76e2c6f..d4a8bc4 100644
  
  void mdt_ck_thread_stop(struct mdt_device *mdt)
 diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 9e2357b..01bb584 100644
+index 6b84a29..f7e6514 100644
 --- a/lustre/mgc/mgc_request.c
 +++ b/lustre/mgc/mgc_request.c
 @@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
@@ -2425,10 +2436,10 @@ index 781250f..e6abdc4 100644
  	mgs_nidtbl_init_fs(env, fsdb);
          return 0;
 diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
-index cd1443c..42100d5 100644
+index 436aa4d..0e29783 100644
 --- a/lustre/obdclass/genops.c
 +++ b/lustre/obdclass/genops.c
-@@ -1745,14 +1745,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
+@@ -1744,14 +1744,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
   */
  static int obd_zombie_impexp_thread(void *unused)
  {
@@ -2444,7 +2455,7 @@ index cd1443c..42100d5 100644
  	complete(&obd_zombie_start);
  
  	obd_zombie_pid = cfs_curproc_pid();
-@@ -1801,7 +1794,9 @@ int obd_zombie_impexp_kill(void *arg)
+@@ -1800,7 +1793,9 @@ int obd_zombie_impexp_kill(void *arg)
   */
  int obd_zombie_impexp_init(void)
  {
@@ -2455,7 +2466,7 @@ index cd1443c..42100d5 100644
  
  	CFS_INIT_LIST_HEAD(&obd_zombie_imports);
  	CFS_INIT_LIST_HEAD(&obd_zombie_exports);
-@@ -1812,9 +1807,9 @@ int obd_zombie_impexp_init(void)
+@@ -1811,9 +1806,9 @@ int obd_zombie_impexp_init(void)
  	obd_zombie_pid = 0;
  
  #ifdef __KERNEL__
@@ -2468,7 +2479,7 @@ index cd1443c..42100d5 100644
  
  	wait_for_completion(&obd_zombie_start);
  #else
-@@ -1826,9 +1821,8 @@ int obd_zombie_impexp_init(void)
+@@ -1825,9 +1820,8 @@ int obd_zombie_impexp_init(void)
          obd_zombie_impexp_idle_cb =
                  liblustre_register_idle_callback("obd_zombi_impexp_check",
                                                   &obd_zombie_impexp_check, NULL);
@@ -2480,10 +2491,10 @@ index cd1443c..42100d5 100644
  /**
   * stop destroy zombie import/export thread
 diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
-index f08fd6e..ce22932 100644
+index 62c496b..d85b048 100644
 --- a/lustre/obdclass/llog.c
 +++ b/lustre/obdclass/llog.c
-@@ -440,7 +440,7 @@ static int llog_process_thread_daemonize(void *arg)
+@@ -438,7 +438,7 @@ static int llog_process_thread_daemonize(void *arg)
  	struct lu_env			 env;
  	int				 rc;
  
@@ -2492,7 +2503,7 @@ index f08fd6e..ce22932 100644
  
  	/* client env has no keys, tags is just 0 */
  	rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
-@@ -482,9 +482,9 @@ int llog_process_or_fork(const struct lu_env *env,
+@@ -480,9 +480,9 @@ int llog_process_or_fork(const struct lu_env *env,
  		 * init the new one in llog_process_thread_daemonize. */
  		lpi->lpi_env = NULL;
  		init_completion(&lpi->lpi_completion);
@@ -2506,10 +2517,10 @@ index f08fd6e..ce22932 100644
  			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
  			OBD_FREE_PTR(lpi);
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 1e27918..f122d38 100644
+index 77acd9e..a9130be 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
-@@ -962,7 +962,6 @@ static int osd_scrub_main(void *args)
+@@ -979,7 +979,6 @@ static int osd_scrub_main(void *args)
  	int		      rc;
  	ENTRY;
  
@@ -2517,7 +2528,7 @@ index 1e27918..f122d38 100644
  	rc = lu_env_init(&env, LCT_DT_THREAD);
  	if (rc != 0) {
  		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
-@@ -1541,8 +1540,8 @@ again:
+@@ -1554,8 +1553,8 @@ again:
  
  	scrub->os_start_flags = flags;
  	thread_set_flags(thread, 0);
@@ -2529,10 +2540,10 @@ index 1e27918..f122d38 100644
  		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
  		RETURN(rc);
 diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 9b3febc..51c2c94 100644
+index 914f988..d0d2ede 100644
 --- a/lustre/osp/osp_precreate.c
 +++ b/lustre/osp/osp_precreate.c
-@@ -881,15 +881,11 @@ static int osp_precreate_thread(void *_arg)
+@@ -872,15 +872,11 @@ static int osp_precreate_thread(void *_arg)
  	struct osp_device	*d = _arg;
  	struct ptlrpc_thread	*thread = &d->opd_pre_thread;
  	struct l_wait_info	 lwi = { 0 };
@@ -2548,7 +2559,7 @@ index 9b3febc..51c2c94 100644
  	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
  	if (rc) {
  		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1260,7 +1256,7 @@ out:
+@@ -1251,7 +1247,7 @@ out:
  int osp_init_precreate(struct osp_device *d)
  {
  	struct l_wait_info	 lwi = { 0 };
@@ -2557,7 +2568,7 @@ index 9b3febc..51c2c94 100644
  
  	ENTRY;
  
-@@ -1295,10 +1291,11 @@ int osp_init_precreate(struct osp_device *d)
+@@ -1286,10 +1282,11 @@ int osp_init_precreate(struct osp_device *d)
  	/*
  	 * start thread handling precreation and statfs updates
  	 */
@@ -2574,10 +2585,10 @@ index 9b3febc..51c2c94 100644
  
  	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
 diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index dfa263e..fddd9b6 100644
+index 4bc9d58..a6952ce 100644
 --- a/lustre/osp/osp_sync.c
 +++ b/lustre/osp/osp_sync.c
-@@ -827,7 +827,6 @@ static int osp_sync_thread(void *_arg)
+@@ -823,7 +823,6 @@ static int osp_sync_thread(void *_arg)
  	struct llog_handle	*llh;
  	struct lu_env		 env;
  	int			 rc, count;
@@ -2585,7 +2596,7 @@ index dfa263e..fddd9b6 100644
  
  	ENTRY;
  
-@@ -838,9 +837,6 @@ static int osp_sync_thread(void *_arg)
+@@ -834,9 +833,6 @@ static int osp_sync_thread(void *_arg)
  		RETURN(rc);
  	}
  
@@ -2595,7 +2606,7 @@ index dfa263e..fddd9b6 100644
  	spin_lock(&d->opd_syn_lock);
  	thread->t_flags = SVC_RUNNING;
  	spin_unlock(&d->opd_syn_lock);
-@@ -1044,8 +1040,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
+@@ -1041,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
  	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
  	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
  
@@ -2660,10 +2671,10 @@ index 7eaee96..9d17417 100644
                  ptlrpc_invalidate_import(imp);
  
 diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
-index f5bf639..816d054 100644
+index 8b7d472..e18bc7d 100644
 --- a/lustre/ptlrpc/pinger.c
 +++ b/lustre/ptlrpc/pinger.c
-@@ -286,8 +286,6 @@ static int ptlrpc_pinger_main(void *arg)
+@@ -306,8 +306,6 @@ static int ptlrpc_pinger_main(void *arg)
          struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
  	ENTRY;
  
@@ -2672,7 +2683,7 @@ index f5bf639..816d054 100644
          /* Record that the thread is running */
          thread_set_flags(thread, SVC_RUNNING);
          cfs_waitq_signal(&thread->t_ctl_waitq);
-@@ -382,14 +380,14 @@ int ptlrpc_start_pinger(void)
+@@ -402,14 +400,14 @@ int ptlrpc_start_pinger(void)
  
  	/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
  	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
@@ -2695,7 +2706,7 @@ index f5bf639..816d054 100644
          l_wait_event(pinger_thread->t_ctl_waitq,
                       thread_is_running(pinger_thread), &lwi);
  
-@@ -658,7 +656,7 @@ static int ping_evictor_main(void *arg)
+@@ -678,7 +676,7 @@ static int ping_evictor_main(void *arg)
          time_t expire_time;
          ENTRY;
  
@@ -2704,7 +2715,7 @@ index f5bf639..816d054 100644
  
          CDEBUG(D_HA, "Starting Ping Evictor\n");
          pet_state = PET_READY;
-@@ -733,18 +731,19 @@ static int ping_evictor_main(void *arg)
+@@ -753,18 +751,19 @@ static int ping_evictor_main(void *arg)
  
  void ping_evictor_start(void)
  {
@@ -2816,10 +2827,10 @@ index 7634d22..595f710 100644
  
          l_wait_event(sec_gc_thread.t_ctl_waitq,
 diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
-index 6278f7b..a0082e4 100644
+index 63fee6d..7d73b13 100644
 --- a/lustre/ptlrpc/service.c
 +++ b/lustre/ptlrpc/service.c
-@@ -2366,7 +2366,7 @@ static int ptlrpc_main(void *arg)
+@@ -2362,7 +2362,7 @@ static int ptlrpc_main(void *arg)
          ENTRY;
  
          thread->t_pid = cfs_curproc_pid();
@@ -2828,7 +2839,7 @@ index 6278f7b..a0082e4 100644
  
  	/* NB: we will call cfs_cpt_bind() for all threads, because we
  	 * might want to run lustre server only on a subset of system CPUs,
-@@ -2561,7 +2561,7 @@ static int ptlrpc_hr_main(void *arg)
+@@ -2557,7 +2557,7 @@ static int ptlrpc_hr_main(void *arg)
  
  	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
  		 hrp->hrp_cpt, hrt->hrt_id);
@@ -2837,7 +2848,7 @@ index 6278f7b..a0082e4 100644
  
  	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
  	if (rc != 0) {
-@@ -2627,10 +2627,13 @@ static int ptlrpc_start_hr_threads(void)
+@@ -2623,10 +2623,13 @@ static int ptlrpc_start_hr_threads(void)
  		int	rc = 0;
  
  		for (j = 0; j < hrp->hrp_nthrs; j++) {
@@ -2855,7 +2866,7 @@ index 6278f7b..a0082e4 100644
  				break;
  		}
  		cfs_wait_event(ptlrpc_hr.hr_waitq,
-@@ -2822,8 +2825,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
+@@ -2818,8 +2821,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
  	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
  	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
  	 */

diff --git a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
index b444050..915e072 100644
--- a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From 77ae599340fc509002f2875257c2e024fb1b44fb Mon Sep 17 00:00:00 2001
+From 1abfc6069f78a8efd6002dfe09b6a8196f47552b Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 08/12] LU-2987 llite: rcu-free inode
+Subject: [PATCH 08/11] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.
@@ -14,7 +14,7 @@ Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
  2 files changed, 37 insertions(+), 2 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index d736343..4e90e86 100644
+index 604e00b..bf83193 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -1682,6 +1682,26 @@ LB_LINUX_TRY_COMPILE([

diff --git a/sys-cluster/lustre/files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 96%
rename from sys-cluster/lustre/files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
index 3968eae..faa30e6 100644
--- a/sys-cluster/lustre/files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -1,7 +1,7 @@
-From 11a0f9a2ac7d3d1bcda9a8bd3af5800cee35249d Mon Sep 17 00:00:00 2001
+From 8ef04c8c6d6d8e9e5ba187ba1e88965aabf9794c Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 19:32:30 +0400
-Subject: [PATCH 11/12] LU-2850 kernel: 3.9 hlist_for_each_entry uses 3 args
+Subject: [PATCH 09/11] LU-2850 kernel: 3.9 hlist_for_each_entry uses 3 args
 
 In 3.9 hlist_for_each_entry use 3 args since commit
 
@@ -49,7 +49,7 @@ index be06e74..b747804 100644
  #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
  #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 4e90e86..527052e 100644
+index bf83193..5c1fee2 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2291,6 +2291,29 @@ LB_LINUX_TRY_COMPILE([

diff --git a/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch b/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
deleted file mode 100644
index ea056b4..0000000
--- a/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 84010884ffc614cc0d5cf06e5416dadc2693a86a Mon Sep 17 00:00:00 2001
-From: Robert Read <robert.read@intel.com>
-Date: Fri, 22 Mar 2013 11:32:13 -0700
-Subject: [PATCH 09/12] LU-3011 ubuntu: Fix build failures on Ubuntu 12.04
-
-Fix "set-but-unused" warning by using the variable,
-and move -lreadline to end of link command line.
-
-Signed-off-by: Robert Read <robert.read.@intel.com>
-Change-Id: I676e319ed81dbb6ba41d039e7b075b02d5122b48
----
- libcfs/autoconf/lustre-libcfs.m4 | 1 +
- lustre/utils/Makefile.am         | 8 ++++----
- 2 files changed, 5 insertions(+), 4 deletions(-)
-
-diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 5789166..72ae7b4 100644
---- a/libcfs/autoconf/lustre-libcfs.m4
-+++ b/libcfs/autoconf/lustre-libcfs.m4
-@@ -918,6 +918,7 @@ AC_COMPILE_IFELSE([
- 		__u64 *data2 = NULL;
- 
- 		data1 = data2;
-+		data2 = data1;
- 		return 0;
- 	}
- ],[
-diff --git a/lustre/utils/Makefile.am b/lustre/utils/Makefile.am
-index 1309376..bc8d716 100644
---- a/lustre/utils/Makefile.am
-+++ b/lustre/utils/Makefile.am
-@@ -42,19 +42,19 @@ endif
- noinst_LIBRARIES = liblustreapitmp.a
- 
- lctl_SOURCES = lustre_lfsck.c obd.c lustre_cfg.c lctl.c obdctl.h
--lctl_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
-+lctl_LDADD :=  liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
- lctl_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
- 
- lfs_SOURCES = lfs.c obd.c lustre_cfg.c
--lfs_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
-+lfs_LDADD := liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
- lfs_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
- 
- loadgen_SOURCES = loadgen.c lustre_cfg.c obd.c
--loadgen_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
-+loadgen_LDADD := liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
- loadgen_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
- 
- lustre_rsync_SOURCES = lustre_rsync.c obd.c lustre_cfg.c lustre_rsync.h
--lustre_rsync_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
-+lustre_rsync_LDADD :=  liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
- lustre_rsync_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
- 
- ll_recover_lost_found_objs_SOURCES = ll_recover_lost_found_objs.c
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
similarity index 92%
rename from sys-cluster/lustre/files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
rename to sys-cluster/lustre/files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
index 35905f0..611e762 100644
--- a/sys-cluster/lustre/files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
+++ b/sys-cluster/lustre/files/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -1,7 +1,7 @@
-From da0f460ee306437c583147ea6832298cbc1e9202 Mon Sep 17 00:00:00 2001
+From 3cde88f309039a3c248e15746d20c6492566b18c Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Sun, 31 Mar 2013 20:13:21 +0400
-Subject: [PATCH 12/12] LU-2850 kernel: f_vfsmnt replaced by f_path.mnt
+Subject: [PATCH 10/11] LU-2850 kernel: f_vfsmnt replaced by f_path.mnt
 
 In linux 3.9 f_vfsmnt was killed and replaced
 
@@ -21,7 +21,7 @@ Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
  2 files changed, 27 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 527052e..de79357 100644
+index 5c1fee2..439f677 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2314,6 +2314,28 @@ LB_LINUX_TRY_COMPILE([

diff --git a/sys-cluster/lustre/files/0010-LU-3077-build-fix-warnings-in-client-modules.patch b/sys-cluster/lustre/files/0010-LU-3077-build-fix-warnings-in-client-modules.patch
deleted file mode 100644
index 97a9d17..0000000
--- a/sys-cluster/lustre/files/0010-LU-3077-build-fix-warnings-in-client-modules.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-From 0ec7b7dc1eafdec4da8a69a0c8ca5bab8c2a1634 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Sun, 31 Mar 2013 19:16:54 +0400
-Subject: [PATCH 10/12] LU-3077 build: fix warnings in client modules
-
-This fixes warning with client module
-memset(attr, 0, sizeof(attr)) :
-argument to "sizeof" in "memset" call is the same expression as the
-destination; did you mean to dereference it
-
-gcc version 4.8.0 (Gentoo 4.8.0 p1.0, pie-0.5.10)
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: I85197dfb7e512e4c747a7057632c3ecc7486ed37
----
- lustre/fld/fld_index.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lustre/fld/fld_index.c b/lustre/fld/fld_index.c
-index cbe8300..a6f9be5 100644
---- a/lustre/fld/fld_index.c
-+++ b/lustre/fld/fld_index.c
-@@ -331,7 +331,7 @@ int fld_index_init(const struct lu_env *env, struct lu_server_fld *fld,
- 	if (attr == NULL)
- 		RETURN(-ENOMEM);
- 
--	memset(attr, 0, sizeof(attr));
-+	memset(attr, 0, sizeof(*attr));
- 	attr->la_valid = LA_MODE;
- 	attr->la_mode = S_IFREG | 0666;
- 	dof.dof_type = DFT_INDEX;
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch b/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
new file mode 100644
index 0000000..de36db2
--- /dev/null
+++ b/sys-cluster/lustre/files/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch
@@ -0,0 +1,923 @@
+From 1542e6ffacd11b54b5ffe71b0a107be0ce20732d Mon Sep 17 00:00:00 2001
+From: Brian Behlendorf <behlendorf1@llnl.gov>
+Date: Thu, 28 Mar 2013 12:18:27 -0700
+Subject: [PATCH 11/11] LU-3117 build: zfs-0.6.1 kmod+dkms compatibility
+
+With the release of zfs-0.6.1 the default install location of
+the zfs kmod headers and objects has changed.  The kmod headers
+which are common for a zfs version are now installed under
+/usr/src/zfs-<version>/ path.  The objects, which are kernel
+specific, are installed under /usr/src/zfs-<version>/<kernel>/.
+
+This was done just prior to the official 0.6.1 release because
+this scheme satisfies the packaging requirements of the major
+distributions.  Making the change now means we shouldn't need
+to change it again.
+
+To accomidate this change the lustre-build-zfs.m4 has been
+updated in the following ways:
+
+* The new zfs header and object paths were added to the list
+  of default search paths.  The DKMS build paths were also added
+  to allow compilation against zfs-kmod or zfs-dkms packages.
+
+* Support for building the spl and zfs code recursively as
+  part of the Lustre build process was removed.
+
+* The lustre-osd-zfs packages 'Requires' line was changed to
+  require zfs-kmod.  Either the zfs-kmod or zfs-dkms packages
+  can be used to satisfy this requirement.
+
+* Fix incorrect usage of @ZFS_OBJ@ in osd-zfs/Makefile.in,
+  the include directory us under @ZFS@ with the headers.
+  These happens to be the same location before so it never
+  caused issues.
+
+* EXTRA_LIBZFS_INCLUDE renamed ZFS_LIBZFS_INCLUDE, this was
+  done for consistency.
+
+* Failing to build ldiskfs should not automatically disable
+  all server support.  The zfs osd may still be buildable.
+
+* General m4 cleanup and simplification of lustre-build-zfs.m4.
+
+* Ensure new zfs/spl build correctly with lbuild.
+
+Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
+Change-Id: Ib686211c4f9ace39a41053ce8a20112d1121def9
+Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
+---
+ autoMakefile.am                |   2 +-
+ config/lustre-build-ldiskfs.m4 |   1 -
+ config/lustre-build-zfs.m4     | 731 ++++++++++++++++++-----------------------
+ contrib/lbuild/lbuild          |   2 +
+ lustre.spec.in                 |   2 +-
+ lustre/osd-zfs/Makefile.in     |   3 +-
+ lustre/utils/Makefile.am       |   6 +-
+ 7 files changed, 326 insertions(+), 421 deletions(-)
+
+diff --git a/autoMakefile.am b/autoMakefile.am
+index 93608de..5880d1c 100644
+--- a/autoMakefile.am
++++ b/autoMakefile.am
+@@ -1,4 +1,4 @@
+-SUBDIRS := @LDISKFS_SUBDIR@ @SPL_SUBDIR@ @ZFS_SUBDIR@ . @LIBSYSIO_SUBDIR@ @SNMP_SUBDIR@ @LUSTREIOKIT_SUBDIR@ @LIBCFS_SUBDIR@ lnet lustre
++SUBDIRS := @LDISKFS_SUBDIR@ . @LIBSYSIO_SUBDIR@ @SNMP_SUBDIR@ @LUSTREIOKIT_SUBDIR@ @LIBCFS_SUBDIR@ lnet lustre
+ DIST_SUBDIRS := @LDISKFS_DIST_SUBDIR@ @SNMP_DIST_SUBDIR@ libsysio lustre-iokit @LIBCFS_SUBDIR@ lnet lustre config contrib
+ SOURCES_SUBDIRS := @LIBCFS_SUBDIR@ lnet lustre
+ RPM_SUBDIRS := @LDISKFS_SUBDIR@ @LUSTREIOKIT_SUBDIR@
+diff --git a/config/lustre-build-ldiskfs.m4 b/config/lustre-build-ldiskfs.m4
+index cdcd10b..d680268 100644
+--- a/config/lustre-build-ldiskfs.m4
++++ b/config/lustre-build-ldiskfs.m4
+@@ -190,7 +190,6 @@ else
+ fi
+ 
+ if test x$enable_ldiskfs_build = xno; then
+-	enable_server='no'
+ 	enable_ldiskfs_build='no'
+ 	with_ldiskfs='no'
+ 	LDISKFS_SUBDIR=
+diff --git a/config/lustre-build-zfs.m4 b/config/lustre-build-zfs.m4
+index bfc647f..507afd8 100644
+--- a/config/lustre-build-zfs.m4
++++ b/config/lustre-build-zfs.m4
+@@ -1,445 +1,350 @@
+-#
+-# LB_PATH_SPL
+-#
+-# --with-spl      - Enable spl support and attempt to autodetect the spl
+-# --with-spl=yes    headers in one of the following places in this order:
+-#                   * ./spl
+-#                   * /usr/src/spl-*/$LINUXRELEASE
+-#                   * ../spl
+-#
+-# --with-spl=path - Enable spl support and use the spl headers in the
+-#                   provided path.  No autodetection is performed.
+-#
+-# --with-spl-obj  - When spl support is enabled the object directory
+-#                   will be based on the --with-spl directory.  If this
+-#                   is detected incorrectly it can be explicitly
+-#                   specified using this option.
+-#
+-# NOTE: As with all external packages spl is expected to already be
+-# configured and built.  However, if the spl tree is located in-tree
+-# (./spl) then it will be configured and built recursively as part of
+-# the lustre build system.
+-#
+-AC_DEFUN([LB_PATH_SPL],
+-[
+-AC_ARG_WITH([spl],
+-	AC_HELP_STRING([--with-spl=path], [set path to spl sources]),
+-	[],[
+-		if test x$enable_server = xyes && test x$enable_dist = xno; then
+-			with_spl='yes'
+-		else
+-			with_spl='no'
+-		fi
++dnl #
++dnl # Supported configure options.  When no options are specified support
++dnl # for ZFS OSDs will be autodetected assuming server support is enabled.
++dnl # If the ZFS OSD cannot be built support for it is disabled and a
++dnl # warning is issued but the configure process is allowed to continue.
++dnl #
++dnl # --without-zfs   - Disable zfs support.
++dnl # --with-zfs=no
++dnl #
++dnl # --with-zfs      - Enable zfs support and attempt to autodetect the zfs
++dnl # --with-zfs=yes    headers in one of the following places.  Because zfs
++dnl #                   support was explicitly required if the headers cannot
++dnl #                   be located it is treated as a fatal error.
++dnl #
++dnl #                       * /var/lib/dkms/zfs/${VERSION}/build
++dnl #                       * /usr/src/zfs-${VERSION}/${LINUXRELEASE}
++dnl #                       * /usr/src/zfs-${VERSION}
++dnl #                       * ../spl/
++dnl #                       * $LINUX
++dnl #
++dnl # --with-zfs=path - Enable zfs support and use the zfs headers in the
++dnl #                   provided path.  No autodetection is performed and
++dnl #                   if no headers are found this is a fatal error.
++dnl #
++dnl # --with-zfs-obj  - When zfs support is enabled the object directory
++dnl #                   will be based on the --with-zfs directory.  If this
++dnl #                   is detected incorrectly it can be explicitly
++dnl #                   specified using this option.
++dnl #
++dnl # --without-spl   - Disable spl support.
++dnl # --with-spl=no
++dnl #
++dnl # --with-spl      - Enable spl support and attempt to autodetect the spl
++dnl # --with-spl=yes    headers in one of the following places in this order:
++dnl #                   * /var/lib/dkms/spl/${VERSION}/build
++dnl #                   * /usr/src/spl-${VERSION}/${LINUXRELEASE}
++dnl #                   * /usr/src/spl-${VERSION}
++dnl #                   * ../spl/
++dnl #                   * $LINUX
++dnl #
++dnl # --with-spl=path - Enable spl support and use the spl headers in the
++dnl #                   provided path.  No autodetection is performed.
++dnl #
++dnl # --with-spl-obj  - When spl support is enabled the object directory
++dnl #                   will be based on the --with-spl directory.  If this
++dnl #                   is detected incorrectly it can be explicitly
++dnl #                   specified using this option.
++dnl #
++AC_DEFUN([LB_SPL], [
++	AC_ARG_WITH([spl],
++		AS_HELP_STRING([--with-spl=PATH],
++		[Path to spl source]),
++		[splsrc="$withval"])
++
++	AC_ARG_WITH([spl-obj],
++		AS_HELP_STRING([--with-spl-obj=PATH],
++		[Path to spl build objects]),
++		[splobj="$withval"])
++
++	dnl #
++	dnl # The existence of spl.release[.in] is used to identify a valid
++	dnl # source directory.  In order of preference:
++	dnl #
++	splver=$(ls -1 /usr/src/ | grep -m1 spl | cut -f2 -d'-')
++	splsrc0="/var/lib/dkms/spl/${splver}/build"
++	splsrc1="/usr/src/spl-${splver}/${LINUXRELEASE}"
++	splsrc2="/usr/src/spl-${splver}"
++	splsrc3="../spl/"
++	splsrc4="$LINUX"
++
++	AC_MSG_CHECKING([spl source directory])
++	AS_IF([test -z "${splsrc}"], [
++		AS_IF([test -e "${splsrc0}/spl.release.in"], [
++			splsrc=${splsrc0}
++		], [test -e "${splsrc1}/spl.release.in"], [
++			splsrc=${splsrc1}
++		], [test -e "${splsrc2}/spl.release.in"], [
++			splsrc=${splsrc2}
++		], [test -e "${splsrc3}/spl.release.in"], [
++			splsrc=$(readlink -f "${splsrc3}")
++		], [test -e "${splsrc4}/spl.release.in"], [
++			splsrc=${splsrc4}
++		], [
++			splsrc="[Not found]"
++		])
+ 	])
++	AC_MSG_RESULT([$splsrc])
+ 
+-case x$with_spl in
+-	xno)
+-		AC_MSG_ERROR([spl must be enabled when building zfs.])
+-		;;
+-	xyes)
+-		SPL_DIR=
+-
+-		# Check ./spl
+-		spl_src=$PWD/spl
+-		if test -e "$spl_src"; then
+-			SPL_DIR=$(readlink -f $spl_src)
+-		else
+-			# Check /usr/src/spl-*/$LINUXRELEASE
+-			spl_src=$(ls -1d /usr/src/spl-*/$LINUXRELEASE \
+-			          2>/dev/null | tail -1)
+-			if test -e "$spl_src"; then
+-				SPL_DIR=$(readlink -f $spl_src)
+-			else
+-				# Check ../spl
+-				spl_src=$PWD/../spl
+-				if test -e "$spl_src"; then
+-					SPL_DIR=$(readlink -f $spl_src)
+-				else
+-					# Fatal spl required for zfs builds
+-					AC_MSG_ERROR([Could not locate spl.])
+-				fi
+-			fi
+-		fi
+-
+-		;;
+-	*)
+-		SPL_DIR=$(readlink -f $with_spl)
+-		with_spl='yes'
+-		;;
+-esac
+-
+-AC_ARG_WITH([spl-obj],
+-	AC_HELP_STRING([--with-spl-obj=path], [set path to spl objects]),
+-	[
+-		if test x$with_spl = xyes; then
+-			SPL_OBJ="$withval"
+-		fi
+-	],[
+-		if test x$with_spl = xyes; then
+-			SPL_OBJ=$SPL_DIR
+-		fi
++	AS_IF([test ! -e "$splsrc/spl.release" &&
++	    test ! -e "$splsrc/spl.release.in"], [
++		enable_zfs=no
+ 	])
+ 
+-AC_MSG_CHECKING([spl source directory])
+-AC_MSG_RESULT([$SPL_DIR])
+-AC_SUBST(SPL_DIR)
+-
+-AC_MSG_CHECKING([spl object directory])
+-AC_MSG_RESULT([$SPL_OBJ])
+-AC_SUBST(SPL_OBJ)
+-
+-LB_SPL_SYMVERS
+-LB_SPL_RELEASE
+-])
++	dnl #
++	dnl # The existence of the spl_config.h is used to identify a valid
++	dnl # spl object directory.  In many cases the object and source
++	dnl # directory are the same, however the objects may also reside
++	dnl # is a subdirectory named after the kernel version.
++	dnl #
++	AC_MSG_CHECKING([spl build directory])
++	AS_IF([test -z "$splobj"], [
++		AS_IF([test -e "${splsrc}/${LINUXRELEASE}/spl_config.h"], [
++			splobj="${splsrc}/${LINUXRELEASE}"
++		], [test -e "${splsrc}/spl_config.h"], [
++			splobj="${splsrc}"
++		], [
++			splobj="[Not found]"
++		])
++	])
++	AC_MSG_RESULT([$splobj])
+ 
+-#
+-# LB_SPL_BUILD
+-#
+-# Optionally configure/make the spl sources.  If the sources are
+-# determined to reside in-tree this feature will automatically be
+-# enabled.  If the sources are not in-tree it will be disabled.
+-# Use --enable-spl-build or --disable-spl-build if you need to
+-# override this behavior.
+-#
+-AC_DEFUN([LB_SPL_BUILD],
+-[
+-AC_ARG_ENABLE([spl-build],
+-	AC_HELP_STRING([--enable-spl-build], [enable spl configure/make]),
+-	[], [
+-		SPL_DIR_INTREE=$(readlink -f $PWD/spl)
+-		if test x$SPL_DIR = x$SPL_DIR_INTREE; then
+-			enable_spl_build='yes'
+-		else
+-			enable_spl_build='no'
+-		fi
++	AS_IF([test ! -e "$splobj/spl_config.h"], [
++		enable_zfs=no
+ 	])
+ 
+-AC_MSG_CHECKING([whether to build spl])
+-if test x$enable_spl_build = xyes; then
+-	AC_MSG_RESULT([$enable_spl_build])
++	dnl #
++	dnl # Verify the source version using SPL_META_VERSION in spl_config.h
++	dnl #
++	AS_IF([test x$enable_zfs = xyes], [
++		AC_MSG_CHECKING([spl source version])
++		AS_IF([fgrep -q SPL_META_VERSION $splobj/spl_config.h], [
++			splver=$((echo "#include <spl_config.h>";
++			    echo "splver=SPL_META_VERSION-SPL_META_RELEASE") |
++			    cpp -I $splobj |
++			    grep "^splver=" | tr -d \" | cut -d= -f2)
++		], [
++			splver="[Not found]"
++			enable_zfs=no
++		])
++		AC_MSG_RESULT([$splver])
++	])
+ 
+-	LB_CHECK_FILE([$SPL_DIR/module/spl/spl-generic.c], [], [
+-		AC_MSG_ERROR([Complete spl source must exist when building.])])
++	dnl #
++	dnl # Verify the modules systems exist by the expect name.
++	dnl #
++	AS_IF([test x$enable_zfs = xyes], [
++		AC_MSG_CHECKING([spl file name for module symbols])
++		AS_IF([test -r $splobj/$SYMVERFILE], [
++			splsym=$SYMVERFILE
++		], [test -r $splobj/module/$SYMVERFILE], [
++			splsym=$SYMVERFILE
++		], [
++			splsym="[Not found]"
++			enable_zfs=no
++		])
++		AC_MSG_RESULT([$splsym])
++	])
+ 
+-	LB_CHECK_FILE([$SPL_DIR/configure], [], [
+-		AC_MSG_ERROR([Complete spl source must exist when building.])])
++	SPL=${splsrc}
++	SPL_OBJ=${splobj}
++	SPL_VERSION=${splver}
++	SPL_SYMBOLS=${splsym}
+ 
+-	SPL_SUBDIR="$SPL_DIR"
+-	AC_SUBST(SPL_SUBDIR)
+-	AC_CONFIG_SUBDIRS("spl")
+-else
+-	enable_spl_build='no'
+-	AC_MSG_RESULT([$enable_spl_build])
+-fi
++	AC_SUBST(SPL)
++	AC_SUBST(SPL_OBJ)
++	AC_SUBST(SPL_VERSION)
++	AC_SUBST(SPL_SYMBOLS)
+ ])
+ 
+-#
+-# LB_SPL_SYMVERS
+-#
+-AC_DEFUN([LB_SPL_SYMVERS],
+-[
+-AC_MSG_CHECKING([spl module symbols])
+-if test -r $SPL_OBJ/Module.symvers; then
+-	SPL_SYMBOLS=Module.symvers
+-elif test -r $SPL_OBJ/Modules.symvers; then
+-	SPL_SYMBOLS=Modules.symvers
+-elif test -r $SPL_OBJ/module/Module.symvers; then
+-	SPL_SYMBOLS=Module.symvers
+-elif test -r $SPL_OBJ/module/Modules.symvers; then
+-	SPL_SYMBOLS=Modules.symvers
+-else
+-	SPL_SYMBOLS=$SYMVERFILE
+-fi
+-
+-AC_MSG_RESULT([$SPL_SYMBOLS])
+-AC_SUBST(SPL_SYMBOLS)
+-])
++AC_DEFUN([LB_ZFS], [
++	AC_ARG_WITH([zfs-obj],
++		AS_HELP_STRING([--with-zfs-obj=PATH],
++		[Path to zfs build objects]),
++		[zfsobj="$withval"])
++
++	dnl #
++	dnl # The existence of zfs.release[.in] is used to identify a valid
++	dnl # source directory.  In order of preference:
++	dnl #
++	zfsver=$(ls -1 /usr/src/ | grep -m1 zfs | cut -f2 -d'-')
++	zfssrc0="/var/lib/dkms/zfs/${zfsver}/build"
++	zfssrc1="/usr/src/zfs-${zfsver}/${LINUXRELEASE}"
++	zfssrc2="/usr/src/zfs-${zfsver}"
++	zfssrc3="../zfs/"
++	zfssrc4="$LINUX"
+ 
+-#
+-# LB_SPL_RELEASE
+-#
+-AC_DEFUN([LB_SPL_RELEASE],
+-[
+-AC_MSG_CHECKING([spl source release])
+-if test -r $SPL_OBJ/spl_config.h; then
+-	tmp_flags="$EXTRA_KCFLAGS"
+-	EXTRA_KCFLAGS="-I$SPL_DIR $EXTRA_KCFLAGS"
+-	LB_LINUX_TRY_MAKE([
+-		#include <$SPL_OBJ/spl_config.h>
+-	],[
+-		char *SPL_RELEASE;
+-		SPL_RELEASE=SPL_META_VERSION;
+-	],[
+-		$makerule LUSTRE_KERNEL_TEST=conftest.i
+-	],[
+-		test -s build/conftest.i
+-	],[
+-		eval $(grep "SPL_RELEASE=" build/conftest.i)
+-	],[
+-		AC_MSG_RESULT([unknown])
+-		AC_MSG_ERROR([Could not preprocess test program.])
++	AC_MSG_CHECKING([zfs source directory])
++	AS_IF([test -z "${zfssrc}"], [
++		AS_IF([test -e "${zfssrc0}/zfs.release.in"], [
++			zfssrc=${zfssrc0}
++		], [test -e "${zfssrc1}/zfs.release.in"], [
++			zfssrc=${zfssrc1}
++		], [test -e "${zfssrc2}/zfs.release.in"], [
++			zfssrc=${zfssrc2}
++		], [test -e "${zfssrc3}/zfs.release.in"], [
++			zfssrc=$(readlink -f "${zfssrc3}")
++		], [test -e "${zfssrc4}/zfs.release.in"], [
++			zfssrc=${zfssrc4}
++		], [
++			zfssrc="[Not found]"
++		])
+ 	])
+-	EXTRA_KCFLAGS="$tmp_flags"
+-	rm build/conftest.i
+-elif test -r $SPL_DIR/META; then
+-	SPL_RELEASE=$(awk '/Version/ { print [$]2 }' $SPL_DIR/META)
+-else
+-	AC_MSG_RESULT([unknown])
+-	AC_MSG_ERROR([Could not locate spl_config.h or META to check release.])
+-fi
+-
+-if test x$SPL_RELEASE = x; then
+-	AC_MSG_RESULT([unknown])
+-	AC_MSG_ERROR([Could not determine spl release.])
+-fi
+-
+-AC_MSG_RESULT([$SPL_RELEASE])
+-AC_SUBST(SPL_RELEASE)
+-])
+-
++	AC_MSG_RESULT([$zfssrc])
+ 
+-#
+-# LB_PATH_ZFS
+-#
+-# --without-zfs   - Disable zfs support.
+-# --with-zfs=no
+-#
+-# --with-zfs      - Enable zfs support and attempt to autodetect the zfs
+-# --with-zfs=yes    headers in one of the following places in this order:
+-#                   * ./zfs
+-#                   * /usr/src/zfs-*/$LINUXRELEASE
+-#                   * ../zfs
+-#
+-# --with-zfs=path - Enable zfs support and use the zfs headers in the
+-#                   provided path.  No autodetection is performed.
+-#
+-# --with-zfs-obj  - When zfs support is enabled the object directory
+-#                   will be based on the --with-zfs directory.  If this
+-#                   is detected incorrectly it can be explicitly
+-#                   specified using this option.
+-#
+-# NOTE: As with all external packages zfs is expected to already be
+-# configured and built.  However, if the zfs tree is located in-tree
+-# (./zfs) then it will be configured and built recursively as part of
+-# the lustre build system.
+-#
+-AC_DEFUN([LB_PATH_ZFS],
+-[
+-AC_ARG_WITH([zfs],
+-	AC_HELP_STRING([--with-zfs=path], [set path to zfs sources]),
+-	[],[
+-		if test x$enable_server = xyes && test x$enable_dist = xno; then
+-			with_zfs='yes'
+-		else
+-			with_zfs='no'
+-		fi
++	AS_IF([test ! -e "$zfssrc/zfs.release.in" &&
++	    test ! -e "$zfssrc/zfs.release"], [
++		enable_zfs=no
+ 	])
+ 
+-case x$with_zfs in
+-	xno)
+-		ZFS_DIR=
+-		;;
+-	xyes)
+-		ZFS_DIR=
+-
+-		# Check ./zfs
+-		zfs_src=$PWD/zfs
+-		if test -e "$zfs_src"; then
+-			ZFS_DIR=$(readlink -f $zfs_src)
+-		else
+-			# Check /usr/src/zfs-*/$LINUXRELEASE
+-			zfs_src=$(ls -1d /usr/src/zfs-*/$LINUXRELEASE \
+-				2>/dev/null|tail -1)
+-			if test -e "$zfs_src"; then
+-				ZFS_DIR=$(readlink -f $zfs_src)
+-			else
+-				# Check ../zfs
+-				zfs_src=$PWD/../zfs
+-				if test -e "$zfs_src"; then
+-					ZFS_DIR=$(readlink -f $zfs_src)
+-				else
+-					# Disable zfs failed to detect sources
+-					with_zfs='no'
+-				fi
+-			fi
+-		fi
+-		;;
+-	*)
+-		ZFS_DIR=$(readlink -f $with_zfs)
+-		with_zfs='yes'
+-		;;
+-esac
+-
+-AC_MSG_CHECKING([whether to enable zfs])
+-AC_MSG_RESULT([$with_zfs])
+-
+-if test x$with_zfs = xyes; then
+-	AC_MSG_CHECKING([for location of zfs library headers])
+-	if test -e "$ZFS_DIR/include/libzfs.h"; then
+-		EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I $ZFS_DIR/lib/libspl/include -I $ZFS_DIR/include"
+-		AC_MSG_RESULT([$ZFS_DIR])
+-	elif test -e "$ZFS_DIR/libzfs/libzfs.h"; then
+-		EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I $ZFS_DIR/libspl -I $ZFS_DIR/libzfs"
+-		AC_MSG_RESULT([$ZFS_DIR])
+-	elif test -e "/usr/include/libzfs/libzfs.h"; then
+-		AC_MSG_RESULT([/usr/include])
+-		EXTRA_LIBZFS_INCLUDE="$EXTRA_LIBZFS_INCLUDE -I /usr/include/libspl -I /usr/include/libzfs"
+-	else
+-		AC_MSG_RESULT([unknown])
+-		AC_MSG_ERROR([Could not locate zfs library headers.])
+-	fi
+-	AC_SUBST(EXTRA_LIBZFS_INCLUDE)
+-fi
+-
+-AC_ARG_WITH([zfs-obj],
+-	AC_HELP_STRING([--with-zfs-obj=path], [set path to zfs objects]),
+-	[
+-		if test x$with_zfs = xyes; then
+-			ZFS_OBJ="$withval"
+-		fi
+-	],[
+-		if test x$with_zfs = xyes; then
+-			ZFS_OBJ=$ZFS_DIR
+-		fi
++	dnl #
++	dnl # The existence of the zfs_config.h is used to identify a valid
++	dnl # zfs object directory.  In many cases the object and source
++	dnl # directory are the same, however the objects may also reside
++	dnl # is a subdirectory named after the kernel version.
++	dnl #
++	AC_MSG_CHECKING([zfs build directory])
++	AS_IF([test -z "$zfsobj"], [
++		AS_IF([test -e "${zfssrc}/${LINUXRELEASE}/zfs_config.h"], [
++			zfsobj="${zfssrc}/${LINUXRELEASE}"
++		], [test -e "${zfssrc}/zfs_config.h"], [
++			zfsobj="${zfssrc}"
++		], [
++			zfsobj="[Not found]"
++		])
+ 	])
+ 
+-if test x$with_zfs = xyes; then
+-	LB_ZFS_DEFINE_OPTIONS
+-
+-	AC_MSG_CHECKING([zfs source directory])
+-	AC_MSG_RESULT([$ZFS_DIR])
+-	AC_SUBST(ZFS_DIR)
+-
+-	AC_MSG_CHECKING([zfs object directory])
+-	AC_MSG_RESULT([$ZFS_OBJ])
+-	AC_SUBST(ZFS_OBJ)
++	AC_MSG_RESULT([$zfsobj])
++	AS_IF([test ! -e "$zfsobj/zfs_config.h"], [
++		enable_zfs=no
++	])
+ 
+-	LB_ZFS_SYMVERS
+-	LB_ZFS_RELEASE
++	dnl #
++	dnl # Verify the source version using SPL_META_VERSION in spl_config.h
++	dnl #
++	AS_IF([test x$enable_zfs = xyes], [
++		AC_MSG_CHECKING([zfs source version])
++		AS_IF([fgrep -q ZFS_META_VERSION $zfsobj/zfs_config.h], [
++			zfsver=$((echo "#include <zfs_config.h>";
++			    echo "zfsver=ZFS_META_VERSION-ZFS_META_RELEASE") |
++			    cpp -I $zfsobj |
++			    grep "^zfsver=" | tr -d \" | cut -d= -f2)
++		],[
++			zfsver="[Not found]"
++			enable_zfs=no
++		])
++		AC_MSG_RESULT([$zfsver])
++	])
+ 
+-	LB_PATH_SPL
++	dnl #
++	dnl # Verify the modules systems exist by the expect name.
++	dnl #
++	AS_IF([test x$enable_zfs = xyes], [
++		AC_MSG_CHECKING([zfs file name for module symbols])
++		AS_IF([test -r $zfsobj/$SYMVERFILE], [
++			zfssym=$SYMVERFILE
++		], [test -r $zfsobj/module/$SYMVERFILE], [
++			zfssym=$SYMVERFILE
++		], [
++			zfssym="[Not found]"
++			enable_zfs=no
++		])
++		AC_MSG_RESULT([$zfssym])
++	])
+ 
+-	LB_SPL_BUILD
+-	LB_ZFS_BUILD
+-fi
++	ZFS=${zfssrc}
++	ZFS_OBJ=${zfsobj}
++	ZFS_VERSION=${zfsver}
++	ZFS_SYMBOLS=${zfssym}
+ 
+-AM_CONDITIONAL(SPL_BUILD, test x$enable_spl_build = xyes)
+-AM_CONDITIONAL(ZFS_BUILD, test x$enable_zfs_build = xyes)
+-AM_CONDITIONAL(ZFS_ENABLED, test x$with_zfs = xyes)
++	AC_SUBST(ZFS)
++	AC_SUBST(ZFS_OBJ)
++	AC_SUBST(ZFS_VERSION)
++	AC_SUBST(ZFS_SYMBOLS)
+ ])
+ 
+-#
+-# LB_ZFS_BUILD
+-#
+-# Optionally configure/make the zfs sources.  If the sources are
+-# determined to reside in-tree this feature will automatically be
+-# enabled.  If the sources are not in-tree it will be disabled.
+-# Use --enable-zfs-build or --disable-zfs-build if you need to
+-# override this behavior.
+-#
+-AC_DEFUN([LB_ZFS_BUILD],
+-[
+-AC_ARG_ENABLE([zfs-build],
+-	AC_HELP_STRING([--enable-zfs-build], [enable zfs configure/make]),
+-	[], [
+-		ZFS_DIR_INTREE=$(readlink -f $PWD/zfs)
+-		if test x$ZFS_DIR = x$ZFS_DIR_INTREE; then
+-			enable_zfs_build='yes'
+-		else
+-			enable_zfs_build='no'
+-		fi
++AC_DEFUN([LB_ZFS_USER], [
++	dnl #
++	dnl # Detect user space zfs development headers.
++	dnl #
++	AC_MSG_CHECKING([zfs devel headers])
++	AS_IF([test -d /usr/include/libzfs && test -d /usr/include/libspl], [
++		zfslib="-I /usr/include/libspl -I /usr/include/libzfs"
++	], [
++		zfslib="[Not found]"
++		enable_zfs=no
+ 	])
++	AC_MSG_RESULT([$zfslib])
+ 
+-AC_MSG_CHECKING([whether to build zfs])
+-if test x$enable_zfs_build = xyes; then
+-	AC_MSG_RESULT([$enable_zfs_build])
+-
+-	LB_CHECK_FILE([$ZFS_DIR/module/zfs/dmu.c], [], [
+-		AC_MSG_ERROR([Complete zfs sources must exist when building.])])
+-
+-	LB_CHECK_FILE([$ZFS_DIR/configure], [], [
+-		AC_MSG_ERROR([Complete zfs sources must exist when building.])])
+-
+-	ZFS_SUBDIR="$ZFS_DIR"
+-	AC_SUBST(ZFS_SUBDIR)
+-	AC_CONFIG_SUBDIRS("zfs")
+-
+-	ac_configure_args="$ac_configure_args --with-spl=$SPL_DIR"
+-	ac_configure_args="$ac_configure_args --with-spl-obj=$SPL_OBJ"
+-else
+-	enable_zfs_build='no'
+-	AC_MSG_RESULT([$enable_zfs_build])
+-fi
++	ZFS_LIBZFS_INCLUDE=${zfslib}
++	AC_SUBST(ZFS_LIBZFS_INCLUDE)
+ ])
+ 
+-#
+-# LB_ZFS_SYMVERS
+-#
+-AC_DEFUN([LB_ZFS_SYMVERS],
+-[
+-AC_MSG_CHECKING([zfs module symbols])
+-if test -r $ZFS_OBJ/Module.symvers; then
+-	ZFS_SYMBOLS=Module.symvers
+-elif test -r $ZFS_OBJ/Modules.symvers; then
+-	ZFS_SYMBOLS=Modules.symvers
+-elif test -r $ZFS_OBJ/module/Module.symvers; then
+-	ZFS_SYMBOLS=Module.symvers
+-elif test -r $ZFS_OBJ/module/Modules.symvers; then
+-	ZFS_SYMBOLS=Modules.symvers
+-else
+-	ZFS_SYMBOLS=$SYMVERFILE
+-fi
+-
+-AC_MSG_RESULT([$ZFS_SYMBOLS])
+-AC_SUBST(ZFS_SYMBOLS)
+-])
+-
+-#
+-# LB_ZFS_RELEASE
+-#
+-AC_DEFUN([LB_ZFS_RELEASE],
+-[
+-AC_MSG_CHECKING([zfs source release])
+-if test -r $ZFS_OBJ/zfs_config.h; then
+-	tmp_flags="$EXTRA_KCFLAGS"
+-	EXTRA_KCFLAGS="-I$ZFS_OBJ $EXTRA_KCFLAGS"
+-	LB_LINUX_TRY_MAKE([
+-		#include <$ZFS_OBJ/zfs_config.h>
+-	],[
+-		char *ZFS_RELEASE;
+-		ZFS_RELEASE=ZFS_META_VERSION;
+-	],[
+-		$makerule LUSTRE_KERNEL_TEST=conftest.i
+-	],[
+-		test -s build/conftest.i
+-	],[
+-		eval $(grep "ZFS_RELEASE=" build/conftest.i)
+-	],[
+-		AC_MSG_RESULT([unknown])
+-		AC_MSG_ERROR([Could not preprocess test program.])
++AC_DEFUN([LB_PATH_ZFS], [
++	AC_ARG_WITH([zfs],
++		[AS_HELP_STRING([--with-zfs=PATH], [Path to zfs source])],
++		[
++			AS_IF([test x$withval = xno], [
++				enable_zfs=no
++				require_zfs=no
++			], [test x$withval = xyes], [
++				enable_zfs=yes
++				require_zfs=yes
++			], [
++				enable_zfs=yes
++				require_zfs=yes
++				zfssrc="$withval"
++			])
++		], [
++			AS_IF([test x$enable_server = xyes &&
++			    test x$enable_dist = xno], [
++				require_zfs=no
++				enable_zfs=yes
++			], [
++				require_zfs=no
++				enable_zfs=no
++			])
++		])
++
++	AC_MSG_CHECKING([whether to enable zfs])
++	AC_MSG_RESULT([$enable_zfs])
++
++	AS_IF([test x$enable_zfs = xyes], [
++		AS_IF([test x$enable_modules = xyes], [
++			LB_SPL
++			LB_ZFS
++		])
++
++		LB_ZFS_USER
++
++		dnl #
++		dnl # enable_zfs will be set to no in LB_SPL or LB_ZFS if
++		dnl # one of more of the build requirements is not met.
++		dnl #
++		AS_IF([test x$enable_zfs = xyes], [
++			AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd)
++		],[
++			AS_IF([test x$require_zfs = xyes], [
++				AC_MSG_ERROR([
++
++Required zfs osd cannot be built due to missing zfs development headers.
++
++Support for zfs can be enabled by downloading the required packages for your
++distribution.  See http://zfsonlinux.org/ to determine is zfs is supported by
++your distribution.
++				])
++			], [
++				AC_MSG_WARN([
++
++Disabling optional zfs osd due to missing development headers.
++
++Support for zfs can be enabled by downloading the required packages for your
++distribution.  See http://zfsonlinux.org/ to determine is zfs is supported by
++your distribution.
++				])
++			])
++		])
+ 	])
+-	EXTRA_KCFLAGS="$tmp_flags"
+-	rm build/conftest.i
+-elif test -r $ZFS_DIR/META; then
+-	ZFS_RELEASE=$(awk '/Version/ { print [$]2 }' $ZFS_DIR/META)
+-else
+-	AC_MSG_RESULT([unknown])
+-	AC_MSG_ERROR([Could not locate zfs_config.h or META to check release.])
+-fi
+-
+-if test x$ZFS_RELEASE = x; then
+-	AC_MSG_RESULT([unknown])
+-	AC_MSG_ERROR([Could not determine zfs release.])
+-fi
+-
+-AC_MSG_RESULT([$ZFS_RELEASE])
+-AC_SUBST(ZFS_RELEASE)
+-])
+ 
+-#
+-# LB_ZFS_DEFINE_OPTIONS
+-#
+-AC_DEFUN([LB_ZFS_DEFINE_OPTIONS],
+-[
+-AC_DEFINE(HAVE_ZFS_OSD, 1, Enable zfs osd)
++	AM_CONDITIONAL(ZFS_ENABLED, test x$enable_zfs = xyes)
+ ])
+diff --git a/contrib/lbuild/lbuild b/contrib/lbuild/lbuild
+index f389505..3eda63f 100755
+--- a/contrib/lbuild/lbuild
++++ b/contrib/lbuild/lbuild
+@@ -1020,6 +1020,8 @@ build_spl_zfs() {
+ 
+         pushd $pkg || return 255
+ 
++	sh autogen.sh || return 255
++
+         # XXX - _having_ to give a package a kernel just to have it configure
+         #       enough to do a "make dist" is truely bogus!
+         if  ! ./configure --with-linux=${LINUX} \
+diff --git a/lustre.spec.in b/lustre.spec.in
+index edd02f5..11ff302 100644
+--- a/lustre.spec.in
++++ b/lustre.spec.in
+@@ -115,7 +115,7 @@ backing store of a Lustre server.
+ %if %{build_lustre_osd_zfs}
+ %package osd-zfs
+ Summary: osd-zfs is the mandatory glue for ZFS support in Lustre.
+-Requires: lustre-modules = %{version}, zfs-modules
++Requires: lustre-modules = %{version}, zfs-kmod
+ Provides: lustre-osd
+ Group: Development/Kernel
+ 
+diff --git a/lustre/osd-zfs/Makefile.in b/lustre/osd-zfs/Makefile.in
+index 0a2dceb..7def377 100644
+--- a/lustre/osd-zfs/Makefile.in
++++ b/lustre/osd-zfs/Makefile.in
+@@ -2,9 +2,8 @@ MODULES := osd_zfs
+ osd_zfs-objs := osd_handler.o osd_lproc.o udmu.o osd_quota.o
+ osd_zfs-objs += osd_object.o osd_io.o osd_oi.o osd_xattr.o osd_index.o
+ 
+-EXTRA_PRE_CFLAGS += -I@SPL_DIR@ -I@SPL_DIR@/include
+ EXTRA_PRE_CFLAGS += -include @SPL_OBJ@/spl_config.h
+-EXTRA_PRE_CFLAGS += -I@ZFS_OBJ@ -I@ZFS_OBJ@/include
+ EXTRA_PRE_CFLAGS += -include @ZFS_OBJ@/zfs_config.h
++EXTRA_PRE_CFLAGS += -I@SPL@ -I@SPL@/include -I@ZFS@ -I@ZFS@/include
+ 
+ @INCLUDE_RULES@
+diff --git a/lustre/utils/Makefile.am b/lustre/utils/Makefile.am
+index bc8d716..6ee11c6 100644
+--- a/lustre/utils/Makefile.am
++++ b/lustre/utils/Makefile.am
+@@ -132,7 +132,7 @@ endif
+ if ZFS_ENABLED
+ mount_lustre_SOURCES += mount_utils_zfs.c
+ mount_lustre_CPPFLAGS = -DHAVE_IOCTL_IN_UNISTD_H
+-mount_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
++mount_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
+ mount_lustre_LDFLAGS = -pthread -rdynamic -ldl
+ endif
+ 
+@@ -148,7 +148,7 @@ endif
+ if ZFS_ENABLED
+ mkfs_lustre_SOURCES += mount_utils_zfs.c
+ mkfs_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
+-mkfs_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
++mkfs_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
+ mkfs_lustre_LDFLAGS = -pthread -rdynamic -ldl
+ endif
+ 
+@@ -162,7 +162,7 @@ endif
+ if ZFS_ENABLED
+ tunefs_lustre_SOURCES += mount_utils_zfs.c
+ tunefs_lustre_CPPFLAGS += -DHAVE_IOCTL_IN_UNISTD_H
+-tunefs_lustre_CPPFLAGS += $(EXTRA_LIBZFS_INCLUDE)
++tunefs_lustre_CPPFLAGS += $(ZFS_LIBZFS_INCLUDE)
+ tunefs_lustre_LDFLAGS = -pthread -rdynamic -ldl
+ endif
+ 
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 975bc76..5a783bd 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -25,8 +25,9 @@ DEPEND="
 	readline? ( sys-libs/readline )
 	tcpd? ( sys-apps/tcp-wrappers )
 	server? (
-		>=sys-kernel/spl-0.6.0_rc14-r2
-		>=sys-fs/zfs-kmod-0.6.0_rc14-r4
+		>=sys-kernel/spl-0.6.1
+		>=sys-fs/zfs-kmod-0.6.1
+		>=sys-fs/zfs-0.6.1
 	)
 	"
 RDEPEND="${DEPEND}"
@@ -40,10 +41,9 @@ PATCHES=(
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0008-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch"
-	"${FILESDIR}/0010-LU-3077-build-fix-warnings-in-client-modules.patch"
-	"${FILESDIR}/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
-	"${FILESDIR}/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0010-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
+	"${FILESDIR}/0011-LU-3117-build-zfs-0.6.1-kmod-dkms-compatibility.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-31 17:20 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-31 17:20 UTC (permalink / raw
  To: gentoo-commits

commit:     d553d5f93a1d17c96cba49445ff89ab69db28339
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 31 17:20:23 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Sun Mar 31 17:20:23 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=d553d5f9

Add patches for gcc-4.8 and linux-3.9

Package-Manager: portage-2.2.0_alpha170
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   16 +++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    2 +-
 ...cfs-use-sock_alloc_file-instead-of-sock_m.patch |    2 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    2 +-
 ...004-LU-2800-llite-introduce-local-getname.patch |    2 +-
 ...ld-check-header-files-in-generated-uapi-d.patch |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |    2 +-
 .../files/0008-LU-2987-llite-rcu-free-inode.patch  |    2 +-
 ...ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch |    2 +-
 ...3077-build-fix-warnings-in-client-modules.patch |   34 ++++++
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |  115 ++++++++++++++++++++
 ...50-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch |   82 ++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    3 +
 14 files changed, 259 insertions(+), 9 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 5d92271..4140e1a 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,22 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  31 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0010-LU-3077-build-fix-warnings-in-client-modules.patch,
+  +files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  +files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0004-LU-2800-llite-introduce-local-getname.patch,
+  files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0008-LU-2987-llite-rcu-free-inode.patch,
+  files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch,
+  lustre-9999.ebuild:
+  Add patches for gcc-4.8 and linux-3.9
+
   31 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild,
   metadata.xml:
   Enable more options

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 487c99b..7eb7829 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From d0169772fa2ebda3ed5c619d5e5cd6339973b0a0 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 1/9] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 01/12] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
index 68450f5..a5b6daf 100644
--- a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -1,7 +1,7 @@
 From 8258deb14e38559bf5ef37bd50a0918cdf473c00 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 2/9] LU-2800 libcfs: use sock_alloc_file instead of
+Subject: [PATCH 02/12] LU-2800 libcfs: use sock_alloc_file instead of
  sock_map_fd
 
 v2.6.27 added a second argument to sock_map_fd. Earlier versions are

diff --git a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 5f96a81..8ada9e8 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
 From 3050d2c9cccb51ce521bdbecd471cb6ce18f77b8 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 3/9] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 03/12] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
index 7218853..a0e2421 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
 From 4f1bc5cb857ebba89b84d27ed5ed6531b8a59058 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 4/9] LU-2800 llite: introduce local getname()
+Subject: [PATCH 04/12] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 0c36aa6..78c264f 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
 From 60c775330c663b7ecd32f314ab156ad0ba0ea072 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 5/9] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 05/12] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index d9444a7..39f4b4b 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
 From 19491f9e67e43ae10ae1f71e38730606e2c518a8 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 27 Mar 2013 08:49:01 +0400
-Subject: [PATCH 6/9] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 06/12] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 2092458..608af56 100644
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
 From fc013881dd3b551e8fb8a5f6722a359c56c7bf63 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 7/9] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 07/12] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()

diff --git a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
index 3960fe0..b444050 100644
--- a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
 From 77ae599340fc509002f2875257c2e024fb1b44fb Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 8/9] LU-2987 llite: rcu-free inode
+Subject: [PATCH 08/12] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.

diff --git a/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch b/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
index 2542cf4..ea056b4 100644
--- a/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
+++ b/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
@@ -1,7 +1,7 @@
 From 84010884ffc614cc0d5cf06e5416dadc2693a86a Mon Sep 17 00:00:00 2001
 From: Robert Read <robert.read@intel.com>
 Date: Fri, 22 Mar 2013 11:32:13 -0700
-Subject: [PATCH 9/9] LU-3011 ubuntu: Fix build failures on Ubuntu 12.04
+Subject: [PATCH 09/12] LU-3011 ubuntu: Fix build failures on Ubuntu 12.04
 
 Fix "set-but-unused" warning by using the variable,
 and move -lreadline to end of link command line.

diff --git a/sys-cluster/lustre/files/0010-LU-3077-build-fix-warnings-in-client-modules.patch b/sys-cluster/lustre/files/0010-LU-3077-build-fix-warnings-in-client-modules.patch
new file mode 100644
index 0000000..97a9d17
--- /dev/null
+++ b/sys-cluster/lustre/files/0010-LU-3077-build-fix-warnings-in-client-modules.patch
@@ -0,0 +1,34 @@
+From 0ec7b7dc1eafdec4da8a69a0c8ca5bab8c2a1634 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Sun, 31 Mar 2013 19:16:54 +0400
+Subject: [PATCH 10/12] LU-3077 build: fix warnings in client modules
+
+This fixes warning with client module
+memset(attr, 0, sizeof(attr)) :
+argument to "sizeof" in "memset" call is the same expression as the
+destination; did you mean to dereference it
+
+gcc version 4.8.0 (Gentoo 4.8.0 p1.0, pie-0.5.10)
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I85197dfb7e512e4c747a7057632c3ecc7486ed37
+---
+ lustre/fld/fld_index.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lustre/fld/fld_index.c b/lustre/fld/fld_index.c
+index cbe8300..a6f9be5 100644
+--- a/lustre/fld/fld_index.c
++++ b/lustre/fld/fld_index.c
+@@ -331,7 +331,7 @@ int fld_index_init(const struct lu_env *env, struct lu_server_fld *fld,
+ 	if (attr == NULL)
+ 		RETURN(-ENOMEM);
+ 
+-	memset(attr, 0, sizeof(attr));
++	memset(attr, 0, sizeof(*attr));
+ 	attr->la_valid = LA_MODE;
+ 	attr->la_mode = S_IFREG | 0666;
+ 	dof.dof_type = DFT_INDEX;
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
new file mode 100644
index 0000000..3968eae
--- /dev/null
+++ b/sys-cluster/lustre/files/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -0,0 +1,115 @@
+From 11a0f9a2ac7d3d1bcda9a8bd3af5800cee35249d Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Sun, 31 Mar 2013 19:32:30 +0400
+Subject: [PATCH 11/12] LU-2850 kernel: 3.9 hlist_for_each_entry uses 3 args
+
+In 3.9 hlist_for_each_entry use 3 args since commit
+
+commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
+Author: Sasha Levin <sasha.levin@oracle.com>
+Date:   Wed Feb 27 17:06:00 2013 -0800
+
+    hlist: drop the node parameter from iterators
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I8f38d562607de21771b03575e37cc0498867a570
+---
+ libcfs/include/libcfs/list.h           | 10 ++++++++++
+ lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  5 +++++
+ 3 files changed, 41 insertions(+)
+
+diff --git a/libcfs/include/libcfs/list.h b/libcfs/include/libcfs/list.h
+index be06e74..b747804 100644
+--- a/libcfs/include/libcfs/list.h
++++ b/libcfs/include/libcfs/list.h
+@@ -91,14 +91,24 @@ typedef struct hlist_node cfs_hlist_node_t;
+ #define cfs_hlist_for_each(pos, head)      hlist_for_each(pos, head)
+ #define cfs_hlist_for_each_safe(pos, n, head) \
+         hlist_for_each_safe(pos, n, head)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define cfs_hlist_for_each_entry(tpos, pos, head, member) \
++	pos = NULL; hlist_for_each_entry(tpos, head, member)
++#else
+ #define cfs_hlist_for_each_entry(tpos, pos, head, member) \
+         hlist_for_each_entry(tpos, pos, head, member)
++#endif
+ #define cfs_hlist_for_each_entry_continue(tpos, pos, member) \
+         hlist_for_each_entry_continue(tpos, pos, member)
+ #define cfs_hlist_for_each_entry_from(tpos, pos, member) \
+         hlist_for_each_entry_from(tpos, pos, member)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
++	pos = NULL; hlist_for_each_entry_safe(tpos, n, head, member)
++#else
+ #define cfs_hlist_for_each_entry_safe(tpos, pos, n, head, member) \
+         hlist_for_each_entry_safe(tpos, pos, n, head, member)
++#endif
+ 
+ #define CFS_HLIST_HEAD_INIT		   HLIST_HEAD_INIT
+ #define CFS_HLIST_HEAD(n)		   HLIST_HEAD(n)
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 4e90e86..527052e 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2291,6 +2291,29 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.9 uses hlist_for_each_entry with 3 args
++# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
++#
++AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
++[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/list.h>
++	#include <linux/fs.h>
++],[
++	struct inode *inode;
++	struct dentry *dentry;
++	hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
++		continue;
++	}
++],[
++	AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2479,6 +2502,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 # 3.8
+ 	 LC_HAVE_MM_VMTRUNCATE
+ 
++	 # 3.9
++	 LC_HAVE_HLIST_FOR_EACH_3ARG
++
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+ 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index ca485cd..ecd689f 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -620,8 +620,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
+ #define ll_d_hlist_empty(list) hlist_empty(list)
+ #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
+ #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
++	p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
++#else
+ #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
+         hlist_for_each_entry(dentry, p, i_dentry, alias)
++#endif
+ #else
+ #define ll_d_hlist_node list_head
+ #define ll_d_hlist_empty(list) list_empty(list)
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch b/sys-cluster/lustre/files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
new file mode 100644
index 0000000..35905f0
--- /dev/null
+++ b/sys-cluster/lustre/files/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch
@@ -0,0 +1,82 @@
+From da0f460ee306437c583147ea6832298cbc1e9202 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Sun, 31 Mar 2013 20:13:21 +0400
+Subject: [PATCH 12/12] LU-2850 kernel: f_vfsmnt replaced by f_path.mnt
+
+In linux 3.9 f_vfsmnt was killed and replaced
+
+commit 182be684784334598eee1d90274e7f7aa0063616
+Author: Al Viro <viro@zeniv.linux.org.uk>
+Date:   Thu Jan 24 02:21:54 2013 -0500
+
+    kill f_vfsmnt
+
+    very few users left...
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I02f595f0b7bbe804c9695d6da2106deb2d17e0ee
+---
+ lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
+ lustre/llite/dir.c             |  4 ++++
+ 2 files changed, 27 insertions(+)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 527052e..de79357 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2314,6 +2314,28 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.9 killed f_vfsmnt by
++# 182be684784334598eee1d90274e7f7aa0063616
++# replacement is f_path.mnt
++#
++AC_DEFUN([LC_HAVE_F_PATH_MNT],
++[AC_MSG_CHECKING([if struct file has f_path.mnt])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct file *fp = NULL;
++	struct path  path;
++
++	path.mnt = fp->f_path.mnt;
++],[
++	AC_DEFINE(HAVE_F_PATH_MNT,1,[yes])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2504,6 +2526,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.9
+ 	 LC_HAVE_HLIST_FOR_EACH_3ARG
++	 LC_HAVE_F_PATH_MNT
+ 
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index 14ea720..14d275c 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -639,7 +639,11 @@ static int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+         }
+ 	filp->f_version = inode->i_version;
+ #ifdef HAVE_TOUCH_ATIME_1ARG
++#ifdef HAVE_F_PATH_MNT
++	path.mnt = filp->f_path.mnt;
++#else
+ 	path.mnt = filp->f_vfsmnt;
++#endif
+ 	path.dentry = filp->f_dentry;
+ 	touch_atime(&path);
+ #else
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index d956244..975bc76 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -41,6 +41,9 @@ PATCHES=(
 	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0008-LU-2987-llite-rcu-free-inode.patch"
 	"${FILESDIR}/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch"
+	"${FILESDIR}/0010-LU-3077-build-fix-warnings-in-client-modules.patch"
+	"${FILESDIR}/0011-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0012-LU-2850-kernel-f_vfsmnt-replaced-by-f_path.mnt.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-31 11:28 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-31 11:28 UTC (permalink / raw
  To: gentoo-commits

commit:     a140ebab5df4d5b6ad839cf8b46ee294cbee450c
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 31 11:28:41 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Sun Mar 31 11:28:41 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=a140ebab

Add patch to fix as-needed issue

Package-Manager: portage-2.2.0_alpha170
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   12 ++++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |    2 +-
 ...cfs-use-sock_alloc_file-instead-of-sock_m.patch |    2 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    2 +-
 ...004-LU-2800-llite-introduce-local-getname.patch |    2 +-
 ...ld-check-header-files-in-generated-uapi-d.patch |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |    2 +-
 .../files/0008-LU-2987-llite-rcu-free-inode.patch  |    2 +-
 ...ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch |   58 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    1 +
 11 files changed, 79 insertions(+), 8 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 16471dd..4452f88 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,18 @@
 # $Header: $
 
   31 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch,
+  files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0004-LU-2800-llite-introduce-local-getname.patch,
+  files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0008-LU-2987-llite-rcu-free-inode.patch, lustre-9999.ebuild:
+  Add patch to fix as-needed issue
+
+  31 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   +files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
   +files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 3f372ac..487c99b 100644
--- a/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,7 @@
 From d0169772fa2ebda3ed5c619d5e5cd6339973b0a0 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH 1/8] LU-2982 build: make AC check for linux arch sandbox
+Subject: [PATCH 1/9] LU-2982 build: make AC check for linux arch sandbox
  friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly

diff --git a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
index fe43064..68450f5 100644
--- a/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -1,7 +1,7 @@
 From 8258deb14e38559bf5ef37bd50a0918cdf473c00 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 2/8] LU-2800 libcfs: use sock_alloc_file instead of
+Subject: [PATCH 2/9] LU-2800 libcfs: use sock_alloc_file instead of
  sock_map_fd
 
 v2.6.27 added a second argument to sock_map_fd. Earlier versions are

diff --git a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 9f05db0..5f96a81 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
 From 3050d2c9cccb51ce521bdbecd471cb6ce18f77b8 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 3/8] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 3/9] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
index e194dfd..7218853 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
 From 4f1bc5cb857ebba89b84d27ed5ed6531b8a59058 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 4/8] LU-2800 llite: introduce local getname()
+Subject: [PATCH 4/9] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index a802215..0c36aa6 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
 From 60c775330c663b7ecd32f314ab156ad0ba0ea072 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 5/8] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 5/9] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 380597d..d9444a7 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
 From 19491f9e67e43ae10ae1f71e38730606e2c518a8 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 27 Mar 2013 08:49:01 +0400
-Subject: [PATCH 6/8] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 6/9] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.

diff --git a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index b6d2434..2092458 100644
--- a/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
 From fc013881dd3b551e8fb8a5f6722a359c56c7bf63 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 7/8] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 7/9] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()

diff --git a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
index 35d281d..3960fe0 100644
--- a/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
 From 77ae599340fc509002f2875257c2e024fb1b44fb Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 8/8] LU-2987 llite: rcu-free inode
+Subject: [PATCH 8/9] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.

diff --git a/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch b/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
new file mode 100644
index 0000000..2542cf4
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch
@@ -0,0 +1,58 @@
+From 84010884ffc614cc0d5cf06e5416dadc2693a86a Mon Sep 17 00:00:00 2001
+From: Robert Read <robert.read@intel.com>
+Date: Fri, 22 Mar 2013 11:32:13 -0700
+Subject: [PATCH 9/9] LU-3011 ubuntu: Fix build failures on Ubuntu 12.04
+
+Fix "set-but-unused" warning by using the variable,
+and move -lreadline to end of link command line.
+
+Signed-off-by: Robert Read <robert.read.@intel.com>
+Change-Id: I676e319ed81dbb6ba41d039e7b075b02d5122b48
+---
+ libcfs/autoconf/lustre-libcfs.m4 | 1 +
+ lustre/utils/Makefile.am         | 8 ++++----
+ 2 files changed, 5 insertions(+), 4 deletions(-)
+
+diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
+index 5789166..72ae7b4 100644
+--- a/libcfs/autoconf/lustre-libcfs.m4
++++ b/libcfs/autoconf/lustre-libcfs.m4
+@@ -918,6 +918,7 @@ AC_COMPILE_IFELSE([
+ 		__u64 *data2 = NULL;
+ 
+ 		data1 = data2;
++		data2 = data1;
+ 		return 0;
+ 	}
+ ],[
+diff --git a/lustre/utils/Makefile.am b/lustre/utils/Makefile.am
+index 1309376..bc8d716 100644
+--- a/lustre/utils/Makefile.am
++++ b/lustre/utils/Makefile.am
+@@ -42,19 +42,19 @@ endif
+ noinst_LIBRARIES = liblustreapitmp.a
+ 
+ lctl_SOURCES = lustre_lfsck.c obd.c lustre_cfg.c lctl.c obdctl.h
+-lctl_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
++lctl_LDADD :=  liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
+ lctl_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
+ 
+ lfs_SOURCES = lfs.c obd.c lustre_cfg.c
+-lfs_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
++lfs_LDADD := liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
+ lfs_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
+ 
+ loadgen_SOURCES = loadgen.c lustre_cfg.c obd.c
+-loadgen_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
++loadgen_LDADD := liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
+ loadgen_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
+ 
+ lustre_rsync_SOURCES = lustre_rsync.c obd.c lustre_cfg.c lustre_rsync.h
+-lustre_rsync_LDADD := $(LIBREADLINE) liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS)
++lustre_rsync_LDADD :=  liblustreapi.a $(LIBPTLCTL) $(PTHREAD_LIBS) $(LIBREADLINE)
+ lustre_rsync_DEPENDENCIES := $(LIBPTLCTL) liblustreapi.a
+ 
+ ll_recover_lost_found_objs_SOURCES = ll_recover_lost_found_objs.c
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 3457fbf..a25e2a5 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -38,6 +38,7 @@ PATCHES=(
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0008-LU-2987-llite-rcu-free-inode.patch"
+	"${FILESDIR}/0009-LU-3011-ubuntu-Fix-build-failures-on-Ubuntu-12.04.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-31 11:15 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-31 11:15 UTC (permalink / raw
  To: gentoo-commits

commit:     a2e187caf28d7c04d07005496f8ecfaeaaefb5c2
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Sun Mar 31 11:14:21 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Sun Mar 31 11:14:21 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=a2e187ca

Update rebased patches

Package-Manager: portage-2.2.0_alpha170
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   21 +++++
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |   22 +++--
 ...fs-use-sock_alloc_file-instead-of-sock_m.patch} |    8 +-
 ...at-posix_acl_-to-from-_xattr-take-user_n.patch} |   10 +-
 ...04-LU-2800-llite-introduce-local-getname.patch} |    4 +-
 ...d-check-header-files-in-generated-uapi-d.patch} |   24 +++---
 ...0-kernel-3.8-upstream-removes-vmtruncate.patch} |    4 +-
 ...2850-kernel-3.8-upstream-kills-daemonize.patch} |   42 +++++-----
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |   87 --------------------
 ...tch => 0008-LU-2987-llite-rcu-free-inode.patch} |    4 +-
 sys-cluster/lustre/lustre-9999.ebuild              |   17 ++--
 11 files changed, 89 insertions(+), 154 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index bce1420..16471dd 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,27 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  31 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  +files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  +files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  +files/0004-LU-2800-llite-introduce-local-getname.patch,
+  +files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  +files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  +files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  +files/0008-LU-2987-llite-rcu-free-inode.patch,
+  -files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  -files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  -files/0003-LU-2800-llite-introduce-local-getname.patch,
+  -files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  -files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  -files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  -files/0007-LU-2987-llite-rcu-free-inode.patch,
+  -files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  lustre-9999.ebuild:
+  Update rebased patches
+
   27 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
   +files/0003-LU-2800-llite-introduce-local-getname.patch,

diff --git a/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 79%
rename from sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
rename to sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 1602cb0..3f372ac 100644
--- a/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,7 +1,8 @@
-From 1154d0914e29f3d6badb63913855faa008ac7b7b Mon Sep 17 00:00:00 2001
+From d0169772fa2ebda3ed5c619d5e5cd6339973b0a0 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
-Subject: [PATCH] LU-2982 build: make AC check for linux arch sandbox friendly
+Subject: [PATCH 1/8] LU-2982 build: make AC check for linux arch sandbox
+ friendly
 
 this commit makes AC check for linux kernel arch sandbox friendly
 
@@ -9,14 +10,14 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I173cd892bca5587519806cf6d300a5053dfb935f
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- build/autoconf/lustre-build-linux.m4 | 65 +++++++++++++++++++++++++++++++-----
- 1 file changed, 57 insertions(+), 8 deletions(-)
+ config/lustre-build-linux.m4 | 66 ++++++++++++++++++++++++++++++++++++++------
+ 1 file changed, 58 insertions(+), 8 deletions(-)
 
-diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index 4c0a581..9fcd0b3 100644
---- a/build/autoconf/lustre-build-linux.m4
-+++ b/build/autoconf/lustre-build-linux.m4
-@@ -363,14 +363,63 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
+index ec77262..244d398 100644
+--- a/config/lustre-build-linux.m4
++++ b/config/lustre-build-linux.m4
+@@ -325,14 +325,64 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],
@@ -44,7 +45,8 @@ index 4c0a581..9fcd0b3 100644
 + #ifdef CONFIG_X86
 +  #ifdef CONFIG_X86_32
 +   #define UTS_MACHINE i386
-+  #else
++  #endif
++  #ifdef CONFIG_X86_64
 +   #define UTS_MACHINE x86_64
 +  #endif
 + #endif

diff --git a/sys-cluster/lustre/files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
similarity index 94%
rename from sys-cluster/lustre/files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
rename to sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
index d776d34..fe43064 100644
--- a/sys-cluster/lustre/files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ b/sys-cluster/lustre/files/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -1,7 +1,7 @@
-From b6d238eff4b7417cb5d5d9882b00c630b6ab2ee1 Mon Sep 17 00:00:00 2001
+From 8258deb14e38559bf5ef37bd50a0918cdf473c00 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 1/7] LU-2800 libcfs: use sock_alloc_file instead of
+Subject: [PATCH 2/8] LU-2800 libcfs: use sock_alloc_file instead of
  sock_map_fd
 
 v2.6.27 added a second argument to sock_map_fd. Earlier versions are
@@ -19,7 +19,7 @@ Change-Id: I4e12da8c102b5d682db9658187330ae601b00a21
  2 files changed, 22 insertions(+), 13 deletions(-)
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index e661f7d..977518a 100644
+index e661f7d..e84cd74 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
 @@ -500,18 +500,19 @@ LB_LINUX_TRY_COMPILE([
@@ -35,7 +35,7 @@ index e661f7d..977518a 100644
  	#include <linux/net.h>
  ],[
 -        sock_map_fd(NULL, 0);
-+	sock_alloc_file(NULL, 0);
++	sock_alloc_file(NULL, 0, NULL);
  ],[
 -        AC_MSG_RESULT(yes)
 -        AC_DEFINE(HAVE_SOCK_MAP_FD_2ARG, 1,

diff --git a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
similarity index 95%
rename from sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
rename to sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index de2178c..9f05db0 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From 66f494869c183a010a40397221e55c625e5d2e8b Mon Sep 17 00:00:00 2001
+From 3050d2c9cccb51ce521bdbecd471cb6ce18f77b8 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 2/7] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 3/8] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
@@ -121,7 +121,7 @@ index 14f3ef6..eb62458 100644
  int posix_acl_valid(const struct posix_acl *acl)
  {
 diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index 24a89eb..9575739 100644
+index f9e425d..7e3eb53 100644
 --- a/lustre/llite/xattr.c
 +++ b/lustre/llite/xattr.c
 @@ -345,7 +345,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
@@ -134,7 +134,7 @@ index 24a89eb..9575739 100644
                  RETURN(rc);
          }
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index fd087a5..d67db9d 100644
+index 9f3dea4..c9aa7a0 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -41,6 +41,7 @@
@@ -145,7 +145,7 @@ index fd087a5..d67db9d 100644
  #else
  # include <liblustre.h>
  #endif
-@@ -466,7 +467,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
+@@ -465,7 +466,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
          if (!buf)
                  RETURN(-EPROTO);
  

diff --git a/sys-cluster/lustre/files/0003-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
similarity index 95%
rename from sys-cluster/lustre/files/0003-LU-2800-llite-introduce-local-getname.patch
rename to sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
index 18fd7cf..e194dfd 100644
--- a/sys-cluster/lustre/files/0003-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From f56dde4b75bf7cddf7c6da1ebdda3000b4f4c284 Mon Sep 17 00:00:00 2001
+From 4f1bc5cb857ebba89b84d27ed5ed6531b8a59058 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 3/7] LU-2800 llite: introduce local getname()
+Subject: [PATCH 4/8] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
similarity index 93%
rename from sys-cluster/lustre/files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch
rename to sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 83aca65..a802215 100644
--- a/sys-cluster/lustre/files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
-From 9960d414ad44b844306dd5aa82d4e8aabbb68261 Mon Sep 17 00:00:00 2001
+From 60c775330c663b7ecd32f314ab156ad0ba0ea072 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 4/7] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 5/8] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.
@@ -9,15 +9,15 @@ v3.7. We need to check/include necessary header files there.
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: Ib104919189ebc0af7d3b5e9ca3b866b3b98be3dc
 ---
- autoMakefile.am                      |  2 +-
- build/autoconf/lustre-build-linux.m4 | 14 ++++++++------
- ldiskfs/config/ldiskfs-build.m4      | 14 ++++++++------
- lustre/autoconf/lustre-core.m4       |  2 +-
- lustre/scripts/version_tag.pl        |  1 +
+ autoMakefile.am                 |  2 +-
+ config/lustre-build-linux.m4    | 14 ++++++++------
+ ldiskfs/config/ldiskfs-build.m4 | 14 ++++++++------
+ lustre/autoconf/lustre-core.m4  |  2 +-
+ lustre/scripts/version_tag.pl   |  1 +
  5 files changed, 19 insertions(+), 14 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 8a259bc..6cc5f6d 100644
+index 79bcd65..93608de 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -84,7 +84,7 @@ all-am: modules
@@ -29,10 +29,10 @@ index 8a259bc..6cc5f6d 100644
  	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
  	include/config/MARKER $@
  endif # LINUX
-diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index ec77262..5c7c227 100644
---- a/build/autoconf/lustre-build-linux.m4
-+++ b/build/autoconf/lustre-build-linux.m4
+diff --git a/config/lustre-build-linux.m4 b/config/lustre-build-linux.m4
+index 244d398..b995875 100644
+--- a/config/lustre-build-linux.m4
++++ b/config/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
  if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/utsrelease.h ; then
  	LINUXRELEASEHEADER=$AUTOCONF_HDIR/utsrelease.h

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
similarity index 93%
rename from sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
rename to sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 1222d02..380597d 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From 043935d6e6e3ac7d988ef809cd7c16233fb8be65 Mon Sep 17 00:00:00 2001
+From 19491f9e67e43ae10ae1f71e38730606e2c518a8 Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Wed, 27 Mar 2013 08:49:01 +0400
-Subject: [PATCH 5/7] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 6/8] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
similarity index 98%
rename from sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
rename to sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 4f4e3ca..b6d2434 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
-From 089c9fcca75da19ea13215925fc2cfb83d5dddb4 Mon Sep 17 00:00:00 2001
+From fc013881dd3b551e8fb8a5f6722a359c56c7bf63 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 6/7] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 7/8] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
@@ -88,7 +88,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
-index 977518a..8655c99 100644
+index e84cd74..5789166 100644
 --- a/libcfs/autoconf/lustre-libcfs.m4
 +++ b/libcfs/autoconf/lustre-libcfs.m4
 @@ -639,15 +639,6 @@ LB_LINUX_TRY_COMPILE([
@@ -2105,10 +2105,10 @@ index 4c58181..1d4e2e8 100644
          cfs_module_put(THIS_MODULE);
          return error;
 diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
-index 9eea49e..cb11191 100644
+index 6d5b7af..3211557 100644
 --- a/lustre/llite/statahead.c
 +++ b/lustre/llite/statahead.c
-@@ -998,12 +998,6 @@ static int ll_agl_thread(void *arg)
+@@ -981,12 +981,6 @@ static int ll_agl_thread(void *arg)
          struct l_wait_info        lwi    = { 0 };
          ENTRY;
  
@@ -2121,7 +2121,7 @@ index 9eea49e..cb11191 100644
          CDEBUG(D_READA, "agl thread started: [pid %d] [parent %.*s]\n",
                 cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
  
-@@ -1057,25 +1051,28 @@ static int ll_agl_thread(void *arg)
+@@ -1040,25 +1034,28 @@ static int ll_agl_thread(void *arg)
  
  static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
  {
@@ -2166,7 +2166,7 @@ index 9eea49e..cb11191 100644
  }
  
  static int ll_statahead_thread(void *arg)
-@@ -1096,12 +1093,6 @@ static int ll_statahead_thread(void *arg)
+@@ -1079,12 +1076,6 @@ static int ll_statahead_thread(void *arg)
          struct l_wait_info        lwi    = { 0 };
          ENTRY;
  
@@ -2179,7 +2179,7 @@ index 9eea49e..cb11191 100644
          CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
                 cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
  
-@@ -1565,6 +1556,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
+@@ -1548,6 +1539,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
          struct ptlrpc_thread     *thread;
          struct l_wait_info        lwi   = { 0 };
          int                       rc    = 0;
@@ -2187,7 +2187,7 @@ index 9eea49e..cb11191 100644
          ENTRY;
  
          LASSERT(lli->lli_opendir_pid == cfs_curproc_pid());
-@@ -1709,11 +1701,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
+@@ -1693,11 +1685,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
                 cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
  
          lli->lli_sai = sai;
@@ -2208,10 +2208,10 @@ index 9eea49e..cb11191 100644
                  thread_set_flags(thread, SVC_STOPPED);
                  thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index d67db9d..cf4c46c 100644
+index c9aa7a0..ead4bcf 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
-@@ -1567,13 +1567,6 @@ static int mdc_changelog_send_thread(void *csdata)
+@@ -1566,13 +1566,6 @@ static int mdc_changelog_send_thread(void *csdata)
          CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
                 cs->cs_fp, cs->cs_startrec);
  
@@ -2225,7 +2225,7 @@ index d67db9d..cf4c46c 100644
          OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
          if (cs->cs_buf == NULL)
                  GOTO(out, rc = -ENOMEM);
-@@ -1610,12 +1603,10 @@ out:
+@@ -1609,12 +1602,10 @@ out:
  		llog_cat_close(NULL, llh);
          if (ctxt)
                  llog_ctxt_put(ctxt);
@@ -2242,7 +2242,7 @@ index d67db9d..cf4c46c 100644
  }
  
  static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1635,13 +1626,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
+@@ -1634,13 +1625,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
  	cs->cs_fp = fget(icc->icc_id);
  	cs->cs_flags = icc->icc_flags;
  
@@ -2506,7 +2506,7 @@ index f08fd6e..ce22932 100644
  			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
  			OBD_FREE_PTR(lpi);
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 3736410..8d53834 100644
+index 1e27918..f122d38 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
 @@ -962,7 +962,6 @@ static int osd_scrub_main(void *args)
@@ -2529,7 +2529,7 @@ index 3736410..8d53834 100644
  		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
  		RETURN(rc);
 diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 1836f18..af52b9e 100644
+index 9b3febc..51c2c94 100644
 --- a/lustre/osp/osp_precreate.c
 +++ b/lustre/osp/osp_precreate.c
 @@ -881,15 +881,11 @@ static int osp_precreate_thread(void *_arg)
@@ -2548,7 +2548,7 @@ index 1836f18..af52b9e 100644
  	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
  	if (rc) {
  		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1258,7 +1254,7 @@ out:
+@@ -1260,7 +1256,7 @@ out:
  int osp_init_precreate(struct osp_device *d)
  {
  	struct l_wait_info	 lwi = { 0 };
@@ -2557,7 +2557,7 @@ index 1836f18..af52b9e 100644
  
  	ENTRY;
  
-@@ -1293,10 +1289,11 @@ int osp_init_precreate(struct osp_device *d)
+@@ -1295,10 +1291,11 @@ int osp_init_precreate(struct osp_device *d)
  	/*
  	 * start thread handling precreation and statfs updates
  	 */
@@ -2574,10 +2574,10 @@ index 1836f18..af52b9e 100644
  
  	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
 diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index 219744f..67863a2 100644
+index dfa263e..fddd9b6 100644
 --- a/lustre/osp/osp_sync.c
 +++ b/lustre/osp/osp_sync.c
-@@ -838,7 +838,6 @@ static int osp_sync_thread(void *_arg)
+@@ -827,7 +827,6 @@ static int osp_sync_thread(void *_arg)
  	struct llog_handle	*llh;
  	struct lu_env		 env;
  	int			 rc, count;
@@ -2585,7 +2585,7 @@ index 219744f..67863a2 100644
  
  	ENTRY;
  
-@@ -849,9 +848,6 @@ static int osp_sync_thread(void *_arg)
+@@ -838,9 +837,6 @@ static int osp_sync_thread(void *_arg)
  		RETURN(rc);
  	}
  
@@ -2595,7 +2595,7 @@ index 219744f..67863a2 100644
  	spin_lock(&d->opd_syn_lock);
  	thread->t_flags = SVC_RUNNING;
  	spin_unlock(&d->opd_syn_lock);
-@@ -1055,8 +1051,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
+@@ -1044,8 +1040,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
  	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
  	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
  

diff --git a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
deleted file mode 100644
index 3f63488..0000000
--- a/sys-cluster/lustre/files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
+++ /dev/null
@@ -1,87 +0,0 @@
-From c0de4e9ce93a4c803c17c0ff6dffdebf3fd407b1 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Fri, 22 Mar 2013 14:36:15 +0400
-Subject: [PATCH] LU-2850 kernel: 3.9 hlist_for_each_entry uses 3 args
-
-In 3.9 hlist_for_each_entry use 3 args since commit
-
-commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
-Author: Sasha Levin <sasha.levin@oracle.com>
-Date:   Wed Feb 27 17:06:00 2013 -0800
-
-    hlist: drop the node parameter from iterators
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: I8f38d562607de21771b03575e37cc0498867a570
----
- lustre/autoconf/lustre-core.m4         | 28 ++++++++++++++++++++++++++++
- lustre/include/linux/lustre_compat25.h |  5 +++++
- 2 files changed, 33 insertions(+)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 78dbe99..b8b8ae7 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2272,6 +2272,31 @@ LB_LINUX_TRY_COMPILE([
- 
- 
- #
-+# 3.9 uses hlist_for_each_entry with 3 args
-+# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
-+#
-+AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
-+[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
-+tmp_flags="$EXTRA_KCFLAGS"
-+EXTRA_KCFLAGS="-Werror"
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/list.h>
-+	#include <linux/fs.h>
-+],[
-+	struct inode *inode;
-+	struct dentry *dentry;
-+	hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
-+		continue;
-+	}
-+],[
-+	AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2457,6 +2482,9 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 # 3.8
- 	 LC_HAVE_MM_VMTRUNCATE
- 
-+	 # 3.9
-+	 LC_HAVE_HLIST_FOR_EACH_3ARG
-+
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index d25c168..06a3a50 100644
---- a/lustre/include/linux/lustre_compat25.h
-+++ b/lustre/include/linux/lustre_compat25.h
-@@ -611,8 +611,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
- #define ll_d_hlist_empty(list) hlist_empty(list)
- #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
- #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
-+#ifdef HAVE_HLIST_FOR_EACH_3ARG
-+#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-+	p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
-+#else
- #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
-         hlist_for_each_entry(dentry, p, i_dentry, alias)
-+#endif
- #else
- #define ll_d_hlist_node list_head
- #define ll_d_hlist_empty(list) list_empty(list)
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
similarity index 95%
rename from sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
rename to sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
index 0055d26..35d281d 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0008-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From c38a8fce9d43a0b188360d504adc3cac7ae775c4 Mon Sep 17 00:00:00 2001
+From 77ae599340fc509002f2875257c2e024fb1b44fb Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 7/7] LU-2987 llite: rcu-free inode
+Subject: [PATCH 8/8] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 48ce0cf..0b27062 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -30,15 +30,14 @@ DEPEND="
 RDEPEND="${DEPEND}"
 
 PATCHES=(
-	"${FILESDIR}/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch"
-	"${FILESDIR}/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
-	"${FILESDIR}/0003-LU-2800-llite-introduce-local-getname.patch"
-	"${FILESDIR}/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
-	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
-	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0001-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
+	"${FILESDIR}/0002-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch"
+	"${FILESDIR}/0003-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
+	"${FILESDIR}/0004-LU-2800-llite-introduce-local-getname.patch"
+	"${FILESDIR}/0005-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
+	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
+	"${FILESDIR}/0007-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
+	"${FILESDIR}/0008-LU-2987-llite-rcu-free-inode.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-27  5:05 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-27  5:05 UTC (permalink / raw
  To: gentoo-commits

commit:     ce672f91105a825bb21304934c8e50d1052305ba
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Mar 27 05:05:33 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Mar 27 05:05:33 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=ce672f91

Update patches

Package-Manager: portage-2.2.0_alpha169
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   16 ++++
 ...fs-use-sock_alloc_file-instead-of-sock_m.patch} |    4 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |   12 ++--
 ...03-LU-2800-llite-introduce-local-getname.patch} |    6 +-
 ...d-check-header-files-in-generated-uapi-d.patch} |   10 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |   30 +++----
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   93 +++-----------------
 .../files/0007-LU-2987-llite-rcu-free-inode.patch  |    8 +-
 ...nel-3.9-hlist_for_each_entry-uses-3-args.patch} |    0
 ...ld-fix-unused-uninitilized-virables-error.patch |   30 ------
 sys-cluster/lustre/lustre-9999.ebuild              |    9 +-
 11 files changed, 65 insertions(+), 153 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 2853d73..bce1420 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,22 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  27 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  +files/0003-LU-2800-llite-introduce-local-getname.patch,
+  +files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  +files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  -files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  -files/0004-LU-2800-llite-introduce-local-getname.patch,
+  -files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch,
+  -files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0007-LU-2987-llite-rcu-free-inode.patch, lustre-9999.ebuild:
+  Update patches
+
   22 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch,
   +files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,

diff --git a/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
similarity index 96%
rename from sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
rename to sys-cluster/lustre/files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
index bc345f5..d776d34 100644
--- a/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ b/sys-cluster/lustre/files/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -1,7 +1,7 @@
-From 92aab7a02e1de86cadc46edc81cc9627d3c0887a Mon Sep 17 00:00:00 2001
+From b6d238eff4b7417cb5d5d9882b00c630b6ab2ee1 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 3/8] LU-2800 libcfs: use sock_alloc_file instead of
+Subject: [PATCH 1/7] LU-2800 libcfs: use sock_alloc_file instead of
  sock_map_fd
 
 v2.6.27 added a second argument to sock_map_fd. Earlier versions are

diff --git a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 23969a6..de2178c 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
-From 8153aab75bd9d96af36df0d8eafbe6b3eac45e1c Mon Sep 17 00:00:00 2001
+From 66f494869c183a010a40397221e55c625e5d2e8b Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 2/8] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 2/7] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
@@ -67,10 +67,10 @@ index 53975ab..fa4e4d4 100644
 +#endif
  #endif
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3c773e8..fee7abc 100644
+index 601155c..125bde7 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2213,6 +2213,25 @@ LB_LINUX_TRY_COMPILE([
+@@ -2233,6 +2233,25 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -96,7 +96,7 @@ index 3c773e8..fee7abc 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2391,6 +2410,8 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2414,6 +2433,8 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_DENTRY_OPEN_USE_PATH
  	 LC_HAVE_IOP_ATOMIC_OPEN
  
@@ -134,7 +134,7 @@ index 24a89eb..9575739 100644
                  RETURN(rc);
          }
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 9fc8e51..a7b6d4a 100644
+index fd087a5..d67db9d 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -41,6 +41,7 @@

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0003-LU-2800-llite-introduce-local-getname.patch
similarity index 94%
rename from sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
rename to sys-cluster/lustre/files/0003-LU-2800-llite-introduce-local-getname.patch
index c8e0015..18fd7cf 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0003-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
-From b0dfb2b6916017d659cae52a28f5a86341b4c97f Mon Sep 17 00:00:00 2001
+From f56dde4b75bf7cddf7c6da1ebdda3000b4f4c284 Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 4/8] LU-2800 llite: introduce local getname()
+Subject: [PATCH 3/7] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is
@@ -16,7 +16,7 @@ Change-Id: If44cd9f9d14f26f220d5f0c52e8b804a49d3cf92
  1 file changed, 28 insertions(+), 4 deletions(-)
 
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index a3a514c..3983ef0 100644
+index 493996d..14ea720 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
 @@ -1227,6 +1227,30 @@ out:

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch
similarity index 97%
rename from sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
rename to sys-cluster/lustre/files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 508cebf..83aca65 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
-From b97f4190c2347410737c5b6698773c17f714f5ec Mon Sep 17 00:00:00 2001
+From 9960d414ad44b844306dd5aa82d4e8aabbb68261 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 1/8] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 4/7] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.
@@ -30,7 +30,7 @@ index 8a259bc..6cc5f6d 100644
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index 4c0a581..0873c05 100644
+index ec77262..5c7c227 100644
 --- a/build/autoconf/lustre-build-linux.m4
 +++ b/build/autoconf/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -73,7 +73,7 @@ index 4c0a581..0873c05 100644
  	# This is a clean kernel-source tree, we need to
  	# enable extensive workarounds to get this to build
  	# modules
-@@ -350,7 +352,7 @@ $2
+@@ -312,7 +314,7 @@ $2
  AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
  [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
  rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
@@ -132,7 +132,7 @@ index fd0f6d2..d657399 100644
  	# enable extensive workarounds to get this to build
  	# modules
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 08f5e29..3c773e8 100644
+index 125bde7..5b82ff8 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -319,7 +319,7 @@ AC_DEFUN([LC_BIT_SPINLOCK_H],

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 7be9486..1222d02 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,24 +1,23 @@
-From 6ef5ad16aba6cd3ddaf5e27e9b709a38c3ea3c2b Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 26 Feb 2013 18:09:42 +0800
-Subject: [PATCH 5/8] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+From 043935d6e6e3ac7d988ef809cd7c16233fb8be65 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Wed, 27 Mar 2013 08:49:01 +0400
+Subject: [PATCH 5/7] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
 
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- lustre/autoconf/lustre-core.m4 | 24 ++++++++++++++++++++++++
- lustre/llite/vvp_io.c          | 10 +++++++++-
- 2 files changed, 33 insertions(+), 1 deletion(-)
+ lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
+ lustre/llite/vvp_io.c          |  9 +++++++++
+ 2 files changed, 32 insertions(+)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index fee7abc..3e4bfdc 100644
+index 5b82ff8..d736343 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2232,6 +2232,26 @@ LB_LINUX_TRY_COMPILE([
+@@ -2252,6 +2252,25 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -40,12 +39,11 @@ index fee7abc..3e4bfdc 100644
 +])
 +])
 +
-+
 +#
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2412,6 +2432,10 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2435,6 +2454,10 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.7
   	 LC_HAVE_POSIXACL_USER_NS
@@ -57,10 +55,10 @@ index fee7abc..3e4bfdc 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index db53842..aef8e4b 100644
+index db53842..c261429 100644
 --- a/lustre/llite/vvp_io.c
 +++ b/lustre/llite/vvp_io.c
-@@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
+@@ -362,7 +362,16 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
  	 * Only ll_inode_size_lock is taken at this level.
  	 */
  	ll_inode_size_lock(inode);
@@ -75,10 +73,8 @@ index db53842..aef8e4b 100644
 +	truncate_setsize(inode, size);
 +#endif
  	ll_inode_size_unlock(inode);
--
- 	return result;
- }
  
+ 	return result;
 -- 
 1.8.1.5
 

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 7ff6418..4f4e3ca 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,14 +1,19 @@
-From 728e7f60624f777c2629cda04305eeaea9a59d04 Mon Sep 17 00:00:00 2001
+From 089c9fcca75da19ea13215925fc2cfb83d5dddb4 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 6/8] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 6/7] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
 to create new kernel threads, we should really switch to
 kthread_run() and elimilate daemonize().
 
+Conflicts:
+	lustre/obdclass/llog_cat.c
+	lustre/ptlrpc/recov_thread.c
+
 Signed-off-by: Peng Tao <tao.peng@emc.com>
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
 ---
  libcfs/autoconf/lustre-libcfs.m4           | 28 -----------
@@ -68,20 +73,18 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/mgs/mgs_nids.c                      | 13 ++---
  lustre/obdclass/genops.c                   | 22 +++-----
  lustre/obdclass/llog.c                     |  8 +--
- lustre/obdclass/llog_cat.c                 |  2 +-
  lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
  lustre/osp/osp_precreate.c                 | 15 +++---
  lustre/osp/osp_sync.c                      |  9 ++--
  lustre/ptlrpc/import.c                     | 34 +++++++------
  lustre/ptlrpc/pinger.c                     | 39 +++++++-------
  lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
- lustre/ptlrpc/recov_thread.c               | 40 ++++++++-------
  lustre/ptlrpc/sec_gc.c                     | 12 ++---
  lustre/ptlrpc/service.c                    | 19 ++++---
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 70 files changed, 536 insertions(+), 773 deletions(-)
+ 68 files changed, 514 insertions(+), 753 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
@@ -2205,10 +2208,10 @@ index 9eea49e..cb11191 100644
                  thread_set_flags(thread, SVC_STOPPED);
                  thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index a7b6d4a..7960645 100644
+index d67db9d..cf4c46c 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
-@@ -1553,13 +1553,6 @@ static int mdc_changelog_send_thread(void *csdata)
+@@ -1567,13 +1567,6 @@ static int mdc_changelog_send_thread(void *csdata)
          CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
                 cs->cs_fp, cs->cs_startrec);
  
@@ -2222,7 +2225,7 @@ index a7b6d4a..7960645 100644
          OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
          if (cs->cs_buf == NULL)
                  GOTO(out, rc = -ENOMEM);
-@@ -1596,12 +1589,10 @@ out:
+@@ -1610,12 +1603,10 @@ out:
  		llog_cat_close(NULL, llh);
          if (ctxt)
                  llog_ctxt_put(ctxt);
@@ -2239,7 +2242,7 @@ index a7b6d4a..7960645 100644
  }
  
  static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1621,13 +1612,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
+@@ -1635,13 +1626,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
  	cs->cs_fp = fget(icc->icc_id);
  	cs->cs_flags = icc->icc_flags;
  
@@ -2502,19 +2505,6 @@ index f08fd6e..ce22932 100644
  			CERROR("%s: cannot start thread: rc = %d\n",
  			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
  			OBD_FREE_PTR(lpi);
-diff --git a/lustre/obdclass/llog_cat.c b/lustre/obdclass/llog_cat.c
-index fbf2766..7945237 100644
---- a/lustre/obdclass/llog_cat.c
-+++ b/lustre/obdclass/llog_cat.c
-@@ -647,7 +647,7 @@ int llog_cat_process_thread(void *data)
-         int rc;
-         ENTRY;
- 
--        cfs_daemonize_ctxt("ll_log_process");
-+	unshare_fs_struct();
- 
- 	rc = lu_env_init(&env, LCT_LOCAL);
- 	if (rc)
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
 index 3736410..8d53834 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
@@ -2788,65 +2778,6 @@ index 669b0d7..b6486e0 100644
  #else
          pc->pc_wait_callback =
                  liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
-diff --git a/lustre/ptlrpc/recov_thread.c b/lustre/ptlrpc/recov_thread.c
-index dee77cd..7b5738f 100644
---- a/lustre/ptlrpc/recov_thread.c
-+++ b/lustre/ptlrpc/recov_thread.c
-@@ -513,10 +513,11 @@ EXPORT_SYMBOL(llog_recov_thread_fini);
- static int llog_recov_thread_replay(struct llog_ctxt *ctxt,
-                                     void *cb, void *arg)
- {
--        struct obd_device *obd = ctxt->loc_obd;
--        struct llog_process_cat_args *lpca;
--        int rc;
--        ENTRY;
-+	struct obd_device *obd = ctxt->loc_obd;
-+	struct llog_process_cat_args *lpca;
-+	cfs_task_t *task;
-+	int rc;
-+	ENTRY;
- 
-         if (obd->obd_stopping)
-                 RETURN(-ENODEV);
-@@ -534,22 +535,23 @@ static int llog_recov_thread_replay(struct llog_ctxt *ctxt,
-         /*
-          * This will be balanced in llog_cat_process_thread()
-          */
--        lpca->lpca_ctxt = llog_ctxt_get(ctxt);
--        if (!lpca->lpca_ctxt) {
--                OBD_FREE_PTR(lpca);
--                RETURN(-ENODEV);
--        }
--        rc = cfs_create_thread(llog_cat_process_thread, lpca, CFS_DAEMON_FLAGS);
--        if (rc < 0) {
--                CERROR("Error starting llog_cat_process_thread(): %d\n", rc);
--                OBD_FREE_PTR(lpca);
--                llog_ctxt_put(ctxt);
--        } else {
--                CDEBUG(D_HA, "Started llog_cat_process_thread(): %d\n", rc);
--                rc = 0;
--        }
-+	lpca->lpca_ctxt = llog_ctxt_get(ctxt);
-+	if (!lpca->lpca_ctxt) {
-+		OBD_FREE_PTR(lpca);
-+		RETURN(-ENODEV);
-+	}
-+	task = kthread_run(llog_cat_process_thread, lpca, "ll_log_process");
-+	if (IS_ERR(task)) {
-+		rc = PTR_ERR(task);
-+		CERROR("Error starting llog_cat_process_thread(): %d\n", rc);
-+		OBD_FREE_PTR(lpca);
-+		llog_ctxt_put(ctxt);
-+	} else {
-+		CDEBUG(D_HA, "Started llog_cat_process_thread()\n");
-+		rc = 0;
-+	}
- 
--        RETURN(rc);
-+	RETURN(rc);
- }
- 
- int llog_obd_repl_connect(struct llog_ctxt *ctxt,
 diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
 index 7634d22..595f710 100644
 --- a/lustre/ptlrpc/sec_gc.c

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
index de4c649..0055d26 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
-From acba951ab52918a0b5d247e9dac561f8ae70aa18 Mon Sep 17 00:00:00 2001
+From c38a8fce9d43a0b188360d504adc3cac7ae775c4 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 7/8] LU-2987 llite: rcu-free inode
+Subject: [PATCH 7/7] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.
@@ -14,7 +14,7 @@ Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
  2 files changed, 37 insertions(+), 2 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3e4bfdc..78dbe99 100644
+index d736343..4e90e86 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -1682,6 +1682,26 @@ LB_LINUX_TRY_COMPILE([
@@ -44,7 +44,7 @@ index 3e4bfdc..78dbe99 100644
  # 2.6.38 export blkdev_get_by_dev
  #
  AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
-@@ -2389,6 +2409,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2408,6 +2428,7 @@ AC_DEFUN([LC_PROG_LINUX],
           LC_GENERIC_PERMISSION
           LC_QUOTA_ON_USE_PATH
           LC_DCACHE_LOCK

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
similarity index 100%
rename from sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
rename to sys-cluster/lustre/files/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch

diff --git a/sys-cluster/lustre/files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch b/sys-cluster/lustre/files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch
deleted file mode 100644
index 04603cf..0000000
--- a/sys-cluster/lustre/files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch
+++ /dev/null
@@ -1,30 +0,0 @@
-From f18c8e7cd37a4208fd5c96e149d78c7249edb7e2 Mon Sep 17 00:00:00 2001
-From: James Simmons <uja.ornl@gmail.com>
-Date: Tue, 12 Mar 2013 14:32:19 -0400
-Subject: [PATCH 8/8] LU-2929 build: fix unused/uninitilized virables error
-
-As reported by gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2).
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Signed-off-by: James Simmons <uja.ornl@gmail.com>
-Change-Id: I05aeb88dbd00b6b005ddde543a527339a9d66ce0
----
- lustre/mdt/mdt_handler.c | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index c5293ec..f7ed271 100644
---- a/lustre/mdt/mdt_handler.c
-+++ b/lustre/mdt/mdt_handler.c
-@@ -5703,6 +5703,8 @@ static int mdt_fid2path(struct mdt_thread_info *info,
- 		rc = -EREMOTE;
- 	else if (!mdt_object_exists(obj))
- 		rc = -ENOENT;
-+	else
-+		rc = 0;
- 
- 	if (rc < 0) {
- 		mdt_object_put(info->mti_env, obj);
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 9a93eff..48ce0cf 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -31,15 +31,14 @@ RDEPEND="${DEPEND}"
 
 PATCHES=(
 	"${FILESDIR}/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
-	"${FILESDIR}/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
+	"${FILESDIR}/0001-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch"
 	"${FILESDIR}/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
-	"${FILESDIR}/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch"
-	"${FILESDIR}/0004-LU-2800-llite-introduce-local-getname.patch"
+	"${FILESDIR}/0003-LU-2800-llite-introduce-local-getname.patch"
+	"${FILESDIR}/0004-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
 	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
-	"${FILESDIR}/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch"
-	"${FILESDIR}/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
+	"${FILESDIR}/0008-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-22 11:08 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-22 11:08 UTC (permalink / raw
  To: gentoo-commits

commit:     fb3f7922d5fb5435ac67de669ee5a42792327c71
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 22 11:07:29 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Fri Mar 22 11:07:29 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=fb3f7922

Update patches for 3.9

Package-Manager: portage-2.2.0_alpha169
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   13 +++
 ...ld-check-header-files-in-generated-uapi-d.patch |    2 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |    2 +-
 ...cfs-use-sock_alloc_file-instead-of-sock_m.patch |    2 +-
 ...004-LU-2800-llite-introduce-local-getname.patch |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |    2 +-
 ...ld-Fix-warning-with-gcc-4.6-in-mdt_handle.patch |   38 ---------
 .../files/0007-LU-2987-llite-rcu-free-inode.patch  |    2 +-
 ...ld-fix-unused-uninitilized-virables-error.patch |   30 +++++++
 ...rnel-3.9-hlist_for_each_entry-uses-3-args.patch |   87 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    3 +-
 12 files changed, 139 insertions(+), 46 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 0db92f6..2853d73 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,19 @@
 # $Header: $
 
   22 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch,
+  +files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch,
+  -files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch,
+  files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  files/0004-LU-2800-llite-introduce-local-getname.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0007-LU-2987-llite-rcu-free-inode.patch, lustre-9999.ebuild:
+  Update patches for 3.9
+
+  22 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
   +files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
   +files/0004-LU-2800-llite-introduce-local-getname.patch,

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index e564b12..508cebf 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
 From b97f4190c2347410737c5b6698773c17f714f5ec Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 1/7] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 1/8] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.

diff --git a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
index 21f427e..23969a6 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
+++ b/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -1,7 +1,7 @@
 From 8153aab75bd9d96af36df0d8eafbe6b3eac45e1c Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 20 Mar 2013 17:33:17 -0400
-Subject: [PATCH 2/7] LU-2850 compat: posix_acl_{to,from}_xattr take
+Subject: [PATCH 2/8] LU-2850 compat: posix_acl_{to,from}_xattr take
  user_namespace
 
 Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to

diff --git a/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
index bb5d987..bc345f5 100644
--- a/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
+++ b/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -1,7 +1,7 @@
 From 92aab7a02e1de86cadc46edc81cc9627d3c0887a Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Wed, 13 Feb 2013 02:45:16 -0500
-Subject: [PATCH 3/7] LU-2800 libcfs: use sock_alloc_file instead of
+Subject: [PATCH 3/8] LU-2800 libcfs: use sock_alloc_file instead of
  sock_map_fd
 
 v2.6.27 added a second argument to sock_map_fd. Earlier versions are

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
index 6f84fec..c8e0015 100644
--- a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -1,7 +1,7 @@
 From b0dfb2b6916017d659cae52a28f5a86341b4c97f Mon Sep 17 00:00:00 2001
 From: Jeff Mahoney <jeffm@suse.com>
 Date: Tue, 19 Mar 2013 21:18:32 -0400
-Subject: [PATCH 4/7] LU-2800 llite: introduce local getname()
+Subject: [PATCH 4/8] LU-2800 llite: introduce local getname()
 
 Commit 8e377d15 (v3.7) unexported getname and putname. Although
 getname was re-exported, putname was not. All we really need is

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 418e081..7be9486 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
 From 6ef5ad16aba6cd3ddaf5e27e9b709a38c3ea3c2b Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 18:09:42 +0800
-Subject: [PATCH 5/7] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 5/8] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 0c976e1..7ff6418 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
 From 728e7f60624f777c2629cda04305eeaea9a59d04 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 6/7] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 6/8] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()

diff --git a/sys-cluster/lustre/files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch b/sys-cluster/lustre/files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch
deleted file mode 100644
index f578c62..0000000
--- a/sys-cluster/lustre/files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 8c839b9bbd3fca53d8f5a530d1a2285419cf3071 Mon Sep 17 00:00:00 2001
-From: Alexey Shvetsov <alexxy@gentoo.org>
-Date: Tue, 19 Mar 2013 00:48:48 +0400
-Subject: [PATCH] LU-2984 build: Fix warning with gcc-4.6+ in mdt_handler.c
-MIME-Version: 1.0
-Content-Type: text/plain; charset=UTF-8
-Content-Transfer-Encoding: 8bit
-
-gcc-4.6+ has more stricter check for possible usage of unnitialized
-variables so it will generate error with -Werror like this
-
-lustre/mdt/mdt_handler.c: In function ‘mdt_get_info’:
-lustre/mdt/mdt_handler.c:5508:9: error: ‘rc’ may be used uninitialized
-in this function [-Werror=maybe-uninitialized]
-cc1: all warnings being treated as errors
-
-Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
-Change-Id: Ia330808886b466c4a7d184add56b1ede115c7d0e
----
- lustre/mdt/mdt_handler.c | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
-index 02dcdb8..38b59a6 100644
---- a/lustre/mdt/mdt_handler.c
-+++ b/lustre/mdt/mdt_handler.c
-@@ -5505,7 +5505,7 @@ static int mdt_fid2path(const struct lu_env *env, struct mdt_device *mdt,
- {
- 	struct mdt_object *obj;
- 	struct obd_device *obd = mdt2obd_dev(mdt);
--	int    rc;
-+	int    rc = 0;
- 	ENTRY;
- 
- 	CDEBUG(D_IOCTL, "path get "DFID" from "LPU64" #%d\n",
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
index a819726..de4c649 100644
--- a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -1,7 +1,7 @@
 From acba951ab52918a0b5d247e9dac561f8ae70aa18 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 19 Mar 2013 14:04:47 +0800
-Subject: [PATCH 7/7] LU-2987 llite: rcu-free inode
+Subject: [PATCH 7/8] LU-2987 llite: rcu-free inode
 
 Since 2.6.38, inode.i_rcu was added and file system .destory_inode
 should rcu-free inodes.

diff --git a/sys-cluster/lustre/files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch b/sys-cluster/lustre/files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch
new file mode 100644
index 0000000..04603cf
--- /dev/null
+++ b/sys-cluster/lustre/files/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch
@@ -0,0 +1,30 @@
+From f18c8e7cd37a4208fd5c96e149d78c7249edb7e2 Mon Sep 17 00:00:00 2001
+From: James Simmons <uja.ornl@gmail.com>
+Date: Tue, 12 Mar 2013 14:32:19 -0400
+Subject: [PATCH 8/8] LU-2929 build: fix unused/uninitilized virables error
+
+As reported by gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2).
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Signed-off-by: James Simmons <uja.ornl@gmail.com>
+Change-Id: I05aeb88dbd00b6b005ddde543a527339a9d66ce0
+---
+ lustre/mdt/mdt_handler.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
+index c5293ec..f7ed271 100644
+--- a/lustre/mdt/mdt_handler.c
++++ b/lustre/mdt/mdt_handler.c
+@@ -5703,6 +5703,8 @@ static int mdt_fid2path(struct mdt_thread_info *info,
+ 		rc = -EREMOTE;
+ 	else if (!mdt_object_exists(obj))
+ 		rc = -ENOENT;
++	else
++		rc = 0;
+ 
+ 	if (rc < 0) {
+ 		mdt_object_put(info->mti_env, obj);
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
new file mode 100644
index 0000000..3f63488
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch
@@ -0,0 +1,87 @@
+From c0de4e9ce93a4c803c17c0ff6dffdebf3fd407b1 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Fri, 22 Mar 2013 14:36:15 +0400
+Subject: [PATCH] LU-2850 kernel: 3.9 hlist_for_each_entry uses 3 args
+
+In 3.9 hlist_for_each_entry use 3 args since commit
+
+commit b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
+Author: Sasha Levin <sasha.levin@oracle.com>
+Date:   Wed Feb 27 17:06:00 2013 -0800
+
+    hlist: drop the node parameter from iterators
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I8f38d562607de21771b03575e37cc0498867a570
+---
+ lustre/autoconf/lustre-core.m4         | 28 ++++++++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  5 +++++
+ 2 files changed, 33 insertions(+)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 78dbe99..b8b8ae7 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2272,6 +2272,31 @@ LB_LINUX_TRY_COMPILE([
+ 
+ 
+ #
++# 3.9 uses hlist_for_each_entry with 3 args
++# b67bfe0d42cac56c512dd5da4b1b347a23f4b70a
++#
++AC_DEFUN([LC_HAVE_HLIST_FOR_EACH_3ARG],
++[AC_MSG_CHECKING([if hlist_for_each_entry has 3 args])
++tmp_flags="$EXTRA_KCFLAGS"
++EXTRA_KCFLAGS="-Werror"
++LB_LINUX_TRY_COMPILE([
++	#include <linux/list.h>
++	#include <linux/fs.h>
++],[
++	struct inode *inode;
++	struct dentry *dentry;
++	hlist_for_each_entry(dentry, &inode->i_dentry, d_alias) {
++		continue;
++	}
++],[
++	AC_DEFINE(HAVE_HLIST_FOR_EACH_3ARG, 1, [3 args])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2457,6 +2482,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 # 3.8
+ 	 LC_HAVE_MM_VMTRUNCATE
+ 
++	 # 3.9
++	 LC_HAVE_HLIST_FOR_EACH_3ARG
++
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+ 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index d25c168..06a3a50 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -611,8 +611,13 @@ static inline int ll_quota_off(struct super_block *sb, int off, int remount)
+ #define ll_d_hlist_empty(list) hlist_empty(list)
+ #define ll_d_hlist_entry(ptr, type, name) hlist_entry(ptr.first, type, name)
+ #define ll_d_hlist_for_each(tmp, i_dentry) hlist_for_each(tmp, i_dentry)
++#ifdef HAVE_HLIST_FOR_EACH_3ARG
++#define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
++	p = NULL; hlist_for_each_entry(dentry, i_dentry, alias)
++#else
+ #define ll_d_hlist_for_each_entry(dentry, p, i_dentry, alias) \
+         hlist_for_each_entry(dentry, p, i_dentry, alias)
++#endif
+ #else
+ #define ll_d_hlist_node list_head
+ #define ll_d_hlist_empty(list) list_empty(list)
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 417f6ff..9a93eff 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -37,8 +37,9 @@ PATCHES=(
 	"${FILESDIR}/0004-LU-2800-llite-introduce-local-getname.patch"
 	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
-	"${FILESDIR}/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch"
 	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
+	"${FILESDIR}/0008-LU-2929-build-fix-unused-uninitilized-virables-error.patch"
+	"${FILESDIR}/0009-LU-2850-kernel-3.9-hlist_for_each_entry-uses-3-args.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-22 10:27 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-22 10:27 UTC (permalink / raw
  To: gentoo-commits

commit:     6fcb6c9ac1f17e7c49e21d847a941eb919ed5e37
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Fri Mar 22 10:26:50 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Fri Mar 22 10:26:50 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=6fcb6c9a

Update patches for 3.8

Package-Manager: portage-2.2.0_alpha168
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   14 ++
 ...ld-check-header-files-in-generated-uapi-d.patch |    4 +-
 ...pat-posix_acl_-to-from-_xattr-take-user_n.patch |  159 ++++++++++++++
 ...-kernel-3.7-kernel-posix-acl-needs-userns.patch |  128 -----------
 ...cfs-use-sock_alloc_file-instead-of-sock_m.patch |  124 +++++++++++
 ...3-LU-2850-kernel-3.7-uneports-sock_map_fd.patch |  121 ----------
 ...004-LU-2800-llite-introduce-local-getname.patch |   91 ++++++++
 ...rnel-3.7-get-putname-uses-struct-filename.patch |  231 --------------------
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |   20 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |  102 +++++++--
 .../files/0007-LU-2987-llite-rcu-free-inode.patch  |   89 ++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    7 +-
 12 files changed, 572 insertions(+), 518 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 897cf83..0db92f6 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,20 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  22 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch,
+  +files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch,
+  +files/0004-LU-2800-llite-introduce-local-getname.patch,
+  +files/0007-LU-2987-llite-rcu-free-inode.patch,
+  -files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,
+  -files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch,
+  -files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch,
+  files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  lustre-9999.ebuild:
+  Update patches for 3.8
+
   19 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   $PWD dont needed in automake invocation
 

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 66c5f1d..e564b12 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
-From 44ddcf216f650c119d8b376ec70a9163cbb47506 Mon Sep 17 00:00:00 2001
+From b97f4190c2347410737c5b6698773c17f714f5ec Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 1/6] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 1/7] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.

diff --git a/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch b/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
new file mode 100644
index 0000000..21f427e
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch
@@ -0,0 +1,159 @@
+From 8153aab75bd9d96af36df0d8eafbe6b3eac45e1c Mon Sep 17 00:00:00 2001
+From: Jeff Mahoney <jeffm@suse.com>
+Date: Wed, 20 Mar 2013 17:33:17 -0400
+Subject: [PATCH 2/7] LU-2850 compat: posix_acl_{to,from}_xattr take
+ user_namespace
+
+Commit 5f3a4a28 (v3.7) added a struct user_namespace argument to
+posix_acl_{to,from}_xattr. Pretty much every caller just uses
+&init_user_ns. We mask it off in user mode so we don't need to
+create a fake structure only to ignore it.
+
+Signed-off-by: Jeff Mahoney <jeffm@suse.com>
+Change-Id: I558a06941b364f241fd4423720957beeaf1d3cea
+---
+ libcfs/include/libcfs/darwin/darwin-fs.h |  6 ++++--
+ libcfs/include/libcfs/linux/linux-fs.h   | 10 ++++++++++
+ lustre/autoconf/lustre-core.m4           | 21 +++++++++++++++++++++
+ lustre/include/liblustre.h               |  4 ++++
+ lustre/llite/xattr.c                     |  2 +-
+ lustre/mdc/mdc_request.c                 |  3 ++-
+ 6 files changed, 42 insertions(+), 4 deletions(-)
+
+diff --git a/libcfs/include/libcfs/darwin/darwin-fs.h b/libcfs/include/libcfs/darwin/darwin-fs.h
+index 998823b..9f71d6a 100644
+--- a/libcfs/include/libcfs/darwin/darwin-fs.h
++++ b/libcfs/include/libcfs/darwin/darwin-fs.h
+@@ -171,11 +171,13 @@ struct posix_acl {
+ };
+ 
+ struct posix_acl *posix_acl_alloc(int count, int flags);
+-static inline struct posix_acl *posix_acl_from_xattr(const void *value, 
++static inline struct posix_acl *posix_acl_from_xattr(const void *value,
+                                                      size_t size)
+-{ 
++{
+         return posix_acl_alloc(0, 0);
+ }
++#define posix_acl_from_xattr(a,b,c) posix_acl_from_xattr(b,c)
++
+ static inline void posix_acl_release(struct posix_acl *acl) {};
+ static inline int posix_acl_valid(const struct posix_acl *acl) { return 0; }
+ static inline struct posix_acl * posix_acl_dup(struct posix_acl *acl) 
+diff --git a/libcfs/include/libcfs/linux/linux-fs.h b/libcfs/include/libcfs/linux/linux-fs.h
+index 53975ab..fa4e4d4 100644
+--- a/libcfs/include/libcfs/linux/linux-fs.h
++++ b/libcfs/include/libcfs/linux/linux-fs.h
+@@ -53,6 +53,7 @@
+ #include <linux/stat.h>
+ #include <linux/mount.h>
+ #include <linux/backing-dev.h>
++#include <linux/posix_acl_xattr.h>
+ 
+ #define filp_size(f)					\
+ 	(i_size_read((f)->f_dentry->d_inode))
+@@ -102,4 +103,13 @@ ssize_t filp_user_write(struct file *filp, const void *buf, size_t count,
+ #define DTTOIF(dirtype)		((dirtype) << IFSHIFT)
+ #endif
+ 
++#ifndef HAVE_POSIXACL_USER_NS
++/*
++ * Mask out &init_user_ns so we don't jump
++ * through hoops to define it somehow only
++ * to have it ignored anyway.
++ */
++#define posix_acl_from_xattr(a,b,c)	posix_acl_from_xattr(b,c)
++#define posix_acl_to_xattr(a,b,c,d)	posix_acl_to_xattr(b,c,d)
++#endif
+ #endif
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 3c773e8..fee7abc 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2213,6 +2213,25 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.7 posix_acl_{to,from}_xattr take struct user_namespace
++#
++AC_DEFUN([LC_HAVE_POSIXACL_USER_NS],
++[AC_MSG_CHECKING([if posix_acl_to_xattr takes struct user_namespace])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++	#include <linux/posix_acl_xattr.h>
++],[
++	posix_acl_to_xattr((struct user_namespace *)NULL, NULL, NULL, 0);
++],[
++	AC_DEFINE(HAVE_POSIXACL_USER_NS, 1,
++		  [posix_acl_to_xattr takes struct user_namespace])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2391,6 +2410,8 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_DENTRY_OPEN_USE_PATH
+ 	 LC_HAVE_IOP_ATOMIC_OPEN
+ 
++	 # 3.7
++ 	 LC_HAVE_POSIXACL_USER_NS
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+ 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
+index 14f3ef6..eb62458 100644
+--- a/lustre/include/liblustre.h
++++ b/lustre/include/liblustre.h
+@@ -458,6 +458,10 @@ struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
+         return NULL;
+ }
+ 
++/* The kernel version takes 3 arguments, so strip that off first. */
++#define posix_acl_from_xattr(a,b,c)	posix_acl_from_xattr(b,c)
++#define posix_acl_to_xattr(a,b,c)	posix_acl_to_xattr(b,c)
++
+ static inline
+ int posix_acl_valid(const struct posix_acl *acl)
+ {
+diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
+index 24a89eb..9575739 100644
+--- a/lustre/llite/xattr.c
++++ b/lustre/llite/xattr.c
+@@ -345,7 +345,7 @@ int ll_getxattr_common(struct inode *inode, const char *name,
+                 if (!acl)
+                         RETURN(-ENODATA);
+ 
+-                rc = posix_acl_to_xattr(acl, buffer, size);
++                rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
+                 posix_acl_release(acl);
+                 RETURN(rc);
+         }
+diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
+index 9fc8e51..a7b6d4a 100644
+--- a/lustre/mdc/mdc_request.c
++++ b/lustre/mdc/mdc_request.c
+@@ -41,6 +41,7 @@
+ # include <linux/pagemap.h>
+ # include <linux/miscdevice.h>
+ # include <linux/init.h>
++# include <linux/utsname.h>
+ #else
+ # include <liblustre.h>
+ #endif
+@@ -466,7 +467,7 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
+         if (!buf)
+                 RETURN(-EPROTO);
+ 
+-        acl = posix_acl_from_xattr(buf, body->aclsize);
++        acl = posix_acl_from_xattr(&init_user_ns, buf, body->aclsize);
+         if (IS_ERR(acl)) {
+                 rc = PTR_ERR(acl);
+                 CERROR("convert xattr to acl: %d\n", rc);
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
deleted file mode 100644
index 8daaa4f..0000000
--- a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
+++ /dev/null
@@ -1,128 +0,0 @@
-From a1552cbe3d0ea36cdc3959db91a8edb19589cf96 Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Mon, 11 Mar 2013 11:17:12 +0800
-Subject: [PATCH 2/6] LU-2850 kernel: 3.7 kernel posix acl needs userns
-
-With upstream commit 5f3a4a28, kernel posix acl adds support
-to user namespace.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: I7d82c51c482daae8a7dbb526b8d72eea2bcf0650
----
- lustre/autoconf/lustre-core.m4 | 26 ++++++++++++++++++++++++++
- lustre/include/liblustre.h     |  9 ++++++++-
- lustre/llite/xattr.c           |  6 +++++-
- lustre/mdc/mdc_request.c       |  6 +++++-
- 4 files changed, 44 insertions(+), 3 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3c773e8..38d26a3 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -328,6 +328,7 @@ AC_TRY_RUN([
-         #define __LINUX_POSIX_ACL_H
- 
-         #ifdef CONFIG_FS_POSIX_ACL
-+	struct user_namespace;
-         # include <linux/posix_acl_xattr.h>
-         #endif
- 
-@@ -2213,6 +2214,28 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.7 posix acl supports user ns
-+# see upstream commit 5f3a4a28
-+#
-+AC_DEFUN([LC_HAVE_POSIX_ACL_NAMESPACE],
-+[AC_MSG_CHECKING([if posix acl supports user namespace])
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+	#include <linux/posix_acl_xattr.h>
-+	#include <linux/user_namespace.h>
-+],[
-+	struct user_namespace *user_ns;
-+	posix_acl_from_xattr(user_ns, NULL, 0);
-+],[
-+	AC_DEFINE(HAVE_POSIX_ACL_NAMESPACE, 1,
-+		  [have posix acl supports user namespace])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2391,6 +2414,9 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_DENTRY_OPEN_USE_PATH
- 	 LC_HAVE_IOP_ATOMIC_OPEN
- 
-+	 # 3.7
-+	 LC_HAVE_POSIX_ACL_NAMESPACE
-+
- 	 #
- 	 if test x$enable_server = xyes ; then
- 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
-diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index 14f3ef6..50e5f35 100644
---- a/lustre/include/liblustre.h
-+++ b/lustre/include/liblustre.h
-@@ -453,10 +453,17 @@ static inline size_t posix_acl_xattr_size(int count)
- }
- 
- static inline
--struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
-+struct posix_acl *posix_acl_from_xattr(const void *value, size_t size)
- {
-         return NULL;
- }
-+#ifdef HAVE_POSIX_ACL_NAMESPACE
-+/*
-+ * Mask out &init_user_ns so we don't jump through hoops to define it somehow
-+ * only to have it ignored anyway.
-+ */
-+#define posix_acl_from_xattr(a,b,c)    posix_acl_from_xattr(b,c)
-+#endif
- 
- static inline
- int posix_acl_valid(const struct posix_acl *acl)
-diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index 24a89eb..d0349e2 100644
---- a/lustre/llite/xattr.c
-+++ b/lustre/llite/xattr.c
-@@ -345,7 +345,11 @@ int ll_getxattr_common(struct inode *inode, const char *name,
-                 if (!acl)
-                         RETURN(-ENODATA);
- 
--                rc = posix_acl_to_xattr(acl, buffer, size);
-+#ifdef HAVE_POSIX_ACL_NAMESPACE
-+		rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
-+#else
-+		rc = posix_acl_to_xattr(acl, buffer, size);
-+#endif
-                 posix_acl_release(acl);
-                 RETURN(rc);
-         }
-diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 772502b..608813c 100644
---- a/lustre/mdc/mdc_request.c
-+++ b/lustre/mdc/mdc_request.c
-@@ -466,7 +466,11 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
-         if (!buf)
-                 RETURN(-EPROTO);
- 
--        acl = posix_acl_from_xattr(buf, body->aclsize);
-+#ifdef HAVE_POSIX_ACL_NAMESPACE
-+	acl = posix_acl_from_xattr(&init_user_ns, buf, body->aclsize);
-+#else
-+	acl = posix_acl_from_xattr(buf, body->aclsize);
-+#endif
-         if (IS_ERR(acl)) {
-                 rc = PTR_ERR(acl);
-                 CERROR("convert xattr to acl: %d\n", rc);
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch b/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
new file mode 100644
index 0000000..bb5d987
--- /dev/null
+++ b/sys-cluster/lustre/files/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch
@@ -0,0 +1,124 @@
+From 92aab7a02e1de86cadc46edc81cc9627d3c0887a Mon Sep 17 00:00:00 2001
+From: Jeff Mahoney <jeffm@suse.com>
+Date: Wed, 13 Feb 2013 02:45:16 -0500
+Subject: [PATCH 3/7] LU-2800 libcfs: use sock_alloc_file instead of
+ sock_map_fd
+
+v2.6.27 added a second argument to sock_map_fd. Earlier versions are
+out of scope and we can remove the test for the number of arguments.
+
+Commit 56b31d1c (v3.7) made sock_map_fd() static and exported
+sock_alloc_file() instead. For our purposes, we didn't want to expose
+the file in the descriptor table anyway.
+
+Signed-off-by: Jeff Mahoney <jeffm@suse.com>
+Change-Id: I4e12da8c102b5d682db9658187330ae601b00a21
+---
+ libcfs/autoconf/lustre-libcfs.m4  | 18 ++++++++++--------
+ libcfs/libcfs/linux/linux-tcpip.c | 17 ++++++++++++-----
+ 2 files changed, 22 insertions(+), 13 deletions(-)
+
+diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
+index e661f7d..977518a 100644
+--- a/libcfs/autoconf/lustre-libcfs.m4
++++ b/libcfs/autoconf/lustre-libcfs.m4
+@@ -500,18 +500,19 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ # 2.6.27 have second argument to sock_map_fd
+-AC_DEFUN([LIBCFS_SOCK_MAP_FD_2ARG],
+-[AC_MSG_CHECKING([sock_map_fd have second argument])
++# 3.7 (56b31d1c) un-exported sock_map_fd in favor of sock_alloc_file
++AC_DEFUN([LIBCFS_SOCK_ALLOC_FILE],
++[AC_MSG_CHECKING([sock_alloc_file is exported])
+ LB_LINUX_TRY_COMPILE([
+ 	#include <linux/net.h>
+ ],[
+-        sock_map_fd(NULL, 0);
++	sock_alloc_file(NULL, 0);
+ ],[
+-        AC_MSG_RESULT(yes)
+-        AC_DEFINE(HAVE_SOCK_MAP_FD_2ARG, 1,
+-                  [sock_map_fd have second argument])
++	AC_MSG_RESULT(yes)
++	AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
++		  [sock_alloc_file is exported])
+ ],[
+-        AC_MSG_RESULT(NO)
++	AC_MSG_RESULT(NO)
+ ])
+ ])
+ 
+@@ -824,7 +825,6 @@ LIBCFS_CPU_TOPOLOGY
+ LIBCFS_STRUCT_SHASH_ALG
+ # 2.6.30
+ LIBCFS_FUNC_UNSHARE_FS_STRUCT
+-LIBCFS_SOCK_MAP_FD_2ARG
+ # 2.6.31
+ LIBCFS_HAVE_SET_MEMS_ALLOWED
+ # 2.6.32
+@@ -840,6 +840,8 @@ LIBCFS_ADD_WAIT_QUEUE_EXCLUSIVE
+ LC_SK_SLEEP
+ # 2.6.40 fc15
+ LC_SHRINK_CONTROL
++# 3.7
++LIBCFS_SOCK_ALLOC_FILE
+ ])
+ 
+ #
+diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
+index 0a31b55..b83ed84 100644
+--- a/libcfs/libcfs/linux/linux-tcpip.c
++++ b/libcfs/libcfs/linux/linux-tcpip.c
+@@ -49,7 +49,9 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+ {
+         mm_segment_t   oldmm = get_fs();
+         struct socket  *sock;
++#ifndef HAVE_SOCK_ALLOC_FILE
+         int             fd;
++#endif
+         int             rc;
+         struct file     *sock_filp;
+ 
+@@ -59,11 +61,8 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+                 return rc;
+         }
+ 
+-#ifdef HAVE_SOCK_MAP_FD_2ARG
++#ifndef HAVE_SOCK_ALLOC_FILE
+         fd = sock_map_fd(sock,0);
+-#else
+-        fd = sock_map_fd(sock);
+-#endif
+         if (fd < 0) {
+                 rc = fd;
+                 sock_release(sock);
+@@ -75,7 +74,13 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+                 rc = -ENOMEM;
+                 goto out_fd;
+         }
+-
++#else
++	sock_filp = sock_alloc_file(sock, 0, NULL);
++	if (IS_ERR(sock_filp)) {
++		rc = PTR_ERR(sock_filp);
++		goto out;
++	}
++#endif
+ 	set_fs(KERNEL_DS);
+ 	if (sock_filp->f_op->unlocked_ioctl)
+ 		rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg);
+@@ -83,8 +88,10 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+ 
+         fput(sock_filp);
+ 
++#ifndef HAVE_SOCK_ALLOC_FILE
+  out_fd:
+         sys_close(fd);
++#endif
+  out:
+         return rc;
+ }
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
deleted file mode 100644
index e2f7c17..0000000
--- a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
+++ /dev/null
@@ -1,121 +0,0 @@
-From 44034bc1deb0f1320693b605ab5c7c240f70df01 Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 26 Feb 2013 17:09:15 +0800
-Subject: [PATCH 3/6] LU-2850 kernel: 3.7 uneports sock_map_fd
-
-And exports sock_alloc_file. We should use sock_alloc_file instead.
-Besides, there is no need to mess with fd table.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: Iec3c8bc0d8fcb9d8f821dd9f0a82445e1e1096ff
----
- libcfs/libcfs/linux/linux-tcpip.c | 39 ++++++++++++++++++++++++++++++++++++++-
- lustre/autoconf/lustre-core.m4    | 20 ++++++++++++++++++++
- 2 files changed, 58 insertions(+), 1 deletion(-)
-
-diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
-index 0a31b55..c576cdf 100644
---- a/libcfs/libcfs/linux/linux-tcpip.c
-+++ b/libcfs/libcfs/linux/linux-tcpip.c
-@@ -41,6 +41,40 @@
- #include <linux/if.h>
- #include <linux/in.h>
- #include <linux/file.h>
-+#ifdef HAVE_SOCK_ALLOC_FILE
-+int
-+libcfs_sock_ioctl(int cmd, unsigned long arg)
-+{
-+	mm_segment_t   oldmm = get_fs();
-+	struct socket  *sock;
-+	int             rc;
-+	struct file     *sock_filp;
-+
-+	rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock);
-+	if (rc != 0) {
-+		CERROR("Can't create socket: %d\n", rc);
-+		return rc;
-+	}
-+
-+	sock_filp = sock_alloc_file(sock, 0, NULL);
-+	if (IS_ERR(sock_filp)) {
-+		rc = PTR_ERR(sock_filp);
-+		sock_release(sock);
-+		goto out;
-+	}
-+	get_file(sock_filp);
-+
-+	set_fs(KERNEL_DS);
-+	if (sock_filp->f_op->unlocked_ioctl)
-+		rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg);
-+	set_fs(oldmm);
-+
-+	fput(sock_filp);
-+out:
-+	return rc;
-+}
-+#else /* !HAVE_SOCK_ALLOC_FILE */
-+
- /* For sys_open & sys_close */
- #include <linux/syscalls.h>
- 
-@@ -61,8 +95,10 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
- 
- #ifdef HAVE_SOCK_MAP_FD_2ARG
-         fd = sock_map_fd(sock,0);
--#else
-+#elif defined(HAVE_SOCK_MAP_FD)
-         fd = sock_map_fd(sock);
-+#else
-+#error "Cannot find either sock_map_fd nor sock_alloc_file!"
- #endif
-         if (fd < 0) {
-                 rc = fd;
-@@ -88,6 +124,7 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
-  out:
-         return rc;
- }
-+#endif /* !HAVE_SOCK_ALLOC_FILE */
- 
- int
- libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask)
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 38d26a3..579ea17 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2236,6 +2236,24 @@ LB_LINUX_TRY_COMPILE([
- ])
- 
- #
-+# 3.7 unexports sock_map_fd() and exports sock_alloc_file
-+# see upstream commit 56b31d1
-+#
-+AC_DEFUN([LC_HAVE_SOCK_MAP_FD],
-+	[LB_CHECK_SYMBOL_EXPORT([sock_map_fd],
-+	[net/socket.c],
-+        [AC_DEFINE(HAVE_SOCK_MAP_FD, 1,
-+		   [sock_map_fd is exported by the kernel])])
-+])
-+
-+AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
-+	[LB_CHECK_SYMBOL_EXPORT([sock_alloc_file],
-+	[net/socket.c],
-+        [AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
-+		   [sock_alloc_file is exported by the kernel])])
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2416,6 +2434,8 @@ AC_DEFUN([LC_PROG_LINUX],
- 
- 	 # 3.7
- 	 LC_HAVE_POSIX_ACL_NAMESPACE
-+	 LC_HAVE_SOCK_MAP_FD
-+	 LC_HAVE_SOCK_ALLOC_FILE
- 
- 	 #
- 	 if test x$enable_server = xyes ; then
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
new file mode 100644
index 0000000..6f84fec
--- /dev/null
+++ b/sys-cluster/lustre/files/0004-LU-2800-llite-introduce-local-getname.patch
@@ -0,0 +1,91 @@
+From b0dfb2b6916017d659cae52a28f5a86341b4c97f Mon Sep 17 00:00:00 2001
+From: Jeff Mahoney <jeffm@suse.com>
+Date: Tue, 19 Mar 2013 21:18:32 -0400
+Subject: [PATCH 4/7] LU-2800 llite: introduce local getname()
+
+Commit 8e377d15 (v3.7) unexported getname and putname. Although
+getname was re-exported, putname was not. All we really need is
+something to to allocate a buffer and copy it from userspace so
+let's just use our own version. The down size is that we lose
+the audit support in the original getname.
+
+Signed-off-by: Jeff Mahoney <jeffm@suse.com>
+Change-Id: If44cd9f9d14f26f220d5f0c52e8b804a49d3cf92
+---
+ lustre/llite/dir.c | 32 ++++++++++++++++++++++++++++----
+ 1 file changed, 28 insertions(+), 4 deletions(-)
+
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index a3a514c..3983ef0 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -1227,6 +1227,30 @@ out:
+         RETURN(rc);
+ }
+ 
++static char *
++ll_getname(const char __user *filename)
++{
++	int ret = 0, len;
++	char *tmp = __getname();
++
++	if (!tmp)
++		return ERR_PTR(-ENOMEM);
++
++	len = strncpy_from_user(tmp, filename, PATH_MAX);
++	if (len == 0)
++		ret = -ENOENT;
++	else if (len > PATH_MAX)
++		ret = -ENAMETOOLONG;
++
++	if (ret) {
++		__putname(tmp);
++		tmp =  ERR_PTR(ret);
++	}
++	return tmp;
++}
++
++#define ll_putname(filename) __putname(filename)
++
+ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
+ {
+         struct inode *inode = file->f_dentry->d_inode;
+@@ -1429,7 +1453,7 @@ free_lmv:
+ 		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
+ 			return -ENOTSUPP;
+ 
+-		filename = getname((const char *)arg);
++		filename = ll_getname((const char *)arg);
+ 		if (IS_ERR(filename))
+ 			RETURN(PTR_ERR(filename));
+ 
+@@ -1440,7 +1464,7 @@ free_lmv:
+ 		rc = ll_rmdir_entry(inode, filename, namelen);
+ out_rmdir:
+                 if (filename)
+-                        putname(filename);
++                        ll_putname(filename);
+ 		RETURN(rc);
+ 	}
+ 	case LL_IOC_LOV_SWAP_LAYOUTS:
+@@ -1460,7 +1484,7 @@ out_rmdir:
+ 
+                 if (cmd == IOC_MDC_GETFILEINFO ||
+                     cmd == IOC_MDC_GETFILESTRIPE) {
+-                        filename = getname((const char *)arg);
++                        filename = ll_getname((const char *)arg);
+                         if (IS_ERR(filename))
+                                 RETURN(PTR_ERR(filename));
+ 
+@@ -1527,7 +1551,7 @@ out_rmdir:
+         out_req:
+                 ptlrpc_req_finished(request);
+                 if (filename)
+-                        putname(filename);
++                        ll_putname(filename);
+                 return rc;
+         }
+         case IOC_LOV_GETINFO: {
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
deleted file mode 100644
index dae020b..0000000
--- a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
+++ /dev/null
@@ -1,231 +0,0 @@
-From eb13282efadf49a467e151d1d9c6ede64ab0b367 Mon Sep 17 00:00:00 2001
-From: Peng Tao <tao.peng@emc.com>
-Date: Wed, 27 Feb 2013 17:51:46 +0800
-Subject: [PATCH 4/6] LU-2850 kernel: 3.7 get/putname uses struct filename
-
-3.7 vfs introduces struct filename and changes getname/putname
-parameter to use it.
-
-Signed-off-by: Peng Tao <tao.peng@emc.com>
-Change-Id: Ifc3cfa54220b83b8de5aebfa5464c6efa5525599
----
- lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++
- lustre/include/linux/lustre_compat25.h | 42 ++++++++++++++++++++++++++++
- lustre/llite/dir.c                     | 50 +++++++++++++++++-----------------
- lustre/llite/llite_internal.h          |  2 +-
- lustre/llite/namei.c                   |  2 +-
- 5 files changed, 95 insertions(+), 27 deletions(-)
-
-diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 579ea17..9a7a458 100644
---- a/lustre/autoconf/lustre-core.m4
-+++ b/lustre/autoconf/lustre-core.m4
-@@ -2254,6 +2254,31 @@ AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
- ])
- 
- #
-+# 3.7 vfs introduces struct filename and changes getname/putname
-+# parameter to use it
-+# see kernel commit adb5c247 and 91a27b2a
-+#
-+AC_DEFUN([LC_HAVE_STRUCT_FILENAME],
-+[AC_MSG_CHECKING([if vfs has struct filename])
-+tmp_flags="$EXTRA_KCFLAGS"
-+EXTRA_KCFLAGS="-Werror"
-+LB_LINUX_TRY_COMPILE([
-+	#include <linux/fs.h>
-+],[
-+	struct filename *filename;
-+	filename = getname(NULL);
-+	putname(filename);
-+],[
-+	AC_DEFINE(HAVE_STRUCT_FILENAME, 1,
-+		  [vfs has struct filename])
-+	AC_MSG_RESULT([yes])
-+],[
-+	AC_MSG_RESULT([no])
-+])
-+EXTRA_KCFLAGS="$tmp_flags"
-+])
-+
-+#
- # LC_PROG_LINUX
- #
- # Lustre linux kernel checks
-@@ -2436,6 +2461,7 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_HAVE_POSIX_ACL_NAMESPACE
- 	 LC_HAVE_SOCK_MAP_FD
- 	 LC_HAVE_SOCK_ALLOC_FILE
-+	 LC_HAVE_STRUCT_FILENAME
- 
- 	 #
- 	 if test x$enable_server = xyes ; then
-diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index d25c168..dcd4a4f 100644
---- a/lustre/include/linux/lustre_compat25.h
-+++ b/lustre/include/linux/lustre_compat25.h
-@@ -750,4 +750,46 @@ static inline struct dentry *d_make_root(struct inode *root)
- }
- #endif
- 
-+#ifndef HAVE_STRUCT_FILENAME
-+struct filename {
-+	char	*name;
-+};
-+static inline struct filename *ll_getname(const char __user *name)
-+{
-+	struct filename *filename;
-+
-+	filename = kmalloc(sizeof(struct filename), GFP_KERNEL);
-+	if (filename == NULL)
-+		return ERR_PTR(-ENOMEM);
-+
-+	filename->name = getname(name);
-+	if (unlikely(IS_ERR(filename->name))) {
-+		int err = PTR_ERR(filename->name);
-+		kfree(filename);
-+		return ERR_PTR(err);
-+	} else {
-+		return filename;
-+	}
-+}
-+static inline void ll_putname(struct filename *filename)
-+{
-+	putname(filename->name);
-+	kfree(filename);
-+}
-+#else
-+static inline struct filename *ll_getname(const char __user *name)
-+{
-+	return getname(name);
-+}
-+static inline void ll_putname(struct filename *name)
-+{
-+	if (name->separate) {
-+		__putname(name->name);
-+		kfree(name);
-+	} else {
-+		__putname(name);
-+	}
-+}
-+#endif /* !HAVE_STRUCT_FILENAME */
-+
- #endif /* _COMPAT25_H */
-diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index a3a514c..71c5103 100644
---- a/lustre/llite/dir.c
-+++ b/lustre/llite/dir.c
-@@ -1417,7 +1417,7 @@ free_lmv:
- 		RETURN(rc);
- 	}
- 	case LL_IOC_REMOVE_ENTRY: {
--		char		*filename = NULL;
-+		struct filename  *filename = NULL;
- 		int		 namelen = 0;
- 		int		 rc;
- 
-@@ -1429,18 +1429,18 @@ free_lmv:
- 		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
- 			return -ENOTSUPP;
- 
--		filename = getname((const char *)arg);
-+		filename = ll_getname((const char *)arg);
- 		if (IS_ERR(filename))
- 			RETURN(PTR_ERR(filename));
- 
--		namelen = strlen(filename);
-+		namelen = strlen(filename->name);
- 		if (namelen < 1)
- 			GOTO(out_rmdir, rc = -EINVAL);
- 
--		rc = ll_rmdir_entry(inode, filename, namelen);
-+		rc = ll_rmdir_entry(inode, filename->name, namelen);
- out_rmdir:
--                if (filename)
--                        putname(filename);
-+		if (filename)
-+			ll_putname(filename);
- 		RETURN(rc);
- 	}
- 	case LL_IOC_LOV_SWAP_LAYOUTS:
-@@ -1451,21 +1451,21 @@ out_rmdir:
-         case LL_IOC_MDC_GETINFO:
-         case IOC_MDC_GETFILEINFO:
-         case IOC_MDC_GETFILESTRIPE: {
--                struct ptlrpc_request *request = NULL;
--                struct lov_user_md *lump;
--                struct lov_mds_md *lmm = NULL;
--                struct mdt_body *body;
--                char *filename = NULL;
--                int lmmsize;
--
--                if (cmd == IOC_MDC_GETFILEINFO ||
--                    cmd == IOC_MDC_GETFILESTRIPE) {
--                        filename = getname((const char *)arg);
--                        if (IS_ERR(filename))
--                                RETURN(PTR_ERR(filename));
--
--                        rc = ll_lov_getstripe_ea_info(inode, filename, &lmm,
--                                                      &lmmsize, &request);
-+		struct ptlrpc_request *request = NULL;
-+		struct lov_user_md *lump;
-+		struct lov_mds_md *lmm = NULL;
-+		struct mdt_body *body;
-+		struct filename *filename = NULL;
-+		int lmmsize;
-+
-+		if (cmd == IOC_MDC_GETFILEINFO ||
-+		    cmd == IOC_MDC_GETFILESTRIPE) {
-+			filename = ll_getname((const char *)arg);
-+			if (IS_ERR(filename))
-+				RETURN(PTR_ERR(filename));
-+
-+			rc = ll_lov_getstripe_ea_info(inode, filename->name,
-+						      &lmm, &lmmsize, &request);
-                 } else {
-                         rc = ll_dir_getstripe(inode, &lmm, &lmmsize, &request);
-                 }
-@@ -1525,10 +1525,10 @@ out_rmdir:
- 
-                 EXIT;
-         out_req:
--                ptlrpc_req_finished(request);
--                if (filename)
--                        putname(filename);
--                return rc;
-+		ptlrpc_req_finished(request);
-+		if (filename)
-+			ll_putname(filename);
-+		return rc;
-         }
-         case IOC_LOV_GETINFO: {
-                 struct lov_user_mds_data *lumd;
-diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 6d41614..2ac22b0 100644
---- a/lustre/llite/llite_internal.h
-+++ b/lustre/llite/llite_internal.h
-@@ -705,7 +705,7 @@ struct lookup_intent *ll_convert_intent(struct open_intent *oit,
-                                         int lookup_flags);
- #endif
- struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de);
--int ll_rmdir_entry(struct inode *dir, char *name, int namelen);
-+int ll_rmdir_entry(struct inode *dir, const char *name, int namelen);
- 
- /* llite/rw.c */
- int ll_prepare_write(struct file *, struct page *, unsigned from, unsigned to);
-diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
-index 1477790..11daf0c 100644
---- a/lustre/llite/namei.c
-+++ b/lustre/llite/namei.c
-@@ -1146,7 +1146,7 @@ static int ll_rmdir_generic(struct inode *dir, struct dentry *dparent,
- /**
-  * Remove dir entry
-  **/
--int ll_rmdir_entry(struct inode *dir, char *name, int namelen)
-+int ll_rmdir_entry(struct inode *dir, const char *name, int namelen)
- {
- 	struct ptlrpc_request *request = NULL;
- 	struct md_op_data *op_data;
--- 
-1.8.1.5
-

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index d9ed196..418e081 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,23 +1,24 @@
-From 6cc48af286a737552bfdb15b8566ecabb32e6642 Mon Sep 17 00:00:00 2001
+From 6ef5ad16aba6cd3ddaf5e27e9b709a38c3ea3c2b Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 18:09:42 +0800
-Subject: [PATCH 5/6] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 5/7] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
 
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
+ lustre/autoconf/lustre-core.m4 | 24 ++++++++++++++++++++++++
  lustre/llite/vvp_io.c          | 10 +++++++++-
- 2 files changed, 32 insertions(+), 1 deletion(-)
+ 2 files changed, 33 insertions(+), 1 deletion(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 9a7a458..c87afb0 100644
+index fee7abc..3e4bfdc 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2279,6 +2279,26 @@ EXTRA_KCFLAGS="$tmp_flags"
+@@ -2232,6 +2232,26 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -44,10 +45,11 @@ index 9a7a458..c87afb0 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2463,6 +2483,9 @@ AC_DEFUN([LC_PROG_LINUX],
- 	 LC_HAVE_SOCK_ALLOC_FILE
- 	 LC_HAVE_STRUCT_FILENAME
+@@ -2412,6 +2432,10 @@ AC_DEFUN([LC_PROG_LINUX],
  
+ 	 # 3.7
+  	 LC_HAVE_POSIXACL_USER_NS
++
 +	 # 3.8
 +	 LC_HAVE_MM_VMTRUNCATE
 +

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index a5e7a25..0c976e1 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,7 +1,7 @@
-From 5f24e2d6b03fd8ef42fbfbd94c11e8640417e3f0 Mon Sep 17 00:00:00 2001
+From 728e7f60624f777c2629cda04305eeaea9a59d04 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
-Subject: [PATCH 6/6] LU-2850 kernel: 3.8 upstream kills daemonize()
+Subject: [PATCH 6/7] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
 Instead of calling kernel_thread() and relying on daemonize()
@@ -11,6 +11,7 @@ kthread_run() and elimilate daemonize().
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
 ---
+ libcfs/autoconf/lustre-libcfs.m4           | 28 -----------
  libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
  libcfs/include/libcfs/libcfs.h             | 13 +----
  libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
@@ -80,9 +81,62 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 69 files changed, 536 insertions(+), 745 deletions(-)
+ 70 files changed, 536 insertions(+), 773 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
+diff --git a/libcfs/autoconf/lustre-libcfs.m4 b/libcfs/autoconf/lustre-libcfs.m4
+index 977518a..8655c99 100644
+--- a/libcfs/autoconf/lustre-libcfs.m4
++++ b/libcfs/autoconf/lustre-libcfs.m4
+@@ -639,15 +639,6 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ ])
+ 
+-AC_DEFUN([LIBCFS_HAVE_OOM_H],
+-[LB_CHECK_FILE([$LINUX/include/linux/oom.h], [
+-        AC_DEFINE(HAVE_LINUX_OOM_H, 1,
+-                [kernel has include/oom.h])
+-],[
+-        AC_MSG_RESULT([no])
+-])
+-])
+-
+ #
+ # check set_mems_allowed
+ # 2.6.31 adds function set_mems_allowed in cpuset.h
+@@ -688,23 +679,6 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ ])
+ 
+-# 2.6.18 store oom parameters in task struct.
+-# 2.6.32 store oom parameters in signal struct
+-AC_DEFUN([LIBCFS_OOMADJ_IN_SIG],
+-[AC_MSG_CHECKING([kernel store oom parameters in task])
+-LB_LINUX_TRY_COMPILE([
+-        #include <linux/sched.h>
+-],[
+-        ((struct signal_struct *)0)->oom_adj = 0;
+-],[
+-        AC_MSG_RESULT(yes)
+-        AC_DEFINE(HAVE_OOMADJ_IN_SIG, 1,
+-                  [kernel store a oom parameters in signal struct])
+-],[
+-        AC_MSG_RESULT(no)
+-])
+-])
+-
+ #
+ # 2.6.33 no longer has ctl_name & strategy field in struct ctl_table.
+ #
+@@ -830,8 +804,6 @@ LIBCFS_HAVE_SET_MEMS_ALLOWED
+ # 2.6.32
+ LIBCFS_STACKTRACE_OPS_HAVE_WALK_STACK
+ LC_SHRINKER_WANT_SHRINK_PTR
+-LIBCFS_HAVE_OOM_H
+-LIBCFS_OOMADJ_IN_SIG
+ # 2.6.33
+ LIBCFS_SYSCTL_CTLNAME
+ # 2.6.34
 diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
 index 7bc7af3..583e257 100644
 --- a/libcfs/include/libcfs/darwin/darwin-prim.h
@@ -1532,7 +1586,7 @@ index b24127d..e624753 100644
  
          CFS_INIT_LIST_HEAD(&enomem_conns);
 diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
-index 9e9b236..7eda4ad 100644
+index 9e9b236..9bdac05 100644
 --- a/lnet/lnet/acceptor.c
 +++ b/lnet/lnet/acceptor.c
 @@ -389,7 +389,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
@@ -1559,9 +1613,9 @@ index 9e9b236..7eda4ad 100644
 -	rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
 -	if (rc2 < 0) {
 -		CERROR("Can't start acceptor thread: %d\n", rc);
-+ 	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
-+ 				  (void *)(ulong_ptr_t)secure,
-+ 				  "acceptor_%03ld", secure));
++	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
++				  (void *)(ulong_ptr_t)secure,
++				  "acceptor_%03ld", secure));
 +	if (IS_ERR_VALUE(rc2)) {
 +		CERROR("Can't start acceptor thread: %ld\n", rc2);
  		fini_completion(&lnet_acceptor_state.pta_signal);
@@ -1747,7 +1801,7 @@ index 2e3a1d5..e61583a 100644
  
  void target_stop_recovery_thread(struct obd_device *obd)
 diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 4a75bb0..27a79d9 100644
+index 8d2057f..d3d1e59 100644
 --- a/lustre/ldlm/ldlm_lockd.c
 +++ b/lustre/ldlm/ldlm_lockd.c
 @@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
@@ -1758,7 +1812,7 @@ index 4a75bb0..27a79d9 100644
  
          expired_lock_thread.elt_state = ELT_READY;
          cfs_waitq_signal(&expired_lock_thread.elt_waitq);
-@@ -2564,14 +2563,17 @@ static int ldlm_bl_thread_main(void *arg);
+@@ -2570,14 +2569,17 @@ static int ldlm_bl_thread_main(void *arg);
  static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
  {
  	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
@@ -1782,7 +1836,7 @@ index 4a75bb0..27a79d9 100644
  	}
  	wait_for_completion(&bltd.bltd_comp);
  
-@@ -2595,14 +2597,9 @@ static int ldlm_bl_thread_main(void *arg)
+@@ -2601,14 +2603,9 @@ static int ldlm_bl_thread_main(void *arg)
  
                  blp = bltd->bltd_blp;
  
@@ -1798,7 +1852,7 @@ index 4a75bb0..27a79d9 100644
  		complete(&bltd->bltd_comp);
                  /* cannot use bltd after this, it is only on caller's stack */
          }
-@@ -2941,22 +2938,22 @@ static int ldlm_setup(void)
+@@ -2948,22 +2945,22 @@ static int ldlm_setup(void)
  	}
  
  # ifdef HAVE_SERVER_SUPPORT
@@ -1831,7 +1885,7 @@ index 4a75bb0..27a79d9 100644
  
  	rc = ldlm_pools_init();
 diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
-index 820a50d..aa5b0c0 100644
+index d724a2d..fa14f66 100644
 --- a/lustre/ldlm/ldlm_pool.c
 +++ b/lustre/ldlm/ldlm_pool.c
 @@ -1295,15 +1295,13 @@ EXPORT_SYMBOL(ldlm_pools_recalc);
@@ -2151,10 +2205,10 @@ index 9eea49e..cb11191 100644
                  thread_set_flags(thread, SVC_STOPPED);
                  thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 608813c..bc56549 100644
+index a7b6d4a..7960645 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
-@@ -1556,13 +1556,6 @@ static int mdc_changelog_send_thread(void *csdata)
+@@ -1553,13 +1553,6 @@ static int mdc_changelog_send_thread(void *csdata)
          CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
                 cs->cs_fp, cs->cs_startrec);
  
@@ -2168,7 +2222,7 @@ index 608813c..bc56549 100644
          OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
          if (cs->cs_buf == NULL)
                  GOTO(out, rc = -ENOMEM);
-@@ -1599,12 +1592,10 @@ out:
+@@ -1596,12 +1589,10 @@ out:
  		llog_cat_close(NULL, llh);
          if (ctxt)
                  llog_ctxt_put(ctxt);
@@ -2185,7 +2239,7 @@ index 608813c..bc56549 100644
  }
  
  static int mdc_ioc_changelog_send(struct obd_device *obd,
-@@ -1624,13 +1615,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
+@@ -1621,13 +1612,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
  	cs->cs_fp = fget(icc->icc_id);
  	cs->cs_flags = icc->icc_flags;
  
@@ -2210,10 +2264,10 @@ index 608813c..bc56549 100644
          CERROR("Failed to start changelog thread: %d\n", rc);
          OBD_FREE_PTR(cs);
 diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
-index 152a2d4..f7be2bb 100644
+index bca6ce1..540b7a1 100644
 --- a/lustre/mdd/mdd_lfsck.c
 +++ b/lustre/mdd/mdd_lfsck.c
-@@ -2605,7 +2605,6 @@ static int mdd_lfsck_main(void *args)
+@@ -2615,7 +2615,6 @@ static int mdd_lfsck_main(void *args)
  	int			 rc;
  	ENTRY;
  
@@ -2221,7 +2275,7 @@ index 152a2d4..f7be2bb 100644
  	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
  	if (rc != 0) {
  		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
-@@ -2869,8 +2868,8 @@ trigger:
+@@ -2879,8 +2878,8 @@ trigger:
  
  	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
  	thread_set_flags(thread, 0);
@@ -2277,7 +2331,7 @@ index 76e2c6f..d4a8bc4 100644
  
  void mdt_ck_thread_stop(struct mdt_device *mdt)
 diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
-index 67e4179..58d2912 100644
+index 9e2357b..01bb584 100644
 --- a/lustre/mgc/mgc_request.c
 +++ b/lustre/mgc/mgc_request.c
 @@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
@@ -2462,7 +2516,7 @@ index fbf2766..7945237 100644
  	rc = lu_env_init(&env, LCT_LOCAL);
  	if (rc)
 diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
-index 858aa07..ad72c78 100644
+index 3736410..8d53834 100644
 --- a/lustre/osd-ldiskfs/osd_scrub.c
 +++ b/lustre/osd-ldiskfs/osd_scrub.c
 @@ -962,7 +962,6 @@ static int osd_scrub_main(void *args)
@@ -2485,7 +2539,7 @@ index 858aa07..ad72c78 100644
  		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
  		RETURN(rc);
 diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
-index 405524c..de5e7de 100644
+index 1836f18..af52b9e 100644
 --- a/lustre/osp/osp_precreate.c
 +++ b/lustre/osp/osp_precreate.c
 @@ -881,15 +881,11 @@ static int osp_precreate_thread(void *_arg)
@@ -2504,7 +2558,7 @@ index 405524c..de5e7de 100644
  	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
  	if (rc) {
  		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
-@@ -1257,7 +1253,7 @@ out:
+@@ -1258,7 +1254,7 @@ out:
  int osp_init_precreate(struct osp_device *d)
  {
  	struct l_wait_info	 lwi = { 0 };
@@ -2513,7 +2567,7 @@ index 405524c..de5e7de 100644
  
  	ENTRY;
  
-@@ -1292,10 +1288,11 @@ int osp_init_precreate(struct osp_device *d)
+@@ -1293,10 +1289,11 @@ int osp_init_precreate(struct osp_device *d)
  	/*
  	 * start thread handling precreation and statfs updates
  	 */

diff --git a/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
new file mode 100644
index 0000000..a819726
--- /dev/null
+++ b/sys-cluster/lustre/files/0007-LU-2987-llite-rcu-free-inode.patch
@@ -0,0 +1,89 @@
+From acba951ab52918a0b5d247e9dac561f8ae70aa18 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Tue, 19 Mar 2013 14:04:47 +0800
+Subject: [PATCH 7/7] LU-2987 llite: rcu-free inode
+
+Since 2.6.38, inode.i_rcu was added and file system .destory_inode
+should rcu-free inodes.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: Idc12c94fd1bf9c99756c9bcb2d07f3061e6dad5a
+---
+ lustre/autoconf/lustre-core.m4 | 21 +++++++++++++++++++++
+ lustre/llite/super25.c         | 18 ++++++++++++++++--
+ 2 files changed, 37 insertions(+), 2 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 3e4bfdc..78dbe99 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1682,6 +1682,26 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 2.6.38 inode.i_rcu added.
++#
++AC_DEFUN([LC_INODE_I_RCU],
++[AC_MSG_CHECKING([if inode.i_rcu exists])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct inode ino;
++	struct rcu_head rcu = {};
++	ino.i_rcu = rcu;
++],[
++	AC_DEFINE(HAVE_INODE_I_RCU, 1,
++		[inode.i_rcu exists])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # 2.6.38 export blkdev_get_by_dev
+ #
+ AC_DEFUN([LC_BLKDEV_GET_BY_DEV],
+@@ -2389,6 +2409,7 @@ AC_DEFUN([LC_PROG_LINUX],
+          LC_GENERIC_PERMISSION
+          LC_QUOTA_ON_USE_PATH
+          LC_DCACHE_LOCK
++	 LC_INODE_I_RCU
+          LC_D_COMPARE_7ARGS
+          LC_D_DELETE_CONST
+ 
+diff --git a/lustre/llite/super25.c b/lustre/llite/super25.c
+index 3f6aadf..0c768d5 100644
+--- a/lustre/llite/super25.c
++++ b/lustre/llite/super25.c
+@@ -61,11 +61,25 @@ static struct inode *ll_alloc_inode(struct super_block *sb)
+         return &lli->lli_vfs_inode;
+ }
+ 
++#ifdef HAVE_INODE_I_RCU
++static void ll_inode_destroy_callback(struct rcu_head *head)
++{
++	struct inode *inode = container_of(head, struct inode, i_rcu);
++	struct ll_inode_info *ptr = ll_i2info(inode);
++	OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
++}
++
++static void ll_destroy_inode(struct inode *inode)
++{
++	call_rcu(&inode->i_rcu, ll_inode_destroy_callback);
++}
++#else
+ static void ll_destroy_inode(struct inode *inode)
+ {
+-        struct ll_inode_info *ptr = ll_i2info(inode);
+-        OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
++	struct ll_inode_info *ptr = ll_i2info(inode);
++	OBD_SLAB_FREE_PTR(ptr, ll_inode_cachep);
+ }
++#endif
+ 
+ int ll_init_inodecache(void)
+ {
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 9de2f81..417f6ff 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -32,12 +32,13 @@ RDEPEND="${DEPEND}"
 PATCHES=(
 	"${FILESDIR}/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
 	"${FILESDIR}/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
-	"${FILESDIR}/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch"
-	"${FILESDIR}/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch"
-	"${FILESDIR}/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch"
+	"${FILESDIR}/0002-LU-2850-compat-posix_acl_-to-from-_xattr-take-user_n.patch"
+	"${FILESDIR}/0003-LU-2800-libcfs-use-sock_alloc_file-instead-of-sock_m.patch"
+	"${FILESDIR}/0004-LU-2800-llite-introduce-local-getname.patch"
 	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 	"${FILESDIR}/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch"
+	"${FILESDIR}/0007-LU-2987-llite-rcu-free-inode.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 23:14 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 23:14 UTC (permalink / raw
  To: gentoo-commits

commit:     d874bf1da9f1d039fc4803d42ee3eced6f487371
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 23:14:36 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 23:14:36 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=d874bf1d

Update patches

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    9 +++++
 ...ld-check-header-files-in-generated-uapi-d.patch |    4 +-
 ...-kernel-3.7-kernel-posix-acl-needs-userns.patch |   32 ++++++++++----------
 ...3-LU-2850-kernel-3.7-uneports-sock_map_fd.patch |    2 +-
 ...rnel-3.7-get-putname-uses-struct-filename.patch |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    2 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   10 +++---
 7 files changed, 35 insertions(+), 26 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index a601dac..25c0274 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,15 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,
+  files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch,
+  files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch:
+  Update patches
+
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Fix some install path
 

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 418dd60..66c5f1d 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,4 +1,4 @@
-From ef79b13b6424e5b34052c56043da2ec02e50a392 Mon Sep 17 00:00:00 2001
+From 44ddcf216f650c119d8b376ec70a9163cbb47506 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
 Subject: [PATCH 1/6] LU-2850 build: check header files in generated uapi dir
@@ -17,7 +17,7 @@ Change-Id: Ib104919189ebc0af7d3b5e9ca3b866b3b98be3dc
  5 files changed, 19 insertions(+), 14 deletions(-)
 
 diff --git a/autoMakefile.am b/autoMakefile.am
-index 883d13c..8f3518b 100644
+index 8a259bc..6cc5f6d 100644
 --- a/autoMakefile.am
 +++ b/autoMakefile.am
 @@ -84,7 +84,7 @@ all-am: modules

diff --git a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
index 67715de..8daaa4f 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
+++ b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
@@ -1,6 +1,6 @@
-From 4cc5a5711dea1e5bebd2cd1812955cc0cf84a8ac Mon Sep 17 00:00:00 2001
+From a1552cbe3d0ea36cdc3959db91a8edb19589cf96 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
-Date: Tue, 26 Feb 2013 16:31:44 +0800
+Date: Mon, 11 Mar 2013 11:17:12 +0800
 Subject: [PATCH 2/6] LU-2850 kernel: 3.7 kernel posix acl needs userns
 
 With upstream commit 5f3a4a28, kernel posix acl adds support
@@ -10,10 +10,10 @@ Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: I7d82c51c482daae8a7dbb526b8d72eea2bcf0650
 ---
  lustre/autoconf/lustre-core.m4 | 26 ++++++++++++++++++++++++++
- lustre/include/liblustre.h     | 11 ++++++++++-
+ lustre/include/liblustre.h     |  9 ++++++++-
  lustre/llite/xattr.c           |  6 +++++-
  lustre/mdc/mdc_request.c       |  6 +++++-
- 4 files changed, 46 insertions(+), 3 deletions(-)
+ 4 files changed, 44 insertions(+), 3 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
 index 3c773e8..38d26a3 100644
@@ -67,28 +67,28 @@ index 3c773e8..38d26a3 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index 14f3ef6..be4652e 100644
+index 14f3ef6..50e5f35 100644
 --- a/lustre/include/liblustre.h
 +++ b/lustre/include/liblustre.h
-@@ -452,8 +452,17 @@ static inline size_t posix_acl_xattr_size(int count)
-                sizeof(posix_acl_xattr_entry);
+@@ -453,10 +453,17 @@ static inline size_t posix_acl_xattr_size(int count)
  }
  
-+#ifdef HAVE_POSIX_ACL_NAMESPACE
-+struct user_namespace {};
-+struct user_namespace init_user_ns;
-+
-+static inline
-+struct posix_acl *posix_acl_from_xattr(struct user_namespace *user_ns,
-+					const void *value, size_t size)
-+#else
  static inline
 -struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
 +struct posix_acl *posix_acl_from_xattr(const void *value, size_t size)
-+#endif
  {
          return NULL;
  }
++#ifdef HAVE_POSIX_ACL_NAMESPACE
++/*
++ * Mask out &init_user_ns so we don't jump through hoops to define it somehow
++ * only to have it ignored anyway.
++ */
++#define posix_acl_from_xattr(a,b,c)    posix_acl_from_xattr(b,c)
++#endif
+ 
+ static inline
+ int posix_acl_valid(const struct posix_acl *acl)
 diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
 index 24a89eb..d0349e2 100644
 --- a/lustre/llite/xattr.c

diff --git a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
index 60e2f0f..e2f7c17 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
@@ -1,4 +1,4 @@
-From 44bfa4137340d5748aa4aa973f8ef444885ab790 Mon Sep 17 00:00:00 2001
+From 44034bc1deb0f1320693b605ab5c7c240f70df01 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 17:09:15 +0800
 Subject: [PATCH 3/6] LU-2850 kernel: 3.7 uneports sock_map_fd

diff --git a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
index c488db0..dae020b 100644
--- a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
@@ -1,4 +1,4 @@
-From e4706fbb2bad8b3d1f4f99fbcd5a3dd8513dea6b Mon Sep 17 00:00:00 2001
+From eb13282efadf49a467e151d1d9c6ede64ab0b367 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 17:51:46 +0800
 Subject: [PATCH 4/6] LU-2850 kernel: 3.7 get/putname uses struct filename

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index baed44a..d9ed196 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,4 +1,4 @@
-From e40d49bfbbda8196e29d98e380d012ff9d9c3639 Mon Sep 17 00:00:00 2001
+From 6cc48af286a737552bfdb15b8566ecabb32e6642 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 18:09:42 +0800
 Subject: [PATCH 5/6] LU-2850 kernel: 3.8 upstream removes vmtruncate()

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index cacc590..a5e7a25 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,4 +1,4 @@
-From 45927457c2d276951ad1cbf4da785160b36ae3f8 Mon Sep 17 00:00:00 2001
+From 5f24e2d6b03fd8ef42fbfbd94c11e8640417e3f0 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Mon, 18 Mar 2013 10:47:57 +0800
 Subject: [PATCH 6/6] LU-2850 kernel: 3.8 upstream kills daemonize()
@@ -477,10 +477,10 @@ index afb4465..6da1744 100644
  EXPORT_SYMBOL(cfs_block_sigs);
  EXPORT_SYMBOL(cfs_block_sigsinv);
 diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
-index f31e000..5059f47 100644
+index d455e42..f874974 100644
 --- a/libcfs/libcfs/tracefile.c
 +++ b/libcfs/libcfs/tracefile.c
-@@ -991,7 +991,6 @@ static int tracefiled(void *arg)
+@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
  
  	/* we're started late enough that we pick up init's fs context */
  	/* this is so broken in uml?  what on earth is going on? */
@@ -488,7 +488,7 @@ index f31e000..5059f47 100644
  
  	spin_lock_init(&pc.pc_lock);
  	complete(&tctl->tctl_start);
-@@ -1105,16 +1104,16 @@ int cfs_trace_start_thread(void)
+@@ -1106,16 +1105,16 @@ int cfs_trace_start_thread(void)
  
  	init_completion(&tctl->tctl_start);
  	init_completion(&tctl->tctl_stop);
@@ -1747,7 +1747,7 @@ index 2e3a1d5..e61583a 100644
  
  void target_stop_recovery_thread(struct obd_device *obd)
 diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
-index 18bbd28..fb4d729 100644
+index 4a75bb0..27a79d9 100644
 --- a/lustre/ldlm/ldlm_lockd.c
 +++ b/lustre/ldlm/ldlm_lockd.c
 @@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 20:53 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 20:53 UTC (permalink / raw
  To: gentoo-commits

commit:     8f351608e2da79c09b39e9ad0795af7aeffaaf32
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 20:53:28 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 20:53:28 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=8f351608

Fix error in mdt_handler.c

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    5 +++
 ...ld-Fix-warning-with-gcc-4.6-in-mdt_handle.patch |   38 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    1 +
 3 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index c519988..eedb888 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,11 @@
 # $Header: $
 
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch,
+  lustre-9999.ebuild:
+  Fix error in mdt_handler.c
+
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch:
   Update patch
 

diff --git a/sys-cluster/lustre/files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch b/sys-cluster/lustre/files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch
new file mode 100644
index 0000000..f578c62
--- /dev/null
+++ b/sys-cluster/lustre/files/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch
@@ -0,0 +1,38 @@
+From 8c839b9bbd3fca53d8f5a530d1a2285419cf3071 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Tue, 19 Mar 2013 00:48:48 +0400
+Subject: [PATCH] LU-2984 build: Fix warning with gcc-4.6+ in mdt_handler.c
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+gcc-4.6+ has more stricter check for possible usage of unnitialized
+variables so it will generate error with -Werror like this
+
+lustre/mdt/mdt_handler.c: In function ‘mdt_get_info’:
+lustre/mdt/mdt_handler.c:5508:9: error: ‘rc’ may be used uninitialized
+in this function [-Werror=maybe-uninitialized]
+cc1: all warnings being treated as errors
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: Ia330808886b466c4a7d184add56b1ede115c7d0e
+---
+ lustre/mdt/mdt_handler.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/lustre/mdt/mdt_handler.c b/lustre/mdt/mdt_handler.c
+index 02dcdb8..38b59a6 100644
+--- a/lustre/mdt/mdt_handler.c
++++ b/lustre/mdt/mdt_handler.c
+@@ -5505,7 +5505,7 @@ static int mdt_fid2path(const struct lu_env *env, struct mdt_device *mdt,
+ {
+ 	struct mdt_object *obj;
+ 	struct obd_device *obd = mdt2obd_dev(mdt);
+-	int    rc;
++	int    rc = 0;
+ 	ENTRY;
+ 
+ 	CDEBUG(D_IOCTL, "path get "DFID" from "LPU64" #%d\n",
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 80cea99..319103a 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -37,6 +37,7 @@ PATCHES=(
 	"${FILESDIR}/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch"
 	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
 	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
+	"${FILESDIR}/0007-LU-2984-build-Fix-warning-with-gcc-4.6-in-mdt_handle.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 14:10 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 14:10 UTC (permalink / raw
  To: gentoo-commits

commit:     8dad098e3fd7649e64485557e32d1612479cfd24
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 14:10:15 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 14:10:15 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=8dad098e

Update patch

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    4 ++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |   56 +++++++++++---------
 2 files changed, 35 insertions(+), 25 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 6558efd..c519988 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -7,6 +7,10 @@
   Update patch
 
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch:
+  Update patch
+
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   -files/LU-2982.patch, lustre-9999.ebuild:
   Add patch sended upstream

diff --git a/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index f03d0f1..1602cb0 100644
--- a/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,4 +1,4 @@
-From 8464c612c87117d6f71a1515cd24e72508ee237a Mon Sep 17 00:00:00 2001
+From 1154d0914e29f3d6badb63913855faa008ac7b7b Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
 Subject: [PATCH] LU-2982 build: make AC check for linux arch sandbox friendly
@@ -9,14 +9,14 @@ Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I173cd892bca5587519806cf6d300a5053dfb935f
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- build/autoconf/lustre-build-linux.m4 | 59 +++++++++++++++++++++++++++++++-----
- 1 file changed, 51 insertions(+), 8 deletions(-)
+ build/autoconf/lustre-build-linux.m4 | 65 +++++++++++++++++++++++++++++++-----
+ 1 file changed, 57 insertions(+), 8 deletions(-)
 
 diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index 4c0a581..b6dc7c7 100644
+index 4c0a581..9fcd0b3 100644
 --- a/build/autoconf/lustre-build-linux.m4
 +++ b/build/autoconf/lustre-build-linux.m4
-@@ -363,14 +363,57 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -363,14 +363,63 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],
@@ -37,28 +37,34 @@ index 4c0a581..b6dc7c7 100644
 +	LINUXARCHHEADER=linux/autoconf.h
 +fi
 +LB_LINUX_TRY_MAKE([
-+	#include <$LINUXARCHHEADER>
++#include <$LINUXARCHHEADER>
++
++#ifndef UTS_MACHINE
++
++ #ifdef CONFIG_X86
++  #ifdef CONFIG_X86_32
++   #define UTS_MACHINE i386
++  #else
++   #define UTS_MACHINE x86_64
++  #endif
++ #endif
++
++ #ifdef CONFIG_IA64
++  #define UTS_MACHINE ia64
++ #endif
++
++ #ifdef CONFIG_PPC
++  #ifdef CONFIG_PPC32
++   #define UTS_MACHINE ppc
++  #endif
++  #ifdef CONFIG_PPC64
++   #define UTS_MACHINE ppc64
++  #endif
++ #endif
++
++#endif
 +],[
 +	char *LINUXARCH;
-+	#ifndef UTS_MACHINE
-+	#ifdef CONFIG_X86
-+	#ifdef CONFIG_X86_32
-+	#define UTS_MACHINE i386
-+	#else
-+	#define UTS_MACHINE x86_64
-+	#endif
-+	#ifdef CONFIG_IA64
-+	#define UTS_MACHINE ia64
-+	#endif
-+	#ifdef CONFIG_PPC
-+	#ifdef CONFIG_PPC32
-+	#define UTS_MACHINE ppc
-+	#endif
-+	#ifdef CONFIG_PPC64
-+	#define UTS_MACHINE ppc64
-+	#endif
-+	#endif
-+	#endif
 +	LINUXARCH=UTS_MACHINE;
 +],[
 +	$makerule LUSTRE_KERNEL_TEST=conftest.i


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 14:00 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 14:00 UTC (permalink / raw
  To: gentoo-commits

commit:     1fe05f3e5a923a101b22f889392f2b7538015cfc
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 13:59:36 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 13:59:36 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=1fe05f3e

Update patch

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    4 ++
 ...ld-make-AC-check-for-linux-arch-sandbox-f.patch |   32 ++++++++++++++++----
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 8acda36..6558efd 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,10 @@
 # $Header: $
 
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch:
+  Update patch
+
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
   -files/LU-2982.patch, lustre-9999.ebuild:
   Add patch sended upstream

diff --git a/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch b/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 601c219..f03d0f1 100644
--- a/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
+++ b/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,4 +1,4 @@
-From 1abbac39f89cc7e078fd3a3abcd0597c736918a1 Mon Sep 17 00:00:00 2001
+From 8464c612c87117d6f71a1515cd24e72508ee237a Mon Sep 17 00:00:00 2001
 From: Alexey Shvetsov <alexxy@gentoo.org>
 Date: Mon, 18 Mar 2013 16:22:27 +0400
 Subject: [PATCH] LU-2982 build: make AC check for linux arch sandbox friendly
@@ -7,15 +7,16 @@ this commit makes AC check for linux kernel arch sandbox friendly
 
 Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 Change-Id: I173cd892bca5587519806cf6d300a5053dfb935f
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
 ---
- build/autoconf/lustre-build-linux.m4 | 40 ++++++++++++++++++++++++++++--------
- 1 file changed, 32 insertions(+), 8 deletions(-)
+ build/autoconf/lustre-build-linux.m4 | 59 +++++++++++++++++++++++++++++++-----
+ 1 file changed, 51 insertions(+), 8 deletions(-)
 
 diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index 4c0a581..6f6a40a 100644
+index 4c0a581..b6dc7c7 100644
 --- a/build/autoconf/lustre-build-linux.m4
 +++ b/build/autoconf/lustre-build-linux.m4
-@@ -363,14 +363,38 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -363,14 +363,57 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],
@@ -33,12 +34,31 @@ index 4c0a581..6f6a40a 100644
 +if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/compile.h ; then
 +	LINUXARCHHEADER=$AUTOCONF_HDIR/compile.h
 +else
-+	LINUXARCHHEADER=linux/version.h
++	LINUXARCHHEADER=linux/autoconf.h
 +fi
 +LB_LINUX_TRY_MAKE([
 +	#include <$LINUXARCHHEADER>
 +],[
 +	char *LINUXARCH;
++	#ifndef UTS_MACHINE
++	#ifdef CONFIG_X86
++	#ifdef CONFIG_X86_32
++	#define UTS_MACHINE i386
++	#else
++	#define UTS_MACHINE x86_64
++	#endif
++	#ifdef CONFIG_IA64
++	#define UTS_MACHINE ia64
++	#endif
++	#ifdef CONFIG_PPC
++	#ifdef CONFIG_PPC32
++	#define UTS_MACHINE ppc
++	#endif
++	#ifdef CONFIG_PPC64
++	#define UTS_MACHINE ppc64
++	#endif
++	#endif
++	#endif
 +	LINUXARCH=UTS_MACHINE;
 +],[
 +	$makerule LUSTRE_KERNEL_TEST=conftest.i


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 12:29 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 12:29 UTC (permalink / raw
  To: gentoo-commits

commit:     ca8620ff1bd6094e519f114307aa594fc3b8eb0c
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 12:29:15 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 12:29:15 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=ca8620ff

Add patch sended upstream

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    5 +++++
 ...d-make-AC-check-for-linux-arch-sandbox-f.patch} |   16 ++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    4 +---
 3 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 26a81d6..8acda36 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,11 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch,
+  -files/LU-2982.patch, lustre-9999.ebuild:
+  Add patch sended upstream
+
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> files/LU-2982.patch:
   Update patch
 

diff --git a/sys-cluster/lustre/files/LU-2982.patch b/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
similarity index 76%
rename from sys-cluster/lustre/files/LU-2982.patch
rename to sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
index 914a398..601c219 100644
--- a/sys-cluster/lustre/files/LU-2982.patch
+++ b/sys-cluster/lustre/files/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch
@@ -1,3 +1,16 @@
+From 1abbac39f89cc7e078fd3a3abcd0597c736918a1 Mon Sep 17 00:00:00 2001
+From: Alexey Shvetsov <alexxy@gentoo.org>
+Date: Mon, 18 Mar 2013 16:22:27 +0400
+Subject: [PATCH] LU-2982 build: make AC check for linux arch sandbox friendly
+
+this commit makes AC check for linux kernel arch sandbox friendly
+
+Signed-off-by: Alexey Shvetsov <alexxy@gentoo.org>
+Change-Id: I173cd892bca5587519806cf6d300a5053dfb935f
+---
+ build/autoconf/lustre-build-linux.m4 | 40 ++++++++++++++++++++++++++++--------
+ 1 file changed, 32 insertions(+), 8 deletions(-)
+
 diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
 index 4c0a581..6f6a40a 100644
 --- a/build/autoconf/lustre-build-linux.m4
@@ -49,3 +62,6 @@ index 4c0a581..6f6a40a 100644
  
  #
  # LB_LINUX_TRY_COMPILE
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 48804f4..80cea99 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -29,10 +29,8 @@ DEPEND="
 	"
 RDEPEND="${DEPEND}"
 
-BUILD_PARAMS="-C ${KV_DIR} SUBDIRS=${S}"
-
 PATCHES=(
-	"${FILESDIR}/LU-2982.patch"
+	"${FILESDIR}/0000-LU-2982-build-make-AC-check-for-linux-arch-sandbox-f.patch"
 	"${FILESDIR}/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
 	"${FILESDIR}/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch"
 	"${FILESDIR}/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch"


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 12:21 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 12:21 UTC (permalink / raw
  To: gentoo-commits

commit:     c52ab46c471a453226d3c930816f2c2400a2a19a
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 12:21:16 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 12:21:16 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=c52ab46c

Update patch

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog           |    3 ++
 sys-cluster/lustre/files/LU-2982.patch |   61 ++++++++++++++++---------------
 2 files changed, 34 insertions(+), 30 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 35c3d06..26a81d6 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,9 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> files/LU-2982.patch:
+  Update patch
+
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> +files/LU-2982.patch,
   lustre-9999.ebuild:
   Fix sandbox violation during configure

diff --git a/sys-cluster/lustre/files/LU-2982.patch b/sys-cluster/lustre/files/LU-2982.patch
index f8f8bd0..914a398 100644
--- a/sys-cluster/lustre/files/LU-2982.patch
+++ b/sys-cluster/lustre/files/LU-2982.patch
@@ -1,8 +1,8 @@
 diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index 4c0a581..1ea0d12 100644
+index 4c0a581..6f6a40a 100644
 --- a/build/autoconf/lustre-build-linux.m4
 +++ b/build/autoconf/lustre-build-linux.m4
-@@ -363,14 +363,37 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+@@ -363,14 +363,38 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
  # Determine the kernel's idea of the current architecture
  #
  AC_DEFUN([LB_LINUX_ARCH],
@@ -14,37 +14,38 @@ index 4c0a581..1ea0d12 100644
 -                [AC_MSG_RESULT([$LINUX_ARCH])],
 -                [AC_MSG_ERROR([Could not determine the kernel architecture.])])
 -          rm -f build/arch])
-+         [LINUXARCH=
-+	  rm -f build/conftest.i
-+	  AC_MSG_CHECKING([Linux kernel architecture])
-+	  if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/compile.h ; then
-+	        LINUXARCHHEADER=$AUTOCONF_HDIR/compile.h
-+	  else
-+	  	LINUXARCHHEADER=linux/version.h
-+	  fi
-+	  LB_LINUX_TRY_MAKE([
-+	  	#include <$LINUXARCHHEADER>
-+	  ],[
-+	  	char *LINUXARCH;
-+		LINUXARCH=UTS_MACHINE;
-+	  ],[
-+	  	$makerule LUSTRE_KERNEL_TEST=conftest.i
-+	  ],[
-+	  	test -s build/conftest.i
-+	  ],[
-+	  	# LINUXARCH="UTS_MACHINE"
-+		eval $(grep "LINUXARCH=" build/conftest.i)
-+	  ],[
-+	  	AC_MSG_RESULT([unknown])
-+		AC_MSG_ERROR([Could not preprocess test program.  Consult config.log for details.])
-+	  ])
-+	  rm -f build/conftest.i
-+	  if test x$LINUXARCH = x ; then
-+	  	AC_MSG_RESULT([unknown])
++[LINUXARCH=
++rm -f build/conftest.i
++AC_MSG_CHECKING([Linux kernel architecture])
++if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/compile.h ; then
++	LINUXARCHHEADER=$AUTOCONF_HDIR/compile.h
++else
++	LINUXARCHHEADER=linux/version.h
++fi
++LB_LINUX_TRY_MAKE([
++	#include <$LINUXARCHHEADER>
++],[
++	char *LINUXARCH;
++	LINUXARCH=UTS_MACHINE;
++],[
++	$makerule LUSTRE_KERNEL_TEST=conftest.i
++],[
++	test -s build/conftest.i
++],[
++	# LINUXARCH="UTS_MACHINE"
++	eval $(grep "LINUXARCH=" build/conftest.i)
++],[
++	AC_MSG_RESULT([unknown])
++	AC_MSG_ERROR([Could not preprocess test program.  Consult config.log for details.])
++])
++	rm -f build/conftest.i
++	if test x$LINUXARCH = x ; then
++		AC_MSG_RESULT([unknown])
 +		AC_MSG_ERROR([Could not determine Linux architecture from linux/version.h.])
-+	  fi
++	fi
 +AC_MSG_RESULT([$LINUXARCH])
 +AC_SUBST(LINUXARCH)
++])
  
  #
  # LB_LINUX_TRY_COMPILE


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18 12:13 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18 12:13 UTC (permalink / raw
  To: gentoo-commits

commit:     8bf621a051b09547c78c80bf5736cb35480d3f72
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 12:13:09 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 12:13:09 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=8bf621a0

Fix sandbox violation during configure

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog           |    4 ++
 sys-cluster/lustre/files/LU-2982.patch |   50 ++++++++++++++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild  |    1 +
 3 files changed, 55 insertions(+), 0 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 458f162..35c3d06 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,10 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> +files/LU-2982.patch,
+  lustre-9999.ebuild:
+  Fix sandbox violation during configure
+
   18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
   files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,

diff --git a/sys-cluster/lustre/files/LU-2982.patch b/sys-cluster/lustre/files/LU-2982.patch
new file mode 100644
index 0000000..f8f8bd0
--- /dev/null
+++ b/sys-cluster/lustre/files/LU-2982.patch
@@ -0,0 +1,50 @@
+diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
+index 4c0a581..1ea0d12 100644
+--- a/build/autoconf/lustre-build-linux.m4
++++ b/build/autoconf/lustre-build-linux.m4
+@@ -363,14 +363,37 @@ rm -f build/conftest.o build/conftest.mod.c build/conftest.mod.o build/conftest.
+ # Determine the kernel's idea of the current architecture
+ #
+ AC_DEFUN([LB_LINUX_ARCH],
+-         [AC_MSG_CHECKING([Linux kernel architecture])
+-          AS_IF([rm -f $PWD/build/arch
+-                 make -s --no-print-directory echoarch -f $PWD/build/Makefile \
+-                     LUSTRE_LINUX_CONFIG=$LINUX_CONFIG -C $LINUX \
+-                     ARCHFILE=$PWD/build/arch && LINUX_ARCH=`cat $PWD/build/arch`],
+-                [AC_MSG_RESULT([$LINUX_ARCH])],
+-                [AC_MSG_ERROR([Could not determine the kernel architecture.])])
+-          rm -f build/arch])
++         [LINUXARCH=
++	  rm -f build/conftest.i
++	  AC_MSG_CHECKING([Linux kernel architecture])
++	  if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/compile.h ; then
++	        LINUXARCHHEADER=$AUTOCONF_HDIR/compile.h
++	  else
++	  	LINUXARCHHEADER=linux/version.h
++	  fi
++	  LB_LINUX_TRY_MAKE([
++	  	#include <$LINUXARCHHEADER>
++	  ],[
++	  	char *LINUXARCH;
++		LINUXARCH=UTS_MACHINE;
++	  ],[
++	  	$makerule LUSTRE_KERNEL_TEST=conftest.i
++	  ],[
++	  	test -s build/conftest.i
++	  ],[
++	  	# LINUXARCH="UTS_MACHINE"
++		eval $(grep "LINUXARCH=" build/conftest.i)
++	  ],[
++	  	AC_MSG_RESULT([unknown])
++		AC_MSG_ERROR([Could not preprocess test program.  Consult config.log for details.])
++	  ])
++	  rm -f build/conftest.i
++	  if test x$LINUXARCH = x ; then
++	  	AC_MSG_RESULT([unknown])
++		AC_MSG_ERROR([Could not determine Linux architecture from linux/version.h.])
++	  fi
++AC_MSG_RESULT([$LINUXARCH])
++AC_SUBST(LINUXARCH)
+ 
+ #
+ # LB_LINUX_TRY_COMPILE

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 405cb70..48804f4 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -32,6 +32,7 @@ RDEPEND="${DEPEND}"
 BUILD_PARAMS="-C ${KV_DIR} SUBDIRS=${S}"
 
 PATCHES=(
+	"${FILESDIR}/LU-2982.patch"
 	"${FILESDIR}/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
 	"${FILESDIR}/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch"
 	"${FILESDIR}/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch"


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-18  3:53 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-18  3:53 UTC (permalink / raw
  To: gentoo-commits

commit:     96d6eeeed15645010729043564f6470840ee9a56
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 18 03:53:13 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Mon Mar 18 03:53:13 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=96d6eeee

Update lustre patches

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   10 +
 ...ld-check-header-files-in-generated-uapi-d.patch |    2 +-
 ...-kernel-3.7-kernel-posix-acl-needs-userns.patch |    6 +-
 ...3-LU-2850-kernel-3.7-uneports-sock_map_fd.patch |    2 +-
 ...rnel-3.7-get-putname-uses-struct-filename.patch |    2 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    4 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |  215 ++++++++------------
 sys-cluster/lustre/lustre-9999.ebuild              |    3 +-
 8 files changed, 105 insertions(+), 139 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 45890cc..458f162 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,16 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  18 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,
+  files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch,
+  files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  lustre-9999.ebuild:
+  Update lustre patches
+
   16 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Update deps. thanks to Richard Yao
 

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 774f328..418dd60 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,4 +1,4 @@
-From b19ad19fb93f7461ec9fbe8c9dc5cd8a18bc9230 Mon Sep 17 00:00:00 2001
+From ef79b13b6424e5b34052c56043da2ec02e50a392 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
 Subject: [PATCH 1/6] LU-2850 build: check header files in generated uapi dir

diff --git a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
index d9c8e64..67715de 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
+++ b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
@@ -1,4 +1,4 @@
-From e9f9ce30714f5b645e59d08e6d1c6dfeae6254d4 Mon Sep 17 00:00:00 2001
+From 4cc5a5711dea1e5bebd2cd1812955cc0cf84a8ac Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 16:31:44 +0800
 Subject: [PATCH 2/6] LU-2850 kernel: 3.7 kernel posix acl needs userns
@@ -67,7 +67,7 @@ index 3c773e8..38d26a3 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index c01069a..fcf3aa7 100644
+index 14f3ef6..be4652e 100644
 --- a/lustre/include/liblustre.h
 +++ b/lustre/include/liblustre.h
 @@ -452,8 +452,17 @@ static inline size_t posix_acl_xattr_size(int count)
@@ -107,7 +107,7 @@ index 24a89eb..d0349e2 100644
                  RETURN(rc);
          }
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 853143f..22a0079 100644
+index 772502b..608813c 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -466,7 +466,11 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)

diff --git a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
index a50e443..60e2f0f 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
@@ -1,4 +1,4 @@
-From ff29e7a02c6467bdd235445a071ee299d65e227f Mon Sep 17 00:00:00 2001
+From 44bfa4137340d5748aa4aa973f8ef444885ab790 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 17:09:15 +0800
 Subject: [PATCH 3/6] LU-2850 kernel: 3.7 uneports sock_map_fd

diff --git a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
index 56ad53b..c488db0 100644
--- a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
@@ -1,4 +1,4 @@
-From d162fc8efd5151fac4ac865df2b9d67c5f080ad7 Mon Sep 17 00:00:00 2001
+From e4706fbb2bad8b3d1f4f99fbcd5a3dd8513dea6b Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 17:51:46 +0800
 Subject: [PATCH 4/6] LU-2850 kernel: 3.7 get/putname uses struct filename

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index 3d4ad6d..baed44a 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,4 +1,4 @@
-From 20c2e930f8317a0500d08f5f15716719113d8a5b Mon Sep 17 00:00:00 2001
+From e40d49bfbbda8196e29d98e380d012ff9d9c3639 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 18:09:42 +0800
 Subject: [PATCH 5/6] LU-2850 kernel: 3.8 upstream removes vmtruncate()
@@ -55,7 +55,7 @@ index 9a7a458..c87afb0 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
-index 9020d77..25f631c 100644
+index db53842..aef8e4b 100644
 --- a/lustre/llite/vvp_io.c
 +++ b/lustre/llite/vvp_io.c
 @@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 8b990df..cacc590 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,6 +1,6 @@
-From 6c10836164d76c6efea7253768d4e18c408a7d6a Mon Sep 17 00:00:00 2001
+From 45927457c2d276951ad1cbf4da785160b36ae3f8 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
-Date: Thu, 14 Mar 2013 09:51:17 +0800
+Date: Mon, 18 Mar 2013 10:47:57 +0800
 Subject: [PATCH 6/6] LU-2850 kernel: 3.8 upstream kills daemonize()
 
 kernel_thread() is a low level kernel function.
@@ -18,12 +18,12 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  libcfs/include/libcfs/user-prim.h          |  5 +-
  libcfs/include/libcfs/winnt/winnt-prim.h   |  4 --
  libcfs/libcfs/Makefile.in                  |  4 +-
- libcfs/libcfs/darwin/darwin-prim.c         | 35 ++++++-------
+ libcfs/libcfs/darwin/darwin-prim.c         | 39 +++++++-------
  libcfs/libcfs/darwin/darwin-utils.c        |  2 +-
  libcfs/libcfs/debug.c                      | 20 ++++----
  libcfs/libcfs/linux/Makefile.am            |  2 +-
  libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
- libcfs/libcfs/linux/linux-prim.c           | 42 ++++++----------
+ libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
  libcfs/libcfs/tracefile.c                  | 15 +++---
  libcfs/libcfs/user-prim.c                  | 38 +++++++-------
  libcfs/libcfs/watchdog.c                   | 25 ++++-----
@@ -48,7 +48,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lnet/klnds/socklnd/socklnd.c               | 19 +++++--
  lnet/klnds/socklnd/socklnd.h               |  2 +-
  lnet/klnds/socklnd/socklnd_cb.c            | 30 ++++-------
- lnet/lnet/acceptor.c                       | 19 ++++---
+ lnet/lnet/acceptor.c                       | 11 ++--
  lnet/lnet/module.c                         | 10 ++--
  lnet/lnet/router.c                         | 20 ++++----
  lnet/selftest/timer.c                      | 11 ++--
@@ -60,7 +60,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/llite/llite_close.c                 | 26 ++++------
  lustre/llite/lloop.c                       | 10 ++--
  lustre/llite/statahead.c                   | 61 +++++++++++-----------
- lustre/mdc/mdc_request.c                   | 62 ++++++++++-------------
+ lustre/mdc/mdc_request.c                   | 34 ++++++-------
  lustre/mdd/mdd_lfsck.c                     |  5 +-
  lustre/mdt/mdt_capa.c                      | 26 +++++-----
  lustre/mgc/mgc_request.c                   | 31 ++++++------
@@ -70,7 +70,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/obdclass/llog_cat.c                 |  2 +-
  lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
  lustre/osp/osp_precreate.c                 | 15 +++---
- lustre/osp/osp_sync.c                      | 10 ++--
+ lustre/osp/osp_sync.c                      |  9 ++--
  lustre/ptlrpc/import.c                     | 34 +++++++------
  lustre/ptlrpc/pinger.c                     | 39 +++++++-------
  lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
@@ -80,7 +80,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 69 files changed, 552 insertions(+), 764 deletions(-)
+ 69 files changed, 536 insertions(+), 745 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
@@ -152,7 +152,7 @@ index 1aeb5aa..31298e1 100644
   * Task struct
   */
 diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
-index 95ec2ab..74ff722 100644
+index 91158bc..c21e2e6 100644
 --- a/libcfs/include/libcfs/posix/libcfs.h
 +++ b/libcfs/include/libcfs/posix/libcfs.h
 @@ -110,6 +110,7 @@
@@ -181,10 +181,10 @@ index 85253d8..c4e806c 100644
  
  uid_t cfs_curproc_uid(void);
 diff --git a/libcfs/include/libcfs/winnt/winnt-prim.h b/libcfs/include/libcfs/winnt/winnt-prim.h
-index 090adf3..154d81a 100644
+index 985af01..e234bba 100644
 --- a/libcfs/include/libcfs/winnt/winnt-prim.h
 +++ b/libcfs/include/libcfs/winnt/winnt-prim.h
-@@ -460,8 +460,6 @@ typedef struct _cfs_thread_context {
+@@ -442,8 +442,6 @@ typedef struct _cfs_thread_context {
      void *              arg;
  } cfs_thread_context_t;
  
@@ -193,7 +193,7 @@ index 090adf3..154d81a 100644
  /*
   * thread creation flags from Linux, not used in winnt
   */
-@@ -479,8 +477,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
+@@ -461,8 +459,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
  
  #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
  
@@ -225,10 +225,10 @@ index 71852cc..ddfadde 100644
  		   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
  		   libcfs_mem.o libcfs_lock.o heap.o
 diff --git a/libcfs/libcfs/darwin/darwin-prim.c b/libcfs/libcfs/darwin/darwin-prim.c
-index 68d1c0d..ff42538 100644
+index 68d1c0d..8e0901f 100644
 --- a/libcfs/libcfs/darwin/darwin-prim.c
 +++ b/libcfs/libcfs/darwin/darwin-prim.c
-@@ -333,24 +333,25 @@ cfs_thread_agent (void)
+@@ -333,24 +333,29 @@ cfs_thread_agent (void)
  
  extern thread_t kernel_thread(task_t task, void (*start)(void));
  
@@ -252,11 +252,15 @@ index 68d1c0d..ff42538 100644
 +	th = kernel_thread(kernel_task, cfs_thread_agent);
 +	thread_arg_release(&cfs_thread_arg);
 +	if (th != THREAD_NULL) {
++		/*
++		 * FIXME: change child thread name...
++		 * cfs_curproc_comm() is already broken. So it is left as is...
 +		va_list args;
 +		va_start(args, namefmt);
 +		snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX,
 +			 namefmt, args);
 +		va_end(args);
++		 */
 +	} else {
                  ret = -1;
 -        return ret;
@@ -413,10 +417,10 @@ index d9d4dc1..0000000
 -}
 -EXPORT_SYMBOL(cfs_create_thread);
 diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index afb4465..d5d62d7 100644
+index afb4465..6da1744 100644
 --- a/libcfs/libcfs/linux/linux-prim.c
 +++ b/libcfs/libcfs/linux/linux-prim.c
-@@ -259,34 +259,19 @@ void cfs_enter_debugger(void)
+@@ -259,34 +259,20 @@ void cfs_enter_debugger(void)
  #endif
  }
  
@@ -445,8 +449,6 @@ index afb4465..d5d62d7 100644
 -        }
 -#else
 -        unshare_fs_struct();
--#endif
--        return 0;
 +int unshare_fs_struct(void)
 +{
 +	struct task_struct *tsk = current;
@@ -457,36 +459,36 @@ index afb4465..d5d62d7 100644
 +	exit_fs(tsk);
 +	tsk->fs = fs;
 +	return 0;
- }
-+#endif
++}
++EXPORT_SYMBOL(unshare_fs_struct);
+ #endif
+-        return 0;
+-}
  
  sigset_t
  cfs_block_allsigs(void)
-@@ -373,8 +358,9 @@ libcfs_arch_cleanup(void)
+@@ -373,8 +359,6 @@ libcfs_arch_cleanup(void)
  EXPORT_SYMBOL(libcfs_arch_init);
  EXPORT_SYMBOL(libcfs_arch_cleanup);
  EXPORT_SYMBOL(cfs_enter_debugger);
 -EXPORT_SYMBOL(cfs_daemonize);
 -EXPORT_SYMBOL(cfs_daemonize_ctxt);
-+#ifndef HAVE_UNSHARE_FS_STRUCT
-+EXPORT_SYMBOL(unshare_fs_struct);
-+#endif
  EXPORT_SYMBOL(cfs_block_allsigs);
  EXPORT_SYMBOL(cfs_block_sigs);
  EXPORT_SYMBOL(cfs_block_sigsinv);
 diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
-index 23e8336..0e2ce2b 100644
+index f31e000..5059f47 100644
 --- a/libcfs/libcfs/tracefile.c
 +++ b/libcfs/libcfs/tracefile.c
-@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
+@@ -991,7 +991,6 @@ static int tracefiled(void *arg)
  
-         /* we're started late enough that we pick up init's fs context */
-         /* this is so broken in uml?  what on earth is going on? */
--        cfs_daemonize("ktracefiled");
+ 	/* we're started late enough that we pick up init's fs context */
+ 	/* this is so broken in uml?  what on earth is going on? */
+-	cfs_daemonize("ktracefiled");
  
  	spin_lock_init(&pc.pc_lock);
  	complete(&tctl->tctl_start);
-@@ -1103,16 +1102,16 @@ int cfs_trace_start_thread(void)
+@@ -1105,16 +1104,16 @@ int cfs_trace_start_thread(void)
  
  	init_completion(&tctl->tctl_start);
  	init_completion(&tctl->tctl_stop);
@@ -1218,10 +1220,10 @@ index eb6c659..4df26ee 100644
  		{
  			CERROR ("failed to spawn scheduling thread: %d\n", rc);
 diff --git a/lnet/klnds/qswlnd/qswlnd_cb.c b/lnet/klnds/qswlnd/qswlnd_cb.c
-index dd5ff27..ba604f4 100644
+index 243918b..50cc744 100644
 --- a/lnet/klnds/qswlnd/qswlnd_cb.c
 +++ b/lnet/klnds/qswlnd/qswlnd_cb.c
-@@ -1656,15 +1656,15 @@ kqswnal_recv (lnet_ni_t     *ni,
+@@ -1655,15 +1655,15 @@ kqswnal_recv (lnet_ni_t     *ni,
  }
  
  int
@@ -1243,7 +1245,7 @@ index dd5ff27..ba604f4 100644
  }
  
  void
-@@ -1683,7 +1683,6 @@ kqswnal_scheduler (void *arg)
+@@ -1682,7 +1682,6 @@ kqswnal_scheduler (void *arg)
          int              counter = 0;
          int              did_something;
  
@@ -1530,10 +1532,10 @@ index b24127d..e624753 100644
  
          CFS_INIT_LIST_HEAD(&enomem_conns);
 diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
-index 9db3571..d6e7316 100644
+index 9e9b236..7eda4ad 100644
 --- a/lnet/lnet/acceptor.c
 +++ b/lnet/lnet/acceptor.c
-@@ -398,7 +398,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
+@@ -389,7 +389,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
  int
  lnet_acceptor(void *arg)
  {
@@ -1541,7 +1543,7 @@ index 9db3571..d6e7316 100644
          cfs_socket_t  *newsock;
          int            rc;
          __u32          magic;
-@@ -408,8 +407,6 @@ lnet_acceptor(void *arg)
+@@ -399,8 +398,6 @@ lnet_acceptor(void *arg)
  
          LASSERT (lnet_acceptor_state.pta_sock == NULL);
  
@@ -1550,32 +1552,21 @@ index 9db3571..d6e7316 100644
          cfs_block_allsigs();
  
          rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock,
-@@ -538,16 +535,18 @@ lnet_acceptor_start(void)
-                 return rc;
-         }
- 
--        if (lnet_count_acceptor_nis() == 0)  /* not required */
--                return 0;
-+	if (lnet_count_acceptor_nis() == 0)  /* not required */
-+		return 0;
+@@ -532,9 +529,11 @@ lnet_acceptor_start(void)
+ 	if (lnet_count_acceptor_nis() == 0)  /* not required */
+ 		return 0;
  
--        rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
--        if (rc2 < 0) {
--                CERROR("Can't start acceptor thread: %d\n", rc);
-+	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
-+				  (void *)(ulong_ptr_t)secure,
-+				  "acceptor_%03ld", secure));
+-	rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
+-	if (rc2 < 0) {
+-		CERROR("Can't start acceptor thread: %d\n", rc);
++ 	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
++ 				  (void *)(ulong_ptr_t)secure,
++ 				  "acceptor_%03ld", secure));
 +	if (IS_ERR_VALUE(rc2)) {
 +		CERROR("Can't start acceptor thread: %ld\n", rc2);
- 		mt_fini_completion(&lnet_acceptor_state.pta_signal);
- 
--                return -ESRCH;
--        }
-+		return -ESRCH;
-+	}
+ 		fini_completion(&lnet_acceptor_state.pta_signal);
  
-         /* wait for acceptor to startup */
- 	mt_wait_for_completion(&lnet_acceptor_state.pta_signal);
+ 		return -ESRCH;
 diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c
 index 770345d..9d57479 100644
 --- a/lnet/lnet/module.c
@@ -1668,7 +1659,7 @@ index a66a336..f2f8262 100644
  	spin_lock(&stt_data.stt_lock);
  	stt_data.stt_nthreads++;
 diff --git a/lnet/ulnds/socklnd/usocklnd.c b/lnet/ulnds/socklnd/usocklnd.c
-index d1e6b7f..04f8de6 100644
+index cc8c4c8..d4d5027 100644
 --- a/lnet/ulnds/socklnd/usocklnd.c
 +++ b/lnet/ulnds/socklnd/usocklnd.c
 @@ -296,14 +296,15 @@ usocklnd_base_startup()
@@ -1973,10 +1964,10 @@ index 1d489e6..5e269b3 100644
  
  void ll_capa_thread_stop(void)
 diff --git a/lustre/llite/llite_close.c b/lustre/llite/llite_close.c
-index 6c897dc..1fc723e 100644
+index 26a2c8c..f1a1415 100644
 --- a/lustre/llite/llite_close.c
 +++ b/lustre/llite/llite_close.c
-@@ -350,12 +350,6 @@ static int ll_close_thread(void *arg)
+@@ -349,12 +349,6 @@ static int ll_close_thread(void *arg)
          struct ll_close_queue *lcq = arg;
          ENTRY;
  
@@ -1989,7 +1980,7 @@ index 6c897dc..1fc723e 100644
  	complete(&lcq->lcq_comp);
  
          while (1) {
-@@ -383,25 +377,25 @@ static int ll_close_thread(void *arg)
+@@ -382,25 +376,25 @@ static int ll_close_thread(void *arg)
  
  int ll_close_thread_start(struct ll_close_queue **lcq_ret)
  {
@@ -2160,7 +2151,7 @@ index 9eea49e..cb11191 100644
                  thread_set_flags(thread, SVC_STOPPED);
                  thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 22a0079..dbe4d71 100644
+index 608813c..bc56549 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
 @@ -1556,13 +1556,6 @@ static int mdc_changelog_send_thread(void *csdata)
@@ -2177,32 +2168,27 @@ index 22a0079..dbe4d71 100644
          OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
          if (cs->cs_buf == NULL)
                  GOTO(out, rc = -ENOMEM);
-@@ -1602,39 +1595,38 @@ out:
-         if (cs->cs_buf)
-                 OBD_FREE(cs->cs_buf, CR_MAXSIZE);
-         OBD_FREE_PTR(cs);
+@@ -1599,12 +1592,10 @@ out:
+ 		llog_cat_close(NULL, llh);
+         if (ctxt)
+                 llog_ctxt_put(ctxt);
+-        if (cs->cs_buf)
+-                OBD_FREE(cs->cs_buf, CR_MAXSIZE);
+-        OBD_FREE_PTR(cs);
 -        /* detach from parent process so we get cleaned up */
 -        cfs_daemonize("cl_send");
-         return rc;
+-        return rc;
++	if (cs->cs_buf)
++		OBD_FREE(cs->cs_buf, CR_MAXSIZE);
++	OBD_FREE_PTR(cs);
++	return rc;
  }
  
  static int mdc_ioc_changelog_send(struct obd_device *obd,
--                                  struct ioc_changelog *icc)
--{
--        struct changelog_show *cs;
--        int rc;
--
--        /* Freed in mdc_changelog_send_thread */
--        OBD_ALLOC_PTR(cs);
--        if (!cs)
--                return -ENOMEM;
--
--        cs->cs_obd = obd;
--        cs->cs_startrec = icc->icc_recno;
--        /* matching cfs_put_file in mdc_changelog_send_thread */
--        cs->cs_fp = cfs_get_fd(icc->icc_id);
--        cs->cs_flags = icc->icc_flags;
--
+@@ -1624,13 +1615,16 @@ static int mdc_ioc_changelog_send(struct obd_device *obd,
+ 	cs->cs_fp = fget(icc->icc_id);
+ 	cs->cs_flags = icc->icc_flags;
+ 
 -        /* New thread because we should return to user app before
 -           writing into our pipe */
 -        rc = cfs_create_thread(mdc_changelog_send_thread, cs, CFS_DAEMON_FLAGS);
@@ -2210,40 +2196,19 @@ index 22a0079..dbe4d71 100644
 -                CDEBUG(D_CHANGELOG, "start changelog thread: %d\n", rc);
 -                return 0;
 -        }
-+				  struct ioc_changelog *icc)
-+{
-+	struct changelog_show *cs;
-+	cfs_task_t *task;
-+
-+	/* Freed in mdc_changelog_send_thread */
-+	OBD_ALLOC_PTR(cs);
-+	if (!cs)
-+		return -ENOMEM;
-+
-+	cs->cs_obd = obd;
-+	cs->cs_startrec = icc->icc_recno;
-+	/* matching cfs_put_file in mdc_changelog_send_thread */
-+	cs->cs_fp = cfs_get_fd(icc->icc_id);
-+	cs->cs_flags = icc->icc_flags;
-+
-+	/* New thread because we should return to user app before
-+	   writing into our pipe */
-+	task = kthread_run(mdc_changelog_send_thread, cs,
-+			       "mdc_clg_send_thread");
-+	if (!IS_ERR(task)) {
++	/*
++	 * New thread because we should return to user app before
++	 * writing into our pipe
++	 */
++        rc = PTR_ERR(kthread_run(mdc_changelog_send_thread, cs,
++				 "mdc_clg_send_thread"));
++	if (!IS_ERR_VALUE(rc)) {
 +		CDEBUG(D_CHANGELOG, "start changelog thread\n");
 +		return 0;
 +	}
  
--        CERROR("Failed to start changelog thread: %d\n", rc);
--        OBD_FREE_PTR(cs);
--        return rc;
-+	CERROR("Failed to start changelog thread: %ld\n", PTR_ERR(task));
-+	OBD_FREE_PTR(cs);
-+	return PTR_ERR(task);
- }
- 
- static int mdc_ioc_hsm_ct_start(struct obd_export *exp,
+         CERROR("Failed to start changelog thread: %d\n", rc);
+         OBD_FREE_PTR(cs);
 diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
 index 152a2d4..f7be2bb 100644
 --- a/lustre/mdd/mdd_lfsck.c
@@ -2565,18 +2530,18 @@ index 405524c..de5e7de 100644
  
  	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
 diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
-index fc67e5c..22650f4 100644
+index 219744f..67863a2 100644
 --- a/lustre/osp/osp_sync.c
 +++ b/lustre/osp/osp_sync.c
-@@ -833,7 +833,6 @@ static int osp_sync_thread(void *_arg)
+@@ -838,7 +838,6 @@ static int osp_sync_thread(void *_arg)
  	struct llog_handle	*llh;
  	struct lu_env		 env;
- 	int			 rc;
+ 	int			 rc, count;
 -	char			 pname[16];
  
  	ENTRY;
  
-@@ -844,9 +843,6 @@ static int osp_sync_thread(void *_arg)
+@@ -849,9 +848,6 @@ static int osp_sync_thread(void *_arg)
  		RETURN(rc);
  	}
  
@@ -2586,22 +2551,14 @@ index fc67e5c..22650f4 100644
  	spin_lock(&d->opd_syn_lock);
  	thread->t_flags = SVC_RUNNING;
  	spin_unlock(&d->opd_syn_lock);
-@@ -1012,6 +1008,7 @@ static void osp_sync_llog_fini(const struct lu_env *env, struct osp_device *d)
- int osp_sync_init(const struct lu_env *env, struct osp_device *d)
- {
- 	struct l_wait_info	 lwi = { 0 };
-+	char			 pname[16];
- 	int			 rc;
- 
- 	ENTRY;
-@@ -1040,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
+@@ -1055,8 +1051,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
  	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
  	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
  
 -	rc = cfs_create_thread(osp_sync_thread, d, 0);
 -	if (rc < 0) {
-+	sprintf(pname, "osp-syn-%u", d->opd_index);
-+	rc = PTR_ERR(kthread_run(osp_sync_thread, d, pname));
++	rc = PTR_ERR(kthread_run(osp_sync_thread, d,
++				 "osp-syn-%u", d->opd_index));
 +	if (IS_ERR_VALUE(rc)) {
  		CERROR("%s: can't start sync thread: rc = %d\n",
  		       d->opd_obd->obd_name, rc);

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 2f86381..405cb70 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -7,7 +7,7 @@ EAPI=5
 WANT_AUTOCONF="2.5"
 WANT_AUTOMAKE="1.10"
 
-inherit git-2 autotools linux-mod linux-info toolchain-funcs
+inherit git-2 autotools linux-mod toolchain-funcs
 
 DESCRIPTION="Lustre is a parallel distributed file system"
 HOMEPAGE="http://wiki.whamcloud.com/"
@@ -42,7 +42,6 @@ PATCHES=(
 
 pkg_setup() {
 	linux-mod_pkg_setup
-	linux-info_pkg_setup
 	ARCH="$(tc-arch-kernel)"
 	ABI="${KERNEL_ABI}"
 }


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-14 11:57 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-14 11:57 UTC (permalink / raw
  To: gentoo-commits

commit:     aa7798c5dc55b786fe3d71397e897253c1d2c0af
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 14 11:52:50 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Mar 14 11:52:50 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=aa7798c5

Now it builds and loads with 3.8

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    9 +++++++
 ...ld-check-header-files-in-generated-uapi-d.patch |    2 +-
 ...-kernel-3.7-kernel-posix-acl-needs-userns.patch |   20 +++++++++++----
 ...3-LU-2850-kernel-3.7-uneports-sock_map_fd.patch |    8 +++---
 ...rnel-3.7-get-putname-uses-struct-filename.patch |   25 ++++++++++++--------
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    8 +++---
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |    6 ++--
 7 files changed, 50 insertions(+), 28 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index e887ab6..a7ad425 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,15 @@
 # $Header: $
 
   14 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,
+  files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch,
+  files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch:
+  Now it builds and loads with 3.8
+
+  14 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch:
   More updates to lustre patches
 

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index 066863b..774f328 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,4 +1,4 @@
-From 4a1a152f4250df1773ad5824ce236a30edcb0fd2 Mon Sep 17 00:00:00 2001
+From b19ad19fb93f7461ec9fbe8c9dc5cd8a18bc9230 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
 Subject: [PATCH 1/6] LU-2850 build: check header files in generated uapi dir

diff --git a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
index 19f39db..d9c8e64 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
+++ b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
@@ -1,4 +1,4 @@
-From 4b7ad00fd26de2fb8b94fa94a9b115ec97724b36 Mon Sep 17 00:00:00 2001
+From e9f9ce30714f5b645e59d08e6d1c6dfeae6254d4 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 16:31:44 +0800
 Subject: [PATCH 2/6] LU-2850 kernel: 3.7 kernel posix acl needs userns
@@ -9,17 +9,25 @@ to user namespace.
 Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: I7d82c51c482daae8a7dbb526b8d72eea2bcf0650
 ---
- lustre/autoconf/lustre-core.m4 | 25 +++++++++++++++++++++++++
+ lustre/autoconf/lustre-core.m4 | 26 ++++++++++++++++++++++++++
  lustre/include/liblustre.h     | 11 ++++++++++-
  lustre/llite/xattr.c           |  6 +++++-
  lustre/mdc/mdc_request.c       |  6 +++++-
- 4 files changed, 45 insertions(+), 3 deletions(-)
+ 4 files changed, 46 insertions(+), 3 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3c773e8..323342a 100644
+index 3c773e8..38d26a3 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2213,6 +2213,28 @@ LB_LINUX_TRY_COMPILE([
+@@ -328,6 +328,7 @@ AC_TRY_RUN([
+         #define __LINUX_POSIX_ACL_H
+ 
+         #ifdef CONFIG_FS_POSIX_ACL
++	struct user_namespace;
+         # include <linux/posix_acl_xattr.h>
+         #endif
+ 
+@@ -2213,6 +2214,28 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -48,7 +56,7 @@ index 3c773e8..323342a 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2391,6 +2413,9 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2391,6 +2414,9 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_DENTRY_OPEN_USE_PATH
  	 LC_HAVE_IOP_ATOMIC_OPEN
  

diff --git a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
index 9cae25b..a50e443 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
@@ -1,4 +1,4 @@
-From fc3eaad30315066fe7936562e6270d18b9811158 Mon Sep 17 00:00:00 2001
+From ff29e7a02c6467bdd235445a071ee299d65e227f Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 17:09:15 +0800
 Subject: [PATCH 3/6] LU-2850 kernel: 3.7 uneports sock_map_fd
@@ -79,10 +79,10 @@ index 0a31b55..c576cdf 100644
  int
  libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask)
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 323342a..3a13190 100644
+index 38d26a3..579ea17 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2235,6 +2235,24 @@ LB_LINUX_TRY_COMPILE([
+@@ -2236,6 +2236,24 @@ LB_LINUX_TRY_COMPILE([
  ])
  
  #
@@ -107,7 +107,7 @@ index 323342a..3a13190 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2415,6 +2433,8 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2416,6 +2434,8 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.7
  	 LC_HAVE_POSIX_ACL_NAMESPACE

diff --git a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
index df891be..56ad53b 100644
--- a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
@@ -1,4 +1,4 @@
-From 7fbe22c137037dcfa65eb4e58e6feef7a30f786e Mon Sep 17 00:00:00 2001
+From d162fc8efd5151fac4ac865df2b9d67c5f080ad7 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 17:51:46 +0800
 Subject: [PATCH 4/6] LU-2850 kernel: 3.7 get/putname uses struct filename
@@ -10,17 +10,17 @@ Signed-off-by: Peng Tao <tao.peng@emc.com>
 Change-Id: Ifc3cfa54220b83b8de5aebfa5464c6efa5525599
 ---
  lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++
- lustre/include/linux/lustre_compat25.h | 37 +++++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h | 42 ++++++++++++++++++++++++++++
  lustre/llite/dir.c                     | 50 +++++++++++++++++-----------------
  lustre/llite/llite_internal.h          |  2 +-
  lustre/llite/namei.c                   |  2 +-
- 5 files changed, 90 insertions(+), 27 deletions(-)
+ 5 files changed, 95 insertions(+), 27 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3a13190..deec2d7 100644
+index 579ea17..9a7a458 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2253,6 +2253,31 @@ AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
+@@ -2254,6 +2254,31 @@ AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
  ])
  
  #
@@ -52,7 +52,7 @@ index 3a13190..deec2d7 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2435,6 +2460,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2436,6 +2461,7 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_HAVE_POSIX_ACL_NAMESPACE
  	 LC_HAVE_SOCK_MAP_FD
  	 LC_HAVE_SOCK_ALLOC_FILE
@@ -61,10 +61,10 @@ index 3a13190..deec2d7 100644
  	 #
  	 if test x$enable_server = xyes ; then
 diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index d25c168..2804183 100644
+index d25c168..dcd4a4f 100644
 --- a/lustre/include/linux/lustre_compat25.h
 +++ b/lustre/include/linux/lustre_compat25.h
-@@ -750,4 +750,41 @@ static inline struct dentry *d_make_root(struct inode *root)
+@@ -750,4 +750,46 @@ static inline struct dentry *d_make_root(struct inode *root)
  }
  #endif
  
@@ -99,9 +99,14 @@ index d25c168..2804183 100644
 +{
 +	return getname(name);
 +}
-+static inline void ll_putname(struct filename *filename)
++static inline void ll_putname(struct filename *name)
 +{
-+	putname(filename);
++	if (name->separate) {
++		__putname(name->name);
++		kfree(name);
++	} else {
++		__putname(name);
++	}
 +}
 +#endif /* !HAVE_STRUCT_FILENAME */
 +

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index c3e66fc..3d4ad6d 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,4 +1,4 @@
-From 5c27eb8309b371907eecd4f5666d513f159c6842 Mon Sep 17 00:00:00 2001
+From 20c2e930f8317a0500d08f5f15716719113d8a5b Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 18:09:42 +0800
 Subject: [PATCH 5/6] LU-2850 kernel: 3.8 upstream removes vmtruncate()
@@ -14,10 +14,10 @@ Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
  2 files changed, 32 insertions(+), 1 deletion(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index deec2d7..94e57f0 100644
+index 9a7a458..c87afb0 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
-@@ -2278,6 +2278,26 @@ EXTRA_KCFLAGS="$tmp_flags"
+@@ -2279,6 +2279,26 @@ EXTRA_KCFLAGS="$tmp_flags"
  ])
  
  #
@@ -44,7 +44,7 @@ index deec2d7..94e57f0 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2462,6 +2482,9 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2463,6 +2483,9 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_HAVE_SOCK_ALLOC_FILE
  	 LC_HAVE_STRUCT_FILENAME
  

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index cae2018..8b990df 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,4 +1,4 @@
-From a8b409cdbb7a95d34746a1d8d387eafc28776a24 Mon Sep 17 00:00:00 2001
+From 6c10836164d76c6efea7253768d4e18c408a7d6a Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Thu, 14 Mar 2013 09:51:17 +0800
 Subject: [PATCH 6/6] LU-2850 kernel: 3.8 upstream kills daemonize()
@@ -413,7 +413,7 @@ index d9d4dc1..0000000
 -}
 -EXPORT_SYMBOL(cfs_create_thread);
 diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index afb4465..7e23256 100644
+index afb4465..d5d62d7 100644
 --- a/libcfs/libcfs/linux/linux-prim.c
 +++ b/libcfs/libcfs/linux/linux-prim.c
 @@ -259,34 +259,19 @@ void cfs_enter_debugger(void)
@@ -469,7 +469,7 @@ index afb4465..7e23256 100644
 -EXPORT_SYMBOL(cfs_daemonize);
 -EXPORT_SYMBOL(cfs_daemonize_ctxt);
 +#ifndef HAVE_UNSHARE_FS_STRUCT
-+	EXPORT_SYMBOL(unshare_fs_struct);
++EXPORT_SYMBOL(unshare_fs_struct);
 +#endif
  EXPORT_SYMBOL(cfs_block_allsigs);
  EXPORT_SYMBOL(cfs_block_sigs);


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-14 10:21 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-14 10:21 UTC (permalink / raw
  To: gentoo-commits

commit:     9ba6bfec44d634ea7b4bcb4e71b63149d5647d75
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 14 10:20:43 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Mar 14 10:20:43 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=9ba6bfec

More updates to lustre patches

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |    4 ++++
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch |   14 ++++++++------
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 1389a15..e887ab6 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -3,6 +3,10 @@
 # $Header: $
 
   14 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch:
+  More updates to lustre patches
+
+  14 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
   +files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
   files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
   files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
index 03560c6..cae2018 100644
--- a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -1,4 +1,4 @@
-From a93fa83f921bfcb3ca5f2b8d8a7efad3c6075fa8 Mon Sep 17 00:00:00 2001
+From a8b409cdbb7a95d34746a1d8d387eafc28776a24 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Thu, 14 Mar 2013 09:51:17 +0800
 Subject: [PATCH 6/6] LU-2850 kernel: 3.8 upstream kills daemonize()
@@ -23,7 +23,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  libcfs/libcfs/debug.c                      | 20 ++++----
  libcfs/libcfs/linux/Makefile.am            |  2 +-
  libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
- libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
+ libcfs/libcfs/linux/linux-prim.c           | 42 ++++++----------
  libcfs/libcfs/tracefile.c                  | 15 +++---
  libcfs/libcfs/user-prim.c                  | 38 +++++++-------
  libcfs/libcfs/watchdog.c                   | 25 ++++-----
@@ -80,7 +80,7 @@ Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
  lustre/quota/qmt_lock.c                    | 17 +++----
  lustre/quota/qsd_reint.c                   |  6 +--
  lustre/quota/qsd_writeback.c               | 16 +++---
- 69 files changed, 550 insertions(+), 764 deletions(-)
+ 69 files changed, 552 insertions(+), 764 deletions(-)
  delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
 
 diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
@@ -413,7 +413,7 @@ index d9d4dc1..0000000
 -}
 -EXPORT_SYMBOL(cfs_create_thread);
 diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
-index afb4465..e4ac0db 100644
+index afb4465..7e23256 100644
 --- a/libcfs/libcfs/linux/linux-prim.c
 +++ b/libcfs/libcfs/linux/linux-prim.c
 @@ -259,34 +259,19 @@ void cfs_enter_debugger(void)
@@ -462,13 +462,15 @@ index afb4465..e4ac0db 100644
  
  sigset_t
  cfs_block_allsigs(void)
-@@ -373,8 +358,7 @@ libcfs_arch_cleanup(void)
+@@ -373,8 +358,9 @@ libcfs_arch_cleanup(void)
  EXPORT_SYMBOL(libcfs_arch_init);
  EXPORT_SYMBOL(libcfs_arch_cleanup);
  EXPORT_SYMBOL(cfs_enter_debugger);
 -EXPORT_SYMBOL(cfs_daemonize);
 -EXPORT_SYMBOL(cfs_daemonize_ctxt);
-+EXPORT_SYMBOL(unshare_fs_struct);
++#ifndef HAVE_UNSHARE_FS_STRUCT
++	EXPORT_SYMBOL(unshare_fs_struct);
++#endif
  EXPORT_SYMBOL(cfs_block_allsigs);
  EXPORT_SYMBOL(cfs_block_sigs);
  EXPORT_SYMBOL(cfs_block_sigsinv);


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-14  9:47 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-14  9:47 UTC (permalink / raw
  To: gentoo-commits

commit:     3df6d8eb3a29e74970e55a7951871121d306be6f
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Mar 14 09:46:40 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Mar 14 09:46:40 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=3df6d8eb

Update lustre patches. Now it builds against linux 3.8

Package-Manager: portage-2.2.0_alpha166
RepoMan-Options: --force

---
 sys-cluster/lustre/ChangeLog                       |   10 +
 ...ld-check-header-files-in-generated-uapi-d.patch |    8 +-
 ...-kernel-3.7-kernel-posix-acl-needs-userns.patch |   16 +-
 ...3-LU-2850-kernel-3.7-uneports-sock_map_fd.patch |   10 +-
 ...rnel-3.7-get-putname-uses-struct-filename.patch |   26 +-
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |    8 +-
 ...-2850-kernel-3.8-upstream-kills-daemonize.patch | 3040 ++++++++++++++++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    1 +
 8 files changed, 3085 insertions(+), 34 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 4d76001..1389a15 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,16 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  14 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch,
+  files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,
+  files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch,
+  files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch,
+  files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  lustre-9999.ebuild:
+  Update lustre patches. Now it builds against linux 3.8
+
   07 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org> lustre-9999.ebuild:
   Fix typo
 

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
index c91788c..066863b 100644
--- a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -1,7 +1,7 @@
-From 26da95a5b9e0502b1001211370fa01ad17f8ef74 Mon Sep 17 00:00:00 2001
+From 4a1a152f4250df1773ad5824ce236a30edcb0fd2 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 18:29:34 +0800
-Subject: [PATCH 1/5] LU-2850 build: check header files in generated uapi dir
+Subject: [PATCH 1/6] LU-2850 build: check header files in generated uapi dir
 
 Upstream moved UAPI headers into generated/uapi directory since
 v3.7. We need to check/include necessary header files there.
@@ -30,7 +30,7 @@ index 883d13c..8f3518b 100644
  	include/config/MARKER $@
  endif # LINUX
 diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
-index db58704..15e2aa0 100644
+index 4c0a581..0873c05 100644
 --- a/build/autoconf/lustre-build-linux.m4
 +++ b/build/autoconf/lustre-build-linux.m4
 @@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
@@ -132,7 +132,7 @@ index fd0f6d2..d657399 100644
  	# enable extensive workarounds to get this to build
  	# modules
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index f290ea2..898f2c7 100644
+index 08f5e29..3c773e8 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -319,7 +319,7 @@ AC_DEFUN([LC_BIT_SPINLOCK_H],

diff --git a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
index 5ff415f..19f39db 100644
--- a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
+++ b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
@@ -1,7 +1,7 @@
-From b73192ab79f853231de5809ff40e4fd269060247 Mon Sep 17 00:00:00 2001
+From 4b7ad00fd26de2fb8b94fa94a9b115ec97724b36 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 16:31:44 +0800
-Subject: [PATCH 2/5] LU-2850 kernel: 3.7 kernel posix acl needs userns
+Subject: [PATCH 2/6] LU-2850 kernel: 3.7 kernel posix acl needs userns
 
 With upstream commit 5f3a4a28, kernel posix acl adds support
 to user namespace.
@@ -16,7 +16,7 @@ Change-Id: I7d82c51c482daae8a7dbb526b8d72eea2bcf0650
  4 files changed, 45 insertions(+), 3 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 898f2c7..f424f87 100644
+index 3c773e8..323342a 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2213,6 +2213,28 @@ LB_LINUX_TRY_COMPILE([
@@ -48,7 +48,7 @@ index 898f2c7..f424f87 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2390,6 +2412,9 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2391,6 +2413,9 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_DENTRY_OPEN_USE_PATH
  	 LC_HAVE_IOP_ATOMIC_OPEN
  
@@ -59,7 +59,7 @@ index 898f2c7..f424f87 100644
  	 if test x$enable_server = xyes ; then
  		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
 diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
-index ac4414e..1ae9f7b 100644
+index c01069a..fcf3aa7 100644
 --- a/lustre/include/liblustre.h
 +++ b/lustre/include/liblustre.h
 @@ -452,8 +452,17 @@ static inline size_t posix_acl_xattr_size(int count)
@@ -82,7 +82,7 @@ index ac4414e..1ae9f7b 100644
          return NULL;
  }
 diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
-index 1d9923e..a311d65 100644
+index 24a89eb..d0349e2 100644
 --- a/lustre/llite/xattr.c
 +++ b/lustre/llite/xattr.c
 @@ -345,7 +345,11 @@ int ll_getxattr_common(struct inode *inode, const char *name,
@@ -99,10 +99,10 @@ index 1d9923e..a311d65 100644
                  RETURN(rc);
          }
 diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
-index 399c268..dcbab71 100644
+index 853143f..22a0079 100644
 --- a/lustre/mdc/mdc_request.c
 +++ b/lustre/mdc/mdc_request.c
-@@ -448,7 +448,11 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
+@@ -466,7 +466,11 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
          if (!buf)
                  RETURN(-EPROTO);
  

diff --git a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
index eaae3cb..9cae25b 100644
--- a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
+++ b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
@@ -1,7 +1,7 @@
-From e095235edfe1339ccda0a61059ee4d3a2016e4f6 Mon Sep 17 00:00:00 2001
+From fc3eaad30315066fe7936562e6270d18b9811158 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 17:09:15 +0800
-Subject: [PATCH 3/5] LU-2850 kernel: 3.7 uneports sock_map_fd
+Subject: [PATCH 3/6] LU-2850 kernel: 3.7 uneports sock_map_fd
 
 And exports sock_alloc_file. We should use sock_alloc_file instead.
 Besides, there is no need to mess with fd table.
@@ -14,7 +14,7 @@ Change-Id: Iec3c8bc0d8fcb9d8f821dd9f0a82445e1e1096ff
  2 files changed, 58 insertions(+), 1 deletion(-)
 
 diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
-index cd07648..ce93aa8 100644
+index 0a31b55..c576cdf 100644
 --- a/libcfs/libcfs/linux/linux-tcpip.c
 +++ b/libcfs/libcfs/linux/linux-tcpip.c
 @@ -41,6 +41,40 @@
@@ -79,7 +79,7 @@ index cd07648..ce93aa8 100644
  int
  libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask)
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index f424f87..3d62a4b 100644
+index 323342a..3a13190 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2235,6 +2235,24 @@ LB_LINUX_TRY_COMPILE([
@@ -107,7 +107,7 @@ index f424f87..3d62a4b 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2414,6 +2432,8 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2415,6 +2433,8 @@ AC_DEFUN([LC_PROG_LINUX],
  
  	 # 3.7
  	 LC_HAVE_POSIX_ACL_NAMESPACE

diff --git a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
index bfc1439..df891be 100644
--- a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
+++ b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
@@ -1,7 +1,7 @@
-From 5d050ddbf8ebe5104e0320b9e1028411e495a1fe Mon Sep 17 00:00:00 2001
+From 7fbe22c137037dcfa65eb4e58e6feef7a30f786e Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Wed, 27 Feb 2013 17:51:46 +0800
-Subject: [PATCH 4/5] LU-2850 kernel: 3.7 get/putname uses struct filename
+Subject: [PATCH 4/6] LU-2850 kernel: 3.7 get/putname uses struct filename
 
 3.7 vfs introduces struct filename and changes getname/putname
 parameter to use it.
@@ -17,7 +17,7 @@ Change-Id: Ifc3cfa54220b83b8de5aebfa5464c6efa5525599
  5 files changed, 90 insertions(+), 27 deletions(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 3d62a4b..0c177b1 100644
+index 3a13190..deec2d7 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2253,6 +2253,31 @@ AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
@@ -52,7 +52,7 @@ index 3d62a4b..0c177b1 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2434,6 +2459,7 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2435,6 +2460,7 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_HAVE_POSIX_ACL_NAMESPACE
  	 LC_HAVE_SOCK_MAP_FD
  	 LC_HAVE_SOCK_ALLOC_FILE
@@ -61,7 +61,7 @@ index 3d62a4b..0c177b1 100644
  	 #
  	 if test x$enable_server = xyes ; then
 diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
-index e300597..d62646e 100644
+index d25c168..2804183 100644
 --- a/lustre/include/linux/lustre_compat25.h
 +++ b/lustre/include/linux/lustre_compat25.h
 @@ -750,4 +750,41 @@ static inline struct dentry *d_make_root(struct inode *root)
@@ -107,10 +107,10 @@ index e300597..d62646e 100644
 +
  #endif /* _COMPAT25_H */
 diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
-index 466d259..49b159a 100644
+index a3a514c..71c5103 100644
 --- a/lustre/llite/dir.c
 +++ b/lustre/llite/dir.c
-@@ -1406,7 +1406,7 @@ free_lmv:
+@@ -1417,7 +1417,7 @@ free_lmv:
  		RETURN(rc);
  	}
  	case LL_IOC_REMOVE_ENTRY: {
@@ -119,7 +119,7 @@ index 466d259..49b159a 100644
  		int		 namelen = 0;
  		int		 rc;
  
-@@ -1418,18 +1418,18 @@ free_lmv:
+@@ -1429,18 +1429,18 @@ free_lmv:
  		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
  			return -ENOTSUPP;
  
@@ -143,7 +143,7 @@ index 466d259..49b159a 100644
  		RETURN(rc);
  	}
  	case LL_IOC_LOV_SWAP_LAYOUTS:
-@@ -1440,21 +1440,21 @@ out_rmdir:
+@@ -1451,21 +1451,21 @@ out_rmdir:
          case LL_IOC_MDC_GETINFO:
          case IOC_MDC_GETFILEINFO:
          case IOC_MDC_GETFILESTRIPE: {
@@ -180,7 +180,7 @@ index 466d259..49b159a 100644
                  } else {
                          rc = ll_dir_getstripe(inode, &lmm, &lmmsize, &request);
                  }
-@@ -1514,10 +1514,10 @@ out_rmdir:
+@@ -1525,10 +1525,10 @@ out_rmdir:
  
                  EXIT;
          out_req:
@@ -196,7 +196,7 @@ index 466d259..49b159a 100644
          case IOC_LOV_GETINFO: {
                  struct lov_user_mds_data *lumd;
 diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
-index 9329d6c..a577f36 100644
+index 6d41614..2ac22b0 100644
 --- a/lustre/llite/llite_internal.h
 +++ b/lustre/llite/llite_internal.h
 @@ -705,7 +705,7 @@ struct lookup_intent *ll_convert_intent(struct open_intent *oit,
@@ -209,10 +209,10 @@ index 9329d6c..a577f36 100644
  /* llite/rw.c */
  int ll_prepare_write(struct file *, struct page *, unsigned from, unsigned to);
 diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
-index 3bcf3ff..6c99a7c 100644
+index 1477790..11daf0c 100644
 --- a/lustre/llite/namei.c
 +++ b/lustre/llite/namei.c
-@@ -1142,7 +1142,7 @@ static int ll_rmdir_generic(struct inode *dir, struct dentry *dparent,
+@@ -1146,7 +1146,7 @@ static int ll_rmdir_generic(struct inode *dir, struct dentry *dparent,
  /**
   * Remove dir entry
   **/

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
index c19bb70..c3e66fc 100644
--- a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -1,7 +1,7 @@
-From 89da0781847c0eb2efd0556519560a41f352b57f Mon Sep 17 00:00:00 2001
+From 5c27eb8309b371907eecd4f5666d513f159c6842 Mon Sep 17 00:00:00 2001
 From: Peng Tao <tao.peng@emc.com>
 Date: Tue, 26 Feb 2013 18:09:42 +0800
-Subject: [PATCH 5/5] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+Subject: [PATCH 5/6] LU-2850 kernel: 3.8 upstream removes vmtruncate()
 
 vmtruncate() is removed since upstream commit b9f61c3.
 We can open code is for llite though.
@@ -14,7 +14,7 @@ Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
  2 files changed, 32 insertions(+), 1 deletion(-)
 
 diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
-index 0c177b1..290ac89 100644
+index deec2d7..94e57f0 100644
 --- a/lustre/autoconf/lustre-core.m4
 +++ b/lustre/autoconf/lustre-core.m4
 @@ -2278,6 +2278,26 @@ EXTRA_KCFLAGS="$tmp_flags"
@@ -44,7 +44,7 @@ index 0c177b1..290ac89 100644
  # LC_PROG_LINUX
  #
  # Lustre linux kernel checks
-@@ -2461,6 +2481,9 @@ AC_DEFUN([LC_PROG_LINUX],
+@@ -2462,6 +2482,9 @@ AC_DEFUN([LC_PROG_LINUX],
  	 LC_HAVE_SOCK_ALLOC_FILE
  	 LC_HAVE_STRUCT_FILENAME
  

diff --git a/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
new file mode 100644
index 0000000..03560c6
--- /dev/null
+++ b/sys-cluster/lustre/files/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch
@@ -0,0 +1,3040 @@
+From a93fa83f921bfcb3ca5f2b8d8a7efad3c6075fa8 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Thu, 14 Mar 2013 09:51:17 +0800
+Subject: [PATCH 6/6] LU-2850 kernel: 3.8 upstream kills daemonize()
+
+kernel_thread() is a low level kernel function.
+Instead of calling kernel_thread() and relying on daemonize()
+to create new kernel threads, we should really switch to
+kthread_run() and elimilate daemonize().
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I9f977bfc5d58192957d8c8d634204f4910edfa2a
+---
+ libcfs/include/libcfs/darwin/darwin-prim.h |  6 +--
+ libcfs/include/libcfs/libcfs.h             | 13 +----
+ libcfs/include/libcfs/linux/linux-prim.h   |  9 ----
+ libcfs/include/libcfs/posix/libcfs.h       |  1 +
+ libcfs/include/libcfs/user-prim.h          |  5 +-
+ libcfs/include/libcfs/winnt/winnt-prim.h   |  4 --
+ libcfs/libcfs/Makefile.in                  |  4 +-
+ libcfs/libcfs/darwin/darwin-prim.c         | 35 ++++++-------
+ libcfs/libcfs/darwin/darwin-utils.c        |  2 +-
+ libcfs/libcfs/debug.c                      | 20 ++++----
+ libcfs/libcfs/linux/Makefile.am            |  2 +-
+ libcfs/libcfs/linux/linux-lwt.c            | 81 ------------------------------
+ libcfs/libcfs/linux/linux-prim.c           | 40 +++++----------
+ libcfs/libcfs/tracefile.c                  | 15 +++---
+ libcfs/libcfs/user-prim.c                  | 38 +++++++-------
+ libcfs/libcfs/watchdog.c                   | 25 ++++-----
+ libcfs/libcfs/winnt/winnt-prim.c           | 27 ++++------
+ libcfs/libcfs/winnt/winnt-tcpip.c          |  8 +--
+ libcfs/libcfs/workitem.c                   | 26 +++++-----
+ lnet/klnds/gnilnd/gnilnd_cb.c              |  4 --
+ lnet/klnds/gnilnd/gnilnd_conn.c            |  6 ---
+ lnet/klnds/gnilnd/gnilnd_stack.c           |  1 -
+ lnet/klnds/mxlnd/mxlnd.c                   | 34 ++++++++-----
+ lnet/klnds/mxlnd/mxlnd_cb.c                | 11 ----
+ lnet/klnds/o2iblnd/o2iblnd.c               | 13 +++--
+ lnet/klnds/o2iblnd/o2iblnd.h               |  2 +-
+ lnet/klnds/o2iblnd/o2iblnd_cb.c            | 23 +++------
+ lnet/klnds/ptllnd/ptllnd.c                 |  5 +-
+ lnet/klnds/ptllnd/ptllnd_cb.c              | 25 ++++-----
+ lnet/klnds/qswlnd/qswlnd.c                 |  3 +-
+ lnet/klnds/qswlnd/qswlnd_cb.c              | 13 +++--
+ lnet/klnds/ralnd/ralnd.c                   | 10 ++--
+ lnet/klnds/ralnd/ralnd.h                   |  2 +-
+ lnet/klnds/ralnd/ralnd_cb.c                | 19 ++-----
+ lnet/klnds/socklnd/socklnd.c               | 19 +++++--
+ lnet/klnds/socklnd/socklnd.h               |  2 +-
+ lnet/klnds/socklnd/socklnd_cb.c            | 30 ++++-------
+ lnet/lnet/acceptor.c                       | 19 ++++---
+ lnet/lnet/module.c                         | 10 ++--
+ lnet/lnet/router.c                         | 20 ++++----
+ lnet/selftest/timer.c                      | 11 ++--
+ lnet/ulnds/socklnd/usocklnd.c              | 17 ++++---
+ lustre/ldlm/ldlm_lib.c                     | 31 +++++-------
+ lustre/ldlm/ldlm_lockd.c                   | 41 +++++++--------
+ lustre/ldlm/ldlm_pool.c                    | 53 +++++++++----------
+ lustre/llite/llite_capa.c                  | 25 +++++----
+ lustre/llite/llite_close.c                 | 26 ++++------
+ lustre/llite/lloop.c                       | 10 ++--
+ lustre/llite/statahead.c                   | 61 +++++++++++-----------
+ lustre/mdc/mdc_request.c                   | 62 ++++++++++-------------
+ lustre/mdd/mdd_lfsck.c                     |  5 +-
+ lustre/mdt/mdt_capa.c                      | 26 +++++-----
+ lustre/mgc/mgc_request.c                   | 31 ++++++------
+ lustre/mgs/mgs_nids.c                      | 13 ++---
+ lustre/obdclass/genops.c                   | 22 +++-----
+ lustre/obdclass/llog.c                     |  8 +--
+ lustre/obdclass/llog_cat.c                 |  2 +-
+ lustre/osd-ldiskfs/osd_scrub.c             |  5 +-
+ lustre/osp/osp_precreate.c                 | 15 +++---
+ lustre/osp/osp_sync.c                      | 10 ++--
+ lustre/ptlrpc/import.c                     | 34 +++++++------
+ lustre/ptlrpc/pinger.c                     | 39 +++++++-------
+ lustre/ptlrpc/ptlrpcd.c                    | 25 +++++----
+ lustre/ptlrpc/recov_thread.c               | 40 ++++++++-------
+ lustre/ptlrpc/sec_gc.c                     | 12 ++---
+ lustre/ptlrpc/service.c                    | 19 ++++---
+ lustre/quota/qmt_lock.c                    | 17 +++----
+ lustre/quota/qsd_reint.c                   |  6 +--
+ lustre/quota/qsd_writeback.c               | 16 +++---
+ 69 files changed, 550 insertions(+), 764 deletions(-)
+ delete mode 100644 libcfs/libcfs/linux/linux-lwt.c
+
+diff --git a/libcfs/include/libcfs/darwin/darwin-prim.h b/libcfs/include/libcfs/darwin/darwin-prim.h
+index 7bc7af3..583e257 100644
+--- a/libcfs/include/libcfs/darwin/darwin-prim.h
++++ b/libcfs/include/libcfs/darwin/darwin-prim.h
+@@ -202,10 +202,8 @@ extern task_t	kernel_task;
+ 
+ #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
+ 
+-#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
+-
+-extern int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flag);
+-
++extern cfs_task_t kthread_run(cfs_thread_t func, void *arg,
++			      const char namefmt[], ...);
+ 
+ /*
+  * Wait Queue implementation
+diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h
+index 2375ed9..34c36a3 100644
+--- a/libcfs/include/libcfs/libcfs.h
++++ b/libcfs/include/libcfs/libcfs.h
+@@ -226,8 +226,7 @@ void cfs_enter_debugger(void);
+ /*
+  * Defined by platform
+  */
+-void cfs_daemonize(char *str);
+-int cfs_daemonize_ctxt(char *str);
++int unshare_fs_struct(void);
+ cfs_sigset_t cfs_get_blocked_sigs(void);
+ cfs_sigset_t cfs_block_allsigs(void);
+ cfs_sigset_t cfs_block_sigs(unsigned long sigs);
+@@ -236,16 +235,6 @@ void cfs_restore_sigs(cfs_sigset_t);
+ int cfs_signal_pending(void);
+ void cfs_clear_sigpending(void);
+ 
+-/*
+- * XXX Liang:
+- * these macros should be removed in the future,
+- * we keep them just for keeping libcfs compatible
+- * with other branches.
+- */
+-#define libcfs_daemonize(s)     cfs_daemonize(s)
+-#define cfs_sigmask_lock(f)     do { f= 0; } while (0)
+-#define cfs_sigmask_unlock(f)   do { f= 0; } while (0)
+-
+ int convert_server_error(__u64 ecode);
+ int convert_client_oflag(int cflag, int *result);
+ 
+diff --git a/libcfs/include/libcfs/linux/linux-prim.h b/libcfs/include/libcfs/linux/linux-prim.h
+index 1aeb5aa..31298e1 100644
+--- a/libcfs/include/libcfs/linux/linux-prim.h
++++ b/libcfs/include/libcfs/linux/linux-prim.h
+@@ -183,15 +183,6 @@ typedef long                            cfs_task_state_t;
+ 
+ #define CFS_DECL_WAITQ(wq)		DECLARE_WAIT_QUEUE_HEAD(wq)
+ 
+-#define cfs_kthread_run(fn, data, fmt, arg...) kthread_run(fn, data, fmt, ##arg)
+-
+-/* Kernel thread */
+-typedef int (*cfs_thread_t)(void *);
+-
+-#define CFS_DAEMON_FLAGS (CLONE_VM | CLONE_FILES)
+-extern int cfs_create_thread(int (*fn)(void *),
+-                             void *arg, unsigned long flags);
+-
+ /*
+  * Task struct
+  */
+diff --git a/libcfs/include/libcfs/posix/libcfs.h b/libcfs/include/libcfs/posix/libcfs.h
+index 95ec2ab..74ff722 100644
+--- a/libcfs/include/libcfs/posix/libcfs.h
++++ b/libcfs/include/libcfs/posix/libcfs.h
+@@ -110,6 +110,7 @@
+ typedef unsigned long long cfs_cycles_t;
+ 
+ #define IS_ERR(a) ((unsigned long)(a) > (unsigned long)-1000L)
++#define IS_ERR_VALUE(a) (IS_ERR(a))
+ #define PTR_ERR(a) ((long)(a))
+ #define ERR_PTR(a) ((void*)((long)(a)))
+ 
+diff --git a/libcfs/include/libcfs/user-prim.h b/libcfs/include/libcfs/user-prim.h
+index 85253d8..c4e806c 100644
+--- a/libcfs/include/libcfs/user-prim.h
++++ b/libcfs/include/libcfs/user-prim.h
+@@ -157,9 +157,10 @@ static inline int cfs_psdev_deregister(cfs_psdev_t *foo)
+ 
+ #ifdef HAVE_LIBPTHREAD
+ typedef int (*cfs_thread_t)(void *);
+-int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags);
++void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...);
+ #else
+-#define cfs_create_thread(l,m) LBUG()
++/* Fine, crash, but stop giving me compile warnings */
++#define kthread_run(f, a, n, ...) LBUG()
+ #endif
+ 
+ uid_t cfs_curproc_uid(void);
+diff --git a/libcfs/include/libcfs/winnt/winnt-prim.h b/libcfs/include/libcfs/winnt/winnt-prim.h
+index 090adf3..154d81a 100644
+--- a/libcfs/include/libcfs/winnt/winnt-prim.h
++++ b/libcfs/include/libcfs/winnt/winnt-prim.h
+@@ -460,8 +460,6 @@ typedef struct _cfs_thread_context {
+     void *              arg;
+ } cfs_thread_context_t;
+ 
+-int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
+-
+ /*
+  * thread creation flags from Linux, not used in winnt
+  */
+@@ -479,8 +477,6 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag);
+ 
+ #define CLONE_SIGNAL    (CLONE_SIGHAND | CLONE_THREAD)
+ 
+-#define CFS_DAEMON_FLAGS (CLONE_VM|CLONE_FILES)
+-
+ /*
+  * group_info: linux/sched.h
+  */
+diff --git a/libcfs/libcfs/Makefile.in b/libcfs/libcfs/Makefile.in
+index 71852cc..ddfadde 100644
+--- a/libcfs/libcfs/Makefile.in
++++ b/libcfs/libcfs/Makefile.in
+@@ -3,7 +3,7 @@ MODULES = libcfs
+ libcfs-linux-objs := linux-tracefile.o linux-debug.o
+ libcfs-linux-objs += linux-prim.o linux-mem.o linux-cpu.o
+ libcfs-linux-objs += linux-fs.o linux-sync.o linux-tcpip.o
+-libcfs-linux-objs += linux-lwt.o linux-proc.o linux-curproc.o
++libcfs-linux-objs += linux-proc.o linux-curproc.o
+ libcfs-linux-objs += linux-utils.o linux-module.o
+ libcfs-linux-objs += linux-crypto.o linux-crypto-crc32.o
+ libcfs-linux-objs += linux-crypto-adler.o
+@@ -29,7 +29,7 @@ sources:
+ 
+ libcfs-linux-objs := $(addprefix linux/,$(libcfs-linux-objs))
+ 
+-libcfs-all-objs := debug.o fail.o nidstrings.o lwt.o module.o tracefile.o \
++libcfs-all-objs := debug.o fail.o nidstrings.o module.o tracefile.o \
+ 		   watchdog.o libcfs_string.o hash.o kernel_user_comm.o \
+ 		   prng.o workitem.o upcall_cache.o libcfs_cpu.o \
+ 		   libcfs_mem.o libcfs_lock.o heap.o
+diff --git a/libcfs/libcfs/darwin/darwin-prim.c b/libcfs/libcfs/darwin/darwin-prim.c
+index 68d1c0d..ff42538 100644
+--- a/libcfs/libcfs/darwin/darwin-prim.c
++++ b/libcfs/libcfs/darwin/darwin-prim.c
+@@ -333,24 +333,25 @@ cfs_thread_agent (void)
+ 
+ extern thread_t kernel_thread(task_t task, void (*start)(void));
+ 
+-int
+-cfs_create_thread(cfs_thread_t  func, void *arg, unsigned long flag)
+-{
+-        int ret = 0;
+-        thread_t th = NULL;
+-
+-        thread_arg_hold(&cfs_thread_arg, func, arg);
+-        th = kernel_thread(kernel_task, cfs_thread_agent);
+-        thread_arg_release(&cfs_thread_arg);
+-        if (th == THREAD_NULL)
++cfs_task_t
++kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
++{
++	int ret = 0;
++	thread_t th = NULL;
++
++	thread_arg_hold(&cfs_thread_arg, func, arg);
++	th = kernel_thread(kernel_task, cfs_thread_agent);
++	thread_arg_release(&cfs_thread_arg);
++	if (th != THREAD_NULL) {
++		va_list args;
++		va_start(args, namefmt);
++		snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX,
++			 namefmt, args);
++		va_end(args);
++	} else {
+                 ret = -1;
+-        return ret;
+-}
+-
+-void cfs_daemonize(char *str)
+-{
+-        snprintf(cfs_curproc_comm(), CFS_CURPROC_COMM_MAX, "%s", str);
+-        return;
++	}
++	return (cfs_task_t)((long)ret);
+ }
+ 
+ /*
+diff --git a/libcfs/libcfs/darwin/darwin-utils.c b/libcfs/libcfs/darwin/darwin-utils.c
+index c66f8e8..909b586 100644
+--- a/libcfs/libcfs/darwin/darwin-utils.c
++++ b/libcfs/libcfs/darwin/darwin-utils.c
+@@ -531,7 +531,7 @@ static int is_last_frame(void *addr)
+ 		return 1;
+ 	else if (is_addr_in_range(addr, trap, syscall_trace))
+ 		return 1;
+-	else if (is_addr_in_range(addr, cfs_thread_agent, cfs_create_thread))
++	else if (is_addr_in_range(addr, cfs_thread_agent, kthread_run))
+ 		return 1;
+ 	else
+ 		return 0;
+diff --git a/libcfs/libcfs/debug.c b/libcfs/libcfs/debug.c
+index f503781..16a8e99 100644
+--- a/libcfs/libcfs/debug.c
++++ b/libcfs/libcfs/debug.c
+@@ -367,16 +367,16 @@ void libcfs_debug_dumplog(void)
+         /* we're being careful to ensure that the kernel thread is
+          * able to set our state to running as it exits before we
+          * get to schedule() */
+-        cfs_waitlink_init(&wait);
+-        cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
+-        cfs_waitq_add(&debug_ctlwq, &wait);
+-
+-        dumper = cfs_kthread_run(libcfs_debug_dumplog_thread,
+-                                 (void*)(long)cfs_curproc_pid(),
+-                                 "libcfs_debug_dumper");
+-        if (IS_ERR(dumper))
+-                printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
+-                       " %ld\n", PTR_ERR(dumper));
++	cfs_waitlink_init(&wait);
++	cfs_set_current_state(CFS_TASK_INTERRUPTIBLE);
++	cfs_waitq_add(&debug_ctlwq, &wait);
++
++	dumper = kthread_run(libcfs_debug_dumplog_thread,
++			     (void *)(long)cfs_curproc_pid(),
++			     "libcfs_debug_dumper");
++	if (IS_ERR(dumper))
++		printk(CFS_KERN_ERR "LustreError: cannot start log dump thread:"
++		       " %ld\n", PTR_ERR(dumper));
+         else
+                 cfs_waitq_wait(&wait, CFS_TASK_INTERRUPTIBLE);
+ 
+diff --git a/libcfs/libcfs/linux/Makefile.am b/libcfs/libcfs/linux/Makefile.am
+index bb75462..3c0209f 100644
+--- a/libcfs/libcfs/linux/Makefile.am
++++ b/libcfs/libcfs/linux/Makefile.am
+@@ -1,4 +1,4 @@
+-EXTRA_DIST = linux-debug.c linux-lwt.c linux-prim.c linux-tracefile.c	\
++EXTRA_DIST = linux-debug.c linux-prim.c linux-tracefile.c	\
+ 	linux-fs.c linux-mem.c linux-proc.c linux-utils.c linux-lock.c	\
+ 	linux-module.c linux-sync.c linux-curproc.c linux-tcpip.c	\
+ 	linux-cpu.c linux-crypto.c linux-crypto-crc32.c linux-crypto-adler.c \
+diff --git a/libcfs/libcfs/linux/linux-lwt.c b/libcfs/libcfs/linux/linux-lwt.c
+deleted file mode 100644
+index d9d4dc1..0000000
+--- a/libcfs/libcfs/linux/linux-lwt.c
++++ /dev/null
+@@ -1,81 +0,0 @@
+-/*
+- * GPL HEADER START
+- *
+- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License version 2 only,
+- * as published by the Free Software Foundation.
+- *
+- * 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 version 2 for more details (a copy is included
+- * in the LICENSE file that accompanied this code).
+- *
+- * You should have received a copy of the GNU General Public License
+- * version 2 along with this program; If not, see
+- * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
+- *
+- * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
+- * CA 95054 USA or visit www.sun.com if you need additional information or
+- * have any questions.
+- *
+- * GPL HEADER END
+- */
+-/*
+- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
+- * Use is subject to license terms.
+- *
+- * Copyright (c) 2012, Intel Corporation.
+- */
+-/*
+- * This file is part of Lustre, http://www.lustre.org/
+- * Lustre is a trademark of Sun Microsystems, Inc.
+- */
+-
+-# define DEBUG_SUBSYSTEM S_LNET
+-#include <linux/module.h>
+-#include <linux/sched.h>
+-#include <linux/spinlock.h>
+-
+-#ifdef HAVE_LINUX_OOM_H
+-#include <linux/oom.h>
+-#else
+-#include <linux/mm.h>
+-#endif
+-
+-int oom_get_adj(struct task_struct *task, int scope)
+-{
+-	int oom_adj;
+-#ifdef HAVE_OOMADJ_IN_SIG
+-	unsigned long flags;
+-
+-	spin_lock_irqsave(&task->sighand->siglock, flags);
+-	oom_adj = task->signal->oom_adj;
+-	task->signal->oom_adj = scope;
+-	spin_unlock_irqrestore(&task->sighand->siglock, flags);
+-
+-#else
+-	oom_adj = task->oomkilladj;
+-	task->oomkilladj = scope;
+-#endif
+-	return oom_adj;
+-}
+-
+-int cfs_create_thread(int (*fn)(void *),
+-                      void *arg, unsigned long flags)
+-{
+-        void *orig_info = current->journal_info;
+-        int rc;
+-        int old_oom;
+-
+-        old_oom = oom_get_adj(current, OOM_DISABLE);
+-        current->journal_info = NULL;
+-        rc = kernel_thread(fn, arg, flags);
+-        current->journal_info = orig_info;
+-        oom_get_adj(current, old_oom);
+-
+-        return rc;
+-}
+-EXPORT_SYMBOL(cfs_create_thread);
+diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c
+index afb4465..e4ac0db 100644
+--- a/libcfs/libcfs/linux/linux-prim.c
++++ b/libcfs/libcfs/linux/linux-prim.c
+@@ -259,34 +259,19 @@ void cfs_enter_debugger(void)
+ #endif
+ }
+ 
+-void cfs_daemonize(char *str) {
+-        unsigned long flags;
+-
+-        daemonize(str);
+-        SIGNAL_MASK_LOCK(current, flags);
+-        sigfillset(&current->blocked);
+-        RECALC_SIGPENDING;
+-        SIGNAL_MASK_UNLOCK(current, flags);
+-}
+-
+-int cfs_daemonize_ctxt(char *str) {
+-
+-        cfs_daemonize(str);
+ #ifndef HAVE_UNSHARE_FS_STRUCT
+-        {
+-        struct task_struct *tsk = current;
+-        struct fs_struct *fs = NULL;
+-        fs = copy_fs_struct(tsk->fs);
+-        if (fs == NULL)
+-                return -ENOMEM;
+-        exit_fs(tsk);
+-        tsk->fs = fs;
+-        }
+-#else
+-        unshare_fs_struct();
+-#endif
+-        return 0;
++int unshare_fs_struct(void)
++{
++	struct task_struct *tsk = current;
++	struct fs_struct *fs = NULL;
++	fs = copy_fs_struct(tsk->fs);
++	if (fs == NULL)
++		return -ENOMEM;
++	exit_fs(tsk);
++	tsk->fs = fs;
++	return 0;
+ }
++#endif
+ 
+ sigset_t
+ cfs_block_allsigs(void)
+@@ -373,8 +358,7 @@ libcfs_arch_cleanup(void)
+ EXPORT_SYMBOL(libcfs_arch_init);
+ EXPORT_SYMBOL(libcfs_arch_cleanup);
+ EXPORT_SYMBOL(cfs_enter_debugger);
+-EXPORT_SYMBOL(cfs_daemonize);
+-EXPORT_SYMBOL(cfs_daemonize_ctxt);
++EXPORT_SYMBOL(unshare_fs_struct);
+ EXPORT_SYMBOL(cfs_block_allsigs);
+ EXPORT_SYMBOL(cfs_block_sigs);
+ EXPORT_SYMBOL(cfs_block_sigsinv);
+diff --git a/libcfs/libcfs/tracefile.c b/libcfs/libcfs/tracefile.c
+index 23e8336..0e2ce2b 100644
+--- a/libcfs/libcfs/tracefile.c
++++ b/libcfs/libcfs/tracefile.c
+@@ -992,7 +992,6 @@ static int tracefiled(void *arg)
+ 
+         /* we're started late enough that we pick up init's fs context */
+         /* this is so broken in uml?  what on earth is going on? */
+-        cfs_daemonize("ktracefiled");
+ 
+ 	spin_lock_init(&pc.pc_lock);
+ 	complete(&tctl->tctl_start);
+@@ -1103,16 +1102,16 @@ int cfs_trace_start_thread(void)
+ 
+ 	init_completion(&tctl->tctl_start);
+ 	init_completion(&tctl->tctl_stop);
+-        cfs_waitq_init(&tctl->tctl_waitq);
+-        cfs_atomic_set(&tctl->tctl_shutdown, 0);
++	cfs_waitq_init(&tctl->tctl_waitq);
++	cfs_atomic_set(&tctl->tctl_shutdown, 0);
+ 
+-        if (cfs_create_thread(tracefiled, tctl, 0) < 0) {
+-                rc = -ECHILD;
+-                goto out;
+-        }
++	if (IS_ERR(kthread_run(tracefiled, tctl, "ktracefiled"))) {
++		rc = -ECHILD;
++		goto out;
++	}
+ 
+ 	wait_for_completion(&tctl->tctl_start);
+-        thread_running = 1;
++	thread_running = 1;
+ out:
+ 	mutex_unlock(&cfs_trace_thread_mutex);
+         return rc;
+diff --git a/libcfs/libcfs/user-prim.c b/libcfs/libcfs/user-prim.c
+index eb21418..9f2b7b3 100644
+--- a/libcfs/libcfs/user-prim.c
++++ b/libcfs/libcfs/user-prim.c
+@@ -223,24 +223,25 @@ static void *cfs_thread_helper(void *data)
+         return NULL;
+ }
+ 
+-int cfs_create_thread(cfs_thread_t func, void *arg, unsigned long flags)
++void *kthread_run(cfs_thread_t func, void *arg, const char namefmt[], ...)
+ {
+-        pthread_t tid;
+-        pthread_attr_t tattr;
+-        int rc;
+-        struct lustre_thread_arg *targ_p = malloc(sizeof(struct lustre_thread_arg));
++	pthread_t tid;
++	pthread_attr_t tattr;
++	int rc;
++	struct lustre_thread_arg *targ_p =
++				malloc(sizeof(struct lustre_thread_arg));
+ 
+-        if ( targ_p == NULL )
+-                return -ENOMEM;
++	if (targ_p == NULL)
++		return ERR_PTR(-ENOMEM);
+ 
+-        targ_p->f = func;
+-        targ_p->arg = arg;
++	targ_p->f = func;
++	targ_p->arg = arg;
+ 
+-        pthread_attr_init(&tattr);
+-        pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
+-        rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
+-        pthread_attr_destroy(&tattr);
+-        return -rc;
++	pthread_attr_init(&tattr);
++	pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED);
++	rc = pthread_create(&tid, &tattr, cfs_thread_helper, targ_p);
++	pthread_attr_destroy(&tattr);
++	return ERR_PTR(rc);
+ }
+ #endif
+ 
+@@ -314,14 +315,9 @@ void cfs_enter_debugger(void)
+          */
+ }
+ 
+-void cfs_daemonize(char *str)
++int unshare_fs_struct()
+ {
+-        return;
+-}
+-
+-int cfs_daemonize_ctxt(char *str)
+-{
+-        return 0;
++	return 0;
+ }
+ 
+ cfs_sigset_t cfs_block_allsigs(void)
+diff --git a/libcfs/libcfs/watchdog.c b/libcfs/libcfs/watchdog.c
+index e08fe68..0981a2c 100644
+--- a/libcfs/libcfs/watchdog.c
++++ b/libcfs/libcfs/watchdog.c
+@@ -213,19 +213,11 @@ static void lcw_dump_stack(struct lc_watchdog *lcw)
+ static int lcw_dispatch_main(void *data)
+ {
+         int                 rc = 0;
+-        unsigned long       flags;
+         struct lc_watchdog *lcw;
+         CFS_LIST_HEAD      (zombies);
+ 
+         ENTRY;
+ 
+-        cfs_daemonize("lc_watchdogd");
+-
+-        SIGNAL_MASK_LOCK(current, flags);
+-        sigfillset(&current->blocked);
+-        RECALC_SIGPENDING;
+-        SIGNAL_MASK_UNLOCK(current, flags);
+-
+ 	complete(&lcw_start_completion);
+ 
+         while (1) {
+@@ -312,7 +304,7 @@ static int lcw_dispatch_main(void *data)
+ 
+ static void lcw_dispatch_start(void)
+ {
+-	int rc;
++	cfs_task_t *task;
+ 
+ 	ENTRY;
+ 	LASSERT(lcw_refcount == 1);
+@@ -321,13 +313,14 @@ static void lcw_dispatch_start(void)
+ 	init_completion(&lcw_start_completion);
+         cfs_waitq_init(&lcw_event_waitq);
+ 
+-        CDEBUG(D_INFO, "starting dispatch thread\n");
+-        rc = cfs_create_thread(lcw_dispatch_main, NULL, 0);
+-        if (rc < 0) {
+-                CERROR("error spawning watchdog dispatch thread: %d\n", rc);
+-                EXIT;
+-                return;
+-        }
++	CDEBUG(D_INFO, "starting dispatch thread\n");
++	task = kthread_run(lcw_dispatch_main, NULL, "lc_watchdogd");
++	if (IS_ERR(task)) {
++		CERROR("error spawning watchdog dispatch thread: %ld\n",
++			PTR_ERR(task));
++		EXIT;
++		return;
++	}
+ 	wait_for_completion(&lcw_start_completion);
+ 	CDEBUG(D_INFO, "watchdog dispatcher initialization complete.\n");
+ 
+diff --git a/libcfs/libcfs/winnt/winnt-prim.c b/libcfs/libcfs/winnt/winnt-prim.c
+index 8596a40..1d04567 100644
+--- a/libcfs/libcfs/winnt/winnt-prim.c
++++ b/libcfs/libcfs/winnt/winnt-prim.c
+@@ -82,22 +82,22 @@ cfs_thread_proc(
+ }
+ 
+ /*
+- * cfs_create_thread
++ * kthread_run
+  *   Create a system thread to execute the routine specified
+  *
+  * Arguments:
+  *   func:  function to be executed in the thread
+  *   arg:   argument transferred to func function
+- *   flag:  thread creation flags.
++ *   name:  thread name to create
+  *
+  * Return Value:
+- *   int:   0 on success or error codes
++ *   cfs_task_t:   0 on success or error codes
+  *
+  * Notes:
+  *   N/A
+  */
+ 
+-int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
++cfs_task_t kthread_run(int (*func)(void *), void *arg, char *name)
+ {
+     cfs_handle_t  thread = NULL;
+     NTSTATUS      status;
+@@ -108,7 +108,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
+     context = cfs_alloc(sizeof(cfs_thread_context_t), CFS_ALLOC_ZERO);
+ 
+     if (!context) {
+-        return -ENOMEM;
++	return ERR_PTR(-ENOMEM);
+     }
+ 
+     context->func  = func;
+@@ -130,7 +130,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
+ 
+         /* We need translate the nt status to linux error code */
+ 
+-        return cfs_error_code(status);
++	return ERR_PTR(cfs_error_code(status));
+     }
+ 
+     //
+@@ -139,7 +139,7 @@ int cfs_create_thread(int (*func)(void *), void *arg, unsigned long flag)
+ 
+     ZwClose(thread);
+ 
+-    return 0;
++	return (cfs_task_t)0;
+ }
+ 
+ 
+@@ -529,18 +529,9 @@ cfs_time_t cfs_timer_deadline(cfs_timer_t * timer)
+     return timer->deadline;
+ }
+ 
+-/*
+- * daemonize routine stub
+- */
+-
+-void cfs_daemonize(char *str)
++int unshare_fs_struct()
+ {
+-    return;
+-}
+-
+-int cfs_daemonize_ctxt(char *str) {
+-    cfs_daemonize(str);
+-    return 0;
++	return 0;
+ }
+ 
+ /*
+diff --git a/libcfs/libcfs/winnt/winnt-tcpip.c b/libcfs/libcfs/winnt/winnt-tcpip.c
+index 6fbf0a5..50d784f 100644
+--- a/libcfs/libcfs/winnt/winnt-tcpip.c
++++ b/libcfs/libcfs/winnt/winnt-tcpip.c
+@@ -5898,10 +5898,10 @@ ks_init_tdi_data()
+     }
+     for (i = 0; i < ks_data.ksnd_engine_nums; i++) {
+ 		spin_lock_init(&ks_data.ksnd_engine_mgr[i].lock);
+-        cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
+-        cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
+-        CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
+-        cfs_create_thread(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], 0);
++	cfs_init_event(&ks_data.ksnd_engine_mgr[i].start, TRUE, FALSE);
++	cfs_init_event(&ks_data.ksnd_engine_mgr[i].exit, TRUE, FALSE);
++	CFS_INIT_LIST_HEAD(&ks_data.ksnd_engine_mgr[i].list);
++	kthread_run(KsDeliveryEngineThread, &ks_data.ksnd_engine_mgr[i], "");
+     }
+ 
+     /* register pnp handlers to watch network condition */
+diff --git a/libcfs/libcfs/workitem.c b/libcfs/libcfs/workitem.c
+index db839e5..309cfec 100644
+--- a/libcfs/libcfs/workitem.c
++++ b/libcfs/libcfs/workitem.c
+@@ -245,17 +245,7 @@ static int
+ cfs_wi_scheduler (void *arg)
+ {
+ 	struct cfs_wi_sched	*sched = (cfs_wi_sched_t *)arg;
+-	char			name[16];
+-
+-	if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
+-		snprintf(name, sizeof(name), "%s_%02d_%02d",
+-			 sched->ws_name, sched->ws_cpt, sched->ws_nthreads);
+-	} else {
+-		snprintf(name, sizeof(name), "%s_%02d",
+-			 sched->ws_name, sched->ws_nthreads);
+-	}
+ 
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	/* CPT affinity scheduler? */
+@@ -463,6 +453,8 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
+ 	rc = 0;
+ #ifdef __KERNEL__
+ 	while (nthrs > 0)  {
++		char	name[16];
++		cfs_task_t	*task;
+ 		spin_lock(&cfs_wi_data.wi_glock);
+ 		while (sched->ws_starting > 0) {
+ 			spin_unlock(&cfs_wi_data.wi_glock);
+@@ -473,11 +465,21 @@ cfs_wi_sched_create(char *name, struct cfs_cpt_table *cptab,
+ 		sched->ws_starting++;
+ 		spin_unlock(&cfs_wi_data.wi_glock);
+ 
+-		rc = cfs_create_thread(cfs_wi_scheduler, sched, 0);
+-		if (rc >= 0) {
++		if (sched->ws_cptab != NULL && sched->ws_cpt >= 0) {
++			snprintf(name, sizeof(name), "%s_%02d_%02d",
++				 sched->ws_name, sched->ws_cpt,
++				 sched->ws_nthreads);
++		} else {
++			snprintf(name, sizeof(name), "%s_%02d",
++				 sched->ws_name, sched->ws_nthreads);
++		}
++
++		task = kthread_run(cfs_wi_scheduler, sched, name);
++		if (!IS_ERR(task)) {
+ 			nthrs--;
+ 			continue;
+ 		}
++		rc = PTR_ERR(task);
+ 
+ 		CERROR("Failed to create thread for WI scheduler %s: %d\n",
+ 		       name, rc);
+diff --git a/lnet/klnds/gnilnd/gnilnd_cb.c b/lnet/klnds/gnilnd/gnilnd_cb.c
+index 56be88a..53d8337 100644
+--- a/lnet/klnds/gnilnd/gnilnd_cb.c
++++ b/lnet/klnds/gnilnd/gnilnd_cb.c
+@@ -2609,7 +2609,6 @@ kgnilnd_reaper(void *arg)
+ 	struct timer_list  timer;
+ 	DEFINE_WAIT(wait);
+ 
+-	cfs_daemonize("kgnilnd_rpr");
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
+@@ -4247,14 +4246,11 @@ kgnilnd_scheduler(void *arg)
+ {
+ 	int               threadno = (long)arg;
+ 	kgn_device_t     *dev;
+-	char              name[16];
+ 	int               busy_loops = 0;
+ 	DEFINE_WAIT(wait);
+ 
+ 	dev = &kgnilnd_data.kgn_devices[(threadno + 1) % kgnilnd_data.kgn_ndevs];
+ 
+-	snprintf(name, sizeof(name), "kgnilnd_sd_%02d", threadno);
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
+diff --git a/lnet/klnds/gnilnd/gnilnd_conn.c b/lnet/klnds/gnilnd/gnilnd_conn.c
+index 38aee5b..a64ed3f 100644
+--- a/lnet/klnds/gnilnd/gnilnd_conn.c
++++ b/lnet/klnds/gnilnd/gnilnd_conn.c
+@@ -2157,13 +2157,10 @@ int
+ kgnilnd_dgram_waitq(void *arg)
+ {
+ 	kgn_device_t     *dev = (kgn_device_t *) arg;
+-	char              name[16];
+ 	gni_return_t      grc;
+ 	__u64             readyid;
+ 	DEFINE_WAIT(mover_done);
+ 
+-	snprintf(name, sizeof(name), "kgnilnd_dgn_%02d", dev->gnd_id);
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	/* all gnilnd threads need to run fairly urgently */
+@@ -2312,15 +2309,12 @@ int
+ kgnilnd_dgram_mover(void *arg)
+ {
+ 	kgn_device_t            *dev = (kgn_device_t *)arg;
+-	char                     name[16];
+ 	int                      rc, did_something;
+ 	unsigned long            next_purge_check = jiffies - 1;
+ 	unsigned long            timeout;
+ 	struct timer_list        timer;
+ 	DEFINE_WAIT(wait);
+ 
+-	snprintf(name, sizeof(name), "kgnilnd_dg_%02d", dev->gnd_id);
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 	/* all gnilnd threads need to run fairly urgently */
+ 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
+diff --git a/lnet/klnds/gnilnd/gnilnd_stack.c b/lnet/klnds/gnilnd/gnilnd_stack.c
+index 10ae493..9dbc3a1 100644
+--- a/lnet/klnds/gnilnd/gnilnd_stack.c
++++ b/lnet/klnds/gnilnd/gnilnd_stack.c
+@@ -362,7 +362,6 @@ kgnilnd_ruhroh_thread(void *arg)
+ 	int                i = 1;
+ 	DEFINE_WAIT(wait);
+ 
+-	cfs_daemonize("kgnilnd_rr");
+ 	cfs_block_allsigs();
+ 	set_user_nice(current, *kgnilnd_tunables.kgn_nice);
+ 	kgnilnd_data.kgn_ruhroh_running = 1;
+diff --git a/lnet/klnds/mxlnd/mxlnd.c b/lnet/klnds/mxlnd/mxlnd.c
+index 558bfaf..dbe998f 100644
+--- a/lnet/klnds/mxlnd/mxlnd.c
++++ b/lnet/klnds/mxlnd/mxlnd.c
+@@ -385,24 +385,25 @@ failed_with_init:
+  * mxlnd_thread_start - spawn a kernel thread with this function
+  * @fn - function pointer
+  * @arg - pointer to the parameter data
++ * @name - name of new thread
+  *
+  * Returns 0 on success and a negative value on failure
+  */
+ int
+-mxlnd_thread_start(int (*fn)(void *arg), void *arg)
++mxlnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        int     pid = 0;
++	cfs_task *task;
+         int     i   = (int) ((long) arg);
+ 
+         cfs_atomic_inc(&kmxlnd_data.kmx_nthreads);
+ 	init_completion(&kmxlnd_data.kmx_completions[i]);
+ 
+-        pid = cfs_create_thread(fn, arg, 0);
+-        if (pid < 0) {
+-                CERROR("cfs_create_thread() failed with %d\n", pid);
+-                cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
+-        }
+-        return pid;
++	task = kthread_run(fn, arg, name);
++	if (IS_ERR(task)) {
++		CERROR("cfs_create_thread() failed with %d\n", PTR_ERR(task));
++		cfs_atomic_dec(&kmxlnd_data.kmx_nthreads);
++	}
++	return PTR_ERR(task);
+ }
+ 
+ /**
+@@ -616,9 +617,13 @@ mxlnd_startup (lnet_ni_t *ni)
+                 *kmxlnd_tunables.kmx_n_waitd == 1 ? "thread" : "threads");
+ 
+         for (i = 0; i < *kmxlnd_tunables.kmx_n_waitd; i++) {
++		char                    name[24];
++		memset(name, 0, sizeof(name));
++		snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", i);
+                 ret = mxlnd_thread_start(mxlnd_request_waitd, (void*)((long)i));
+-                if (ret < 0) {
+-                        CERROR("Starting mxlnd_request_waitd[%d] failed with %d\n", i, ret);
++		if (ret < 0) {
++			CERROR("Starting mxlnd_request_waitd[%d] "
++				"failed with %d\n", i, ret);
+                         cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+                         mx_wakeup(kmxlnd_data.kmx_endpt);
+                         for (--i; i >= 0; i--) {
+@@ -631,7 +636,8 @@ mxlnd_startup (lnet_ni_t *ni)
+                         goto failed;
+                 }
+         }
+-        ret = mxlnd_thread_start(mxlnd_tx_queued, (void*)((long)i++));
++	ret = mxlnd_thread_start(mxlnd_tx_queued, (void *)((long)i++),
++				 "mxlnd_tx_queued");
+         if (ret < 0) {
+                 CERROR("Starting mxlnd_tx_queued failed with %d\n", ret);
+                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+@@ -644,7 +650,8 @@ mxlnd_startup (lnet_ni_t *ni)
+ 			nthreads * sizeof(struct completion));
+                 goto failed;
+         }
+-        ret = mxlnd_thread_start(mxlnd_timeoutd, (void*)((long)i++));
++	ret = mxlnd_thread_start(mxlnd_timeoutd, (void *)((long)i++),
++				 "mxlnd_timeoutd");
+         if (ret < 0) {
+                 CERROR("Starting mxlnd_timeoutd failed with %d\n", ret);
+                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+@@ -658,7 +665,8 @@ mxlnd_startup (lnet_ni_t *ni)
+ 			nthreads * sizeof(struct completion));
+                 goto failed;
+         }
+-        ret = mxlnd_thread_start(mxlnd_connd, (void*)((long)i++));
++	ret = mxlnd_thread_start(mxlnd_connd, (void *)((long)i++),
++				 "mxlnd_connd");
+         if (ret < 0) {
+                 CERROR("Starting mxlnd_connd failed with %d\n", ret);
+                 cfs_atomic_set(&kmxlnd_data.kmx_shutdown, 1);
+diff --git a/lnet/klnds/mxlnd/mxlnd_cb.c b/lnet/klnds/mxlnd/mxlnd_cb.c
+index 5b67392..4b3961b 100644
+--- a/lnet/klnds/mxlnd/mxlnd_cb.c
++++ b/lnet/klnds/mxlnd/mxlnd_cb.c
+@@ -2554,8 +2554,6 @@ mxlnd_tx_queued(void *arg)
+ 	spinlock_t		*tx_q_lock = &kmxlnd_data.kmx_tx_queue_lock;
+ 	rwlock_t		*g_lock  = &kmxlnd_data.kmx_global_lock;
+ 
+-	cfs_daemonize("mxlnd_tx_queued");
+-
+ 	while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
+ 		ret = down_interruptible(&kmxlnd_data.kmx_tx_queue_sem);
+ 		if (cfs_atomic_read(&kmxlnd_data.kmx_shutdown))
+@@ -3485,7 +3483,6 @@ int
+ mxlnd_request_waitd(void *arg)
+ {
+         long                    id              = (long) arg;
+-        char                    name[24];
+         __u32                   result          = 0;
+         mx_return_t             mxret           = MX_SUCCESS;
+         mx_status_t             status;
+@@ -3497,10 +3494,6 @@ mxlnd_request_waitd(void *arg)
+         int                     count           = 0;
+ #endif
+ 
+-        memset(name, 0, sizeof(name));
+-        snprintf(name, sizeof(name), "mxlnd_request_waitd_%02ld", id);
+-        cfs_daemonize(name);
+-
+         memset(&status, 0, sizeof(status));
+ 
+         CDEBUG(D_NET, "%s starting\n", name);
+@@ -3965,8 +3958,6 @@ mxlnd_connd(void *arg)
+ {
+         long                    id              = (long) arg;
+ 
+-        cfs_daemonize("mxlnd_connd");
+-
+         CDEBUG(D_NET, "connd starting\n");
+ 
+         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
+@@ -4040,8 +4031,6 @@ mxlnd_timeoutd(void *arg)
+         kmx_conn_t     *conn    = NULL;
+ 	rwlock_t   *g_lock  = &kmxlnd_data.kmx_global_lock;
+ 
+-        cfs_daemonize("mxlnd_timeoutd");
+-
+         CDEBUG(D_NET, "timeoutd starting\n");
+ 
+         while (!(cfs_atomic_read(&kmxlnd_data.kmx_shutdown))) {
+diff --git a/lnet/klnds/o2iblnd/o2iblnd.c b/lnet/klnds/o2iblnd/o2iblnd.c
+index 7d3c025..86298dd 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd.c
++++ b/lnet/klnds/o2iblnd/o2iblnd.c
+@@ -3011,14 +3011,15 @@ kiblnd_base_startup(void)
+         kiblnd_data.kib_init = IBLND_INIT_DATA;
+         /*****************************************************/
+ 
+-        rc = kiblnd_thread_start(kiblnd_connd, NULL);
++	rc = kiblnd_thread_start(kiblnd_connd, NULL, "kiblnd_connd");
+         if (rc != 0) {
+                 CERROR("Can't spawn o2iblnd connd: %d\n", rc);
+                 goto failed;
+         }
+ 
+-        if (*kiblnd_tunables.kib_dev_failover != 0)
+-                rc = kiblnd_thread_start(kiblnd_failover_thread, NULL);
++	if (*kiblnd_tunables.kib_dev_failover != 0)
++		rc = kiblnd_thread_start(kiblnd_failover_thread, NULL,
++					 "kiblnd_failover");
+ 
+         if (rc != 0) {
+                 CERROR("Can't spawn o2iblnd failover thread: %d\n", rc);
+@@ -3060,9 +3061,11 @@ kiblnd_start_schedulers(struct kib_sched_info *sched)
+ 
+ 	for (i = 0; i < nthrs; i++) {
+ 		long	id;
+-
++		char	name[20];
+ 		id = KIB_THREAD_ID(sched->ibs_cpt, sched->ibs_nthreads + i);
+-		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id);
++		snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
++			 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
++		rc = kiblnd_thread_start(kiblnd_scheduler, (void *)id, name);
+ 		if (rc == 0)
+ 			continue;
+ 
+diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
+index 87c7cc0..7585657 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd.h
++++ b/lnet/klnds/o2iblnd/o2iblnd.h
+@@ -1067,7 +1067,7 @@ void kiblnd_tunables_fini(void);
+ 
+ int  kiblnd_connd (void *arg);
+ int  kiblnd_scheduler(void *arg);
+-int  kiblnd_thread_start (int (*fn)(void *arg), void *arg);
++int  kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name);
+ int  kiblnd_failover_thread (void *arg);
+ 
+ int  kiblnd_alloc_pages(kib_pages_t **pp, int cpt, int npages);
+diff --git a/lnet/klnds/o2iblnd/o2iblnd_cb.c b/lnet/klnds/o2iblnd/o2iblnd_cb.c
+index 3cc7985..af92311 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd_cb.c
++++ b/lnet/klnds/o2iblnd/o2iblnd_cb.c
+@@ -1805,15 +1805,15 @@ kiblnd_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg, int delayed,
+ }
+ 
+ int
+-kiblnd_thread_start (int (*fn)(void *arg), void *arg)
++kiblnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long    pid = cfs_create_thread (fn, arg, 0);
++	cfs_task_t *task = kthread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return ((int)pid);
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+-        cfs_atomic_inc (&kiblnd_data.kib_nthreads);
+-        return (0);
++	cfs_atomic_inc(&kiblnd_data.kib_nthreads);
++	return 0;
+ }
+ 
+ void
+@@ -3135,7 +3135,6 @@ kiblnd_connd (void *arg)
+         int                peer_index = 0;
+         unsigned long      deadline = jiffies;
+ 
+-        cfs_daemonize ("kiblnd_connd");
+         cfs_block_allsigs ();
+ 
+         cfs_waitlink_init (&wait);
+@@ -3329,15 +3328,10 @@ kiblnd_scheduler(void *arg)
+ 	cfs_waitlink_t		wait;
+ 	unsigned long		flags;
+ 	struct ib_wc		wc;
+-	char			name[20];
+ 	int			did_something;
+ 	int			busy_loops = 0;
+ 	int			rc;
+ 
+-	snprintf(name, sizeof(name), "kiblnd_sd_%02ld_%02ld",
+-		 KIB_THREAD_CPT(id), KIB_THREAD_TID(id));
+-
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	cfs_waitlink_init(&wait);
+@@ -3346,10 +3340,10 @@ kiblnd_scheduler(void *arg)
+ 
+ 	rc = cfs_cpt_bind(lnet_cpt_table(), sched->ibs_cpt);
+ 	if (rc != 0) {
+-		CWARN("Failed to bind %s on CPT %d, please verify whether "
++		CWARN("Failed to bind on CPT %d, please verify whether "
+ 		      "all CPUs are healthy and reload modules if necessary, "
+ 		      "otherwise your system might under risk of low "
+-		      "performance\n", name, sched->ibs_cpt);
++		      "performance\n", sched->ibs_cpt);
+ 	}
+ 
+ 	spin_lock_irqsave(&sched->ibs_lock, flags);
+@@ -3464,7 +3458,6 @@ kiblnd_failover_thread(void *arg)
+ 
+         LASSERT (*kiblnd_tunables.kib_dev_failover != 0);
+ 
+-        cfs_daemonize ("kiblnd_failover");
+         cfs_block_allsigs ();
+ 
+         cfs_waitlink_init(&wait);
+diff --git a/lnet/klnds/ptllnd/ptllnd.c b/lnet/klnds/ptllnd/ptllnd.c
+index 791f5c2..2edf87d 100644
+--- a/lnet/klnds/ptllnd/ptllnd.c
++++ b/lnet/klnds/ptllnd/ptllnd.c
+@@ -643,6 +643,7 @@ kptllnd_base_startup (void)
+         struct timeval  tv;
+         lnet_process_id_t  target;
+         ptl_err_t       ptl_rc;
++	char            name[16];
+ 
+         if (*kptllnd_tunables.kptl_max_procs_per_node < 1) {
+                 CERROR("max_procs_per_node must be >= 1\n");
+@@ -824,6 +825,7 @@ kptllnd_base_startup (void)
+          * now that PTLLND_INIT_DATA state has been entered */
+         CDEBUG(D_NET, "starting %d scheduler threads\n", PTLLND_N_SCHED);
+         for (i = 0; i < PTLLND_N_SCHED; i++) {
++		snprintf(name, sizeof(name), "kptllnd_sd_%02d", i);
+                 rc = kptllnd_thread_start(kptllnd_scheduler, (void *)((long)i));
+                 if (rc != 0) {
+                         CERROR("Can't spawn scheduler[%d]: %d\n", i, rc);
+@@ -831,7 +833,8 @@ kptllnd_base_startup (void)
+                 }
+         }
+ 
+-        rc = kptllnd_thread_start(kptllnd_watchdog, NULL);
++	snprintf(name, sizeof(name), "kptllnd_wd_%02d", i);
++	rc = kptllnd_thread_start(kptllnd_watchdog, NULL, name);
+         if (rc != 0) {
+                 CERROR("Can't spawn watchdog: %d\n", rc);
+                 goto failed;
+diff --git a/lnet/klnds/ptllnd/ptllnd_cb.c b/lnet/klnds/ptllnd/ptllnd_cb.c
+index e815607..7be7e4d 100644
+--- a/lnet/klnds/ptllnd/ptllnd_cb.c
++++ b/lnet/klnds/ptllnd/ptllnd_cb.c
+@@ -651,26 +651,24 @@ kptllnd_thread_fini (void)
+ }
+ 
+ int
+-kptllnd_thread_start (int (*fn)(void *arg), void *arg)
++kptllnd_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long                pid;
++	cfs_task_t *task;
+ 
+-        cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
++	cfs_atomic_inc(&kptllnd_data.kptl_nthreads);
+ 
+-        pid = cfs_create_thread (fn, arg, 0);
+-        if (pid >= 0)
+-                return 0;
+-
+-        CERROR("Failed to start thread: error %d\n", (int)pid);
+-        kptllnd_thread_fini();
+-        return (int)pid;
++	task = kthread_run(fn, arg, name);
++	if (IS_ERR(task)) {
++		CERROR("Failed to start thread: error %ld\n", PTR_ERR(task));
++		kptllnd_thread_fini();
++	}
++	return PTR_ERR(task);
+ }
+ 
+ int
+ kptllnd_watchdog(void *arg)
+ {
+         int                 id = (long)arg;
+-        char                name[16];
+         cfs_waitlink_t      waitlink;
+         int                 stamp = 0;
+         int                 peer_index = 0;
+@@ -678,8 +676,6 @@ kptllnd_watchdog(void *arg)
+         int                 timeout;
+         int                 i;
+ 
+-        snprintf(name, sizeof(name), "kptllnd_wd_%02d", id);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&waitlink);
+@@ -740,7 +736,6 @@ int
+ kptllnd_scheduler (void *arg)
+ {
+         int                 id = (long)arg;
+-        char                name[16];
+         cfs_waitlink_t      waitlink;
+         unsigned long       flags;
+         int                 did_something;
+@@ -749,8 +744,6 @@ kptllnd_scheduler (void *arg)
+         kptl_rx_buffer_t   *rxb;
+         kptl_tx_t          *tx;
+ 
+-        snprintf(name, sizeof(name), "kptllnd_sd_%02d", id);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&waitlink);
+diff --git a/lnet/klnds/qswlnd/qswlnd.c b/lnet/klnds/qswlnd/qswlnd.c
+index eb6c659..4df26ee 100644
+--- a/lnet/klnds/qswlnd/qswlnd.c
++++ b/lnet/klnds/qswlnd/qswlnd.c
+@@ -526,7 +526,8 @@ kqswnal_startup (lnet_ni_t *ni)
+ 	/**********************************************************************/
+ 	/* Spawn scheduling threads */
+ 	for (i = 0; i < cfs_num_online_cpus(); i++) {
+-		rc = kqswnal_thread_start (kqswnal_scheduler, NULL);
++		rc = kqswnal_thread_start(kqswnal_scheduler, NULL,
++					  "kqswnal_sched");
+ 		if (rc != 0)
+ 		{
+ 			CERROR ("failed to spawn scheduling thread: %d\n", rc);
+diff --git a/lnet/klnds/qswlnd/qswlnd_cb.c b/lnet/klnds/qswlnd/qswlnd_cb.c
+index dd5ff27..ba604f4 100644
+--- a/lnet/klnds/qswlnd/qswlnd_cb.c
++++ b/lnet/klnds/qswlnd/qswlnd_cb.c
+@@ -1656,15 +1656,15 @@ kqswnal_recv (lnet_ni_t     *ni,
+ }
+ 
+ int
+-kqswnal_thread_start (int (*fn)(void *arg), void *arg)
++kqswnal_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long    pid = cfs_create_thread (fn, arg, 0);
++	cfs_task_t *task = cfs_thread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return ((int)pid);
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+-        cfs_atomic_inc (&kqswnal_data.kqn_nthreads);
+-        return (0);
++	cfs_atomic_inc(&kqswnal_data.kqn_nthreads);
++	return 0;
+ }
+ 
+ void
+@@ -1683,7 +1683,6 @@ kqswnal_scheduler (void *arg)
+         int              counter = 0;
+         int              did_something;
+ 
+-        cfs_daemonize ("kqswnal_sched");
+         cfs_block_allsigs ();
+ 
+ 	spin_lock_irqsave(&kqswnal_data.kqn_sched_lock, flags);
+diff --git a/lnet/klnds/ralnd/ralnd.c b/lnet/klnds/ralnd/ralnd.c
+index ca68fef..eabefae 100644
+--- a/lnet/klnds/ralnd/ralnd.c
++++ b/lnet/klnds/ralnd/ralnd.c
+@@ -1566,6 +1566,7 @@ kranal_startup (lnet_ni_t *ni)
+         int               rc;
+         int               i;
+         kra_device_t     *dev;
++	char		  name[16];
+ 
+         LASSERT (ni->ni_lnd == &the_kralnd);
+ 
+@@ -1658,14 +1659,16 @@ kranal_startup (lnet_ni_t *ni)
+         if (rc != 0)
+                 goto failed;
+ 
+-        rc = kranal_thread_start(kranal_reaper, NULL);
++	rc = kranal_thread_start(kranal_reaper, NULL, "kranal_reaper");
+         if (rc != 0) {
+                 CERROR("Can't spawn ranal reaper: %d\n", rc);
+                 goto failed;
+         }
+ 
+         for (i = 0; i < *kranal_tunables.kra_n_connd; i++) {
+-                rc = kranal_thread_start(kranal_connd, (void *)(unsigned long)i);
++		snprintf(name, sizeof(name), "kranal_connd_%02ld", i);
++		rc = kranal_thread_start(kranal_connd,
++					 (void *)(unsigned long)i, name);
+                 if (rc != 0) {
+                         CERROR("Can't spawn ranal connd[%d]: %d\n",
+                                i, rc);
+@@ -1691,7 +1694,8 @@ kranal_startup (lnet_ni_t *ni)
+         
+         for (i = 0; i < kranal_data.kra_ndevs; i++) {
+                 dev = &kranal_data.kra_devices[i];
+-                rc = kranal_thread_start(kranal_scheduler, dev);
++		snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
++		rc = kranal_thread_start(kranal_scheduler, dev, name);
+                 if (rc != 0) {
+                         CERROR("Can't spawn ranal scheduler[%d]: %d\n",
+                                i, rc);
+diff --git a/lnet/klnds/ralnd/ralnd.h b/lnet/klnds/ralnd/ralnd.h
+index d9fd100..8b92cdc 100644
+--- a/lnet/klnds/ralnd/ralnd.h
++++ b/lnet/klnds/ralnd/ralnd.h
+@@ -452,7 +452,7 @@ extern kra_peer_t *kranal_find_peer_locked (lnet_nid_t nid);
+ extern void kranal_post_fma (kra_conn_t *conn, kra_tx_t *tx);
+ extern int kranal_del_peer (lnet_nid_t nid);
+ extern void kranal_device_callback (RAP_INT32 devid, RAP_PVOID arg);
+-extern int kranal_thread_start (int(*fn)(void *arg), void *arg);
++extern int kranal_thread_start(int(*fn)(void *arg), void *arg, char *name);
+ extern int kranal_connd (void *arg);
+ extern int kranal_reaper (void *arg);
+ extern int kranal_scheduler (void *arg);
+diff --git a/lnet/klnds/ralnd/ralnd_cb.c b/lnet/klnds/ralnd/ralnd_cb.c
+index 8c7f053..05de1c1 100644
+--- a/lnet/klnds/ralnd/ralnd_cb.c
++++ b/lnet/klnds/ralnd/ralnd_cb.c
+@@ -891,15 +891,13 @@ kranal_recv (lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg,
+ }
+ 
+ int
+-kranal_thread_start (int(*fn)(void *arg), void *arg)
++kranal_thread_start(int(*fn)(void *arg), void *arg, char *name)
+ {
+-        long    pid = cfs_create_thread(fn, arg, 0);
++	cfs_task_t *task = cfs_thread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return(int)pid;
+-
+-        cfs_atomic_inc(&kranal_data.kra_nthreads);
+-        return 0;
++	if (!IS_ERR(task))
++		cfs_atomic_inc(&kranal_data.kra_nthreads);
++	return PTR_ERR(task);
+ }
+ 
+ void
+@@ -1054,15 +1052,12 @@ int
+ kranal_connd (void *arg)
+ {
+         long               id = (long)arg;
+-        char               name[16];
+         cfs_waitlink_t     wait;
+         unsigned long      flags;
+         kra_peer_t        *peer;
+         kra_acceptsock_t  *ras;
+         int                did_something;
+ 
+-        snprintf(name, sizeof(name), "kranal_connd_%02ld", id);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&wait);
+@@ -1159,7 +1154,6 @@ kranal_reaper (void *arg)
+         long               next_min_timeout = CFS_MAX_SCHEDULE_TIMEOUT;
+         long               current_min_timeout = 1;
+ 
+-        cfs_daemonize("kranal_reaper");
+         cfs_block_allsigs();
+ 
+         cfs_waitlink_init(&wait);
+@@ -1932,7 +1926,6 @@ kranal_scheduler (void *arg)
+ {
+         kra_device_t     *dev = (kra_device_t *)arg;
+         cfs_waitlink_t    wait;
+-        char              name[16];
+         kra_conn_t       *conn;
+         unsigned long     flags;
+         unsigned long     deadline;
+@@ -1945,8 +1938,6 @@ kranal_scheduler (void *arg)
+         int               dropped_lock;
+         int               busy_loops = 0;
+ 
+-        snprintf(name, sizeof(name), "kranal_sd_%02d", dev->rad_idx);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         dev->rad_scheduler = current;
+diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c
+index 9376b08..c70ceeb 100644
+--- a/lnet/klnds/socklnd/socklnd.c
++++ b/lnet/klnds/socklnd/socklnd.c
+@@ -2465,12 +2465,15 @@ ksocknal_base_startup(void)
+         }
+ 
+         for (i = 0; i < *ksocknal_tunables.ksnd_nconnds; i++) {
++		char name[16];
+ 		spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+ 		ksocknal_data.ksnd_connd_starting++;
+ 		spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
+ 
++
++		snprintf(name, sizeof(name), "socknal_cd%02d", i);
+ 		rc = ksocknal_thread_start(ksocknal_connd,
+-					   (void *)((ulong_ptr_t)i));
++					   (void *)((ulong_ptr_t)i), name);
+ 		if (rc != 0) {
+ 			spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+ 			ksocknal_data.ksnd_connd_starting--;
+@@ -2480,7 +2483,7 @@ ksocknal_base_startup(void)
+                 }
+         }
+ 
+-        rc = ksocknal_thread_start (ksocknal_reaper, NULL);
++	rc = ksocknal_thread_start(ksocknal_reaper, NULL, "socknal_reaper");
+         if (rc != 0) {
+                 CERROR ("Can't spawn socknal reaper: %d\n", rc);
+                 goto failed;
+@@ -2724,10 +2727,16 @@ ksocknal_start_schedulers(struct ksock_sched_info *info)
+ 	}
+ 
+ 	for (i = 0; i < nthrs; i++) {
+-		long	id;
+-
++		long		id;
++		char		name[20];
++		ksock_sched_t	*sched;
+ 		id = KSOCK_THREAD_ID(info->ksi_cpt, info->ksi_nthreads + i);
+-		rc = ksocknal_thread_start(ksocknal_scheduler, (void *)id);
++		sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
++		snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
++			 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
++
++		rc = ksocknal_thread_start(ksocknal_scheduler,
++					   (void *)id, name);
+ 		if (rc == 0)
+ 			continue;
+ 
+diff --git a/lnet/klnds/socklnd/socklnd.h b/lnet/klnds/socklnd/socklnd.h
+index abdf25a..1094397 100644
+--- a/lnet/klnds/socklnd/socklnd.h
++++ b/lnet/klnds/socklnd/socklnd.h
+@@ -581,7 +581,7 @@ extern void ksocknal_txlist_done (lnet_ni_t *ni, cfs_list_t *txlist,
+                                   int error);
+ extern void ksocknal_notify (lnet_ni_t *ni, lnet_nid_t gw_nid, int alive);
+ extern void ksocknal_query (struct lnet_ni *ni, lnet_nid_t nid, cfs_time_t *when);
+-extern int ksocknal_thread_start (int (*fn)(void *arg), void *arg);
++extern int ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name);
+ extern void ksocknal_thread_fini (void);
+ extern void ksocknal_launch_all_connections_locked (ksock_peer_t *peer);
+ extern ksock_route_t *ksocknal_find_connectable_route_locked (ksock_peer_t *peer);
+diff --git a/lnet/klnds/socklnd/socklnd_cb.c b/lnet/klnds/socklnd/socklnd_cb.c
+index b24127d..e624753 100644
+--- a/lnet/klnds/socklnd/socklnd_cb.c
++++ b/lnet/klnds/socklnd/socklnd_cb.c
+@@ -1007,17 +1007,17 @@ ksocknal_send(lnet_ni_t *ni, void *private, lnet_msg_t *lntmsg)
+ }
+ 
+ int
+-ksocknal_thread_start (int (*fn)(void *arg), void *arg)
++ksocknal_thread_start(int (*fn)(void *arg), void *arg, char *name)
+ {
+-        long          pid = cfs_create_thread (fn, arg, 0);
++	cfs_task_t *task = kthread_run(fn, arg, name);
+ 
+-        if (pid < 0)
+-                return ((int)pid);
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+ 	write_lock_bh(&ksocknal_data.ksnd_global_lock);
+-        ksocknal_data.ksnd_nthreads++;
++	ksocknal_data.ksnd_nthreads++;
+ 	write_unlock_bh(&ksocknal_data.ksnd_global_lock);
+-        return (0);
++	return 0;
+ }
+ 
+ void
+@@ -1396,22 +1396,17 @@ int ksocknal_scheduler(void *arg)
+ 	ksock_tx_t		*tx;
+ 	int			rc;
+ 	int			nloops = 0;
+-	char			name[20];
+ 	long			id = (long)arg;
+ 
+ 	info = ksocknal_data.ksnd_sched_info[KSOCK_THREAD_CPT(id)];
+ 	sched = &info->ksi_scheds[KSOCK_THREAD_SID(id)];
+ 
+-	snprintf(name, sizeof(name), "socknal_sd%02d_%02d",
+-		 info->ksi_cpt, (int)(sched - &info->ksi_scheds[0]));
+-
+-	cfs_daemonize(name);
+ 	cfs_block_allsigs();
+ 
+ 	rc = cfs_cpt_bind(lnet_cpt_table(), info->ksi_cpt);
+ 	if (rc != 0) {
+-		CERROR("Can't set CPT affinity for %s to %d: %d\n",
+-		       name, info->ksi_cpt, rc);
++		CERROR("Can't set CPT affinity to %d: %d\n",
++		       info->ksi_cpt, rc);
+ 	}
+ 
+ 	spin_lock_bh(&sched->kss_lock);
+@@ -2023,6 +2018,7 @@ ksocknal_connect (ksock_route_t *route)
+ static int
+ ksocknal_connd_check_start(long sec, long *timeout)
+ {
++	char name[16];
+         int rc;
+         int total = ksocknal_data.ksnd_connd_starting +
+                     ksocknal_data.ksnd_connd_running;
+@@ -2060,7 +2056,8 @@ ksocknal_connd_check_start(long sec, long *timeout)
+ 	spin_unlock_bh(&ksocknal_data.ksnd_connd_lock);
+ 
+ 	/* NB: total is the next id */
+-	rc = ksocknal_thread_start(ksocknal_connd, (void *)((long)total));
++	snprintf(name, sizeof(name), "socknal_cd%02d", total);
++	rc = ksocknal_thread_start(ksocknal_connd, NULL, name);
+ 
+ 	spin_lock_bh(&ksocknal_data.ksnd_connd_lock);
+         if (rc == 0)
+@@ -2145,15 +2142,11 @@ int
+ ksocknal_connd (void *arg)
+ {
+ 	spinlock_t    *connd_lock = &ksocknal_data.ksnd_connd_lock;
+-        long               id = (long)(long_ptr_t)arg;
+-        char               name[16];
+         ksock_connreq_t   *cr;
+         cfs_waitlink_t     wait;
+         int                nloops = 0;
+         int                cons_retry = 0;
+ 
+-        snprintf (name, sizeof (name), "socknal_cd%02ld", id);
+-        cfs_daemonize (name);
+         cfs_block_allsigs ();
+ 
+         cfs_waitlink_init (&wait);
+@@ -2546,7 +2539,6 @@ ksocknal_reaper (void *arg)
+         int                peer_index = 0;
+         cfs_time_t         deadline = cfs_time_current();
+ 
+-        cfs_daemonize ("socknal_reaper");
+         cfs_block_allsigs ();
+ 
+         CFS_INIT_LIST_HEAD(&enomem_conns);
+diff --git a/lnet/lnet/acceptor.c b/lnet/lnet/acceptor.c
+index 9db3571..d6e7316 100644
+--- a/lnet/lnet/acceptor.c
++++ b/lnet/lnet/acceptor.c
+@@ -398,7 +398,6 @@ lnet_accept(cfs_socket_t *sock, __u32 magic)
+ int
+ lnet_acceptor(void *arg)
+ {
+-        char           name[16];
+         cfs_socket_t  *newsock;
+         int            rc;
+         __u32          magic;
+@@ -408,8 +407,6 @@ lnet_acceptor(void *arg)
+ 
+         LASSERT (lnet_acceptor_state.pta_sock == NULL);
+ 
+-        snprintf(name, sizeof(name), "acceptor_%03d", accept_port);
+-        cfs_daemonize(name);
+         cfs_block_allsigs();
+ 
+         rc = libcfs_sock_listen(&lnet_acceptor_state.pta_sock,
+@@ -538,16 +535,18 @@ lnet_acceptor_start(void)
+                 return rc;
+         }
+ 
+-        if (lnet_count_acceptor_nis() == 0)  /* not required */
+-                return 0;
++	if (lnet_count_acceptor_nis() == 0)  /* not required */
++		return 0;
+ 
+-        rc2 = cfs_create_thread(lnet_acceptor, (void *)(ulong_ptr_t)secure, 0);
+-        if (rc2 < 0) {
+-                CERROR("Can't start acceptor thread: %d\n", rc);
++	rc2 = PTR_ERR(kthread_run(lnet_acceptor,
++				  (void *)(ulong_ptr_t)secure,
++				  "acceptor_%03ld", secure));
++	if (IS_ERR_VALUE(rc2)) {
++		CERROR("Can't start acceptor thread: %ld\n", rc2);
+ 		mt_fini_completion(&lnet_acceptor_state.pta_signal);
+ 
+-                return -ESRCH;
+-        }
++		return -ESRCH;
++	}
+ 
+         /* wait for acceptor to startup */
+ 	mt_wait_for_completion(&lnet_acceptor_state.pta_signal);
+diff --git a/lnet/lnet/module.c b/lnet/lnet/module.c
+index 770345d..9d57479 100644
+--- a/lnet/lnet/module.c
++++ b/lnet/lnet/module.c
+@@ -127,11 +127,11 @@ init_lnet(void)
+         rc = libcfs_register_ioctl(&lnet_ioctl_handler);
+         LASSERT (rc == 0);
+ 
+-        if (config_on_load) {
+-                /* Have to schedule a separate thread to avoid deadlocking
+-                 * in modload */
+-                (void) cfs_create_thread(lnet_configure, NULL, 0);
+-        }
++	if (config_on_load) {
++		/* Have to schedule a separate thread to avoid deadlocking
++		 * in modload */
++		(void) kthread_run(lnet_configure, NULL, "lnet_initd");
++	}
+ 
+         RETURN(0);
+ }
+diff --git a/lnet/lnet/router.c b/lnet/lnet/router.c
+index 80c0a59..50495a6 100644
+--- a/lnet/lnet/router.c
++++ b/lnet/lnet/router.c
+@@ -1095,16 +1095,17 @@ lnet_router_checker_start(void)
+ 
+         the_lnet.ln_rc_state = LNET_RC_STATE_RUNNING;
+ #ifdef __KERNEL__
+-        rc = cfs_create_thread(lnet_router_checker, NULL, 0);
+-        if (rc < 0) {
+-                CERROR("Can't start router checker thread: %d\n", rc);
+-                /* block until event callback signals exit */
++	rc = PTR_ERR(kthread_run(lnet_router_checker,
++				 NULL, "router_checker"));
++	if (IS_ERR_VALUE(rc)) {
++		CERROR("Can't start router checker thread: %d\n", rc);
++		/* block until event callback signals exit */
+ 		down(&the_lnet.ln_rc_signal);
+-                rc = LNetEQFree(the_lnet.ln_rc_eqh);
+-                LASSERT (rc == 0);
+-                the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
+-                return -ENOMEM;
+-        }
++		rc = LNetEQFree(the_lnet.ln_rc_eqh);
++		LASSERT(rc == 0);
++		the_lnet.ln_rc_state = LNET_RC_STATE_SHUTDOWN;
++		return -ENOMEM;
++	}
+ #endif
+ 
+         if (check_routers_before_use) {
+@@ -1230,7 +1231,6 @@ lnet_router_checker(void *arg)
+         lnet_peer_t       *rtr;
+         cfs_list_t        *entry;
+ 
+-        cfs_daemonize("router_checker");
+         cfs_block_allsigs();
+ 
+         LASSERT (the_lnet.ln_rc_state == LNET_RC_STATE_RUNNING);
+diff --git a/lnet/selftest/timer.c b/lnet/selftest/timer.c
+index a66a336..f2f8262 100644
+--- a/lnet/selftest/timer.c
++++ b/lnet/selftest/timer.c
+@@ -183,7 +183,6 @@ stt_timer_main (void *arg)
+ 
+         SET_BUT_UNUSED(rc);
+ 
+-        cfs_daemonize("st_timer");
+         cfs_block_allsigs();
+ 
+         while (!stt_data.stt_shuttingdown) {
+@@ -204,13 +203,13 @@ stt_timer_main (void *arg)
+ int
+ stt_start_timer_thread (void)
+ {
+-        long pid;
++	cfs_task_t *task;
+ 
+-        LASSERT (!stt_data.stt_shuttingdown);
++	LASSERT(!stt_data.stt_shuttingdown);
+ 
+-        pid = cfs_create_thread(stt_timer_main, NULL, 0);
+-        if (pid < 0)
+-                return (int)pid;
++	task = kthread_run(stt_timer_main, NULL, "st_timer");
++	if (IS_ERR(task))
++		return PTR_ERR(task);
+ 
+ 	spin_lock(&stt_data.stt_lock);
+ 	stt_data.stt_nthreads++;
+diff --git a/lnet/ulnds/socklnd/usocklnd.c b/lnet/ulnds/socklnd/usocklnd.c
+index d1e6b7f..04f8de6 100644
+--- a/lnet/ulnds/socklnd/usocklnd.c
++++ b/lnet/ulnds/socklnd/usocklnd.c
+@@ -296,14 +296,15 @@ usocklnd_base_startup()
+         pthread_rwlock_init(&usock_data.ud_peers_lock, NULL);
+ 
+         /* Spawn poll threads */
+-        for (i = 0; i < usock_data.ud_npollthreads; i++) {
+-                rc = cfs_create_thread(usocklnd_poll_thread,
+-                                       &usock_data.ud_pollthreads[i], 0);
+-                if (rc) {
+-                        usocklnd_base_shutdown(i);
+-                        return rc;
+-                }
+-        }
++	for (i = 0; i < usock_data.ud_npollthreads; i++) {
++		rc = PTR_ERR(kthread_run(usocklnd_poll_thread,
++					     &usock_data.ud_pollthreads[i],
++					     ""));
++		if (IS_ERR_VALUE(rc)) {
++			usocklnd_base_shutdown(i);
++			return rc;
++		}
++	}
+ 
+         usock_data.ud_state = UD_STATE_INITIALIZED;
+ 
+diff --git a/lustre/ldlm/ldlm_lib.c b/lustre/ldlm/ldlm_lib.c
+index 2e3a1d5..e61583a 100644
+--- a/lustre/ldlm/ldlm_lib.c
++++ b/lustre/ldlm/ldlm_lib.c
+@@ -1975,19 +1975,12 @@ static int target_recovery_thread(void *arg)
+         struct ptlrpc_request *req;
+         struct target_recovery_data *trd = &obd->obd_recovery_data;
+         unsigned long delta;
+-        unsigned long flags;
+         struct lu_env *env;
+         struct ptlrpc_thread *thread = NULL;
+         int rc = 0;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("tgt_recov");
+-
+-        SIGNAL_MASK_LOCK(current, flags);
+-        sigfillset(&current->blocked);
+-        RECALC_SIGPENDING;
+-        SIGNAL_MASK_UNLOCK(current, flags);
+-
++	unshare_fs_struct();
+         OBD_ALLOC_PTR(thread);
+         if (thread == NULL)
+                 RETURN(-ENOMEM);
+@@ -2112,22 +2105,24 @@ static int target_recovery_thread(void *arg)
+ static int target_start_recovery_thread(struct lu_target *lut,
+                                         svc_handler_t handler)
+ {
+-        struct obd_device *obd = lut->lut_obd;
+-        int rc = 0;
+-        struct target_recovery_data *trd = &obd->obd_recovery_data;
++	struct obd_device *obd = lut->lut_obd;
++	int rc = 0;
++	struct target_recovery_data *trd = &obd->obd_recovery_data;
+ 
+-        memset(trd, 0, sizeof(*trd));
++	memset(trd, 0, sizeof(*trd));
+ 	init_completion(&trd->trd_starting);
+ 	init_completion(&trd->trd_finishing);
+-        trd->trd_recovery_handler = handler;
++	trd->trd_recovery_handler = handler;
+ 
+-        if (cfs_create_thread(target_recovery_thread, lut, 0) > 0) {
++	if (!IS_ERR(kthread_run(target_recovery_thread,
++				lut, "tgt_recov"))) {
+ 		wait_for_completion(&trd->trd_starting);
+-                LASSERT(obd->obd_recovering != 0);
+-        } else
+-                rc = -ECHILD;
++		LASSERT(obd->obd_recovering != 0);
++	} else {
++		rc = -ECHILD;
++	}
+ 
+-        return rc;
++	return rc;
+ }
+ 
+ void target_stop_recovery_thread(struct obd_device *obd)
+diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c
+index 18bbd28..fb4d729 100644
+--- a/lustre/ldlm/ldlm_lockd.c
++++ b/lustre/ldlm/ldlm_lockd.c
+@@ -178,7 +178,6 @@ static int expired_lock_main(void *arg)
+         int do_dump;
+ 
+         ENTRY;
+-        cfs_daemonize("ldlm_elt");
+ 
+         expired_lock_thread.elt_state = ELT_READY;
+         cfs_waitq_signal(&expired_lock_thread.elt_waitq);
+@@ -2564,14 +2563,17 @@ static int ldlm_bl_thread_main(void *arg);
+ static int ldlm_bl_thread_start(struct ldlm_bl_pool *blp)
+ {
+ 	struct ldlm_bl_thread_data bltd = { .bltd_blp = blp };
+-	int rc;
++	cfs_task_t *task;
+ 
+ 	init_completion(&bltd.bltd_comp);
+-	rc = cfs_create_thread(ldlm_bl_thread_main, &bltd, 0);
+-	if (rc < 0) {
+-		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %d\n",
+-		       cfs_atomic_read(&blp->blp_num_threads), rc);
+-		return rc;
++	bltd.bltd_num = cfs_atomic_read(&blp->blp_num_threads);
++	snprintf(bltd.bltd_name, sizeof(bltd.bltd_name) - 1,
++		"ldlm_bl_%02d", bltd.bltd_num);
++	task = kthread_run(ldlm_bl_thread_main, &bltd, bltd.bltd_name);
++	if (IS_ERR(task)) {
++		CERROR("cannot start LDLM thread ldlm_bl_%02d: rc %ld\n",
++		       cfs_atomic_read(&blp->blp_num_threads), PTR_ERR(task));
++		return PTR_ERR(task);
+ 	}
+ 	wait_for_completion(&bltd.bltd_comp);
+ 
+@@ -2595,14 +2597,9 @@ static int ldlm_bl_thread_main(void *arg)
+ 
+                 blp = bltd->bltd_blp;
+ 
+-                bltd->bltd_num =
+-                        cfs_atomic_inc_return(&blp->blp_num_threads) - 1;
++		cfs_atomic_inc(&blp->blp_num_threads);
+                 cfs_atomic_inc(&blp->blp_busy_threads);
+ 
+-                snprintf(bltd->bltd_name, sizeof(bltd->bltd_name) - 1,
+-                        "ldlm_bl_%02d", bltd->bltd_num);
+-                cfs_daemonize(bltd->bltd_name);
+-
+ 		complete(&bltd->bltd_comp);
+                 /* cannot use bltd after this, it is only on caller's stack */
+         }
+@@ -2941,22 +2938,22 @@ static int ldlm_setup(void)
+ 	}
+ 
+ # ifdef HAVE_SERVER_SUPPORT
+-        CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
+-        expired_lock_thread.elt_state = ELT_STOPPED;
+-        cfs_waitq_init(&expired_lock_thread.elt_waitq);
++	CFS_INIT_LIST_HEAD(&expired_lock_thread.elt_expired_locks);
++	expired_lock_thread.elt_state = ELT_STOPPED;
++	cfs_waitq_init(&expired_lock_thread.elt_waitq);
+ 
+-        CFS_INIT_LIST_HEAD(&waiting_locks_list);
++	CFS_INIT_LIST_HEAD(&waiting_locks_list);
+ 	spin_lock_init(&waiting_locks_spinlock);
+-        cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
++	cfs_timer_init(&waiting_locks_timer, waiting_locks_callback, 0);
+ 
+-        rc = cfs_create_thread(expired_lock_main, NULL, CFS_DAEMON_FLAGS);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(expired_lock_main, NULL, "ldlm_elt"));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("Cannot start ldlm expired-lock thread: %d\n", rc);
+ 		GOTO(out, rc);
+ 	}
+ 
+-        cfs_wait_event(expired_lock_thread.elt_waitq,
+-                       expired_lock_thread.elt_state == ELT_READY);
++	cfs_wait_event(expired_lock_thread.elt_waitq,
++		       expired_lock_thread.elt_state == ELT_READY);
+ # endif /* HAVE_SERVER_SUPPORT */
+ 
+ 	rc = ldlm_pools_init();
+diff --git a/lustre/ldlm/ldlm_pool.c b/lustre/ldlm/ldlm_pool.c
+index 820a50d..aa5b0c0 100644
+--- a/lustre/ldlm/ldlm_pool.c
++++ b/lustre/ldlm/ldlm_pool.c
+@@ -1295,15 +1295,13 @@ EXPORT_SYMBOL(ldlm_pools_recalc);
+ static int ldlm_pools_thread_main(void *arg)
+ {
+         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
+-        char *t_name = "ldlm_poold";
+         ENTRY;
+ 
+-        cfs_daemonize(t_name);
+         thread_set_flags(thread, SVC_RUNNING);
+         cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+         CDEBUG(D_DLMTRACE, "%s: pool thread starting, process %d\n",
+-               t_name, cfs_curproc_pid());
++		"ldlm_poold", cfs_curproc_pid());
+ 
+         while (1) {
+                 struct l_wait_info lwi;
+@@ -1335,43 +1333,38 @@ static int ldlm_pools_thread_main(void *arg)
+         cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+         CDEBUG(D_DLMTRACE, "%s: pool thread exiting, process %d\n",
+-               t_name, cfs_curproc_pid());
++		"ldlm_poold", cfs_curproc_pid());
+ 
+ 	complete_and_exit(&ldlm_pools_comp, 0);
+ }
+ 
+ static int ldlm_pools_thread_start(void)
+ {
+-        struct l_wait_info lwi = { 0 };
+-        int rc;
+-        ENTRY;
++	struct l_wait_info lwi = { 0 };
++	cfs_task_t *task;
++	ENTRY;
+ 
+-        if (ldlm_pools_thread != NULL)
+-                RETURN(-EALREADY);
++	if (ldlm_pools_thread != NULL)
++		RETURN(-EALREADY);
+ 
+-        OBD_ALLOC_PTR(ldlm_pools_thread);
+-        if (ldlm_pools_thread == NULL)
+-                RETURN(-ENOMEM);
++	OBD_ALLOC_PTR(ldlm_pools_thread);
++	if (ldlm_pools_thread == NULL)
++		RETURN(-ENOMEM);
+ 
+ 	init_completion(&ldlm_pools_comp);
+-        cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
+-
+-        /*
+-         * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+-         * just drop the VM and FILES in cfs_daemonize() right away.
+-         */
+-        rc = cfs_create_thread(ldlm_pools_thread_main, ldlm_pools_thread,
+-                               CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("Can't start pool thread, error %d\n",
+-                       rc);
+-                OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
+-                ldlm_pools_thread = NULL;
+-                RETURN(rc);
+-        }
+-        l_wait_event(ldlm_pools_thread->t_ctl_waitq,
+-                     thread_is_running(ldlm_pools_thread), &lwi);
+-        RETURN(0);
++	cfs_waitq_init(&ldlm_pools_thread->t_ctl_waitq);
++
++	task = kthread_run(ldlm_pools_thread_main, ldlm_pools_thread,
++			   "ldlm_poold");
++	if (IS_ERR(task)) {
++		CERROR("Can't start pool thread, error %ld\n", PTR_ERR(task));
++		OBD_FREE(ldlm_pools_thread, sizeof(*ldlm_pools_thread));
++		ldlm_pools_thread = NULL;
++		RETURN(PTR_ERR(task));
++	}
++	l_wait_event(ldlm_pools_thread->t_ctl_waitq,
++		     thread_is_running(ldlm_pools_thread), &lwi);
++	RETURN(0);
+ }
+ 
+ static void ldlm_pools_thread_stop(void)
+diff --git a/lustre/llite/llite_capa.c b/lustre/llite/llite_capa.c
+index 1d489e6..5e269b3 100644
+--- a/lustre/llite/llite_capa.c
++++ b/lustre/llite/llite_capa.c
+@@ -173,8 +173,6 @@ static int capa_thread_main(void *unused)
+         int rc;
+         ENTRY;
+ 
+-        cfs_daemonize("ll_capa");
+-
+         thread_set_flags(&ll_capa_thread, SVC_RUNNING);
+         cfs_waitq_signal(&ll_capa_thread.t_ctl_waitq);
+ 
+@@ -293,20 +291,21 @@ void ll_capa_timer_callback(unsigned long unused)
+ 
+ int ll_capa_thread_start(void)
+ {
+-        int rc;
+-        ENTRY;
++	cfs_task_t *task;
++	ENTRY;
+ 
+-        cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
++	cfs_waitq_init(&ll_capa_thread.t_ctl_waitq);
+ 
+-        rc = cfs_create_thread(capa_thread_main, NULL, 0);
+-        if (rc < 0) {
+-                CERROR("cannot start expired capa thread: rc %d\n", rc);
+-                RETURN(rc);
+-        }
+-        cfs_wait_event(ll_capa_thread.t_ctl_waitq,
+-                       thread_is_running(&ll_capa_thread));
++	task = kthread_run(capa_thread_main, NULL, "ll_capa");
++	if (IS_ERR(task)) {
++		CERROR("cannot start expired capa thread: rc %ld\n",
++			PTR_ERR(task));
++		RETURN(PTR_ERR(task));
++	}
++	cfs_wait_event(ll_capa_thread.t_ctl_waitq,
++		       thread_is_running(&ll_capa_thread));
+ 
+-        RETURN(0);
++	RETURN(0);
+ }
+ 
+ void ll_capa_thread_stop(void)
+diff --git a/lustre/llite/llite_close.c b/lustre/llite/llite_close.c
+index 6c897dc..1fc723e 100644
+--- a/lustre/llite/llite_close.c
++++ b/lustre/llite/llite_close.c
+@@ -350,12 +350,6 @@ static int ll_close_thread(void *arg)
+         struct ll_close_queue *lcq = arg;
+         ENTRY;
+ 
+-        {
+-                char name[CFS_CURPROC_COMM_MAX];
+-                snprintf(name, sizeof(name) - 1, "ll_close");
+-                cfs_daemonize(name);
+-        }
+-
+ 	complete(&lcq->lcq_comp);
+ 
+         while (1) {
+@@ -383,25 +377,25 @@ static int ll_close_thread(void *arg)
+ 
+ int ll_close_thread_start(struct ll_close_queue **lcq_ret)
+ {
+-        struct ll_close_queue *lcq;
+-        pid_t pid;
++	struct ll_close_queue *lcq;
++	cfs_task_t *task;
+ 
+-        if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
+-                return -EINTR;
++	if (OBD_FAIL_CHECK(OBD_FAIL_LDLM_CLOSE_THREAD))
++		return -EINTR;
+ 
+-        OBD_ALLOC(lcq, sizeof(*lcq));
+-        if (lcq == NULL)
+-                return -ENOMEM;
++	OBD_ALLOC(lcq, sizeof(*lcq));
++	if (lcq == NULL)
++		return -ENOMEM;
+ 
+ 	spin_lock_init(&lcq->lcq_lock);
+ 	CFS_INIT_LIST_HEAD(&lcq->lcq_head);
+ 	cfs_waitq_init(&lcq->lcq_waitq);
+ 	init_completion(&lcq->lcq_comp);
+ 
+-	pid = cfs_create_thread(ll_close_thread, lcq, 0);
+-	if (pid < 0) {
++	task = kthread_run(ll_close_thread, lcq, "ll_close");
++	if (IS_ERR(task)) {
+ 		OBD_FREE(lcq, sizeof(*lcq));
+-		return pid;
++		return PTR_ERR(task);
+ 	}
+ 
+ 	wait_for_completion(&lcq->lcq_comp);
+diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
+index 4c58181..1d4e2e8 100644
+--- a/lustre/llite/lloop.c
++++ b/lustre/llite/lloop.c
+@@ -420,8 +420,6 @@ static int loop_thread(void *data)
+         int refcheck;
+         int ret = 0;
+ 
+-        daemonize("lloop%d", lo->lo_number);
+-
+         set_user_nice(current, -20);
+ 
+         lo->lo_state = LLOOP_BOUND;
+@@ -552,13 +550,13 @@ static int loop_set_fd(struct lloop_device *lo, struct file *unused,
+         set_capacity(disks[lo->lo_number], size);
+         bd_set_size(bdev, size << 9);
+ 
+-        set_blocksize(bdev, lo->lo_blocksize);
++	set_blocksize(bdev, lo->lo_blocksize);
+ 
+-        cfs_create_thread(loop_thread, lo, CLONE_KERNEL);
++	kthread_run(loop_thread, lo, "lloop%d", lo->lo_number);
+ 	down(&lo->lo_sem);
+-        return 0;
++	return 0;
+ 
+- out:
++out:
+         /* This is safe: open() is still holding a reference. */
+         cfs_module_put(THIS_MODULE);
+         return error;
+diff --git a/lustre/llite/statahead.c b/lustre/llite/statahead.c
+index 9eea49e..cb11191 100644
+--- a/lustre/llite/statahead.c
++++ b/lustre/llite/statahead.c
+@@ -998,12 +998,6 @@ static int ll_agl_thread(void *arg)
+         struct l_wait_info        lwi    = { 0 };
+         ENTRY;
+ 
+-        {
+-                char pname[16];
+-                snprintf(pname, 15, "ll_agl_%u", plli->lli_opendir_pid);
+-                cfs_daemonize(pname);
+-        }
+-
+         CDEBUG(D_READA, "agl thread started: [pid %d] [parent %.*s]\n",
+                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+@@ -1057,25 +1051,28 @@ static int ll_agl_thread(void *arg)
+ 
+ static void ll_start_agl(struct dentry *parent, struct ll_statahead_info *sai)
+ {
+-        struct ptlrpc_thread *thread = &sai->sai_agl_thread;
+-        struct l_wait_info    lwi    = { 0 };
+-        int                   rc;
+-        ENTRY;
++	struct ptlrpc_thread *thread = &sai->sai_agl_thread;
++	struct l_wait_info    lwi    = { 0 };
++	struct ll_inode_info  *plli;
++	cfs_task_t	      *task;
++	ENTRY;
+ 
+-        CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
+-               cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
++	CDEBUG(D_READA, "start agl thread: [pid %d] [parent %.*s]\n",
++	       cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+-        rc = cfs_create_thread(ll_agl_thread, parent, 0);
+-        if (rc < 0) {
+-                CERROR("can't start ll_agl thread, rc: %d\n", rc);
+-                thread_set_flags(thread, SVC_STOPPED);
+-                RETURN_EXIT;
+-        }
++	plli = ll_i2info(parent->d_inode);
++	task = kthread_run(ll_agl_thread, parent,
++			       "ll_agl_%u", plli->lli_opendir_pid);
++	if (IS_ERR(task)) {
++		CERROR("can't start ll_agl thread, rc: %ld\n", PTR_ERR(task));
++		thread_set_flags(thread, SVC_STOPPED);
++		RETURN_EXIT;
++	}
+ 
+-        l_wait_event(thread->t_ctl_waitq,
+-                     thread_is_running(thread) || thread_is_stopped(thread),
+-                     &lwi);
+-        EXIT;
++	l_wait_event(thread->t_ctl_waitq,
++		     thread_is_running(thread) || thread_is_stopped(thread),
++		     &lwi);
++	EXIT;
+ }
+ 
+ static int ll_statahead_thread(void *arg)
+@@ -1096,12 +1093,6 @@ static int ll_statahead_thread(void *arg)
+         struct l_wait_info        lwi    = { 0 };
+         ENTRY;
+ 
+-        {
+-                char pname[16];
+-                snprintf(pname, 15, "ll_sa_%u", plli->lli_opendir_pid);
+-                cfs_daemonize(pname);
+-        }
+-
+         CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
+                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+@@ -1565,6 +1556,7 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
+         struct ptlrpc_thread     *thread;
+         struct l_wait_info        lwi   = { 0 };
+         int                       rc    = 0;
++	struct ll_inode_info     *plli;
+         ENTRY;
+ 
+         LASSERT(lli->lli_opendir_pid == cfs_curproc_pid());
+@@ -1709,11 +1701,14 @@ int do_statahead_enter(struct inode *dir, struct dentry **dentryp,
+                cfs_curproc_pid(), parent->d_name.len, parent->d_name.name);
+ 
+         lli->lli_sai = sai;
+-        rc = cfs_create_thread(ll_statahead_thread, parent, 0);
+-        thread = &sai->sai_thread;
+-        if (rc < 0) {
+-                CERROR("can't start ll_sa thread, rc: %d\n", rc);
+-                dput(parent);
++
++	plli = ll_i2info(parent->d_inode);
++	rc = PTR_ERR(kthread_run(ll_statahead_thread, parent,
++				 "ll_sa_%u", plli->lli_opendir_pid));
++	thread = &sai->sai_thread;
++	if (IS_ERR_VALUE(rc)) {
++		CERROR("can't start ll_sa thread, rc: %d\n", rc);
++		dput(parent);
+                 lli->lli_opendir_key = NULL;
+                 thread_set_flags(thread, SVC_STOPPED);
+                 thread_set_flags(&sai->sai_agl_thread, SVC_STOPPED);
+diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
+index 22a0079..dbe4d71 100644
+--- a/lustre/mdc/mdc_request.c
++++ b/lustre/mdc/mdc_request.c
+@@ -1556,13 +1556,6 @@ static int mdc_changelog_send_thread(void *csdata)
+         CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
+                cs->cs_fp, cs->cs_startrec);
+ 
+-        /*
+-         * It's important to daemonize here to close unused FDs.
+-         * The write fd from pipe is already opened by the caller,
+-         * so it's fine to clear all files here
+-         */
+-        cfs_daemonize("mdc_clg_send_thread");
+-
+         OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
+         if (cs->cs_buf == NULL)
+                 GOTO(out, rc = -ENOMEM);
+@@ -1602,39 +1595,38 @@ out:
+         if (cs->cs_buf)
+                 OBD_FREE(cs->cs_buf, CR_MAXSIZE);
+         OBD_FREE_PTR(cs);
+-        /* detach from parent process so we get cleaned up */
+-        cfs_daemonize("cl_send");
+         return rc;
+ }
+ 
+ static int mdc_ioc_changelog_send(struct obd_device *obd,
+-                                  struct ioc_changelog *icc)
+-{
+-        struct changelog_show *cs;
+-        int rc;
+-
+-        /* Freed in mdc_changelog_send_thread */
+-        OBD_ALLOC_PTR(cs);
+-        if (!cs)
+-                return -ENOMEM;
+-
+-        cs->cs_obd = obd;
+-        cs->cs_startrec = icc->icc_recno;
+-        /* matching cfs_put_file in mdc_changelog_send_thread */
+-        cs->cs_fp = cfs_get_fd(icc->icc_id);
+-        cs->cs_flags = icc->icc_flags;
+-
+-        /* New thread because we should return to user app before
+-           writing into our pipe */
+-        rc = cfs_create_thread(mdc_changelog_send_thread, cs, CFS_DAEMON_FLAGS);
+-        if (rc >= 0) {
+-                CDEBUG(D_CHANGELOG, "start changelog thread: %d\n", rc);
+-                return 0;
+-        }
++				  struct ioc_changelog *icc)
++{
++	struct changelog_show *cs;
++	cfs_task_t *task;
++
++	/* Freed in mdc_changelog_send_thread */
++	OBD_ALLOC_PTR(cs);
++	if (!cs)
++		return -ENOMEM;
++
++	cs->cs_obd = obd;
++	cs->cs_startrec = icc->icc_recno;
++	/* matching cfs_put_file in mdc_changelog_send_thread */
++	cs->cs_fp = cfs_get_fd(icc->icc_id);
++	cs->cs_flags = icc->icc_flags;
++
++	/* New thread because we should return to user app before
++	   writing into our pipe */
++	task = kthread_run(mdc_changelog_send_thread, cs,
++			       "mdc_clg_send_thread");
++	if (!IS_ERR(task)) {
++		CDEBUG(D_CHANGELOG, "start changelog thread\n");
++		return 0;
++	}
+ 
+-        CERROR("Failed to start changelog thread: %d\n", rc);
+-        OBD_FREE_PTR(cs);
+-        return rc;
++	CERROR("Failed to start changelog thread: %ld\n", PTR_ERR(task));
++	OBD_FREE_PTR(cs);
++	return PTR_ERR(task);
+ }
+ 
+ static int mdc_ioc_hsm_ct_start(struct obd_export *exp,
+diff --git a/lustre/mdd/mdd_lfsck.c b/lustre/mdd/mdd_lfsck.c
+index 152a2d4..f7be2bb 100644
+--- a/lustre/mdd/mdd_lfsck.c
++++ b/lustre/mdd/mdd_lfsck.c
+@@ -2605,7 +2605,6 @@ static int mdd_lfsck_main(void *args)
+ 	int			 rc;
+ 	ENTRY;
+ 
+-	cfs_daemonize("lfsck");
+ 	rc = lu_env_init(&env, LCT_MD_THREAD | LCT_DT_THREAD);
+ 	if (rc != 0) {
+ 		CERROR("%s: LFSCK, fail to init env, rc = %d\n",
+@@ -2869,8 +2868,8 @@ trigger:
+ 
+ 	lfsck->ml_args_oit = (flags << DT_OTABLE_IT_FLAGS_SHIFT) | valid;
+ 	thread_set_flags(thread, 0);
+-	rc = cfs_create_thread(mdd_lfsck_main, lfsck, 0);
+-	if (rc < 0)
++	rc = PTR_ERR(kthread_run(mdd_lfsck_main, lfsck, "lfsck"));
++	if (IS_ERR_VALUE(rc))
+ 		CERROR("%s: cannot start LFSCK thread, rc = %d\n",
+ 		       mdd_lfsck2name(lfsck), rc);
+ 	else
+diff --git a/lustre/mdt/mdt_capa.c b/lustre/mdt/mdt_capa.c
+index 76e2c6f..d4a8bc4 100644
+--- a/lustre/mdt/mdt_capa.c
++++ b/lustre/mdt/mdt_capa.c
+@@ -218,7 +218,7 @@ static int mdt_ck_thread_main(void *args)
+         int                     rc;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("mdt_ck");
++	unshare_fs_struct();
+         cfs_block_allsigs();
+ 
+         thread_set_flags(thread, SVC_RUNNING);
+@@ -290,18 +290,18 @@ static int mdt_ck_thread_main(void *args)
+ 
+ int mdt_ck_thread_start(struct mdt_device *mdt)
+ {
+-        struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
+-        int rc;
+-
+-        cfs_waitq_init(&thread->t_ctl_waitq);
+-        rc = cfs_create_thread(mdt_ck_thread_main, mdt, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("cannot start mdt_ck thread, rc = %d\n", rc);
+-                return rc;
+-        }
+-
+-        l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
+-        return 0;
++	struct ptlrpc_thread *thread = &mdt->mdt_ck_thread;
++	cfs_task_t *task;
++
++	cfs_waitq_init(&thread->t_ctl_waitq);
++	task = kthread_run(mdt_ck_thread_main, mdt, "mdt_ck");
++	if (IS_ERR(task)) {
++		CERROR("cannot start mdt_ck thread, rc = %ld\n", PTR_ERR(task));
++		return PTR_ERR(task);
++	}
++
++	l_wait_condition(thread->t_ctl_waitq, thread_is_running(thread));
++	return 0;
+ }
+ 
+ void mdt_ck_thread_stop(struct mdt_device *mdt)
+diff --git a/lustre/mgc/mgc_request.c b/lustre/mgc/mgc_request.c
+index 67e4179..58d2912 100644
+--- a/lustre/mgc/mgc_request.c
++++ b/lustre/mgc/mgc_request.c
+@@ -480,12 +480,9 @@ static void do_requeue(struct config_llog_data *cld)
+ 
+ static int mgc_requeue_thread(void *data)
+ {
+-        char name[] = "ll_cfg_requeue";
+         int rc = 0;
+         ENTRY;
+ 
+-        cfs_daemonize(name);
+-
+         CDEBUG(D_MGC, "Starting requeue thread\n");
+ 
+         /* Keep trying failed locks periodically */
+@@ -776,20 +773,20 @@ static int mgc_setup(struct obd_device *obd, struct lustre_cfg *lcfg)
+         sptlrpc_lprocfs_cliobd_attach(obd);
+ 
+         if (cfs_atomic_inc_return(&mgc_count) == 1) {
+-                rq_state = 0;
+-                cfs_waitq_init(&rq_waitq);
+-
+-                /* start requeue thread */
+-                rc = cfs_create_thread(mgc_requeue_thread, NULL,
+-                                       CFS_DAEMON_FLAGS);
+-                if (rc < 0) {
+-                        CERROR("%s: Cannot start requeue thread (%d),"
+-                               "no more log updates!\n",
+-                               obd->obd_name, rc);
+-                        GOTO(err_cleanup, rc);
+-                }
+-                /* rc is the pid of mgc_requeue_thread. */
+-                rc = 0;
++		rq_state = 0;
++		cfs_waitq_init(&rq_waitq);
++
++		/* start requeue thread */
++		rc = PTR_ERR(kthread_run(mgc_requeue_thread, NULL,
++					     "ll_cfg_requeue"));
++		if (IS_ERR_VALUE(rc)) {
++			CERROR("%s: Cannot start requeue thread (%d),"
++			       "no more log updates!\n",
++			       obd->obd_name, rc);
++			GOTO(err_cleanup, rc);
++		}
++		/* rc is the pid of mgc_requeue_thread. */
++		rc = 0;
+         }
+ 
+         RETURN(rc);
+diff --git a/lustre/mgs/mgs_nids.c b/lustre/mgs/mgs_nids.c
+index 781250f..e6abdc4 100644
+--- a/lustre/mgs/mgs_nids.c
++++ b/lustre/mgs/mgs_nids.c
+@@ -440,7 +440,6 @@ static int mgs_ir_notify(void *arg)
+ 
+         LASSERTF(sizeof(name) < 32, "name is too large to be in stack.\n");
+         sprintf(name, "mgs_%s_notify", fsdb->fsdb_name);
+-        cfs_daemonize(name);
+ 
+ 	complete(&fsdb->fsdb_notify_comp);
+ 
+@@ -471,7 +470,7 @@ static int mgs_ir_notify(void *arg)
+ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
+ 		   struct fs_db *fsdb)
+ {
+-        int rc;
++	cfs_task_t *task;
+ 
+         if (!ir_timeout)
+                 ir_timeout = OBD_IR_MGS_TIMEOUT;
+@@ -488,11 +487,13 @@ int mgs_ir_init_fs(const struct lu_env *env, struct mgs_device *mgs,
+         cfs_atomic_set(&fsdb->fsdb_notify_phase, 0);
+         cfs_waitq_init(&fsdb->fsdb_notify_waitq);
+ 	init_completion(&fsdb->fsdb_notify_comp);
+-        rc = cfs_create_thread(mgs_ir_notify, fsdb, CFS_DAEMON_FLAGS);
+-        if (rc > 0)
++
++	task = kthread_run(mgs_ir_notify, fsdb,
++			       "mgs_%s_notify", fsdb->fsdb_name);
++	if (IS_ERR(task))
+ 		wait_for_completion(&fsdb->fsdb_notify_comp);
+-        else
+-                CERROR("Start notify thread error %d\n", rc);
++	else
++		CERROR("Start notify thread error %ld\n", PTR_ERR(task));
+ 
+ 	mgs_nidtbl_init_fs(env, fsdb);
+         return 0;
+diff --git a/lustre/obdclass/genops.c b/lustre/obdclass/genops.c
+index cd1443c..42100d5 100644
+--- a/lustre/obdclass/genops.c
++++ b/lustre/obdclass/genops.c
+@@ -1745,14 +1745,7 @@ EXPORT_SYMBOL(obd_zombie_barrier);
+  */
+ static int obd_zombie_impexp_thread(void *unused)
+ {
+-	int rc;
+-
+-	rc = cfs_daemonize_ctxt("obd_zombid");
+-	if (rc != 0) {
+-		complete(&obd_zombie_start);
+-		RETURN(rc);
+-	}
+-
++	unshare_fs_struct();
+ 	complete(&obd_zombie_start);
+ 
+ 	obd_zombie_pid = cfs_curproc_pid();
+@@ -1801,7 +1794,9 @@ int obd_zombie_impexp_kill(void *arg)
+  */
+ int obd_zombie_impexp_init(void)
+ {
+-	int rc;
++#ifdef __KERNEL__
++	cfs_task_t *task;
++#endif
+ 
+ 	CFS_INIT_LIST_HEAD(&obd_zombie_imports);
+ 	CFS_INIT_LIST_HEAD(&obd_zombie_exports);
+@@ -1812,9 +1807,9 @@ int obd_zombie_impexp_init(void)
+ 	obd_zombie_pid = 0;
+ 
+ #ifdef __KERNEL__
+-	rc = cfs_create_thread(obd_zombie_impexp_thread, NULL, 0);
+-	if (rc < 0)
+-		RETURN(rc);
++	task = kthread_run(obd_zombie_impexp_thread, NULL, "obd_zombid");
++	if (IS_ERR(task))
++		RETURN(PTR_ERR(task));
+ 
+ 	wait_for_completion(&obd_zombie_start);
+ #else
+@@ -1826,9 +1821,8 @@ int obd_zombie_impexp_init(void)
+         obd_zombie_impexp_idle_cb =
+                 liblustre_register_idle_callback("obd_zombi_impexp_check",
+                                                  &obd_zombie_impexp_check, NULL);
+-        rc = 0;
+ #endif
+-        RETURN(rc);
++	RETURN(0);
+ }
+ /**
+  * stop destroy zombie import/export thread
+diff --git a/lustre/obdclass/llog.c b/lustre/obdclass/llog.c
+index f08fd6e..ce22932 100644
+--- a/lustre/obdclass/llog.c
++++ b/lustre/obdclass/llog.c
+@@ -440,7 +440,7 @@ static int llog_process_thread_daemonize(void *arg)
+ 	struct lu_env			 env;
+ 	int				 rc;
+ 
+-	cfs_daemonize_ctxt("llog_process_thread");
++	unshare_fs_struct();
+ 
+ 	/* client env has no keys, tags is just 0 */
+ 	rc = lu_env_init(&env, LCT_LOCAL | LCT_MG_THREAD);
+@@ -482,9 +482,9 @@ int llog_process_or_fork(const struct lu_env *env,
+ 		 * init the new one in llog_process_thread_daemonize. */
+ 		lpi->lpi_env = NULL;
+ 		init_completion(&lpi->lpi_completion);
+-		rc = cfs_create_thread(llog_process_thread_daemonize, lpi,
+-				       CFS_DAEMON_FLAGS);
+-		if (rc < 0) {
++		rc = PTR_ERR(kthread_run(llog_process_thread_daemonize, lpi,
++					     "llog_process_thread"));
++		if (IS_ERR_VALUE(rc)) {
+ 			CERROR("%s: cannot start thread: rc = %d\n",
+ 			       loghandle->lgh_ctxt->loc_obd->obd_name, rc);
+ 			OBD_FREE_PTR(lpi);
+diff --git a/lustre/obdclass/llog_cat.c b/lustre/obdclass/llog_cat.c
+index fbf2766..7945237 100644
+--- a/lustre/obdclass/llog_cat.c
++++ b/lustre/obdclass/llog_cat.c
+@@ -647,7 +647,7 @@ int llog_cat_process_thread(void *data)
+         int rc;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("ll_log_process");
++	unshare_fs_struct();
+ 
+ 	rc = lu_env_init(&env, LCT_LOCAL);
+ 	if (rc)
+diff --git a/lustre/osd-ldiskfs/osd_scrub.c b/lustre/osd-ldiskfs/osd_scrub.c
+index 858aa07..ad72c78 100644
+--- a/lustre/osd-ldiskfs/osd_scrub.c
++++ b/lustre/osd-ldiskfs/osd_scrub.c
+@@ -962,7 +962,6 @@ static int osd_scrub_main(void *args)
+ 	int		      rc;
+ 	ENTRY;
+ 
+-	cfs_daemonize("OI_scrub");
+ 	rc = lu_env_init(&env, LCT_DT_THREAD);
+ 	if (rc != 0) {
+ 		CERROR("%.16s: OI scrub, fail to init env, rc = %d\n",
+@@ -1541,8 +1540,8 @@ again:
+ 
+ 	scrub->os_start_flags = flags;
+ 	thread_set_flags(thread, 0);
+-	rc = cfs_create_thread(osd_scrub_main, dev, 0);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(osd_scrub_main, dev, "OI_scrub"));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("%.16s: cannot start iteration thread, rc = %d\n",
+ 		       LDISKFS_SB(osd_sb(dev))->s_es->s_volume_name, rc);
+ 		RETURN(rc);
+diff --git a/lustre/osp/osp_precreate.c b/lustre/osp/osp_precreate.c
+index 405524c..de5e7de 100644
+--- a/lustre/osp/osp_precreate.c
++++ b/lustre/osp/osp_precreate.c
+@@ -881,15 +881,11 @@ static int osp_precreate_thread(void *_arg)
+ 	struct osp_device	*d = _arg;
+ 	struct ptlrpc_thread	*thread = &d->opd_pre_thread;
+ 	struct l_wait_info	 lwi = { 0 };
+-	char			 pname[16];
+ 	struct lu_env		 env;
+ 	int			 rc;
+ 
+ 	ENTRY;
+ 
+-	sprintf(pname, "osp-pre-%u", d->opd_index);
+-	cfs_daemonize(pname);
+-
+ 	rc = lu_env_init(&env, d->opd_dt_dev.dd_lu_dev.ld_type->ldt_ctx_tags);
+ 	if (rc) {
+ 		CERROR("%s: init env error: rc = %d\n", d->opd_obd->obd_name,
+@@ -1257,7 +1253,7 @@ out:
+ int osp_init_precreate(struct osp_device *d)
+ {
+ 	struct l_wait_info	 lwi = { 0 };
+-	int			 rc;
++	cfs_task_t		*task;
+ 
+ 	ENTRY;
+ 
+@@ -1292,10 +1288,11 @@ int osp_init_precreate(struct osp_device *d)
+ 	/*
+ 	 * start thread handling precreation and statfs updates
+ 	 */
+-	rc = cfs_create_thread(osp_precreate_thread, d, 0);
+-	if (rc < 0) {
+-		CERROR("can't start precreate thread %d\n", rc);
+-		RETURN(rc);
++	task = kthread_run(osp_precreate_thread, d,
++			       "osp-pre-%u", d->opd_index);
++	if (IS_ERR(task)) {
++		CERROR("can't start precreate thread %ld\n", PTR_ERR(task));
++		RETURN(PTR_ERR(task));
+ 	}
+ 
+ 	l_wait_event(d->opd_pre_thread.t_ctl_waitq,
+diff --git a/lustre/osp/osp_sync.c b/lustre/osp/osp_sync.c
+index fc67e5c..22650f4 100644
+--- a/lustre/osp/osp_sync.c
++++ b/lustre/osp/osp_sync.c
+@@ -833,7 +833,6 @@ static int osp_sync_thread(void *_arg)
+ 	struct llog_handle	*llh;
+ 	struct lu_env		 env;
+ 	int			 rc;
+-	char			 pname[16];
+ 
+ 	ENTRY;
+ 
+@@ -844,9 +843,6 @@ static int osp_sync_thread(void *_arg)
+ 		RETURN(rc);
+ 	}
+ 
+-	sprintf(pname, "osp-syn-%u", d->opd_index);
+-	cfs_daemonize(pname);
+-
+ 	spin_lock(&d->opd_syn_lock);
+ 	thread->t_flags = SVC_RUNNING;
+ 	spin_unlock(&d->opd_syn_lock);
+@@ -1012,6 +1008,7 @@ static void osp_sync_llog_fini(const struct lu_env *env, struct osp_device *d)
+ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
+ {
+ 	struct l_wait_info	 lwi = { 0 };
++	char			 pname[16];
+ 	int			 rc;
+ 
+ 	ENTRY;
+@@ -1040,8 +1037,9 @@ int osp_sync_init(const struct lu_env *env, struct osp_device *d)
+ 	cfs_waitq_init(&d->opd_syn_thread.t_ctl_waitq);
+ 	CFS_INIT_LIST_HEAD(&d->opd_syn_committed_there);
+ 
+-	rc = cfs_create_thread(osp_sync_thread, d, 0);
+-	if (rc < 0) {
++	sprintf(pname, "osp-syn-%u", d->opd_index);
++	rc = PTR_ERR(kthread_run(osp_sync_thread, d, pname));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("%s: can't start sync thread: rc = %d\n",
+ 		       d->opd_obd->obd_name, rc);
+ 		GOTO(err_llog, rc);
+diff --git a/lustre/ptlrpc/import.c b/lustre/ptlrpc/import.c
+index 7eaee96..9d17417 100644
+--- a/lustre/ptlrpc/import.c
++++ b/lustre/ptlrpc/import.c
+@@ -1263,7 +1263,7 @@ static int ptlrpc_invalidate_import_thread(void *data)
+ 
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("ll_imp_inval");
++	unshare_fs_struct();
+ 
+         CDEBUG(D_HA, "thread invalidate import %s to %s@%s\n",
+                imp->imp_obd->obd_name, obd2cli_tgt(imp->imp_obd),
+@@ -1333,20 +1333,24 @@ int ptlrpc_import_recovery_state_machine(struct obd_import *imp)
+ 		spin_unlock(&imp->imp_lock);
+ 
+ #ifdef __KERNEL__
+-                /* bug 17802:  XXX client_disconnect_export vs connect request
+-                 * race. if client will evicted at this time, we start
+-                 * invalidate thread without reference to import and import can
+-                 * be freed at same time. */
+-                class_import_get(imp);
+-                rc = cfs_create_thread(ptlrpc_invalidate_import_thread, imp,
+-                                       CFS_DAEMON_FLAGS);
+-                if (rc < 0) {
+-                        class_import_put(imp);
+-                        CERROR("error starting invalidate thread: %d\n", rc);
+-                } else {
+-                        rc = 0;
+-                }
+-                RETURN(rc);
++		{
++		cfs_task_t *task;
++		/* bug 17802:  XXX client_disconnect_export vs connect request
++		 * race. if client will evicted at this time, we start
++		 * invalidate thread without reference to import and import can
++		 * be freed at same time. */
++		class_import_get(imp);
++		task = kthread_run(ptlrpc_invalidate_import_thread, imp,
++				     "ll_imp_inval");
++		if (IS_ERR(task)) {
++			class_import_put(imp);
++			CERROR("error starting invalidate thread: %d\n", rc);
++			rc = PTR_ERR(task);
++		} else {
++			rc = 0;
++		}
++		RETURN(rc);
++		}
+ #else
+                 ptlrpc_invalidate_import(imp);
+ 
+diff --git a/lustre/ptlrpc/pinger.c b/lustre/ptlrpc/pinger.c
+index f5bf639..816d054 100644
+--- a/lustre/ptlrpc/pinger.c
++++ b/lustre/ptlrpc/pinger.c
+@@ -286,8 +286,6 @@ static int ptlrpc_pinger_main(void *arg)
+         struct ptlrpc_thread *thread = (struct ptlrpc_thread *)arg;
+ 	ENTRY;
+ 
+-        cfs_daemonize(thread->t_name);
+-
+         /* Record that the thread is running */
+         thread_set_flags(thread, SVC_RUNNING);
+         cfs_waitq_signal(&thread->t_ctl_waitq);
+@@ -382,14 +380,14 @@ int ptlrpc_start_pinger(void)
+ 
+ 	/* CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+ 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away. */
+-        rc = cfs_create_thread(ptlrpc_pinger_main,
+-			       pinger_thread, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("cannot start thread: %d\n", rc);
+-                OBD_FREE(pinger_thread, sizeof(*pinger_thread));
+-                pinger_thread = NULL;
+-                RETURN(rc);
+-        }
++	rc = PTR_ERR(kthread_run(ptlrpc_pinger_main,
++				 pinger_thread, pinger_thread->t_name));
++	if (IS_ERR_VALUE(rc)) {
++		CERROR("cannot start thread: %d\n", rc);
++		OBD_FREE(pinger_thread, sizeof(*pinger_thread));
++		pinger_thread = NULL;
++		RETURN(rc);
++	}
+         l_wait_event(pinger_thread->t_ctl_waitq,
+                      thread_is_running(pinger_thread), &lwi);
+ 
+@@ -658,7 +656,7 @@ static int ping_evictor_main(void *arg)
+         time_t expire_time;
+         ENTRY;
+ 
+-        cfs_daemonize_ctxt("ll_evictor");
++	unshare_fs_struct();
+ 
+         CDEBUG(D_HA, "Starting Ping Evictor\n");
+         pet_state = PET_READY;
+@@ -733,18 +731,19 @@ static int ping_evictor_main(void *arg)
+ 
+ void ping_evictor_start(void)
+ {
+-        int rc;
++	cfs_task_t *task;
+ 
+-        if (++pet_refcount > 1)
+-                return;
++	if (++pet_refcount > 1)
++		return;
+ 
+-        cfs_waitq_init(&pet_waitq);
++	cfs_waitq_init(&pet_waitq);
+ 
+-        rc = cfs_create_thread(ping_evictor_main, NULL, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                pet_refcount--;
+-                CERROR("Cannot start ping evictor thread: %d\n", rc);
+-        }
++	task = kthread_run(ping_evictor_main, NULL, "ll_evictor");
++	if (IS_ERR(task)) {
++		pet_refcount--;
++		CERROR("Cannot start ping evictor thread: %ld\n",
++			PTR_ERR(task));
++	}
+ }
+ EXPORT_SYMBOL(ping_evictor_start);
+ 
+diff --git a/lustre/ptlrpc/ptlrpcd.c b/lustre/ptlrpc/ptlrpcd.c
+index 669b0d7..b6486e0 100644
+--- a/lustre/ptlrpc/ptlrpcd.c
++++ b/lustre/ptlrpc/ptlrpcd.c
+@@ -410,7 +410,7 @@ static int ptlrpcd(void *arg)
+         int rc, exit = 0;
+         ENTRY;
+ 
+-	cfs_daemonize_ctxt(pc->pc_name);
++	unshare_fs_struct();
+ #if defined(CONFIG_SMP) && \
+ (defined(HAVE_CPUMASK_OF_NODE) || defined(HAVE_NODE_TO_CPUMASK))
+ 	if (test_bit(LIOD_BIND, &pc->pc_flags)) {
+@@ -709,18 +709,21 @@ int ptlrpcd_start(int index, int max, const char *name, struct ptlrpcd_ctl *pc)
+ 
+         env = 1;
+ #ifdef __KERNEL__
+-        if (index >= 0) {
+-                rc = ptlrpcd_bind(index, max);
+-                if (rc < 0)
+-                        GOTO(out, rc);
+-        }
++	{
++		cfs_task_t *task;
++		if (index >= 0) {
++			rc = ptlrpcd_bind(index, max);
++			if (rc < 0)
++				GOTO(out, rc);
++		}
+ 
+-        rc = cfs_create_thread(ptlrpcd, pc, 0);
+-        if (rc < 0)
+-                GOTO(out, rc);
++		task = kthread_run(ptlrpcd, pc, pc->pc_name);
++		if (IS_ERR(task))
++			GOTO(out, rc = PTR_ERR(task));
+ 
+-        rc = 0;
+-	wait_for_completion(&pc->pc_starting);
++		rc = 0;
++		wait_for_completion(&pc->pc_starting);
++	}
+ #else
+         pc->pc_wait_callback =
+                 liblustre_register_wait_callback("ptlrpcd_check_async_rpcs",
+diff --git a/lustre/ptlrpc/recov_thread.c b/lustre/ptlrpc/recov_thread.c
+index dee77cd..7b5738f 100644
+--- a/lustre/ptlrpc/recov_thread.c
++++ b/lustre/ptlrpc/recov_thread.c
+@@ -513,10 +513,11 @@ EXPORT_SYMBOL(llog_recov_thread_fini);
+ static int llog_recov_thread_replay(struct llog_ctxt *ctxt,
+                                     void *cb, void *arg)
+ {
+-        struct obd_device *obd = ctxt->loc_obd;
+-        struct llog_process_cat_args *lpca;
+-        int rc;
+-        ENTRY;
++	struct obd_device *obd = ctxt->loc_obd;
++	struct llog_process_cat_args *lpca;
++	cfs_task_t *task;
++	int rc;
++	ENTRY;
+ 
+         if (obd->obd_stopping)
+                 RETURN(-ENODEV);
+@@ -534,22 +535,23 @@ static int llog_recov_thread_replay(struct llog_ctxt *ctxt,
+         /*
+          * This will be balanced in llog_cat_process_thread()
+          */
+-        lpca->lpca_ctxt = llog_ctxt_get(ctxt);
+-        if (!lpca->lpca_ctxt) {
+-                OBD_FREE_PTR(lpca);
+-                RETURN(-ENODEV);
+-        }
+-        rc = cfs_create_thread(llog_cat_process_thread, lpca, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("Error starting llog_cat_process_thread(): %d\n", rc);
+-                OBD_FREE_PTR(lpca);
+-                llog_ctxt_put(ctxt);
+-        } else {
+-                CDEBUG(D_HA, "Started llog_cat_process_thread(): %d\n", rc);
+-                rc = 0;
+-        }
++	lpca->lpca_ctxt = llog_ctxt_get(ctxt);
++	if (!lpca->lpca_ctxt) {
++		OBD_FREE_PTR(lpca);
++		RETURN(-ENODEV);
++	}
++	task = kthread_run(llog_cat_process_thread, lpca, "ll_log_process");
++	if (IS_ERR(task)) {
++		rc = PTR_ERR(task);
++		CERROR("Error starting llog_cat_process_thread(): %d\n", rc);
++		OBD_FREE_PTR(lpca);
++		llog_ctxt_put(ctxt);
++	} else {
++		CDEBUG(D_HA, "Started llog_cat_process_thread()\n");
++		rc = 0;
++	}
+ 
+-        RETURN(rc);
++	RETURN(rc);
+ }
+ 
+ int llog_obd_repl_connect(struct llog_ctxt *ctxt,
+diff --git a/lustre/ptlrpc/sec_gc.c b/lustre/ptlrpc/sec_gc.c
+index 7634d22..595f710 100644
+--- a/lustre/ptlrpc/sec_gc.c
++++ b/lustre/ptlrpc/sec_gc.c
+@@ -169,7 +169,7 @@ static int sec_gc_main(void *arg)
+         struct ptlrpc_thread *thread = (struct ptlrpc_thread *) arg;
+         struct l_wait_info    lwi;
+ 
+-        cfs_daemonize_ctxt("sptlrpc_gc");
++	unshare_fs_struct();
+ 
+         /* Record that the thread is running */
+         thread_set_flags(thread, SVC_RUNNING);
+@@ -222,7 +222,7 @@ again:
+ int sptlrpc_gc_init(void)
+ {
+ 	struct l_wait_info lwi = { 0 };
+-	int                rc;
++	cfs_task_t *task;
+ 
+ 	mutex_init(&sec_gc_mutex);
+ 	spin_lock_init(&sec_gc_list_lock);
+@@ -232,10 +232,10 @@ int sptlrpc_gc_init(void)
+         memset(&sec_gc_thread, 0, sizeof(sec_gc_thread));
+         cfs_waitq_init(&sec_gc_thread.t_ctl_waitq);
+ 
+-        rc = cfs_create_thread(sec_gc_main, &sec_gc_thread, CFS_DAEMON_FLAGS);
+-        if (rc < 0) {
+-                CERROR("can't start gc thread: %d\n", rc);
+-                return rc;
++	task = kthread_run(sec_gc_main, &sec_gc_thread, "sptlrpc_gc");
++	if (IS_ERR(task)) {
++		CERROR("can't start gc thread: %ld\n", PTR_ERR(task));
++		return PTR_ERR(task);
+         }
+ 
+         l_wait_event(sec_gc_thread.t_ctl_waitq,
+diff --git a/lustre/ptlrpc/service.c b/lustre/ptlrpc/service.c
+index 6278f7b..a0082e4 100644
+--- a/lustre/ptlrpc/service.c
++++ b/lustre/ptlrpc/service.c
+@@ -2366,7 +2366,7 @@ static int ptlrpc_main(void *arg)
+         ENTRY;
+ 
+         thread->t_pid = cfs_curproc_pid();
+-        cfs_daemonize_ctxt(thread->t_name);
++	unshare_fs_struct();
+ 
+ 	/* NB: we will call cfs_cpt_bind() for all threads, because we
+ 	 * might want to run lustre server only on a subset of system CPUs,
+@@ -2561,7 +2561,7 @@ static int ptlrpc_hr_main(void *arg)
+ 
+ 	snprintf(threadname, sizeof(threadname), "ptlrpc_hr%02d_%03d",
+ 		 hrp->hrp_cpt, hrt->hrt_id);
+-	cfs_daemonize_ctxt(threadname);
++	unshare_fs_struct();
+ 
+ 	rc = cfs_cpt_bind(ptlrpc_hr.hr_cpt_table, hrp->hrp_cpt);
+ 	if (rc != 0) {
+@@ -2627,10 +2627,13 @@ static int ptlrpc_start_hr_threads(void)
+ 		int	rc = 0;
+ 
+ 		for (j = 0; j < hrp->hrp_nthrs; j++) {
+-			rc = cfs_create_thread(ptlrpc_hr_main,
+-					       &hrp->hrp_thrs[j],
+-					       CLONE_VM | CLONE_FILES);
+-			if (rc < 0)
++			struct	ptlrpc_hr_thread *hrt = &hrp->hrp_thrs[j];
++			rc = PTR_ERR(kthread_run(ptlrpc_hr_main,
++						 &hrp->hrp_thrs[j],
++						 "ptlrpc_hr%02d_%03d",
++						 hrp->hrp_cpt,
++						 hrt->hrt_id));
++			if (IS_ERR_VALUE(rc))
+ 				break;
+ 		}
+ 		cfs_wait_event(ptlrpc_hr.hr_waitq,
+@@ -2822,8 +2825,8 @@ int ptlrpc_start_thread(struct ptlrpc_service_part *svcpt, int wait)
+ 	 * CLONE_VM and CLONE_FILES just avoid a needless copy, because we
+ 	 * just drop the VM and FILES in cfs_daemonize_ctxt() right away.
+ 	 */
+-	rc = cfs_create_thread(ptlrpc_main, thread, CFS_DAEMON_FLAGS);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(ptlrpc_main, thread, thread->t_name));
++	if (IS_ERR_VALUE(rc)) {
+ 		CERROR("cannot start thread '%s': rc %d\n",
+ 		       thread->t_name, rc);
+ 		spin_lock(&svcpt->scp_lock);
+diff --git a/lustre/quota/qmt_lock.c b/lustre/quota/qmt_lock.c
+index 3236fb5..7c455fe 100644
+--- a/lustre/quota/qmt_lock.c
++++ b/lustre/quota/qmt_lock.c
+@@ -716,7 +716,6 @@ static int qmt_reba_thread(void *arg)
+ 	struct l_wait_info	 lwi = { 0 };
+ 	struct lu_env		*env;
+ 	struct lquota_entry	*lqe, *tmp;
+-	char			 pname[MTI_NAME_MAXLEN];
+ 	int			 rc;
+ 	ENTRY;
+ 
+@@ -731,9 +730,6 @@ static int qmt_reba_thread(void *arg)
+ 		RETURN(rc);
+ 	}
+ 
+-	snprintf(pname, MTI_NAME_MAXLEN, "qmt_reba_%s", qmt->qmt_svname);
+-	cfs_daemonize(pname);
+-
+ 	thread_set_flags(thread, SVC_RUNNING);
+ 	cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+@@ -773,15 +769,16 @@ int qmt_start_reba_thread(struct qmt_device *qmt)
+ {
+ 	struct ptlrpc_thread	*thread = &qmt->qmt_reba_thread;
+ 	struct l_wait_info	 lwi    = { 0 };
+-	int			 rc;
++	cfs_task_t		*task;
+ 	ENTRY;
+ 
+-	rc = cfs_create_thread(qmt_reba_thread, (void *)qmt, 0);
+-	if (rc < 0) {
+-		CERROR("%s: failed to start rebalance thread (%d)\n",
+-		       qmt->qmt_svname, rc);
++	task = kthread_run(qmt_reba_thread, (void *)qmt,
++			       "qmt_reba_%s", qmt->qmt_svname);
++	if (IS_ERR(task)) {
++		CERROR("%s: failed to start rebalance thread (%ld)\n",
++		       qmt->qmt_svname, PTR_ERR(task));
+ 		thread_set_flags(thread, SVC_STOPPED);
+-		RETURN(rc);
++		RETURN(PTR_ERR(task));
+ 	}
+ 
+ 	l_wait_event(thread->t_ctl_waitq,
+diff --git a/lustre/quota/qsd_reint.c b/lustre/quota/qsd_reint.c
+index ad2894f..070e535 100644
+--- a/lustre/quota/qsd_reint.c
++++ b/lustre/quota/qsd_reint.c
+@@ -417,8 +417,6 @@ static int qsd_reint_main(void *args)
+ 	int			 rc;
+ 	ENTRY;
+ 
+-	cfs_daemonize("qsd_reint");
+-
+ 	CDEBUG(D_QUOTA, "%s: Starting reintegration thread for "DFID"\n",
+ 	       qsd->qsd_svname, PFID(&qqi->qqi_fid));
+ 
+@@ -662,8 +660,8 @@ int qsd_start_reint_thread(struct qsd_qtype_info *qqi)
+ 		RETURN(0);
+ 	}
+ 
+-	rc = cfs_create_thread(qsd_reint_main, (void *)qqi, 0);
+-	if (rc < 0) {
++	rc = PTR_ERR(kthread_run(qsd_reint_main, (void *)qqi, "qsd_reint"));
++	if (IS_ERR_VALUE(rc)) {
+ 		thread_set_flags(thread, SVC_STOPPED);
+ 		write_lock(&qsd->qsd_lock);
+ 		qqi->qqi_reint = 0;
+diff --git a/lustre/quota/qsd_writeback.c b/lustre/quota/qsd_writeback.c
+index 037fb2b..5ab39e4 100644
+--- a/lustre/quota/qsd_writeback.c
++++ b/lustre/quota/qsd_writeback.c
+@@ -404,7 +404,6 @@ static int qsd_upd_thread(void *arg)
+ 	struct l_wait_info	 lwi;
+ 	cfs_list_t		 queue;
+ 	struct qsd_upd_rec	*upd, *n;
+-	char			 pname[MTI_NAME_MAXLEN];
+ 	struct lu_env		*env;
+ 	int			 qtype, rc = 0;
+ 	bool			 uptodate;
+@@ -423,9 +422,6 @@ static int qsd_upd_thread(void *arg)
+ 		RETURN(rc);
+ 	}
+ 
+-	snprintf(pname, MTI_NAME_MAXLEN, "lquota_wb_%s", qsd->qsd_svname);
+-	cfs_daemonize(pname);
+-
+ 	thread_set_flags(thread, SVC_RUNNING);
+ 	cfs_waitq_signal(&thread->t_ctl_waitq);
+ 
+@@ -487,14 +483,16 @@ int qsd_start_upd_thread(struct qsd_instance *qsd)
+ {
+ 	struct ptlrpc_thread	*thread = &qsd->qsd_upd_thread;
+ 	struct l_wait_info	 lwi = { 0 };
+-	int			 rc;
++	cfs_task_t		*task;
+ 	ENTRY;
+ 
+-	rc = cfs_create_thread(qsd_upd_thread, (void *)qsd, 0);
+-	if (rc < 0) {
+-		CERROR("Fail to start quota update thread. rc: %d\n", rc);
++	task = kthread_run(qsd_upd_thread, (void *)qsd,
++			   "lquota_wb_%s", qsd->qsd_svname);
++	if (IS_ERR(task)) {
++		CERROR("Fail to start quota update thread. rc: %ld\n",
++			PTR_ERR(task));
+ 		thread_set_flags(thread, SVC_STOPPED);
+-		RETURN(rc);
++		RETURN(PTR_ERR(task));
+ 	}
+ 
+ 	l_wait_event(thread->t_ctl_waitq,
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 4ee639c..9ede34b 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -30,6 +30,7 @@ PATCHES=(
 	"${FILESDIR}/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch"
 	"${FILESDIR}/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch"
 	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
+	"${FILESDIR}/0006-LU-2850-kernel-3.8-upstream-kills-daemonize.patch"
 )
 
 pkg_setup() {


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2013-03-06 12:37 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2013-03-06 12:37 UTC (permalink / raw
  To: gentoo-commits

commit:     d4478dc0858706f25c607883239e7ce8d6b616fd
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Wed Mar  6 12:36:47 2013 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Wed Mar  6 12:36:47 2013 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=d4478dc0

Add patches for kernels 3.7 and 3.8

Package-Manager: portage-2.2.0_alpha166

---
 sys-cluster/lustre/ChangeLog                       |    9 +
 ...ld-check-header-files-in-generated-uapi-d.patch |  161 ++++++++++++++
 ...-kernel-3.7-kernel-posix-acl-needs-userns.patch |  120 +++++++++++
 ...3-LU-2850-kernel-3.7-uneports-sock_map_fd.patch |  121 +++++++++++
 ...rnel-3.7-get-putname-uses-struct-filename.patch |  226 ++++++++++++++++++++
 ...50-kernel-3.8-upstream-removes-vmtruncate.patch |   82 +++++++
 sys-cluster/lustre/lustre-9999.ebuild              |    8 +
 7 files changed, 727 insertions(+), 0 deletions(-)

diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 3791ff7..1295495 100644
--- a/sys-cluster/lustre/ChangeLog
+++ b/sys-cluster/lustre/ChangeLog
@@ -2,6 +2,15 @@
 # Copyright 1999-2013 Gentoo Foundation; Distributed under the GPL v2
 # $Header: $
 
+  06 Mar 2013; Alexey Shvetsov <alexxy@gentoo.org>
+  +files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch,
+  +files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch,
+  +files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch,
+  +files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch,
+  +files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch,
+  lustre-9999.ebuild:
+  Add patches for kernels 3.7 and 3.8
+
   10 Feb 2013; Alexey Shvetsov <alexxy@gentoo.org>
   -files/2.4/0001-LU-1994-llite-atomic_open-support.patch, lustre-9999.ebuild,
   metadata.xml:

diff --git a/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
new file mode 100644
index 0000000..c91788c
--- /dev/null
+++ b/sys-cluster/lustre/files/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch
@@ -0,0 +1,161 @@
+From 26da95a5b9e0502b1001211370fa01ad17f8ef74 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Wed, 27 Feb 2013 18:29:34 +0800
+Subject: [PATCH 1/5] LU-2850 build: check header files in generated uapi dir
+
+Upstream moved UAPI headers into generated/uapi directory since
+v3.7. We need to check/include necessary header files there.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: Ib104919189ebc0af7d3b5e9ca3b866b3b98be3dc
+---
+ autoMakefile.am                      |  2 +-
+ build/autoconf/lustre-build-linux.m4 | 14 ++++++++------
+ ldiskfs/config/ldiskfs-build.m4      | 14 ++++++++------
+ lustre/autoconf/lustre-core.m4       |  2 +-
+ lustre/scripts/version_tag.pl        |  1 +
+ 5 files changed, 19 insertions(+), 14 deletions(-)
+
+diff --git a/autoMakefile.am b/autoMakefile.am
+index 883d13c..8f3518b 100644
+--- a/autoMakefile.am
++++ b/autoMakefile.am
+@@ -84,7 +84,7 @@ all-am: modules
+ modules: $(DEP) all-sources
+ 	$(MAKE) CC="$(CC)" -C $(LINUX_OBJ)			     \
+ 	-f $(PWD)/build/Makefile LUSTRE_LINUX_CONFIG=$(LINUX_CONFIG) \
+-        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -Iinclude $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
++        LINUXINCLUDE='$(EXTRA_LNET_INCLUDE) -I$$(srctree)/arch/$$(SRCARCH)/include -I$$(srctree)/arch/$$(SRCARCH)/include/generated -I$$(srctree)/arch/$$(SRCARCH)/include/generated/uapi -I$$(srctree)/arch/$$(SRCARCH)/include/uapi -Iinclude -Iinclude/uapi -Iinclude/generated -Iinclude/generated/uapi $$(if $$(KBUILD_SRC),-Iinclude2 -I$$(srctree)/include) -include $(CONFIG_INCLUDE)' \
+ 	$(MODULE_TARGET)=$(PWD) -o tmp_include_depends -o scripts -o \
+ 	include/config/MARKER $@
+ endif # LINUX
+diff --git a/build/autoconf/lustre-build-linux.m4 b/build/autoconf/lustre-build-linux.m4
+index db58704..15e2aa0 100644
+--- a/build/autoconf/lustre-build-linux.m4
++++ b/build/autoconf/lustre-build-linux.m4
+@@ -44,7 +44,7 @@ AC_MSG_CHECKING([for Linux release])
+ if test -s $LINUX_OBJ/include/$AUTOCONF_HDIR/utsrelease.h ; then
+ 	LINUXRELEASEHEADER=$AUTOCONF_HDIR/utsrelease.h
+ else
+-	LINUXRELEASEHEADER=linux/version.h
++	LINUXRELEASEHEADER=$LINUXVERSION_HDIR/version.h
+ fi
+ LB_LINUX_TRY_MAKE([
+ 	#include <$LINUXRELEASEHEADER>
+@@ -96,7 +96,7 @@ AC_SUBST(RELEASE)
+ # check is redhat/suse kernels
+ AC_MSG_CHECKING([that RedHat kernel])
+ LB_LINUX_TRY_COMPILE([
+-		#include <linux/version.h>
++		#include <$LINUXVERSION_HDIR/version.h>
+ 	],[
+ 		#ifndef RHEL_RELEASE_CODE
+ 		#error "not redhat kernel"
+@@ -222,8 +222,10 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+         [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
+ 	[AC_MSG_ERROR([Run make config in $LINUX.])])])
+         AC_SUBST(AUTOCONF_HDIR)
+-LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
+-	[AC_MSG_ERROR([Run make config in $LINUX.])])
++LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],[LINUXVERSION_HDIR=generated/uapi/linux],
++        [LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[LINUXVERSION_HDIR=linux],
++	[AC_MSG_ERROR([Run make config in $LINUX.])])])
++        AC_SUBST(LINUXVERSION_HDIR)
+ 
+ # ----------- kconfig.h exists ---------------
+ # kernel 3.1, $LINUX/include/linux/kconfig.h is added
+@@ -240,7 +242,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
+ # tarred up the tree and ran make dep etc. in it, then
+ # version.h gets overwritten with a standard linux one.
+ 
+-if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
++if grep rhconfig $LINUX_OBJ/include/$LINUXVERSION_HDIR/version.h >/dev/null ; then
+ 	# This is a clean kernel-source tree, we need to
+ 	# enable extensive workarounds to get this to build
+ 	# modules
+@@ -350,7 +352,7 @@ $2
+ AC_DEFUN([LB_LINUX_COMPILE_IFELSE],
+ [m4_ifvaln([$1], [AC_LANG_CONFTEST([$1])])dnl
+ rm -f build/conftest.o build/conftest.mod.c build/conftest.ko
+-AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
++AS_IF([AC_TRY_COMMAND(cp conftest.c build && make -d [$2] ${LD:+"LD=$LD"} CC="$CC" -f $PWD/build/Makefile LUSTRE_LINUX_CONFIG=$LINUX_CONFIG LINUXINCLUDE="$EXTRA_LNET_INCLUDE -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I$LINUX/arch/`echo $target_cpu|sed -e 's/ppc.*/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/uapi -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/generated/uapi -I$LINUX_OBJ/include -I$LINUX/include -I$LINUX_OBJ/include2 -I$LINUX/include/uapi -I$LINUX/include/generated/uapi -include $CONFIG_INCLUDE" -o tmp_include_depends -o scripts -o include/config/MARKER -C $LINUX_OBJ EXTRA_CFLAGS="-Werror-implicit-function-declaration $EXTRA_KCFLAGS" $MODULE_TARGET=$PWD/build) >/dev/null && AC_TRY_COMMAND([$3])],
+ 	[$4],
+ 	[_AC_MSG_LOG_CONFTEST
+ m4_ifvaln([$5],[$5])dnl])
+diff --git a/ldiskfs/config/ldiskfs-build.m4 b/ldiskfs/config/ldiskfs-build.m4
+index fd0f6d2..d657399 100644
+--- a/ldiskfs/config/ldiskfs-build.m4
++++ b/ldiskfs/config/ldiskfs-build.m4
+@@ -1,11 +1,11 @@
+ AC_DEFUN([LDISKFS_AC_LINUX_VERSION], [
+ 	AC_MSG_CHECKING([kernel source version])
+ 
+-	utsrelease1=${LINUX_OBJ}/include/linux/version.h
++	utsrelease1=${LINUX_OBJ}/include/$LINUXVERSION_HDIR/version.h
+ 	utsrelease2=${LINUX_OBJ}/include/linux/utsrelease.h
+ 	utsrelease3=${LINUX_OBJ}/include/generated/utsrelease.h
+ 	AS_IF([test -r ${utsrelease1} && fgrep -q UTS_RELEASE ${utsrelease1}], [
+-		utsrelease=linux/version.h
++		utsrelease=$LINUXVERSION_HDIR/version.h
+ 	], [test -r ${utsrelease2} && fgrep -q UTS_RELEASE ${utsrelease2}], [
+ 		utsrelease=linux/utsrelease.h
+ 	], [test -r ${utsrelease3} && fgrep -q UTS_RELEASE ${utsrelease3}], [
+@@ -64,7 +64,7 @@ AC_SUBST(RELEASE)
+ # check is redhat/suse kernels
+ AC_MSG_CHECKING([that RedHat kernel])
+ LB_LINUX_TRY_COMPILE([
+-		#include <linux/version.h>
++		#include <$LINUXVERSION_HDIR/version.h>
+ 	],[
+ 		#ifndef RHEL_RELEASE_CODE
+ 		#error "not redhat kernel"
+@@ -190,8 +190,10 @@ LB_CHECK_FILE([$LINUX_OBJ/include/generated/autoconf.h],[AUTOCONF_HDIR=generated
+         [LB_CHECK_FILE([$LINUX_OBJ/include/linux/autoconf.h],[AUTOCONF_HDIR=linux],
+ 	[AC_MSG_ERROR([Run make config in $LINUX.])])])
+         AC_SUBST(AUTOCONF_HDIR)
+-LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[],
+-	[AC_MSG_ERROR([Run make config in $LINUX.])])
++LB_CHECK_FILE([$LINUX_OBJ/include/generated/uapi/linux/version.h],[LINUXVERSION_HDIR=generated/uapi/linux],
++        [LB_CHECK_FILE([$LINUX_OBJ/include/linux/version.h],[LINUXVERSION_HDIR=linux],
++	[AC_MSG_ERROR([Run make config in $LINUX.])])])
++        AC_SUBST(LINUXVERSION_HDIR)
+ 
+ # ----------- kconfig.h exists ---------------
+ # kernel 3.1, $LINUX/include/linux/kconfig.h is added
+@@ -208,7 +210,7 @@ LB_CHECK_FILE([$LINUX_OBJ/include/linux/kconfig.h],
+ # tarred up the tree and ran make dep etc. in it, then
+ # version.h gets overwritten with a standard linux one.
+ 
+-if grep rhconfig $LINUX_OBJ/include/linux/version.h >/dev/null ; then
++if grep rhconfig $LINUX_OBJ/include/$LINUXVERSION_HDIR/version.h >/dev/null ; then
+ 	# This is a clean kernel-source tree, we need to
+ 	# enable extensive workarounds to get this to build
+ 	# modules
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index f290ea2..898f2c7 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -319,7 +319,7 @@ AC_DEFUN([LC_BIT_SPINLOCK_H],
+ AC_DEFUN([LC_CONST_ACL_SIZE],
+ [AC_MSG_CHECKING([calc acl size])
+ tmp_flags="$CFLAGS"
+-CFLAGS="$CFLAGS -I$LINUX/include -I$LINUX_OBJ/include -I$LINUX_OBJ/include2 -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -include $AUTOCONF_HDIR/autoconf.h $EXTRA_KCFLAGS"
++CFLAGS="$CFLAGS -I$LINUX/include -I$LINUX_OBJ/include -I$LINUX_OBJ/include/uapi -I$LINUX_OBJ/include2 -I$LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include -I $LINUX/arch/`echo $target_cpu|sed -e 's/powerpc64/powerpc/' -e 's/x86_64/x86/' -e 's/i.86/x86/'`/include/uapi -include $AUTOCONF_HDIR/autoconf.h $EXTRA_KCFLAGS"
+ AC_TRY_RUN([
+         #define __KERNEL__
+         #include <linux/types.h>
+diff --git a/lustre/scripts/version_tag.pl b/lustre/scripts/version_tag.pl
+index 61796c9..942e54f 100644
+--- a/lustre/scripts/version_tag.pl
++++ b/lustre/scripts/version_tag.pl
+@@ -45,6 +45,7 @@ sub get_kernver($$)
+     my $ver = new IO::File;
+     if (!$ver->open("$objdir/include/linux/utsrelease.h") &&
+         !$ver->open("$objdir/include/linux/version.h") &&
++        !$ver->open("$objdir/include/generated/uapi/linux/version.h") &&
+         !$ver->open("$dir/include/linux/utsrelease.h") &&
+         !$ver->open("$dir/include/linux/version.h")) {
+             die "Run make dep on '$dir'\n";
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
new file mode 100644
index 0000000..5ff415f
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch
@@ -0,0 +1,120 @@
+From b73192ab79f853231de5809ff40e4fd269060247 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Tue, 26 Feb 2013 16:31:44 +0800
+Subject: [PATCH 2/5] LU-2850 kernel: 3.7 kernel posix acl needs userns
+
+With upstream commit 5f3a4a28, kernel posix acl adds support
+to user namespace.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I7d82c51c482daae8a7dbb526b8d72eea2bcf0650
+---
+ lustre/autoconf/lustre-core.m4 | 25 +++++++++++++++++++++++++
+ lustre/include/liblustre.h     | 11 ++++++++++-
+ lustre/llite/xattr.c           |  6 +++++-
+ lustre/mdc/mdc_request.c       |  6 +++++-
+ 4 files changed, 45 insertions(+), 3 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 898f2c7..f424f87 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2213,6 +2213,28 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.7 posix acl supports user ns
++# see upstream commit 5f3a4a28
++#
++AC_DEFUN([LC_HAVE_POSIX_ACL_NAMESPACE],
++[AC_MSG_CHECKING([if posix acl supports user namespace])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++	#include <linux/posix_acl_xattr.h>
++	#include <linux/user_namespace.h>
++],[
++	struct user_namespace *user_ns;
++	posix_acl_from_xattr(user_ns, NULL, 0);
++],[
++	AC_DEFINE(HAVE_POSIX_ACL_NAMESPACE, 1,
++		  [have posix acl supports user namespace])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2390,6 +2412,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_DENTRY_OPEN_USE_PATH
+ 	 LC_HAVE_IOP_ATOMIC_OPEN
+ 
++	 # 3.7
++	 LC_HAVE_POSIX_ACL_NAMESPACE
++
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+ 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/liblustre.h b/lustre/include/liblustre.h
+index ac4414e..1ae9f7b 100644
+--- a/lustre/include/liblustre.h
++++ b/lustre/include/liblustre.h
+@@ -452,8 +452,17 @@ static inline size_t posix_acl_xattr_size(int count)
+                sizeof(posix_acl_xattr_entry);
+ }
+ 
++#ifdef HAVE_POSIX_ACL_NAMESPACE
++struct user_namespace {};
++struct user_namespace init_user_ns;
++
++static inline
++struct posix_acl *posix_acl_from_xattr(struct user_namespace *user_ns,
++					const void *value, size_t size)
++#else
+ static inline
+-struct posix_acl * posix_acl_from_xattr(const void *value, size_t size)
++struct posix_acl *posix_acl_from_xattr(const void *value, size_t size)
++#endif
+ {
+         return NULL;
+ }
+diff --git a/lustre/llite/xattr.c b/lustre/llite/xattr.c
+index 1d9923e..a311d65 100644
+--- a/lustre/llite/xattr.c
++++ b/lustre/llite/xattr.c
+@@ -345,7 +345,11 @@ int ll_getxattr_common(struct inode *inode, const char *name,
+                 if (!acl)
+                         RETURN(-ENODATA);
+ 
+-                rc = posix_acl_to_xattr(acl, buffer, size);
++#ifdef HAVE_POSIX_ACL_NAMESPACE
++		rc = posix_acl_to_xattr(&init_user_ns, acl, buffer, size);
++#else
++		rc = posix_acl_to_xattr(acl, buffer, size);
++#endif
+                 posix_acl_release(acl);
+                 RETURN(rc);
+         }
+diff --git a/lustre/mdc/mdc_request.c b/lustre/mdc/mdc_request.c
+index 399c268..dcbab71 100644
+--- a/lustre/mdc/mdc_request.c
++++ b/lustre/mdc/mdc_request.c
+@@ -448,7 +448,11 @@ static int mdc_unpack_acl(struct ptlrpc_request *req, struct lustre_md *md)
+         if (!buf)
+                 RETURN(-EPROTO);
+ 
+-        acl = posix_acl_from_xattr(buf, body->aclsize);
++#ifdef HAVE_POSIX_ACL_NAMESPACE
++	acl = posix_acl_from_xattr(&init_user_ns, buf, body->aclsize);
++#else
++	acl = posix_acl_from_xattr(buf, body->aclsize);
++#endif
+         if (IS_ERR(acl)) {
+                 rc = PTR_ERR(acl);
+                 CERROR("convert xattr to acl: %d\n", rc);
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
new file mode 100644
index 0000000..eaae3cb
--- /dev/null
+++ b/sys-cluster/lustre/files/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch
@@ -0,0 +1,121 @@
+From e095235edfe1339ccda0a61059ee4d3a2016e4f6 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Tue, 26 Feb 2013 17:09:15 +0800
+Subject: [PATCH 3/5] LU-2850 kernel: 3.7 uneports sock_map_fd
+
+And exports sock_alloc_file. We should use sock_alloc_file instead.
+Besides, there is no need to mess with fd table.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: Iec3c8bc0d8fcb9d8f821dd9f0a82445e1e1096ff
+---
+ libcfs/libcfs/linux/linux-tcpip.c | 39 ++++++++++++++++++++++++++++++++++++++-
+ lustre/autoconf/lustre-core.m4    | 20 ++++++++++++++++++++
+ 2 files changed, 58 insertions(+), 1 deletion(-)
+
+diff --git a/libcfs/libcfs/linux/linux-tcpip.c b/libcfs/libcfs/linux/linux-tcpip.c
+index cd07648..ce93aa8 100644
+--- a/libcfs/libcfs/linux/linux-tcpip.c
++++ b/libcfs/libcfs/linux/linux-tcpip.c
+@@ -41,6 +41,40 @@
+ #include <linux/if.h>
+ #include <linux/in.h>
+ #include <linux/file.h>
++#ifdef HAVE_SOCK_ALLOC_FILE
++int
++libcfs_sock_ioctl(int cmd, unsigned long arg)
++{
++	mm_segment_t   oldmm = get_fs();
++	struct socket  *sock;
++	int             rc;
++	struct file     *sock_filp;
++
++	rc = sock_create(PF_INET, SOCK_STREAM, 0, &sock);
++	if (rc != 0) {
++		CERROR("Can't create socket: %d\n", rc);
++		return rc;
++	}
++
++	sock_filp = sock_alloc_file(sock, 0, NULL);
++	if (IS_ERR(sock_filp)) {
++		rc = PTR_ERR(sock_filp);
++		sock_release(sock);
++		goto out;
++	}
++	get_file(sock_filp);
++
++	set_fs(KERNEL_DS);
++	if (sock_filp->f_op->unlocked_ioctl)
++		rc = sock_filp->f_op->unlocked_ioctl(sock_filp, cmd, arg);
++	set_fs(oldmm);
++
++	fput(sock_filp);
++out:
++	return rc;
++}
++#else /* !HAVE_SOCK_ALLOC_FILE */
++
+ /* For sys_open & sys_close */
+ #include <linux/syscalls.h>
+ 
+@@ -61,8 +95,10 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+ 
+ #ifdef HAVE_SOCK_MAP_FD_2ARG
+         fd = sock_map_fd(sock,0);
+-#else
++#elif defined(HAVE_SOCK_MAP_FD)
+         fd = sock_map_fd(sock);
++#else
++#error "Cannot find either sock_map_fd nor sock_alloc_file!"
+ #endif
+         if (fd < 0) {
+                 rc = fd;
+@@ -88,6 +124,7 @@ libcfs_sock_ioctl(int cmd, unsigned long arg)
+  out:
+         return rc;
+ }
++#endif /* !HAVE_SOCK_ALLOC_FILE */
+ 
+ int
+ libcfs_ipif_query (char *name, int *up, __u32 *ip, __u32 *mask)
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index f424f87..3d62a4b 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2235,6 +2235,24 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.7 unexports sock_map_fd() and exports sock_alloc_file
++# see upstream commit 56b31d1
++#
++AC_DEFUN([LC_HAVE_SOCK_MAP_FD],
++	[LB_CHECK_SYMBOL_EXPORT([sock_map_fd],
++	[net/socket.c],
++        [AC_DEFINE(HAVE_SOCK_MAP_FD, 1,
++		   [sock_map_fd is exported by the kernel])])
++])
++
++AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
++	[LB_CHECK_SYMBOL_EXPORT([sock_alloc_file],
++	[net/socket.c],
++        [AC_DEFINE(HAVE_SOCK_ALLOC_FILE, 1,
++		   [sock_alloc_file is exported by the kernel])])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2414,6 +2432,8 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.7
+ 	 LC_HAVE_POSIX_ACL_NAMESPACE
++	 LC_HAVE_SOCK_MAP_FD
++	 LC_HAVE_SOCK_ALLOC_FILE
+ 
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
new file mode 100644
index 0000000..bfc1439
--- /dev/null
+++ b/sys-cluster/lustre/files/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch
@@ -0,0 +1,226 @@
+From 5d050ddbf8ebe5104e0320b9e1028411e495a1fe Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Wed, 27 Feb 2013 17:51:46 +0800
+Subject: [PATCH 4/5] LU-2850 kernel: 3.7 get/putname uses struct filename
+
+3.7 vfs introduces struct filename and changes getname/putname
+parameter to use it.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: Ifc3cfa54220b83b8de5aebfa5464c6efa5525599
+---
+ lustre/autoconf/lustre-core.m4         | 26 ++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h | 37 +++++++++++++++++++++++++
+ lustre/llite/dir.c                     | 50 +++++++++++++++++-----------------
+ lustre/llite/llite_internal.h          |  2 +-
+ lustre/llite/namei.c                   |  2 +-
+ 5 files changed, 90 insertions(+), 27 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 3d62a4b..0c177b1 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2253,6 +2253,31 @@ AC_DEFUN([LC_HAVE_SOCK_ALLOC_FILE],
+ ])
+ 
+ #
++# 3.7 vfs introduces struct filename and changes getname/putname
++# parameter to use it
++# see kernel commit adb5c247 and 91a27b2a
++#
++AC_DEFUN([LC_HAVE_STRUCT_FILENAME],
++[AC_MSG_CHECKING([if vfs has struct filename])
++tmp_flags="$EXTRA_KCFLAGS"
++EXTRA_KCFLAGS="-Werror"
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct filename *filename;
++	filename = getname(NULL);
++	putname(filename);
++],[
++	AC_DEFINE(HAVE_STRUCT_FILENAME, 1,
++		  [vfs has struct filename])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++EXTRA_KCFLAGS="$tmp_flags"
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2434,6 +2459,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_HAVE_POSIX_ACL_NAMESPACE
+ 	 LC_HAVE_SOCK_MAP_FD
+ 	 LC_HAVE_SOCK_ALLOC_FILE
++	 LC_HAVE_STRUCT_FILENAME
+ 
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index e300597..d62646e 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -750,4 +750,41 @@ static inline struct dentry *d_make_root(struct inode *root)
+ }
+ #endif
+ 
++#ifndef HAVE_STRUCT_FILENAME
++struct filename {
++	char	*name;
++};
++static inline struct filename *ll_getname(const char __user *name)
++{
++	struct filename *filename;
++
++	filename = kmalloc(sizeof(struct filename), GFP_KERNEL);
++	if (filename == NULL)
++		return ERR_PTR(-ENOMEM);
++
++	filename->name = getname(name);
++	if (unlikely(IS_ERR(filename->name))) {
++		int err = PTR_ERR(filename->name);
++		kfree(filename);
++		return ERR_PTR(err);
++	} else {
++		return filename;
++	}
++}
++static inline void ll_putname(struct filename *filename)
++{
++	putname(filename->name);
++	kfree(filename);
++}
++#else
++static inline struct filename *ll_getname(const char __user *name)
++{
++	return getname(name);
++}
++static inline void ll_putname(struct filename *filename)
++{
++	putname(filename);
++}
++#endif /* !HAVE_STRUCT_FILENAME */
++
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index 466d259..49b159a 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -1406,7 +1406,7 @@ free_lmv:
+ 		RETURN(rc);
+ 	}
+ 	case LL_IOC_REMOVE_ENTRY: {
+-		char		*filename = NULL;
++		struct filename  *filename = NULL;
+ 		int		 namelen = 0;
+ 		int		 rc;
+ 
+@@ -1418,18 +1418,18 @@ free_lmv:
+ 		if (!(exp_connect_flags(sbi->ll_md_exp) & OBD_CONNECT_LVB_TYPE))
+ 			return -ENOTSUPP;
+ 
+-		filename = getname((const char *)arg);
++		filename = ll_getname((const char *)arg);
+ 		if (IS_ERR(filename))
+ 			RETURN(PTR_ERR(filename));
+ 
+-		namelen = strlen(filename);
++		namelen = strlen(filename->name);
+ 		if (namelen < 1)
+ 			GOTO(out_rmdir, rc = -EINVAL);
+ 
+-		rc = ll_rmdir_entry(inode, filename, namelen);
++		rc = ll_rmdir_entry(inode, filename->name, namelen);
+ out_rmdir:
+-                if (filename)
+-                        putname(filename);
++		if (filename)
++			ll_putname(filename);
+ 		RETURN(rc);
+ 	}
+ 	case LL_IOC_LOV_SWAP_LAYOUTS:
+@@ -1440,21 +1440,21 @@ out_rmdir:
+         case LL_IOC_MDC_GETINFO:
+         case IOC_MDC_GETFILEINFO:
+         case IOC_MDC_GETFILESTRIPE: {
+-                struct ptlrpc_request *request = NULL;
+-                struct lov_user_md *lump;
+-                struct lov_mds_md *lmm = NULL;
+-                struct mdt_body *body;
+-                char *filename = NULL;
+-                int lmmsize;
+-
+-                if (cmd == IOC_MDC_GETFILEINFO ||
+-                    cmd == IOC_MDC_GETFILESTRIPE) {
+-                        filename = getname((const char *)arg);
+-                        if (IS_ERR(filename))
+-                                RETURN(PTR_ERR(filename));
+-
+-                        rc = ll_lov_getstripe_ea_info(inode, filename, &lmm,
+-                                                      &lmmsize, &request);
++		struct ptlrpc_request *request = NULL;
++		struct lov_user_md *lump;
++		struct lov_mds_md *lmm = NULL;
++		struct mdt_body *body;
++		struct filename *filename = NULL;
++		int lmmsize;
++
++		if (cmd == IOC_MDC_GETFILEINFO ||
++		    cmd == IOC_MDC_GETFILESTRIPE) {
++			filename = ll_getname((const char *)arg);
++			if (IS_ERR(filename))
++				RETURN(PTR_ERR(filename));
++
++			rc = ll_lov_getstripe_ea_info(inode, filename->name,
++						      &lmm, &lmmsize, &request);
+                 } else {
+                         rc = ll_dir_getstripe(inode, &lmm, &lmmsize, &request);
+                 }
+@@ -1514,10 +1514,10 @@ out_rmdir:
+ 
+                 EXIT;
+         out_req:
+-                ptlrpc_req_finished(request);
+-                if (filename)
+-                        putname(filename);
+-                return rc;
++		ptlrpc_req_finished(request);
++		if (filename)
++			ll_putname(filename);
++		return rc;
+         }
+         case IOC_LOV_GETINFO: {
+                 struct lov_user_mds_data *lumd;
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index 9329d6c..a577f36 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -705,7 +705,7 @@ struct lookup_intent *ll_convert_intent(struct open_intent *oit,
+                                         int lookup_flags);
+ #endif
+ struct dentry *ll_splice_alias(struct inode *inode, struct dentry *de);
+-int ll_rmdir_entry(struct inode *dir, char *name, int namelen);
++int ll_rmdir_entry(struct inode *dir, const char *name, int namelen);
+ 
+ /* llite/rw.c */
+ int ll_prepare_write(struct file *, struct page *, unsigned from, unsigned to);
+diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
+index 3bcf3ff..6c99a7c 100644
+--- a/lustre/llite/namei.c
++++ b/lustre/llite/namei.c
+@@ -1142,7 +1142,7 @@ static int ll_rmdir_generic(struct inode *dir, struct dentry *dparent,
+ /**
+  * Remove dir entry
+  **/
+-int ll_rmdir_entry(struct inode *dir, char *name, int namelen)
++int ll_rmdir_entry(struct inode *dir, const char *name, int namelen)
+ {
+ 	struct ptlrpc_request *request = NULL;
+ 	struct md_op_data *op_data;
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
new file mode 100644
index 0000000..c19bb70
--- /dev/null
+++ b/sys-cluster/lustre/files/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch
@@ -0,0 +1,82 @@
+From 89da0781847c0eb2efd0556519560a41f352b57f Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Tue, 26 Feb 2013 18:09:42 +0800
+Subject: [PATCH 5/5] LU-2850 kernel: 3.8 upstream removes vmtruncate()
+
+vmtruncate() is removed since upstream commit b9f61c3.
+We can open code is for llite though.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I9d4f43a5c181f16482b4caa021ba7a09ee52b600
+---
+ lustre/autoconf/lustre-core.m4 | 23 +++++++++++++++++++++++
+ lustre/llite/vvp_io.c          | 10 +++++++++-
+ 2 files changed, 32 insertions(+), 1 deletion(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 0c177b1..290ac89 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2278,6 +2278,26 @@ EXTRA_KCFLAGS="$tmp_flags"
+ ])
+ 
+ #
++# 3.8 removes vmtruncate()
++# see upstream commit b9f61c3
++#
++AC_DEFUN([LC_HAVE_MM_VMTRUNCATE],
++[AC_MSG_CHECKING([if mm has vmtruncate])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/mm.h>
++],[
++	vmtruncate(NULL, 0);
++],[
++	AC_DEFINE(HAVE_MM_VMTRUNCATE, 1,
++		[vmtruncate is defined by the kernel])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2461,6 +2481,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_HAVE_SOCK_ALLOC_FILE
+ 	 LC_HAVE_STRUCT_FILENAME
+ 
++	 # 3.8
++	 LC_HAVE_MM_VMTRUNCATE
++
+ 	 #
+ 	 if test x$enable_server = xyes ; then
+ 		AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
+index 9020d77..25f631c 100644
+--- a/lustre/llite/vvp_io.c
++++ b/lustre/llite/vvp_io.c
+@@ -362,9 +362,17 @@ static int vvp_do_vmtruncate(struct inode *inode, size_t size)
+ 	 * Only ll_inode_size_lock is taken at this level.
+ 	 */
+ 	ll_inode_size_lock(inode);
++#ifdef HAVE_MM_VMTRUNCATE
+ 	result = vmtruncate(inode, size);
++#else
++	result = inode_newsize_ok(inode, size);
++	if (result < 0) {
++		ll_inode_size_unlock(inode);
++		return result;
++	}
++	truncate_setsize(inode, size);
++#endif
+ 	ll_inode_size_unlock(inode);
+-
+ 	return result;
+ }
+ 
+-- 
+1.8.1.5
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
index 6d1ef5c..99ed754 100644
--- a/sys-cluster/lustre/lustre-9999.ebuild
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -24,6 +24,14 @@ RDEPEND="${DEPEND}"
 
 BUILD_PARAMS="-C ${KV_DIR} SUBDIRS=${S}"
 
+PATHCES=(
+	"${FILESDIR}/0001-LU-2850-build-check-header-files-in-generated-uapi-d.patch"
+	"${FILESDIR}/0002-LU-2850-kernel-3.7-kernel-posix-acl-needs-userns.patch"
+	"${FILESDIR}/0003-LU-2850-kernel-3.7-uneports-sock_map_fd.patch"
+	"${FILESDIR}/0004-LU-2850-kernel-3.7-get-putname-uses-struct-filename.patch"
+	"${FILESDIR}/0005-LU-2850-kernel-3.8-upstream-removes-vmtruncate.patch"
+)
+
 pkg_setup() {
 	linux-mod_pkg_setup
 	linux-info_pkg_setup


^ permalink raw reply related	[flat|nested] 53+ messages in thread
* [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/
@ 2012-09-20 19:15 Alexey Shvetsov
  0 siblings, 0 replies; 53+ messages in thread
From: Alexey Shvetsov @ 2012-09-20 19:15 UTC (permalink / raw
  To: gentoo-commits

commit:     6782cd51e17e7eef1649d167c5420fa9b755c141
Author:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
AuthorDate: Thu Sep 20 19:12:43 2012 +0000
Commit:     Alexey Shvetsov <alexxy <AT> gentoo <DOT> org>
CommitDate: Thu Sep 20 19:12:43 2012 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/sci.git;a=commit;h=6782cd51

[sys-cluster/lustre] Initial import

Signed-off-by: Alexey Shvetsov <alexxy <AT> gentoo.org>

---
 ...7-vfs-kernel-3.1-renames-lock-manager-ops.patch |  190 +++++++++
 ...37-vfs-kernel-3.1-kills-inode-i_alloc_sem.patch |  446 ++++++++++++++++++++
 ...fs-kernel-3.1-changes-open_to_namei_flags.patch |   95 +++++
 ...7-vfs-provides-ll_get_acl-to-i_op-get_acl.patch |  150 +++++++
 ...ck-kernel-3.2-make_request_fn-returns-voi.patch |  108 +++++
 ...337-vfs-kernel-3.2-protects-inode-i_nlink.patch |  194 +++++++++
 ...-3.3-changes-super_operations-inode_opera.patch |  217 ++++++++++
 ...nel-remove-unnecessary-includings-of-syst.patch |  211 +++++++++
 ...-kernel-3.4-touch_atime-switchs-to-1-argu.patch |   89 ++++
 ...-kernel-3.4-converts-d_alloc_root-to-d_ma.patch |  128 ++++++
 ...1-LU-1337-kernel-v3.5-defines-INVALID_UID.patch |   31 ++
 ...te-kernel-3.5-renames-end_writeback-to-cl.patch |   90 ++++
 ...nel-3.5-kernel-encode_fh-passes-in-parent.patch |   88 ++++
 sys-cluster/lustre/lustre-9999.ebuild              |   72 ++++
 sys-cluster/lustre/metadata.xml                    |   11 +
 15 files changed, 2120 insertions(+), 0 deletions(-)

diff --git a/sys-cluster/lustre/files/0001-LU-1337-vfs-kernel-3.1-renames-lock-manager-ops.patch b/sys-cluster/lustre/files/0001-LU-1337-vfs-kernel-3.1-renames-lock-manager-ops.patch
new file mode 100644
index 0000000..44cc8ce
--- /dev/null
+++ b/sys-cluster/lustre/files/0001-LU-1337-vfs-kernel-3.1-renames-lock-manager-ops.patch
@@ -0,0 +1,190 @@
+From 0635f4d7cde2da46e05ba6be6d6dd26e72814ff8 Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Thu, 9 Aug 2012 10:37:39 +0800
+Subject: [PATCH 01/13] LU-1337 vfs: kernel 3.1 renames lock-manager ops
+
+Kernel 3.1 renames lock-manager ops(lock_manager_operations) from
+fl_xxx to lm_xxx (commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50).
+
+Add LC_LM_XXX_LOCK_MANAGER_OPS/HAVE_LM_XXX_LOCK_MANAGER_OPS to check.
+
+Re-arrange several macro definitions in lustre-core.m4 as kernel
+version sequence.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: Ic86ec9db2f8262ef7ab9f5f2fb51ca79591120a4
+---
+ lustre/autoconf/lustre-core.m4         | 85 +++++++++++++++++++++-------------
+ lustre/include/linux/lustre_compat25.h |  4 ++
+ lustre/llite/file.c                    | 18 +++----
+ 3 files changed, 67 insertions(+), 40 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 64c14e5..403add5 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1729,6 +1729,18 @@ EXTRA_KCFLAGS="$tmp_flags"
+ ])
+ 
+ #
++# 2.6.38 export simple_setattr
++#
++AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR],
++[LB_CHECK_SYMBOL_EXPORT([simple_setattr],
++[fs/libfs.c],[
++AC_DEFINE(HAVE_SIMPLE_SETATTR, 1,
++            [simple_setattr is exported by the kernel])
++],[
++])
++])
++
++#
+ # 2.6.39 remove unplug_fn from request_queue.
+ #
+ AC_DEFUN([LC_REQUEST_QUEUE_UNPLUG_FN],
+@@ -1798,14 +1810,42 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
+-# 2.6.38 export simple_setattr
++# 3.1.1 has ext4_blocks_for_truncate
+ #
+-AC_DEFUN([LC_EXPORT_SIMPLE_SETATTR],
+-[LB_CHECK_SYMBOL_EXPORT([simple_setattr],
+-[fs/libfs.c],[
+-AC_DEFINE(HAVE_SIMPLE_SETATTR, 1,
+-            [simple_setattr is exported by the kernel])
++AC_DEFUN([LC_BLOCKS_FOR_TRUNCATE],
++[AC_MSG_CHECKING([if kernel has ext4_blocks_for_truncate])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++	#include "$LINUX/fs/ext4/ext4_jbd2.h"
++	#include "$LINUX/fs/ext4/truncate.h"
+ ],[
++	ext4_blocks_for_truncate(NULL);
++],[
++	AC_MSG_RESULT([yes])
++	AC_DEFINE(HAVE_BLOCKS_FOR_TRUNCATE, 1,
++		  [kernel has ext4_blocks_for_truncate])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
++# 3.1 renames lock-manager ops(lock_manager_operations) from fl_xxx to lm_xxx
++# see kernel commit 8fb47a4fbf858a164e973b8ea8ef5e83e61f2e50
++#
++AC_DEFUN([LC_LM_XXX_LOCK_MANAGER_OPS],
++[AC_MSG_CHECKING([if lock-manager ops renamed to lm_xxx])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct lock_manager_operations lm_ops;
++	lm_ops.lm_compare_owner = NULL;
++],[
++	AC_DEFINE(HAVE_LM_XXX_LOCK_MANAGER_OPS, 1,
++		  [lock-manager ops renamed to lm_xxx])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
+ ])
+ ])
+ 
+@@ -1848,26 +1888,6 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
+-# 3.1.1 has ext4_blocks_for_truncate
+-#
+-AC_DEFUN([LC_BLOCKS_FOR_TRUNCATE],
+-[AC_MSG_CHECKING([if kernel has ext4_blocks_for_truncate])
+-LB_LINUX_TRY_COMPILE([
+-	#include <linux/fs.h>
+-	#include "$LINUX/fs/ext4/ext4_jbd2.h"
+-	#include "$LINUX/fs/ext4/truncate.h"
+-],[
+-	ext4_blocks_for_truncate(NULL);
+-],[
+-	AC_MSG_RESULT([yes])
+-	AC_DEFINE(HAVE_BLOCKS_FOR_TRUNCATE, 1,
+-		  [kernel has ext4_blocks_for_truncate])
+-],[
+-	AC_MSG_RESULT([no])
+-])
+-])
+-
+-#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2008,15 +2028,18 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+          # 2.6.39
+          LC_REQUEST_QUEUE_UNPLUG_FN
+-	LC_HAVE_FSTYPE_MOUNT
+-
+-	# 3.3
+-	LC_HAVE_MIGRATE_HEADER
+-	LC_MIGRATEPAGE_4ARGS
++	 LC_HAVE_FSTYPE_MOUNT
+ 
+ 	 # 3.1.1
+ 	 LC_BLOCKS_FOR_TRUNCATE
+ 
++	 # 3.1
++	 LC_LM_XXX_LOCK_MANAGER_OPS
++
++	 # 3.3
++	 LC_HAVE_MIGRATE_HEADER
++	 LC_MIGRATEPAGE_4ARGS
++
+          #
+          if test x$enable_server = xyes ; then
+              AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 172da72..41b4516 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -808,5 +808,9 @@ static inline bool selinux_is_enabled(void)
+ }
+ #endif
+ 
++#ifndef HAVE_LM_XXX_LOCK_MANAGER_OPS
++# define lm_compare_owner	fl_compare_owner
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/file.c b/lustre/llite/file.c
+index 96379d6..1525b07 100644
+--- a/lustre/llite/file.c
++++ b/lustre/llite/file.c
+@@ -2150,15 +2150,15 @@ int ll_file_flock(struct file *file, int cmd, struct file_lock *file_lock)
+         }
+         flock.l_flock.pid = file_lock->fl_pid;
+ 
+-        /* Somewhat ugly workaround for svc lockd.
+-         * lockd installs custom fl_lmops->fl_compare_owner that checks
+-         * for the fl_owner to be the same (which it always is on local node
+-         * I guess between lockd processes) and then compares pid.
+-         * As such we assign pid to the owner field to make it all work,
+-         * conflict with normal locks is unlikely since pid space and
+-         * pointer space for current->files are not intersecting */
+-        if (file_lock->fl_lmops && file_lock->fl_lmops->fl_compare_owner)
+-                flock.l_flock.owner = (unsigned long)file_lock->fl_pid;
++	/* Somewhat ugly workaround for svc lockd.
++	 * lockd installs custom fl_lmops->lm_compare_owner that checks
++	 * for the fl_owner to be the same (which it always is on local node
++	 * I guess between lockd processes) and then compares pid.
++	 * As such we assign pid to the owner field to make it all work,
++	 * conflict with normal locks is unlikely since pid space and
++	 * pointer space for current->files are not intersecting */
++	if (file_lock->fl_lmops && file_lock->fl_lmops->lm_compare_owner)
++		flock.l_flock.owner = (unsigned long)file_lock->fl_pid;
+ 
+         switch (file_lock->fl_type) {
+         case F_RDLCK:
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0002-LU-1337-vfs-kernel-3.1-kills-inode-i_alloc_sem.patch b/sys-cluster/lustre/files/0002-LU-1337-vfs-kernel-3.1-kills-inode-i_alloc_sem.patch
new file mode 100644
index 0000000..04ccefe
--- /dev/null
+++ b/sys-cluster/lustre/files/0002-LU-1337-vfs-kernel-3.1-kills-inode-i_alloc_sem.patch
@@ -0,0 +1,446 @@
+From 13a22da522d306d69511e439406d2f986a596adb Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Sun, 22 Jul 2012 01:07:18 +0800
+Subject: [PATCH 02/13] LU-1337 vfs: kernel 3.1 kills inode->i_alloc_sem
+
+Kernel 3.1 kills inode->i_alloc_sem, use i_dio_count and
+inode_dio_wait/inode_dio_done instead.
+(kernel commit bd5fe6c5eb9c548d7f07fe8f89a150bb6705e8e3).
+
+Add HAVE_INODE_DIO_WAIT to differentiate it.
+Add INODE_DIO_LOCK_WRITE/INODE_DIO_RELEASE_WRITE,
+    INODE_DIO_LOCK_READ/INODE_DIO_RELEASE_READ macros.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: Ife36e07a85c76153985a4a86ee1973262c4c0e27
+---
+ lustre/autoconf/lustre-core.m4         | 22 ++++++++++++
+ lustre/include/linux/lustre_compat25.h | 18 ++++++----
+ lustre/llite/llite_lib.c               |  4 +--
+ lustre/llite/vvp_io.c                  | 27 ++++++--------
+ lustre/llite/vvp_page.c                |  1 -
+ lustre/obdfilter/filter.c              | 65 +++++++++++++++++-----------------
+ lustre/obdfilter/filter_io.c           | 28 ++++++++-------
+ lustre/obdfilter/filter_io_26.c        | 10 +++---
+ lustre/osc/osc_cache.c                 |  6 ++--
+ lustre/osd-ldiskfs/osd_io.c            |  1 -
+ 10 files changed, 102 insertions(+), 80 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 403add5..0aef14f 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1850,6 +1850,27 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.1 kills inode->i_alloc_sem, use i_dio_count and inode_dio_wait/
++#     inode_dio_done instead.
++# see kernel commit bd5fe6c5eb9c548d7f07fe8f89a150bb6705e8e3
++#
++AC_DEFUN([LC_INODE_DIO_WAIT],
++[AC_MSG_CHECKING([if inode->i_alloc_sem is killed and use inode_dio_wait/done.])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	inode_dio_wait((struct inode *)0);
++	inode_dio_done((struct inode *)0);
++],[
++	AC_DEFINE(HAVE_INODE_DIO_WAIT, 1,
++		  [inode->i_alloc_sem is killed and use inode_dio_wait/done])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # 3.3 introduces migrate_mode.h and migratepage has 4 args
+ #
+ AC_DEFUN([LC_HAVE_MIGRATE_HEADER],
+@@ -2035,6 +2056,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.1
+ 	 LC_LM_XXX_LOCK_MANAGER_OPS
++	 LC_INODE_DIO_WAIT
+ 
+ 	 # 3.3
+ 	 LC_HAVE_MIGRATE_HEADER
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 41b4516..bb45125 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -269,13 +269,17 @@ static inline int mapping_has_pages(struct address_space *mapping)
+                 (type *)( (char *)__mptr - offsetof(type,member) );})
+ #endif
+ 
+-#define UP_WRITE_I_ALLOC_SEM(i)   up_write(&(i)->i_alloc_sem)
+-#define DOWN_WRITE_I_ALLOC_SEM(i) down_write(&(i)->i_alloc_sem)
+-#define LASSERT_I_ALLOC_SEM_WRITE_LOCKED(i) LASSERT(down_read_trylock(&(i)->i_alloc_sem) == 0)
+-
+-#define UP_READ_I_ALLOC_SEM(i)    up_read(&(i)->i_alloc_sem)
+-#define DOWN_READ_I_ALLOC_SEM(i)  down_read(&(i)->i_alloc_sem)
+-#define LASSERT_I_ALLOC_SEM_READ_LOCKED(i) LASSERT(down_write_trylock(&(i)->i_alloc_sem) == 0)
++#ifdef HAVE_INODE_DIO_WAIT
++# define INODE_DIO_LOCK_WRITE(i)	inode_dio_wait(i)
++# define INODE_DIO_RELEASE_WRITE(i)	do {} while (0)
++# define INODE_DIO_LOCK_READ(i)		atomic_inc(&(i)->i_dio_count)
++# define INODE_DIO_RELEASE_READ(i)	inode_dio_done(i)
++#else
++# define INODE_DIO_LOCK_WRITE(i)	down_write(&(i)->i_alloc_sem)
++# define INODE_DIO_RELEASE_WRITE(i)	up_write(&(i)->i_alloc_sem)
++# define INODE_DIO_LOCK_READ(i)		down_read(&(i)->i_alloc_sem)
++# define INODE_DIO_RELEASE_READ(i)	up_read(&(i)->i_alloc_sem)
++#endif
+ 
+ #include <linux/mpage.h>        /* for generic_writepages */
+ 
+diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
+index 9980c2c..7f3ac28 100644
+--- a/lustre/llite/llite_lib.c
++++ b/lustre/llite/llite_lib.c
+@@ -1439,12 +1439,12 @@ int ll_setattr_raw(struct dentry *dentry, struct iattr *attr)
+ 
+ 	if (!S_ISDIR(inode->i_mode)) {
+ 		if (ia_valid & ATTR_SIZE)
+-			UP_WRITE_I_ALLOC_SEM(inode);
++			INODE_DIO_RELEASE_WRITE(inode);
+ 		mutex_unlock(&inode->i_mutex);
+ 		cfs_down_write(&lli->lli_trunc_sem);
+ 		mutex_lock(&inode->i_mutex);
+ 		if (ia_valid & ATTR_SIZE)
+-			DOWN_WRITE_I_ALLOC_SEM(inode);
++			INODE_DIO_LOCK_WRITE(inode);
+ 	}
+ 
+ 	/* We need a steady stripe configuration for setattr to avoid
+diff --git a/lustre/llite/vvp_io.c b/lustre/llite/vvp_io.c
+index 50a19c9..0b4cfb5 100644
+--- a/lustre/llite/vvp_io.c
++++ b/lustre/llite/vvp_io.c
+@@ -295,7 +295,7 @@ static int vvp_io_setattr_iter_init(const struct lu_env *env,
+ 	 */
+ 	mutex_unlock(&inode->i_mutex);
+ 	if (cl_io_is_trunc(ios->cis_io))
+-		UP_WRITE_I_ALLOC_SEM(inode);
++		INODE_DIO_RELEASE_WRITE(inode);
+ 	cio->u.setattr.cui_locks_released = 1;
+ 	return 0;
+ }
+@@ -348,7 +348,7 @@ static int vvp_io_setattr_trunc(const struct lu_env *env,
+                                 const struct cl_io_slice *ios,
+                                 struct inode *inode, loff_t size)
+ {
+-	DOWN_WRITE_I_ALLOC_SEM(inode);
++	INODE_DIO_LOCK_WRITE(inode);
+ 	return 0;
+ }
+ 
+@@ -420,7 +420,7 @@ static void vvp_io_setattr_fini(const struct lu_env *env,
+ 	if (cio->u.setattr.cui_locks_released) {
+ 		mutex_lock(&inode->i_mutex);
+ 		if (cl_io_is_trunc(io))
+-			DOWN_WRITE_I_ALLOC_SEM(inode);
++			INODE_DIO_LOCK_WRITE(inode);
+ 		cio->u.setattr.cui_locks_released = 0;
+ 	}
+ 	vvp_io_fini(env, ios);
+@@ -689,28 +689,26 @@ static int vvp_io_fault_start(const struct lu_env *env,
+ 
+         /* must return locked page */
+         if (fio->ft_mkwrite) {
+-		/* we grab alloc_sem to exclude truncate case.
+-		 * Otherwise, we could add dirty pages into osc cache
+-		 * while truncate is on-going. */
+-		DOWN_READ_I_ALLOC_SEM(inode);
+-
+-                LASSERT(cfio->ft_vmpage != NULL);
+-                lock_page(cfio->ft_vmpage);
++		LASSERT(cfio->ft_vmpage != NULL);
++		lock_page(cfio->ft_vmpage);
+         } else {
+                 result = vvp_io_kernel_fault(cfio);
+                 if (result != 0)
+                         return result;
+         }
+ 
+-        vmpage = cfio->ft_vmpage;
+-        LASSERT(PageLocked(vmpage));
++	vmpage = cfio->ft_vmpage;
++	LASSERT(PageLocked(vmpage));
+ 
+         if (OBD_FAIL_CHECK(OBD_FAIL_LLITE_FAULT_TRUNC_RACE))
+                 ll_invalidate_page(vmpage);
+ 
++
++	size = i_size_read(inode);
+         /* Though we have already held a cl_lock upon this page, but
+          * it still can be truncated locally. */
+-        if (unlikely(vmpage->mapping == NULL)) {
++	if (unlikely((vmpage->mapping != inode->i_mapping) ||
++		     (page_offset(vmpage) > size))) {
+                 CDEBUG(D_PAGE, "llite: fault and truncate race happened!\n");
+ 
+                 /* return +1 to stop cl_io_loop() and ll_fault() will catch
+@@ -758,7 +756,6 @@ static int vvp_io_fault_start(const struct lu_env *env,
+                 }
+         }
+ 
+-        size = i_size_read(inode);
+         last = cl_index(obj, size - 1);
+         LASSERT(fio->ft_index <= last);
+         if (fio->ft_index == last)
+@@ -777,8 +774,6 @@ out:
+         /* return unlocked vmpage to avoid deadlocking */
+ 	if (vmpage != NULL)
+ 		unlock_page(vmpage);
+-	if (fio->ft_mkwrite)
+-		UP_READ_I_ALLOC_SEM(inode);
+ #ifdef HAVE_VM_OP_FAULT
+ 	cfio->fault.ft_flags &= ~VM_FAULT_LOCKED;
+ #endif
+diff --git a/lustre/llite/vvp_page.c b/lustre/llite/vvp_page.c
+index b428744..66842a0 100644
+--- a/lustre/llite/vvp_page.c
++++ b/lustre/llite/vvp_page.c
+@@ -420,7 +420,6 @@ static void vvp_transient_page_verify(const struct cl_page *page)
+ 	struct inode *inode = ccc_object_inode(page->cp_obj);
+ 
+ 	LASSERT(!mutex_trylock(&inode->i_mutex));
+-	/* LASSERT_SEM_LOCKED(&inode->i_alloc_sem); */
+ }
+ 
+ static int vvp_transient_page_own(const struct lu_env *env,
+diff --git a/lustre/obdfilter/filter.c b/lustre/obdfilter/filter.c
+index 23a992e..a93501d 100644
+--- a/lustre/obdfilter/filter.c
++++ b/lustre/obdfilter/filter.c
+@@ -3343,13 +3343,13 @@ int filter_setattr_internal(struct obd_export *exp, struct dentry *dentry,
+         }
+ 	if (ia_valid & (ATTR_SIZE | ATTR_UID | ATTR_GID)) {
+ 		unsigned long now = jiffies;
+-		/* Filter truncates and writes are serialized by
+-		 * i_alloc_sem, see the comment in
+-		 * filter_preprw_write.*/
+-		if (ia_valid & ATTR_SIZE)
+-			down_write(&inode->i_alloc_sem);
++		/* Filter truncates and writes are serialized.
++		 * See the comment in filter_preprw_write.*/
+ 		mutex_lock(&inode->i_mutex);
+-		fsfilt_check_slow(exp->exp_obd, now, "i_alloc_sem and i_mutex");
++		if (ia_valid & ATTR_SIZE)
++			INODE_DIO_LOCK_WRITE(inode);
++		fsfilt_check_slow(exp->exp_obd, now,
++				  "i_mutex and INODE_DIO_LOCK_WRITE");
+ 		old_size = i_size_read(inode);
+ 	}
+ 
+@@ -3473,7 +3473,7 @@ out_unlock:
+ 	if (ia_valid & (ATTR_SIZE | ATTR_UID | ATTR_GID))
+ 		mutex_unlock(&inode->i_mutex);
+ 	if (ia_valid & ATTR_SIZE)
+-		up_write(&inode->i_alloc_sem);
++		INODE_DIO_RELEASE_WRITE(inode);
+ 	if (fcc)
+ 		OBD_FREE(fcc, sizeof(*fcc));
+ 
+@@ -3554,14 +3554,14 @@ int filter_setattr(const struct lu_env *env, struct obd_export *exp,
+          */
+         if (oa->o_valid &
+             (OBD_MD_FLMTIME | OBD_MD_FLATIME | OBD_MD_FLCTIME)) {
+-                unsigned long now = jiffies;
+-                down_write(&dentry->d_inode->i_alloc_sem);
+-                fsfilt_check_slow(exp->exp_obd, now, "i_alloc_sem");
+-                fmd = filter_fmd_get(exp, oa->o_id, oa->o_seq);
+-                if (fmd && fmd->fmd_mactime_xid < oti->oti_xid)
+-                        fmd->fmd_mactime_xid = oti->oti_xid;
+-                filter_fmd_put(exp, fmd);
+-                up_write(&dentry->d_inode->i_alloc_sem);
++		unsigned long now = jiffies;
++		INODE_DIO_LOCK_WRITE(dentry->d_inode);
++		fsfilt_check_slow(exp->exp_obd, now, "INODE_DIO_LOCK_WRITE");
++		fmd = filter_fmd_get(exp, oa->o_id, oa->o_seq);
++		if (fmd && fmd->fmd_mactime_xid < oti->oti_xid)
++			fmd->fmd_mactime_xid = oti->oti_xid;
++		filter_fmd_put(exp, fmd);
++		INODE_DIO_RELEASE_WRITE(dentry->d_inode);
+         }
+ 
+         /* setting objects attributes (including owner/group) */
+@@ -4292,28 +4292,29 @@ int filter_destroy(const struct lu_env *env, struct obd_export *exp,
+                         *fcc = oa->o_lcookie;
+         }
+ 
+-        /* we're gonna truncate it first in order to avoid possible deadlock:
+-         *      P1                      P2
+-         * open trasaction      open transaction
+-         * down(i_zombie)       down(i_zombie)
+-         *                      restart transaction
+-         * (see BUG 4180) -bzzz
+-         *
+-         * take i_alloc_sem too to prevent other threads from writing to the
+-         * file while we are truncating it. This can cause lock ordering issue
+-         * between page lock, i_mutex & starting new journal handle.
+-         * (see bug 20321) -johann
+-         */
++	/* we're gonna truncate it first in order to avoid possible deadlock:
++	 *      P1                      P2
++	 * open trasaction      open transaction
++	 * down(i_zombie)       down(i_zombie)
++	 *                      restart transaction
++	 * (see BUG 4180) -bzzz
++	 *
++	 * INODE_DIO_LOCK_WRITE too to prevent other threads from writing to the
++	 * file while we are truncating it. This can cause lock ordering issue
++	 * between page lock, i_mutex & starting new journal handle.
++	 * (see bug 20321) -johann
++	 */
+ 	now = jiffies;
+-	down_write(&dchild->d_inode->i_alloc_sem);
++	INODE_DIO_LOCK_WRITE(dchild->d_inode);
+ 	mutex_lock(&dchild->d_inode->i_mutex);
+-	fsfilt_check_slow(exp->exp_obd, now, "i_alloc_sem and i_mutex");
++	fsfilt_check_slow(exp->exp_obd, now,
++			  "INODE_DIO_LOCK_WRITE and i_mutex");
+ 
+ 	/* VBR: version recovery check */
+ 	rc = filter_version_get_check(exp, oti, dchild->d_inode);
+ 	if (rc) {
+ 		mutex_unlock(&dchild->d_inode->i_mutex);
+-		up_write(&dchild->d_inode->i_alloc_sem);
++		INODE_DIO_RELEASE_WRITE(dchild->d_inode);
+ 		GOTO(cleanup, rc);
+ 	}
+ 
+@@ -4321,7 +4322,7 @@ int filter_destroy(const struct lu_env *env, struct obd_export *exp,
+ 				  NULL, 1);
+ 	if (IS_ERR(handle)) {
+ 		mutex_unlock(&dchild->d_inode->i_mutex);
+-		up_write(&dchild->d_inode->i_alloc_sem);
++		INODE_DIO_RELEASE_WRITE(dchild->d_inode);
+ 		GOTO(cleanup, rc = PTR_ERR(handle));
+ 	}
+ 
+@@ -4333,7 +4334,7 @@ int filter_destroy(const struct lu_env *env, struct obd_export *exp,
+ 	rc = fsfilt_setattr(obd, dchild, handle, &iattr, 1);
+ 	rc2 = fsfilt_commit(obd, dchild->d_inode, handle, 0);
+ 	mutex_unlock(&dchild->d_inode->i_mutex);
+-	up_write(&dchild->d_inode->i_alloc_sem);
++	INODE_DIO_RELEASE_WRITE(dchild->d_inode);
+ 	if (rc)
+ 		GOTO(cleanup, rc);
+ 	if (rc2)
+diff --git a/lustre/obdfilter/filter_io.c b/lustre/obdfilter/filter_io.c
+index a946d90..3c4dcad 100644
+--- a/lustre/obdfilter/filter_io.c
++++ b/lustre/obdfilter/filter_io.c
+@@ -634,7 +634,8 @@ static int filter_grant_check(struct obd_export *exp, struct obdo *oa,
+  * on mulitple inodes.  That isn't all, because there still exists the
+  * possibility of a truncate starting a new transaction while holding the ext3
+  * rwsem = write while some writes (which have started their transactions here)
+- * blocking on the ext3 rwsem = read => lock inversion.
++ * blocking on the ext3 rwsem = read => lock inversion. (kernel 3.1 kills the
++ * rwsem and replaces it by i_dio_count and inode_dio_wait/done.)
+  *
+  * The handling gets very ugly when dealing with locked pages.  It may be easier
+  * to just get rid of the locked page code (which has problems of its own) and
+@@ -730,14 +731,15 @@ static int filter_preprw_write(int cmd, struct obd_export *exp, struct obdo *oa,
+ 
+         fsfilt_check_slow(obd, now, "preprw_write setup");
+ 
+-        /* Filter truncate first locks i_mutex then partially truncated
+-         * page, filter write code first locks pages then take
+-         * i_mutex.  To avoid a deadlock in case of concurrent
+-         * punch/write requests from one client, filter writes and
+-         * filter truncates are serialized by i_alloc_sem, allowing
+-         * multiple writes or single truncate. */
+-        down_read(&dentry->d_inode->i_alloc_sem);
+-        fsfilt_check_slow(obd, now, "i_alloc_sem");
++	/* Filter truncate first locks i_mutex then partially truncated
++	 * page, filter write code first locks pages then take
++	 * i_mutex.  To avoid a deadlock in case of concurrent
++	 * punch/write requests from one client, filter writes and
++	 * filter truncates are serialized by INODE_DIO_LOCK_READ, allowing
++	 * multiple writes or single truncate. */
++
++	INODE_DIO_LOCK_READ(dentry->d_inode);
++	fsfilt_check_slow(obd, now, "INODE_DIO_LOCK_READ");
+ 
+         /* Don't update inode timestamps if this write is older than a
+          * setattr which modifies the timestamps. b=10150 */
+@@ -895,11 +897,11 @@ cleanup:
+                                 }
+                         }
+                 }
+-        case 3:
+-                if (rc)
+-                        up_read(&dentry->d_inode->i_alloc_sem);
++	case 3:
++		if (rc)
++			INODE_DIO_RELEASE_READ(dentry->d_inode);
+ 
+-                filter_iobuf_put(&obd->u.filter, iobuf, oti);
++		filter_iobuf_put(&obd->u.filter, iobuf, oti);
+         case 2:
+                 pop_ctxt(&saved, &obd->obd_lvfs_ctxt, NULL);
+                 if (rc)
+diff --git a/lustre/obdfilter/filter_io_26.c b/lustre/obdfilter/filter_io_26.c
+index 853e4f5..6d2b89f 100644
+--- a/lustre/obdfilter/filter_io_26.c
++++ b/lustre/obdfilter/filter_io_26.c
+@@ -635,10 +635,10 @@ int filter_commitrw_write(struct obd_export *exp, struct obdo *oa,
+                 LASSERT(PageLocked(lnb->page));
+                 LASSERT(!PageWriteback(lnb->page));
+ 
+-                /* since write & truncate are serialized by the i_alloc_sem,
+-                 * even partial truncate should not leave dirty pages in
+-                 * the page cache */
+-                LASSERT(!PageDirty(lnb->page));
++		/* since write & truncate are serialized by the inode_dio_wait,
++		 * even partial truncate should not leave dirty pages in
++		 * the page cache */
++		LASSERT(!PageDirty(lnb->page));
+ 
+                 SetPageUptodate(lnb->page);
+ 
+@@ -867,7 +867,7 @@ cleanup:
+                 if (fo->fo_writethrough_cache == 0 ||
+                     i_size_read(inode) > fo->fo_readcache_max_filesize)
+                         filter_release_cache(obd, obj, nb, inode);
+-                up_read(&inode->i_alloc_sem);
++		INODE_DIO_RELEASE_READ(inode);
+         }
+ 
+         RETURN(rc);
+diff --git a/lustre/osc/osc_cache.c b/lustre/osc/osc_cache.c
+index 23dc755..b42e41c 100644
+--- a/lustre/osc/osc_cache.c
++++ b/lustre/osc/osc_cache.c
+@@ -2695,9 +2695,9 @@ void osc_cache_truncate_end(const struct lu_env *env, struct osc_io *oio,
+  * The caller must have called osc_cache_writeback_range() to issue IO
+  * otherwise it will take a long time for this function to finish.
+  *
+- * Caller must hold inode_mutex and i_alloc_sem, or cancel exclusive
+- * dlm lock so that nobody else can dirty this range of file while we're
+- * waiting for extents to be written.
++ * Caller must hold inode_mutex , or cancel exclusive dlm lock so that
++ * nobody else can dirty this range of file while we're waiting for
++ * extents to be written.
+  */
+ int osc_cache_wait_range(const struct lu_env *env, struct osc_object *obj,
+ 			 pgoff_t start, pgoff_t end)
+diff --git a/lustre/osd-ldiskfs/osd_io.c b/lustre/osd-ldiskfs/osd_io.c
+index af3d6af..d266805 100644
+--- a/lustre/osd-ldiskfs/osd_io.c
++++ b/lustre/osd-ldiskfs/osd_io.c
+@@ -433,7 +433,6 @@ struct page *osd_get_page(struct dt_object *dt, loff_t offset, int rw)
+ /*
+  * there are following "locks":
+  * journal_start
+- * i_alloc_sem
+  * i_mutex
+  * page lock
+ 
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0003-LU-1337-vfs-kernel-3.1-changes-open_to_namei_flags.patch b/sys-cluster/lustre/files/0003-LU-1337-vfs-kernel-3.1-changes-open_to_namei_flags.patch
new file mode 100644
index 0000000..19e29ff
--- /dev/null
+++ b/sys-cluster/lustre/files/0003-LU-1337-vfs-kernel-3.1-changes-open_to_namei_flags.patch
@@ -0,0 +1,95 @@
+From 1bece6cbb7d810ef085d00ac4c664bbb37c8bc7b Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Thu, 26 Jul 2012 15:38:30 +0800
+Subject: [PATCH 03/13] LU-1337 vfs: kernel 3.1 changes open_to_namei_flags
+
+Kernel 3.1 changes the translation from open_flag to namei_flag,
+(kernel commit 8a5e929dd2e05ab4d3d89f58c5e8fca596af8f3a).
+
+So after 3.1, kernel's nameidata.intent.open.flags is different
+with lustre's lookup_intent.it_flags, as lustre's it_flags'
+lower bits equal to FMODE_xxx while kernel doesn't transliterate
+lower bits of nameidata.intent.open.flags to FMODE_xxx.
+
+This patch keeps lustre it_flags' semantics and add
+ll_namei_to_lookup_intent_flag for translation.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: I408685040688bae574d04cf288abb6ca967607df
+---
+ lustre/include/linux/lustre_compat25.h | 15 +++++++++++++++
+ lustre/llite/namei.c                   | 32 ++++++++++++++++----------------
+ 2 files changed, 31 insertions(+), 16 deletions(-)
+
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index bb45125..914069a 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -816,5 +816,20 @@ static inline bool selinux_is_enabled(void)
+ # define lm_compare_owner	fl_compare_owner
+ #endif
+ 
++/*
++ * After 3.1, kernel's nameidata.intent.open.flags is different
++ * with lustre's lookup_intent.it_flags, as lustre's it_flags'
++ * lower bits equal to FMODE_xxx while kernel doesn't transliterate
++ * lower bits of nameidata.intent.open.flags to FMODE_xxx.
++ * */
++#include <linux/version.h>
++static inline int ll_namei_to_lookup_intent_flag(int flag)
++{
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
++	flag = (flag & ~O_ACCMODE) | OPEN_FMODE(flag);
++#endif
++	return flag;
++}
++
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
+index 7521e3d..4cb3bf4 100644
+--- a/lustre/llite/namei.c
++++ b/lustre/llite/namei.c
+@@ -552,23 +552,23 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
+ struct lookup_intent *ll_convert_intent(struct open_intent *oit,
+                                         int lookup_flags)
+ {
+-        struct lookup_intent *it;
+-
+-        OBD_ALLOC(it, sizeof(*it));
+-        if (!it)
+-                return ERR_PTR(-ENOMEM);
+-
+-        if (lookup_flags & LOOKUP_OPEN) {
+-                it->it_op = IT_OPEN;
+-                if (lookup_flags & LOOKUP_CREATE)
+-                        it->it_op |= IT_CREAT;
+-                it->it_create_mode = (oit->create_mode & S_IALLUGO) | S_IFREG;
+-                it->it_flags = oit->flags;
+-        } else {
+-                it->it_op = IT_GETATTR;
+-        }
++	struct lookup_intent *it;
++
++	OBD_ALLOC(it, sizeof(*it));
++	if (!it)
++		return ERR_PTR(-ENOMEM);
++
++	if (lookup_flags & LOOKUP_OPEN) {
++		it->it_op = IT_OPEN;
++		if (lookup_flags & LOOKUP_CREATE)
++			it->it_op |= IT_CREAT;
++		it->it_create_mode = (oit->create_mode & S_IALLUGO) | S_IFREG;
++		it->it_flags = ll_namei_to_lookup_intent_flag(oit->flags);
++	} else {
++		it->it_op = IT_GETATTR;
++	}
+ 
+-        return it;
++	return it;
+ }
+ 
+ static struct dentry *ll_lookup_nd(struct inode *parent, struct dentry *dentry,
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0004-LU-1337-vfs-provides-ll_get_acl-to-i_op-get_acl.patch b/sys-cluster/lustre/files/0004-LU-1337-vfs-provides-ll_get_acl-to-i_op-get_acl.patch
new file mode 100644
index 0000000..deaf4ad
--- /dev/null
+++ b/sys-cluster/lustre/files/0004-LU-1337-vfs-provides-ll_get_acl-to-i_op-get_acl.patch
@@ -0,0 +1,150 @@
+From 734984d6c88784cde03d17e115dd6478a67daa58 Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Mon, 27 Aug 2012 17:19:22 +0800
+Subject: [PATCH 04/13] LU-1337 vfs: provides ll_get_acl to ->i_op->get_acl
+
+Since kernel 3.1 generic_permission() has lost the check_acl
+argument, ACL checking has been taken to VFS and filesystems
+need to provide a non-NULL ->i_op->get_acl to read an ACL
+from disk.
+
+This patch is a complementarity to http://review.whamcloud.com/3397
+(d018b087c962b8c66e8dc479fc66e964a2e5fd94), to fix failure of test_25
+of sanityn.sh.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: Ica96adac03c1792e2e8b668b959457a4ffec9a43
+---
+ lustre/autoconf/lustre-core.m4 |  3 +++
+ lustre/llite/file.c            | 28 +++++++++++++++++++++-------
+ lustre/llite/llite_internal.h  |  3 +++
+ lustre/llite/namei.c           |  6 ++++++
+ 4 files changed, 33 insertions(+), 7 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 0aef14f..a2d8efc 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1783,6 +1783,9 @@ LB_LINUX_TRY_COMPILE([
+ #
+ # 3.1 generic_permission taken 2 parameters.
+ # see kernel commit 2830ba7f34ebb27c4e5b8b6ef408cd6d74860890
++# When generic_permission taken 2 parameters, it also means
++# inode_operations has get_acl member function,
++# see kernel commit 4e34e719e457f2e031297175410fc0bd4016a085
+ #
+ AC_DEFUN([LC_GENERIC_PERMISSION],
+ [AC_MSG_CHECKING([if generic_permission take 2 or 4 arguments])
+diff --git a/lustre/llite/file.c b/lustre/llite/file.c
+index 1525b07..bf9ba2f 100644
+--- a/lustre/llite/file.c
++++ b/lustre/llite/file.c
+@@ -2536,16 +2536,29 @@ int ll_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
+ }
+ #endif
+ 
++struct posix_acl * ll_get_acl(struct inode *inode, int type)
++{
++	struct ll_inode_info *lli = ll_i2info(inode);
++	struct posix_acl *acl = NULL;
++	ENTRY;
++
++	cfs_spin_lock(&lli->lli_lock);
++	/* VFS' acl_permission_check->check_acl will release the refcount */
++	acl = posix_acl_dup(lli->lli_posix_acl);
++	cfs_spin_unlock(&lli->lli_lock);
++
++	RETURN(acl);
++}
++
+ #ifndef HAVE_GENERIC_PERMISSION_2ARGS
+ static int
+ # ifdef HAVE_GENERIC_PERMISSION_4ARGS
+-lustre_check_acl(struct inode *inode, int mask, unsigned int flags)
++ll_check_acl(struct inode *inode, int mask, unsigned int flags)
+ # else
+-lustre_check_acl(struct inode *inode, int mask)
++ll_check_acl(struct inode *inode, int mask)
+ # endif
+ {
+ # ifdef CONFIG_FS_POSIX_ACL
+-	struct ll_inode_info *lli = ll_i2info(inode);
+ 	struct posix_acl *acl;
+ 	int rc;
+ 	ENTRY;
+@@ -2554,9 +2567,7 @@ lustre_check_acl(struct inode *inode, int mask)
+ 	if (flags & IPERM_FLAG_RCU)
+ 		return -ECHILD;
+ #  endif
+-	cfs_spin_lock(&lli->lli_lock);
+-	acl = posix_acl_dup(lli->lli_posix_acl);
+-	cfs_spin_unlock(&lli->lli_lock);
++	acl = ll_get_acl(inode, ACL_TYPE_ACCESS);
+ 
+ 	if (!acl)
+ 		RETURN(-EAGAIN);
+@@ -2608,7 +2619,7 @@ int ll_inode_permission(struct inode *inode, int mask, struct nameidata *nd)
+                 return lustre_check_remote_perm(inode, mask);
+ 
+         ll_stats_ops_tally(ll_i2sbi(inode), LPROC_LL_INODE_PERM, 1);
+-        rc = ll_generic_permission(inode, mask, flags, lustre_check_acl);
++        rc = ll_generic_permission(inode, mask, flags, ll_check_acl);
+ 
+         RETURN(rc);
+ }
+@@ -2703,6 +2714,9 @@ struct inode_operations ll_file_inode_operations = {
+ #ifdef  HAVE_LINUX_FIEMAP_H
+         .fiemap         = ll_fiemap,
+ #endif
++#ifdef  HAVE_GENERIC_PERMISSION_2ARGS
++	.get_acl	= ll_get_acl,
++#endif
+ };
+ 
+ /* dynamic ioctl number support routins */
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index 0c9f6d6..a1c02e5 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -748,6 +748,8 @@ int ll_getattr_it(struct vfsmount *mnt, struct dentry *de,
+                struct lookup_intent *it, struct kstat *stat);
+ int ll_getattr(struct vfsmount *mnt, struct dentry *de, struct kstat *stat);
+ struct ll_file_data *ll_file_data_get(void);
++struct posix_acl * ll_get_acl(struct inode *inode, int type);
++
+ #ifdef HAVE_GENERIC_PERMISSION_4ARGS
+ int ll_inode_permission(struct inode *inode, int mask, unsigned int flags);
+ #else
+@@ -757,6 +759,7 @@ int ll_inode_permission(struct inode *inode, int mask, struct nameidata *nd);
+ int ll_inode_permission(struct inode *inode, int mask);
+ # endif
+ #endif
++
+ int ll_lov_setstripe_ea_info(struct inode *inode, struct file *file,
+                              int flags, struct lov_user_md *lum,
+                              int lum_size);
+diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
+index 4cb3bf4..036674f 100644
+--- a/lustre/llite/namei.c
++++ b/lustre/llite/namei.c
+@@ -1193,6 +1193,9 @@ struct inode_operations ll_dir_inode_operations = {
+         .getxattr           = ll_getxattr,
+         .listxattr          = ll_listxattr,
+         .removexattr        = ll_removexattr,
++#ifdef  HAVE_GENERIC_PERMISSION_2ARGS
++	.get_acl	    = ll_get_acl,
++#endif
+ };
+ 
+ struct inode_operations ll_special_inode_operations = {
+@@ -1203,4 +1206,7 @@ struct inode_operations ll_special_inode_operations = {
+         .getxattr       = ll_getxattr,
+         .listxattr      = ll_listxattr,
+         .removexattr    = ll_removexattr,
++#ifdef  HAVE_GENERIC_PERMISSION_2ARGS
++	.get_acl	    = ll_get_acl,
++#endif
+ };
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0005-LU-1337-block-kernel-3.2-make_request_fn-returns-voi.patch b/sys-cluster/lustre/files/0005-LU-1337-block-kernel-3.2-make_request_fn-returns-voi.patch
new file mode 100644
index 0000000..3630fc2
--- /dev/null
+++ b/sys-cluster/lustre/files/0005-LU-1337-block-kernel-3.2-make_request_fn-returns-voi.patch
@@ -0,0 +1,108 @@
+From b489d154ef9a88421939b20b146361122a4704d6 Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Thu, 9 Aug 2012 10:18:32 +0800
+Subject: [PATCH 05/13] LU-1337 block: kernel 3.2 make_request_fn returns void
+
+3.2 request_queue.make_request_fn defined as function returns void.
+(kernel commit 5a7bbad27a410350e64a2d7f5ec18fc73836c14f)
+Add LC_HAVE_VOID_MAKE_REQUEST_FN/HAVE_VOID_MAKE_REQUEST_FN for check.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: I49a27873c1754addc9fef7c5f50cbf84592adf05
+---
+ lustre/autoconf/lustre-core.m4         | 24 ++++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  8 ++++++++
+ lustre/llite/lloop.c                   |  9 +++++----
+ 3 files changed, 37 insertions(+), 4 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index a2d8efc..420d81e 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1874,6 +1874,27 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.2 request_queue.make_request_fn defined as function returns with void
++# see kernel commit 5a7bbad27a410350e64a2d7f5ec18fc73836c14f
++#
++AC_DEFUN([LC_HAVE_VOID_MAKE_REQUEST_FN],
++[AC_MSG_CHECKING([if request_queue.make_request_fn returns void but not int])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/blkdev.h>
++],[
++	int ret;
++	make_request_fn		*mrf;
++	ret = mrf(NULL, NULL);
++],[
++	AC_MSG_RESULT([no])
++],[
++	AC_DEFINE(HAVE_VOID_MAKE_REQUEST_FN, 1,
++		  [request_queue.make_request_fn returns void but not int])
++	AC_MSG_RESULT([yes])
++])
++])
++
++#
+ # 3.3 introduces migrate_mode.h and migratepage has 4 args
+ #
+ AC_DEFUN([LC_HAVE_MIGRATE_HEADER],
+@@ -2061,6 +2082,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_LM_XXX_LOCK_MANAGER_OPS
+ 	 LC_INODE_DIO_WAIT
+ 
++	 # 3.2
++	 LC_HAVE_VOID_MAKE_REQUEST_FN
++
+ 	 # 3.3
+ 	 LC_HAVE_MIGRATE_HEADER
+ 	 LC_MIGRATEPAGE_4ARGS
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 914069a..2d0dd0e 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -831,5 +831,13 @@ static inline int ll_namei_to_lookup_intent_flag(int flag)
+ 	return flag;
+ }
+ 
++#ifdef HAVE_VOID_MAKE_REQUEST_FN
++# define ll_mrf_ret void
++# define LL_MRF_RETURN(rc) EXIT
++#else
++# define ll_mrf_ret int
++# define LL_MRF_RETURN(rc) RETURN(rc)
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/lloop.c b/lustre/llite/lloop.c
+index 5f4dec3..59814e6 100644
+--- a/lustre/llite/lloop.c
++++ b/lustre/llite/lloop.c
+@@ -338,7 +338,8 @@ static unsigned int loop_get_bio(struct lloop_device *lo, struct bio **req)
+         return count;
+ }
+ 
+-static int loop_make_request(struct request_queue *q, struct bio *old_bio)
++static ll_mrf_ret
++loop_make_request(struct request_queue *q, struct bio *old_bio)
+ {
+         struct lloop_device *lo = q->queuedata;
+         int rw = bio_rw(old_bio);
+@@ -366,10 +367,10 @@ static int loop_make_request(struct request_queue *q, struct bio *old_bio)
+                 goto err;
+         }
+         loop_add_bio(lo, old_bio);
+-        return 0;
++	LL_MRF_RETURN(0);
+ err:
+-        cfs_bio_io_error(old_bio, old_bio->bi_size);
+-        return 0;
++	cfs_bio_io_error(old_bio, old_bio->bi_size);
++	LL_MRF_RETURN(0);
+ }
+ 
+ #ifdef HAVE_REQUEST_QUEUE_UNPLUG_FN
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0006-LU-1337-vfs-kernel-3.2-protects-inode-i_nlink.patch b/sys-cluster/lustre/files/0006-LU-1337-vfs-kernel-3.2-protects-inode-i_nlink.patch
new file mode 100644
index 0000000..4866ce2
--- /dev/null
+++ b/sys-cluster/lustre/files/0006-LU-1337-vfs-kernel-3.2-protects-inode-i_nlink.patch
@@ -0,0 +1,194 @@
+From 7fefbc7487f55b0edaa7a85f0e5b9fea68d5ff15 Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Thu, 9 Aug 2012 10:31:10 +0800
+Subject: [PATCH 06/13] LU-1337 vfs: kernel 3.2 protects inode->i_nlink
+
+Kernel 3.2 protects inode->i_nlink from direct modification.
+Filesystems may only read i_nlink directly. They shall use the
+(set|clear|inc|drop)_nlink for modification.
+See kernel commit a78ef704a8dd430225955f0709b22d4a6ba21deb.
+
+This patch adds LC_HAVE_PROTECT_I_NLINK checking and implements
+set_nlink for old kernel, clear/inc/drop_nlink exists after 2.6.18
+so need not to be re-implemented.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: Ie958cb308291ecc48d409a1282fed7ea3549a561
+---
+ lustre/autoconf/lustre-core.m4         | 22 ++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  8 ++++++++
+ lustre/llite/dcache.c                  |  4 ++--
+ lustre/llite/file.c                    |  2 +-
+ lustre/llite/llite_lib.c               |  4 ++--
+ lustre/osd-ldiskfs/osd_handler.c       | 12 ++++++------
+ 6 files changed, 41 insertions(+), 11 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 420d81e..84f1678 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1895,6 +1895,27 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.2 protects inode->i_nlink from direct modification
++# see kernel commit a78ef704a8dd430225955f0709b22d4a6ba21deb
++# at the same time, add set_nlink()
++#
++AC_DEFUN([LC_HAVE_PROTECT_I_NLINK],
++[AC_MSG_CHECKING([if inode->i_nlink is protected from direct modification])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	struct inode i;
++	i.i_nlink = 0;
++],[
++	AC_MSG_RESULT([no])
++],[
++	AC_DEFINE(HAVE_PROTECT_I_NLINK, 1,
++		  [inode->i_nlink is protected from direct modification])
++	AC_MSG_RESULT([yes])
++])
++])
++
++#
+ # 3.3 introduces migrate_mode.h and migratepage has 4 args
+ #
+ AC_DEFUN([LC_HAVE_MIGRATE_HEADER],
+@@ -2084,6 +2105,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.2
+ 	 LC_HAVE_VOID_MAKE_REQUEST_FN
++	 LC_HAVE_PROTECT_I_NLINK
+ 
+ 	 # 3.3
+ 	 LC_HAVE_MIGRATE_HEADER
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 2d0dd0e..7ead133 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -839,5 +839,13 @@ static inline int ll_namei_to_lookup_intent_flag(int flag)
+ # define LL_MRF_RETURN(rc) RETURN(rc)
+ #endif
+ 
++#include <linux/fs.h>
++#ifndef HAVE_PROTECT_I_NLINK
++static inline void set_nlink(struct inode *inode, unsigned int nlink)
++{
++	inode->i_nlink = nlink;
++}
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/dcache.c b/lustre/llite/dcache.c
+index 14fb634..b507408 100644
+--- a/lustre/llite/dcache.c
++++ b/lustre/llite/dcache.c
+@@ -187,7 +187,7 @@ static int ll_ddelete(HAVE_D_DELETE_CONST struct dentry *de)
+ 	/* if not ldlm lock for this inode, set i_nlink to 0 so that
+ 	 * this inode can be recycled later b=20433 */
+ 	if (de->d_inode && !find_cbdata(de->d_inode))
+-		de->d_inode->i_nlink = 0;
++		clear_nlink(de->d_inode);
+ #endif
+ 
+ 	if (d_lustre_invalid((struct dentry *)de))
+@@ -687,7 +687,7 @@ void ll_d_iput(struct dentry *de, struct inode *inode)
+ {
+         LASSERT(inode);
+         if (!find_cbdata(inode))
+-                inode->i_nlink = 0;
++		clear_nlink(inode);
+         iput(inode);
+ }
+ 
+diff --git a/lustre/llite/file.c b/lustre/llite/file.c
+index bf9ba2f..8840295 100644
+--- a/lustre/llite/file.c
++++ b/lustre/llite/file.c
+@@ -2315,7 +2315,7 @@ ldlm_mode_t ll_take_md_lock(struct inode *inode, __u64 bits,
+ static int ll_inode_revalidate_fini(struct inode *inode, int rc) {
+         if (rc == -ENOENT) { /* Already unlinked. Just update nlink
+                               * and return success */
+-                inode->i_nlink = 0;
++		clear_nlink(inode);
+                 /* This path cannot be hit for regular files unless in
+                  * case of obscure races, so no need to to validate
+                  * size. */
+diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
+index 7f3ac28..07efcfc 100644
+--- a/lustre/llite/llite_lib.c
++++ b/lustre/llite/llite_lib.c
+@@ -1218,7 +1218,7 @@ int ll_md_setattr(struct dentry *dentry, struct md_op_data *op_data,
+         if (rc) {
+                 ptlrpc_req_finished(request);
+                 if (rc == -ENOENT) {
+-                        inode->i_nlink = 0;
++			clear_nlink(inode);
+                         /* Unlinked special device node? Or just a race?
+                          * Pretend we done everything. */
+                         if (!S_ISREG(inode->i_mode) &&
+@@ -1724,7 +1724,7 @@ void ll_update_inode(struct inode *inode, struct lustre_md *md)
+         if (body->valid & OBD_MD_FLFLAGS)
+                 inode->i_flags = ll_ext_to_inode_flags(body->flags);
+         if (body->valid & OBD_MD_FLNLINK)
+-                inode->i_nlink = body->nlink;
++		set_nlink(inode, body->nlink);
+         if (body->valid & OBD_MD_FLRDEV)
+                 inode->i_rdev = old_decode_dev(body->rdev);
+ 
+diff --git a/lustre/osd-ldiskfs/osd_handler.c b/lustre/osd-ldiskfs/osd_handler.c
+index 1c37bd9..ec9dfb6 100644
+--- a/lustre/osd-ldiskfs/osd_handler.c
++++ b/lustre/osd-ldiskfs/osd_handler.c
+@@ -1518,7 +1518,7 @@ static int osd_inode_setattr(const struct lu_env *env,
+         if (bits & LA_GID)
+                 inode->i_gid    = attr->la_gid;
+         if (bits & LA_NLINK)
+-                inode->i_nlink  = attr->la_nlink;
++		set_nlink(inode, attr->la_nlink);
+         if (bits & LA_RDEV)
+                 inode->i_rdev   = attr->la_rdev;
+ 
+@@ -2076,7 +2076,7 @@ static int osd_object_destroy(const struct lu_env *env,
+                 LASSERT(osd_inode_unlinked(inode) ||
+                         inode->i_nlink == 1);
+                 cfs_spin_lock(&obj->oo_guard);
+-                inode->i_nlink = 0;
++		clear_nlink(inode);
+                 cfs_spin_unlock(&obj->oo_guard);
+                 inode->i_sb->s_op->dirty_inode(inode);
+         } else {
+@@ -2283,11 +2283,11 @@ static int osd_object_ref_add(const struct lu_env *env,
+          * do not actually care whether this flag is set or not.
+          */
+         cfs_spin_lock(&obj->oo_guard);
+-        inode->i_nlink++;
++	inc_nlink(inode);
+         if (S_ISDIR(inode->i_mode) && inode->i_nlink > 1) {
+                 if (inode->i_nlink >= LDISKFS_LINK_MAX ||
+                     inode->i_nlink == 2)
+-                        inode->i_nlink = 1;
++			set_nlink(inode, 1);
+         }
+         LASSERT(inode->i_nlink <= LDISKFS_LINK_MAX);
+         cfs_spin_unlock(&obj->oo_guard);
+@@ -2333,12 +2333,12 @@ static int osd_object_ref_del(const struct lu_env *env, struct dt_object *dt,
+ 
+         cfs_spin_lock(&obj->oo_guard);
+         LASSERT(inode->i_nlink > 0);
+-        inode->i_nlink--;
++	drop_nlink(inode);
+         /* If this is/was a many-subdir directory (nlink > LDISKFS_LINK_MAX)
+          * then the nlink count is 1. Don't let it be set to 0 or the directory
+          * inode will be deleted incorrectly. */
+         if (S_ISDIR(inode->i_mode) && inode->i_nlink == 0)
+-                inode->i_nlink++;
++		inc_nlink(inode);
+         cfs_spin_unlock(&obj->oo_guard);
+         inode->i_sb->s_op->dirty_inode(inode);
+         LINVRNT(osd_invariant(obj));
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0007-LU-1337-vfs-3.3-changes-super_operations-inode_opera.patch b/sys-cluster/lustre/files/0007-LU-1337-vfs-3.3-changes-super_operations-inode_opera.patch
new file mode 100644
index 0000000..43cc784
--- /dev/null
+++ b/sys-cluster/lustre/files/0007-LU-1337-vfs-3.3-changes-super_operations-inode_opera.patch
@@ -0,0 +1,217 @@
+From 87c734aec5ec3a73c8eeab425f501568b05874ba Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Thu, 19 Jul 2012 17:43:16 +0800
+Subject: [PATCH 07/13] LU-1337 vfs: 3.3 changes
+ super_operations/inode_operations
+
+1. Kernel 3.3 switchs super_operations to use dentry as parameter
+   (kernel commit 34c80b1d93e6e20ca9dea0baf583a5b5510d92d4).
+   Add LC_SUPEROPS_USE_DENTRY/HAVE_SUPEROPS_USE_DENTRY to check it.
+2. Kernel 3.3 switchs inode_operations to use umode_t as parameter
+   (kernel commit 1a67aafb5f72a436ca044293309fa7e6351d6a35).
+   Add LC_INODEOPS_USE_UMODE_T/HAVE_INODEOPS_USE_UMODE_T to check it.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: I7564506cf4365c8da113a81058f68b9ef8b092a4
+---
+ lustre/autoconf/lustre-core.m4         | 57 ++++++++++++++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  6 ++++
+ lustre/llite/llite_internal.h          |  4 +++
+ lustre/llite/llite_lib.c               | 13 ++++++--
+ lustre/llite/namei.c                   | 13 +++++---
+ 5 files changed, 87 insertions(+), 6 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 84f1678..15f58ab 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -1954,6 +1954,61 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.3 switchs super_operations to use dentry as parameter (but not vfsmount)
++# see kernel commit 34c80b1d93e6e20ca9dea0baf583a5b5510d92d4
++#
++AC_DEFUN([LC_SUPEROPS_USE_DENTRY],
++[AC_MSG_CHECKING([if super_operations use dentry as parameter])
++tmp_flags="$EXTRA_KCFLAGS"
++EXTRA_KCFLAGS="-Werror"
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++	int show_options(struct seq_file *seq, struct dentry *root){
++		return 0;
++	}
++],[
++	struct super_operations ops;
++	ops.show_options = show_options;
++],[
++	AC_DEFINE(HAVE_SUPEROPS_USE_DENTRY, 1,
++		  [super_operations use dentry as parameter])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++EXTRA_KCFLAGS="$tmp_flags"
++])
++
++#
++# 3.3 switchs inode_operations to use umode_t as parameter (but not int)
++# see kernel commit 1a67aafb5f72a436ca044293309fa7e6351d6a35
++#
++AC_DEFUN([LC_INODEOPS_USE_UMODE_T],
++[AC_MSG_CHECKING([if inode_operations use umode_t as parameter])
++tmp_flags="$EXTRA_KCFLAGS"
++EXTRA_KCFLAGS="-Werror"
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++	#include <linux/types.h>
++	int my_mknod(struct inode *dir, struct dentry *dchild,
++		     umode_t mode, dev_t dev)
++	{
++		return 0;
++	}
++],[
++	struct inode_operations ops;
++	ops.mknod = my_mknod;
++],[
++	AC_DEFINE(HAVE_INODEOPS_USE_UMODE_T, 1,
++		  [inode_operations use umode_t as parameter])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++EXTRA_KCFLAGS="$tmp_flags"
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2110,6 +2165,8 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 # 3.3
+ 	 LC_HAVE_MIGRATE_HEADER
+ 	 LC_MIGRATEPAGE_4ARGS
++	 LC_SUPEROPS_USE_DENTRY
++	 LC_INODEOPS_USE_UMODE_T
+ 
+          #
+          if test x$enable_server = xyes ; then
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 7ead133..070ad83 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -847,5 +847,11 @@ static inline void set_nlink(struct inode *inode, unsigned int nlink)
+ }
+ #endif
+ 
++#ifdef HAVE_INODEOPS_USE_UMODE_T
++# define ll_umode_t	umode_t
++#else
++# define ll_umode_t	int
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/llite_internal.h b/lustre/llite/llite_internal.h
+index a1c02e5..a942134 100644
+--- a/lustre/llite/llite_internal.h
++++ b/lustre/llite/llite_internal.h
+@@ -830,7 +830,11 @@ void ll_umount_begin(struct vfsmount *vfsmnt, int flags);
+ void ll_umount_begin(struct super_block *sb);
+ #endif
+ int ll_remount_fs(struct super_block *sb, int *flags, char *data);
++#ifdef HAVE_SUPEROPS_USE_DENTRY
++int ll_show_options(struct seq_file *seq, struct dentry *dentry);
++#else
+ int ll_show_options(struct seq_file *seq, struct vfsmount *vfs);
++#endif
+ int ll_prep_inode(struct inode **inode, struct ptlrpc_request *req,
+                   struct super_block *);
+ void lustre_dump_dentry(struct dentry *, int recur);
+diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
+index 07efcfc..18246ac 100644
+--- a/lustre/llite/llite_lib.c
++++ b/lustre/llite/llite_lib.c
+@@ -2294,12 +2294,21 @@ void ll_finish_md_op_data(struct md_op_data *op_data)
+         OBD_FREE_PTR(op_data);
+ }
+ 
++#ifdef HAVE_SUPEROPS_USE_DENTRY
++int ll_show_options(struct seq_file *seq, struct dentry *dentry)
++#else
+ int ll_show_options(struct seq_file *seq, struct vfsmount *vfs)
++#endif
+ {
+         struct ll_sb_info *sbi;
+ 
+-        LASSERT((seq != NULL) && (vfs != NULL));
+-        sbi = ll_s2sbi(vfs->mnt_sb);
++#ifdef HAVE_SUPEROPS_USE_DENTRY
++	LASSERT((seq != NULL) && (dentry != NULL));
++	sbi = ll_s2sbi(dentry->d_sb);
++#else
++	LASSERT((seq != NULL) && (vfs != NULL));
++	sbi = ll_s2sbi(vfs->mnt_sb);
++#endif
+ 
+         if (sbi->ll_flags & LL_SBI_NOLCK)
+                 seq_puts(seq, ",nolock");
+diff --git a/lustre/llite/namei.c b/lustre/llite/namei.c
+index 036674f..a439e2f 100644
+--- a/lustre/llite/namei.c
++++ b/lustre/llite/namei.c
+@@ -815,7 +815,7 @@ static int ll_mknod_generic(struct inode *dir, struct qstr *name, int mode,
+ }
+ 
+ static int ll_create_nd(struct inode *dir, struct dentry *dentry,
+-                        int mode, struct nameidata *nd)
++			ll_umode_t mode, struct nameidata *nd)
+ {
+         struct lookup_intent *it = ll_d2d(dentry)->lld_it;
+         int rc;
+@@ -1128,8 +1128,8 @@ static int ll_rename_generic(struct inode *src, struct dentry *src_dparent,
+         RETURN(err);
+ }
+ 
+-static int ll_mknod(struct inode *dir, struct dentry *dchild, int mode,
+-                    ll_dev_t rdev)
++static int ll_mknod(struct inode *dir, struct dentry *dchild,
++		    ll_umode_t mode, ll_dev_t rdev)
+ {
+         return ll_mknod_generic(dir, &dchild->d_name, mode,
+                                 old_encode_dev(rdev), dchild);
+@@ -1139,25 +1139,30 @@ static int ll_unlink(struct inode * dir, struct dentry *dentry)
+ {
+         return ll_unlink_generic(dir, NULL, dentry, &dentry->d_name);
+ }
+-static int ll_mkdir(struct inode *dir, struct dentry *dentry, int mode)
++
++static int ll_mkdir(struct inode *dir, struct dentry *dentry, ll_umode_t mode)
+ {
+         return ll_mkdir_generic(dir, &dentry->d_name, mode, dentry);
+ }
++
+ static int ll_rmdir(struct inode *dir, struct dentry *dentry)
+ {
+         return ll_rmdir_generic(dir, NULL, dentry, &dentry->d_name);
+ }
++
+ static int ll_symlink(struct inode *dir, struct dentry *dentry,
+                       const char *oldname)
+ {
+         return ll_symlink_generic(dir, &dentry->d_name, oldname, dentry);
+ }
++
+ static int ll_link(struct dentry *old_dentry, struct inode *dir,
+                    struct dentry *new_dentry)
+ {
+         return ll_link_generic(old_dentry->d_inode, dir, &new_dentry->d_name,
+                                new_dentry);
+ }
++
+ static int ll_rename(struct inode *old_dir, struct dentry *old_dentry,
+                      struct inode *new_dir, struct dentry *new_dentry)
+ {
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0008-LU-1337-kernel-remove-unnecessary-includings-of-syst.patch b/sys-cluster/lustre/files/0008-LU-1337-kernel-remove-unnecessary-includings-of-syst.patch
new file mode 100644
index 0000000..5b22c94
--- /dev/null
+++ b/sys-cluster/lustre/files/0008-LU-1337-kernel-remove-unnecessary-includings-of-syst.patch
@@ -0,0 +1,211 @@
+From 3d5f9b7679cfc5bb0a1c21c232478c17cfeb77e2 Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Mon, 16 Jul 2012 11:08:56 +0800
+Subject: [PATCH 08/13] LU-1337 kernel: remove unnecessary includings of
+ system.h
+
+<asm/system.h> is removed in kernel 3.4, and it is indeed not needed.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: Ic4d0a086656c5dfb05669aae40680b41e8ea00c7
+---
+ libcfs/include/libcfs/linux/kp30.h     | 1 -
+ libcfs/libcfs/linux/linux-debug.c      | 1 -
+ libcfs/libcfs/linux/linux-proc.c       | 1 -
+ lnet/klnds/mxlnd/mxlnd.h               | 1 -
+ lnet/klnds/o2iblnd/o2iblnd.h           | 1 -
+ lnet/klnds/ptllnd/ptllnd.h             | 1 -
+ lnet/klnds/qswlnd/qswlnd.h             | 1 -
+ lnet/klnds/ralnd/ralnd.h               | 1 -
+ lnet/klnds/socklnd/socklnd_lib-linux.h | 1 -
+ lustre/llite/llite_mmap.c              | 1 -
+ lustre/llite/rw.c                      | 1 -
+ lustre/llite/rw26.c                    | 1 -
+ lustre/mdt/mdt_identity.c              | 1 -
+ lustre/mdt/mdt_idmap.c                 | 1 -
+ lustre/obdclass/linux/linux-module.c   | 1 -
+ 15 files changed, 15 deletions(-)
+
+diff --git a/libcfs/include/libcfs/linux/kp30.h b/libcfs/include/libcfs/linux/kp30.h
+index 2e1ead7..b8c0aff 100644
+--- a/libcfs/include/libcfs/linux/kp30.h
++++ b/libcfs/include/libcfs/linux/kp30.h
+@@ -45,7 +45,6 @@
+ #include <linux/init.h>
+ #include <linux/errno.h>
+ #include <linux/unistd.h>
+-#include <asm/system.h>
+ #include <linux/kmod.h>
+ #include <linux/notifier.h>
+ #include <linux/fs.h>
+diff --git a/libcfs/libcfs/linux/linux-debug.c b/libcfs/libcfs/linux/linux-debug.c
+index 9fc64e6..5ff5771 100644
+--- a/libcfs/libcfs/linux/linux-debug.c
++++ b/libcfs/libcfs/linux/linux-debug.c
+@@ -51,7 +51,6 @@
+ #endif
+ #include <linux/unistd.h>
+ #include <linux/interrupt.h>
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <linux/completion.h>
+ 
+diff --git a/libcfs/libcfs/linux/linux-proc.c b/libcfs/libcfs/linux/linux-proc.c
+index 5294e08..e9c5018 100644
+--- a/libcfs/libcfs/linux/linux-proc.c
++++ b/libcfs/libcfs/linux/linux-proc.c
+@@ -50,7 +50,6 @@
+ #include <net/sock.h>
+ #include <linux/uio.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ 
+ #include <linux/fs.h>
+diff --git a/lnet/klnds/mxlnd/mxlnd.h b/lnet/klnds/mxlnd/mxlnd.h
+index 69b2978..fdb0942 100644
+--- a/lnet/klnds/mxlnd/mxlnd.h
++++ b/lnet/klnds/mxlnd/mxlnd.h
+@@ -49,7 +49,6 @@
+ #include <linux/uio.h>
+ #include <linux/fs.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+ 
+diff --git a/lnet/klnds/o2iblnd/o2iblnd.h b/lnet/klnds/o2iblnd/o2iblnd.h
+index ce80d76..f3add0b 100644
+--- a/lnet/klnds/o2iblnd/o2iblnd.h
++++ b/lnet/klnds/o2iblnd/o2iblnd.h
+@@ -47,7 +47,6 @@
+ #include <linux/unistd.h>
+ #include <linux/uio.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+ 
+diff --git a/lnet/klnds/ptllnd/ptllnd.h b/lnet/klnds/ptllnd/ptllnd.h
+index c51d82d..7862952 100644
+--- a/lnet/klnds/ptllnd/ptllnd.h
++++ b/lnet/klnds/ptllnd/ptllnd.h
+@@ -45,7 +45,6 @@
+ #include <linux/unistd.h>
+ #include <linux/uio.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+ 
+diff --git a/lnet/klnds/qswlnd/qswlnd.h b/lnet/klnds/qswlnd/qswlnd.h
+index 33e44b0..14a2845 100644
+--- a/lnet/klnds/qswlnd/qswlnd.h
++++ b/lnet/klnds/qswlnd/qswlnd.h
+@@ -55,7 +55,6 @@
+ #include <net/sock.h>
+ #include <linux/uio.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ 
+ #include <linux/fs.h>
+diff --git a/lnet/klnds/ralnd/ralnd.h b/lnet/klnds/ralnd/ralnd.h
+index fbea48d..606e8cd 100644
+--- a/lnet/klnds/ralnd/ralnd.h
++++ b/lnet/klnds/ralnd/ralnd.h
+@@ -45,7 +45,6 @@
+ #include <linux/unistd.h>
+ #include <linux/uio.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <asm/io.h>
+ 
+diff --git a/lnet/klnds/socklnd/socklnd_lib-linux.h b/lnet/klnds/socklnd/socklnd_lib-linux.h
+index 2a943c0..41ba9c3 100644
+--- a/lnet/klnds/socklnd/socklnd_lib-linux.h
++++ b/lnet/klnds/socklnd/socklnd_lib-linux.h
+@@ -50,7 +50,6 @@
+ #include <linux/uio.h>
+ #include <linux/if.h>
+ 
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <asm/irq.h>
+ 
+diff --git a/lustre/llite/llite_mmap.c b/lustre/llite/llite_mmap.c
+index 2549bad..5310b14 100644
+--- a/lustre/llite/llite_mmap.c
++++ b/lustre/llite/llite_mmap.c
+@@ -41,7 +41,6 @@
+ #include <linux/errno.h>
+ #include <linux/unistd.h>
+ #include <linux/version.h>
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ 
+ #include <linux/fs.h>
+diff --git a/lustre/llite/rw.c b/lustre/llite/rw.c
+index 310cf45..76e259d 100644
+--- a/lustre/llite/rw.c
++++ b/lustre/llite/rw.c
+@@ -45,7 +45,6 @@
+ #include <linux/errno.h>
+ #include <linux/unistd.h>
+ #include <linux/version.h>
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ 
+ #include <linux/fs.h>
+diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c
+index 917ba3f..83cbe55 100644
+--- a/lustre/llite/rw26.c
++++ b/lustre/llite/rw26.c
+@@ -45,7 +45,6 @@
+ #include <linux/errno.h>
+ #include <linux/unistd.h>
+ #include <linux/version.h>
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ 
+ #ifdef HAVE_MIGRATE_H
+diff --git a/lustre/mdt/mdt_identity.c b/lustre/mdt/mdt_identity.c
+index 23c7ce4..0e2a3e2 100644
+--- a/lustre/mdt/mdt_identity.c
++++ b/lustre/mdt/mdt_identity.c
+@@ -50,7 +50,6 @@
+ #include <linux/errno.h>
+ #include <linux/version.h>
+ #include <linux/unistd.h>
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <linux/fs.h>
+ #include <linux/stat.h>
+diff --git a/lustre/mdt/mdt_idmap.c b/lustre/mdt/mdt_idmap.c
+index 2b50225..68f4391 100644
+--- a/lustre/mdt/mdt_idmap.c
++++ b/lustre/mdt/mdt_idmap.c
+@@ -48,7 +48,6 @@
+ #include <linux/errno.h>
+ #include <linux/version.h>
+ #include <linux/unistd.h>
+-#include <asm/system.h>
+ #include <asm/uaccess.h>
+ #include <linux/fs.h>
+ #include <linux/stat.h>
+diff --git a/lustre/obdclass/linux/linux-module.c b/lustre/obdclass/linux/linux-module.c
+index af3fd9a..cae8397 100644
+--- a/lustre/obdclass/linux/linux-module.c
++++ b/lustre/obdclass/linux/linux-module.c
+@@ -62,7 +62,6 @@
+ #include <linux/highmem.h>
+ #include <asm/io.h>
+ #include <asm/ioctls.h>
+-#include <asm/system.h>
+ #include <asm/poll.h>
+ #include <asm/uaccess.h>
+ #include <linux/miscdevice.h>
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0009-LU-1337-vfs-kernel-3.4-touch_atime-switchs-to-1-argu.patch b/sys-cluster/lustre/files/0009-LU-1337-vfs-kernel-3.4-touch_atime-switchs-to-1-argu.patch
new file mode 100644
index 0000000..9e43117
--- /dev/null
+++ b/sys-cluster/lustre/files/0009-LU-1337-vfs-kernel-3.4-touch_atime-switchs-to-1-argu.patch
@@ -0,0 +1,89 @@
+From 9e6789a41f3b1afd1a8a2575a4abbc49f0b10727 Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Thu, 9 Aug 2012 10:34:49 +0800
+Subject: [PATCH 09/13] LU-1337 vfs: kernel 3.4 touch_atime switchs to 1
+ argument
+
+touch_atime switchs to use 1 argument of  struct path since
+kernel 3.4 (commit 68ac1234fb949b66941d94dce4157742799fc581).
+
+Add LC_TOUCH_ATIME_1ARG/HAVE_TOUCH_ATIME_1ARG to check it.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: I1a0478459538376761b96e1dc65328eeeef60d0f
+---
+ lustre/autoconf/lustre-core.m4 | 22 ++++++++++++++++++++++
+ lustre/llite/dir.c             |  9 +++++++++
+ 2 files changed, 31 insertions(+)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 15f58ab..3b3115c 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2009,6 +2009,25 @@ EXTRA_KCFLAGS="$tmp_flags"
+ ])
+ 
+ #
++# 3.4 switchs touch_atime to struct path
++# see kernel commit 68ac1234fb949b66941d94dce4157742799fc581
++#
++AC_DEFUN([LC_TOUCH_ATIME_1ARG],
++[AC_MSG_CHECKING([if touch_atime use one argument])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	touch_atime((struct path *)NULL);
++],[
++	AC_DEFINE(HAVE_TOUCH_ATIME_1ARG, 1,
++		  [touch_atime use one argument])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2168,6 +2187,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_SUPEROPS_USE_DENTRY
+ 	 LC_INODEOPS_USE_UMODE_T
+ 
++	 # 3.4
++	 LC_TOUCH_ATIME_1ARG
++
+          #
+          if test x$enable_server = xyes ; then
+              AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/llite/dir.c b/lustre/llite/dir.c
+index f985625..f418631 100644
+--- a/lustre/llite/dir.c
++++ b/lustre/llite/dir.c
+@@ -500,6 +500,9 @@ int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+         int                   hash64     = sbi->ll_flags & LL_SBI_64BIT_HASH;
+         struct page          *page;
+         struct ll_dir_chain   chain;
++#ifdef HAVE_TOUCH_ATIME_1ARG
++	struct path           path;
++#endif
+         int                   done;
+         int                   rc;
+         ENTRY;
+@@ -627,7 +630,13 @@ int ll_readdir(struct file *filp, void *cookie, filldir_t filldir)
+                         filp->f_pos = pos;
+         }
+         filp->f_version = inode->i_version;
++#ifdef HAVE_TOUCH_ATIME_1ARG
++	path.mnt = filp->f_vfsmnt;
++	path.dentry = filp->f_dentry;
++	touch_atime(&path);
++#else
+         touch_atime(filp->f_vfsmnt, filp->f_dentry);
++#endif
+ 
+         ll_dir_chain_fini(&chain);
+ 
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0010-LU-1337-vfs-kernel-3.4-converts-d_alloc_root-to-d_ma.patch b/sys-cluster/lustre/files/0010-LU-1337-vfs-kernel-3.4-converts-d_alloc_root-to-d_ma.patch
new file mode 100644
index 0000000..6f72717
--- /dev/null
+++ b/sys-cluster/lustre/files/0010-LU-1337-vfs-kernel-3.4-converts-d_alloc_root-to-d_ma.patch
@@ -0,0 +1,128 @@
+From 9d5b2096640f5a9ed1d9307748cc79a35def59fb Mon Sep 17 00:00:00 2001
+From: Liu Xuezhao <xuezhao.liu@emc.com>
+Date: Mon, 16 Jul 2012 17:05:04 +0800
+Subject: [PATCH 10/13] LU-1337 vfs: kernel 3.4 converts d_alloc_root to
+ d_make_root
+
+kernel 3.4 converts d_alloc_root to d_make_root.
+(kernel commit 32991ab305ace7017c62f8eecbe5eb36dc32e13b)
+
+Add LC_HAVE_D_MAKE_ROOT/HAVE_D_MAKE_ROOT to ckeck it.
+
+Signed-off-by: Liu Xuezhao <xuezhao.liu@emc.com>
+Change-Id: I7ff1f0eff25495b655e650997016377ca0a200aa
+---
+ lustre/autoconf/lustre-core.m4         | 20 ++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h | 14 ++++++++++++++
+ lustre/llite/llite_lib.c               |  7 ++++++-
+ lustre/obdclass/obd_mount.c            | 13 ++++++-------
+ 4 files changed, 46 insertions(+), 8 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 3b3115c..bc92b4f 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2028,6 +2028,25 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.4 converts d_alloc_root to d_make_root
++# see kernel commit 32991ab305ace7017c62f8eecbe5eb36dc32e13b
++#
++AC_DEFUN([LC_HAVE_D_MAKE_ROOT],
++[AC_MSG_CHECKING([if have d_make_root])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	d_make_root((struct inode *)NULL);
++],[
++	AC_DEFINE(HAVE_D_MAKE_ROOT, 1,
++		  [have d_make_root])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2189,6 +2208,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.4
+ 	 LC_TOUCH_ATIME_1ARG
++	 LC_HAVE_D_MAKE_ROOT
+ 
+          #
+          if test x$enable_server = xyes ; then
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index 070ad83..b1d3056 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -853,5 +853,19 @@ static inline void set_nlink(struct inode *inode, unsigned int nlink)
+ # define ll_umode_t	int
+ #endif
+ 
++#include <linux/dcache.h>
++#ifndef HAVE_D_MAKE_ROOT
++static inline struct dentry *d_make_root(struct inode *root_inode)
++{
++	struct dentry *res;
++
++	res = d_alloc_root(root_inode);
++	if (res == NULL)
++		iput(root_inode);
++
++	return res;
++}
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
+index 18246ac..f125461 100644
+--- a/lustre/llite/llite_lib.c
++++ b/lustre/llite/llite_lib.c
+@@ -539,7 +539,12 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
+                                  NULL);
+         cl_sb_init(sb);
+ 
+-        sb->s_root = d_alloc_root(root);
++	sb->s_root = d_make_root(root);
++	if (sb->s_root == NULL) {
++		CERROR("Can't make root dentry\n");
++		GOTO(out_lock_cn_cb, err = -ENOMEM);
++	}
++
+ #ifdef HAVE_DCACHE_LOCK
+ 	sb->s_root->d_op = &ll_d_root_ops;
+ #else
+diff --git a/lustre/obdclass/obd_mount.c b/lustre/obdclass/obd_mount.c
+index b2ec636..c2481bf 100644
+--- a/lustre/obdclass/obd_mount.c
++++ b/lustre/obdclass/obd_mount.c
+@@ -1609,14 +1609,13 @@ static int server_fill_super_common(struct super_block *sb)
+         /* apparently we need to be a directory for the mount to finish */
+         root->i_mode = S_IFDIR;
+ 
+-        sb->s_root = d_alloc_root(root);
+-        if (!sb->s_root) {
+-                CERROR("Can't make root dentry\n");
+-                iput(root);
+-                RETURN(-EIO);
+-        }
++	sb->s_root = d_make_root(root);
++	if (!sb->s_root) {
++		CERROR("Can't make root dentry\n");
++		RETURN(-EIO);
++	}
+ 
+-        RETURN(0);
++	RETURN(0);
+ }
+ 
+ static int osd_start(struct lustre_sb_info *lsi, unsigned long mflags)
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0011-LU-1337-kernel-v3.5-defines-INVALID_UID.patch b/sys-cluster/lustre/files/0011-LU-1337-kernel-v3.5-defines-INVALID_UID.patch
new file mode 100644
index 0000000..7f20e90
--- /dev/null
+++ b/sys-cluster/lustre/files/0011-LU-1337-kernel-v3.5-defines-INVALID_UID.patch
@@ -0,0 +1,31 @@
+From 2c89f077618a5017fb61b57a8d358a5fb9542a5f Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Wed, 22 Aug 2012 16:55:22 +0800
+Subject: [PATCH 11/13] LU-1337 kernel: v3.5 defines INVALID_UID
+
+With kernel commit 7a4e7408, Lustre doesn't need to redefine
+INVALID_UID.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I96b854cc51db735d8c985528c879fbeb5b049ab9
+---
+ lustre/include/lustre_cfg.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/lustre/include/lustre_cfg.h b/lustre/include/lustre_cfg.h
+index 7262be3..9d0fd52 100644
+--- a/lustre/include/lustre_cfg.h
++++ b/lustre/include/lustre_cfg.h
+@@ -286,7 +286,9 @@ static inline int lustre_cfg_sanity_check(void *buf, int len)
+ 
+ #include <lustre/lustre_user.h>
+ 
++#ifndef INVALID_UID
+ #define INVALID_UID     (-1)
++#endif
+ 
+ /** @} cfg */
+ 
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0012-LU-1337-llite-kernel-3.5-renames-end_writeback-to-cl.patch b/sys-cluster/lustre/files/0012-LU-1337-llite-kernel-3.5-renames-end_writeback-to-cl.patch
new file mode 100644
index 0000000..3289fde
--- /dev/null
+++ b/sys-cluster/lustre/files/0012-LU-1337-llite-kernel-3.5-renames-end_writeback-to-cl.patch
@@ -0,0 +1,90 @@
+From 9e05a2ac1524f4d7d3aa3f5cc6f278ee3e460b17 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Wed, 22 Aug 2012 17:57:04 +0800
+Subject: [PATCH 12/13] LU-1337 llite: kernel 3.5 renames end_writeback to
+ clear_inode
+
+kernel commit dbd5768f8 renames end_writeback to clear_inode,
+which used to exist for ~2.6.36 kernels.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I2435e820092085c0fb55539818f4bad9e48ff386
+---
+ lustre/autoconf/lustre-core.m4         | 22 ++++++++++++++++++++++
+ lustre/include/linux/lustre_compat25.h |  3 +++
+ lustre/llite/llite_lib.c               |  4 +---
+ 3 files changed, 26 insertions(+), 3 deletions(-)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index bc92b4f..3f47dab 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2047,6 +2047,25 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.5 renames end_writeback() back to clear_inode()...
++# see kernel commit dbd5768f87ff6fb0a4fe09c4d7b6c4a24de99430
++#
++AC_DEFUN([LC_HAVE_CLEAR_INODE],
++[AC_MSG_CHECKING([if have clear_inode])
++LB_LINUX_TRY_COMPILE([
++	#include <linux/fs.h>
++],[
++	clear_inode((struct inode *)NULL);
++],[
++	AC_DEFINE(HAVE_CLEAR_INODE, 1,
++		  [have clear_inode])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2210,6 +2229,9 @@ AC_DEFUN([LC_PROG_LINUX],
+ 	 LC_TOUCH_ATIME_1ARG
+ 	 LC_HAVE_D_MAKE_ROOT
+ 
++	 # 3.5
++	 LC_HAVE_CLEAR_INODE
++
+          #
+          if test x$enable_server = xyes ; then
+              AC_DEFINE(HAVE_SERVER_SUPPORT, 1, [support server])
+diff --git a/lustre/include/linux/lustre_compat25.h b/lustre/include/linux/lustre_compat25.h
+index b1d3056..b2bba25 100644
+--- a/lustre/include/linux/lustre_compat25.h
++++ b/lustre/include/linux/lustre_compat25.h
+@@ -866,6 +866,9 @@ static inline struct dentry *d_make_root(struct inode *root_inode)
+ 	return res;
+ }
+ #endif
++#ifndef HAVE_CLEAR_INODE
++#define clear_inode(i)		end_writeback(i)
++#endif
+ 
+ #endif /* __KERNEL__ */
+ #endif /* _COMPAT25_H */
+diff --git a/lustre/llite/llite_lib.c b/lustre/llite/llite_lib.c
+index f125461..ccbaad0 100644
+--- a/lustre/llite/llite_lib.c
++++ b/lustre/llite/llite_lib.c
+@@ -1881,10 +1881,8 @@ void ll_delete_inode(struct inode *inode)
+ 
+ #ifdef HAVE_SBOPS_EVICT_INODE
+         ll_clear_inode(inode);
+-        end_writeback(inode);
+-#else
+-        clear_inode(inode);
+ #endif
++        clear_inode(inode);
+ 
+         EXIT;
+ }
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/files/0013-LU-1337-kernel-3.5-kernel-encode_fh-passes-in-parent.patch b/sys-cluster/lustre/files/0013-LU-1337-kernel-3.5-kernel-encode_fh-passes-in-parent.patch
new file mode 100644
index 0000000..28f0282
--- /dev/null
+++ b/sys-cluster/lustre/files/0013-LU-1337-kernel-3.5-kernel-encode_fh-passes-in-parent.patch
@@ -0,0 +1,88 @@
+From c3b73bfe1e157ec42be9015d231da66808483554 Mon Sep 17 00:00:00 2001
+From: Peng Tao <tao.peng@emc.com>
+Date: Thu, 23 Aug 2012 13:55:46 +0800
+Subject: [PATCH 13/13] LU-1337 kernel: 3.5 kernel encode_fh passes in parent
+ inode
+
+Changed by upsteam commit b0b0382b.
+
+Signed-off-by: Peng Tao <tao.peng@emc.com>
+Change-Id: I6d7223b934bfe4151371744ad72bdab6b170c700
+---
+ lustre/autoconf/lustre-core.m4 | 30 ++++++++++++++++++++++++++++++
+ lustre/llite/llite_nfs.c       |  6 ++++++
+ 2 files changed, 36 insertions(+)
+
+diff --git a/lustre/autoconf/lustre-core.m4 b/lustre/autoconf/lustre-core.m4
+index 3f47dab..dbf7233 100644
+--- a/lustre/autoconf/lustre-core.m4
++++ b/lustre/autoconf/lustre-core.m4
+@@ -2066,6 +2066,35 @@ LB_LINUX_TRY_COMPILE([
+ ])
+ 
+ #
++# 3.5 encode_fh has parent inode passed in directly
++# see kernel commit b0b0382b
++#
++AC_DEFUN([LC_HAVE_ENCODE_FH_PARENT],
++[AC_MSG_CHECKING([if encode_fh have parent inode as parameter])
++tmp_flags="$EXTRA_KCFLAGS"
++EXTRA_KCFLAGS="-Werror"
++LB_LINUX_TRY_COMPILE([
++	#include <linux/exportfs.h>
++	#include <linux/fs.h>
++	#include <linux/types.h>
++	int ll_encode_fh(struct inode *i, __u32 *a, int *b, struct inode*p)
++	{
++		return 0;
++	}
++],[
++	struct export_operations exp_op;
++	exp_op.encode_fh = ll_encode_fh;
++],[
++	AC_DEFINE(HAVE_ENCODE_FH_PARENT, 1,
++		  [have parent inode as parameter])
++	AC_MSG_RESULT([yes])
++],[
++	AC_MSG_RESULT([no])
++])
++EXTRA_KCFLAGS="$tmp_flags"
++])
++
++#
+ # LC_PROG_LINUX
+ #
+ # Lustre linux kernel checks
+@@ -2231,6 +2260,7 @@ AC_DEFUN([LC_PROG_LINUX],
+ 
+ 	 # 3.5
+ 	 LC_HAVE_CLEAR_INODE
++	 LC_HAVE_ENCODE_FH_PARENT
+ 
+          #
+          if test x$enable_server = xyes ; then
+diff --git a/lustre/llite/llite_nfs.c b/lustre/llite/llite_nfs.c
+index 809a564..ba4f9f1 100644
+--- a/lustre/llite/llite_nfs.c
++++ b/lustre/llite/llite_nfs.c
+@@ -173,11 +173,17 @@ ll_iget_for_nfs(struct super_block *sb, struct lu_fid *fid, struct lu_fid *paren
+  * 2 -- contains child file handle and parent file handle;
+  * 255 -- error.
+  */
++#ifndef HAVE_ENCODE_FH_PARENT
+ static int ll_encode_fh(struct dentry *de, __u32 *fh, int *plen,
+                         int connectable)
+ {
+         struct inode *inode = de->d_inode;
+         struct inode *parent = de->d_parent->d_inode;
++#else
++static int ll_encode_fh(struct inode *inode, __u32 *fh, int *plen,
++                        struct inode *parent)
++{
++#endif
+         struct lustre_nfs_fid *nfs_fid = (void *)fh;
+         ENTRY;
+ 
+-- 
+1.7.12
+

diff --git a/sys-cluster/lustre/lustre-9999.ebuild b/sys-cluster/lustre/lustre-9999.ebuild
new file mode 100644
index 0000000..994a9ce
--- /dev/null
+++ b/sys-cluster/lustre/lustre-9999.ebuild
@@ -0,0 +1,72 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=5_pre1
+
+WANT_AUTOCONF="2.5"
+WANT_AUTOMAKE="1.9"
+
+inherit git-2 autotools linux-mod linux-info toolchain-funcs
+
+DESCRIPTION="Lustre is a parallel distributed file system"
+HOMEPAGE="http://wiki.whamcloud.com/"
+EGIT_REPO_URI="git://git.whamcloud.com/fs/lustre-release.git"
+SRC_URI=""
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS=""
+IUSE="utils"
+
+DEPEND=""
+RDEPEND="${DEPEND}"
+
+BUILD_PARAMS="-C ${KV_DIR} SUBDIRS=${S}"
+
+PATCHES=(
+"${FILESDIR}/0001-LU-1337-vfs-kernel-3.1-renames-lock-manager-ops.patch"
+"${FILESDIR}/0002-LU-1337-vfs-kernel-3.1-kills-inode-i_alloc_sem.patch"
+"${FILESDIR}/0003-LU-1337-vfs-kernel-3.1-changes-open_to_namei_flags.patch"
+"${FILESDIR}/0004-LU-1337-vfs-provides-ll_get_acl-to-i_op-get_acl.patch"
+"${FILESDIR}/0005-LU-1337-block-kernel-3.2-make_request_fn-returns-voi.patch"
+"${FILESDIR}/0006-LU-1337-vfs-kernel-3.2-protects-inode-i_nlink.patch"
+"${FILESDIR}/0007-LU-1337-vfs-3.3-changes-super_operations-inode_opera.patch"
+"${FILESDIR}/0008-LU-1337-kernel-remove-unnecessary-includings-of-syst.patch"
+"${FILESDIR}/0009-LU-1337-vfs-kernel-3.4-touch_atime-switchs-to-1-argu.patch"
+"${FILESDIR}/0010-LU-1337-vfs-kernel-3.4-converts-d_alloc_root-to-d_ma.patch"
+"${FILESDIR}/0011-LU-1337-kernel-v3.5-defines-INVALID_UID.patch"
+"${FILESDIR}/0012-LU-1337-llite-kernel-3.5-renames-end_writeback-to-cl.patch"
+"${FILESDIR}/0013-LU-1337-kernel-3.5-kernel-encode_fh-passes-in-parent.patch"
+)
+
+pkg_setup() {
+	linux-mod_pkg_setup
+	linux-info_pkg_setup
+	ARCH="$(tc-arch-kernel)"
+	ABI="${KERNEL_ABI}"
+}
+
+src_prepare() {
+	epatch ${PATCHES[@]}
+	sh ./autogen.sh
+}
+
+src_configure() {
+	econf \
+		--enable-client \
+		--disable-server \
+		--without-ldiskfs \
+		--disable-ldiskfs-build \
+		--with-linux="${KERNEL_DIR}" \
+		--with-linux-release=${KV_FULL} \
+		$(use_enable utils)
+}
+
+src_compile() {
+	default
+}
+
+src_install() {
+	default
+}

diff --git a/sys-cluster/lustre/metadata.xml b/sys-cluster/lustre/metadata.xml
new file mode 100644
index 0000000..29db6a2
--- /dev/null
+++ b/sys-cluster/lustre/metadata.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>cluster</herd>
+<longdescription>
+Lustre is a parallel distributed file system, generally used for large scale cluster computing
+</longdescription>
+<use>
+	<flag name='utils'>Enable lustre utils</flag>
+</use>
+</pkgmetadata>


^ permalink raw reply related	[flat|nested] 53+ messages in thread

end of thread, other threads:[~2016-06-29 10:28 UTC | newest]

Thread overview: 53+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-19 12:54 [gentoo-commits] proj/sci:master commit in: sys-cluster/lustre/, sys-cluster/lustre/files/ Alexey Shvetsov
  -- strict thread matches above, loose matches on Subject: below --
2016-06-29 10:28 Alexey Shvetsov
2016-06-12 20:32 Alexey Shvetsov
2016-06-12 19:19 Alexey Shvetsov
2016-06-10 19:06 Alexey Shvetsov
2014-05-29 12:44 Alexey Shvetsov
2014-05-24 22:55 Alexey Shvetsov
2014-05-20 13:44 Alexey Shvetsov
2014-05-20 12:43 Alexey Shvetsov
2014-05-19  9:06 Alexey Shvetsov
2014-04-22  8:41 Alexey Shvetsov
2014-04-22  7:22 Alexey Shvetsov
2014-04-02 12:29 Alexey Shvetsov
2014-04-02 10:50 Alexey Shvetsov
2014-02-27 12:08 Alexey Shvetsov
2014-02-12  6:56 Alexey Shvetsov
2014-02-12  6:39 Alexey Shvetsov
2014-02-12  6:36 Alexey Shvetsov
2014-02-04 11:28 Alexey Shvetsov
2013-12-19 14:21 Alexey Shvetsov
2013-12-19 14:13 Alexey Shvetsov
2013-12-19 13:45 Alexey Shvetsov
2013-12-19 13:29 Alexey Shvetsov
2013-12-19 13:23 Alexey Shvetsov
2013-07-11 15:36 Justin Lecher
2013-07-11 13:25 Alexey Shvetsov
2013-05-07 18:45 Alexey Shvetsov
2013-05-07  9:20 Alexey Shvetsov
2013-04-23  7:43 Alexey Shvetsov
2013-04-22  9:25 Alexey Shvetsov
2013-04-17  9:59 Alexey Shvetsov
2013-04-17  9:45 Alexey Shvetsov
2013-04-16 12:08 Alexey Shvetsov
2013-04-16 11:27 Alexey Shvetsov
2013-03-31 17:20 Alexey Shvetsov
2013-03-31 11:28 Alexey Shvetsov
2013-03-31 11:15 Alexey Shvetsov
2013-03-27  5:05 Alexey Shvetsov
2013-03-22 11:08 Alexey Shvetsov
2013-03-22 10:27 Alexey Shvetsov
2013-03-18 23:14 Alexey Shvetsov
2013-03-18 20:53 Alexey Shvetsov
2013-03-18 14:10 Alexey Shvetsov
2013-03-18 14:00 Alexey Shvetsov
2013-03-18 12:29 Alexey Shvetsov
2013-03-18 12:21 Alexey Shvetsov
2013-03-18 12:13 Alexey Shvetsov
2013-03-18  3:53 Alexey Shvetsov
2013-03-14 11:57 Alexey Shvetsov
2013-03-14 10:21 Alexey Shvetsov
2013-03-14  9:47 Alexey Shvetsov
2013-03-06 12:37 Alexey Shvetsov
2012-09-20 19:15 Alexey Shvetsov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox