* [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/
@ 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, ¤t);
- 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-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 *)(¶m), 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-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 *)(¶m), 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/
@ 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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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(¤t->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 +-
| 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
--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 +-
| 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
--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 +-
| 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
--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 +-
| 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 +-
| 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 +++
| 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,
--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 ++
| 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
--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 +++++
| 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
--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 +
| 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
--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 +++++++
| 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
--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 +
| 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
--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(¤t->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(¤t->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(¤t->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 +
| 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:
--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 --
2014-02-27 12:08 [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-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-12-19 12:54 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