Skip to content

Commit

Permalink
ocfs2: limit printk when journal is aborted
Browse files Browse the repository at this point in the history
Once JBD2_ABORT is set, ocfs2_commit_cache will fail in
ocfs2_commit_thread.  Then it will get into a loop with mass logs.  This
will meaninglessly consume a larger number of resource and may lead to
the system hanging.  So limit printk in this case.

[akpm@linux-foundation.org: document the msleep]
Signed-off-by: Joseph Qi <joseph.qi@huawei.com>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Joseph Qi authored and Linus Torvalds committed Jun 4, 2014
1 parent b3821c3 commit 55b465b
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions fs/ocfs2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <linux/kthread.h>
#include <linux/time.h>
#include <linux/random.h>
#include <linux/delay.h>

#include <cluster/masklog.h>

Expand Down Expand Up @@ -2185,8 +2186,20 @@ static int ocfs2_commit_thread(void *arg)
|| kthread_should_stop());

status = ocfs2_commit_cache(osb);
if (status < 0)
mlog_errno(status);
if (status < 0) {
static unsigned long abort_warn_time;

/* Warn about this once per minute */
if (printk_timed_ratelimit(&abort_warn_time, 60*HZ))
mlog(ML_ERROR, "status = %d, journal is "
"already aborted.\n", status);
/*
* After ocfs2_commit_cache() fails, j_num_trans has a
* non-zero value. Sleep here to avoid a busy-wait
* loop.
*/
msleep_interruptible(1000);
}

if (kthread_should_stop() && atomic_read(&journal->j_num_trans)){
mlog(ML_KTHREAD,
Expand Down

0 comments on commit 55b465b

Please sign in to comment.