svn commit: r324588 - stable/11/sys/geom/mirror
Andriy Gapon
avg at FreeBSD.org
Fri Oct 13 09:13:10 UTC 2017
Author: avg
Date: Fri Oct 13 09:13:08 2017
New Revision: 324588
URL: https://svnweb.freebsd.org/changeset/base/324588
Log:
MFC r323612: gmirror: treat ENXIO as disk disconnect, not media error
Modified:
stable/11/sys/geom/mirror/g_mirror.c
stable/11/sys/geom/mirror/g_mirror.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/geom/mirror/g_mirror.c
==============================================================================
--- stable/11/sys/geom/mirror/g_mirror.c Fri Oct 13 09:11:24 2017 (r324587)
+++ stable/11/sys/geom/mirror/g_mirror.c Fri Oct 13 09:13:08 2017 (r324588)
@@ -982,7 +982,13 @@ g_mirror_regular_request(struct bio *bp)
if (g_mirror_disconnect_on_failure &&
g_mirror_ndisks(sc, G_MIRROR_DISK_STATE_ACTIVE) > 1)
{
- sc->sc_bump_id |= G_MIRROR_BUMP_GENID;
+ if (bp->bio_error == ENXIO &&
+ bp->bio_cmd == BIO_READ)
+ sc->sc_bump_id |= G_MIRROR_BUMP_SYNCID;
+ else if (bp->bio_error == ENXIO)
+ sc->sc_bump_id |= G_MIRROR_BUMP_SYNCID_NOW;
+ else
+ sc->sc_bump_id |= G_MIRROR_BUMP_GENID;
g_mirror_event_send(disk,
G_MIRROR_DISK_STATE_DISCONNECTED,
G_MIRROR_EVENT_DONTWAIT);
@@ -2505,6 +2511,10 @@ g_mirror_update_device(struct g_mirror_softc *sc, bool
if ((sc->sc_bump_id & G_MIRROR_BUMP_GENID) != 0) {
sc->sc_bump_id &= ~G_MIRROR_BUMP_GENID;
g_mirror_bump_genid(sc);
+ }
+ if ((sc->sc_bump_id & G_MIRROR_BUMP_SYNCID_NOW) != 0) {
+ sc->sc_bump_id &= ~G_MIRROR_BUMP_SYNCID_NOW;
+ g_mirror_bump_syncid(sc);
}
break;
default:
Modified: stable/11/sys/geom/mirror/g_mirror.h
==============================================================================
--- stable/11/sys/geom/mirror/g_mirror.h Fri Oct 13 09:11:24 2017 (r324587)
+++ stable/11/sys/geom/mirror/g_mirror.h Fri Oct 13 09:13:08 2017 (r324588)
@@ -169,9 +169,11 @@ struct g_mirror_event {
#define G_MIRROR_TYPE_AUTOMATIC 1
/* Bump syncid on first write. */
-#define G_MIRROR_BUMP_SYNCID 0x1
+#define G_MIRROR_BUMP_SYNCID 0x1
/* Bump genid immediately. */
-#define G_MIRROR_BUMP_GENID 0x2
+#define G_MIRROR_BUMP_GENID 0x2
+/* Bump syncid immediately. */
+#define G_MIRROR_BUMP_SYNCID_NOW 0x4
struct g_mirror_softc {
u_int sc_type; /* Device type (manual/automatic). */
u_int sc_state; /* Device state. */
More information about the svn-src-stable-11
mailing list