From 089037905421f466c0344effe9bff1be100c0f94 Mon Sep 17 00:00:00 2001 From: Yuanhan Liu Date: Sat, 16 Jun 2012 21:21:51 +0800 Subject: [PATCH] --- yaml --- r: 311143 b: refs/heads/master c: 4a77a5a06ec66ed05199b301e7c25f42f979afdc h: refs/heads/master i: 311141: 7a9cdfd9fe36d79914b92ab540ee2b290ecdb15a 311139: b3c2d6aaceaab311ac6c8a7cf47eab37265c6f4c 311135: 058752c3f0d9b931b7dcb497e88faa5cd53a1cfc v: v3 --- [refs] | 2 +- trunk/kernel/printk.c | 13 +++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index bd07e8734565..f2a8c3a1c288 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e2ae715d66bf4becfb85eb84b7150e23cf27df30 +refs/heads/master: 4a77a5a06ec66ed05199b301e7c25f42f979afdc diff --git a/trunk/kernel/printk.c b/trunk/kernel/printk.c index ceb4a2f775a1..572730bd8a5c 100644 --- a/trunk/kernel/printk.c +++ b/trunk/kernel/printk.c @@ -414,7 +414,9 @@ static ssize_t devkmsg_read(struct file *file, char __user *buf, if (!user) return -EBADF; - mutex_lock(&user->lock); + ret = mutex_lock_interruptible(&user->lock); + if (ret) + return ret; raw_spin_lock(&logbuf_lock); while (user->seq == log_next_seq) { if (file->f_flags & O_NONBLOCK) { @@ -976,6 +978,7 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) { bool clear = false; static int saved_console_loglevel = -1; + static DEFINE_MUTEX(syslog_mutex); int error; error = check_syslog_permissions(type, from_file); @@ -1002,11 +1005,17 @@ int do_syslog(int type, char __user *buf, int len, bool from_file) error = -EFAULT; goto out; } + error = mutex_lock_interruptible(&syslog_mutex); + if (error) + goto out; error = wait_event_interruptible(log_wait, syslog_seq != log_next_seq); - if (error) + if (error) { + mutex_unlock(&syslog_mutex); goto out; + } error = syslog_print(buf, len); + mutex_unlock(&syslog_mutex); break; /* Read/clear last kernel messages */ case SYSLOG_ACTION_READ_CLEAR: