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
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;
_______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"