Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 04 Apr 2004 22:17:22 +0200
From:      "Poul-Henning Kamp" <phk@phk.freebsd.dk>
To:        Doug Ambrisko <ambrisko@ambrisko.com>
Cc:        =?ISO-8859-1?Q?S=F8ren_Schmidt?= <sos@DeepCore.dk>
Subject:   Re: Intel SATA ICH5/5R 6300ESB support patches 
Message-ID:  <1839.1081109842@critter.freebsd.dk>
In-Reply-To: Your message of "Sun, 04 Apr 2004 13:02:49 PDT." <200404042002.i34K2nop038808@ambrisko.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
In message <200404042002.i34K2nop038808@ambrisko.com>, Doug Ambrisko writes:
>Søren Schmidt writes:

>| > I put in a patch for geom for bio_taskqueue_remove.  Since ata code
>| > schedules bio_task it need to be cancelled when we abort and call
>| > biodone.  If we don't cancel this task then when the task is 
>| > run later we get a double free in UMA since we have cleaned up
>| > twice and called biodone twice for the same request.

Sos@ forwarded that patch and it won't fly, it has no chance of
working reliably on multi-cpu machines:

There is no guarantee that the task is still on the queue by the
time you try to remove it, and if is not, it is likely to be because
another CPU is already waiting for a lock in the ata driver in the
bio_taskqueue handler function, so we have no way to cancel that
other CPU's activity.

The correct solution is to not do the biodone when you cancel, but
let the already scheduled bio_taskqueue event to do so.

-- 
Poul-Henning Kamp       | UNIX since Zilog Zeus 3.20
phk@FreeBSD.ORG         | TCP/IP since RFC 956
FreeBSD committer       | BSD since 4.3-tahoe    
Never attribute to malice what can adequately be explained by incompetence.



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