On Tuesday 15 January 2013 11:14:17 Vyacheslav Dubeyko wrote:
[...]
> > Signed-off-by: Sven Eckelmann <[email protected]>
> > ---
> > 
> >  sbin/cleanerd/cleanerd.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/sbin/cleanerd/cleanerd.c b/sbin/cleanerd/cleanerd.c
> > index bfcd893..12ed975 100644
> > --- a/sbin/cleanerd/cleanerd.c
> > +++ b/sbin/cleanerd/cleanerd.c
> > @@ -592,7 +592,7 @@ nilfs_cleanerd_select_segments(struct nilfs_cleanerd
> > *cleanerd,> 
> >      * selected. */
> >     
> >     thr = (config->cf_selection_policy.p_threshold != 0) ?
> >     
> >             config->cf_selection_policy.p_threshold :
> > -           sustat->ss_nongc_ctime;
> > +           ~0ULL;
> 
> As I understand the code of nilfs_cleanerd, this code is correct without
> your changing. The ss_nongc_ctime is the creation time of the last
> segment not for GC. When thr is set then it compared with sui_lastmod.
> The sui_lastmod is the timestamp of last modification. So, the
> nilfs_cleanerd works right.

Depends on the definition of right. In a complete environment using the current 
nilfs kernel code it needs to _work around_ this problem. But yes, the culprit 
must be the kernel side.

> I think that this is a bug on the kernel side. My current vision is that
> in some environment the ns_nongc_ctime can be not updated correctly. So,
> you have such threshold that prevent from segments clearing.

Yes, one problem for example is the non-monotonic behaviour of many timekeeper 
functions.

Kind regards,
        Sven

Attachment: signature.asc
Description: This is a digitally signed message part.

Reply via email to