Patch from Fillod Stephane:
You will find in the attached file "syslog.patch" a patch which adds config options to set at compile time the size of the circular buffer, and some documentation update.
This commit is contained in:
@@ -56,6 +56,14 @@ config CONFIG_FEATURE_IPC_SYSLOG
|
||||
entire filesystem, which may cause your system to
|
||||
break badly.
|
||||
|
||||
config CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE
|
||||
int " Circular buffer size in Kbytes (minimum 4KB)"
|
||||
default 16
|
||||
depends on CONFIG_FEATURE_IPC_SYSLOG
|
||||
help
|
||||
This option sets the size of the circular buffer
|
||||
used to record system log messages.
|
||||
|
||||
config CONFIG_LOGREAD
|
||||
bool " logread"
|
||||
default y
|
||||
@@ -66,6 +74,17 @@ config CONFIG_LOGREAD
|
||||
utility will allow you to read the messages that are
|
||||
stored in the syslogd circular buffer.
|
||||
|
||||
config CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
bool " logread double buffering"
|
||||
default n
|
||||
depends on CONFIG_LOGREAD
|
||||
help
|
||||
'logread' ouput to slow serial terminals can have
|
||||
side effects on syslog because of the semaphore.
|
||||
This option make logread to double buffer copy
|
||||
from circular buffer, minimizing semaphore
|
||||
contention at some minor memory expense.
|
||||
|
||||
config CONFIG_KLOGD
|
||||
bool "klogd"
|
||||
default n
|
||||
|
||||
@@ -108,8 +108,7 @@ extern int logread_main(int argc, char **argv)
|
||||
i = follow ? buf->tail : buf->head;
|
||||
|
||||
do {
|
||||
#undef RC_LOGREAD
|
||||
#ifdef RC_LOGREAD
|
||||
#ifdef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
char *buf_data;
|
||||
int log_len,j;
|
||||
#endif
|
||||
@@ -128,7 +127,7 @@ extern int logread_main(int argc, char **argv)
|
||||
}
|
||||
|
||||
// Read Memory
|
||||
#ifdef RC_LOGREAD
|
||||
#ifdef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
log_len = buf->tail - i;
|
||||
if (log_len < 0)
|
||||
log_len += buf->size;
|
||||
@@ -155,7 +154,7 @@ extern int logread_main(int argc, char **argv)
|
||||
// release the lock on the log chain
|
||||
sem_up(log_semid);
|
||||
|
||||
#ifdef RC_LOGREAD
|
||||
#ifdef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
for (j=0; j < log_len; j+=strlen(buf_data+j)+1) {
|
||||
printf("%s", buf_data+j);
|
||||
if (follow)
|
||||
|
||||
@@ -94,6 +94,12 @@ static int local_logging = FALSE;
|
||||
|
||||
/* circular buffer variables/structures */
|
||||
#ifdef CONFIG_FEATURE_IPC_SYSLOG
|
||||
|
||||
#if CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE < 4
|
||||
#error Sorry, you must set the syslogd buffer size to at least 4KB.
|
||||
#error Please check CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE
|
||||
#endif
|
||||
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/sem.h>
|
||||
#include <sys/shm.h>
|
||||
@@ -114,7 +120,7 @@ static struct sembuf SMwdn[3] = { {0, 0}, {1, 0}, {1, +1} }; // set SMwdn
|
||||
|
||||
static int shmid = -1; // ipc shared memory id
|
||||
static int s_semid = -1; // ipc semaphore id
|
||||
static int data_size = 16000; // default data size
|
||||
static int shm_size = ((CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE)*1024); // default shm size
|
||||
static int circular_logging = FALSE;
|
||||
|
||||
/*
|
||||
@@ -156,7 +162,7 @@ void ipcsyslog_cleanup(void)
|
||||
void ipcsyslog_init(void)
|
||||
{
|
||||
if (buf == NULL) {
|
||||
if ((shmid = shmget(KEY_ID, data_size, IPC_CREAT | 1023)) == -1) {
|
||||
if ((shmid = shmget(KEY_ID, shm_size, IPC_CREAT | 1023)) == -1) {
|
||||
bb_perror_msg_and_die("shmget");
|
||||
}
|
||||
|
||||
@@ -164,7 +170,7 @@ void ipcsyslog_init(void)
|
||||
bb_perror_msg_and_die("shmat");
|
||||
}
|
||||
|
||||
buf->size = data_size - sizeof(*buf);
|
||||
buf->size = shm_size - sizeof(*buf);
|
||||
buf->head = buf->tail = 0;
|
||||
|
||||
// we'll trust the OS to set initial semval to 0 (let's hope)
|
||||
@@ -654,7 +660,7 @@ extern int syslogd_main(int argc, char **argv)
|
||||
if (optarg) {
|
||||
int buf_size = atoi(optarg);
|
||||
if (buf_size >= 4) {
|
||||
data_size = buf_size;
|
||||
shm_size = buf_size;
|
||||
}
|
||||
}
|
||||
circular_logging = TRUE;
|
||||
|
||||
Reference in New Issue
Block a user