]> git.karo-electronics.de Git - linux-beck.git/commitdiff
xfs: fix cil push sequence after log recovery
authorMark Tinguely <tinguely@sgi.com>
Thu, 24 Jul 2014 10:49:40 +0000 (20:49 +1000)
committerDave Chinner <david@fromorbit.com>
Thu, 24 Jul 2014 10:49:40 +0000 (20:49 +1000)
When the CIL checkpoint is fully written to the log, the LSN of the checkpoint
commit record is written into the CIL context structure. This allows log force
waiters to correctly detect when the checkpoint they are waiting on have been
fully written into the log buffers.

However, the initial context after mount is initialised with a non-zero commit
LSN, so appears to waiters as though it is complete even though it may not have
even been pushed, let alone written to the log buffers. Hence a log force
immediately after a filesystem is mounted may not behave correctly, nor does
commit record ordering if multiple CIL pushes interleave immediately after
mount.

To fix this, make sure the initial context commit LSN is not touched until the
first checkpointis actually pushed.

[dchinner: rewrite commit message]

Signed-off-by: Mark Tinguely <tinguely@sgi.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_log_cil.c

index 2ee4388dc68251aeec19b7e991a4919209234a3b..f6b79e5325dd4426da54b940fd1bea0ca170a6e8 100644 (file)
@@ -78,8 +78,6 @@ xlog_cil_init_post_recovery(
 {
        log->l_cilp->xc_ctx->ticket = xlog_cil_ticket_alloc(log);
        log->l_cilp->xc_ctx->sequence = 1;
-       log->l_cilp->xc_ctx->commit_lsn = xlog_assign_lsn(log->l_curr_cycle,
-                                                               log->l_curr_block);
 }
 
 /*