All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ryusuke Konishi <konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
To: Vyacheslav Dubeyko <slava-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
Cc: Sven Eckelmann <sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>,
	linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] nilfs-utils: Work around uncleanable full filesystem
Date: Tue, 15 Jan 2013 19:43:50 +0900	[thread overview]
Message-ID: <201301151043.AA04492@capsicum.lab.ntt.co.jp> (raw)
In-Reply-To: <1358234057.2105.12.camel@slavad-ubuntu>

Hi Vyacheslav,
>On Mon, 2013-01-14 at 16:54 +0100, Sven Eckelmann wrote:
>> The filesystem can end up in a state were the filesystem is full and the
>> returned ss_nongc_ctime is smaller than sui_lastmod of all reclaimable
>> segments. The garbage collector will not clean anything and therefore no new
>> room for new files will be available and ss_nongc_ctime/sui_lastmod will not be
>> updated without using special tools. This makes the filesystem unusable without
>> manual recovery.
>> 
>> Signed-off-by: Sven Eckelmann <sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
>> --
>> This problem appeared on a current 3.2 stable kernel (Debian Wheezy build). I
>> am not an FS developer and have therefore not much background knowledge about
>> the NILFS codebase. Nevertheless, this problem hit me quite hard after creating
>> some files on a nilfs partition until it was full and deleting them again.
>> 
>> $ for i in `seq 0 150`; do dd if=/dev/zero of=foo$i count=22528; done
>> $ rm foo*
>> 
>> Looking at the output debugging output using
>> 
>> $ watch -n .5 'df -h;tail /var/log/syslog;'
>> 
>> clearly showed that it was not finding any segments to delete. The only problem
>> I could find was the threshold. After "removing" this threshold, I was able to
>> get some clear segments again. I personally cannot explain why the check is
>> there at all. Maybe there is a good reason but the comment above it didn't help
>> much.
>> 
>> So, here for completeness the threshold: 1358164666 (aka: Mon Jan 14 12:57:46
>> CET 2013)
>> 
>> And here are the output of lssu and lscp:
>> 
>> $ lssu --all
>> SEGNUM        DATE     TIME STAT     NBLOCKS
>> 0  2013-01-14 12:58:23  -d-        2047
>> 1  2013-01-14 12:58:23  -d-        2048
>
>[snip]
>
>> 
>> Signed-off-by: Sven Eckelmann <sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
>> ---
>>  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.
>
>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.

I guess the problem is caused because ss_nongc_ctime is not updated by
the kernel module if dirty blocks created by file operations are written
out through nilfs_clean_segments function.   Actually,
nilfs_clean_segments() can roll together normal dirty blocks.

So, if GC is working without interruption, ss_nongc_ctime may not be
updated long time.

If this is the cause of the problem, nilfs2 log writer should be changed
so that nilfs->ns_nongc_ctime is updated with sci->sc_seg_ctime if
there is a file system change (file/directory change or an ifile change).

NILFS_SC_HAVE_DELTA flag may be available for this purpose.

The ss_nongc_ctime check is needed to make GC stoppable.
Without this check, GC can continue endlessly even if the file system
doesn't have any change.

With regards,
Ryusuke Konishi

>Thank you for the issue report.
>
>With the best regards,
>Vyacheslav Dubeyko.
>
>>  	for (segnum = 0; segnum < sustat->ss_nsegs; segnum += n) {
>>  		count = (sustat->ss_nsegs - segnum < NILFS_CLEANERD_NSUINFO) ?
>
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
>the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2013-01-15 10:43 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-14 15:54 [PATCH] nilfs-utils: Work around uncleanable full filesystem Sven Eckelmann
     [not found] ` <1358178899-26347-1-git-send-email-sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org>
2013-01-14 19:49   ` Vyacheslav Dubeyko
     [not found]     ` <37A149BD-4D8E-4C55-9301-428034C5B9DA-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org>
2013-01-14 18:55       ` Sven Eckelmann
2013-01-15  7:14   ` Vyacheslav Dubeyko
2013-01-15  8:34     ` Sven Eckelmann
2013-01-15 10:43     ` Ryusuke Konishi [this message]
     [not found]       ` <201301151043.AA04492-ZdTO5nnmHvkOizVVqyxoihMFgDP4sedm@public.gmane.org>
2013-01-15 13:48         ` Vyacheslav Dubeyko
2013-01-15 13:57   ` Vyacheslav Dubeyko
2013-01-15 15:17     ` Sven Eckelmann
2013-01-17  7:57       ` Vyacheslav Dubeyko
2013-01-17  8:32         ` Sven Eckelmann
2013-01-17  9:19           ` Vyacheslav Dubeyko
2013-01-18  7:04           ` Vyacheslav Dubeyko
2013-01-18  6:17         ` Vyacheslav Dubeyko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201301151043.AA04492@capsicum.lab.ntt.co.jp \
    --to=konishi.ryusuke-zyj7fxus5i5l9jvzuh4aog@public.gmane.org \
    --cc=linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=slava-yeENwD64cLxBDgjK7y7TUQ@public.gmane.org \
    --cc=sven-KaDOiPu9UxWEi8DpZVb4nw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.