Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Mar 2003 15:56:46 -0500 (EST)
From:      Jeff Roberson <jroberson@chesapeake.net>
To:        Thomas Quinot <thomas@FreeBSD.ORG>
Cc:        current@FreeBSD.ORG
Subject:   Re: crash: bwrite: need chained iodone
Message-ID:  <20030312155436.S43514-100000@mail.chesapeake.net>
In-Reply-To: <20030312105258.GG51967@melusine.cuivre.fr.eu.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, 12 Mar 2003, Thomas Quinot wrote:

> Le 2003-03-12, Jeff Roberson =E9crivait :
>
> > Can you please print bp?  I'd like to know what all of the members are.=
  A
> > cluster buf should NEVER have BX_BKGRDWRITE set.  This is totally bogus=
=2E
>
> (kgdb) fr
> #11 0xc0232072 in bwrite (bp=3D0xce5313e0) at
> /usr/src/sys/kern/vfs_bio.c:795
> 795                             panic("bwrite: need chained iodone");
> (kgdb) print *bp
> $3 =3D {b_io =3D {bio_cmd =3D 2, bio_dev =3D 0xffffffff, bio_disk =3D 0x0=
,
>     bio_blkno =3D 18540672, bio_offset =3D 9492758528, bio_bcount =3D 327=
68,
>     bio_data =3D 0xd42da000 "", bio_flags =3D 0, bio_error =3D 0, bio_res=
id =3D 0,
>     bio_done =3D 0xc0235db0 <bufdonebio>, bio_driver1 =3D 0x0, bio_driver=
2 =3D 0x0,
>     bio_caller1 =3D 0x0, bio_caller2 =3D 0xce5313e0, bio_queue =3D {tqe_n=
ext =3D 0x0,
>       tqe_prev =3D 0xc408200c}, bio_attribute =3D 0x0, bio_from =3D 0x0,
>     bio_to =3D 0x0, bio_length =3D 0, bio_completed =3D 0, bio_children =
=3D 91,
>     bio_inbed =3D 0, bio_parent =3D 0x0, bio_t0 =3D {sec =3D 0, frac =3D =
0},
>     bio_task =3D 0, bio_task_arg =3D 0x0, bio_pblkno =3D 64}, b_op =3D 0x=
c03a89f8,
>   b_magic =3D 280038160, b_iodone =3D 0xc0239320 <cluster_callback>,
>   b_offset =3D 688128, b_vnbufs =3D {tqe_next =3D 0x0, tqe_prev =3D 0x0},
>   b_left =3D 0x0, b_right =3D 0x0, b_vflags =3D 0, b_freelist =3D {
>     tqe_next =3D 0xce531228, tqe_prev =3D 0xc03dcb3c}, b_qindex =3D 0,
>   b_flags =3D 1677721604, b_xflags =3D 0 '\0', b_lock =3D {
>     lk_interlock =3D 0xc03d750c, lk_flags =3D 0, lk_sharecount =3D 0,
>     lk_waitcount =3D 0, lk_exclusivecount =3D 0, lk_prio =3D 80,
>     lk_wmesg =3D 0xc0379b53 "bufwait", lk_timo =3D 0, lk_lockholder =3D 0=
xffffffff,
>     lk_newlock =3D 0x0}, b_bufsize =3D 32768, b_runningbufspace =3D 0,
>   b_kvabase =3D 0xd42da000 "", b_kvasize =3D 32768, b_lblkno =3D 42,
>   b_vp =3D 0xc4a21124, b_object =3D 0x0, b_dirtyoff =3D 0, b_dirtyend =3D=
 32768,
>
>   b_rcred =3D 0x0, b_wcred =3D 0x0, b_saveaddr =3D 0xbfbfea40, b_pager =
=3D {
>     pg_spc =3D 0x0, pg_reqpage =3D 0}, b_cluster =3D {cluster_head =3D {
>       tqh_first =3D 0xce67bfe8, tqh_last =3D 0xce6b6b80}, cluster_entry =
=3D {
>       tqe_next =3D 0xce67bfe8, tqe_prev =3D 0xce6b6b80}}, b_pages =3D {0x=
c0d14748,
>     0xc0acff90, 0xc0a7cbd8, 0xc0bffc20, 0xc1074868, 0xc10106b0, 0xc10700f=
8,
>     0xc0f9c040, 0xc0af5808, 0xc0c56c50, 0xc0b47198, 0xc0bdb9e0, 0xc10e7b2=
8,
>     0xc0abba70, 0xc09888b8, 0xc09d3600, 0xc0d14748, 0xc0acff90, 0xc0a7cbd=
8,
>     0xc0bffc20, 0xc1074868, 0xc10106b0, 0xc10700f8, 0xc0f9c040, 0xc0d2188=
8,
>     0xc105cfd0, 0xc1057f18, 0xc109ff60, 0xc0a18948, 0xc0ab3d90, 0xc0a36fd=
8,
>     0xc0b91820}, b_npages =3D 8, b_dep =3D {lh_first =3D 0x0}}
> (kgdb)
>
> Hum. Now this is *most* peculiar. bp->b_xflags is 0, so we should never
> have entered that 'if', unless there is a race condition somewhere such
> that we test b_xflags on a buffer and carry on processing on another...
>

Can you disable sync on panic to make sure that something has not come
along and cleaned this buffer?  I suspect that it has been modified after
the first panic.  Do you know when this first started to happen?  Do you
have any more clues into what triggered it?

Cheers,
Jeff


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030312155436.S43514-100000>