All of lore.kernel.org
 help / color / mirror / Atom feed
* [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups
@ 2018-06-25 21:42 James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 1/7] lustre: libcfs: move tracefile locking from linux-tracefile.c to tracefile.c James Simmons
                   ` (6 more replies)
  0 siblings, 7 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

The first three patches in this series are a repost of Neil's patches.
The 4th patch fixed the brokeness of cfs_print_to_console() which shows
up in my testing. Besides the fixing more cleanups of tracefile.h was
done. The rest of the patches are Neil's work rebased due the changes
of the 4th patch.

NeilBrown (7):
  lustre: libcfs: discard TCD_MAX_TYPES
  lustre: libcfs: move tracefile locking from linux-tracefile.c to tracefile.c
  lustre: libcfs: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb()
  lustre: libcfs: move tcd locking across to tracefile.c
  lustre: libcfs: merge linux-tracefile.c into tracefile.c
  lustre: libcfs: fold cfs_tracefile_*_arch into their only callers.
  lustre: libcfs: renamed CFS_TCD_TYPE_MAX to CFS_TCD_TYPE_CNT

 drivers/staging/lustre/lnet/libcfs/Makefile        |   2 +-
 drivers/staging/lustre/lnet/libcfs/debug.c         |   6 +-
 .../staging/lustre/lnet/libcfs/linux-tracefile.c   | 258 --------------------
 drivers/staging/lustre/lnet/libcfs/tracefile.c     | 266 +++++++++++++++++----
 drivers/staging/lustre/lnet/libcfs/tracefile.h     | 112 +--------
 5 files changed, 234 insertions(+), 410 deletions(-)
 delete mode 100644 drivers/staging/lustre/lnet/libcfs/linux-tracefile.c

-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 1/7] lustre: libcfs: move tracefile locking from linux-tracefile.c to tracefile.c
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
@ 2018-06-25 21:42 ` James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 2/7] lustre: libcfs: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb() James Simmons
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

There is no value in keeping it separate.

Signed-off-by: NeilBrown <neilb@suse.com>
---
 .../staging/lustre/lnet/libcfs/linux-tracefile.c   | 22 -------------------
 drivers/staging/lustre/lnet/libcfs/tracefile.c     | 25 +++++++++++-----------
 drivers/staging/lustre/lnet/libcfs/tracefile.h     |  5 -----
 3 files changed, 13 insertions(+), 39 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
index 3471384..9e72220 100644
--- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
@@ -47,8 +47,6 @@
 
 char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
 
-static DECLARE_RWSEM(cfs_tracefile_sem);
-
 int cfs_tracefile_init_arch(void)
 {
 	int i;
@@ -109,26 +107,6 @@ void cfs_tracefile_fini_arch(void)
 	}
 }
 
-void cfs_tracefile_read_lock(void)
-{
-	down_read(&cfs_tracefile_sem);
-}
-
-void cfs_tracefile_read_unlock(void)
-{
-	up_read(&cfs_tracefile_sem);
-}
-
-void cfs_tracefile_write_lock(void)
-{
-	down_write(&cfs_tracefile_sem);
-}
-
-void cfs_tracefile_write_unlock(void)
-{
-	up_write(&cfs_tracefile_sem);
-}
-
 enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
 {
 	if (in_irq())
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index 7ca562e..5f31933 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -59,6 +59,7 @@
 static int thread_running;
 
 static atomic_t cfs_tage_allocated = ATOMIC_INIT(0);
+static DECLARE_RWSEM(cfs_tracefile_sem);
 
 struct page_collection {
 	struct list_head	pc_pages;
@@ -711,7 +712,7 @@ int cfs_tracefile_dump_all_pages(char *filename)
 	mm_segment_t __oldfs;
 	int rc;
 
-	cfs_tracefile_write_lock();
+	down_write(&cfs_tracefile_sem);
 
 	filp = filp_open(filename, O_CREAT | O_EXCL | O_WRONLY | O_LARGEFILE,
 			 0600);
@@ -759,7 +760,7 @@ int cfs_tracefile_dump_all_pages(char *filename)
 close:
 	filp_close(filp, NULL);
 out:
-	cfs_tracefile_write_unlock();
+	up_write(&cfs_tracefile_sem);
 	return rc;
 }
 
@@ -873,12 +874,12 @@ int cfs_trace_daemon_command(char *str)
 {
 	int rc = 0;
 
-	cfs_tracefile_write_lock();
+	down_write(&cfs_tracefile_sem);
 
 	if (!strcmp(str, "stop")) {
-		cfs_tracefile_write_unlock();
+		up_write(&cfs_tracefile_sem);
 		cfs_trace_stop_thread();
-		cfs_tracefile_write_lock();
+		down_write(&cfs_tracefile_sem);
 		memset(cfs_tracefile, 0, sizeof(cfs_tracefile));
 
 	} else if (!strncmp(str, "size=", 5)) {
@@ -905,7 +906,7 @@ int cfs_trace_daemon_command(char *str)
 		cfs_trace_start_thread();
 	}
 
-	cfs_tracefile_write_unlock();
+	up_write(&cfs_tracefile_sem);
 	return rc;
 }
 
@@ -950,12 +951,12 @@ int cfs_trace_set_debug_mb(int mb)
 	mb /= num_possible_cpus();
 	pages = mb << (20 - PAGE_SHIFT);
 
-	cfs_tracefile_write_lock();
+	down_write(&cfs_tracefile_sem);
 
 	cfs_tcd_for_each(tcd, i, j)
 		tcd->tcd_max_pages = (pages * tcd->tcd_pages_factor) / 100;
 
-	cfs_tracefile_write_unlock();
+	up_write(&cfs_tracefile_sem);
 
 	return 0;
 }
@@ -967,12 +968,12 @@ int cfs_trace_get_debug_mb(void)
 	struct cfs_trace_cpu_data *tcd;
 	int total_pages = 0;
 
-	cfs_tracefile_read_lock();
+	down_read(&cfs_tracefile_sem);
 
 	cfs_tcd_for_each(tcd, i, j)
 		total_pages += tcd->tcd_max_pages;
 
-	cfs_tracefile_read_unlock();
+	up_read(&cfs_tracefile_sem);
 
 	return (total_pages >> (20 - PAGE_SHIFT)) + 1;
 }
@@ -1002,7 +1003,7 @@ static int tracefiled(void *arg)
 			goto end_loop;
 
 		filp = NULL;
-		cfs_tracefile_read_lock();
+		down_read(&cfs_tracefile_sem);
 		if (cfs_tracefile[0]) {
 			filp = filp_open(cfs_tracefile,
 					 O_CREAT | O_RDWR | O_LARGEFILE,
@@ -1014,7 +1015,7 @@ static int tracefiled(void *arg)
 					rc);
 			}
 		}
-		cfs_tracefile_read_unlock();
+		up_read(&cfs_tracefile_sem);
 		if (!filp) {
 			put_pages_on_daemon_list(&pc);
 			__LASSERT(list_empty(&pc.pc_pages));
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
index 0608240..9f6b73d 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
@@ -65,11 +65,6 @@ enum cfs_trace_buf_type {
 int  cfs_tracefile_init_arch(void);
 void cfs_tracefile_fini_arch(void);
 
-void cfs_tracefile_read_lock(void);
-void cfs_tracefile_read_unlock(void);
-void cfs_tracefile_write_lock(void);
-void cfs_tracefile_write_unlock(void);
-
 int cfs_tracefile_dump_all_pages(char *filename);
 void cfs_trace_debug_print(void);
 void cfs_trace_flush_pages(void);
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 2/7] lustre: libcfs: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb()
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 1/7] lustre: libcfs: move tracefile locking from linux-tracefile.c to tracefile.c James Simmons
@ 2018-06-25 21:42 ` James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 3/7] lustre: libcfs: move tcd locking across to tracefile.c James Simmons
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

This function in used twice.
In libcfs_debug_init() the usage is pointless as
the only place that set libcfs_debug_mb ensures
that it does not exceed the maximum.  So checking
again can never help.

So open-code the small function into the only
other place that it is used - in cfs_trace_set_debug_mb(),
which is used to set libcfs_debug_mb.

Signed-off-by: NeilBrown <neilb@suse.com>
---
 drivers/staging/lustre/lnet/libcfs/debug.c           | 6 +++---
 drivers/staging/lustre/lnet/libcfs/linux-tracefile.c | 7 -------
 drivers/staging/lustre/lnet/libcfs/tracefile.c       | 3 ++-
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/debug.c b/drivers/staging/lustre/lnet/libcfs/debug.c
index 06f694f..71effcf 100644
--- a/drivers/staging/lustre/lnet/libcfs/debug.c
+++ b/drivers/staging/lustre/lnet/libcfs/debug.c
@@ -411,10 +411,10 @@ int libcfs_debug_init(unsigned long bufsize)
 			sizeof(libcfs_debug_file_path_arr));
 	}
 
-	/* If libcfs_debug_mb is set to an invalid value or uninitialized
-	 * then just make the total buffers smp_num_cpus * TCD_MAX_PAGES
+	/* If libcfs_debug_mb is uninitialized then just make the
+	 * total buffers smp_num_cpus * TCD_MAX_PAGES
 	 */
-	if (max > cfs_trace_max_debug_mb() || max < num_possible_cpus()) {
+	if (max < num_possible_cpus()) {
 		max = TCD_MAX_PAGES;
 	} else {
 		max = max / num_possible_cpus();
diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
index 9e72220..64a5bc1 100644
--- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
@@ -227,10 +227,3 @@ void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
 			hdr->ph_line_num, fn, len, buf);
 	}
 }
-
-int cfs_trace_max_debug_mb(void)
-{
-	int  total_mb = (totalram_pages >> (20 - PAGE_SHIFT));
-
-	return max(512, (total_mb * 80) / 100);
-}
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index 5f31933..72321ce 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -933,7 +933,8 @@ int cfs_trace_set_debug_mb(int mb)
 	int i;
 	int j;
 	int pages;
-	int limit = cfs_trace_max_debug_mb();
+	int total_mb = (totalram_pages >> (20 - PAGE_SHIFT));
+	int limit = max(512, (total_mb * 80) / 100);
 	struct cfs_trace_cpu_data *tcd;
 
 	if (mb < num_possible_cpus()) {
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 3/7] lustre: libcfs: move tcd locking across to tracefile.c
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 1/7] lustre: libcfs: move tracefile locking from linux-tracefile.c to tracefile.c James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 2/7] lustre: libcfs: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb() James Simmons
@ 2018-06-25 21:42 ` James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c James Simmons
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

No need to have this in linux-tracefile.c

Signed-off-by: NeilBrown <neilb@suse.com>
---
 .../staging/lustre/lnet/libcfs/linux-tracefile.c   | 35 -------------
 drivers/staging/lustre/lnet/libcfs/tracefile.c     | 59 ++++++++++++++++++++++
 drivers/staging/lustre/lnet/libcfs/tracefile.h     | 28 ----------
 3 files changed, 59 insertions(+), 63 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
index 64a5bc1..3af7722 100644
--- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
@@ -116,41 +116,6 @@ enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
 	return CFS_TCD_TYPE_PROC;
 }
 
-/*
- * The walking argument indicates the locking comes from all tcd types
- * iterator and we must lock it and dissable local irqs to avoid deadlocks
- * with other interrupt locks that might be happening. See LU-1311
- * for details.
- */
-int cfs_trace_lock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
-	__acquires(&tcd->tc_lock)
-{
-	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_MAX);
-	if (tcd->tcd_type == CFS_TCD_TYPE_IRQ)
-		spin_lock_irqsave(&tcd->tcd_lock, tcd->tcd_lock_flags);
-	else if (tcd->tcd_type == CFS_TCD_TYPE_SOFTIRQ)
-		spin_lock_bh(&tcd->tcd_lock);
-	else if (unlikely(walking))
-		spin_lock_irq(&tcd->tcd_lock);
-	else
-		spin_lock(&tcd->tcd_lock);
-	return 1;
-}
-
-void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
-	__releases(&tcd->tcd_lock)
-{
-	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_MAX);
-	if (tcd->tcd_type == CFS_TCD_TYPE_IRQ)
-		spin_unlock_irqrestore(&tcd->tcd_lock, tcd->tcd_lock_flags);
-	else if (tcd->tcd_type == CFS_TCD_TYPE_SOFTIRQ)
-		spin_unlock_bh(&tcd->tcd_lock);
-	else if (unlikely(walking))
-		spin_unlock_irq(&tcd->tcd_lock);
-	else
-		spin_unlock(&tcd->tcd_lock);
-}
-
 void
 cfs_set_ptldebug_header(struct ptldebug_header *header,
 			struct libcfs_debug_msg_data *msgdata,
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index 72321ce..6d567a9 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -109,6 +109,65 @@ struct cfs_trace_page {
 static void put_pages_on_tcd_daemon_list(struct page_collection *pc,
 					 struct cfs_trace_cpu_data *tcd);
 
+/* trace file lock routines */
+/*
+ * The walking argument indicates the locking comes from all tcd types
+ * iterator and we must lock it and dissable local irqs to avoid deadlocks
+ * with other interrupt locks that might be happening. See LU-1311
+ * for details.
+ */
+int cfs_trace_lock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
+	__acquires(&tcd->tc_lock)
+{
+	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_MAX);
+	if (tcd->tcd_type == CFS_TCD_TYPE_IRQ)
+		spin_lock_irqsave(&tcd->tcd_lock, tcd->tcd_lock_flags);
+	else if (tcd->tcd_type == CFS_TCD_TYPE_SOFTIRQ)
+		spin_lock_bh(&tcd->tcd_lock);
+	else if (unlikely(walking))
+		spin_lock_irq(&tcd->tcd_lock);
+	else
+		spin_lock(&tcd->tcd_lock);
+	return 1;
+}
+
+void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
+	__releases(&tcd->tcd_lock)
+{
+	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_MAX);
+	if (tcd->tcd_type == CFS_TCD_TYPE_IRQ)
+		spin_unlock_irqrestore(&tcd->tcd_lock, tcd->tcd_lock_flags);
+	else if (tcd->tcd_type == CFS_TCD_TYPE_SOFTIRQ)
+		spin_unlock_bh(&tcd->tcd_lock);
+	else if (unlikely(walking))
+		spin_unlock_irq(&tcd->tcd_lock);
+	else
+		spin_unlock(&tcd->tcd_lock);
+}
+
+#define cfs_tcd_for_each_type_lock(tcd, i, cpu)			   \
+	for (i = 0; cfs_trace_data[i] &&				\
+	     (tcd = &(*cfs_trace_data[i])[cpu].tcd) &&			\
+	     cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
+
+static inline struct cfs_trace_cpu_data *
+cfs_trace_get_tcd(void)
+{
+	struct cfs_trace_cpu_data *tcd =
+		&(*cfs_trace_data[cfs_trace_buf_idx_get()])[get_cpu()].tcd;
+
+	cfs_trace_lock_tcd(tcd, 0);
+
+	return tcd;
+}
+
+static inline void cfs_trace_put_tcd(struct cfs_trace_cpu_data *tcd)
+{
+	cfs_trace_unlock_tcd(tcd, 0);
+
+	put_cpu();
+}
+
 static inline struct cfs_trace_page *
 cfs_tage_from_list(struct list_head *list)
 {
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
index 9f6b73d..f49a9ba 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
@@ -49,8 +49,6 @@ enum cfs_trace_buf_type {
 	CFS_TCD_TYPE_MAX
 };
 
-/* trace file lock routines */
-
 #define TRACEFILE_NAME_SIZE 1024
 extern char cfs_tracefile[TRACEFILE_NAME_SIZE];
 extern long long cfs_tracefile_size;
@@ -195,11 +193,6 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
 		     j < num_possible_cpus();				 \
 		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
 
-#define cfs_tcd_for_each_type_lock(tcd, i, cpu)			   \
-	for (i = 0; cfs_trace_data[i] &&				\
-	     (tcd = &(*cfs_trace_data[i])[cpu].tcd) &&			\
-	     cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
-
 void cfs_set_ptldebug_header(struct ptldebug_header *header,
 			     struct libcfs_debug_msg_data *m,
 			     unsigned long stack);
@@ -207,9 +200,6 @@ void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
 			  const char *buf, int len, const char *file,
 			  const char *fn);
 
-int cfs_trace_lock_tcd(struct cfs_trace_cpu_data *tcd, int walking);
-void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking);
-
 extern char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
 enum cfs_trace_buf_type cfs_trace_buf_idx_get(void);
 
@@ -222,24 +212,6 @@ void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
 	return cfs_trace_console_buffers[i][j];
 }
 
-static inline struct cfs_trace_cpu_data *
-cfs_trace_get_tcd(void)
-{
-	struct cfs_trace_cpu_data *tcd =
-		&(*cfs_trace_data[cfs_trace_buf_idx_get()])[get_cpu()].tcd;
-
-	cfs_trace_lock_tcd(tcd, 0);
-
-	return tcd;
-}
-
-static inline void cfs_trace_put_tcd(struct cfs_trace_cpu_data *tcd)
-{
-	cfs_trace_unlock_tcd(tcd, 0);
-
-	put_cpu();
-}
-
 int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
 			   struct list_head *stock);
 
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
                   ` (2 preceding siblings ...)
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 3/7] lustre: libcfs: move tcd locking across to tracefile.c James Simmons
@ 2018-06-25 21:42 ` James Simmons
  2018-06-26  0:29   ` NeilBrown
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 5/7] lustre: libcfs: fold cfs_tracefile_*_arch into their only callers James Simmons
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

It's good to keep related code together. The merger exposed the
flaws of cfs_print_to_console() so rework it to behavior properly.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
---
 drivers/staging/lustre/lnet/libcfs/Makefile        |   2 +-
 .../staging/lustre/lnet/libcfs/linux-tracefile.c   | 194 ---------------------
 drivers/staging/lustre/lnet/libcfs/tracefile.c     | 184 ++++++++++++++++---
 drivers/staging/lustre/lnet/libcfs/tracefile.h     |  79 ++-------
 4 files changed, 170 insertions(+), 289 deletions(-)
 delete mode 100644 drivers/staging/lustre/lnet/libcfs/linux-tracefile.c

diff --git a/drivers/staging/lustre/lnet/libcfs/Makefile b/drivers/staging/lustre/lnet/libcfs/Makefile
index 5b13edc..cd96434 100644
--- a/drivers/staging/lustre/lnet/libcfs/Makefile
+++ b/drivers/staging/lustre/lnet/libcfs/Makefile
@@ -4,7 +4,7 @@ ccflags-y += -I$(srctree)/drivers/staging/lustre/lustre/include
 
 obj-$(CONFIG_LNET) += libcfs.o
 
-libcfs-obj-y += linux-tracefile.o linux-debug.o
+libcfs-obj-y += linux-debug.o
 libcfs-obj-y += linux-crypto.o
 libcfs-obj-y += linux-crypto-adler.o
 
diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
deleted file mode 100644
index 3af7722..0000000
--- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
+++ /dev/null
@@ -1,194 +0,0 @@
-// SPDX-License-Identifier: GPL-2.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.gnu.org/licenses/gpl-2.0.html
- *
- * GPL HEADER END
- */
-/*
- * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- * Use is subject to license terms.
- *
- * Copyright (c) 2012, Intel Corporation.
- */
-/*
- * This file is part of Lustre, http://www.lustre.org/
- * Lustre is a trademark of Sun Microsystems, Inc.
- */
-
-#define DEBUG_SUBSYSTEM S_LNET
-#define LUSTRE_TRACEFILE_PRIVATE
-
-#include <linux/slab.h>
-#include <linux/mm.h>
-#include "tracefile.h"
-
-/* percents to share the total debug memory for each type */
-static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
-	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
-	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
-	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
-};
-
-char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
-
-int cfs_tracefile_init_arch(void)
-{
-	int i;
-	int j;
-	struct cfs_trace_cpu_data *tcd;
-
-	/* initialize trace_data */
-	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
-	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
-		cfs_trace_data[i] =
-			kmalloc_array(num_possible_cpus(),
-				      sizeof(union cfs_trace_data_union),
-				      GFP_KERNEL);
-		if (!cfs_trace_data[i])
-			goto out;
-	}
-
-	/* arch related info initialized */
-	cfs_tcd_for_each(tcd, i, j) {
-		spin_lock_init(&tcd->tcd_lock);
-		tcd->tcd_pages_factor = pages_factor[i];
-		tcd->tcd_type = i;
-		tcd->tcd_cpu = j;
-	}
-
-	for (i = 0; i < num_possible_cpus(); i++)
-		for (j = 0; j < 3; j++) {
-			cfs_trace_console_buffers[i][j] =
-				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
-					GFP_KERNEL);
-
-			if (!cfs_trace_console_buffers[i][j])
-				goto out;
-		}
-
-	return 0;
-
-out:
-	cfs_tracefile_fini_arch();
-	pr_err("lnet: Not enough memory\n");
-	return -ENOMEM;
-}
-
-void cfs_tracefile_fini_arch(void)
-{
-	int i;
-	int j;
-
-	for (i = 0; i < num_possible_cpus(); i++)
-		for (j = 0; j < 3; j++) {
-			kfree(cfs_trace_console_buffers[i][j]);
-			cfs_trace_console_buffers[i][j] = NULL;
-		}
-
-	for (i = 0; cfs_trace_data[i]; i++) {
-		kfree(cfs_trace_data[i]);
-		cfs_trace_data[i] = NULL;
-	}
-}
-
-enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
-{
-	if (in_irq())
-		return CFS_TCD_TYPE_IRQ;
-	if (in_softirq())
-		return CFS_TCD_TYPE_SOFTIRQ;
-	return CFS_TCD_TYPE_PROC;
-}
-
-void
-cfs_set_ptldebug_header(struct ptldebug_header *header,
-			struct libcfs_debug_msg_data *msgdata,
-			unsigned long stack)
-{
-	struct timespec64 ts;
-
-	ktime_get_real_ts64(&ts);
-
-	header->ph_subsys = msgdata->msg_subsys;
-	header->ph_mask = msgdata->msg_mask;
-	header->ph_cpu_id = smp_processor_id();
-	header->ph_type = cfs_trace_buf_idx_get();
-	/* y2038 safe since all user space treats this as unsigned, but
-	 * will overflow in 2106
-	 */
-	header->ph_sec = (u32)ts.tv_sec;
-	header->ph_usec = ts.tv_nsec / NSEC_PER_USEC;
-	header->ph_stack = stack;
-	header->ph_pid = current->pid;
-	header->ph_line_num = msgdata->msg_line;
-	header->ph_extern_pid = 0;
-}
-
-static char *
-dbghdr_to_err_string(struct ptldebug_header *hdr)
-{
-	switch (hdr->ph_subsys) {
-	case S_LND:
-	case S_LNET:
-		return "LNetError";
-	default:
-		return "LustreError";
-	}
-}
-
-static char *
-dbghdr_to_info_string(struct ptldebug_header *hdr)
-{
-	switch (hdr->ph_subsys) {
-	case S_LND:
-	case S_LNET:
-		return "LNet";
-	default:
-		return "Lustre";
-	}
-}
-
-void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
-			  const char *buf, int len, const char *file,
-			  const char *fn)
-{
-	char *prefix = "Lustre", *ptype = NULL;
-
-	if (mask & D_EMERG) {
-		prefix = dbghdr_to_err_string(hdr);
-		ptype = KERN_EMERG;
-	} else if (mask & D_ERROR) {
-		prefix = dbghdr_to_err_string(hdr);
-		ptype = KERN_ERR;
-	} else if (mask & D_WARNING) {
-		prefix = dbghdr_to_info_string(hdr);
-		ptype = KERN_WARNING;
-	} else if (mask & (D_CONSOLE | libcfs_printk)) {
-		prefix = dbghdr_to_info_string(hdr);
-		ptype = KERN_INFO;
-	}
-
-	if (mask & D_CONSOLE) {
-		pr_info("%s%s: %.*s", ptype, prefix, len, buf);
-	} else {
-		pr_info("%s%s: %d:%d:(%s:%d:%s()) %.*s", ptype, prefix,
-			hdr->ph_pid, hdr->ph_extern_pid, file,
-			hdr->ph_line_num, fn, len, buf);
-	}
-}
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index 6d567a9..229bbb8 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -37,8 +37,6 @@
  */
 
 #define DEBUG_SUBSYSTEM S_LNET
-#define LUSTRE_TRACEFILE_PRIVATE
-#define pr_fmt(fmt) "Lustre: " fmt
 
 #include <linux/ratelimit.h>
 #include <linux/highmem.h>
@@ -49,9 +47,19 @@
 #include <linux/uaccess.h>
 #include "tracefile.h"
 
-/* XXX move things up to the top, comment */
+#define CFS_TRACE_CONSOLE_BUFFER_SIZE	1024
+#define TCD_MAX_TYPES			8
+
+enum cfs_trace_buf_type {
+	CFS_TCD_TYPE_PROC = 0,
+	CFS_TCD_TYPE_SOFTIRQ,
+	CFS_TCD_TYPE_IRQ,
+	CFS_TCD_TYPE_MAX
+};
+
 union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned;
 
+char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
 char cfs_tracefile[TRACEFILE_NAME_SIZE];
 long long cfs_tracefile_size = CFS_TRACEFILE_SIZE;
 static struct tracefiled_ctl trace_tctl;
@@ -145,11 +153,35 @@ void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
 		spin_unlock(&tcd->tcd_lock);
 }
 
-#define cfs_tcd_for_each_type_lock(tcd, i, cpu)			   \
+#define cfs_tcd_for_each(tcd, i, j)					\
+	for (i = 0; cfs_trace_data[i]; i++)				\
+		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
+		     j < num_possible_cpus();				\
+		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
+
+
+#define cfs_tcd_for_each_type_lock(tcd, i, cpu)				\
 	for (i = 0; cfs_trace_data[i] &&				\
 	     (tcd = &(*cfs_trace_data[i])[cpu].tcd) &&			\
 	     cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
 
+enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
+{
+	if (in_irq())
+		return CFS_TCD_TYPE_IRQ;
+	if (in_softirq())
+		return CFS_TCD_TYPE_SOFTIRQ;
+	return CFS_TCD_TYPE_PROC;
+}
+
+static inline char *cfs_trace_get_console_buffer(void)
+{
+	unsigned int i = get_cpu();
+	unsigned int j = cfs_trace_buf_idx_get();
+
+	return cfs_trace_console_buffers[i][j];
+}
+
 static inline struct cfs_trace_cpu_data *
 cfs_trace_get_tcd(void)
 {
@@ -168,6 +200,77 @@ static inline void cfs_trace_put_tcd(struct cfs_trace_cpu_data *tcd)
 	put_cpu();
 }
 
+/* percents to share the total debug memory for each type */
+static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
+	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
+	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
+	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
+};
+
+int cfs_tracefile_init_arch(void)
+{
+	struct cfs_trace_cpu_data *tcd;
+	int i;
+	int j;
+
+	/* initialize trace_data */
+	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
+	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
+		cfs_trace_data[i] =
+			kmalloc_array(num_possible_cpus(),
+				      sizeof(union cfs_trace_data_union),
+				      GFP_KERNEL);
+		if (!cfs_trace_data[i])
+			goto out_trace_data;
+	}
+
+	/* arch related info initialized */
+	cfs_tcd_for_each(tcd, i, j) {
+		spin_lock_init(&tcd->tcd_lock);
+		tcd->tcd_pages_factor = pages_factor[i];
+		tcd->tcd_type = i;
+		tcd->tcd_cpu = j;
+	}
+
+	for (i = 0; i < num_possible_cpus(); i++)
+		for (j = 0; j < 3; j++) {
+			cfs_trace_console_buffers[i][j] =
+				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
+					GFP_KERNEL);
+
+			if (!cfs_trace_console_buffers[i][j])
+				goto out_buffers;
+		}
+
+	return 0;
+
+out_buffers:
+	for (i = 0; cfs_trace_data[i]; i++) {
+		kfree(cfs_trace_data[i]);
+		cfs_trace_data[i] = NULL;
+	}
+out_trace_data:
+	pr_err("lnet: Not enough memory\n");
+	return -ENOMEM;
+}
+
+void cfs_tracefile_fini_arch(void)
+{
+	int i;
+	int j;
+
+	for (i = 0; i < num_possible_cpus(); i++)
+		for (j = 0; j < 3; j++) {
+			kfree(cfs_trace_console_buffers[i][j]);
+			cfs_trace_console_buffers[i][j] = NULL;
+		}
+
+	for (i = 0; cfs_trace_data[i]; i++) {
+		kfree(cfs_trace_data[i]);
+		cfs_trace_data[i] = NULL;
+	}
+}
+
 static inline struct cfs_trace_page *
 cfs_tage_from_list(struct list_head *list)
 {
@@ -216,27 +319,6 @@ static void cfs_tage_to_tail(struct cfs_trace_page *tage,
 	list_move_tail(&tage->linkage, queue);
 }
 
-int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
-			   struct list_head *stock)
-{
-	int i;
-
-	/*
-	 * XXX nikita: do NOT call portals_debug_msg() (CDEBUG/ENTRY/EXIT)
-	 * from here: this will lead to infinite recursion.
-	 */
-
-	for (i = 0; i + tcd->tcd_cur_stock_pages < TCD_STOCK_PAGES ; ++i) {
-		struct cfs_trace_page *tage;
-
-		tage = cfs_tage_alloc(gfp);
-		if (!tage)
-			break;
-		list_add_tail(&tage->linkage, stock);
-	}
-	return i;
-}
-
 /* return a page that has 'len' bytes left at the end */
 static struct cfs_trace_page *
 cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len)
@@ -340,6 +422,57 @@ static struct cfs_trace_page *cfs_trace_get_tage(struct cfs_trace_cpu_data *tcd,
 	return tage;
 }
 
+
+
+static void cfs_set_ptldebug_header(struct ptldebug_header *header,
+				    struct libcfs_debug_msg_data *msgdata,
+				    unsigned long stack)
+{
+	struct timespec64 ts;
+
+	ktime_get_real_ts64(&ts);
+
+	header->ph_subsys = msgdata->msg_subsys;
+	header->ph_mask = msgdata->msg_mask;
+	header->ph_cpu_id = smp_processor_id();
+	header->ph_type = cfs_trace_buf_idx_get();
+	/* y2038 safe since all user space treats this as unsigned, but
+	 * will overflow in 2106
+	 */
+	header->ph_sec = (u32)ts.tv_sec;
+	header->ph_usec = ts.tv_nsec / NSEC_PER_USEC;
+	header->ph_stack = stack;
+	header->ph_pid = current->pid;
+	header->ph_line_num = msgdata->msg_line;
+	header->ph_extern_pid = 0;
+}
+
+static void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
+				 const char *buf, int len, const char *file,
+				 const char *fn)
+{
+	char *prefix = "Lustre";
+
+	if (hdr->ph_subsys == S_LND || hdr->ph_subsys == S_LNET)
+		prefix = "LNet";
+
+	if (mask & D_EMERG) {
+		pr_emerg("%sError: %d:%d:(%s:%d:%s()) %.*s", prefix,
+			 hdr->ph_pid, hdr->ph_extern_pid, file,
+			 hdr->ph_line_num, fn, len, buf);
+	} else if (mask & D_ERROR) {
+		pr_err("%sError: %d:%d:(%s:%d:%s()) %.*s", prefix,
+		       hdr->ph_pid, hdr->ph_extern_pid, file,
+		       hdr->ph_line_num, fn, len, buf);
+	} else if (mask & D_WARNING) {
+		pr_warning("%s: %d:%d:(%s:%d:%s()) %.*s", prefix,
+			   hdr->ph_pid, hdr->ph_extern_pid, file,
+			   hdr->ph_line_num, fn, len, buf);
+	} else if (mask & (D_CONSOLE | libcfs_printk)) {
+		pr_info("%s: %.*s", prefix, len, buf);
+	}
+}
+
 int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata,
 		     const char *format, ...)
 {
@@ -531,6 +664,7 @@ int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata,
 	} else {
 		string_buf = cfs_trace_get_console_buffer();
 
+		memset(string_buf, 0, CFS_TRACE_CONSOLE_BUFFER_SIZE);
 		needed = 0;
 		if (format1) {
 			va_copy(ap, args);
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
index f49a9ba..4c79009 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
@@ -42,13 +42,6 @@
 #include <linux/smp.h>
 #include <linux/libcfs/libcfs.h>
 
-enum cfs_trace_buf_type {
-	CFS_TCD_TYPE_PROC = 0,
-	CFS_TCD_TYPE_SOFTIRQ,
-	CFS_TCD_TYPE_IRQ,
-	CFS_TCD_TYPE_MAX
-};
-
 #define TRACEFILE_NAME_SIZE 1024
 extern char cfs_tracefile[TRACEFILE_NAME_SIZE];
 extern long long cfs_tracefile_size;
@@ -60,9 +53,6 @@ enum cfs_trace_buf_type {
 
 void libcfs_run_debug_log_upcall(char *file);
 
-int  cfs_tracefile_init_arch(void);
-void cfs_tracefile_fini_arch(void);
-
 int cfs_tracefile_dump_all_pages(char *filename);
 void cfs_trace_debug_print(void);
 void cfs_trace_flush_pages(void);
@@ -92,22 +82,6 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
 #define TCD_STOCK_PAGES (TCD_MAX_PAGES)
 #define CFS_TRACEFILE_SIZE (500 << 20)
 
-#ifdef LUSTRE_TRACEFILE_PRIVATE
-
-/*
- * Private declare for tracefile
- */
-#define TCD_MAX_PAGES (5 << (20 - PAGE_SHIFT))
-#define TCD_STOCK_PAGES (TCD_MAX_PAGES)
-
-#define CFS_TRACEFILE_SIZE (500 << 20)
-
-/*
- * Size of a buffer for sprinting console messages if we can't get a page
- * from system
- */
-#define CFS_TRACE_CONSOLE_BUFFER_SIZE   1024
-
 union cfs_trace_data_union {
 	struct cfs_trace_cpu_data {
 		/*
@@ -184,58 +158,25 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
 	char __pad[L1_CACHE_ALIGN(sizeof(struct cfs_trace_cpu_data))];
 };
 
-#define TCD_MAX_TYPES      8
-extern union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS];
-
-#define cfs_tcd_for_each(tcd, i, j)				       \
-	for (i = 0; cfs_trace_data[i]; i++)				\
-		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
-		     j < num_possible_cpus();				 \
-		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
-
-void cfs_set_ptldebug_header(struct ptldebug_header *header,
-			     struct libcfs_debug_msg_data *m,
-			     unsigned long stack);
-void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
-			  const char *buf, int len, const char *file,
-			  const char *fn);
-
-extern char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
-enum cfs_trace_buf_type cfs_trace_buf_idx_get(void);
-
-static inline char *
-cfs_trace_get_console_buffer(void)
-{
-	unsigned int i = get_cpu();
-	unsigned int j = cfs_trace_buf_idx_get();
-
-	return cfs_trace_console_buffers[i][j];
-}
-
-int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
-			   struct list_head *stock);
-
 void cfs_trace_assertion_failed(const char *str,
 				struct libcfs_debug_msg_data *m);
 
 /* ASSERTION that is safe to use within the debug system */
-#define __LASSERT(cond)						 \
-do {								    \
+#define __LASSERT(cond)							\
+do {									\
 	if (unlikely(!(cond))) {					\
 		LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_EMERG, NULL);     \
 		cfs_trace_assertion_failed("ASSERTION("#cond") failed", \
-					   &msgdata);		   \
-	}							       \
+					   &msgdata);			\
+	}								\
 } while (0)
 
-#define __LASSERT_TAGE_INVARIANT(tage)				  \
-do {								    \
-	__LASSERT(tage);					\
-	__LASSERT(tage->page);				  \
-	__LASSERT(tage->used <= PAGE_SIZE);			 \
-	__LASSERT(page_count(tage->page) > 0);		      \
+#define __LASSERT_TAGE_INVARIANT(tage)			\
+do {							\
+	__LASSERT(tage);				\
+	__LASSERT(tage->page);				\
+	__LASSERT(tage->used <= PAGE_SIZE);		\
+	__LASSERT(page_count(tage->page) > 0);		\
 } while (0)
 
-#endif	/* LUSTRE_TRACEFILE_PRIVATE */
-
 #endif /* __LIBCFS_TRACEFILE_H__ */
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 5/7] lustre: libcfs: fold cfs_tracefile_*_arch into their only callers.
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
                   ` (3 preceding siblings ...)
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c James Simmons
@ 2018-06-25 21:42 ` James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 6/7] lustre: libcfs: renamed CFS_TCD_TYPE_MAX to CFS_TCD_TYPE_CNT James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 7/7] lustre: libcfs: discard TCD_MAX_TYPES James Simmons
  6 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

There is no need to separate "arch" init/fini from
the rest, so fold it all in.
This requires some slightly subtle changes to clean-up
to make sure we don't walk lists before they are
initialized.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
---
 drivers/staging/lustre/lnet/libcfs/tracefile.c | 138 +++++++++++--------------
 1 file changed, 59 insertions(+), 79 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index 229bbb8..b370c56 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -200,77 +200,6 @@ static inline void cfs_trace_put_tcd(struct cfs_trace_cpu_data *tcd)
 	put_cpu();
 }
 
-/* percents to share the total debug memory for each type */
-static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
-	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
-	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
-	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
-};
-
-int cfs_tracefile_init_arch(void)
-{
-	struct cfs_trace_cpu_data *tcd;
-	int i;
-	int j;
-
-	/* initialize trace_data */
-	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
-	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
-		cfs_trace_data[i] =
-			kmalloc_array(num_possible_cpus(),
-				      sizeof(union cfs_trace_data_union),
-				      GFP_KERNEL);
-		if (!cfs_trace_data[i])
-			goto out_trace_data;
-	}
-
-	/* arch related info initialized */
-	cfs_tcd_for_each(tcd, i, j) {
-		spin_lock_init(&tcd->tcd_lock);
-		tcd->tcd_pages_factor = pages_factor[i];
-		tcd->tcd_type = i;
-		tcd->tcd_cpu = j;
-	}
-
-	for (i = 0; i < num_possible_cpus(); i++)
-		for (j = 0; j < 3; j++) {
-			cfs_trace_console_buffers[i][j] =
-				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
-					GFP_KERNEL);
-
-			if (!cfs_trace_console_buffers[i][j])
-				goto out_buffers;
-		}
-
-	return 0;
-
-out_buffers:
-	for (i = 0; cfs_trace_data[i]; i++) {
-		kfree(cfs_trace_data[i]);
-		cfs_trace_data[i] = NULL;
-	}
-out_trace_data:
-	pr_err("lnet: Not enough memory\n");
-	return -ENOMEM;
-}
-
-void cfs_tracefile_fini_arch(void)
-{
-	int i;
-	int j;
-
-	for (i = 0; i < num_possible_cpus(); i++)
-		for (j = 0; j < 3; j++) {
-			kfree(cfs_trace_console_buffers[i][j]);
-			cfs_trace_console_buffers[i][j] = NULL;
-		}
-
-	for (i = 0; cfs_trace_data[i]; i++) {
-		kfree(cfs_trace_data[i]);
-		cfs_trace_data[i] = NULL;
-	}
-}
-
 static inline struct cfs_trace_page *
 cfs_tage_from_list(struct list_head *list)
 {
@@ -1322,21 +1251,38 @@ void cfs_trace_stop_thread(void)
 	mutex_unlock(&cfs_trace_thread_mutex);
 }
 
+/* percents to share the total debug memory for each type */
+static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
+	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
+	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
+	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
+};
+
 int cfs_tracefile_init(int max_pages)
 {
 	struct cfs_trace_cpu_data *tcd;
 	int i;
 	int j;
-	int rc;
-	int factor;
 
-	rc = cfs_tracefile_init_arch();
-	if (rc)
-		return rc;
+	/* initialize trace_data */
+	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
+	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
+		cfs_trace_data[i] =
+			kmalloc_array(num_possible_cpus(),
+				      sizeof(union cfs_trace_data_union),
+				      GFP_KERNEL);
+		if (!cfs_trace_data[i])
+			goto out_trace_data;
+	}
 
+	/* arch related info initialized */
 	cfs_tcd_for_each(tcd, i, j) {
-		/* tcd_pages_factor is initialized int tracefile_init_arch. */
-		factor = tcd->tcd_pages_factor;
+		int factor = pages_factor[i];
+
+		spin_lock_init(&tcd->tcd_lock);
+		tcd->tcd_pages_factor = factor;
+		tcd->tcd_type = i;
+		tcd->tcd_cpu = j;
 		INIT_LIST_HEAD(&tcd->tcd_pages);
 		INIT_LIST_HEAD(&tcd->tcd_stock_pages);
 		INIT_LIST_HEAD(&tcd->tcd_daemon_pages);
@@ -1348,7 +1294,27 @@ int cfs_tracefile_init(int max_pages)
 		tcd->tcd_shutting_down = 0;
 	}
 
+	for (i = 0; i < num_possible_cpus(); i++)
+		for (j = 0; j < 3; j++) {
+			cfs_trace_console_buffers[i][j] =
+				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
+					GFP_KERNEL);
+
+			if (!cfs_trace_console_buffers[i][j])
+				goto out_console_buffers;
+		}
+
 	return 0;
+
+out_console_buffers:
+	for (i = 0; i < num_possible_cpus(); i++)
+		for (j = 0; j < 3; j++) {
+			kfree(cfs_trace_console_buffers[i][j]);
+			cfs_trace_console_buffers[i][j] = NULL;
+		}
+out_trace_data:
+	pr_err("lnet: Not enough memory\n");
+	return -ENOMEM;
 }
 
 static void trace_cleanup_on_all_cpus(void)
@@ -1360,6 +1326,9 @@ static void trace_cleanup_on_all_cpus(void)
 
 	for_each_possible_cpu(cpu) {
 		cfs_tcd_for_each_type_lock(tcd, i, cpu) {
+			if (!tcd->tcd_pages_factor)
+				/* Not initialised */
+				continue;
 			tcd->tcd_shutting_down = 1;
 
 			list_for_each_entry_safe(tage, tmp, &tcd->tcd_pages,
@@ -1378,12 +1347,23 @@ static void trace_cleanup_on_all_cpus(void)
 static void cfs_trace_cleanup(void)
 {
 	struct page_collection pc;
+	int i;
+	int j;
 
 	INIT_LIST_HEAD(&pc.pc_pages);
 
 	trace_cleanup_on_all_cpus();
 
-	cfs_tracefile_fini_arch();
+	for (i = 0; i < num_possible_cpus(); i++)
+		for (j = 0; j < 3; j++) {
+			kfree(cfs_trace_console_buffers[i][j]);
+			cfs_trace_console_buffers[i][j] = NULL;
+		}
+
+	for (i = 0; cfs_trace_data[i]; i++) {
+		kfree(cfs_trace_data[i]);
+		cfs_trace_data[i] = NULL;
+	}
 }
 
 void cfs_tracefile_exit(void)
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 6/7] lustre: libcfs: renamed CFS_TCD_TYPE_MAX to CFS_TCD_TYPE_CNT
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
                   ` (4 preceding siblings ...)
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 5/7] lustre: libcfs: fold cfs_tracefile_*_arch into their only callers James Simmons
@ 2018-06-25 21:42 ` James Simmons
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 7/7] lustre: libcfs: discard TCD_MAX_TYPES James Simmons
  6 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

The possible TCD types are 0, 1, 2.
So the MAX is 2.
The count of the number of types is 3.

CFS_TCD_TYPE_MAX is 3 - obviously wrong.

So rename it to CFS_TCD_TYPE_CNT.

Also there are 2 places where "3" is used rather
than the macro - fix them.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
---
 drivers/staging/lustre/lnet/libcfs/tracefile.c | 16 ++++++++--------
 1 file changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index b370c56..e9d8b22 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -54,12 +54,12 @@ enum cfs_trace_buf_type {
 	CFS_TCD_TYPE_PROC = 0,
 	CFS_TCD_TYPE_SOFTIRQ,
 	CFS_TCD_TYPE_IRQ,
-	CFS_TCD_TYPE_MAX
+	CFS_TCD_TYPE_CNT
 };
 
 union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned;
 
-char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
+char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_CNT];
 char cfs_tracefile[TRACEFILE_NAME_SIZE];
 long long cfs_tracefile_size = CFS_TRACEFILE_SIZE;
 static struct tracefiled_ctl trace_tctl;
@@ -127,7 +127,7 @@ static void put_pages_on_tcd_daemon_list(struct page_collection *pc,
 int cfs_trace_lock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
 	__acquires(&tcd->tc_lock)
 {
-	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_MAX);
+	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_CNT);
 	if (tcd->tcd_type == CFS_TCD_TYPE_IRQ)
 		spin_lock_irqsave(&tcd->tcd_lock, tcd->tcd_lock_flags);
 	else if (tcd->tcd_type == CFS_TCD_TYPE_SOFTIRQ)
@@ -142,7 +142,7 @@ int cfs_trace_lock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
 void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
 	__releases(&tcd->tcd_lock)
 {
-	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_MAX);
+	__LASSERT(tcd->tcd_type < CFS_TCD_TYPE_CNT);
 	if (tcd->tcd_type == CFS_TCD_TYPE_IRQ)
 		spin_unlock_irqrestore(&tcd->tcd_lock, tcd->tcd_lock_flags);
 	else if (tcd->tcd_type == CFS_TCD_TYPE_SOFTIRQ)
@@ -1252,7 +1252,7 @@ void cfs_trace_stop_thread(void)
 }
 
 /* percents to share the total debug memory for each type */
-static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
+static unsigned int pages_factor[CFS_TCD_TYPE_CNT] = {
 	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
 	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
 	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
@@ -1266,7 +1266,7 @@ int cfs_tracefile_init(int max_pages)
 
 	/* initialize trace_data */
 	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
-	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
+	for (i = 0; i < CFS_TCD_TYPE_CNT; i++) {
 		cfs_trace_data[i] =
 			kmalloc_array(num_possible_cpus(),
 				      sizeof(union cfs_trace_data_union),
@@ -1295,7 +1295,7 @@ int cfs_tracefile_init(int max_pages)
 	}
 
 	for (i = 0; i < num_possible_cpus(); i++)
-		for (j = 0; j < 3; j++) {
+		for (j = 0; j < CFS_TCD_TYPE_CNT; j++) {
 			cfs_trace_console_buffers[i][j] =
 				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
 					GFP_KERNEL);
@@ -1355,7 +1355,7 @@ static void cfs_trace_cleanup(void)
 	trace_cleanup_on_all_cpus();
 
 	for (i = 0; i < num_possible_cpus(); i++)
-		for (j = 0; j < 3; j++) {
+		for (j = 0; j < CFS_TCD_TYPE_CNT; j++) {
 			kfree(cfs_trace_console_buffers[i][j]);
 			cfs_trace_console_buffers[i][j] = NULL;
 		}
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 7/7] lustre: libcfs: discard TCD_MAX_TYPES
  2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
                   ` (5 preceding siblings ...)
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 6/7] lustre: libcfs: renamed CFS_TCD_TYPE_MAX to CFS_TCD_TYPE_CNT James Simmons
@ 2018-06-25 21:42 ` James Simmons
  6 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-25 21:42 UTC (permalink / raw)
  To: lustre-devel

From: NeilBrown <neilb@suse.com>

As well as CFS_TCD_TYPE_CNT we have TCD_MAX_TYPES which has a larger
value but a similar meaning.  Discard it and just use
CFS_TCD_TYPE_CNT.

Two places relied on the fact that TCD_MAX_TYPES was larger and so
there would be NULLs at the end of the array.  Change
them to check the array size properly.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
---
 drivers/staging/lustre/lnet/libcfs/tracefile.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index e9d8b22..47998e8 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -48,7 +48,6 @@
 #include "tracefile.h"
 
 #define CFS_TRACE_CONSOLE_BUFFER_SIZE	1024
-#define TCD_MAX_TYPES			8
 
 enum cfs_trace_buf_type {
 	CFS_TCD_TYPE_PROC = 0,
@@ -57,7 +56,7 @@ enum cfs_trace_buf_type {
 	CFS_TCD_TYPE_CNT
 };
 
-union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned;
+union cfs_trace_data_union (*cfs_trace_data[CFS_TCD_TYPE_CNT])[NR_CPUS] __cacheline_aligned;
 
 char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_CNT];
 char cfs_tracefile[TRACEFILE_NAME_SIZE];
@@ -154,14 +153,14 @@ void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
 }
 
 #define cfs_tcd_for_each(tcd, i, j)					\
-	for (i = 0; cfs_trace_data[i]; i++)				\
+	for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i]; i++)	\
 		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
 		     j < num_possible_cpus();				\
 		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
 
 
 #define cfs_tcd_for_each_type_lock(tcd, i, cpu)				\
-	for (i = 0; cfs_trace_data[i] &&				\
+	for (i = 0;  i < CFS_TCD_TYPE_CNT && cfs_trace_data[i] &&	\
 	     (tcd = &(*cfs_trace_data[i])[cpu].tcd) &&			\
 	     cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
 
@@ -1360,7 +1359,7 @@ static void cfs_trace_cleanup(void)
 			cfs_trace_console_buffers[i][j] = NULL;
 		}
 
-	for (i = 0; cfs_trace_data[i]; i++) {
+	for (i = 0; i < CFS_TCD_TYPE_CNT && cfs_trace_data[i]; i++) {
 		kfree(cfs_trace_data[i]);
 		cfs_trace_data[i] = NULL;
 	}
-- 
1.8.3.1

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

* [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c
  2018-06-25 21:42 ` [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c James Simmons
@ 2018-06-26  0:29   ` NeilBrown
  2018-06-26  1:16     ` James Simmons
  0 siblings, 1 reply; 10+ messages in thread
From: NeilBrown @ 2018-06-26  0:29 UTC (permalink / raw)
  To: lustre-devel

On Mon, Jun 25 2018, James Simmons wrote:

> From: NeilBrown <neilb@suse.com>
>
> It's good to keep related code together. The merger exposed the
> flaws of cfs_print_to_console() so rework it to behavior properly.

I'm sorry but I cannot apply this as it is.
The patch contains various changes that are not mentioned at all in the
above description, and the above description doesn't really say anything
useful at all about why anything needed fixing.

You've moved content from tracefile.h into tracefile.c
You've reformatted some code - lining up '\' for example
You've removed some code (e.g. cfs_tracefile_refill_stock)
You've added a memset into libcfs_debug_vmsg2

I don't doubt that these are useful, but they don't all belong in the
same patch that claims to just move code from linux-tracefile.c into
tracefile.c

Sometimes it is necessary to combine lots of things in one patch, though
we avoid it whenever possible.  When it cannot be avoided, the multiple
changes *must* be described together with some indication of the reason
that they are all interdependent.

It is important that patches can be reviewed easily.  This one cannot.

Thanks,
NeilBrown


>
> Signed-off-by: NeilBrown <neilb@suse.com>
> Signed-off-by: James Simmons <jsimmons@infradead.org>
> ---
>  drivers/staging/lustre/lnet/libcfs/Makefile        |   2 +-
>  .../staging/lustre/lnet/libcfs/linux-tracefile.c   | 194 ---------------------
>  drivers/staging/lustre/lnet/libcfs/tracefile.c     | 184 ++++++++++++++++---
>  drivers/staging/lustre/lnet/libcfs/tracefile.h     |  79 ++-------
>  4 files changed, 170 insertions(+), 289 deletions(-)
>  delete mode 100644 drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
>
> diff --git a/drivers/staging/lustre/lnet/libcfs/Makefile b/drivers/staging/lustre/lnet/libcfs/Makefile
> index 5b13edc..cd96434 100644
> --- a/drivers/staging/lustre/lnet/libcfs/Makefile
> +++ b/drivers/staging/lustre/lnet/libcfs/Makefile
> @@ -4,7 +4,7 @@ ccflags-y += -I$(srctree)/drivers/staging/lustre/lustre/include
>  
>  obj-$(CONFIG_LNET) += libcfs.o
>  
> -libcfs-obj-y += linux-tracefile.o linux-debug.o
> +libcfs-obj-y += linux-debug.o
>  libcfs-obj-y += linux-crypto.o
>  libcfs-obj-y += linux-crypto-adler.o
>  
> diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
> deleted file mode 100644
> index 3af7722..0000000
> --- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
> +++ /dev/null
> @@ -1,194 +0,0 @@
> -// SPDX-License-Identifier: GPL-2.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.gnu.org/licenses/gpl-2.0.html
> - *
> - * GPL HEADER END
> - */
> -/*
> - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
> - * Use is subject to license terms.
> - *
> - * Copyright (c) 2012, Intel Corporation.
> - */
> -/*
> - * This file is part of Lustre, http://www.lustre.org/
> - * Lustre is a trademark of Sun Microsystems, Inc.
> - */
> -
> -#define DEBUG_SUBSYSTEM S_LNET
> -#define LUSTRE_TRACEFILE_PRIVATE
> -
> -#include <linux/slab.h>
> -#include <linux/mm.h>
> -#include "tracefile.h"
> -
> -/* percents to share the total debug memory for each type */
> -static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
> -	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
> -	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
> -	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
> -};
> -
> -char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
> -
> -int cfs_tracefile_init_arch(void)
> -{
> -	int i;
> -	int j;
> -	struct cfs_trace_cpu_data *tcd;
> -
> -	/* initialize trace_data */
> -	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
> -	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
> -		cfs_trace_data[i] =
> -			kmalloc_array(num_possible_cpus(),
> -				      sizeof(union cfs_trace_data_union),
> -				      GFP_KERNEL);
> -		if (!cfs_trace_data[i])
> -			goto out;
> -	}
> -
> -	/* arch related info initialized */
> -	cfs_tcd_for_each(tcd, i, j) {
> -		spin_lock_init(&tcd->tcd_lock);
> -		tcd->tcd_pages_factor = pages_factor[i];
> -		tcd->tcd_type = i;
> -		tcd->tcd_cpu = j;
> -	}
> -
> -	for (i = 0; i < num_possible_cpus(); i++)
> -		for (j = 0; j < 3; j++) {
> -			cfs_trace_console_buffers[i][j] =
> -				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
> -					GFP_KERNEL);
> -
> -			if (!cfs_trace_console_buffers[i][j])
> -				goto out;
> -		}
> -
> -	return 0;
> -
> -out:
> -	cfs_tracefile_fini_arch();
> -	pr_err("lnet: Not enough memory\n");
> -	return -ENOMEM;
> -}
> -
> -void cfs_tracefile_fini_arch(void)
> -{
> -	int i;
> -	int j;
> -
> -	for (i = 0; i < num_possible_cpus(); i++)
> -		for (j = 0; j < 3; j++) {
> -			kfree(cfs_trace_console_buffers[i][j]);
> -			cfs_trace_console_buffers[i][j] = NULL;
> -		}
> -
> -	for (i = 0; cfs_trace_data[i]; i++) {
> -		kfree(cfs_trace_data[i]);
> -		cfs_trace_data[i] = NULL;
> -	}
> -}
> -
> -enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
> -{
> -	if (in_irq())
> -		return CFS_TCD_TYPE_IRQ;
> -	if (in_softirq())
> -		return CFS_TCD_TYPE_SOFTIRQ;
> -	return CFS_TCD_TYPE_PROC;
> -}
> -
> -void
> -cfs_set_ptldebug_header(struct ptldebug_header *header,
> -			struct libcfs_debug_msg_data *msgdata,
> -			unsigned long stack)
> -{
> -	struct timespec64 ts;
> -
> -	ktime_get_real_ts64(&ts);
> -
> -	header->ph_subsys = msgdata->msg_subsys;
> -	header->ph_mask = msgdata->msg_mask;
> -	header->ph_cpu_id = smp_processor_id();
> -	header->ph_type = cfs_trace_buf_idx_get();
> -	/* y2038 safe since all user space treats this as unsigned, but
> -	 * will overflow in 2106
> -	 */
> -	header->ph_sec = (u32)ts.tv_sec;
> -	header->ph_usec = ts.tv_nsec / NSEC_PER_USEC;
> -	header->ph_stack = stack;
> -	header->ph_pid = current->pid;
> -	header->ph_line_num = msgdata->msg_line;
> -	header->ph_extern_pid = 0;
> -}
> -
> -static char *
> -dbghdr_to_err_string(struct ptldebug_header *hdr)
> -{
> -	switch (hdr->ph_subsys) {
> -	case S_LND:
> -	case S_LNET:
> -		return "LNetError";
> -	default:
> -		return "LustreError";
> -	}
> -}
> -
> -static char *
> -dbghdr_to_info_string(struct ptldebug_header *hdr)
> -{
> -	switch (hdr->ph_subsys) {
> -	case S_LND:
> -	case S_LNET:
> -		return "LNet";
> -	default:
> -		return "Lustre";
> -	}
> -}
> -
> -void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
> -			  const char *buf, int len, const char *file,
> -			  const char *fn)
> -{
> -	char *prefix = "Lustre", *ptype = NULL;
> -
> -	if (mask & D_EMERG) {
> -		prefix = dbghdr_to_err_string(hdr);
> -		ptype = KERN_EMERG;
> -	} else if (mask & D_ERROR) {
> -		prefix = dbghdr_to_err_string(hdr);
> -		ptype = KERN_ERR;
> -	} else if (mask & D_WARNING) {
> -		prefix = dbghdr_to_info_string(hdr);
> -		ptype = KERN_WARNING;
> -	} else if (mask & (D_CONSOLE | libcfs_printk)) {
> -		prefix = dbghdr_to_info_string(hdr);
> -		ptype = KERN_INFO;
> -	}
> -
> -	if (mask & D_CONSOLE) {
> -		pr_info("%s%s: %.*s", ptype, prefix, len, buf);
> -	} else {
> -		pr_info("%s%s: %d:%d:(%s:%d:%s()) %.*s", ptype, prefix,
> -			hdr->ph_pid, hdr->ph_extern_pid, file,
> -			hdr->ph_line_num, fn, len, buf);
> -	}
> -}
> diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
> index 6d567a9..229bbb8 100644
> --- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
> +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
> @@ -37,8 +37,6 @@
>   */
>  
>  #define DEBUG_SUBSYSTEM S_LNET
> -#define LUSTRE_TRACEFILE_PRIVATE
> -#define pr_fmt(fmt) "Lustre: " fmt
>  
>  #include <linux/ratelimit.h>
>  #include <linux/highmem.h>
> @@ -49,9 +47,19 @@
>  #include <linux/uaccess.h>
>  #include "tracefile.h"
>  
> -/* XXX move things up to the top, comment */
> +#define CFS_TRACE_CONSOLE_BUFFER_SIZE	1024
> +#define TCD_MAX_TYPES			8
> +
> +enum cfs_trace_buf_type {
> +	CFS_TCD_TYPE_PROC = 0,
> +	CFS_TCD_TYPE_SOFTIRQ,
> +	CFS_TCD_TYPE_IRQ,
> +	CFS_TCD_TYPE_MAX
> +};
> +
>  union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned;
>  
> +char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
>  char cfs_tracefile[TRACEFILE_NAME_SIZE];
>  long long cfs_tracefile_size = CFS_TRACEFILE_SIZE;
>  static struct tracefiled_ctl trace_tctl;
> @@ -145,11 +153,35 @@ void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
>  		spin_unlock(&tcd->tcd_lock);
>  }
>  
> -#define cfs_tcd_for_each_type_lock(tcd, i, cpu)			   \
> +#define cfs_tcd_for_each(tcd, i, j)					\
> +	for (i = 0; cfs_trace_data[i]; i++)				\
> +		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
> +		     j < num_possible_cpus();				\
> +		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
> +
> +
> +#define cfs_tcd_for_each_type_lock(tcd, i, cpu)				\
>  	for (i = 0; cfs_trace_data[i] &&				\
>  	     (tcd = &(*cfs_trace_data[i])[cpu].tcd) &&			\
>  	     cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
>  
> +enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
> +{
> +	if (in_irq())
> +		return CFS_TCD_TYPE_IRQ;
> +	if (in_softirq())
> +		return CFS_TCD_TYPE_SOFTIRQ;
> +	return CFS_TCD_TYPE_PROC;
> +}
> +
> +static inline char *cfs_trace_get_console_buffer(void)
> +{
> +	unsigned int i = get_cpu();
> +	unsigned int j = cfs_trace_buf_idx_get();
> +
> +	return cfs_trace_console_buffers[i][j];
> +}
> +
>  static inline struct cfs_trace_cpu_data *
>  cfs_trace_get_tcd(void)
>  {
> @@ -168,6 +200,77 @@ static inline void cfs_trace_put_tcd(struct cfs_trace_cpu_data *tcd)
>  	put_cpu();
>  }
>  
> +/* percents to share the total debug memory for each type */
> +static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
> +	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
> +	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
> +	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
> +};
> +
> +int cfs_tracefile_init_arch(void)
> +{
> +	struct cfs_trace_cpu_data *tcd;
> +	int i;
> +	int j;
> +
> +	/* initialize trace_data */
> +	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
> +	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
> +		cfs_trace_data[i] =
> +			kmalloc_array(num_possible_cpus(),
> +				      sizeof(union cfs_trace_data_union),
> +				      GFP_KERNEL);
> +		if (!cfs_trace_data[i])
> +			goto out_trace_data;
> +	}
> +
> +	/* arch related info initialized */
> +	cfs_tcd_for_each(tcd, i, j) {
> +		spin_lock_init(&tcd->tcd_lock);
> +		tcd->tcd_pages_factor = pages_factor[i];
> +		tcd->tcd_type = i;
> +		tcd->tcd_cpu = j;
> +	}
> +
> +	for (i = 0; i < num_possible_cpus(); i++)
> +		for (j = 0; j < 3; j++) {
> +			cfs_trace_console_buffers[i][j] =
> +				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
> +					GFP_KERNEL);
> +
> +			if (!cfs_trace_console_buffers[i][j])
> +				goto out_buffers;
> +		}
> +
> +	return 0;
> +
> +out_buffers:
> +	for (i = 0; cfs_trace_data[i]; i++) {
> +		kfree(cfs_trace_data[i]);
> +		cfs_trace_data[i] = NULL;
> +	}
> +out_trace_data:
> +	pr_err("lnet: Not enough memory\n");
> +	return -ENOMEM;
> +}
> +
> +void cfs_tracefile_fini_arch(void)
> +{
> +	int i;
> +	int j;
> +
> +	for (i = 0; i < num_possible_cpus(); i++)
> +		for (j = 0; j < 3; j++) {
> +			kfree(cfs_trace_console_buffers[i][j]);
> +			cfs_trace_console_buffers[i][j] = NULL;
> +		}
> +
> +	for (i = 0; cfs_trace_data[i]; i++) {
> +		kfree(cfs_trace_data[i]);
> +		cfs_trace_data[i] = NULL;
> +	}
> +}
> +
>  static inline struct cfs_trace_page *
>  cfs_tage_from_list(struct list_head *list)
>  {
> @@ -216,27 +319,6 @@ static void cfs_tage_to_tail(struct cfs_trace_page *tage,
>  	list_move_tail(&tage->linkage, queue);
>  }
>  
> -int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
> -			   struct list_head *stock)
> -{
> -	int i;
> -
> -	/*
> -	 * XXX nikita: do NOT call portals_debug_msg() (CDEBUG/ENTRY/EXIT)
> -	 * from here: this will lead to infinite recursion.
> -	 */
> -
> -	for (i = 0; i + tcd->tcd_cur_stock_pages < TCD_STOCK_PAGES ; ++i) {
> -		struct cfs_trace_page *tage;
> -
> -		tage = cfs_tage_alloc(gfp);
> -		if (!tage)
> -			break;
> -		list_add_tail(&tage->linkage, stock);
> -	}
> -	return i;
> -}
> -
>  /* return a page that has 'len' bytes left at the end */
>  static struct cfs_trace_page *
>  cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len)
> @@ -340,6 +422,57 @@ static struct cfs_trace_page *cfs_trace_get_tage(struct cfs_trace_cpu_data *tcd,
>  	return tage;
>  }
>  
> +
> +
> +static void cfs_set_ptldebug_header(struct ptldebug_header *header,
> +				    struct libcfs_debug_msg_data *msgdata,
> +				    unsigned long stack)
> +{
> +	struct timespec64 ts;
> +
> +	ktime_get_real_ts64(&ts);
> +
> +	header->ph_subsys = msgdata->msg_subsys;
> +	header->ph_mask = msgdata->msg_mask;
> +	header->ph_cpu_id = smp_processor_id();
> +	header->ph_type = cfs_trace_buf_idx_get();
> +	/* y2038 safe since all user space treats this as unsigned, but
> +	 * will overflow in 2106
> +	 */
> +	header->ph_sec = (u32)ts.tv_sec;
> +	header->ph_usec = ts.tv_nsec / NSEC_PER_USEC;
> +	header->ph_stack = stack;
> +	header->ph_pid = current->pid;
> +	header->ph_line_num = msgdata->msg_line;
> +	header->ph_extern_pid = 0;
> +}
> +
> +static void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
> +				 const char *buf, int len, const char *file,
> +				 const char *fn)
> +{
> +	char *prefix = "Lustre";
> +
> +	if (hdr->ph_subsys == S_LND || hdr->ph_subsys == S_LNET)
> +		prefix = "LNet";
> +
> +	if (mask & D_EMERG) {
> +		pr_emerg("%sError: %d:%d:(%s:%d:%s()) %.*s", prefix,
> +			 hdr->ph_pid, hdr->ph_extern_pid, file,
> +			 hdr->ph_line_num, fn, len, buf);
> +	} else if (mask & D_ERROR) {
> +		pr_err("%sError: %d:%d:(%s:%d:%s()) %.*s", prefix,
> +		       hdr->ph_pid, hdr->ph_extern_pid, file,
> +		       hdr->ph_line_num, fn, len, buf);
> +	} else if (mask & D_WARNING) {
> +		pr_warning("%s: %d:%d:(%s:%d:%s()) %.*s", prefix,
> +			   hdr->ph_pid, hdr->ph_extern_pid, file,
> +			   hdr->ph_line_num, fn, len, buf);
> +	} else if (mask & (D_CONSOLE | libcfs_printk)) {
> +		pr_info("%s: %.*s", prefix, len, buf);
> +	}
> +}
> +
>  int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata,
>  		     const char *format, ...)
>  {
> @@ -531,6 +664,7 @@ int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata,
>  	} else {
>  		string_buf = cfs_trace_get_console_buffer();
>  
> +		memset(string_buf, 0, CFS_TRACE_CONSOLE_BUFFER_SIZE);
>  		needed = 0;
>  		if (format1) {
>  			va_copy(ap, args);
> diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
> index f49a9ba..4c79009 100644
> --- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
> +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
> @@ -42,13 +42,6 @@
>  #include <linux/smp.h>
>  #include <linux/libcfs/libcfs.h>
>  
> -enum cfs_trace_buf_type {
> -	CFS_TCD_TYPE_PROC = 0,
> -	CFS_TCD_TYPE_SOFTIRQ,
> -	CFS_TCD_TYPE_IRQ,
> -	CFS_TCD_TYPE_MAX
> -};
> -
>  #define TRACEFILE_NAME_SIZE 1024
>  extern char cfs_tracefile[TRACEFILE_NAME_SIZE];
>  extern long long cfs_tracefile_size;
> @@ -60,9 +53,6 @@ enum cfs_trace_buf_type {
>  
>  void libcfs_run_debug_log_upcall(char *file);
>  
> -int  cfs_tracefile_init_arch(void);
> -void cfs_tracefile_fini_arch(void);
> -
>  int cfs_tracefile_dump_all_pages(char *filename);
>  void cfs_trace_debug_print(void);
>  void cfs_trace_flush_pages(void);
> @@ -92,22 +82,6 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
>  #define TCD_STOCK_PAGES (TCD_MAX_PAGES)
>  #define CFS_TRACEFILE_SIZE (500 << 20)
>  
> -#ifdef LUSTRE_TRACEFILE_PRIVATE
> -
> -/*
> - * Private declare for tracefile
> - */
> -#define TCD_MAX_PAGES (5 << (20 - PAGE_SHIFT))
> -#define TCD_STOCK_PAGES (TCD_MAX_PAGES)
> -
> -#define CFS_TRACEFILE_SIZE (500 << 20)
> -
> -/*
> - * Size of a buffer for sprinting console messages if we can't get a page
> - * from system
> - */
> -#define CFS_TRACE_CONSOLE_BUFFER_SIZE   1024
> -
>  union cfs_trace_data_union {
>  	struct cfs_trace_cpu_data {
>  		/*
> @@ -184,58 +158,25 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
>  	char __pad[L1_CACHE_ALIGN(sizeof(struct cfs_trace_cpu_data))];
>  };
>  
> -#define TCD_MAX_TYPES      8
> -extern union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS];
> -
> -#define cfs_tcd_for_each(tcd, i, j)				       \
> -	for (i = 0; cfs_trace_data[i]; i++)				\
> -		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
> -		     j < num_possible_cpus();				 \
> -		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
> -
> -void cfs_set_ptldebug_header(struct ptldebug_header *header,
> -			     struct libcfs_debug_msg_data *m,
> -			     unsigned long stack);
> -void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
> -			  const char *buf, int len, const char *file,
> -			  const char *fn);
> -
> -extern char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
> -enum cfs_trace_buf_type cfs_trace_buf_idx_get(void);
> -
> -static inline char *
> -cfs_trace_get_console_buffer(void)
> -{
> -	unsigned int i = get_cpu();
> -	unsigned int j = cfs_trace_buf_idx_get();
> -
> -	return cfs_trace_console_buffers[i][j];
> -}
> -
> -int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
> -			   struct list_head *stock);
> -
>  void cfs_trace_assertion_failed(const char *str,
>  				struct libcfs_debug_msg_data *m);
>  
>  /* ASSERTION that is safe to use within the debug system */
> -#define __LASSERT(cond)						 \
> -do {								    \
> +#define __LASSERT(cond)							\
> +do {									\
>  	if (unlikely(!(cond))) {					\
>  		LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_EMERG, NULL);     \
>  		cfs_trace_assertion_failed("ASSERTION("#cond") failed", \
> -					   &msgdata);		   \
> -	}							       \
> +					   &msgdata);			\
> +	}								\
>  } while (0)
>  
> -#define __LASSERT_TAGE_INVARIANT(tage)				  \
> -do {								    \
> -	__LASSERT(tage);					\
> -	__LASSERT(tage->page);				  \
> -	__LASSERT(tage->used <= PAGE_SIZE);			 \
> -	__LASSERT(page_count(tage->page) > 0);		      \
> +#define __LASSERT_TAGE_INVARIANT(tage)			\
> +do {							\
> +	__LASSERT(tage);				\
> +	__LASSERT(tage->page);				\
> +	__LASSERT(tage->used <= PAGE_SIZE);		\
> +	__LASSERT(page_count(tage->page) > 0);		\
>  } while (0)
>  
> -#endif	/* LUSTRE_TRACEFILE_PRIVATE */
> -
>  #endif /* __LIBCFS_TRACEFILE_H__ */
> -- 
> 1.8.3.1
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.lustre.org/pipermail/lustre-devel-lustre.org/attachments/20180626/5e05794e/attachment-0001.sig>

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

* [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c
  2018-06-26  0:29   ` NeilBrown
@ 2018-06-26  1:16     ` James Simmons
  0 siblings, 0 replies; 10+ messages in thread
From: James Simmons @ 2018-06-26  1:16 UTC (permalink / raw)
  To: lustre-devel


> > From: NeilBrown <neilb@suse.com>
> >
> > It's good to keep related code together. The merger exposed the
> > flaws of cfs_print_to_console() so rework it to behavior properly.
> 
> I'm sorry but I cannot apply this as it is.
> The patch contains various changes that are not mentioned at all in the
> above description, and the above description doesn't really say anything
> useful at all about why anything needed fixing.
> 
> You've moved content from tracefile.h into tracefile.c
> You've reformatted some code - lining up '\' for example
> You've removed some code (e.g. cfs_tracefile_refill_stock)
> You've added a memset into libcfs_debug_vmsg2
>
> I don't doubt that these are useful, but they don't all belong in the
> same patch that claims to just move code from linux-tracefile.c into
> tracefile.c
> 
> Sometimes it is necessary to combine lots of things in one patch, though
> we avoid it whenever possible.  When it cannot be avoided, the multiple
> changes *must* be described together with some indication of the reason
> that they are all interdependent.
> 
> It is important that patches can be reviewed easily.  This one cannot.

No problem. I can break it up. Yeah the remaining cruft bothered me as I
was tacking down why it was broken.

> > Signed-off-by: James Simmons <jsimmons@infradead.org>
> > ---
> >  drivers/staging/lustre/lnet/libcfs/Makefile        |   2 +-
> >  .../staging/lustre/lnet/libcfs/linux-tracefile.c   | 194 ---------------------
> >  drivers/staging/lustre/lnet/libcfs/tracefile.c     | 184 ++++++++++++++++---
> >  drivers/staging/lustre/lnet/libcfs/tracefile.h     |  79 ++-------
> >  4 files changed, 170 insertions(+), 289 deletions(-)
> >  delete mode 100644 drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
> >
> > diff --git a/drivers/staging/lustre/lnet/libcfs/Makefile b/drivers/staging/lustre/lnet/libcfs/Makefile
> > index 5b13edc..cd96434 100644
> > --- a/drivers/staging/lustre/lnet/libcfs/Makefile
> > +++ b/drivers/staging/lustre/lnet/libcfs/Makefile
> > @@ -4,7 +4,7 @@ ccflags-y += -I$(srctree)/drivers/staging/lustre/lustre/include
> >  
> >  obj-$(CONFIG_LNET) += libcfs.o
> >  
> > -libcfs-obj-y += linux-tracefile.o linux-debug.o
> > +libcfs-obj-y += linux-debug.o
> >  libcfs-obj-y += linux-crypto.o
> >  libcfs-obj-y += linux-crypto-adler.o
> >  
> > diff --git a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c b/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
> > deleted file mode 100644
> > index 3af7722..0000000
> > --- a/drivers/staging/lustre/lnet/libcfs/linux-tracefile.c
> > +++ /dev/null
> > @@ -1,194 +0,0 @@
> > -// SPDX-License-Identifier: GPL-2.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.gnu.org/licenses/gpl-2.0.html
> > - *
> > - * GPL HEADER END
> > - */
> > -/*
> > - * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
> > - * Use is subject to license terms.
> > - *
> > - * Copyright (c) 2012, Intel Corporation.
> > - */
> > -/*
> > - * This file is part of Lustre, http://www.lustre.org/
> > - * Lustre is a trademark of Sun Microsystems, Inc.
> > - */
> > -
> > -#define DEBUG_SUBSYSTEM S_LNET
> > -#define LUSTRE_TRACEFILE_PRIVATE
> > -
> > -#include <linux/slab.h>
> > -#include <linux/mm.h>
> > -#include "tracefile.h"
> > -
> > -/* percents to share the total debug memory for each type */
> > -static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
> > -	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
> > -	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
> > -	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
> > -};
> > -
> > -char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
> > -
> > -int cfs_tracefile_init_arch(void)
> > -{
> > -	int i;
> > -	int j;
> > -	struct cfs_trace_cpu_data *tcd;
> > -
> > -	/* initialize trace_data */
> > -	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
> > -	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
> > -		cfs_trace_data[i] =
> > -			kmalloc_array(num_possible_cpus(),
> > -				      sizeof(union cfs_trace_data_union),
> > -				      GFP_KERNEL);
> > -		if (!cfs_trace_data[i])
> > -			goto out;
> > -	}
> > -
> > -	/* arch related info initialized */
> > -	cfs_tcd_for_each(tcd, i, j) {
> > -		spin_lock_init(&tcd->tcd_lock);
> > -		tcd->tcd_pages_factor = pages_factor[i];
> > -		tcd->tcd_type = i;
> > -		tcd->tcd_cpu = j;
> > -	}
> > -
> > -	for (i = 0; i < num_possible_cpus(); i++)
> > -		for (j = 0; j < 3; j++) {
> > -			cfs_trace_console_buffers[i][j] =
> > -				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
> > -					GFP_KERNEL);
> > -
> > -			if (!cfs_trace_console_buffers[i][j])
> > -				goto out;
> > -		}
> > -
> > -	return 0;
> > -
> > -out:
> > -	cfs_tracefile_fini_arch();
> > -	pr_err("lnet: Not enough memory\n");
> > -	return -ENOMEM;
> > -}
> > -
> > -void cfs_tracefile_fini_arch(void)
> > -{
> > -	int i;
> > -	int j;
> > -
> > -	for (i = 0; i < num_possible_cpus(); i++)
> > -		for (j = 0; j < 3; j++) {
> > -			kfree(cfs_trace_console_buffers[i][j]);
> > -			cfs_trace_console_buffers[i][j] = NULL;
> > -		}
> > -
> > -	for (i = 0; cfs_trace_data[i]; i++) {
> > -		kfree(cfs_trace_data[i]);
> > -		cfs_trace_data[i] = NULL;
> > -	}
> > -}
> > -
> > -enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
> > -{
> > -	if (in_irq())
> > -		return CFS_TCD_TYPE_IRQ;
> > -	if (in_softirq())
> > -		return CFS_TCD_TYPE_SOFTIRQ;
> > -	return CFS_TCD_TYPE_PROC;
> > -}
> > -
> > -void
> > -cfs_set_ptldebug_header(struct ptldebug_header *header,
> > -			struct libcfs_debug_msg_data *msgdata,
> > -			unsigned long stack)
> > -{
> > -	struct timespec64 ts;
> > -
> > -	ktime_get_real_ts64(&ts);
> > -
> > -	header->ph_subsys = msgdata->msg_subsys;
> > -	header->ph_mask = msgdata->msg_mask;
> > -	header->ph_cpu_id = smp_processor_id();
> > -	header->ph_type = cfs_trace_buf_idx_get();
> > -	/* y2038 safe since all user space treats this as unsigned, but
> > -	 * will overflow in 2106
> > -	 */
> > -	header->ph_sec = (u32)ts.tv_sec;
> > -	header->ph_usec = ts.tv_nsec / NSEC_PER_USEC;
> > -	header->ph_stack = stack;
> > -	header->ph_pid = current->pid;
> > -	header->ph_line_num = msgdata->msg_line;
> > -	header->ph_extern_pid = 0;
> > -}
> > -
> > -static char *
> > -dbghdr_to_err_string(struct ptldebug_header *hdr)
> > -{
> > -	switch (hdr->ph_subsys) {
> > -	case S_LND:
> > -	case S_LNET:
> > -		return "LNetError";
> > -	default:
> > -		return "LustreError";
> > -	}
> > -}
> > -
> > -static char *
> > -dbghdr_to_info_string(struct ptldebug_header *hdr)
> > -{
> > -	switch (hdr->ph_subsys) {
> > -	case S_LND:
> > -	case S_LNET:
> > -		return "LNet";
> > -	default:
> > -		return "Lustre";
> > -	}
> > -}
> > -
> > -void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
> > -			  const char *buf, int len, const char *file,
> > -			  const char *fn)
> > -{
> > -	char *prefix = "Lustre", *ptype = NULL;
> > -
> > -	if (mask & D_EMERG) {
> > -		prefix = dbghdr_to_err_string(hdr);
> > -		ptype = KERN_EMERG;
> > -	} else if (mask & D_ERROR) {
> > -		prefix = dbghdr_to_err_string(hdr);
> > -		ptype = KERN_ERR;
> > -	} else if (mask & D_WARNING) {
> > -		prefix = dbghdr_to_info_string(hdr);
> > -		ptype = KERN_WARNING;
> > -	} else if (mask & (D_CONSOLE | libcfs_printk)) {
> > -		prefix = dbghdr_to_info_string(hdr);
> > -		ptype = KERN_INFO;
> > -	}
> > -
> > -	if (mask & D_CONSOLE) {
> > -		pr_info("%s%s: %.*s", ptype, prefix, len, buf);
> > -	} else {
> > -		pr_info("%s%s: %d:%d:(%s:%d:%s()) %.*s", ptype, prefix,
> > -			hdr->ph_pid, hdr->ph_extern_pid, file,
> > -			hdr->ph_line_num, fn, len, buf);
> > -	}
> > -}
> > diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
> > index 6d567a9..229bbb8 100644
> > --- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
> > +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
> > @@ -37,8 +37,6 @@
> >   */
> >  
> >  #define DEBUG_SUBSYSTEM S_LNET
> > -#define LUSTRE_TRACEFILE_PRIVATE
> > -#define pr_fmt(fmt) "Lustre: " fmt
> >  
> >  #include <linux/ratelimit.h>
> >  #include <linux/highmem.h>
> > @@ -49,9 +47,19 @@
> >  #include <linux/uaccess.h>
> >  #include "tracefile.h"
> >  
> > -/* XXX move things up to the top, comment */
> > +#define CFS_TRACE_CONSOLE_BUFFER_SIZE	1024
> > +#define TCD_MAX_TYPES			8
> > +
> > +enum cfs_trace_buf_type {
> > +	CFS_TCD_TYPE_PROC = 0,
> > +	CFS_TCD_TYPE_SOFTIRQ,
> > +	CFS_TCD_TYPE_IRQ,
> > +	CFS_TCD_TYPE_MAX
> > +};
> > +
> >  union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS] __cacheline_aligned;
> >  
> > +char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
> >  char cfs_tracefile[TRACEFILE_NAME_SIZE];
> >  long long cfs_tracefile_size = CFS_TRACEFILE_SIZE;
> >  static struct tracefiled_ctl trace_tctl;
> > @@ -145,11 +153,35 @@ void cfs_trace_unlock_tcd(struct cfs_trace_cpu_data *tcd, int walking)
> >  		spin_unlock(&tcd->tcd_lock);
> >  }
> >  
> > -#define cfs_tcd_for_each_type_lock(tcd, i, cpu)			   \
> > +#define cfs_tcd_for_each(tcd, i, j)					\
> > +	for (i = 0; cfs_trace_data[i]; i++)				\
> > +		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
> > +		     j < num_possible_cpus();				\
> > +		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
> > +
> > +
> > +#define cfs_tcd_for_each_type_lock(tcd, i, cpu)				\
> >  	for (i = 0; cfs_trace_data[i] &&				\
> >  	     (tcd = &(*cfs_trace_data[i])[cpu].tcd) &&			\
> >  	     cfs_trace_lock_tcd(tcd, 1); cfs_trace_unlock_tcd(tcd, 1), i++)
> >  
> > +enum cfs_trace_buf_type cfs_trace_buf_idx_get(void)
> > +{
> > +	if (in_irq())
> > +		return CFS_TCD_TYPE_IRQ;
> > +	if (in_softirq())
> > +		return CFS_TCD_TYPE_SOFTIRQ;
> > +	return CFS_TCD_TYPE_PROC;
> > +}
> > +
> > +static inline char *cfs_trace_get_console_buffer(void)
> > +{
> > +	unsigned int i = get_cpu();
> > +	unsigned int j = cfs_trace_buf_idx_get();
> > +
> > +	return cfs_trace_console_buffers[i][j];
> > +}
> > +
> >  static inline struct cfs_trace_cpu_data *
> >  cfs_trace_get_tcd(void)
> >  {
> > @@ -168,6 +200,77 @@ static inline void cfs_trace_put_tcd(struct cfs_trace_cpu_data *tcd)
> >  	put_cpu();
> >  }
> >  
> > +/* percents to share the total debug memory for each type */
> > +static unsigned int pages_factor[CFS_TCD_TYPE_MAX] = {
> > +	80,  /* 80% pages for CFS_TCD_TYPE_PROC */
> > +	10,  /* 10% pages for CFS_TCD_TYPE_SOFTIRQ */
> > +	10   /* 10% pages for CFS_TCD_TYPE_IRQ */
> > +};
> > +
> > +int cfs_tracefile_init_arch(void)
> > +{
> > +	struct cfs_trace_cpu_data *tcd;
> > +	int i;
> > +	int j;
> > +
> > +	/* initialize trace_data */
> > +	memset(cfs_trace_data, 0, sizeof(cfs_trace_data));
> > +	for (i = 0; i < CFS_TCD_TYPE_MAX; i++) {
> > +		cfs_trace_data[i] =
> > +			kmalloc_array(num_possible_cpus(),
> > +				      sizeof(union cfs_trace_data_union),
> > +				      GFP_KERNEL);
> > +		if (!cfs_trace_data[i])
> > +			goto out_trace_data;
> > +	}
> > +
> > +	/* arch related info initialized */
> > +	cfs_tcd_for_each(tcd, i, j) {
> > +		spin_lock_init(&tcd->tcd_lock);
> > +		tcd->tcd_pages_factor = pages_factor[i];
> > +		tcd->tcd_type = i;
> > +		tcd->tcd_cpu = j;
> > +	}
> > +
> > +	for (i = 0; i < num_possible_cpus(); i++)
> > +		for (j = 0; j < 3; j++) {
> > +			cfs_trace_console_buffers[i][j] =
> > +				kmalloc(CFS_TRACE_CONSOLE_BUFFER_SIZE,
> > +					GFP_KERNEL);
> > +
> > +			if (!cfs_trace_console_buffers[i][j])
> > +				goto out_buffers;
> > +		}
> > +
> > +	return 0;
> > +
> > +out_buffers:
> > +	for (i = 0; cfs_trace_data[i]; i++) {
> > +		kfree(cfs_trace_data[i]);
> > +		cfs_trace_data[i] = NULL;
> > +	}
> > +out_trace_data:
> > +	pr_err("lnet: Not enough memory\n");
> > +	return -ENOMEM;
> > +}
> > +
> > +void cfs_tracefile_fini_arch(void)
> > +{
> > +	int i;
> > +	int j;
> > +
> > +	for (i = 0; i < num_possible_cpus(); i++)
> > +		for (j = 0; j < 3; j++) {
> > +			kfree(cfs_trace_console_buffers[i][j]);
> > +			cfs_trace_console_buffers[i][j] = NULL;
> > +		}
> > +
> > +	for (i = 0; cfs_trace_data[i]; i++) {
> > +		kfree(cfs_trace_data[i]);
> > +		cfs_trace_data[i] = NULL;
> > +	}
> > +}
> > +
> >  static inline struct cfs_trace_page *
> >  cfs_tage_from_list(struct list_head *list)
> >  {
> > @@ -216,27 +319,6 @@ static void cfs_tage_to_tail(struct cfs_trace_page *tage,
> >  	list_move_tail(&tage->linkage, queue);
> >  }
> >  
> > -int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
> > -			   struct list_head *stock)
> > -{
> > -	int i;
> > -
> > -	/*
> > -	 * XXX nikita: do NOT call portals_debug_msg() (CDEBUG/ENTRY/EXIT)
> > -	 * from here: this will lead to infinite recursion.
> > -	 */
> > -
> > -	for (i = 0; i + tcd->tcd_cur_stock_pages < TCD_STOCK_PAGES ; ++i) {
> > -		struct cfs_trace_page *tage;
> > -
> > -		tage = cfs_tage_alloc(gfp);
> > -		if (!tage)
> > -			break;
> > -		list_add_tail(&tage->linkage, stock);
> > -	}
> > -	return i;
> > -}
> > -
> >  /* return a page that has 'len' bytes left at the end */
> >  static struct cfs_trace_page *
> >  cfs_trace_get_tage_try(struct cfs_trace_cpu_data *tcd, unsigned long len)
> > @@ -340,6 +422,57 @@ static struct cfs_trace_page *cfs_trace_get_tage(struct cfs_trace_cpu_data *tcd,
> >  	return tage;
> >  }
> >  
> > +
> > +
> > +static void cfs_set_ptldebug_header(struct ptldebug_header *header,
> > +				    struct libcfs_debug_msg_data *msgdata,
> > +				    unsigned long stack)
> > +{
> > +	struct timespec64 ts;
> > +
> > +	ktime_get_real_ts64(&ts);
> > +
> > +	header->ph_subsys = msgdata->msg_subsys;
> > +	header->ph_mask = msgdata->msg_mask;
> > +	header->ph_cpu_id = smp_processor_id();
> > +	header->ph_type = cfs_trace_buf_idx_get();
> > +	/* y2038 safe since all user space treats this as unsigned, but
> > +	 * will overflow in 2106
> > +	 */
> > +	header->ph_sec = (u32)ts.tv_sec;
> > +	header->ph_usec = ts.tv_nsec / NSEC_PER_USEC;
> > +	header->ph_stack = stack;
> > +	header->ph_pid = current->pid;
> > +	header->ph_line_num = msgdata->msg_line;
> > +	header->ph_extern_pid = 0;
> > +}
> > +
> > +static void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
> > +				 const char *buf, int len, const char *file,
> > +				 const char *fn)
> > +{
> > +	char *prefix = "Lustre";
> > +
> > +	if (hdr->ph_subsys == S_LND || hdr->ph_subsys == S_LNET)
> > +		prefix = "LNet";
> > +
> > +	if (mask & D_EMERG) {
> > +		pr_emerg("%sError: %d:%d:(%s:%d:%s()) %.*s", prefix,
> > +			 hdr->ph_pid, hdr->ph_extern_pid, file,
> > +			 hdr->ph_line_num, fn, len, buf);
> > +	} else if (mask & D_ERROR) {
> > +		pr_err("%sError: %d:%d:(%s:%d:%s()) %.*s", prefix,
> > +		       hdr->ph_pid, hdr->ph_extern_pid, file,
> > +		       hdr->ph_line_num, fn, len, buf);
> > +	} else if (mask & D_WARNING) {
> > +		pr_warning("%s: %d:%d:(%s:%d:%s()) %.*s", prefix,
> > +			   hdr->ph_pid, hdr->ph_extern_pid, file,
> > +			   hdr->ph_line_num, fn, len, buf);
> > +	} else if (mask & (D_CONSOLE | libcfs_printk)) {
> > +		pr_info("%s: %.*s", prefix, len, buf);
> > +	}
> > +}
> > +
> >  int libcfs_debug_msg(struct libcfs_debug_msg_data *msgdata,
> >  		     const char *format, ...)
> >  {
> > @@ -531,6 +664,7 @@ int libcfs_debug_vmsg2(struct libcfs_debug_msg_data *msgdata,
> >  	} else {
> >  		string_buf = cfs_trace_get_console_buffer();
> >  
> > +		memset(string_buf, 0, CFS_TRACE_CONSOLE_BUFFER_SIZE);
> >  		needed = 0;
> >  		if (format1) {
> >  			va_copy(ap, args);
> > diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.h b/drivers/staging/lustre/lnet/libcfs/tracefile.h
> > index f49a9ba..4c79009 100644
> > --- a/drivers/staging/lustre/lnet/libcfs/tracefile.h
> > +++ b/drivers/staging/lustre/lnet/libcfs/tracefile.h
> > @@ -42,13 +42,6 @@
> >  #include <linux/smp.h>
> >  #include <linux/libcfs/libcfs.h>
> >  
> > -enum cfs_trace_buf_type {
> > -	CFS_TCD_TYPE_PROC = 0,
> > -	CFS_TCD_TYPE_SOFTIRQ,
> > -	CFS_TCD_TYPE_IRQ,
> > -	CFS_TCD_TYPE_MAX
> > -};
> > -
> >  #define TRACEFILE_NAME_SIZE 1024
> >  extern char cfs_tracefile[TRACEFILE_NAME_SIZE];
> >  extern long long cfs_tracefile_size;
> > @@ -60,9 +53,6 @@ enum cfs_trace_buf_type {
> >  
> >  void libcfs_run_debug_log_upcall(char *file);
> >  
> > -int  cfs_tracefile_init_arch(void);
> > -void cfs_tracefile_fini_arch(void);
> > -
> >  int cfs_tracefile_dump_all_pages(char *filename);
> >  void cfs_trace_debug_print(void);
> >  void cfs_trace_flush_pages(void);
> > @@ -92,22 +82,6 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
> >  #define TCD_STOCK_PAGES (TCD_MAX_PAGES)
> >  #define CFS_TRACEFILE_SIZE (500 << 20)
> >  
> > -#ifdef LUSTRE_TRACEFILE_PRIVATE
> > -
> > -/*
> > - * Private declare for tracefile
> > - */
> > -#define TCD_MAX_PAGES (5 << (20 - PAGE_SHIFT))
> > -#define TCD_STOCK_PAGES (TCD_MAX_PAGES)
> > -
> > -#define CFS_TRACEFILE_SIZE (500 << 20)
> > -
> > -/*
> > - * Size of a buffer for sprinting console messages if we can't get a page
> > - * from system
> > - */
> > -#define CFS_TRACE_CONSOLE_BUFFER_SIZE   1024
> > -
> >  union cfs_trace_data_union {
> >  	struct cfs_trace_cpu_data {
> >  		/*
> > @@ -184,58 +158,25 @@ int cfs_trace_copyout_string(char __user *usr_buffer, int usr_buffer_nob,
> >  	char __pad[L1_CACHE_ALIGN(sizeof(struct cfs_trace_cpu_data))];
> >  };
> >  
> > -#define TCD_MAX_TYPES      8
> > -extern union cfs_trace_data_union (*cfs_trace_data[TCD_MAX_TYPES])[NR_CPUS];
> > -
> > -#define cfs_tcd_for_each(tcd, i, j)				       \
> > -	for (i = 0; cfs_trace_data[i]; i++)				\
> > -		for (j = 0, ((tcd) = &(*cfs_trace_data[i])[j].tcd);	\
> > -		     j < num_possible_cpus();				 \
> > -		     j++, (tcd) = &(*cfs_trace_data[i])[j].tcd)
> > -
> > -void cfs_set_ptldebug_header(struct ptldebug_header *header,
> > -			     struct libcfs_debug_msg_data *m,
> > -			     unsigned long stack);
> > -void cfs_print_to_console(struct ptldebug_header *hdr, int mask,
> > -			  const char *buf, int len, const char *file,
> > -			  const char *fn);
> > -
> > -extern char *cfs_trace_console_buffers[NR_CPUS][CFS_TCD_TYPE_MAX];
> > -enum cfs_trace_buf_type cfs_trace_buf_idx_get(void);
> > -
> > -static inline char *
> > -cfs_trace_get_console_buffer(void)
> > -{
> > -	unsigned int i = get_cpu();
> > -	unsigned int j = cfs_trace_buf_idx_get();
> > -
> > -	return cfs_trace_console_buffers[i][j];
> > -}
> > -
> > -int cfs_trace_refill_stock(struct cfs_trace_cpu_data *tcd, gfp_t gfp,
> > -			   struct list_head *stock);
> > -
> >  void cfs_trace_assertion_failed(const char *str,
> >  				struct libcfs_debug_msg_data *m);
> >  
> >  /* ASSERTION that is safe to use within the debug system */
> > -#define __LASSERT(cond)						 \
> > -do {								    \
> > +#define __LASSERT(cond)							\
> > +do {									\
> >  	if (unlikely(!(cond))) {					\
> >  		LIBCFS_DEBUG_MSG_DATA_DECL(msgdata, D_EMERG, NULL);     \
> >  		cfs_trace_assertion_failed("ASSERTION("#cond") failed", \
> > -					   &msgdata);		   \
> > -	}							       \
> > +					   &msgdata);			\
> > +	}								\
> >  } while (0)
> >  
> > -#define __LASSERT_TAGE_INVARIANT(tage)				  \
> > -do {								    \
> > -	__LASSERT(tage);					\
> > -	__LASSERT(tage->page);				  \
> > -	__LASSERT(tage->used <= PAGE_SIZE);			 \
> > -	__LASSERT(page_count(tage->page) > 0);		      \
> > +#define __LASSERT_TAGE_INVARIANT(tage)			\
> > +do {							\
> > +	__LASSERT(tage);				\
> > +	__LASSERT(tage->page);				\
> > +	__LASSERT(tage->used <= PAGE_SIZE);		\
> > +	__LASSERT(page_count(tage->page) > 0);		\
> >  } while (0)
> >  
> > -#endif	/* LUSTRE_TRACEFILE_PRIVATE */
> > -
> >  #endif /* __LIBCFS_TRACEFILE_H__ */
> > -- 
> > 1.8.3.1
> 

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

end of thread, other threads:[~2018-06-26  1:16 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-06-25 21:42 [lustre-devel] [PATCH v2 0/7] lustre: libcfs: tracefile cleanups James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 1/7] lustre: libcfs: move tracefile locking from linux-tracefile.c to tracefile.c James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 2/7] lustre: libcfs: open code cfs_trace_max_debug_mb() into cfs_trace_set_debug_mb() James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 3/7] lustre: libcfs: move tcd locking across to tracefile.c James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c James Simmons
2018-06-26  0:29   ` NeilBrown
2018-06-26  1:16     ` James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 5/7] lustre: libcfs: fold cfs_tracefile_*_arch into their only callers James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 6/7] lustre: libcfs: renamed CFS_TCD_TYPE_MAX to CFS_TCD_TYPE_CNT James Simmons
2018-06-25 21:42 ` [lustre-devel] [PATCH v2 7/7] lustre: libcfs: discard TCD_MAX_TYPES James Simmons

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.