On Mon, May 30, 2016 at 9:02 PM, Ted Unangst <[email protected]> wrote:
> Alexey Suslikov wrote:
>> On Thu, May 12, 2016 at 4:14 PM, Bob Beck <[email protected]> wrote:
>> > Thank you! now that's a bug report..
>>
>> Hi.
>>
>> Moved to 6.0-beta some time ago to make crash dumps more up
>> to date. Also, removed some services to minimize their impact.
>>
>> Fresh build against today's cvs don't survived even half of the day.
>>
>> http://article.gmane.org/gmane.os.openbsd.bugs/23593
>>
>> For me, it looks like: 5.7-5.8 - rare crashes, 5.9-6.0 - more frequent
>> crashes.
>>
>> Backtrace differs from crash to crash, but this remains the same:
>>
>> Stopped at pool_put+0x1dd: xorq 0x8(%rax),%rcx
>>
>> Do you have any idea where should I look in a source code?
>
> sys/kern/subr_pool.c
Thanks for your replies. Especially Stefan who noticed "show pools"
output being truncated for some reason.
Here, kernel output is redirected to com, which is redirected to kvm,
browser with java applet is connected to kvm. This is how I get it.
amappl1: pool(0xffffffff81974640:amappl1): page inconsistency: page 0xffffff01e0
is exactly 80 characters long (such a long printf violates "80 chars"
rule, isn't it?).
Maybe there's a bug in kvm (java applet?) and output gets truncated.
Anyway, let's see, because now I run with the following:
Index: sys/kern/subr_pool.c
===================================================================
RCS file: /cvs/src/sys/kern/subr_pool.c,v
retrieving revision 1.194
diff -u -p -u -p -r1.194 subr_pool.c
--- sys/kern/subr_pool.c 15 Jan 2016 11:21:58 -0000 1.194
+++ sys/kern/subr_pool.c 31 May 2016 09:10:21 -0000
@@ -1160,7 +1160,8 @@ pool_chk_page(struct pool *pp, struct po
page = (caddr_t)((u_long)ph & pp->pr_pgmask);
if (page != ph->ph_page && POOL_INPGHDR(pp)) {
printf("%s: ", label);
- printf("pool(%p:%s): page inconsistency: page %p; "
+ printf("pool(%p:%s):\n"
+ "page inconsistency: page %p;\n"
"at page head addr %p (p %p)\n",
pp, pp->pr_wchan, ph->ph_page, ph, page);
return 1;
@@ -1172,9 +1173,10 @@ pool_chk_page(struct pool *pp, struct po
if ((caddr_t)pi < ph->ph_page ||
(caddr_t)pi >= ph->ph_page + pp->pr_pgsize) {
printf("%s: ", label);
- printf("pool(%p:%s): page inconsistency: page %p;"
- " item ordinal %d; addr %p\n", pp,
- pp->pr_wchan, ph->ph_page, n, pi);
+ printf("pool(%p:%s):\n"
+ "page inconsistency: page %p;\n"
+ "item ordinal %d; addr %p\n",
+ pp, pp->pr_wchan, ph->ph_page, n, pi);
return (1);
}
@@ -1204,16 +1206,18 @@ pool_chk_page(struct pool *pp, struct po
#endif /* DIAGNOSTIC */
}
if (n + ph->ph_nmissing != pp->pr_itemsperpage) {
- printf("pool(%p:%s): page inconsistency: page %p;"
- " %d on list, %d missing, %d items per page\n", pp,
- pp->pr_wchan, ph->ph_page, n, ph->ph_nmissing,
+ printf("pool(%p:%s):\n"
+ "page inconsistency: page %p;\n"
+ "%d on list, %d missing, %d items per page\n",
+ pp, pp->pr_wchan, ph->ph_page, n, ph->ph_nmissing,
pp->pr_itemsperpage);
return 1;
}
if (expected >= 0 && n != expected) {
- printf("pool(%p:%s): page inconsistency: page %p;"
- " %d on list, %d missing, %d expected\n", pp,
- pp->pr_wchan, ph->ph_page, n, ph->ph_nmissing,
+ printf("pool(%p:%s):\n"
+ "page inconsistency: page %p;\n"
+ "%d on list, %d missing, %d expected\n",
+ pp, pp->pr_wchan, ph->ph_page, n, ph->ph_nmissing,
expected);
return 1;
}