From e7ff00372839d76506b62b02f72ffca52e7cccb1 Mon Sep 17 00:00:00 2001 From: phk Date: Sun, 8 Aug 2004 06:46:27 +0000 Subject: Give classes a version number and refuse to touch classes which are not understood. This makes room for additional binary compatibility in the future. Put fields in the class for the geom's methods and initialize the methods of a new geom from these fields. This saves some code in all classes. --- sys/geom/geom_subr.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'sys/geom/geom_subr.c') diff --git a/sys/geom/geom_subr.c b/sys/geom/geom_subr.c index 2e95769..c7058ea 100644 --- a/sys/geom/geom_subr.c +++ b/sys/geom/geom_subr.c @@ -177,7 +177,14 @@ g_modevent(module_t mod, int type, void *data) struct g_hh00 *hh; int error; static int g_ignition; + struct g_class *mp; + mp = data; + if (mp->version != G_VERSION) { + printf("GEOM class %s has Wrong version %x\n", + mp->name, mp->version); + return (EINVAL); + } if (!g_ignition) { g_ignition++; g_init(); @@ -234,6 +241,13 @@ g_new_geomf(struct g_class *mp, const char *fmt, ...) TAILQ_INSERT_HEAD(&geoms, gp, geoms); strcpy(gp->name, sbuf_data(sb)); sbuf_delete(sb); + /* Fill in defaults from class */ + gp->start = mp->start; + gp->spoiled = mp->spoiled; + gp->dumpconf = mp->dumpconf; + gp->access = mp->access; + gp->orphan = mp->orphan; + gp->ioctl = mp->ioctl; return (gp); } -- cgit v1.1