Re: [PATCH] [16/19] HWPOISON: Enable .remove_error_page for migration aware file systems

Wu Fengguang
2009-08-12T09:39:53Z

On Wed, Aug 12, 2009 at 05:05:18PM +0800, Nick Piggin wrote:
> On Wed, Aug 12, 2009 at 10:57:27AM +0200, Andi Kleen wrote:
> > On Wed, Aug 12, 2009 at 10:46:13AM +0200, Nick Piggin wrote:
> > > On Wed, Aug 12, 2009 at 10:23:31AM +0200, Andi Kleen wrote:
> > > > > page corruption, IMO, because by definition they should be able to
> > > > > tolerate panic. But if they do not know about this change to -EIO
> > > > > semantics, then it is quite possible to cause problems.
> > > >
> > > > There's no change really. You already have this problem with
> > > > any metadata error, which can cause similar trouble.
> > > > If the application handles those correctly it will also
> > > > handle hwpoison correctly.
> > >
> > > What do you mean metadata error?
> >
> > e.g. when there's an write error on the indirect block or any
> > other fs metadata. This can also cause you to lose data. The error
> > reporting also works through the address space like with hwpoison,
> > so it only gets reported once.
>
> Well, this is also a filesystem issue, but anyway the data typically
> does not get thrown out. So a subsequent fsync should be able to
> retry.

Right. In normal EIO, the data in page cache is still good and
accessible.

> But if the filesystem can't handle such errors and loses the original
> data when there is an IO error in newly dirty metadata, then it's
> a problem in the filesystem really isn't it?

Right, and the fs should report EIO on future sync attempts as long as
the problem sticks.

> > I'm not really against fixing that (make the error more sticky
> > as Fengguang puts it), but I don't think it needs to be mixed
> > with hwpoison.
>
> I don't know if making it sticky realy "fixes" it. The problem is
> different semantics of what EIO means. My example illustrates this.

Case 1: (re)sync on EIO: sticky EIO will help.

Case 2: read out the data from page cache and rewrite it somewhere.
Sticky EIO is not enough, because here the application assumes the
dirty page is still accessible. In this case, patch
http://lkml.org/lkml/2009/6/11/294 will help. It effectively freezes
the radix tree, so that no new pages will be loaded to replace the
corrupted data and fake a 'good' one.

Thanks,
Fengguang