panic: wrong page state m 0xe00000027a9adb40 + savecore deadlock

Anton Shterenlikht mexas at bris.ac.uk
Wed Oct 16 14:31:58 UTC 2013


>From kostikbel at gmail.com Wed Oct 16 13:02:51 2013
>
>On Wed, Oct 16, 2013 at 02:55:26PM +0300, Konstantin Belousov wrote:
>> On Wed, Oct 16, 2013 at 09:02:19AM +0100, Anton Shterenlikht wrote:
>> > panic:
>> >  http://www.freebsd.org/cgi/query-pr.cgi?pr=3Dkern/182999
>>=20
>> db> show pginfo 0xe00000027d352600
>> page 0xe00000027d352600 obj 0xe0000000128fda00 pidx 0x0 phys 0x275dc6000 =
>q 255 hold 0 wire 1
>> af 0x0 of 0x0 f 0x0 act 0 busy 1 valid 0xff dirty 0x0
>>=20
>> AFAIR ia64 uses 8K pages.
>>=20
>> Please do the following:
>> 1. apply the patch at the end of this message, reproduce the problem
>> and show me both exact panic message from the patched kernel and 'show
>> pginfo addr' again.
>> 2. show me the ls -la <file> output for the file which was accessed
>> through nginx, also what is the filesystem where the file resides on ?
>Sure, I forgot the patch.
>
>diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c
>index 322550b..9d46dc7 100644
>--- a/sys/kern/uipc_syscalls.c
>+++ b/sys/kern/uipc_syscalls.c
>@@ -2070,7 +2070,7 @@ free_page:
> 	}
> 	KASSERT(error !=3D 0 || (m->wire_count > 0 &&
> 	    vm_page_is_valid(m, off & PAGE_MASK, xfsize)),
>-	    ("wrong page state m %p", m));
>+	    ("wrong page state m %p off %#jx xfsize %d", m, off, xfsize));
> 	VM_OBJECT_WUNLOCK(obj);
> 	return (error);
> }

The patch didn't apply cleanly.
I concluded that my src was older
that yours, so I updated to r 256624.

Now I don't get this panic!
I don't know whether to be happy or not.

Anyway, I was on r255488 when the panic
happened, and there have been a lot of
changes under sys/kern. Specifically related
to the patch:

# svn info
Path: .
Working Copy Root Path: /usr/src
URL: https://svn0.eu.freebsd.org/base/head/sys/kern
Relative URL: ^/head/sys/kern
Repository Root: https://svn0.eu.freebsd.org/base
Repository UUID: ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f
Revision: 256624
Node Kind: directory
Schedule: normal
Last Changed Author: mav
Last Changed Rev: 256614
Last Changed Date: 2013-10-16 10:56:40 +0100 (Wed, 16 Oct 2013)

# svn diff -r 255488 uipc_syscalls.c 
Index: uipc_syscalls.c
===================================================================
--- uipc_syscalls.c     (revision 255488)
+++ uipc_syscalls.c     (working copy)
@@ -123,21 +123,13 @@
 /*
  * sendfile(2)-related variables and associated sysctls
  */
-int nsfbufs;
-int nsfbufspeak;
-int nsfbufsused;
+static SYSCTL_NODE(_kern_ipc, OID_AUTO, sendfile, CTLFLAG_RW, 0,
+    "sendfile(2) tunables");
 static int sfreadahead = 1;
+SYSCTL_INT(_kern_ipc_sendfile, OID_AUTO, readahead, CTLFLAG_RW,
+    &sfreadahead, 0, "Number of sendfile(2) read-ahead MAXBSIZE blocks");
 
-SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufs, CTLFLAG_RDTUN, &nsfbufs, 0,
-    "Maximum number of sendfile(2) sf_bufs available");
-SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufspeak, CTLFLAG_RD, &nsfbufspeak, 0,
-    "Number of sendfile(2) sf_bufs at peak usage");
-SYSCTL_INT(_kern_ipc, OID_AUTO, nsfbufsused, CTLFLAG_RD, &nsfbufsused, 0,
-    "Number of sendfile(2) sf_bufs in use");
-SYSCTL_INT(_kern_ipc, OID_AUTO, sfreadahead, CTLFLAG_RW, &sfreadahead, 0,
-    "Number of sendfile(2) read-ahead MAXBSIZE blocks");
 
-
 static void
 sfstat_init(const void *unused)
 {
@@ -2076,10 +2068,10 @@
                        vm_page_free(m);
                vm_page_unlock(m);
        }
+       KASSERT(error != 0 || (m->wire_count > 0 &&
+           vm_page_is_valid(m, off & PAGE_MASK, xfsize)),
+           ("wrong page state m %p off %#jx xfsize %d", m, off, xfsize));
        VM_OBJECT_WUNLOCK(obj);
-       KASSERT(error != 0 || (m->wire_count > 0 && m->valid ==
-           VM_PAGE_BITS_ALL),
-           ("wrong page state m %p", m));
        return (error);
 }
 
#  

Please let me know if there is any
other diagnostics you'd like to see.

Otherwise, till next panic...

Many thanks for your help

Anton



More information about the freebsd-current mailing list