[Ocfs2-tools-devel] [PATCH 12/13] fsck.ocfs2: Pre-cache inodes in reverse order.

Sunil Mushran sunil.mushran at oracle.com
Fri Jun 19 15:26:53 PDT 2009


What if the chain record is empty? This patch does not mesh
with the PR_CHAIN_EMPTY case.

Joel Becker wrote:
> We want the first inodes seen by the inode scan to have a higher
> priority in the cache.  That way they aren't flushed from the cache by
> extent blocks.
>
> Signed-off-by: Joel Becker <joel.becker at oracle.com>
> ---
>  fsck.ocfs2/pass0.c |   11 ++++++++---
>  1 files changed, 8 insertions(+), 3 deletions(-)
>
> diff --git a/fsck.ocfs2/pass0.c b/fsck.ocfs2/pass0.c
> index 1961aae..0e3f346 100644
> --- a/fsck.ocfs2/pass0.c
> +++ b/fsck.ocfs2/pass0.c
> @@ -650,7 +650,7 @@ static errcode_t verify_chain_alloc(o2fsck_state *ost,
>  {
>  	struct chain_state cs = {0, };
>  	struct ocfs2_chain_list *cl;
> -	uint16_t i, max_count;
> +	int i, max_count;
>  	struct ocfs2_chain_rec *cr;
>  	uint32_t free = 0, total = 0;
>  	int changed = 0, trust_next_free = 1;
> @@ -741,7 +741,13 @@ static errcode_t verify_chain_alloc(o2fsck_state *ost,
>  	if (trust_next_free)
>  		max_count = cl->cl_next_free_rec;
>  
> -	for (i = 0; i < max_count; i++) {
> +	/*
> +	 * We walk the chains backwards for caching reasons.  Basically,
> +	 * at the end the last blocks we read will be the most recently
> +	 * used in the cache.  We want that to be the first chains,
> +	 * especially for the inode scan, which will read forwards.
> +	 */
> +	for (i = max_count - 1; i >= 0; i--) {
>  		cr = &cl->cl_recs[i];
>  
>  		/* reset for each run */
> @@ -782,7 +788,6 @@ static errcode_t verify_chain_alloc(o2fsck_state *ost,
>  				*cr = cl->cl_recs[cl->cl_next_free_rec - 1];
>  				memset(&cl->cl_recs[cl->cl_next_free_rec - 1],
>  					0, sizeof(struct ocfs2_chain_rec));
> -				i--;
>  			}
>  
>  			cl->cl_next_free_rec--;
>   




More information about the Ocfs2-tools-devel mailing list