diff options
author | Alexey Shvetsov <alexxy@gentoo.org> | 2014-05-20 16:42:38 +0400 |
---|---|---|
committer | Alexey Shvetsov <alexxy@gentoo.org> | 2014-05-20 16:42:38 +0400 |
commit | ade0a4c9299533957a2316c17b082ffa06376e5d (patch) | |
tree | 70e5c64b57f9ff695538fa4c8807ae421bb1ed6f | |
parent | upstream repo moved (diff) | |
download | sci-ade0a4c9299533957a2316c17b082ffa06376e5d.tar.gz sci-ade0a4c9299533957a2316c17b082ffa06376e5d.tar.bz2 sci-ade0a4c9299533957a2316c17b082ffa06376e5d.zip |
Update patches
Package-Manager: portage-2.2.10
RepoMan-Options: --force
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" ) |