Date: Wed, 17 Aug 2005 04:32:16 GMT From: soc-cjones <soc-cjones@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 82099 for review Message-ID: <200508170432.j7H4WGmu066803@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=82099 Change 82099 by soc-cjones@soc-cjones_ishtar on 2005/08/17 04:31:49 Add some extras to try avoiding deadlock. Affected files ... .. //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_move.c#9 edit Differences ... ==== //depot/projects/soc2005/gvinum/src/sys/geom/vinum/geom_vinum_move.c#9 (text+ko) ==== @@ -91,8 +91,6 @@ gctl_error(req, "unknown volume '%s'", object); return; } - gctl_error(req, "no touching volumes!"); - return 1; err = gv_move_vol(sc, req, v, destination, *flags); if (err) return; @@ -103,8 +101,6 @@ gctl_error(req, "unknown plex '%s'", object); return; } - gctl_error(req, "no touching plexes!"); - return 1; err = gv_move_plex(sc, req, p, destination, *flags); if (err) return; @@ -160,9 +156,8 @@ g_topology_assert(); KASSERT(p != NULL, ("gv_move_plex: NULL p")); - /* TODO identify all sds for the plex, then move 'em. */ - - return (0); + gctl_error(req, "moving a plex makes no sense"); + return 99; } /* Move a subdisk. */ @@ -198,6 +193,7 @@ on the new drive. Unfortunately, we can't use gv_new_sd, since we don't really want to deal with tokenizing stuff. Oh well. */ + g_topology_lock(); s2 = g_malloc(sizeof(*s2), M_WAITOK | M_ZERO); snprintf(s2->name, GV_MAXSDNAME, "temp.s0"); /* TODO Come up with temp name. */ printf("gv_move_sd: B (s2->name = %s)\n", s2->name); @@ -215,13 +211,14 @@ printf("gv_move_sd: F errstr = %s\n", errstr); gctl_error(req, errstr); g_free(s2); + g_topology_unlock(); return err; } printf("gv_move_sd: G\n"); s2->flags |= GV_SD_NEWBORN; LIST_INSERT_HEAD(&sc->subdisks, s2, sd); printf("gv_move_sd: I\n"); - s2->state = GV_SD_STALE; + printf("gv_move_sd: J\n"); gv_save_config_all(sc); printf("gv_move_sd: K\n"); @@ -244,13 +241,17 @@ printf("gv_move_sd: N\n"); err = gv_rm_sd(sc, req, s, flags); printf("gv_move_sd: O, err = %d\n", err); - if (err) + if (err) { + g_topology_unlock(); return (err); + } gv_sd_to_plex(p, s2, 0); printf("gv_move_sd: P\n"); - + gv_set_sd_state(s2, GV_SD_STALE, GV_SETSTATE_CONFIG); + printf("gv_move_sd: Q\n"); gv_save_config_all(sc); + g_topology_unlock(); printf("gv_move_sd: done gv_move_sd\n"); return (0); } @@ -259,13 +260,13 @@ static int gv_move_drive(struct gv_softc *sc, struct gctl_req *req, struct gv_drive *d, char *destination, int flags) { - int err; + int err = 0; g_topology_assert(); KASSERT(d != NULL, ("gv_move_drive: NULL d")); /* TODO find all sds on drive, then move them. */ - return (0); + return (err); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200508170432.j7H4WGmu066803>