From 17d614c7017c41d3484b163c8d86d324335c93e0 Mon Sep 17 00:00:00 2001 From: James Simmons Date: Mon, 12 Jan 2015 10:37:21 -0500 Subject: [PATCH] LU-5275 libcfs: merge params_tree.h into lprocfs_status.h The macros in params_tree.h are only used for proc handling in the lustre layer. Since this is the case we move all the handling from params_tree.h to lprocfs_status.h Change-Id: I590c1f2525bdd748450008af38510d19cd68f917 Signed-off-by: James Simmons Reviewed-on: http://review.whamcloud.com/13341 Tested-by: Jenkins Reviewed-by: Bob Glossman Reviewed-by: Dmitry Eremin Reviewed-by: John L. Hammond Tested-by: Maloo Reviewed-by: Jian Yu Reviewed-by: Oleg Drokin --- libcfs/include/libcfs/Makefile.am | 1 - libcfs/include/libcfs/libcfs.h | 1 - libcfs/include/libcfs/params_tree.h | 101 ------------------------------------ lustre/include/lprocfs_status.h | 25 ++++++++- lustre/obdclass/lprocfs_jobstats.c | 8 ++- lustre/obdclass/lprocfs_status.c | 22 ++++---- 6 files changed, 37 insertions(+), 121 deletions(-) delete mode 100644 libcfs/include/libcfs/params_tree.h diff --git a/libcfs/include/libcfs/Makefile.am b/libcfs/include/libcfs/Makefile.am index 67bb495..11bc80c 100644 --- a/libcfs/include/libcfs/Makefile.am +++ b/libcfs/include/libcfs/Makefile.am @@ -29,7 +29,6 @@ EXTRA_DIST = \ libcfsutil.h \ list.h \ lucache.h \ - params_tree.h \ types.h \ user-bitops.h \ user-crypto.h \ diff --git a/libcfs/include/libcfs/libcfs.h b/libcfs/include/libcfs/libcfs.h index b0ce602..f18f447 100644 --- a/libcfs/include/libcfs/libcfs.h +++ b/libcfs/include/libcfs/libcfs.h @@ -42,7 +42,6 @@ #ifdef __KERNEL__ # include -# include #else /* !__KERNEL__ */ # include # include diff --git a/libcfs/include/libcfs/params_tree.h b/libcfs/include/libcfs/params_tree.h deleted file mode 100644 index 16983d3..0000000 --- a/libcfs/include/libcfs/params_tree.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * GPL HEADER START - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 only, - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License version 2 for more details (a copy is included - * in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU General Public License - * version 2 along with this program; If not, see - * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf - * - * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, - * CA 95054 USA or visit www.sun.com if you need additional information or - * have any questions. - * - * GPL HEADER END - */ -/* - * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. - * Use is subject to license terms. - * - * Copyright (c) 2012, Intel Corporation. - */ -/* - * This file is part of Lustre, http://www.lustre.org/ - * Lustre is a trademark of Sun Microsystems, Inc. - * - * API and structure definitions for params_tree. - * - * Author: LiuYing - */ -#ifndef __PARAMS_TREE_H__ -#define __PARAMS_TREE_H__ - -#include -#include -#include -#include - -#ifdef CONFIG_PROC_FS -# ifndef HAVE_ONLY_PROCFS_SEQ -/* in lprocfs_stat.c, to protect the private data for proc entries */ -extern struct rw_semaphore _lprocfs_lock; - -static inline int LPROCFS_ENTRY_CHECK(struct inode *inode) -{ - struct proc_dir_entry *dp = PDE(inode); - int deleted = 0; - - spin_lock(&(dp)->pde_unload_lock); - if (dp->proc_fops == NULL) - deleted = 1; - spin_unlock(&(dp)->pde_unload_lock); - if (deleted) - return -ENODEV; - return 0; -} - -# define LPROCFS_SRCH_ENTRY() \ - do { \ - down_read(&_lprocfs_lock); \ - } while (0) - -# define LPROCFS_SRCH_EXIT() \ - do { \ - up_read(&_lprocfs_lock); \ - } while (0) - -# define LPROCFS_WRITE_ENTRY() \ - do { \ - down_write(&_lprocfs_lock); \ - } while (0) - -# define LPROCFS_WRITE_EXIT() \ - do { \ - up_write(&_lprocfs_lock); \ - } while (0) - -# define PDE_DATA(inode) (PDE(inode)->data) - -# else /* HAVE_ONLY_PROCFS_SEQ */ - -static inline int LPROCFS_ENTRY_CHECK(struct inode *inode) -{ - return 0; -} - -#define LPROCFS_WRITE_ENTRY() do {} while(0) -#define LPROCFS_WRITE_EXIT() do {} while(0) - -# endif /* !HAVE_ONLY_PROCFS_SEQ */ -#endif /* CONFIG_PROC_FS */ -#endif /* __PARAMS_TREE_H__ */ diff --git a/lustre/include/lprocfs_status.h b/lustre/include/lprocfs_status.h index 3615d21..d1c197a 100644 --- a/lustre/include/lprocfs_status.h +++ b/lustre/include/lprocfs_status.h @@ -42,8 +42,12 @@ #ifndef _LPROCFS_SNMP_H #define _LPROCFS_SNMP_H +#include +#include +#include +#include + #include -#include #ifndef HAVE_ONLY_PROCFS_SEQ struct lprocfs_vars { @@ -649,6 +653,25 @@ extern void lprocfs_try_remove_proc_entry(const char *name, extern struct proc_dir_entry *lprocfs_srch(struct proc_dir_entry *root, const char *name); + +#define PDE_DATA(inode) (PDE(inode)->data) + +static inline int LPROCFS_ENTRY_CHECK(struct inode *inode) +{ + struct proc_dir_entry *dp = PDE(inode); + int deleted = 0; + + spin_lock(&(dp)->pde_unload_lock); + if (dp->proc_fops == NULL) + deleted = 1; + spin_unlock(&(dp)->pde_unload_lock); + if (deleted) + return -ENODEV; + return 0; +} +#else +static inline int LPROCFS_ENTRY_CHECK(struct inode *inode) +{ return 0; } #endif extern int lprocfs_obd_setup(struct obd_device *dev); extern int lprocfs_obd_cleanup(struct obd_device *obd); diff --git a/lustre/obdclass/lprocfs_jobstats.c b/lustre/obdclass/lprocfs_jobstats.c index d3b0be0..930ca06 100644 --- a/lustre/obdclass/lprocfs_jobstats.c +++ b/lustre/obdclass/lprocfs_jobstats.c @@ -518,11 +518,9 @@ int lprocfs_job_stats_init(struct obd_device *obd, int cntr_num, stats->ojs_cleanup_interval = 600; /* 10 mins by default */ stats->ojs_last_cleanup = cfs_time_current_sec(); - LPROCFS_WRITE_ENTRY(); - entry = proc_create_data("job_stats", 0644, obd->obd_proc_entry, - &lprocfs_jobstats_seq_fops, stats); - LPROCFS_WRITE_EXIT(); - if (entry == NULL) { + entry = lprocfs_add_simple(obd->obd_proc_entry, "job_stats", stats, + &lprocfs_jobstats_seq_fops); + if (IS_ERR(entry)) { lprocfs_job_stats_fini(obd); RETURN(-ENOMEM); } diff --git a/lustre/obdclass/lprocfs_status.c b/lustre/obdclass/lprocfs_status.c index f0ff132..f00f3fd 100644 --- a/lustre/obdclass/lprocfs_status.c +++ b/lustre/obdclass/lprocfs_status.c @@ -228,9 +228,9 @@ struct proc_dir_entry *lprocfs_srch(struct proc_dir_entry *head, { struct proc_dir_entry *temp; - LPROCFS_SRCH_ENTRY(); + down_read(&_lprocfs_lock); temp = __lprocfs_srch(head, name); - LPROCFS_SRCH_EXIT(); + up_read(&_lprocfs_lock); return temp; } EXPORT_SYMBOL(lprocfs_srch); @@ -316,9 +316,9 @@ int lprocfs_add_vars(struct proc_dir_entry *root, struct lprocfs_vars *list, { int rc = 0; - LPROCFS_WRITE_ENTRY(); + down_write(&_lprocfs_lock); rc = __lprocfs_add_vars(root, list, data); - LPROCFS_WRITE_EXIT(); + up_write(&_lprocfs_lock); return rc; } @@ -404,9 +404,9 @@ static void lprocfs_remove_nolock(struct proc_dir_entry **proot) void lprocfs_remove(struct proc_dir_entry **rooth) { #ifndef HAVE_ONLY_PROCFS_SEQ - LPROCFS_WRITE_ENTRY(); /* search vs remove race */ + down_write(&_lprocfs_lock); /* search vs remove race */ lprocfs_remove_nolock(rooth); - LPROCFS_WRITE_EXIT(); + up_write(&_lprocfs_lock); #else proc_remove(*rooth); *rooth = NULL; @@ -432,8 +432,7 @@ void lprocfs_try_remove_proc_entry(const char *name, LASSERT(parent != NULL); len = strlen(name); - LPROCFS_WRITE_ENTRY(); - + down_write(&_lprocfs_lock); /* lookup target name */ for (p = &parent->subdir; *p; p = &(*p)->next) { if ((*p)->namelen != len) @@ -462,8 +461,7 @@ void lprocfs_try_remove_proc_entry(const char *name, if (busy == 0) lprocfs_remove_nolock(&t); - LPROCFS_WRITE_EXIT(); - + up_write(&_lprocfs_lock); return; } EXPORT_SYMBOL(lprocfs_try_remove_proc_entry); @@ -475,7 +473,7 @@ struct proc_dir_entry *lprocfs_register(const char *name, struct proc_dir_entry *entry; int rc; - LPROCFS_WRITE_ENTRY(); + down_write(&_lprocfs_lock); entry = __lprocfs_srch(parent, name); if (entry != NULL) { CERROR("entry '%s' already registered\n", name); @@ -494,7 +492,7 @@ struct proc_dir_entry *lprocfs_register(const char *name, } } out: - LPROCFS_WRITE_EXIT(); + up_write(&_lprocfs_lock); return entry; } EXPORT_SYMBOL(lprocfs_register); -- 1.8.3.1