[lustre-devel] [PATCH v2 4/7] lustre: libcfs: merge linux-tracefile.c into tracefile.c
James Simmons
jsimmons at infradead.org
Mon Jun 25 18:16:33 PDT 2018
> > From: NeilBrown <neilb at 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 at 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
>
More information about the lustre-devel
mailing list