diff --git a/lnet/libcfs/debug.c b/lnet/libcfs/debug.c index f4cfa63b93e8997ca5fd8e2fffae1c70716ee3e4..bf108bbc410fe160be72befe408ee1375b57b104 100644 --- a/lnet/libcfs/debug.c +++ b/lnet/libcfs/debug.c @@ -41,6 +41,10 @@ unsigned int libcfs_debug = (D_EMERG | D_ERROR | D_WARNING | D_CONSOLE | D_NETERROR | D_HA | D_CONFIG | D_IOCTL); EXPORT_SYMBOL(libcfs_debug); +int libcfs_debug_mb = -1; +EXPORT_SYMBOL(libcfs_debug_mb); +CFS_MODULE_PARM(libcfs_debug_mb, "i", int, 0644, "Total debug buffer size."); + unsigned int libcfs_printk = D_CANTMASK; EXPORT_SYMBOL(libcfs_printk); @@ -426,12 +430,21 @@ void libcfs_debug_dumplog(void) int libcfs_debug_init(unsigned long bufsize) { - int rc; + int rc = 0; + int max = libcfs_debug_mb; cfs_waitq_init(&debug_ctlwq); libcfs_console_max_delay = CDEBUG_DEFAULT_MAX_DELAY; libcfs_console_min_delay = CDEBUG_DEFAULT_MIN_DELAY; - rc = tracefile_init(); + /* 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 (max > trace_max_debug_mb() || max < num_possible_cpus()) { + max = TCD_MAX_PAGES; + } else { + max = (max / num_possible_cpus()); + max = (max << (20 - CFS_PAGE_SHIFT)); + } + rc = tracefile_init(max); if (rc == 0) libcfs_register_panic_notifier(); diff --git a/lnet/libcfs/tracefile.c b/lnet/libcfs/tracefile.c index a0b61ab3b2804a6fcdfd4acc54f6ec5e6e6a6800..4a5cf5245d023d2ead23c3f17c36ec28253fb83d 100644 --- a/lnet/libcfs/tracefile.c +++ b/lnet/libcfs/tracefile.c @@ -1046,7 +1046,7 @@ void trace_stop_thread(void) mutex_up(&trace_thread_sem); } -int tracefile_init(void) +int tracefile_init(int max_pages) { struct trace_cpu_data *tcd; int i; @@ -1067,7 +1067,7 @@ int tracefile_init(void) tcd->tcd_cur_pages = 0; tcd->tcd_cur_stock_pages = 0; tcd->tcd_cur_daemon_pages = 0; - tcd->tcd_max_pages = (TCD_MAX_PAGES * factor) / 100; + tcd->tcd_max_pages = (max_pages * factor) / 100; LASSERT(tcd->tcd_max_pages > 0); tcd->tcd_shutting_down = 0; } diff --git a/lnet/libcfs/tracefile.h b/lnet/libcfs/tracefile.h index a9965d1cd00cb84d7de7f6e4a2f7b03863bbcd18..a9f534f95242748aad6ffac95387c30bbe0af74b 100644 --- a/lnet/libcfs/tracefile.h +++ b/lnet/libcfs/tracefile.h @@ -22,7 +22,7 @@ void trace_debug_print(void); void trace_flush_pages(void); int trace_start_thread(void); void trace_stop_thread(void); -int tracefile_init(void); +int tracefile_init(int max_pages); void tracefile_exit(void); @@ -45,6 +45,10 @@ extern void libcfs_register_panic_notifier(void); extern void libcfs_unregister_panic_notifier(void); extern int libcfs_panic_in_progress; +#define TCD_MAX_PAGES (5 << (20 - CFS_PAGE_SHIFT)) +#define TCD_STOCK_PAGES (TCD_MAX_PAGES) +#define TRACEFILE_SIZE (500 << 20) + #ifdef LUSTRE_TRACEFILE_PRIVATE /*