Commit c2783f3a authored by Dave Kleikamp's avatar Dave Kleikamp

JFS: Don't set log_SYNCBARRIER when log->active == 0

If a metadata page is kept active, it is possible that the sync barrier logic
continues to trigger, even if all active transactions have been phyically
written to the journal.  This can cause a hang, since the completion of the
journal I/O is what unsets the sync barrier flag to allow new transactions
to be created.
Signed-off-by: default avatarDave Kleikamp <shaggy@austin.ibm.com>
parent c40c2024
...@@ -1030,7 +1030,8 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait) ...@@ -1030,7 +1030,8 @@ static int lmLogSync(struct jfs_log * log, int nosyncwait)
* starting until all current transactions are completed * starting until all current transactions are completed
* by setting syncbarrier flag. * by setting syncbarrier flag.
*/ */
if (written > LOGSYNC_BARRIER(logsize) && logsize > 32 * LOGPSIZE) { if (!test_bit(log_SYNCBARRIER, &log->flag) &&
(written > LOGSYNC_BARRIER(logsize)) && log->active) {
set_bit(log_SYNCBARRIER, &log->flag); set_bit(log_SYNCBARRIER, &log->flag);
jfs_info("log barrier on: lsn=0x%x syncpt=0x%x", lsn, jfs_info("log barrier on: lsn=0x%x syncpt=0x%x", lsn,
log->syncpt); log->syncpt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment