xfs
[Top] [All Lists]

Re: [PATCH 7/7] libxfs: reset dirty buffer priority on lookup

To: Dave Chinner <david@xxxxxxxxxxxxx>
Subject: Re: [PATCH 7/7] libxfs: reset dirty buffer priority on lookup
From: Brian Foster <bfoster@xxxxxxxxxx>
Date: Fri, 5 Feb 2016 09:23:16 -0500
Cc: xfs@xxxxxxxxxxx
Delivered-to: xfs@xxxxxxxxxxx
In-reply-to: <1454627108-19036-8-git-send-email-david@xxxxxxxxxxxxx>
References: <1454627108-19036-1-git-send-email-david@xxxxxxxxxxxxx> <1454627108-19036-8-git-send-email-david@xxxxxxxxxxxxx>
User-agent: Mutt/1.5.24 (2015-08-30)
On Fri, Feb 05, 2016 at 10:05:08AM +1100, Dave Chinner wrote:
> From: Dave Chinner <dchinner@xxxxxxxxxx>
> 
> When a buffer on the dirty MRU is looked up and found, we remove the
> buffer from the MRU. However, we've already set the priority ofthe

                                                               of the

> buffer to "dirty" so when we are donw with it it will go back on the

                                   done

> dirty buffer MRU regardless of whether it needs to or not.
> 
> Hence when we move a buffer to a the dirty MRU, reocrd the old

                                                  record

> priority and restore it when we remove the buffer from the MRU on
> lookup. This will prevent us from putting fixed, now writeable
> buffers back on the dirty MRU and allow the cache routine to write,
> shake and reclaim the buffers once they are clean.
> 
> Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx>
> ---
>  include/cache.h | 1 +
>  libxfs/cache.c  | 7 +++++++
>  2 files changed, 8 insertions(+)
> 
...
> diff --git a/libxfs/cache.c b/libxfs/cache.c
> index d4b4a4e..0398be3 100644
> --- a/libxfs/cache.c
> +++ b/libxfs/cache.c
...
> @@ -434,6 +436,10 @@ cache_node_get(
>                               mru->cm_count--;
>                               list_del_init(&node->cn_mru);
>                               pthread_mutex_unlock(&mru->cm_mutex);
> +                             if (node->cn_old_priority != -1) {

Might be good to ASSERT(node->cn_priority == CACHE_DIRTY_PRIORITY) here.
Otherwise looks good:

Reviewed-by: Brian Foster <bfoster@xxxxxxxxxx>

> +                                     node->cn_priority = 
> node->cn_old_priority;
> +                                     node->cn_old_priority = -1;
> +                             }
>                       }
>                       node->cn_count++;
>  
> @@ -534,6 +540,7 @@ cache_node_set_priority(
>       pthread_mutex_lock(&node->cn_mutex);
>       ASSERT(node->cn_count > 0);
>       node->cn_priority = priority;
> +     node->cn_old_priority = -1;
>       pthread_mutex_unlock(&node->cn_mutex);
>  }
>  
> -- 
> 2.5.0
> 
> _______________________________________________
> xfs mailing list
> xfs@xxxxxxxxxxx
> http://oss.sgi.com/mailman/listinfo/xfs

<Prev in Thread] Current Thread [Next in Thread>