Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 7 Sep 2012 22:34:30 +0000 (UTC)
From:      Thomas Quinot <thomas@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-8@freebsd.org
Subject:   svn commit: r240218 - in stable/8/sys: . dev/sound geom/multipath
Message-ID:  <201209072234.q87MYUBx075175@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: thomas
Date: Fri Sep  7 22:34:30 2012
New Revision: 240218
URL: http://svn.freebsd.org/changeset/base/240218

Log:
  Merge rev. 239673 from head to stable/8:
  (g_multipath_rotate): Fix algorithm so that it does rotate over all good
  providers, not just the last two.

Modified:
  stable/8/sys/geom/multipath/g_multipath.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/Makefile   (props changed)
  stable/8/sys/amd64/   (props changed)
  stable/8/sys/amd64/include/xen/   (props changed)
  stable/8/sys/arm/   (props changed)
  stable/8/sys/boot/   (props changed)
  stable/8/sys/bsm/   (props changed)
  stable/8/sys/cam/   (props changed)
  stable/8/sys/cddl/   (props changed)
  stable/8/sys/cddl/contrib/opensolaris/   (props changed)
  stable/8/sys/compat/   (props changed)
  stable/8/sys/conf/   (props changed)
  stable/8/sys/contrib/   (props changed)
  stable/8/sys/contrib/dev/acpica/   (props changed)
  stable/8/sys/contrib/pf/   (props changed)
  stable/8/sys/crypto/   (props changed)
  stable/8/sys/ddb/   (props changed)
  stable/8/sys/dev/   (props changed)
  stable/8/sys/dev/aac/   (props changed)
  stable/8/sys/dev/acpi_support/   (props changed)
  stable/8/sys/dev/acpica/   (props changed)
  stable/8/sys/dev/adb/   (props changed)
  stable/8/sys/dev/adlink/   (props changed)
  stable/8/sys/dev/advansys/   (props changed)
  stable/8/sys/dev/ae/   (props changed)
  stable/8/sys/dev/age/   (props changed)
  stable/8/sys/dev/agp/   (props changed)
  stable/8/sys/dev/aha/   (props changed)
  stable/8/sys/dev/ahb/   (props changed)
  stable/8/sys/dev/ahci/   (props changed)
  stable/8/sys/dev/aic/   (props changed)
  stable/8/sys/dev/aic7xxx/   (props changed)
  stable/8/sys/dev/alc/   (props changed)
  stable/8/sys/dev/ale/   (props changed)
  stable/8/sys/dev/amd/   (props changed)
  stable/8/sys/dev/amdsbwd/   (props changed)
  stable/8/sys/dev/amdtemp/   (props changed)
  stable/8/sys/dev/amr/   (props changed)
  stable/8/sys/dev/an/   (props changed)
  stable/8/sys/dev/arcmsr/   (props changed)
  stable/8/sys/dev/asmc/   (props changed)
  stable/8/sys/dev/asr/   (props changed)
  stable/8/sys/dev/ata/   (props changed)
  stable/8/sys/dev/ath/   (props changed)
  stable/8/sys/dev/atkbdc/   (props changed)
  stable/8/sys/dev/auxio/   (props changed)
  stable/8/sys/dev/bce/   (props changed)
  stable/8/sys/dev/bfe/   (props changed)
  stable/8/sys/dev/bge/   (props changed)
  stable/8/sys/dev/bktr/   (props changed)
  stable/8/sys/dev/bm/   (props changed)
  stable/8/sys/dev/buslogic/   (props changed)
  stable/8/sys/dev/bwi/   (props changed)
  stable/8/sys/dev/bwn/   (props changed)
  stable/8/sys/dev/cardbus/   (props changed)
  stable/8/sys/dev/cas/   (props changed)
  stable/8/sys/dev/ce/   (props changed)
  stable/8/sys/dev/cfe/   (props changed)
  stable/8/sys/dev/cfi/   (props changed)
  stable/8/sys/dev/ciss/   (props changed)
  stable/8/sys/dev/cm/   (props changed)
  stable/8/sys/dev/cmx/   (props changed)
  stable/8/sys/dev/coretemp/   (props changed)
  stable/8/sys/dev/cp/   (props changed)
  stable/8/sys/dev/cpuctl/   (props changed)
  stable/8/sys/dev/cpufreq/   (props changed)
  stable/8/sys/dev/cs/   (props changed)
  stable/8/sys/dev/ct/   (props changed)
  stable/8/sys/dev/ctau/   (props changed)
  stable/8/sys/dev/cx/   (props changed)
  stable/8/sys/dev/cxgb/   (props changed)
  stable/8/sys/dev/cxgbe/   (props changed)
  stable/8/sys/dev/cy/   (props changed)
  stable/8/sys/dev/dc/   (props changed)
  stable/8/sys/dev/dcons/   (props changed)
  stable/8/sys/dev/de/   (props changed)
  stable/8/sys/dev/digi/   (props changed)
  stable/8/sys/dev/dpms/   (props changed)
  stable/8/sys/dev/dpt/   (props changed)
  stable/8/sys/dev/drm/   (props changed)
  stable/8/sys/dev/e1000/   (props changed)
  stable/8/sys/dev/ed/   (props changed)
  stable/8/sys/dev/eisa/   (props changed)
  stable/8/sys/dev/en/   (props changed)
  stable/8/sys/dev/ep/   (props changed)
  stable/8/sys/dev/esp/   (props changed)
  stable/8/sys/dev/et/   (props changed)
  stable/8/sys/dev/ex/   (props changed)
  stable/8/sys/dev/exca/   (props changed)
  stable/8/sys/dev/fatm/   (props changed)
  stable/8/sys/dev/fb/   (props changed)
  stable/8/sys/dev/fdc/   (props changed)
  stable/8/sys/dev/fe/   (props changed)
  stable/8/sys/dev/firewire/   (props changed)
  stable/8/sys/dev/flash/   (props changed)
  stable/8/sys/dev/fxp/   (props changed)
  stable/8/sys/dev/gem/   (props changed)
  stable/8/sys/dev/glxsb/   (props changed)
  stable/8/sys/dev/hatm/   (props changed)
  stable/8/sys/dev/hifn/   (props changed)
  stable/8/sys/dev/hme/   (props changed)
  stable/8/sys/dev/hpt27xx/   (props changed)
  stable/8/sys/dev/hptiop/   (props changed)
  stable/8/sys/dev/hptmv/   (props changed)
  stable/8/sys/dev/hptrr/   (props changed)
  stable/8/sys/dev/hwpmc/   (props changed)
  stable/8/sys/dev/ic/   (props changed)
  stable/8/sys/dev/ichsmb/   (props changed)
  stable/8/sys/dev/ichwd/   (props changed)
  stable/8/sys/dev/ida/   (props changed)
  stable/8/sys/dev/ie/   (props changed)
  stable/8/sys/dev/ieee488/   (props changed)
  stable/8/sys/dev/if_ndis/   (props changed)
  stable/8/sys/dev/iicbus/   (props changed)
  stable/8/sys/dev/iir/   (props changed)
  stable/8/sys/dev/io/   (props changed)
  stable/8/sys/dev/ipmi/   (props changed)
  stable/8/sys/dev/ips/   (props changed)
  stable/8/sys/dev/ipw/   (props changed)
  stable/8/sys/dev/isci/   (props changed)
  stable/8/sys/dev/iscsi/   (props changed)
  stable/8/sys/dev/isp/   (props changed)
  stable/8/sys/dev/ispfw/   (props changed)
  stable/8/sys/dev/iwi/   (props changed)
  stable/8/sys/dev/iwn/   (props changed)
  stable/8/sys/dev/ixgb/   (props changed)
  stable/8/sys/dev/ixgbe/   (props changed)
  stable/8/sys/dev/jme/   (props changed)
  stable/8/sys/dev/joy/   (props changed)
  stable/8/sys/dev/kbd/   (props changed)
  stable/8/sys/dev/kbdmux/   (props changed)
  stable/8/sys/dev/ksyms/   (props changed)
  stable/8/sys/dev/le/   (props changed)
  stable/8/sys/dev/led/   (props changed)
  stable/8/sys/dev/lge/   (props changed)
  stable/8/sys/dev/lindev/   (props changed)
  stable/8/sys/dev/lmc/   (props changed)
  stable/8/sys/dev/malo/   (props changed)
  stable/8/sys/dev/mc146818/   (props changed)
  stable/8/sys/dev/mca/   (props changed)
  stable/8/sys/dev/mcd/   (props changed)
  stable/8/sys/dev/md/   (props changed)
  stable/8/sys/dev/mem/   (props changed)
  stable/8/sys/dev/mfi/   (props changed)
  stable/8/sys/dev/mge/   (props changed)
  stable/8/sys/dev/mii/   (props changed)
  stable/8/sys/dev/mk48txx/   (props changed)
  stable/8/sys/dev/mlx/   (props changed)
  stable/8/sys/dev/mly/   (props changed)
  stable/8/sys/dev/mmc/   (props changed)
  stable/8/sys/dev/mn/   (props changed)
  stable/8/sys/dev/mps/   (props changed)
  stable/8/sys/dev/mpt/   (props changed)
  stable/8/sys/dev/mse/   (props changed)
  stable/8/sys/dev/msk/   (props changed)
  stable/8/sys/dev/mvs/   (props changed)
  stable/8/sys/dev/mwl/   (props changed)
  stable/8/sys/dev/mxge/   (props changed)
  stable/8/sys/dev/my/   (props changed)
  stable/8/sys/dev/ncv/   (props changed)
  stable/8/sys/dev/netmap/   (props changed)
  stable/8/sys/dev/nfe/   (props changed)
  stable/8/sys/dev/nge/   (props changed)
  stable/8/sys/dev/nmdm/   (props changed)
  stable/8/sys/dev/nsp/   (props changed)
  stable/8/sys/dev/null/   (props changed)
  stable/8/sys/dev/nve/   (props changed)
  stable/8/sys/dev/nvram/   (props changed)
  stable/8/sys/dev/nxge/   (props changed)
  stable/8/sys/dev/oce/   (props changed)
  stable/8/sys/dev/ofw/   (props changed)
  stable/8/sys/dev/patm/   (props changed)
  stable/8/sys/dev/pbio/   (props changed)
  stable/8/sys/dev/pccard/   (props changed)
  stable/8/sys/dev/pccbb/   (props changed)
  stable/8/sys/dev/pcf/   (props changed)
  stable/8/sys/dev/pci/   (props changed)
  stable/8/sys/dev/pcn/   (props changed)
  stable/8/sys/dev/pdq/   (props changed)
  stable/8/sys/dev/powermac_nvram/   (props changed)
  stable/8/sys/dev/ppbus/   (props changed)
  stable/8/sys/dev/ppc/   (props changed)
  stable/8/sys/dev/pst/   (props changed)
  stable/8/sys/dev/puc/   (props changed)
  stable/8/sys/dev/quicc/   (props changed)
  stable/8/sys/dev/ral/   (props changed)
  stable/8/sys/dev/random/   (props changed)
  stable/8/sys/dev/rc/   (props changed)
  stable/8/sys/dev/re/   (props changed)
  stable/8/sys/dev/rndtest/   (props changed)
  stable/8/sys/dev/rp/   (props changed)
  stable/8/sys/dev/safe/   (props changed)
  stable/8/sys/dev/sbni/   (props changed)
  stable/8/sys/dev/scc/   (props changed)
  stable/8/sys/dev/scd/   (props changed)
  stable/8/sys/dev/sdhci/   (props changed)
  stable/8/sys/dev/sec/   (props changed)
  stable/8/sys/dev/sf/   (props changed)
  stable/8/sys/dev/sge/   (props changed)
  stable/8/sys/dev/si/   (props changed)
  stable/8/sys/dev/siba/   (props changed)
  stable/8/sys/dev/siis/   (props changed)
  stable/8/sys/dev/sio/   (props changed)
  stable/8/sys/dev/sis/   (props changed)
  stable/8/sys/dev/sk/   (props changed)
  stable/8/sys/dev/smbus/   (props changed)
  stable/8/sys/dev/smc/   (props changed)
  stable/8/sys/dev/sn/   (props changed)
  stable/8/sys/dev/snc/   (props changed)
  stable/8/sys/dev/snp/   (props changed)
  stable/8/sys/dev/sound/   (props changed)
  stable/8/sys/dev/sound/chip.h   (props changed)
  stable/8/sys/dev/sound/clone.c   (props changed)
  stable/8/sys/dev/sound/clone.h   (props changed)
  stable/8/sys/dev/sound/driver.c   (props changed)
  stable/8/sys/dev/sound/isa/   (props changed)
  stable/8/sys/dev/sound/macio/   (props changed)
  stable/8/sys/dev/sound/midi/   (props changed)
  stable/8/sys/dev/sound/pci/   (props changed)
  stable/8/sys/dev/sound/pcm/   (props changed)
  stable/8/sys/dev/sound/sbus/   (props changed)
  stable/8/sys/dev/sound/unit.c   (props changed)
  stable/8/sys/dev/sound/unit.h   (props changed)
  stable/8/sys/dev/sound/usb/   (props changed)
  stable/8/sys/dev/sound/version.h   (props changed)
  stable/8/sys/dev/speaker/   (props changed)
  stable/8/sys/dev/spibus/   (props changed)
  stable/8/sys/dev/ste/   (props changed)
  stable/8/sys/dev/stg/   (props changed)
  stable/8/sys/dev/stge/   (props changed)
  stable/8/sys/dev/streams/   (props changed)
  stable/8/sys/dev/sym/   (props changed)
  stable/8/sys/dev/syscons/   (props changed)
  stable/8/sys/dev/tdfx/   (props changed)
  stable/8/sys/dev/ti/   (props changed)
  stable/8/sys/dev/tl/   (props changed)
  stable/8/sys/dev/tpm/   (props changed)
  stable/8/sys/dev/trm/   (props changed)
  stable/8/sys/dev/tsec/   (props changed)
  stable/8/sys/dev/twa/   (props changed)
  stable/8/sys/dev/twe/   (props changed)
  stable/8/sys/dev/tws/   (props changed)
  stable/8/sys/dev/tx/   (props changed)
  stable/8/sys/dev/txp/   (props changed)
  stable/8/sys/dev/uart/   (props changed)
  stable/8/sys/dev/ubsec/   (props changed)
  stable/8/sys/dev/usb/   (props changed)
  stable/8/sys/dev/utopia/   (props changed)
  stable/8/sys/dev/vge/   (props changed)
  stable/8/sys/dev/viawd/   (props changed)
  stable/8/sys/dev/virtio/   (props changed)
  stable/8/sys/dev/vkbd/   (props changed)
  stable/8/sys/dev/vr/   (props changed)
  stable/8/sys/dev/vte/   (props changed)
  stable/8/sys/dev/vx/   (props changed)
  stable/8/sys/dev/watchdog/   (props changed)
  stable/8/sys/dev/wb/   (props changed)
  stable/8/sys/dev/wbwd/   (props changed)
  stable/8/sys/dev/wds/   (props changed)
  stable/8/sys/dev/wi/   (props changed)
  stable/8/sys/dev/wl/   (props changed)
  stable/8/sys/dev/wpi/   (props changed)
  stable/8/sys/dev/xe/   (props changed)
  stable/8/sys/dev/xen/   (props changed)
  stable/8/sys/dev/xl/   (props changed)
  stable/8/sys/fs/   (props changed)
  stable/8/sys/gdb/   (props changed)
  stable/8/sys/geom/   (props changed)
  stable/8/sys/gnu/   (props changed)
  stable/8/sys/i386/   (props changed)
  stable/8/sys/ia64/   (props changed)
  stable/8/sys/isa/   (props changed)
  stable/8/sys/kern/   (props changed)
  stable/8/sys/kgssapi/   (props changed)
  stable/8/sys/libkern/   (props changed)
  stable/8/sys/mips/   (props changed)
  stable/8/sys/modules/   (props changed)
  stable/8/sys/net/   (props changed)
  stable/8/sys/net80211/   (props changed)
  stable/8/sys/netatalk/   (props changed)
  stable/8/sys/netgraph/   (props changed)
  stable/8/sys/netinet/   (props changed)
  stable/8/sys/netinet6/   (props changed)
  stable/8/sys/netipsec/   (props changed)
  stable/8/sys/netipx/   (props changed)
  stable/8/sys/netnatm/   (props changed)
  stable/8/sys/netncp/   (props changed)
  stable/8/sys/netsmb/   (props changed)
  stable/8/sys/nfs/   (props changed)
  stable/8/sys/nfsclient/   (props changed)
  stable/8/sys/nfsserver/   (props changed)
  stable/8/sys/nlm/   (props changed)
  stable/8/sys/opencrypto/   (props changed)
  stable/8/sys/pc98/   (props changed)
  stable/8/sys/pci/   (props changed)
  stable/8/sys/powerpc/   (props changed)
  stable/8/sys/rpc/   (props changed)
  stable/8/sys/security/   (props changed)
  stable/8/sys/sparc64/   (props changed)
  stable/8/sys/sun4v/   (props changed)
  stable/8/sys/sys/   (props changed)
  stable/8/sys/tools/   (props changed)
  stable/8/sys/ufs/   (props changed)
  stable/8/sys/vm/   (props changed)
  stable/8/sys/x86/   (props changed)
  stable/8/sys/xdr/   (props changed)
  stable/8/sys/xen/   (props changed)

Modified: stable/8/sys/geom/multipath/g_multipath.c
==============================================================================
--- stable/8/sys/geom/multipath/g_multipath.c	Fri Sep  7 22:30:20 2012	(r240217)
+++ stable/8/sys/geom/multipath/g_multipath.c	Fri Sep  7 22:34:30 2012	(r240218)
@@ -588,19 +588,26 @@ g_multipath_destroy_geom(struct gctl_req
 static int
 g_multipath_rotate(struct g_geom *gp)
 {
-	struct g_consumer *lcp;
+	struct g_consumer *lcp, *first_good_cp = NULL;
 	struct g_multipath_softc *sc = gp->softc;
+	int active_cp_seen = 0;
 
 	g_topology_assert();
 	if (sc == NULL)
 		return (ENXIO);
 	LIST_FOREACH(lcp, &gp->consumer, consumer) {
 		if ((lcp->index & MP_BAD) == 0) {
-			if (sc->sc_active != lcp)
+			if (first_good_cp == NULL)
+				first_good_cp = lcp;
+			if (active_cp_seen)
 				break;
 		}
+		if (sc->sc_active == lcp)
+			active_cp_seen = 1;
 	}
-	if (lcp) {
+	if (lcp == NULL)
+		lcp = first_good_cp;
+	if (lcp && lcp != sc->sc_active) {
 		sc->sc_active = lcp;
 		if (sc->sc_active_active != 1)
 			printf("GEOM_MULTIPATH: %s is now active path in %s\n",



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