From owner-p4-projects@FreeBSD.ORG Wed Jun 27 20:42:38 2007 Return-Path: X-Original-To: p4-projects@freebsd.org Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id F0F6F16A469; Wed, 27 Jun 2007 20:42:37 +0000 (UTC) X-Original-To: perforce@FreeBSD.org Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 9139516A400 for ; Wed, 27 Jun 2007 20:42:37 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 82DFD13C448 for ; Wed, 27 Jun 2007 20:42:37 +0000 (UTC) (envelope-from lulf@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.8/8.13.8) with ESMTP id l5RKgb9U016517 for ; Wed, 27 Jun 2007 20:42:37 GMT (envelope-from lulf@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.8/8.13.8/Submit) id l5RKgacc016514 for perforce@freebsd.org; Wed, 27 Jun 2007 20:42:36 GMT (envelope-from lulf@FreeBSD.org) Date: Wed, 27 Jun 2007 20:42:36 GMT Message-Id: <200706272042.l5RKgacc016514@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to lulf@FreeBSD.org using -f From: Ulf Lilleengen To: Perforce Change Reviews Cc: Subject: PERFORCE change 122425 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Jun 2007 20:42:38 -0000 http://perforce.freebsd.org/chv.cgi?CH=122425 Change 122425 by lulf@lulf_carrot on 2007/06/27 20:42:09 - Convert 'rename' command to the new event system. - Add new error codes for rename. - Change use of some error codes. - Add EVENT_RENAME_ events. Affected files ... .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#22 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.h#17 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rename.c#2 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#15 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_subr.c#13 edit .. //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#18 edit Differences ... ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.c#22 (text+ko) ==== @@ -522,6 +522,7 @@ struct gv_drive *d; struct bio *bp; int newstate, flags, err, rename; + char *newname; off_t offset; sc = arg; @@ -746,6 +747,58 @@ "error code %d\n", s->name, err); break; + case GV_EVENT_RENAME_VOL: + printf("VINUM: event 'rename'\n"); + v = ev->arg1; + newname = ev->arg2; + flags = ev->arg3; + err = gv_rename_vol(sc, v, newname, flags); + if (err) + printf("VINUM: error renaming %s to %s:" + " error code %d\n", v->name, + newname, err); + g_free(newname); + break; + + case GV_EVENT_RENAME_PLEX: + printf("VINUM: event 'rename'\n"); + p = ev->arg1; + newname = ev->arg2; + flags = ev->arg3; + err = gv_rename_plex(sc, p, newname, flags); + if (err) + printf("VINUM: error renaming %s to %s:" + " error code %d\n", p->name, + newname, err); + g_free(newname); + break; + + case GV_EVENT_RENAME_SD: + printf("VINUM: event 'rename'\n"); + s = ev->arg1; + newname = ev->arg2; + flags = ev->arg3; + err = gv_rename_sd(sc, s, newname, flags); + if (err) + printf("VINUM: error renaming %s to %s:" + " error code %d\n", s->name, + newname, err); + g_free(newname); + break; + + case GV_EVENT_RENAME_DRIVE: + printf("VINUM: event 'rename'\n"); + d = ev->arg1; + newname = ev->arg2; + flags = ev->arg3; + err = gv_rename_drive(sc, d, newname, flags); + if (err) + printf("VINUM: error renaming %s to %s:" + " error code %d\n", d->name, + newname, err); + g_free(newname); + break; + case GV_EVENT_THREAD_EXIT: printf("VINUM: event 'thread exit'\n"); g_free(ev); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum.h#17 (text+ko) ==== @@ -49,6 +49,10 @@ /* geom_vinum_rename.c */ void gv_rename(struct g_geom *, struct gctl_req *); +int gv_rename_drive(struct gv_softc *, struct gv_drive *, char *, int); +int gv_rename_plex(struct gv_softc *, struct gv_plex *, char *, int); +int gv_rename_sd(struct gv_softc *, struct gv_sd *, char *, int); +int gv_rename_vol(struct gv_softc *, struct gv_volume *, char *, int); /* geom_vinum_rm.c */ void gv_remove(struct g_geom *, struct gctl_req *); ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_rename.c#2 (text+ko) ==== @@ -42,15 +42,6 @@ #include #include -static int gv_rename_drive(struct gv_softc *, struct gctl_req *, - struct gv_drive *, char *, int); -static int gv_rename_plex(struct gv_softc *, struct gctl_req *, - struct gv_plex *, char *, int); -static int gv_rename_sd(struct gv_softc *, struct gctl_req *, - struct gv_sd *, char *, int); -static int gv_rename_vol(struct gv_softc *, struct gctl_req *, - struct gv_volume *, char *, int); - void gv_rename(struct g_geom *gp, struct gctl_req *req) { @@ -59,8 +50,8 @@ struct gv_plex *p; struct gv_sd *s; struct gv_drive *d; - char *newname, *object; - int err, *flags, type; + char *newname, *object, *name; + int *flags, type; sc = gp->softc; @@ -86,9 +77,9 @@ gctl_error(req, "unknown volume '%s'", object); return; } - err = gv_rename_vol(sc, req, v, newname, *flags); - if (err) - return; + name = g_malloc(GV_MAXVOLNAME, M_WAITOK | M_ZERO); + strlcpy(name, newname, GV_MAXVOLNAME); + gv_post_event(sc, GV_EVENT_RENAME_VOL, v, name, *flags, 0); break; case GV_TYPE_PLEX: p = gv_find_plex(sc, object); @@ -96,9 +87,9 @@ gctl_error(req, "unknown plex '%s'", object); return; } - err = gv_rename_plex(sc, req, p, newname, *flags); - if (err) - return; + name = g_malloc(GV_MAXPLEXNAME, M_WAITOK | M_ZERO); + strlcpy(name, newname, GV_MAXPLEXNAME); + gv_post_event(sc, GV_EVENT_RENAME_PLEX, p, name, *flags, 0); break; case GV_TYPE_SD: s = gv_find_sd(sc, object); @@ -106,9 +97,9 @@ gctl_error(req, "unknown subdisk '%s'", object); return; } - err = gv_rename_sd(sc, req, s, newname, *flags); - if (err) - return; + name = g_malloc(GV_MAXSDNAME, M_WAITOK | M_ZERO); + strlcpy(name, newname, GV_MAXSDNAME); + gv_post_event(sc, GV_EVENT_RENAME_SD, s, name, *flags, 0); break; case GV_TYPE_DRIVE: d = gv_find_drive(sc, object); @@ -116,30 +107,28 @@ gctl_error(req, "unknown drive '%s'", object); return; } - err = gv_rename_drive(sc, req, d, newname, *flags); - if (err) - return; + name = g_malloc(GV_MAXDRIVENAME, M_WAITOK | M_ZERO); + strlcpy(name, newname, GV_MAXDRIVENAME); + gv_post_event(sc, GV_EVENT_RENAME_DRIVE, d, name, *flags, 0); break; default: gctl_error(req, "unknown object '%s'", object); return; } - - gv_save_config(sc); } -static int -gv_rename_drive(struct gv_softc *sc, struct gctl_req *req, struct gv_drive *d, - char *newname, int flags) +int +gv_rename_drive(struct gv_softc *sc, struct gv_drive *d, char *newname, + int flags) { struct gv_sd *s; g_topology_assert(); KASSERT(d != NULL, ("gv_rename_drive: NULL d")); - if (gv_object_type(sc, newname) != -1) { - gctl_error(req, "drive name '%s' already in use", newname); - return (-1); + if (gv_object_type(sc, newname) != GV_ERR_NOTFOUND) { + printf("VINUM: drive name '%s' already in use\n", newname); + return (GV_ERR_NAMETAKEN); } strncpy(d->name, newname, GV_MAXDRIVENAME); @@ -150,9 +139,8 @@ return (0); } -static int -gv_rename_plex(struct gv_softc *sc, struct gctl_req *req, struct gv_plex *p, - char *newname, int flags) +int +gv_rename_plex(struct gv_softc *sc, struct gv_plex *p, char *newname, int flags) { struct gv_sd *s; char *plexnum, *plexnump, *oldplex, *oldplexp; @@ -164,9 +152,9 @@ err = 0; - if (gv_object_type(sc, newname) != -1) { - gctl_error(req, "plex name '%s' already in use", newname); - return (-1); + if (gv_object_type(sc, newname) != GV_ERR_NOTFOUND) { + printf("VINUM: plex name '%s' already in use\n", newname); + return (GV_ERR_NAMETAKEN); } /* Needed for sanity checking. */ @@ -187,15 +175,15 @@ strsep(&oldplexp, "."); strsep(&plexnump, "."); if (plexnump == NULL || *plexnump == '\0') { - gctl_error(req, "proposed plex name '%s' is not a valid plex " - "name", newname); - err = -1; + printf("VINUM: proposed plex name '%s' is not a valid plex " + "name\n", newname); + err = GV_ERR_INVNAME; goto failure; } if (strcmp(oldplexp, plexnump)) { - gctl_error(req, "current and proposed plex numbers (%s, %s) " - "do not match", plexnump, oldplexp); - err = -1; + printf("VINUM: current and proposed plex numbers (%s, %s) " + "do not match\n", plexnump, oldplexp); + err = GV_ERR_INVNAME; goto failure; } @@ -218,7 +206,7 @@ strsep(&oldsdp, "."); strsep(&oldsdp, "."); snprintf(newsd, GV_MAXSDNAME, "%s.%s", p->name, oldsdp); - err = gv_rename_sd(sc, req, s, newsd, flags); + err = gv_rename_sd(sc, s, newsd, flags); g_free(newsd); g_free(oldsd); if (err) @@ -238,9 +226,8 @@ * since there are no structures below a subdisk. Similarly, we don't have to * clean up any references elsewhere to the subdisk's name. */ -static int -gv_rename_sd(struct gv_softc *sc, struct gctl_req *req, struct gv_sd *s, - char * newname, int flags) +int +gv_rename_sd(struct gv_softc *sc, struct gv_sd *s, char *newname, int flags) { char *new, *newp, *old, *oldp; int err; @@ -250,9 +237,9 @@ err = 0; - if (gv_object_type(sc, newname) != -1) { - gctl_error(req, "subdisk name %s already in use", newname); - return (-1); + if (gv_object_type(sc, newname) != GV_ERR_NOTFOUND) { + printf("VINUM: subdisk name %s already in use\n", newname); + return (GV_ERR_NAMETAKEN); } /* Needed for sanity checking. */ @@ -274,22 +261,22 @@ strsep(&oldp, "."); strsep(&newp, "."); if (newp == NULL || *newp == '\0') { - gctl_error(req, "proposed sd name '%s' is not a valid sd name", + printf("VINUM: proposed sd name '%s' is not a valid sd name\n", newname); - err = -1; + err = GV_ERR_INVNAME; goto fail; } strsep(&newp, "."); if (newp == NULL || *newp == '\0') { - gctl_error(req, "proposed sd name '%s' is not a valid sd name", + printf("VINUM: proposed sd name '%s' is not a valid sd name\n", newname); - err = -1; + err = GV_ERR_INVNAME; goto fail; } if (strcmp(newp, oldp)) { - gctl_error(req, "current and proposed sd numbers (%s, %s) do " - "not match", oldp, newp); - err = -1; + printf("VINUM: current and proposed sd numbers (%s, %s) do " + "not match\n", oldp, newp); + err = GV_ERR_INVNAME; goto fail; } @@ -302,9 +289,9 @@ return (err); } -static int -gv_rename_vol(struct gv_softc *sc, struct gctl_req *req, struct gv_volume *v, - char *newname, int flags) +int +gv_rename_vol(struct gv_softc *sc, struct gv_volume *v, char *newname, + int flags) { struct gv_plex *p; char *new, *old, *oldp; @@ -313,9 +300,9 @@ g_topology_assert(); KASSERT(v != NULL, ("gv_rename_vol: NULL v")); - if (gv_object_type(sc, newname) != -1) { - gctl_error(req, "volume name %s already in use", newname); - return (-1); + if (gv_object_type(sc, newname) != GV_ERR_NOTFOUND) { + printf("VINUM: volume name %s already in use", newname); + return (GV_ERR_NAMETAKEN); } /* Rename the volume. */ @@ -335,7 +322,7 @@ */ strsep(&oldp, "."); snprintf(new, GV_MAXPLEXNAME, "%s.%s", v->name, oldp); - err = gv_rename_plex(sc, req, p, new, flags); + err = gv_rename_plex(sc, p, new, flags); g_free(new); g_free(old); if (err) ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_state.c#15 (text+ko) ==== @@ -117,8 +117,6 @@ gctl_error(req, "unknown object '%s'", obj); break; } - - return; } /* Update drive state; return 0 if the state changes, otherwise error. */ ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_subr.c#13 (text+ko) ==== @@ -936,7 +936,7 @@ return (GV_TYPE_DRIVE); } - return (GV_ERR_INVTYPE); + return (GV_ERR_NOTFOUND); } void ==== //depot/projects/soc2007/lulf/gvinum_fixup/sys/geom/vinum/geom_vinum_var.h#18 (text+ko) ==== @@ -131,6 +131,7 @@ #define GV_ERR_NAMETAKEN (-10) /* Object name is taken. */ #define GV_ERR_NOSPACE (-11) /* No space left on drive/subdisk. */ #define GV_ERR_BADOFFSET (-12) /* Invalid offset specified. */ +#define GV_ERR_INVNAME (-13) /* Invalid object name. */ /* * hostname is 256 bytes long, but we don't need to shlep multiple copies in @@ -199,6 +200,10 @@ #define GV_EVENT_ATTACH_SD 23 #define GV_EVENT_DETACH_PLEX 24 #define GV_EVENT_DETACH_SD 25 +#define GV_EVENT_RENAME_VOL 26 +#define GV_EVENT_RENAME_PLEX 27 +#define GV_EVENT_RENAME_SD 28 +#define GV_EVENT_RENAME_DRIVE 29 struct gv_event { int type;