linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* ext2 related,two oops with 2.5.12 on ATA66 disk.
@ 2002-05-03  9:17 Luigi Genoni
  2002-05-03 20:55 ` Andrew Morton
  0 siblings, 1 reply; 3+ messages in thread
From: Luigi Genoni @ 2002-05-03  9:17 UTC (permalink / raw)
  To: linux-kernel


HI,

this morning, going at work, I found those two oops (repeated a lto of
times), on the Pentium III 512MB ram, i810 chipset, Maxtor 32049H2 ATA66
disk.

buffer layer error at buffer.c:1380

c893dee8 c0236aa0 c0236a6c c0236ad0 00000544 c0137a5c c0236ad0 00000544
       c11518e0 00000000 c9607000 d6740970 00000000 00000000 00000000
c013898c
       d6740970 c11518e0 c0169f8c c11518e0 c893c000 d6740a08 d6740a30
c016a30b
Call Trace: [<c0137a5c>] [<c013898c>] [<c0169f8c>] [<c016a30b>]
[<c0169f8c>]
   [<c01336fd>] [<c016a2fc>] [<c01270ad>] [<c0132957>] [<c0132a52>]
[<c0106e5f>]
Warning (Oops_read): Code line not seen, dumping what data is available

Trace; c0137a5c <__block_write_full_page+ec/330>
Trace; c013898c <block_write_full_page+a0/a8>
Trace; c0169f8c <ext2_get_block+0/370>
Trace; c016a30a <ext2_writepage+e/14>
Trace; c0169f8c <ext2_get_block+0/370>
Trace; c01336fc <generic_writeback_mapping+120/1c0>
Trace; c016a2fc <ext2_writepage+0/14>
Trace; c01270ac <filemap_fdatawrite+20/28>
Trace; c0132956 <msync_interval+7a/dc>
Trace; c0132a52 <sys_msync+9a/e8>
Trace; c0106e5e <syscall_call+6/a>


AND

kernel BUG at ll_rw_blk.c:1409!
invalid operand: 0000
CPU:    0
EIP:    0010:[<c01d04f8>]    Not tainted
Using defaults from ksymoops -t elf32-i386 -a i386
EFLAGS: 00010246
eax: 00000045   ebx: d06ec5e0   ecx: c1489a80   edx: dfd89a60
esi: 00000001   edi: c11518e0   ebp: d06ecb20   esp: c893def4
ds: 0018   es: 0018   ss: 0018
Stack: d06ec5e0 d06ec620 c0137ba7 00000001 d06ec5e0 c11518e0 00000000
c9607000
       d6740970 00000001 00000000 00000000 c013898c d6740970 c11518e0
c0169f8c
       c11518e0 c893c000 d6740a08 d6740a30 c016a30b c11518e0 c0169f8c
c01336fd
Call Trace: [<c0137ba7>] [<c013898c>] [<c0169f8c>] [<c016a30b>]
[<c0169f8c>]
   [<c01336fd>] [<c016a2fc>] [<c01270ad>] [<c0132957>] [<c0132a52>]
[<c0106e5f>]
Code: 0f 0b 81 05 2a 4d 25 c0 83 7b 20 00 75 0a 0f 0b 82 05 2a 4d

>>EIP; c01d04f8 <submit_bh+20/f0>   <=====
Trace; c0137ba6 <__block_write_full_page+236/330>
Trace; c013898c <block_write_full_page+a0/a8>
Trace; c0169f8c <ext2_get_block+0/370>
Trace; c016a30a <ext2_writepage+e/14>
Trace; c0169f8c <ext2_get_block+0/370>
Trace; c01336fc <generic_writeback_mapping+120/1c0>
Trace; c016a2fc <ext2_writepage+0/14>
Trace; c01270ac <filemap_fdatawrite+20/28>
Trace; c0132956 <msync_interval+7a/dc>
Trace; c0132a52 <sys_msync+9a/e8>
Trace; c0106e5e <syscall_call+6/a>
Code;  c01d04f8 <submit_bh+20/f0>
00000000 <_EIP>:
Code;  c01d04f8 <submit_bh+20/f0>   <=====
   0:   0f 0b                     ud2a      <=====
Code;  c01d04fa <submit_bh+22/f0>
   2:   81 05 2a 4d 25 c0 83      addl   $0x207b83,0xc0254d2a
Code;  c01d0500 <submit_bh+28/f0>
   9:   7b 20 00
Code;  c01d0504 <submit_bh+2c/f0>
   c:   75 0a                     jne    18 <_EIP+0x18> c01d0510
<submit_bh+38/f0>
Code;  c01d0506 <submit_bh+2e/f0>
   e:   0f 0b                     ud2a
Code;  c01d0508 <submit_bh+30/f0>
  10:   82                        (bad)
Code;  c01d0508 <submit_bh+30/f0>
  11:   05 2a 4d 00 00            add    $0x4d2a,%eax



The system was just running xscreensaver full night, with openGL morph3D
(ok, very very slow on i810, but I like it) at 16bpp.

I could not make a clean shutdown, since I had a freeze at umount, but
strangelly during e2fsck no corruption was detected.

I Hope this helps

Luigi


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: ext2 related,two oops with 2.5.12 on ATA66 disk.
  2002-05-03  9:17 ext2 related,two oops with 2.5.12 on ATA66 disk Luigi Genoni
@ 2002-05-03 20:55 ` Andrew Morton
  2002-05-04  1:01   ` Luigi Genoni
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Morton @ 2002-05-03 20:55 UTC (permalink / raw)
  To: Luigi Genoni; +Cc: linux-kernel

Luigi Genoni wrote:
> 
> HI,
> 
> this morning, going at work, I found those two oops (repeated a lto of
> times), on the Pentium III 512MB ram, i810 chipset, Maxtor 32049H2 ATA66
> disk.
> 
> buffer layer error at buffer.c:1380
> 

Yup, thanks.  dirty, uptodate, unmapped buffer outside
i_size.  I have a few fixes in the works; the below
one should make this go away.


--- 2.5.13/mm/page-writeback.c~writepage-versus-set_page_dirty	Fri May  3 00:48:13 2002
+++ 2.5.13-akpm/mm/page-writeback.c	Fri May  3 00:48:13 2002
@@ -475,8 +475,13 @@ int __set_page_dirty_buffers(struct page
 		struct buffer_head *bh = head;
 
 		do {
-			if (buffer_uptodate(bh))
+			if (buffer_uptodate(bh)) {
+				if (!buffer_mapped(bh))
+					buffer_error();
 				set_buffer_dirty(bh);
+			} else {
+				buffer_error();
+			}
 			bh = bh->b_this_page;
 		} while (bh != head);
 	}
--- 2.5.13/fs/buffer.c~writepage-versus-set_page_dirty	Fri May  3 00:48:13 2002
+++ 2.5.13-akpm/fs/buffer.c	Fri May  3 00:48:43 2002
@@ -1290,6 +1290,16 @@ static int __block_write_full_page(struc
 					(1 << BH_Dirty)|(1 << BH_Uptodate));
 	}
 
+	/*
+	 * Be very careful.  We have no exclusion from __set_page_dirty_buffers
+	 * here, and the (potentially unmapped) buffers may become dirty at
+	 * any time.  If a buffer becomes dirty here after we've inspected it
+	 * then we just miss that fact, and the page stays dirty.
+	 *
+	 * Buffers outside i_size may be dirtied by __set_page_dirty_buffers;
+	 * handle that here by just cleaning them.
+	 */
+
 	block = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
 	head = page_buffers(page);
 	bh = head;
@@ -1300,8 +1310,7 @@ static int __block_write_full_page(struc
 	 */
 	do {
 		if (block > last_block) {
-			if (buffer_dirty(bh))
-				buffer_error();
+			clear_buffer_dirty(bh);
 			if (buffer_mapped(bh))
 				buffer_error();
 			/*
@@ -1329,11 +1338,9 @@ static int __block_write_full_page(struc
 
 	do {
 		get_bh(bh);
-		if (buffer_dirty(bh)) {
+		if (buffer_mapped(bh) && buffer_dirty(bh)) {
 			lock_buffer(bh);
-			if (buffer_dirty(bh)) {
-				if (!buffer_mapped(bh))
-					buffer_error();
+			if (test_clear_buffer_dirty(bh)) {
 				if (!buffer_uptodate(bh))
 					buffer_error();
 				set_buffer_async_io(bh);
@@ -1355,7 +1362,6 @@ static int __block_write_full_page(struc
 	do {
 		struct buffer_head *next = bh->b_this_page;
 		if (buffer_async(bh)) {
-			clear_buffer_dirty(bh);
 			submit_bh(WRITE, bh);
 			nr_underway++;
 		}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: ext2 related,two oops with 2.5.12 on ATA66 disk.
  2002-05-03 20:55 ` Andrew Morton
@ 2002-05-04  1:01   ` Luigi Genoni
  0 siblings, 0 replies; 3+ messages in thread
From: Luigi Genoni @ 2002-05-04  1:01 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linux-kernel

ok, will test this on montday ;)


On Fri, 3 May 2002, Andrew Morton wrote:

> Luigi Genoni wrote:
> >
> > HI,
> >
> > this morning, going at work, I found those two oops (repeated a lto of
> > times), on the Pentium III 512MB ram, i810 chipset, Maxtor 32049H2 ATA66
> > disk.
> >
> > buffer layer error at buffer.c:1380
> >
>
> Yup, thanks.  dirty, uptodate, unmapped buffer outside
> i_size.  I have a few fixes in the works; the below
> one should make this go away.
>
>
> --- 2.5.13/mm/page-writeback.c~writepage-versus-set_page_dirty	Fri May  3 00:48:13 2002
> +++ 2.5.13-akpm/mm/page-writeback.c	Fri May  3 00:48:13 2002
> @@ -475,8 +475,13 @@ int __set_page_dirty_buffers(struct page
>  		struct buffer_head *bh = head;
>
>  		do {
> -			if (buffer_uptodate(bh))
> +			if (buffer_uptodate(bh)) {
> +				if (!buffer_mapped(bh))
> +					buffer_error();
>  				set_buffer_dirty(bh);
> +			} else {
> +				buffer_error();
> +			}
>  			bh = bh->b_this_page;
>  		} while (bh != head);
>  	}
> --- 2.5.13/fs/buffer.c~writepage-versus-set_page_dirty	Fri May  3 00:48:13 2002
> +++ 2.5.13-akpm/fs/buffer.c	Fri May  3 00:48:43 2002
> @@ -1290,6 +1290,16 @@ static int __block_write_full_page(struc
>  					(1 << BH_Dirty)|(1 << BH_Uptodate));
>  	}
>
> +	/*
> +	 * Be very careful.  We have no exclusion from __set_page_dirty_buffers
> +	 * here, and the (potentially unmapped) buffers may become dirty at
> +	 * any time.  If a buffer becomes dirty here after we've inspected it
> +	 * then we just miss that fact, and the page stays dirty.
> +	 *
> +	 * Buffers outside i_size may be dirtied by __set_page_dirty_buffers;
> +	 * handle that here by just cleaning them.
> +	 */
> +
>  	block = page->index << (PAGE_CACHE_SHIFT - inode->i_blkbits);
>  	head = page_buffers(page);
>  	bh = head;
> @@ -1300,8 +1310,7 @@ static int __block_write_full_page(struc
>  	 */
>  	do {
>  		if (block > last_block) {
> -			if (buffer_dirty(bh))
> -				buffer_error();
> +			clear_buffer_dirty(bh);
>  			if (buffer_mapped(bh))
>  				buffer_error();
>  			/*
> @@ -1329,11 +1338,9 @@ static int __block_write_full_page(struc
>
>  	do {
>  		get_bh(bh);
> -		if (buffer_dirty(bh)) {
> +		if (buffer_mapped(bh) && buffer_dirty(bh)) {
>  			lock_buffer(bh);
> -			if (buffer_dirty(bh)) {
> -				if (!buffer_mapped(bh))
> -					buffer_error();
> +			if (test_clear_buffer_dirty(bh)) {
>  				if (!buffer_uptodate(bh))
>  					buffer_error();
>  				set_buffer_async_io(bh);
> @@ -1355,7 +1362,6 @@ static int __block_write_full_page(struc
>  	do {
>  		struct buffer_head *next = bh->b_this_page;
>  		if (buffer_async(bh)) {
> -			clear_buffer_dirty(bh);
>  			submit_bh(WRITE, bh);
>  			nr_underway++;
>  		}
>


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-05-04  1:01 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-05-03  9:17 ext2 related,two oops with 2.5.12 on ATA66 disk Luigi Genoni
2002-05-03 20:55 ` Andrew Morton
2002-05-04  1:01   ` Luigi Genoni

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).