aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey Shvetsov <alexxy@gentoo.org>2014-05-20 16:42:38 +0400
committerAlexey Shvetsov <alexxy@gentoo.org>2014-05-20 16:42:38 +0400
commitade0a4c9299533957a2316c17b082ffa06376e5d (patch)
tree70e5c64b57f9ff695538fa4c8807ae421bb1ed6f /sys-cluster
parentupstream repo moved (diff)
downloadsci-ade0a4c9299533957a2316c17b082ffa06376e5d.tar.gz
sci-ade0a4c9299533957a2316c17b082ffa06376e5d.tar.bz2
sci-ade0a4c9299533957a2316c17b082ffa06376e5d.zip
Update patches
Package-Manager: portage-2.2.10 RepoMan-Options: --force
Diffstat (limited to 'sys-cluster')
-rw-r--r--sys-cluster/lustre/ChangeLog15
-rw-r--r--sys-cluster/lustre/files/0001-LU-3319-procfs-Move-NRS-TBF-proc-handling-to-seq_fil.patch4
-rw-r--r--sys-cluster/lustre/files/0002-LU-3319-procfs-update-zfs-proc-handling-to-seq_files.patch4
-rw-r--r--sys-cluster/lustre/files/0003-LU-3319-procfs-move-osp-proc-handling-to-seq_files.patch6
-rw-r--r--sys-cluster/lustre/files/0004-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch (renamed from sys-cluster/lustre/files/0006-LU-2096-lprocfs-symlinks-for-forward-compatibility.patch)12
-rw-r--r--sys-cluster/lustre/files/0004-LU-3319-procfs-move-lod-proc-handling-to-seq_files.patch591
-rw-r--r--sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch (renamed from sys-cluster/lustre/files/0007-LU-3319-procfs-move-mdd-ofd-proc-handling-to-seq_fil.patch)4
-rw-r--r--sys-cluster/lustre/files/0005-LU-3319-procfs-move-mdt-mds-proc-handling-to-seq_fil.patch1633
-rw-r--r--sys-cluster/lustre/files/0006-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch (renamed from sys-cluster/lustre/files/0008-LU-4416-mm-Backport-shrinker-changes-from-upstream.patch)6
-rw-r--r--sys-cluster/lustre/lustre-9999.ebuild8
10 files changed, 36 insertions, 2247 deletions
diff --git a/sys-cluster/lustre/ChangeLog b/sys-cluster/lustre/ChangeLog
index 8ad52acba..257e94a3f 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 537f2480b..1b625a8fd 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 975647d73..a44d310b2 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 d9bfa0ba3..5361aca7f 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
index ae7ef779d..b83551623 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 7ccbf0eea..000000000
--- 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
index 1f04e5545..f2c13f781 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 97fa886e2..000000000
--- 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
index e14c7363b..c27b47816 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 26e07bdb0..d26599af4 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"
)