From ca88614a1e8bc6073f9ffe90fd1618da1d357929 Mon Sep 17 00:00:00 2001
From: pjd <pjd@FreeBSD.org>
Date: Sat, 4 Dec 2004 21:20:59 +0000
Subject: [PATCH] When initializing device, set d_softc and d_no fields for all
 components, because we know it then and we need it when inserting a component
 which wasn't destroyed while device was running.

Reported by:	Michael Handler <handler@grendel.net>
MFC after:	1 week
---
 sys/geom/raid3/g_raid3.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/sys/geom/raid3/g_raid3.c b/sys/geom/raid3/g_raid3.c
index ca2517fae5ef..9d2ce1ba3485 100644
--- a/sys/geom/raid3/g_raid3.c
+++ b/sys/geom/raid3/g_raid3.c
@@ -466,11 +466,9 @@ g_raid3_init_disk(struct g_raid3_softc *sc, struct g_provider *pp,
 	int error;
 
 	disk = &sc->sc_disks[md->md_no];
-	disk->d_softc = sc;
 	error = g_raid3_connect_disk(disk, pp);
 	if (error != 0)
 		goto fail;
-	disk->d_no = md->md_no;
 	disk->d_state = G_RAID3_DISK_STATE_NONE;
 	disk->d_flags = md->md_dflags;
 	if (md->md_provider[0] != '\0')
@@ -2757,8 +2755,11 @@ g_raid3_create(struct g_class *mp, const struct g_raid3_metadata *md)
 	sc->sc_flags = md->md_mflags;
 	sc->sc_bump_syncid = 0;
 	sc->sc_idle = 0;
-	for (n = 0; n < sc->sc_ndisks; n++)
+	for (n = 0; n < sc->sc_ndisks; n++) {
+		sc->sc_disks[n].d_softc = sc;
+		sc->sc_disks[n].d_no = n;
 		sc->sc_disks[n].d_state = G_RAID3_DISK_STATE_NODISK;
+	}
 	bioq_init(&sc->sc_queue);
 	mtx_init(&sc->sc_queue_mtx, "graid3:queue", NULL, MTX_DEF);
 	TAILQ_INIT(&sc->sc_events);