提交 6d1e9a42 编写于 作者: L Linus Torvalds

Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6

* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6:
  pstore: cleanups to pstore_dump()
  [IA64] New syscalls for 2.6.39
...@@ -315,11 +315,15 @@ ...@@ -315,11 +315,15 @@
#define __NR_fanotify_init 1323 #define __NR_fanotify_init 1323
#define __NR_fanotify_mark 1324 #define __NR_fanotify_mark 1324
#define __NR_prlimit64 1325 #define __NR_prlimit64 1325
#define __NR_name_to_handle_at 1326
#define __NR_open_by_handle_at 1327
#define __NR_clock_adjtime 1328
#define __NR_syncfs 1329
#ifdef __KERNEL__ #ifdef __KERNEL__
#define NR_syscalls 302 /* length of syscall table */ #define NR_syscalls 306 /* length of syscall table */
/* /*
* The following defines stop scripts/checksyscalls.sh from complaining about * The following defines stop scripts/checksyscalls.sh from complaining about
......
...@@ -1771,6 +1771,10 @@ sys_call_table: ...@@ -1771,6 +1771,10 @@ sys_call_table:
data8 sys_fanotify_init data8 sys_fanotify_init
data8 sys_fanotify_mark data8 sys_fanotify_mark
data8 sys_prlimit64 // 1325 data8 sys_prlimit64 // 1325
data8 sys_name_to_handle_at
data8 sys_open_by_handle_at
data8 sys_clock_adjtime
data8 sys_syncfs
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls .org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
#endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */ #endif /* __IA64_ASM_PARAVIRTUALIZED_NATIVE */
...@@ -48,6 +48,10 @@ void pstore_set_kmsg_bytes(int bytes) ...@@ -48,6 +48,10 @@ void pstore_set_kmsg_bytes(int bytes)
/* Tag each group of saved records with a sequence number */ /* Tag each group of saved records with a sequence number */
static int oopscount; static int oopscount;
static char *reason_str[] = {
"Oops", "Panic", "Kexec", "Restart", "Halt", "Poweroff", "Emergency"
};
/* /*
* callback from kmsg_dump. (s2,l2) has the most recently * callback from kmsg_dump. (s2,l2) has the most recently
* written bytes, older bytes are in (s1,l1). Save as much * written bytes, older bytes are in (s1,l1). Save as much
...@@ -61,15 +65,20 @@ static void pstore_dump(struct kmsg_dumper *dumper, ...@@ -61,15 +65,20 @@ static void pstore_dump(struct kmsg_dumper *dumper,
unsigned long s1_start, s2_start; unsigned long s1_start, s2_start;
unsigned long l1_cpy, l2_cpy; unsigned long l1_cpy, l2_cpy;
unsigned long size, total = 0; unsigned long size, total = 0;
char *dst; char *dst, *why;
u64 id; u64 id;
int hsize, part = 1; int hsize, part = 1;
if (reason < ARRAY_SIZE(reason_str))
why = reason_str[reason];
else
why = "Unknown";
mutex_lock(&psinfo->buf_mutex); mutex_lock(&psinfo->buf_mutex);
oopscount++; oopscount++;
while (total < kmsg_bytes) { while (total < kmsg_bytes) {
dst = psinfo->buf; dst = psinfo->buf;
hsize = sprintf(dst, "Oops#%d Part%d\n", oopscount, part++); hsize = sprintf(dst, "%s#%d Part%d\n", why, oopscount, part++);
size = psinfo->bufsize - hsize; size = psinfo->bufsize - hsize;
dst += hsize; dst += hsize;
...@@ -86,7 +95,7 @@ static void pstore_dump(struct kmsg_dumper *dumper, ...@@ -86,7 +95,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
memcpy(dst + l1_cpy, s2 + s2_start, l2_cpy); memcpy(dst + l1_cpy, s2 + s2_start, l2_cpy);
id = psinfo->write(PSTORE_TYPE_DMESG, hsize + l1_cpy + l2_cpy); id = psinfo->write(PSTORE_TYPE_DMESG, hsize + l1_cpy + l2_cpy);
if (pstore_is_mounted()) if (reason == KMSG_DUMP_OOPS && pstore_is_mounted())
pstore_mkfile(PSTORE_TYPE_DMESG, psinfo->name, id, pstore_mkfile(PSTORE_TYPE_DMESG, psinfo->name, id,
psinfo->buf, hsize + l1_cpy + l2_cpy, psinfo->buf, hsize + l1_cpy + l2_cpy,
CURRENT_TIME, psinfo->erase); CURRENT_TIME, psinfo->erase);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册