Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-08 Thread Sami Farin
On Mon, Jan 08, 2007 at 10:04:36 +1100, David Chinner wrote:
> On Sun, Jan 07, 2007 at 02:48:12PM -0800, Andrew Morton wrote:
> > On Mon, 8 Jan 2007 09:23:41 +1100
> > David Chinner <[EMAIL PROTECTED]> wrote:
> > 
> > > How are you supposed to invalidate a range of pages in a mapping for
> > > this case, then? invalidate_mapping_pages() would appear to be the
> > > candidate (the generic code uses this), but it _skips_ pages that
> > > are already mapped.
> > 
> > unmap_mapping_range()?
> 
> /me looks at how it's used in invalidate_inode_pages2_range() and
> decides it's easier not to call this directly.
> 
> > > So, am I correct in assuming we should be calling 
> > > invalidate_inode_pages2_range()
> > > instead of truncate_inode_pages()?
> > 
> > That would be conventional.
> 
>  in that case the following patch should fix the warning:

I tried dt+strace+cinfo with this patch applied and got no warnings.
Thanks for quick fix.

-- 
Do what you love because life is too short for anything else.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-08 Thread Sami Farin
On Mon, Jan 08, 2007 at 10:04:36 +1100, David Chinner wrote:
 On Sun, Jan 07, 2007 at 02:48:12PM -0800, Andrew Morton wrote:
  On Mon, 8 Jan 2007 09:23:41 +1100
  David Chinner [EMAIL PROTECTED] wrote:
  
   How are you supposed to invalidate a range of pages in a mapping for
   this case, then? invalidate_mapping_pages() would appear to be the
   candidate (the generic code uses this), but it _skips_ pages that
   are already mapped.
  
  unmap_mapping_range()?
 
 /me looks at how it's used in invalidate_inode_pages2_range() and
 decides it's easier not to call this directly.
 
   So, am I correct in assuming we should be calling 
   invalidate_inode_pages2_range()
   instead of truncate_inode_pages()?
  
  That would be conventional.
 
  in that case the following patch should fix the warning:

I tried dt+strace+cinfo with this patch applied and got no warnings.
Thanks for quick fix.

-- 
Do what you love because life is too short for anything else.

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-07 Thread David Chinner
On Sun, Jan 07, 2007 at 02:48:12PM -0800, Andrew Morton wrote:
> On Mon, 8 Jan 2007 09:23:41 +1100
> David Chinner <[EMAIL PROTECTED]> wrote:
> 
> > How are you supposed to invalidate a range of pages in a mapping for
> > this case, then? invalidate_mapping_pages() would appear to be the
> > candidate (the generic code uses this), but it _skips_ pages that
> > are already mapped.
> 
> unmap_mapping_range()?

/me looks at how it's used in invalidate_inode_pages2_range() and
decides it's easier not to call this directly.

> > So, am I correct in assuming we should be calling 
> > invalidate_inode_pages2_range()
> > instead of truncate_inode_pages()?
> 
> That would be conventional.

 in that case the following patch should fix the warning:

---
 fs/xfs/linux-2.6/xfs_fs_subr.c |   10 --
 1 file changed, 8 insertions(+), 2 deletions(-)

Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_fs_subr.c
===
--- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_fs_subr.c   2006-12-12 
12:05:17.0 +1100
+++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_fs_subr.c2007-01-08 
09:30:22.056571711 +1100
@@ -21,6 +21,8 @@ int  fs_noerr(void) { return 0; }
 int  fs_nosys(void) { return ENOSYS; }
 void fs_noval(void) { return; }
 
+#define XFS_OFF_TO_PCSIZE(off) \
+   (((off) + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT)
 void
 fs_tosspages(
bhv_desc_t  *bdp,
@@ -32,7 +34,9 @@ fs_tosspages(
struct inode*ip = vn_to_inode(vp);
 
if (VN_CACHED(vp))
-   truncate_inode_pages(ip->i_mapping, first);
+   invalidate_inode_pages2_range(ip->i_mapping,
+   XFS_OFF_TO_PCSIZE(first),
+   XFS_OFF_TO_PCSIZE(last));
 }
 
 void
@@ -49,7 +53,9 @@ fs_flushinval_pages(
if (VN_TRUNC(vp))
VUNTRUNCATE(vp);
filemap_write_and_wait(ip->i_mapping);
-   truncate_inode_pages(ip->i_mapping, first);
+   invalidate_inode_pages2_range(ip->i_mapping,
+   XFS_OFF_TO_PCSIZE(first),
+   XFS_OFF_TO_PCSIZE(last));
}
 }
 

-- 
Dave Chinner
Principal Engineer
SGI Australian Software Group
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-07 Thread Andrew Morton
On Mon, 8 Jan 2007 09:23:41 +1100
David Chinner <[EMAIL PROTECTED]> wrote:

> How are you supposed to invalidate a range of pages in a mapping for
> this case, then? invalidate_mapping_pages() would appear to be the
> candidate (the generic code uses this), but it _skips_ pages that
> are already mapped.

unmap_mapping_range()?

> So, am I correct in assuming we should be calling 
> invalidate_inode_pages2_range()
> instead of truncate_inode_pages()?

That would be conventional.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-07 Thread David Chinner
On Sat, Jan 06, 2007 at 09:11:07PM +, Hugh Dickins wrote:
> On Sat, 6 Jan 2007, Sami Farin wrote:
> 
> > Linux 2.6.19.1 SMP [2] on Pentium D...
> > I was running dt-15.14 [2] and I ran
> > "cinfo datafile" (it does mincore()).
> > Well it went OK but when I ran "strace cinfo datafile"...:
> > 04:18:48.062466 mincore(0x37f1f000, 2147266560, 
> 
> You rightly noted in a followup that there have been changes to
> mincore, but I doubt they have any bearing on this: I think the
> BUG just happened at the same time as your mincore.
> 
> > ...
> > 2007-01-06 04:19:03.788181500 <4>BUG: warning at 
> > mm/truncate.c:60/cancel_dirty_page()
> > 2007-01-06 04:19:03.788221500 <4> [] dump_trace+0x215/0x21a
> > 2007-01-06 04:19:03.788223500 <4> [] show_trace_log_lvl+0x1a/0x30
> > 2007-01-06 04:19:03.788224500 <4> [] show_trace+0x12/0x14
> > 2007-01-06 04:19:03.788225500 <4> [] dump_stack+0x19/0x1b
> > 2007-01-06 04:19:03.788227500 <4> [] cancel_dirty_page+0x7e/0x80
> > 2007-01-06 04:19:03.788228500 <4> [] 
> > truncate_complete_page+0x1a/0x47
> > 2007-01-06 04:19:03.788229500 <4> [] 
> > truncate_inode_pages_range+0x114/0x2ae
> > 2007-01-06 04:19:03.788245500 <4> [] 
> > truncate_inode_pages+0x1a/0x1c
> > 2007-01-06 04:19:03.788247500 <4> [] fs_flushinval_pages+0x40/0x77
> > 2007-01-06 04:19:03.788248500 <4> [] xfs_write+0x8c4/0xb68
> > 2007-01-06 04:19:03.788250500 <4> [] xfs_file_aio_write+0x7e/0x95
> > 2007-01-06 04:19:03.788251500 <4> [] do_sync_write+0xca/0x119
> > 2007-01-06 04:19:03.788265500 <4> [] vfs_write+0x187/0x18c
> > 2007-01-06 04:19:03.788267500 <4> [] sys_write+0x3d/0x64
> > 2007-01-06 04:19:03.788268500 <4> [] syscall_call+0x7/0xb
> > 2007-01-06 04:19:03.788269500 <4> [<001cf410>] 0x1cf410
> > 2007-01-06 04:19:03.788289500 <4> ===
> 
> So... XFS uses truncate_inode_pages when serving the write system call.

Only when you are doing direct I/O. XFS does direct writes without
the i_mutex held, so it has to invalidate the range of cached pages
while holding it's own locks to ensure direct I/O cache semantics are
kept.

> That's very inventive,

Not really - been doing it for years.

> and now it looks like Linus' cancel_dirty_page
> and new warning have caught it out.  VM people expect it to be called
> either when freeing an inode no longer in use, or when doing a truncate,
> after ensuring that all pages mapped into userspace have been taken out.

Ok, so we are punching a hole in the middle of the address space
because we are doing direct I/O on it and need to invalidate the
cache.

How are you supposed to invalidate a range of pages in a mapping for
this case, then? invalidate_mapping_pages() would appear to be the
candidate (the generic code uses this), but it _skips_ pages that
are already mapped.  invalidate_mapping_pages() then advises you to
use truncate_inode_pages():

/**
 * invalidate_mapping_pages - Invalidate all the unlocked pages of one inode
 * @mapping: the address_space which holds the pages to invalidate
 * @start: the offset 'from' which to invalidate
 * @end: the offset 'to' which to invalidate (inclusive)
 *
 * This function only removes the unlocked pages, if you want to
 * remove all the pages of one inode, you must call truncate_inode_pages.
 *
 * invalidate_mapping_pages() will not block on IO activity. It will not
 * invalidate pages which are dirty, locked, under writeback or mapped into
 * pagetables.
 */

We want to remove all pages within the range given, so, as directed by
the comment here, we use truncate_inode_pages(). Says nothing about
mappings needing to be removed first so I guess that's where we've
been caught.

I think we can use invalidate_inode_pages2_range(), but that doesn't
handle partial page invalidations. I think this will be ok, but it's
going to need some serious fsx testing on blocksize != page size
configs.

So, am I correct in assuming we should be calling 
invalidate_inode_pages2_range()
instead of truncate_inode_pages()?

Cheers,

Dave.
-- 
Dave Chinner
Principal Engineer
SGI Australian Software Group
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-07 Thread David Chinner
On Sat, Jan 06, 2007 at 09:11:07PM +, Hugh Dickins wrote:
 On Sat, 6 Jan 2007, Sami Farin wrote:
 
  Linux 2.6.19.1 SMP [2] on Pentium D...
  I was running dt-15.14 [2] and I ran
  cinfo datafile (it does mincore()).
  Well it went OK but when I ran strace cinfo datafile...:
  04:18:48.062466 mincore(0x37f1f000, 2147266560, 
 
 You rightly noted in a followup that there have been changes to
 mincore, but I doubt they have any bearing on this: I think the
 BUG just happened at the same time as your mincore.
 
  ...
  2007-01-06 04:19:03.788181500 4BUG: warning at 
  mm/truncate.c:60/cancel_dirty_page()
  2007-01-06 04:19:03.788221500 4 [c0103cfb] dump_trace+0x215/0x21a
  2007-01-06 04:19:03.788223500 4 [c0103da3] show_trace_log_lvl+0x1a/0x30
  2007-01-06 04:19:03.788224500 4 [c0103dcb] show_trace+0x12/0x14
  2007-01-06 04:19:03.788225500 4 [c0103ec8] dump_stack+0x19/0x1b
  2007-01-06 04:19:03.788227500 4 [c01546a6] cancel_dirty_page+0x7e/0x80
  2007-01-06 04:19:03.788228500 4 [c01546c2] 
  truncate_complete_page+0x1a/0x47
  2007-01-06 04:19:03.788229500 4 [c0154854] 
  truncate_inode_pages_range+0x114/0x2ae
  2007-01-06 04:19:03.788245500 4 [c0154a08] 
  truncate_inode_pages+0x1a/0x1c
  2007-01-06 04:19:03.788247500 4 [c0269244] fs_flushinval_pages+0x40/0x77
  2007-01-06 04:19:03.788248500 4 [c026d48c] xfs_write+0x8c4/0xb68
  2007-01-06 04:19:03.788250500 4 [c0268b14] xfs_file_aio_write+0x7e/0x95
  2007-01-06 04:19:03.788251500 4 [c016d66c] do_sync_write+0xca/0x119
  2007-01-06 04:19:03.788265500 4 [c016d842] vfs_write+0x187/0x18c
  2007-01-06 04:19:03.788267500 4 [c016d8e8] sys_write+0x3d/0x64
  2007-01-06 04:19:03.788268500 4 [c0102e73] syscall_call+0x7/0xb
  2007-01-06 04:19:03.788269500 4 [001cf410] 0x1cf410
  2007-01-06 04:19:03.788289500 4 ===
 
 So... XFS uses truncate_inode_pages when serving the write system call.

Only when you are doing direct I/O. XFS does direct writes without
the i_mutex held, so it has to invalidate the range of cached pages
while holding it's own locks to ensure direct I/O cache semantics are
kept.

 That's very inventive,

Not really - been doing it for years.

 and now it looks like Linus' cancel_dirty_page
 and new warning have caught it out.  VM people expect it to be called
 either when freeing an inode no longer in use, or when doing a truncate,
 after ensuring that all pages mapped into userspace have been taken out.

Ok, so we are punching a hole in the middle of the address space
because we are doing direct I/O on it and need to invalidate the
cache.

How are you supposed to invalidate a range of pages in a mapping for
this case, then? invalidate_mapping_pages() would appear to be the
candidate (the generic code uses this), but it _skips_ pages that
are already mapped.  invalidate_mapping_pages() then advises you to
use truncate_inode_pages():

/**
 * invalidate_mapping_pages - Invalidate all the unlocked pages of one inode
 * @mapping: the address_space which holds the pages to invalidate
 * @start: the offset 'from' which to invalidate
 * @end: the offset 'to' which to invalidate (inclusive)
 *
 * This function only removes the unlocked pages, if you want to
 * remove all the pages of one inode, you must call truncate_inode_pages.
 *
 * invalidate_mapping_pages() will not block on IO activity. It will not
 * invalidate pages which are dirty, locked, under writeback or mapped into
 * pagetables.
 */

We want to remove all pages within the range given, so, as directed by
the comment here, we use truncate_inode_pages(). Says nothing about
mappings needing to be removed first so I guess that's where we've
been caught.

I think we can use invalidate_inode_pages2_range(), but that doesn't
handle partial page invalidations. I think this will be ok, but it's
going to need some serious fsx testing on blocksize != page size
configs.

So, am I correct in assuming we should be calling 
invalidate_inode_pages2_range()
instead of truncate_inode_pages()?

Cheers,

Dave.
-- 
Dave Chinner
Principal Engineer
SGI Australian Software Group
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-07 Thread Andrew Morton
On Mon, 8 Jan 2007 09:23:41 +1100
David Chinner [EMAIL PROTECTED] wrote:

 How are you supposed to invalidate a range of pages in a mapping for
 this case, then? invalidate_mapping_pages() would appear to be the
 candidate (the generic code uses this), but it _skips_ pages that
 are already mapped.

unmap_mapping_range()?

 So, am I correct in assuming we should be calling 
 invalidate_inode_pages2_range()
 instead of truncate_inode_pages()?

That would be conventional.
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-07 Thread David Chinner
On Sun, Jan 07, 2007 at 02:48:12PM -0800, Andrew Morton wrote:
 On Mon, 8 Jan 2007 09:23:41 +1100
 David Chinner [EMAIL PROTECTED] wrote:
 
  How are you supposed to invalidate a range of pages in a mapping for
  this case, then? invalidate_mapping_pages() would appear to be the
  candidate (the generic code uses this), but it _skips_ pages that
  are already mapped.
 
 unmap_mapping_range()?

/me looks at how it's used in invalidate_inode_pages2_range() and
decides it's easier not to call this directly.

  So, am I correct in assuming we should be calling 
  invalidate_inode_pages2_range()
  instead of truncate_inode_pages()?
 
 That would be conventional.

 in that case the following patch should fix the warning:

---
 fs/xfs/linux-2.6/xfs_fs_subr.c |   10 --
 1 file changed, 8 insertions(+), 2 deletions(-)

Index: 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_fs_subr.c
===
--- 2.6.x-xfs-new.orig/fs/xfs/linux-2.6/xfs_fs_subr.c   2006-12-12 
12:05:17.0 +1100
+++ 2.6.x-xfs-new/fs/xfs/linux-2.6/xfs_fs_subr.c2007-01-08 
09:30:22.056571711 +1100
@@ -21,6 +21,8 @@ int  fs_noerr(void) { return 0; }
 int  fs_nosys(void) { return ENOSYS; }
 void fs_noval(void) { return; }
 
+#define XFS_OFF_TO_PCSIZE(off) \
+   (((off) + PAGE_CACHE_SIZE - 1)  PAGE_CACHE_SHIFT)
 void
 fs_tosspages(
bhv_desc_t  *bdp,
@@ -32,7 +34,9 @@ fs_tosspages(
struct inode*ip = vn_to_inode(vp);
 
if (VN_CACHED(vp))
-   truncate_inode_pages(ip-i_mapping, first);
+   invalidate_inode_pages2_range(ip-i_mapping,
+   XFS_OFF_TO_PCSIZE(first),
+   XFS_OFF_TO_PCSIZE(last));
 }
 
 void
@@ -49,7 +53,9 @@ fs_flushinval_pages(
if (VN_TRUNC(vp))
VUNTRUNCATE(vp);
filemap_write_and_wait(ip-i_mapping);
-   truncate_inode_pages(ip-i_mapping, first);
+   invalidate_inode_pages2_range(ip-i_mapping,
+   XFS_OFF_TO_PCSIZE(first),
+   XFS_OFF_TO_PCSIZE(last));
}
 }
 

-- 
Dave Chinner
Principal Engineer
SGI Australian Software Group
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-06 Thread Sami Farin
On Sat, Jan 06, 2007 at 21:11:07 +, Hugh Dickins wrote:
> On Sat, 6 Jan 2007, Sami Farin wrote:
> 
> > Linux 2.6.19.1 SMP [2] on Pentium D...
> > I was running dt-15.14 [2] and I ran
> > "cinfo datafile" (it does mincore()).
> > Well it went OK but when I ran "strace cinfo datafile"...:
> > 04:18:48.062466 mincore(0x37f1f000, 2147266560, 
> 
> You rightly noted in a followup that there have been changes to
> mincore, but I doubt they have any bearing on this: I think the
> BUG just happened at the same time as your mincore.

BUG does not happen if I do not do "strace cinfo dtfile" with O_DIRECT
test file.  It's easy to reproduce.
Without strace BUG does not happen.

Now I got it again, with also the mincore patch applied:

01:48:42.831060 mincore(0x37ff1000, 2147254272, ^[

2007-01-07 01:48:51.480531500 <4>BUG: warning at 
mm/truncate.c:60/cancel_dirty_page()
2007-01-07 01:48:51.480532500 <4> [] dump_trace+0x215/0x21a
2007-01-07 01:48:51.480557500 <4> [] show_trace_log_lvl+0x1a/0x30
2007-01-07 01:48:51.480559500 <4> [] show_trace+0x12/0x14
2007-01-07 01:48:51.480560500 <4> [] dump_stack+0x19/0x1b
2007-01-07 01:48:51.480561500 <4> [] cancel_dirty_page+0x7e/0x80
2007-01-07 01:48:51.480562500 <4> [] truncate_complete_page+0x1a/0x47
2007-01-07 01:48:51.480563500 <4> [] 
truncate_inode_pages_range+0x114/0x2ae
2007-01-07 01:48:51.480564500 <4> [] truncate_inode_pages+0x1a/0x1c
2007-01-07 01:48:51.480574500 <4> [] fs_flushinval_pages+0x40/0x77
2007-01-07 01:48:51.480575500 <4> [] xfs_write+0x8c4/0xb68
2007-01-07 01:48:51.480576500 <4> [] xfs_file_aio_write+0x7e/0x95
2007-01-07 01:48:51.480577500 <4> [] do_sync_write+0xca/0x119
2007-01-07 01:48:51.480578500 <4> [] vfs_write+0x187/0x18c
2007-01-07 01:48:51.480579500 <4> [] sys_write+0x3d/0x64
2007-01-07 01:48:51.480589500 <4> [] syscall_call+0x7/0xb
2007-01-07 01:48:51.480590500 <4> [<00bed410>] 0xbed410

$ /sbin/sysctl -n vm.dirty_expire_centisecs
999

cancel_dirty_page would be more useful if it executed WARN_ON
at max once per 10s or something instead of five times out of 2^32 or 2^64
errors...  I mean, user might think program/kernel started to work OK when
BUGs stop if he/she doesn't check cancel_dirty_page() function.


--- linux-2.6.19/mm/truncate.c.bak  2007-01-01 19:10:00.62731 +0200
+++ linux-2.6.19/mm/truncate.c  2007-01-07 02:35:53.786636897 +0200
@@ -55,11 +55,16 @@ void cancel_dirty_page(struct page *page
 {
/* If we're cancelling the page, it had better not be mapped any more */
if (page_mapped(page)) {
-   static unsigned int warncount;
+   static int first = 1;
+   static unsigned long lastwarn;
 
-   WARN_ON(++warncount < 5);
+   if (unlikely(first) || time_after(jiffies, (lastwarn + 10*HZ))) 
{
+   first = 0;
+   lastwarn = jiffies;
+   WARN_ON(42);
+   }
}
-   
+
if (TestClearPageDirty(page)) {
        struct address_space *mapping = page->mapping;
if (mapping && mapping_cap_account_dirty(mapping)) {


> > ...
> > 2007-01-06 04:19:03.788181500 <4>BUG: warning at 
> > mm/truncate.c:60/cancel_dirty_page()
> > 2007-01-06 04:19:03.788221500 <4> [] dump_trace+0x215/0x21a
> > 2007-01-06 04:19:03.788223500 <4> [] show_trace_log_lvl+0x1a/0x30
> > 2007-01-06 04:19:03.788224500 <4> [] show_trace+0x12/0x14
> > 2007-01-06 04:19:03.788225500 <4> [] dump_stack+0x19/0x1b
> > 2007-01-06 04:19:03.788227500 <4> [] cancel_dirty_page+0x7e/0x80
> > 2007-01-06 04:19:03.788228500 <4> [] 
> > truncate_complete_page+0x1a/0x47
> > 2007-01-06 04:19:03.788229500 <4> [] 
> > truncate_inode_pages_range+0x114/0x2ae
> > 2007-01-06 04:19:03.788245500 <4> [] 
> > truncate_inode_pages+0x1a/0x1c
> > 2007-01-06 04:19:03.788247500 <4> [] fs_flushinval_pages+0x40/0x77
> > 2007-01-06 04:19:03.788248500 <4> [] xfs_write+0x8c4/0xb68
> > 2007-01-06 04:19:03.788250500 <4> [] xfs_file_aio_write+0x7e/0x95
> > 2007-01-06 04:19:03.788251500 <4> [] do_sync_write+0xca/0x119
> > 2007-01-06 04:19:03.788265500 <4> [] vfs_write+0x187/0x18c
> > 2007-01-06 04:19:03.788267500 <4> [] sys_write+0x3d/0x64
> > 2007-01-06 04:19:03.788268500 <4> [] syscall_call+0x7/0xb
> > 2007-01-06 04:19:03.788269500 <4> [<001cf410>] 0x1cf410
> > 2007-01-06 04:19:03.788289500 <4> ===
> 
> So... XFS uses truncate_inode_pages when serving the write system call.
> That's very inventive, and now it looks like Linus' cancel_dirty_page
> and 

Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-06 Thread Hugh Dickins
On Sat, 6 Jan 2007, Sami Farin wrote:

> Linux 2.6.19.1 SMP [2] on Pentium D...
> I was running dt-15.14 [2] and I ran
> "cinfo datafile" (it does mincore()).
> Well it went OK but when I ran "strace cinfo datafile"...:
> 04:18:48.062466 mincore(0x37f1f000, 2147266560, 

You rightly noted in a followup that there have been changes to
mincore, but I doubt they have any bearing on this: I think the
BUG just happened at the same time as your mincore.

> ...
> 2007-01-06 04:19:03.788181500 <4>BUG: warning at 
> mm/truncate.c:60/cancel_dirty_page()
> 2007-01-06 04:19:03.788221500 <4> [] dump_trace+0x215/0x21a
> 2007-01-06 04:19:03.788223500 <4> [] show_trace_log_lvl+0x1a/0x30
> 2007-01-06 04:19:03.788224500 <4> [] show_trace+0x12/0x14
> 2007-01-06 04:19:03.788225500 <4> [] dump_stack+0x19/0x1b
> 2007-01-06 04:19:03.788227500 <4> [] cancel_dirty_page+0x7e/0x80
> 2007-01-06 04:19:03.788228500 <4> [] 
> truncate_complete_page+0x1a/0x47
> 2007-01-06 04:19:03.788229500 <4> [] 
> truncate_inode_pages_range+0x114/0x2ae
> 2007-01-06 04:19:03.788245500 <4> [] truncate_inode_pages+0x1a/0x1c
> 2007-01-06 04:19:03.788247500 <4> [] fs_flushinval_pages+0x40/0x77
> 2007-01-06 04:19:03.788248500 <4> [] xfs_write+0x8c4/0xb68
> 2007-01-06 04:19:03.788250500 <4> [] xfs_file_aio_write+0x7e/0x95
> 2007-01-06 04:19:03.788251500 <4> [] do_sync_write+0xca/0x119
> 2007-01-06 04:19:03.788265500 <4> [] vfs_write+0x187/0x18c
> 2007-01-06 04:19:03.788267500 <4> [] sys_write+0x3d/0x64
> 2007-01-06 04:19:03.788268500 <4> [] syscall_call+0x7/0xb
> 2007-01-06 04:19:03.788269500 <4> [<001cf410>] 0x1cf410
> 2007-01-06 04:19:03.788289500 <4> ===

So... XFS uses truncate_inode_pages when serving the write system call.
That's very inventive, and now it looks like Linus' cancel_dirty_page
and new warning have caught it out.  VM people expect it to be called
either when freeing an inode no longer in use, or when doing a truncate,
after ensuring that all pages mapped into userspace have been taken out.

> 
> funny that when stracing, mincore does not return?
> 
> $ time cinfo dtfile-2091
> dtfile-2091: 524285 pages, 0 pages cached (0.00%)
> 
> real0m0.049s
> user0m0.003s
> sys 0m0.046s
> 
> safari6941 29.9 10.8 2098768 108788 pts/2  D+   04:20   3:41 strace 
> -vfttT cinfo dtfile-2091
> 
> straceD C179A000 0  6941   8737  6942  2089 (NOTLB)
>e790 0046 c172e240 c179a000 c1731880 c17c51a0 c17b5be0 c1771c20
>e9b1f740 0086 d55dd74c e76c  c02666b8 c17fd700 c2c2513c
>fdac b2203610 616f c2c25030 c17fd700 e7f8 c17d31f0 e79c
> Call Trace:
>  [] io_schedule+0x26/0x30
>  [] sync_page+0x3d/0x48
>  [] __wait_on_bit_lock+0x45/0x67
>  [] __lock_page+0x88/0x95
>  [] filemap_nopage+0x1f4/0x386
>  [] do_no_page+0x82/0x2fa
>  [] __handle_mm_fault+0x1fe/0x2eb
>  [] get_user_pages+0xc7/0x2e5
>  [] access_process_vm+0x74/0x116
>  [] arch_ptrace+0x388/0x539
>  [] sys_ptrace+0x58/0xb9
>  [] syscall_call+0x7/0xb
>  [<0081e410>] 0x81e410
>  ===
> cinfo t CB7DA040 0  6942   6941 (NOTLB)
>e5fcdee8 0046 ce7d9284 cb7da040 ce7d9284 cb7da078 cb7da040 e5fcdf10
>cb7da040 13a973f5 60e3 0078  c2c25030 c1805700 d483013c
>0021fd53 13a97513 60e3 d4830030 e5fcdf04 0005  e5fcdefc
> Call Trace:
>  [] ptrace_stop+0xf8/0x17f
>  [] ptrace_notify+0x6a/0x92
>  [] do_syscall_trace+0xd4/0x1eb
>  [] syscall_exit_work+0x16/0x1b
>  [<00878410>] 0x878410
>  ===
> 
> 
> [1]
> includes these
> 8c08540f8755c451d8b96ea14cfe796bc3cd712d [PATCH] clean up 
> __set_page_dirty_nobuffers()
> 55e829af06681e5d731c03ba04febbd1c76ca293 [PATCH] io-accounting: write 
> accounting
> e08748ce01e02f0ec154b141f392ccb9555333f4 [PATCH] io-accounting: 
> write-cancel accounting
> fba2591bf4e418b6c3f9f8794c9dd8fe40ae7bd9 VM: Remove 
> "clear_page_dirty()" and "test_clear_page_dirty()" functions
> 3e67c0987d7567ad41164a153dca9a43b11d [PATCH] truncate: clear page 
> dirtiness before running try_to_free_buffers()
> 5f2a105d5e33a038a717995d2738434f9c25aed2 [PATCH] truncate: dirty 
> memory accounting fix
> 8368e328dfe1c534957051333a87b3210a12743b Clean up and export 
> cancel_dirty_page() to modules
> 7658cc289288b8ae7dd2c2224549a048431222b3 VM: Fix nasty and subtle 
> race in shared mmap'ed page writeback
> 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2 [PATCH] io-accounting:

Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-06 Thread Hugh Dickins
On Sat, 6 Jan 2007, Sami Farin wrote:

 Linux 2.6.19.1 SMP [2] on Pentium D...
 I was running dt-15.14 [2] and I ran
 cinfo datafile (it does mincore()).
 Well it went OK but when I ran strace cinfo datafile...:
 04:18:48.062466 mincore(0x37f1f000, 2147266560, 

You rightly noted in a followup that there have been changes to
mincore, but I doubt they have any bearing on this: I think the
BUG just happened at the same time as your mincore.

 ...
 2007-01-06 04:19:03.788181500 4BUG: warning at 
 mm/truncate.c:60/cancel_dirty_page()
 2007-01-06 04:19:03.788221500 4 [c0103cfb] dump_trace+0x215/0x21a
 2007-01-06 04:19:03.788223500 4 [c0103da3] show_trace_log_lvl+0x1a/0x30
 2007-01-06 04:19:03.788224500 4 [c0103dcb] show_trace+0x12/0x14
 2007-01-06 04:19:03.788225500 4 [c0103ec8] dump_stack+0x19/0x1b
 2007-01-06 04:19:03.788227500 4 [c01546a6] cancel_dirty_page+0x7e/0x80
 2007-01-06 04:19:03.788228500 4 [c01546c2] 
 truncate_complete_page+0x1a/0x47
 2007-01-06 04:19:03.788229500 4 [c0154854] 
 truncate_inode_pages_range+0x114/0x2ae
 2007-01-06 04:19:03.788245500 4 [c0154a08] truncate_inode_pages+0x1a/0x1c
 2007-01-06 04:19:03.788247500 4 [c0269244] fs_flushinval_pages+0x40/0x77
 2007-01-06 04:19:03.788248500 4 [c026d48c] xfs_write+0x8c4/0xb68
 2007-01-06 04:19:03.788250500 4 [c0268b14] xfs_file_aio_write+0x7e/0x95
 2007-01-06 04:19:03.788251500 4 [c016d66c] do_sync_write+0xca/0x119
 2007-01-06 04:19:03.788265500 4 [c016d842] vfs_write+0x187/0x18c
 2007-01-06 04:19:03.788267500 4 [c016d8e8] sys_write+0x3d/0x64
 2007-01-06 04:19:03.788268500 4 [c0102e73] syscall_call+0x7/0xb
 2007-01-06 04:19:03.788269500 4 [001cf410] 0x1cf410
 2007-01-06 04:19:03.788289500 4 ===

So... XFS uses truncate_inode_pages when serving the write system call.
That's very inventive, and now it looks like Linus' cancel_dirty_page
and new warning have caught it out.  VM people expect it to be called
either when freeing an inode no longer in use, or when doing a truncate,
after ensuring that all pages mapped into userspace have been taken out.

 
 funny that when stracing, mincore does not return?
 
 $ time cinfo dtfile-2091
 dtfile-2091: 524285 pages, 0 pages cached (0.00%)
 
 real0m0.049s
 user0m0.003s
 sys 0m0.046s
 
 safari6941 29.9 10.8 2098768 108788 pts/2  D+   04:20   3:41 strace 
 -vfttT cinfo dtfile-2091
 
 straceD C179A000 0  6941   8737  6942  2089 (NOTLB)
e790 0046 c172e240 c179a000 c1731880 c17c51a0 c17b5be0 c1771c20
e9b1f740 0086 d55dd74c e76c  c02666b8 c17fd700 c2c2513c
fdac b2203610 616f c2c25030 c17fd700 e7f8 c17d31f0 e79c
 Call Trace:
  [c04b4568] io_schedule+0x26/0x30
  [c014cdad] sync_page+0x3d/0x48
  [c04b47b1] __wait_on_bit_lock+0x45/0x67
  [c014d556] __lock_page+0x88/0x95
  [c014e5a7] filemap_nopage+0x1f4/0x386
  [c015b24c] do_no_page+0x82/0x2fa
  [c015b8a3] __handle_mm_fault+0x1fe/0x2eb
  [c0159a99] get_user_pages+0xc7/0x2e5
  [c015bb8a] access_process_vm+0x74/0x116
  [c010639e] arch_ptrace+0x388/0x539
  [c012ad7f] sys_ptrace+0x58/0xb9
  [c0102e73] syscall_call+0x7/0xb
  [0081e410] 0x81e410
  ===
 cinfo t CB7DA040 0  6942   6941 (NOTLB)
e5fcdee8 0046 ce7d9284 cb7da040 ce7d9284 cb7da078 cb7da040 e5fcdf10
cb7da040 13a973f5 60e3 0078  c2c25030 c1805700 d483013c
0021fd53 13a97513 60e3 d4830030 e5fcdf04 0005  e5fcdefc
 Call Trace:
  [c012e32b] ptrace_stop+0xf8/0x17f
  [c012e41c] ptrace_notify+0x6a/0x92
  [c01066a9] do_syscall_trace+0xd4/0x1eb
  [c0102f66] syscall_exit_work+0x16/0x1b
  [00878410] 0x878410
  ===
 
 
 [1]
 includes these
 8c08540f8755c451d8b96ea14cfe796bc3cd712d [PATCH] clean up 
 __set_page_dirty_nobuffers()
 55e829af06681e5d731c03ba04febbd1c76ca293 [PATCH] io-accounting: write 
 accounting
 e08748ce01e02f0ec154b141f392ccb9555333f4 [PATCH] io-accounting: 
 write-cancel accounting
 fba2591bf4e418b6c3f9f8794c9dd8fe40ae7bd9 VM: Remove 
 clear_page_dirty() and test_clear_page_dirty() functions
 3e67c0987d7567ad41164a153dca9a43b11d [PATCH] truncate: clear page 
 dirtiness before running try_to_free_buffers()
 5f2a105d5e33a038a717995d2738434f9c25aed2 [PATCH] truncate: dirty 
 memory accounting fix
 8368e328dfe1c534957051333a87b3210a12743b Clean up and export 
 cancel_dirty_page() to modules
 7658cc289288b8ae7dd2c2224549a048431222b3 VM: Fix nasty and subtle 
 race in shared mmap'ed page writeback
 7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2 [PATCH] io-accounting: core 
 statistics
 cb876f451455b6187a7d69de2c112c45ec4b7f99 Fix up CIFS for 
 test_clear_page_dirty() removal
 7dfb71030f7636a0d65200158113c37764552f93 [PATCH] Add 
 include/linux/freezer.h and move definitions from sched.h
 46d2277c796f9f4937bfa668c40b2e3f43e93dd0 Clean up and make 
 try_to_free_buffers() not 

Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-06 Thread Sami Farin
On Sat, Jan 06, 2007 at 21:11:07 +, Hugh Dickins wrote:
 On Sat, 6 Jan 2007, Sami Farin wrote:
 
  Linux 2.6.19.1 SMP [2] on Pentium D...
  I was running dt-15.14 [2] and I ran
  cinfo datafile (it does mincore()).
  Well it went OK but when I ran strace cinfo datafile...:
  04:18:48.062466 mincore(0x37f1f000, 2147266560, 
 
 You rightly noted in a followup that there have been changes to
 mincore, but I doubt they have any bearing on this: I think the
 BUG just happened at the same time as your mincore.

BUG does not happen if I do not do strace cinfo dtfile with O_DIRECT
test file.  It's easy to reproduce.
Without strace BUG does not happen.

Now I got it again, with also the mincore patch applied:

01:48:42.831060 mincore(0x37ff1000, 2147254272, ^[

2007-01-07 01:48:51.480531500 4BUG: warning at 
mm/truncate.c:60/cancel_dirty_page()
2007-01-07 01:48:51.480532500 4 [c0103cff] dump_trace+0x215/0x21a
2007-01-07 01:48:51.480557500 4 [c0103da7] show_trace_log_lvl+0x1a/0x30
2007-01-07 01:48:51.480559500 4 [c0103dcf] show_trace+0x12/0x14
2007-01-07 01:48:51.480560500 4 [c0103ecc] dump_stack+0x19/0x1b
2007-01-07 01:48:51.480561500 4 [c0155616] cancel_dirty_page+0x7e/0x80
2007-01-07 01:48:51.480562500 4 [c0155632] truncate_complete_page+0x1a/0x47
2007-01-07 01:48:51.480563500 4 [c01557c4] 
truncate_inode_pages_range+0x114/0x2ae
2007-01-07 01:48:51.480564500 4 [c0155978] truncate_inode_pages+0x1a/0x1c
2007-01-07 01:48:51.480574500 4 [c026a558] fs_flushinval_pages+0x40/0x77
2007-01-07 01:48:51.480575500 4 [c026e7a8] xfs_write+0x8c4/0xb68
2007-01-07 01:48:51.480576500 4 [c0269e28] xfs_file_aio_write+0x7e/0x95
2007-01-07 01:48:51.480577500 4 [c016e5d0] do_sync_write+0xca/0x119
2007-01-07 01:48:51.480578500 4 [c016e7a6] vfs_write+0x187/0x18c
2007-01-07 01:48:51.480579500 4 [c016e84c] sys_write+0x3d/0x64
2007-01-07 01:48:51.480589500 4 [c0102e77] syscall_call+0x7/0xb
2007-01-07 01:48:51.480590500 4 [00bed410] 0xbed410

$ /sbin/sysctl -n vm.dirty_expire_centisecs
999

cancel_dirty_page would be more useful if it executed WARN_ON
at max once per 10s or something instead of five times out of 2^32 or 2^64
errors...  I mean, user might think program/kernel started to work OK when
BUGs stop if he/she doesn't check cancel_dirty_page() function.


--- linux-2.6.19/mm/truncate.c.bak  2007-01-01 19:10:00.62731 +0200
+++ linux-2.6.19/mm/truncate.c  2007-01-07 02:35:53.786636897 +0200
@@ -55,11 +55,16 @@ void cancel_dirty_page(struct page *page
 {
/* If we're cancelling the page, it had better not be mapped any more */
if (page_mapped(page)) {
-   static unsigned int warncount;
+   static int first = 1;
+   static unsigned long lastwarn;
 
-   WARN_ON(++warncount  5);
+   if (unlikely(first) || time_after(jiffies, (lastwarn + 10*HZ))) 
{
+   first = 0;
+   lastwarn = jiffies;
+   WARN_ON(42);
+   }
}
-   
+
if (TestClearPageDirty(page)) {
struct address_space *mapping = page-mapping;
if (mapping  mapping_cap_account_dirty(mapping)) {


  ...
  2007-01-06 04:19:03.788181500 4BUG: warning at 
  mm/truncate.c:60/cancel_dirty_page()
  2007-01-06 04:19:03.788221500 4 [c0103cfb] dump_trace+0x215/0x21a
  2007-01-06 04:19:03.788223500 4 [c0103da3] show_trace_log_lvl+0x1a/0x30
  2007-01-06 04:19:03.788224500 4 [c0103dcb] show_trace+0x12/0x14
  2007-01-06 04:19:03.788225500 4 [c0103ec8] dump_stack+0x19/0x1b
  2007-01-06 04:19:03.788227500 4 [c01546a6] cancel_dirty_page+0x7e/0x80
  2007-01-06 04:19:03.788228500 4 [c01546c2] 
  truncate_complete_page+0x1a/0x47
  2007-01-06 04:19:03.788229500 4 [c0154854] 
  truncate_inode_pages_range+0x114/0x2ae
  2007-01-06 04:19:03.788245500 4 [c0154a08] 
  truncate_inode_pages+0x1a/0x1c
  2007-01-06 04:19:03.788247500 4 [c0269244] fs_flushinval_pages+0x40/0x77
  2007-01-06 04:19:03.788248500 4 [c026d48c] xfs_write+0x8c4/0xb68
  2007-01-06 04:19:03.788250500 4 [c0268b14] xfs_file_aio_write+0x7e/0x95
  2007-01-06 04:19:03.788251500 4 [c016d66c] do_sync_write+0xca/0x119
  2007-01-06 04:19:03.788265500 4 [c016d842] vfs_write+0x187/0x18c
  2007-01-06 04:19:03.788267500 4 [c016d8e8] sys_write+0x3d/0x64
  2007-01-06 04:19:03.788268500 4 [c0102e73] syscall_call+0x7/0xb
  2007-01-06 04:19:03.788269500 4 [001cf410] 0x1cf410
  2007-01-06 04:19:03.788289500 4 ===
 
 So... XFS uses truncate_inode_pages when serving the write system call.
 That's very inventive, and now it looks like Linus' cancel_dirty_page
 and new warning have caught it out.  VM people expect it to be called
 either when freeing an inode no longer in use, or when doing a truncate,
 after ensuring that all pages mapped into userspace have been taken out.

Maybe XFS people can tell is their code doing something unwise?

And about my earlier xfs_freeze issue... =)

...
 Gosh.  Might be better to reproduce it on 

Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-05 Thread Sami Farin
On Sat, Jan 06, 2007 at 04:39:07 +0200, Sami Farin wrote:
> Linux 2.6.19.1 SMP [2] on Pentium D...
> I was running dt-15.14 [2] and I ran
> "cinfo datafile" (it does mincore()).
> Well it went OK but when I ran "strace cinfo datafile"...:
> 04:18:48.062466 mincore(0x37f1f000, 2147266560, 

Forgot to do "git-whatchanged mm/mincore.c"...
Looks like git and 2.6.19.2 review patch include a fix for mincore.
Maybe it fixes this issue.

-- 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-05 Thread Sami Farin
Linux 2.6.19.1 SMP [2] on Pentium D...
I was running dt-15.14 [2] and I ran
"cinfo datafile" (it does mincore()).
Well it went OK but when I ran "strace cinfo datafile"...:
04:18:48.062466 mincore(0x37f1f000, 2147266560, 
...
2007-01-06 04:19:03.788181500 <4>BUG: warning at 
mm/truncate.c:60/cancel_dirty_page()
2007-01-06 04:19:03.788221500 <4> [] dump_trace+0x215/0x21a
2007-01-06 04:19:03.788223500 <4> [] show_trace_log_lvl+0x1a/0x30
2007-01-06 04:19:03.788224500 <4> [] show_trace+0x12/0x14
2007-01-06 04:19:03.788225500 <4> [] dump_stack+0x19/0x1b
2007-01-06 04:19:03.788227500 <4> [] cancel_dirty_page+0x7e/0x80
2007-01-06 04:19:03.788228500 <4> [] truncate_complete_page+0x1a/0x47
2007-01-06 04:19:03.788229500 <4> [] 
truncate_inode_pages_range+0x114/0x2ae
2007-01-06 04:19:03.788245500 <4> [] truncate_inode_pages+0x1a/0x1c
2007-01-06 04:19:03.788247500 <4> [] fs_flushinval_pages+0x40/0x77
2007-01-06 04:19:03.788248500 <4> [] xfs_write+0x8c4/0xb68
2007-01-06 04:19:03.788250500 <4> [] xfs_file_aio_write+0x7e/0x95
2007-01-06 04:19:03.788251500 <4> [] do_sync_write+0xca/0x119
2007-01-06 04:19:03.788265500 <4> [] vfs_write+0x187/0x18c
2007-01-06 04:19:03.788267500 <4> [] sys_write+0x3d/0x64
2007-01-06 04:19:03.788268500 <4> [] syscall_call+0x7/0xb
2007-01-06 04:19:03.788269500 <4> [<001cf410>] 0x1cf410
2007-01-06 04:19:03.788289500 <4> ===

funny that when stracing, mincore does not return?

$ time cinfo dtfile-2091
dtfile-2091: 524285 pages, 0 pages cached (0.00%)

real0m0.049s
user0m0.003s
sys 0m0.046s

safari6941 29.9 10.8 2098768 108788 pts/2  D+   04:20   3:41 strace -vfttT 
cinfo dtfile-2091

straceD C179A000 0  6941   8737  6942  2089 (NOTLB)
   e790 0046 c172e240 c179a000 c1731880 c17c51a0 c17b5be0 c1771c20
   e9b1f740 0086 d55dd74c e76c  c02666b8 c17fd700 c2c2513c
   fdac b2203610 616f c2c25030 c17fd700 e7f8 c17d31f0 e79c
Call Trace:
 [] io_schedule+0x26/0x30
 [] sync_page+0x3d/0x48
 [] __wait_on_bit_lock+0x45/0x67
 [] __lock_page+0x88/0x95
 [] filemap_nopage+0x1f4/0x386
 [] do_no_page+0x82/0x2fa
 [] __handle_mm_fault+0x1fe/0x2eb
 [] get_user_pages+0xc7/0x2e5
 [] access_process_vm+0x74/0x116
 [] arch_ptrace+0x388/0x539
 [] sys_ptrace+0x58/0xb9
 [] syscall_call+0x7/0xb
 [<0081e410>] 0x81e410
 ===
cinfo t CB7DA040 0  6942   6941 (NOTLB)
   e5fcdee8 0046 ce7d9284 cb7da040 ce7d9284 cb7da078 cb7da040 e5fcdf10
   cb7da040 13a973f5 60e3 0078  c2c25030 c1805700 d483013c
   0021fd53 13a97513 60e3 d4830030 e5fcdf04 0005  e5fcdefc
Call Trace:
 [] ptrace_stop+0xf8/0x17f
 [] ptrace_notify+0x6a/0x92
 [] do_syscall_trace+0xd4/0x1eb
 [] syscall_exit_work+0x16/0x1b
 [<00878410>] 0x878410
 ===


[1]
includes these
8c08540f8755c451d8b96ea14cfe796bc3cd712d [PATCH] clean up 
__set_page_dirty_nobuffers()
55e829af06681e5d731c03ba04febbd1c76ca293 [PATCH] io-accounting: write 
accounting
e08748ce01e02f0ec154b141f392ccb9555333f4 [PATCH] io-accounting: 
write-cancel accounting
fba2591bf4e418b6c3f9f8794c9dd8fe40ae7bd9 VM: Remove 
"clear_page_dirty()" and "test_clear_page_dirty()" functions
3e67c0987d7567ad41164a153dca9a43b11d [PATCH] truncate: clear page 
dirtiness before running try_to_free_buffers()
5f2a105d5e33a038a717995d2738434f9c25aed2 [PATCH] truncate: dirty memory 
accounting fix
8368e328dfe1c534957051333a87b3210a12743b Clean up and export 
cancel_dirty_page() to modules
7658cc289288b8ae7dd2c2224549a048431222b3 VM: Fix nasty and subtle race 
in shared mmap'ed page writeback
7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2 [PATCH] io-accounting: core 
statistics
cb876f451455b6187a7d69de2c112c45ec4b7f99 Fix up CIFS for 
"test_clear_page_dirty()" removal
7dfb71030f7636a0d65200158113c37764552f93 [PATCH] Add 
include/linux/freezer.h and move definitions from sched.h
46d2277c796f9f4937bfa668c40b2e3f43e93dd0 Clean up and make 
try_to_free_buffers() not race with dirty 
e61c90188b9956edae1105eef361d8981a352fcd [PATCH] optimize o_direct on 
block devices
5fcf7bb73f66cc1c4ad90788b0f367c4d6852b75 [PATCH] 
read_zero_pagealigned() locking fix
ffaa82008f1aad52a6d3979f49d2a76c2928b60f Fix reiserfs after 
"test_clear_page_dirty()" removal
d0e671a932cb9c653b27393cec26aec012a8d97e [PATCH] Fix JFS after 
clear_page_dirty() removal
9280f6822c2d7112b47107251fce307aefb31f35 [PATCH] fuse: remove 
clear_page_dirty() call
921320210bd2ec4f17053d283355b73048ac0e56 [PATCH] Fix XFS after 
clear_page_dirty() removal

[2]
dt pattern=iot incr=variable records=32768 lbs=65536 bs=65536 of=dtfile 
log=dtfil

BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-05 Thread Sami Farin
Linux 2.6.19.1 SMP [2] on Pentium D...
I was running dt-15.14 [2] and I ran
cinfo datafile (it does mincore()).
Well it went OK but when I ran strace cinfo datafile...:
04:18:48.062466 mincore(0x37f1f000, 2147266560, 
...
2007-01-06 04:19:03.788181500 4BUG: warning at 
mm/truncate.c:60/cancel_dirty_page()
2007-01-06 04:19:03.788221500 4 [c0103cfb] dump_trace+0x215/0x21a
2007-01-06 04:19:03.788223500 4 [c0103da3] show_trace_log_lvl+0x1a/0x30
2007-01-06 04:19:03.788224500 4 [c0103dcb] show_trace+0x12/0x14
2007-01-06 04:19:03.788225500 4 [c0103ec8] dump_stack+0x19/0x1b
2007-01-06 04:19:03.788227500 4 [c01546a6] cancel_dirty_page+0x7e/0x80
2007-01-06 04:19:03.788228500 4 [c01546c2] truncate_complete_page+0x1a/0x47
2007-01-06 04:19:03.788229500 4 [c0154854] 
truncate_inode_pages_range+0x114/0x2ae
2007-01-06 04:19:03.788245500 4 [c0154a08] truncate_inode_pages+0x1a/0x1c
2007-01-06 04:19:03.788247500 4 [c0269244] fs_flushinval_pages+0x40/0x77
2007-01-06 04:19:03.788248500 4 [c026d48c] xfs_write+0x8c4/0xb68
2007-01-06 04:19:03.788250500 4 [c0268b14] xfs_file_aio_write+0x7e/0x95
2007-01-06 04:19:03.788251500 4 [c016d66c] do_sync_write+0xca/0x119
2007-01-06 04:19:03.788265500 4 [c016d842] vfs_write+0x187/0x18c
2007-01-06 04:19:03.788267500 4 [c016d8e8] sys_write+0x3d/0x64
2007-01-06 04:19:03.788268500 4 [c0102e73] syscall_call+0x7/0xb
2007-01-06 04:19:03.788269500 4 [001cf410] 0x1cf410
2007-01-06 04:19:03.788289500 4 ===

funny that when stracing, mincore does not return?

$ time cinfo dtfile-2091
dtfile-2091: 524285 pages, 0 pages cached (0.00%)

real0m0.049s
user0m0.003s
sys 0m0.046s

safari6941 29.9 10.8 2098768 108788 pts/2  D+   04:20   3:41 strace -vfttT 
cinfo dtfile-2091

straceD C179A000 0  6941   8737  6942  2089 (NOTLB)
   e790 0046 c172e240 c179a000 c1731880 c17c51a0 c17b5be0 c1771c20
   e9b1f740 0086 d55dd74c e76c  c02666b8 c17fd700 c2c2513c
   fdac b2203610 616f c2c25030 c17fd700 e7f8 c17d31f0 e79c
Call Trace:
 [c04b4568] io_schedule+0x26/0x30
 [c014cdad] sync_page+0x3d/0x48
 [c04b47b1] __wait_on_bit_lock+0x45/0x67
 [c014d556] __lock_page+0x88/0x95
 [c014e5a7] filemap_nopage+0x1f4/0x386
 [c015b24c] do_no_page+0x82/0x2fa
 [c015b8a3] __handle_mm_fault+0x1fe/0x2eb
 [c0159a99] get_user_pages+0xc7/0x2e5
 [c015bb8a] access_process_vm+0x74/0x116
 [c010639e] arch_ptrace+0x388/0x539
 [c012ad7f] sys_ptrace+0x58/0xb9
 [c0102e73] syscall_call+0x7/0xb
 [0081e410] 0x81e410
 ===
cinfo t CB7DA040 0  6942   6941 (NOTLB)
   e5fcdee8 0046 ce7d9284 cb7da040 ce7d9284 cb7da078 cb7da040 e5fcdf10
   cb7da040 13a973f5 60e3 0078  c2c25030 c1805700 d483013c
   0021fd53 13a97513 60e3 d4830030 e5fcdf04 0005  e5fcdefc
Call Trace:
 [c012e32b] ptrace_stop+0xf8/0x17f
 [c012e41c] ptrace_notify+0x6a/0x92
 [c01066a9] do_syscall_trace+0xd4/0x1eb
 [c0102f66] syscall_exit_work+0x16/0x1b
 [00878410] 0x878410
 ===


[1]
includes these
8c08540f8755c451d8b96ea14cfe796bc3cd712d [PATCH] clean up 
__set_page_dirty_nobuffers()
55e829af06681e5d731c03ba04febbd1c76ca293 [PATCH] io-accounting: write 
accounting
e08748ce01e02f0ec154b141f392ccb9555333f4 [PATCH] io-accounting: 
write-cancel accounting
fba2591bf4e418b6c3f9f8794c9dd8fe40ae7bd9 VM: Remove 
clear_page_dirty() and test_clear_page_dirty() functions
3e67c0987d7567ad41164a153dca9a43b11d [PATCH] truncate: clear page 
dirtiness before running try_to_free_buffers()
5f2a105d5e33a038a717995d2738434f9c25aed2 [PATCH] truncate: dirty memory 
accounting fix
8368e328dfe1c534957051333a87b3210a12743b Clean up and export 
cancel_dirty_page() to modules
7658cc289288b8ae7dd2c2224549a048431222b3 VM: Fix nasty and subtle race 
in shared mmap'ed page writeback
7c3ab7381e79dfc7db14a67c6f4f3285664e1ec2 [PATCH] io-accounting: core 
statistics
cb876f451455b6187a7d69de2c112c45ec4b7f99 Fix up CIFS for 
test_clear_page_dirty() removal
7dfb71030f7636a0d65200158113c37764552f93 [PATCH] Add 
include/linux/freezer.h and move definitions from sched.h
46d2277c796f9f4937bfa668c40b2e3f43e93dd0 Clean up and make 
try_to_free_buffers() not race with dirty 
e61c90188b9956edae1105eef361d8981a352fcd [PATCH] optimize o_direct on 
block devices
5fcf7bb73f66cc1c4ad90788b0f367c4d6852b75 [PATCH] 
read_zero_pagealigned() locking fix
ffaa82008f1aad52a6d3979f49d2a76c2928b60f Fix reiserfs after 
test_clear_page_dirty() removal
d0e671a932cb9c653b27393cec26aec012a8d97e [PATCH] Fix JFS after 
clear_page_dirty() removal
9280f6822c2d7112b47107251fce307aefb31f35 [PATCH] fuse: remove 
clear_page_dirty() call
921320210bd2ec4f17053d283355b73048ac0e56 [PATCH] Fix XFS after 
clear_page_dirty() removal

[2]
dt pattern=iot incr=variable records=32768 lbs=65536 bs=65536 of=dtfile 

Re: BUG: warning at mm/truncate.c:60/cancel_dirty_page()

2007-01-05 Thread Sami Farin
On Sat, Jan 06, 2007 at 04:39:07 +0200, Sami Farin wrote:
 Linux 2.6.19.1 SMP [2] on Pentium D...
 I was running dt-15.14 [2] and I ran
 cinfo datafile (it does mincore()).
 Well it went OK but when I ran strace cinfo datafile...:
 04:18:48.062466 mincore(0x37f1f000, 2147266560, 

Forgot to do git-whatchanged mm/mincore.c...
Looks like git and 2.6.19.2 review patch include a fix for mincore.
Maybe it fixes this issue.

-- 
-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/