public inbox for linux-xfs@vger.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Mark Tinguely <tinguely@sgi.com>
Cc: Ben Myers <bpm@sgi.com>, Stan Hoeppner <stan@hardwarefreak.com>,
	Markus Trippelsdorf <markus@trippelsdorf.de>,
	xfs@oss.sgi.com
Subject: Re: [Bisected] Corruption of root fs during git bisect of drm system hang
Date: Sun, 21 Jul 2013 17:37:32 +1000	[thread overview]
Message-ID: <20130721073732.GB11674@dastard> (raw)
In-Reply-To: <51EAC72B.905@sgi.com>

On Sat, Jul 20, 2013 at 12:21:47PM -0500, Mark Tinguely wrote:
> On 07/19/13 22:18, Dave Chinner wrote:
> >On Fri, Jul 19, 2013 at 04:11:28PM -0500, Mark Tinguely wrote:
> >>On 07/19/13 07:22, Markus Trippelsdorf wrote:
> >>>
> >>>I've bisected this issue to the following commit:
> >>>
> >>>  commit cca9f93a52d2ead50b5da59ca83d5f469ee4be5f
> >>>  Author: Dave Chinner<dchinner@redhat.com>
> >>>  Date:   Thu Jun 27 16:04:49 2013 +1000
> >>>
> >>>      xfs: don't do IO when creating an new inode
> >>>
> >>>Reverting this commit on top of the Linus tree "solves" all problems for
> >>>me. IOW I no longer loose my KDE and LibreOffice config files during a
> >>>crash. Log recovery now works fine and xfs_repair shows no issues.
....
> >I've only reproduced the problem *once* with this method - the first
> >time I tried. Then I mkfs'd the filesystem rather than repairing it
> >and I haven't been able to reproduce it since.  So the problem is
> >far more subtle that just copying some files, running sync and
> >crashing the machine - there's some kind of initial or timing
> >condition that we are missing that triggers it...
> >
> >The one interesting thing I noticed was that the generation number
> >in the crash case was non-zero. That's an important piece of
> >information, and:
....
> >That means it has actually been allocated and written to disk at
> >some point in time. That is, inodes allocated by mkfs in the root
> >inode chunk have a generation number of zero. For this to have a
> >non-zero generation number, it means that had to be written after
> >allocation - either before the sync or during log recovery.
> >
> >Unfortunately, without the 'xfs_logprint -t -i<dev>' output from
> >prior to mounting the filesystem which demonstrates te problem, I
> >can't tell if the issue is a recovery problem or something that
> >happened before the crash....
....
> I tried the script today and it did not reproduce the problem. The
> logprint and the mounted filesystem was empty. I will rebuild the
> sources to eliminate some patched kernel versions on that box and
> experiment with the sync and the shooting of the kernel.

No need - I've worked out yesterday how to reproduce it reliably and
what the root cause of the problem is. My 'net connection was down
yesterday, so I wasn't even sure if my emails would get out after
queued them and left for an overnight trip....

Basically, the problem takes two iterations to trigger. Do this:

mkfs.xfs
mount
copy files
umount
mount
remove files
umount.

This gives files in the inode chunk mode = 0 and flushiter = 2. now
run:

mount
copy files
sync
godown (*)
umount

(*) you don't need to crash the box to trip this problem.

And when you run:

mount
ls -l

The output of ls will have missing files.

The problem is log recovery sees the flushiter of the inodes being
allocated as 0 (because that's what the patch that avoids reading
the inodes during create sets it too), but the flushiter of the
inode on disk is 2, and then log recovery says "inode on disk is
more recent than the inode core being recovered, don't do recovery".

And that's all there is to it. di_flushiter is no longer necessary
as we log all inode modifications now, but we left it there because
we thought it was harmless:

        /*
         * bump the flush iteration count, used to detect flushes which
         * postdate a log record during recovery. This is redundant as we now
         * log every change and hence this can't happen. Still, it doesn't hurt.
         */
        ip->i_d.di_flushiter++;

In this case, clearly it does hurt. :/

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2013-07-21  7:37 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-10  9:06 Corruption of root fs during git bisect of drm system hang Markus Trippelsdorf
2013-07-11  0:31 ` Dave Chinner
2013-07-11  3:36   ` Markus Trippelsdorf
2013-07-11  3:58     ` Dave Chinner
2013-07-11  4:12       ` Stan Hoeppner
2013-07-11  9:07         ` Markus Trippelsdorf
2013-07-11 11:28           ` Markus Trippelsdorf
2013-07-11 20:24             ` Stan Hoeppner
2013-07-11 20:40               ` Markus Trippelsdorf
2013-07-11 23:01                 ` Stan Hoeppner
2013-07-12  2:38                 ` Dave Chinner
2013-07-12  2:17           ` Dave Chinner
2013-07-12  7:07             ` Markus Trippelsdorf
2013-07-13  9:05               ` Markus Trippelsdorf
2013-07-15  2:28               ` Dave Chinner
2013-07-15  6:47                 ` Markus Trippelsdorf
2013-07-19 12:22                   ` [Bisected] " Markus Trippelsdorf
2013-07-19 12:41                     ` Stefan Ring
2013-07-19 12:51                       ` Markus Trippelsdorf
2013-07-19 16:02                         ` Eric Sandeen
2013-07-19 16:32                           ` Markus Trippelsdorf
2013-07-19 19:13                             ` Ben Myers
2013-07-19 19:56                               ` Markus Trippelsdorf
2013-07-19 20:28                                 ` Markus Trippelsdorf
2013-07-19 19:23                             ` Eric Sandeen
2013-07-19 19:53                               ` Markus Trippelsdorf
2013-07-19 21:11                     ` Mark Tinguely
2013-07-20  3:18                       ` Dave Chinner
2013-07-20 17:21                         ` Mark Tinguely
2013-07-21  7:37                           ` Dave Chinner [this message]
2013-07-20  1:48                     ` Dave Chinner
2013-07-22 10:22                       ` Dave Chinner
2013-07-22 10:47                         ` Markus Trippelsdorf
2013-07-22 22:54                           ` Dave Chinner
2013-07-11  4:15       ` Markus Trippelsdorf
2013-07-11  0:37 ` Stan Hoeppner
2013-07-11  3:47   ` Markus Trippelsdorf

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=20130721073732.GB11674@dastard \
    --to=david@fromorbit.com \
    --cc=bpm@sgi.com \
    --cc=markus@trippelsdorf.de \
    --cc=stan@hardwarefreak.com \
    --cc=tinguely@sgi.com \
    --cc=xfs@oss.sgi.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox