Re: reiserfs blocks long on getdents64() during concurrent write

Roland Kuhn
2002-08-05T10:48:05Z

Hi!

On Mon, 5 Aug 2002, Oleg Drokin wrote:

> Hello!
>
> On Mon, Aug 05, 2002 at 11:22:49AM +0200, Roland Kuhn wrote:
>
> > BTW: was it directly clear for you for what the do_journal_begin_r() was
> > waiting? I'm not so familiar with fs coding, especially the locking...
>
> I'd say that it's waiting for journal lock that was captured by kupdated
> (or something like that) doing periodic write_super() calls, when it thinks
> memory is low. Our tests some time ago shown that once memory is lower than
> some value, write_super() "method" is called for every superblock that
> have "dirty" flag set. In reiserfs that flushes the journal, and while journal
> is being flushed, nobody can create new transactions obviously, and since
> ls changes directory's atime in normal case, it want to open new transaction.
> Unfortunatelly dirty flag for reiserfs gets set way to often than necessary,
> we have some patches that should help this (from Chris Mason).
> You can try these for yourself too, for example from here:
> ftp://ftp.suse.com/pub/people/mason/patches/data-logging/02-commit_super-8-relocation.diff.gz
>
I will try it immediately. And I will try to find documentation on how
this all is working, so I can understand the implications. Does the
"flushing" also happen, when the journal is full? Or is it possible to
begin a new journal while the old one is written out?

> > than in the 2.4.18-3 case, where it took about 1 minute for ls to come
> > back.
>
> So you might try the patch I mentioned or you can mount with nodiratime mount
> option to prevent updqting of directory atimes, but having atimes still to be
> updated on regular files at the same time.
>
Interesting mount option, though I think very few application actually use
atime anyway, isn't it?