Date: Tue, 25 Nov 2014 12:27:54 +0000 From: Ruslan Bukin <br@freebsd.org> To: Gleb Smirnoff <glebius@FreeBSD.org> Cc: Konstantin Belousov <kostikbel@gmail.com>, svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r274914 - in head/sys: kern sys ufs/ffs vm Message-ID: <20141125122754.GA57252@bsdpad.com> In-Reply-To: <20141125073145.GT47144@FreeBSD.org> References: <201411231201.sANC1rW1025589@svn.freebsd.org> <20141124110537.GA41282@bsdpad.com> <20141124173733.GI17068@kib.kiev.ua> <20141124180356.GA47782@bsdpad.com> <20141124192902.GQ47144@FreeBSD.org> <20141124211620.GA49975@bsdpad.com> <20141125073145.GT47144@FreeBSD.org>
index | next in thread | previous in thread | raw e-mail
[-- Attachment #1 --]
On Tue, Nov 25, 2014 at 10:31:45AM +0300, Gleb Smirnoff wrote:
> On Mon, Nov 24, 2014 at 09:16:20PM +0000, Ruslan Bukin wrote:
> R> On Mon, Nov 24, 2014 at 10:29:02PM +0300, Gleb Smirnoff wrote:
> R> > On Mon, Nov 24, 2014 at 06:03:56PM +0000, Ruslan Bukin wrote:
> R> > R> > I this on stock kernel or on kernel with your modifications ?
> R> > R>
> R> > R> Stock one. I also checked with no virtio but MDROOT - same problems.
> R> >
> R> > I could expect a panic with a damaged 'struct buf', but not vm_page.
> R> >
> R> > Can you please do a clean build pre-r274914, and then again a clean
> R> > build of r274914, and then confirm that the former is stable, but the
> R> > latter panics?
> R>
> R> Yes, I just proceeded re-check both builds with removing obj dir each time and I still see the problem starting with r274914.
> R>
> R> Also restoring files like that on latest head makes things happy (no panics):
> R> svnlite up -r274913 sys/kern/vfs_default.c sys/kern/vnode_if.src sys/sys/buf.h sys/sys/vnode.h sys/ufs/ffs/ffs_vnops.c sys/vm/swap_pager.c sys/vm/vm_pager.h sys/vm/vnode_pager.c sys/vm/vnode_pager.h
>
> Can you please try to un-union the struct buf and see if it helps?
>
Hi,
Un-unioning helps partially: I receive much less panics and able to boot until login prompt in ~ 1/3 attempts with patch attached.
Ruslan
[-- Attachment #2 --]
Index: sys/sys/buf.h
===================================================================
--- sys/sys/buf.h (revision 275031)
+++ sys/sys/buf.h (working copy)
@@ -107,6 +107,7 @@
off_t b_offset; /* Offset into file. */
TAILQ_ENTRY(buf) b_bobufs; /* (V) Buffer's associated vnode. */
uint32_t b_vflags; /* (V) BV_* flags */
+ TAILQ_ENTRY(buf) b_freelist; /* (Q) Free list position inactive. */
unsigned short b_qindex; /* (Q) buffer queue index */
uint32_t b_flags; /* B_* flags. */
b_xflags_t b_xflags; /* extra flags */
@@ -123,16 +124,11 @@
struct ucred *b_rcred; /* Read credentials reference. */
struct ucred *b_wcred; /* Write credentials reference. */
void *b_saveaddr; /* Original b_addr for physio. */
- union {
- TAILQ_ENTRY(buf) bu_freelist; /* (Q) */
- struct {
- void (*pg_iodone)(void *, vm_page_t *, int, int);
- int pg_reqpage;
- } bu_pager;
- } b_union;
-#define b_freelist b_union.bu_freelist
-#define b_pager b_union.bu_pager
- union cluster_info {
+ struct pager_info {
+ void (*pg_iodone)(void *, vm_page_t *, int, int);
+ int pg_reqpage;
+ } b_pager;
+ struct cluster_info {
TAILQ_HEAD(cluster_list_head, buf) cluster_head;
TAILQ_ENTRY(buf) cluster_entry;
} b_cluster;
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20141125122754.GA57252>
