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