From owner-freebsd-current Wed Nov 27 3:37:23 2002 Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C68D037B401 for ; Wed, 27 Nov 2002 03:37:22 -0800 (PST) Received: from salmon.maths.tcd.ie (salmon.maths.tcd.ie [134.226.81.11]) by mx1.FreeBSD.org (Postfix) with SMTP id 7741343E4A for ; Wed, 27 Nov 2002 03:37:21 -0800 (PST) (envelope-from iedowse@maths.tcd.ie) Received: from walton.maths.tcd.ie by salmon.maths.tcd.ie with SMTP id ; 27 Nov 2002 11:37:19 +0000 (GMT) To: Bruce Evans Cc: Hiten Pandya , "Vladimir B. Grebenschikov" , "current@freebsd.org" Subject: Re: MD broken in current In-Reply-To: Your message of "Wed, 27 Nov 2002 22:03:33 +1100." <20021127215253.G7621-100000@gamplex.bde.org> Date: Wed, 27 Nov 2002 11:37:17 +0000 From: Ian Dowse Message-ID: <200211271137.aa77228@salmon.maths.tcd.ie> Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG In message <20021127215253.G7621-100000@gamplex.bde.org>, Bruce Evans writes: >On Wed, 27 Nov 2002, Ian Dowse wrote: >> I think moving the line >> >> tsleep(sc, PRIBIO, "mdwait", 0); >> >> to just after the following `if' statement may do the trick. If the > >Wouldn't Giant locking prevent races here? There is no locking in >sight for the ioctl, but ioctl() holds Giant. Yes, but mddestroy() assumes that the kthread is waiting in the "mdwait" tsleep() when it calls wakeup(). That won't be true if the kthread has not yet had a chance to run, or if it is waiting to acquire Giant before entering the main loop (or if anything it calls drops Giant). Moving the check of the MD_SHUTDOWN to before the tsleep should catch all of these cases, and Giant ensures that the wakeup() does not occur after the flag is tested but before the tsleep(). Ian To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message