From: Oleg Nesterov <oleg@redhat.com>
To: Al Viro <viro@zeniv.linux.org.uk>,
Andrew Morton <akpm@linux-foundation.org>
Cc: Guy Streeter <streeter@redhat.com>,
Eric Paris <eparis@redhat.com>,
David Woodhouse <dwmw2@infradead.org>,
linux-kernel@vger.kernel.org
Subject: [PATCH -mm 1/1] audit: cleanup audit_log_start/wait_for_auditd mess
Date: Mon, 3 Jun 2013 22:46:20 +0200 [thread overview]
Message-ID: <20130603204620.GB21574@redhat.com> (raw)
In-Reply-To: <20130603204559.GA21574@redhat.com>
audit_log_start() tries to obfusticate the code/logic and
reimplements wait_event_timeout() in a very confusing way.
Just change wait_for_auditd() to use wait_event_timeout()
and return bool.
Also remove the unnecessary "ab = NULL" initialization.
Signed-off-by: Oleg Nesterov <oleg@redhat.com>
---
kernel/audit.c | 45 +++++++++++++--------------------------------
1 files changed, 13 insertions(+), 32 deletions(-)
diff --git a/kernel/audit.c b/kernel/audit.c
index 91e53d0..af0a04d 100644
--- a/kernel/audit.c
+++ b/kernel/audit.c
@@ -1051,20 +1051,19 @@ static inline void audit_get_stamp(struct audit_context *ctx,
}
/*
- * Wait for auditd to drain the queue a little
+ * Wait for auditd to drain audit_skb_queue if it is full
*/
-static void wait_for_auditd(unsigned long sleep_time)
+static bool wait_for_auditd(gfp_t gfp_mask)
{
- DECLARE_WAITQUEUE(wait, current);
- set_current_state(TASK_UNINTERRUPTIBLE);
- add_wait_queue(&audit_backlog_wait, &wait);
-
- if (audit_backlog_limit &&
- skb_queue_len(&audit_skb_queue) > audit_backlog_limit)
- schedule_timeout(sleep_time);
-
- __set_current_state(TASK_RUNNING);
- remove_wait_queue(&audit_backlog_wait, &wait);
+ /* Atomic callers use can 5 more entries over the limit */
+ if (!(gfp_mask & __GFP_WAIT))
+ return skb_queue_len(&audit_skb_queue) <=
+ audit_backlog_limit + 5;
+
+ return wait_event_timeout(audit_backlog_wait,
+ !audit_backlog_limit ||
+ skb_queue_len(&audit_skb_queue) <= audit_backlog_limit,
+ audit_backlog_wait_time);
}
/* Obtain an audit buffer. This routine does locking to obtain the
@@ -1092,11 +1091,9 @@ static void wait_for_auditd(unsigned long sleep_time)
struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
int type)
{
- struct audit_buffer *ab = NULL;
+ struct audit_buffer *ab;
struct timespec t;
unsigned int uninitialized_var(serial);
- int reserve;
- unsigned long timeout_start = jiffies;
if (audit_initialized != AUDIT_INITIALIZED)
return NULL;
@@ -1104,23 +1101,7 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
if (unlikely(audit_filter_type(type)))
return NULL;
- if (gfp_mask & __GFP_WAIT)
- reserve = 0;
- else
- reserve = 5; /* Allow atomic callers to go up to five
- entries over the normal backlog limit */
-
- while (audit_backlog_limit
- && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) {
- if (gfp_mask & __GFP_WAIT && audit_backlog_wait_time) {
- unsigned long sleep_time;
-
- sleep_time = timeout_start + audit_backlog_wait_time -
- jiffies;
- if ((long)sleep_time > 0)
- wait_for_auditd(sleep_time);
- continue;
- }
+ if (audit_backlog_limit && !wait_for_auditd(gfp_mask)) {
if (audit_rate_check() && printk_ratelimit())
printk(KERN_WARNING
"audit: audit_backlog=%d > "
--
1.5.5.1
next prev parent reply other threads:[~2013-06-03 20:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-03 20:45 [PATCH -mm 0/1] audit: cleanup audit_log_start/wait_for_auditd mess Oleg Nesterov
2013-06-03 20:46 ` Oleg Nesterov [this message]
2013-06-06 20:55 ` [PATCH -mm 1/1] " Andrew Morton
2013-06-07 11:52 ` Oleg Nesterov
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130603204620.GB21574@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=dwmw2@infradead.org \
--cc=eparis@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=streeter@redhat.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.