[PATCH] Stability fixes for IPS driver for 4.x
David Sze
dsze at alumni.uwaterloo.ca
Sun Apr 10 22:11:54 PDT 2005
At 09:17 AM 09/04/2005 -0600, Scott Long wrote this to All:
>All,
>
>Thanks to the keen eye of David Sze, the cause of the instability in the
>ips driver in FreeBSD 4.x might have been found. If it's affecting you,
>please try the attached patch and let me know the results. I'll commit it
>when everyone is happy with it.
Scott,
I think there's a problem with the ips_commands.c patch. After the
bufq_first call succeeds, bufq_remove must be called before the splx or
else the iobuf can get issued twice. However, if the subsequent
ips_get_free_cmd fails, the iobuf must be put back on the bufq.
Two patches are attached to this message:
1. ips.RELENG_4.stability.patch is just the stability patch as described.
2. ips.RELENG_4.mfc-and-stability.patch is an MFC of your IPS cleanup and
optimization that you committed to HEAD on 01/28/05, plus the stability
patch as described.
Both patches survived a "make -j8 buildworld" for me.
The problem I'm having now is that ips does not appear to be
PAE-ified. With either patch the bus_dmamap_create call fails. Any
pointers would be appreciated, this is new territory for me.
>Thanks,
>
>Scott
>
>
>Index: ips_commands.c
>===================================================================
>RCS file: /usr/ncvs/src/sys/dev/ips/ips_commands.c,v
>retrieving revision 1.11.6.1
>diff -u -r1.11.6.1 ips_commands.c
>--- ips_commands.c 13 Jan 2005 00:46:40 -0000 1.11.6.1
>+++ ips_commands.c 9 Apr 2005 15:09:50 -0000
>@@ -162,8 +162,11 @@
> void ips_start_io_request(ips_softc_t *sc)
> {
> struct buf *iobuf;
>+ int s
>
>+ s = splbio();
> iobuf = bufq_first(&sc->queue);
>+ splx(s);
> if(!iobuf) {
> return;
> }
>@@ -171,8 +174,10 @@
> if(ips_get_free_cmd(sc, ips_send_io_request, iobuf,
> IPS_NOWAIT_FLAG)){
> return;
> }
>-
>+
>+ s = splbio();
> bufq_remove(&sc->queue, iobuf);
>+ splx(s);
> return;
> }
>
>Index: ips_disk.c
>===================================================================
>RCS file: /usr/ncvs/src/sys/dev/ips/ips_disk.c,v
>retrieving revision 1.6.6.1
>diff -u -r1.6.6.1 ips_disk.c
>--- ips_disk.c 13 Jan 2005 00:46:40 -0000 1.6.6.1
>+++ ips_disk.c 9 Apr 2005 15:07:50 -0000
>@@ -128,12 +128,15 @@
> static void ipsd_strategy(struct buf *iobuf)
> {
> ipsdisk_softc_t *dsc;
>+ int s;
>
> dsc = iobuf->b_dev->si_drv1;
> DEVICE_PRINTF(8,dsc->dev,"in strategy\n");
> devstat_start_transaction(&dsc->stats);
> iobuf->b_driver1 = (void
> *)(uintptr_t)dsc->sc->drives[dsc->disk_number].drivenum;
>- bufqdisksort(&dsc->sc->queue, iobuf);
>+ s = splbio();
>+ bufq_insert_tail(&dsc->sc->queue, iobuf);
>+ splx(s);
> ips_start_io_request(dsc->sc);
> }
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ips.RELENG_4.stability.patch
Type: application/octet-stream
Size: 1538 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20050411/cabb2026/ips.RELENG_4.stability-0001.obj
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ips.RELENG_4.mfc-and-stability.patch
Type: application/octet-stream
Size: 22729 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20050411/cabb2026/ips.RELENG_4.mfc-and-stability-0001.obj
More information about the freebsd-stable
mailing list