* Re: xfs bug in 2.6.26-rc9
[not found] ` <487B019B.9090401@sgi.com>
@ 2008-07-14 12:13 ` Dave Chinner
2008-07-15 2:12 ` Lachlan McIlroy
2008-07-15 6:17 ` Nick Piggin
0 siblings, 2 replies; 6+ messages in thread
From: Dave Chinner @ 2008-07-14 12:13 UTC (permalink / raw)
To: Lachlan McIlroy; +Cc: Mikael Abrahamsson, linux-kernel, xfs, linux-mm
On Mon, Jul 14, 2008 at 05:34:51PM +1000, Lachlan McIlroy wrote:
> Mikael Abrahamsson wrote:
>> On Fri, 11 Jul 2008, Dave Chinner wrote:
>>
>>> That aside, what was the assert failure reported prior to the oops?
>>> i.e. paste the lines in the log before the ---[ cut here ]--- line?
>>> One of them will start with 'Assertion failed:', I think....
>>
>> These ones?
>>
>> Jul 8 04:44:56 via kernel: [554197.888008] Assertion failed: whichfork
>> == XFS_ATTR_FORK || ip->i_delayed_blks == 0, file: fs/xfs/xfs_bmap.c,
>> line: 5879
>> Jul 9 03:25:21 via kernel: [42940.748007] Assertion failed: whichfork
>> == XFS_ATTR_FORK || ip->i_delayed_blks == 0, file: fs/xfs/xfs_bmap.c,
>> line: 5879
>
> xfs_ilock(ip, XFS_IOLOCK_SHARED);
>
> if (whichfork == XFS_DATA_FORK &&
> (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size)) {
> /* xfs_fsize_t last_byte = xfs_file_last_byte(ip); */
> error = xfs_flush_pages(ip, (xfs_off_t)0,
> -1, 0, FI_REMAPF);
> if (error) {
> xfs_iunlock(ip, XFS_IOLOCK_SHARED);
> return error;
> }
> }
>
> ASSERT(whichfork == XFS_ATTR_FORK || ip->i_delayed_blks == 0);
>
> This is a race between xfs_fsr and a mmap write. xfs_fsr acquires the
> iolock and then flushes the file and because it has the iolock it doesn't
> expect any new delayed allocations to occur. A mmap write can allocate
> delayed allocations without acquiring the iolock so is able to get in
> after the flush but before the ASSERT.
Christoph and I were contemplating this problem with ->page_mkwrite
reecently. The problem is that we can't, right now, return an
EAGAIN-like error to ->page_mkwrite() and have it retry the
page fault. Other parts of the page faulting code can do this,
so it seems like a solvable problem.
The basic concept is that if we can return a EAGAIN result we can
try-lock the inode and hold the locks necessary to avoid this race
or prevent the page fault from dirtying the page until the
filesystem is unfrozen.
Added linux-mm to the cc list for discussion.
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: xfs bug in 2.6.26-rc9
2008-07-14 12:13 ` xfs bug in 2.6.26-rc9 Dave Chinner
@ 2008-07-15 2:12 ` Lachlan McIlroy
2008-07-15 3:18 ` Dave Chinner
2008-07-15 6:17 ` Nick Piggin
1 sibling, 1 reply; 6+ messages in thread
From: Lachlan McIlroy @ 2008-07-15 2:12 UTC (permalink / raw)
To: Lachlan McIlroy, Mikael Abrahamsson, linux-kernel, xfs, linux-mm
Dave Chinner wrote:
> On Mon, Jul 14, 2008 at 05:34:51PM +1000, Lachlan McIlroy wrote:
>> Mikael Abrahamsson wrote:
>>> On Fri, 11 Jul 2008, Dave Chinner wrote:
>>>
>>>> That aside, what was the assert failure reported prior to the oops?
>>>> i.e. paste the lines in the log before the ---[ cut here ]--- line?
>>>> One of them will start with 'Assertion failed:', I think....
>>> These ones?
>>>
>>> Jul 8 04:44:56 via kernel: [554197.888008] Assertion failed: whichfork
>>> == XFS_ATTR_FORK || ip->i_delayed_blks == 0, file: fs/xfs/xfs_bmap.c,
>>> line: 5879
>>> Jul 9 03:25:21 via kernel: [42940.748007] Assertion failed: whichfork
>>> == XFS_ATTR_FORK || ip->i_delayed_blks == 0, file: fs/xfs/xfs_bmap.c,
>>> line: 5879
>> xfs_ilock(ip, XFS_IOLOCK_SHARED);
>>
>> if (whichfork == XFS_DATA_FORK &&
>> (ip->i_delayed_blks || ip->i_size > ip->i_d.di_size)) {
>> /* xfs_fsize_t last_byte = xfs_file_last_byte(ip); */
>> error = xfs_flush_pages(ip, (xfs_off_t)0,
>> -1, 0, FI_REMAPF);
>> if (error) {
>> xfs_iunlock(ip, XFS_IOLOCK_SHARED);
>> return error;
>> }
>> }
>>
>> ASSERT(whichfork == XFS_ATTR_FORK || ip->i_delayed_blks == 0);
>>
>> This is a race between xfs_fsr and a mmap write. xfs_fsr acquires the
>> iolock and then flushes the file and because it has the iolock it doesn't
>> expect any new delayed allocations to occur. A mmap write can allocate
>> delayed allocations without acquiring the iolock so is able to get in
>> after the flush but before the ASSERT.
>
> Christoph and I were contemplating this problem with ->page_mkwrite
> reecently. The problem is that we can't, right now, return an
> EAGAIN-like error to ->page_mkwrite() and have it retry the
> page fault. Other parts of the page faulting code can do this,
> so it seems like a solvable problem.
>
> The basic concept is that if we can return a EAGAIN result we can
> try-lock the inode and hold the locks necessary to avoid this race
> or prevent the page fault from dirtying the page until the
> filesystem is unfrozen.
Why do we need to try-lock the inode? Will we have an ABBA deadlock
if we block on the iolock in ->page_mkwrite()?
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: xfs bug in 2.6.26-rc9
2008-07-15 2:12 ` Lachlan McIlroy
@ 2008-07-15 3:18 ` Dave Chinner
0 siblings, 0 replies; 6+ messages in thread
From: Dave Chinner @ 2008-07-15 3:18 UTC (permalink / raw)
To: Lachlan McIlroy; +Cc: Mikael Abrahamsson, linux-kernel, xfs, linux-mm
On Tue, Jul 15, 2008 at 12:12:52PM +1000, Lachlan McIlroy wrote:
> Dave Chinner wrote:
>> On Mon, Jul 14, 2008 at 05:34:51PM +1000, Lachlan McIlroy wrote:
>>> This is a race between xfs_fsr and a mmap write. xfs_fsr acquires the
>>> iolock and then flushes the file and because it has the iolock it doesn't
>>> expect any new delayed allocations to occur. A mmap write can allocate
>>> delayed allocations without acquiring the iolock so is able to get in
>>> after the flush but before the ASSERT.
>>
>> Christoph and I were contemplating this problem with ->page_mkwrite
>> reecently. The problem is that we can't, right now, return an
>> EAGAIN-like error to ->page_mkwrite() and have it retry the
>> page fault. Other parts of the page faulting code can do this,
>> so it seems like a solvable problem.
>>
>> The basic concept is that if we can return a EAGAIN result we can
>> try-lock the inode and hold the locks necessary to avoid this race
>> or prevent the page fault from dirtying the page until the
>> filesystem is unfrozen.
> Why do we need to try-lock the inode? Will we have an ABBA deadlock
> if we block on the iolock in ->page_mkwrite()?
Yes. With the mmap_sem. Look at the rules in mm/filemap.c
and replace i_mutex with iolock....
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: xfs bug in 2.6.26-rc9
2008-07-14 12:13 ` xfs bug in 2.6.26-rc9 Dave Chinner
2008-07-15 2:12 ` Lachlan McIlroy
@ 2008-07-15 6:17 ` Nick Piggin
2008-07-15 12:22 ` Christoph Hellwig
1 sibling, 1 reply; 6+ messages in thread
From: Nick Piggin @ 2008-07-15 6:17 UTC (permalink / raw)
To: Dave Chinner
Cc: Lachlan McIlroy, Mikael Abrahamsson, linux-kernel, xfs, linux-mm
On Monday 14 July 2008 22:13, Dave Chinner wrote:
> Christoph and I were contemplating this problem with ->page_mkwrite
> reecently. The problem is that we can't, right now, return an
> EAGAIN-like error to ->page_mkwrite() and have it retry the
> page fault. Other parts of the page faulting code can do this,
> so it seems like a solvable problem.
>
> The basic concept is that if we can return a EAGAIN result we can
> try-lock the inode and hold the locks necessary to avoid this race
> or prevent the page fault from dirtying the page until the
> filesystem is unfrozen.
>
> Added linux-mm to the cc list for discussion.
It would be easily possible to do, yes.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: xfs bug in 2.6.26-rc9
2008-07-15 6:17 ` Nick Piggin
@ 2008-07-15 12:22 ` Christoph Hellwig
2008-07-16 4:12 ` Nick Piggin
0 siblings, 1 reply; 6+ messages in thread
From: Christoph Hellwig @ 2008-07-15 12:22 UTC (permalink / raw)
To: Nick Piggin
Cc: Dave Chinner, Lachlan McIlroy, Mikael Abrahamsson, linux-kernel,
xfs, linux-mm
> It would be easily possible to do, yes.
What happened to your plans to merge ->nopfn into ->fault? Beeing
able to restart page based faults would be a logical fallout from that.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: xfs bug in 2.6.26-rc9
2008-07-15 12:22 ` Christoph Hellwig
@ 2008-07-16 4:12 ` Nick Piggin
0 siblings, 0 replies; 6+ messages in thread
From: Nick Piggin @ 2008-07-16 4:12 UTC (permalink / raw)
To: Christoph Hellwig
Cc: Dave Chinner, Lachlan McIlroy, Mikael Abrahamsson, linux-kernel,
xfs, linux-mm
On Tuesday 15 July 2008 22:22, Christoph Hellwig wrote:
> > It would be easily possible to do, yes.
>
> What happened to your plans to merge ->nopfn into ->fault? Beeing
> able to restart page based faults would be a logical fallout from that.
Yeah I guess I should really do that, and you're right it would
work nicely for this.
Actually I have some code but it is not quite as nice as I'd like.
The problem is that we have the generic file fault handler, but not
a generic page mkwrite handler. So we still need some kind of
page_mkwrite aop which the file fault handler can then call if it
exists. It isn't a big problem AFAIKS, but just a bit irritating.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2008-07-16 4:12 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <alpine.DEB.1.10.0807110939520.30192@uplift.swm.pp.se>
[not found] ` <20080711084248.GU29319@disturbed>
[not found] ` <alpine.DEB.1.10.0807111215040.30192@uplift.swm.pp.se>
[not found] ` <487B019B.9090401@sgi.com>
2008-07-14 12:13 ` xfs bug in 2.6.26-rc9 Dave Chinner
2008-07-15 2:12 ` Lachlan McIlroy
2008-07-15 3:18 ` Dave Chinner
2008-07-15 6:17 ` Nick Piggin
2008-07-15 12:22 ` Christoph Hellwig
2008-07-16 4:12 ` Nick Piggin
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox