diff --git a/kernel/audit.c b/kernel/audit.c index bcbb0ba33c842e..d37a3a045230d8 100644 --- a/kernel/audit.c +++ b/kernel/audit.c @@ -644,8 +644,14 @@ static long wait_for_kauditd(long stime) prepare_to_wait_exclusive(&audit_backlog_wait, &wait, TASK_UNINTERRUPTIBLE); - rtime = schedule_timeout(stime); - atomic_add(stime - rtime, &audit_backlog_wait_time_actual); + + /* need to check if the queue is full again because kauditd might have + * flushed the queue and went to sleep after prepare_to_wait_exclusive() + */ + if (audit_queue_full(&audit_queue)) { + rtime = schedule_timeout(stime); + atomic_add(stime - rtime, &audit_backlog_wait_time_actual); + } finish_wait(&audit_backlog_wait, &wait); return rtime;