[PATCH 07/60] xfs: Introduce ordered log vector support

Mark Tinguely tinguely at sgi.com
Sat Jun 22 12:26:42 CDT 2013


On 06/18/13 23:50, Dave Chinner wrote:
> From: Dave Chinner<dchinner at redhat.com>
>
> And "ordered log vector" is a log vector that is used for
> tracking a log item through the CIL and into the AIL as part of the
> log checkpointing. These ordered log vectors are special in that
> they are not written to to journal in any way, and are not accounted
> to the checkpoint being written.
>
> The reason for this behaviour is to allow operations to attach items
> to transactions and have them follow the normal transactional
> lifecycle without actually having to write them to the journal. This
> allows logging of items that track high level logical changes and
> writing them to the log, while the physical items being modified
> pass through into the AIL and pin the tail of the log (and therefore
> the logical item in the log) until all the modified items are
> physically written to disk.
>
> IOWs, it allows us to write metadata without physically logging
> every individual change but still maintain the full transactional
> integrity guarantees we currently have w.r.t. crash recovery.
>
> This change modifies some of the CIL item insertion loops, as
> ordered log vectors introduce some new constraints as they don't
> track any data. One advantage of this change is that it combines
> two log vector chain walks into a single pass, so there is less
> overhead in the transaction commit pass as well. It also kills some
> unused code in the log vector walk loop when committing the CIL.
>
> Signed-off-by: Dave Chinner<dchinner at redhat.com>
> ---
>   fs/xfs/xfs_log.c     |   21 +++++++++++---
>   fs/xfs/xfs_log.h     |    2 ++
>   fs/xfs/xfs_log_cil.c |   75 ++++++++++++++++++++++++++++++++++----------------
>   3 files changed, 70 insertions(+), 28 deletions(-)
>
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c

...

> @@ -2236,13 +2240,21 @@ xlog_write(
>   		 * This loop writes out as many regions as can fit in the amount
>   		 * of space which was allocated by xlog_state_get_iclog_space().
>   		 */
> -		while (lv&&  index<  lv->lv_niovecs) {
> -			struct xfs_log_iovec	*reg =&vecp[index];
> +		while (lv&&  (!lv->lv_niovecs || index<  lv->lv_niovecs)) {


Be paranoid and make sure the log vector with no vectors owner is really 
a "ordered" entry?

Reviewed-by: Mark Tinguely <tinguely at sgi.com>




More information about the xfs mailing list