From owner-freebsd-current Wed Jun 3 17:38:57 1998 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id RAA14930 for freebsd-current-outgoing; Wed, 3 Jun 1998 17:38:57 -0700 (PDT) (envelope-from owner-freebsd-current@FreeBSD.ORG) Received: from dingo.cdrom.com (dingo.cdrom.com [204.216.28.145]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id RAA14854 for ; Wed, 3 Jun 1998 17:38:37 -0700 (PDT) (envelope-from mike@dingo.cdrom.com) Received: from dingo.cdrom.com (localhost [127.0.0.1]) by dingo.cdrom.com (8.8.8/8.8.5) with ESMTP id QAA02030; Wed, 3 Jun 1998 16:30:51 -0700 (PDT) Message-Id: <199806032330.QAA02030@dingo.cdrom.com> X-Mailer: exmh version 2.0zeta 7/24/97 To: Greg Lehey cc: Mike Smith , Bob Willcox , shimon@simon-shapiro.org, Karl Pielorz , tcobb , "freebsd-current@freebsd.org" , Michael Hancock Subject: Re: DPT driver fails and panics with Degraded Array In-reply-to: Your message of "Thu, 04 Jun 1998 09:57:17 +0930." <19980604095717.A22406@freebie.lemis.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Date: Wed, 03 Jun 1998 16:30:50 -0700 From: Mike Smith Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG > >>> Why would a driver call biodone on a buffer that doens't belong to it? > >> > >> Probably not relavent, but in the DPT device driver that I wrote for AIX > >> I had to put some pretty ugly validity checks in the interrupt code to > >> prevent my driver from trying to do an iodone (AIX's version of biodone) > >> on already completed (or purged, I don't remember for sure...its been > >> over a year now) commands. Seems that the DPT firmware would (on > >> occasion) interrupt with a status packet that pointed to a ccb that my > >> driver had already completed. As I recall this would only happen under > >> heavy load and it was pretty intermittant. As far as I know, it was > >> never actually fixed. > > > > Actually, this is *extremely* relevant, if the firmware is still doing > > it and the DPT driver isn't aware of this. > > This would normally cause a 'biodone: buffer already done' message, > which is a warning, not a panic. The only way I could think of this > happening on a valid buffer (apart from the obvious of calling it > while it wasn't busy) would be if something messed around with other > buffer flags. It would be an issue if the buf struct had been recycled, but hadn't yet been marked busy, or if the buf pointer was invalid (the business check is the very first check in biodone()). -- \\ Sometimes you're ahead, \\ Mike Smith \\ sometimes you're behind. \\ mike@smith.net.au \\ The race is long, and in the \\ msmith@freebsd.org \\ end it's only with yourself. \\ msmith@cdrom.com To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message