Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Feb 2009 10:13:58 +0900
From:      Pyun YongHyeon <pyunyh@gmail.com>
To:        Garrett Cooper <yanefbsd@gmail.com>
Cc:        FreeBSD Current <freebsd-current@freebsd.org>
Subject:   Re: Annoyance with recent parallelism in rc.d
Message-ID:  <20090217011358.GC23900@michelle.cdnetworks.co.kr>
In-Reply-To: <7d6fde3d0902150028n5f07ee55mc6026e1e4935eeb0@mail.gmail.com>
References:  <7d6fde3d0902150028n5f07ee55mc6026e1e4935eeb0@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

--SLDf9lqlvOQaIe6s
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

On Sun, Feb 15, 2009 at 12:28:20AM -0800, Garrett Cooper wrote:
> I just updated my world to a recent snapshot (a build from last week)
> and I'm noting some parallelism / backgrounding which is really
> causing issues with my NIC and NFS mounts. I had to hit CTRL-D 5 times
> in order to get the system to come up because it couldn't resolve my
> NFS server's hostname, because the NIC wasn't up and going yet (as it
> uses the DHCP client in background mode due to the new default).
> 
> Now I realize that this all ties back into the issue with the NIC
> (which I've approached Pyun about, and which I appreciate his help is
> solving issues with this buggy chipset), but is there really a need

Would you try attached patch? I don't like the patch but it may
reduce number of link state change message generated by dhclient.

> for  parallelism at startup rc.d it can't properly detect dependencies
> with some cases like NFS mounts?
> 
> Thanks,
> -Garrett

--SLDf9lqlvOQaIe6s
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="msk.link.diff"

Index: sys/dev/msk/if_msk.c
===================================================================
--- sys/dev/msk/if_msk.c	(revision 188700)
+++ sys/dev/msk/if_msk.c	(working copy)
@@ -943,8 +943,11 @@
 			else {
 				MSK_IF_LOCK(sc_if);
 				ifp->if_mtu = ifr->ifr_mtu;
-				if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+				if ((ifp->if_drv_flags &
+				    IFF_DRV_RUNNING) != 0) {
+					ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 					msk_init_locked(sc_if);
+				}
 				MSK_IF_UNLOCK(sc_if);
 			}
 		}
@@ -2726,6 +2729,7 @@
 			if_printf(sc_if->msk_ifp, "watchdog timeout "
 			   "(missed link)\n");
 		ifp->if_oerrors++;
+		ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 		msk_init_locked(sc_if);
 		return;
 	}
@@ -2750,6 +2754,7 @@
 
 	if_printf(ifp, "watchdog timeout\n");
 	ifp->if_oerrors++;
+	ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 	msk_init_locked(sc_if);
 	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
 		taskqueue_enqueue(taskqueue_fast, &sc_if->msk_tx_task);
@@ -2828,8 +2833,10 @@
 	mskc_reset(sc);
 	for (i = 0; i < sc->msk_num_port; i++) {
 		if (sc->msk_if[i] != NULL && sc->msk_if[i]->msk_ifp != NULL &&
-		    ((sc->msk_if[i]->msk_ifp->if_flags & IFF_UP) != 0))
+		    ((sc->msk_if[i]->msk_ifp->if_flags & IFF_UP) != 0)) {
+			sc->msk_if[i]->msk_ifp->if_drv_flags &= ~IFF_DRV_RUNNING;
 			msk_init_locked(sc->msk_if[i]);
+		}
 	}
 	sc->msk_suspended = 0;
 
@@ -3515,6 +3522,9 @@
 	sc = sc_if->msk_softc;
 	mii = device_get_softc(sc_if->msk_miibus);
 
+	if ((ifp->if_drv_flags & IFF_DRV_RUNNING) != 0)
+		return;
+
 	error = 0;
 	/* Cancel pending I/O and free all Rx/Tx buffers. */
 	msk_stop(sc_if);

--SLDf9lqlvOQaIe6s--



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