Date: Thu, 27 Jan 2011 08:47:06 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r217926 - projects/graid/head/sys/geom/raid Message-ID: <201101270847.p0R8l6ld007178@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mav Date: Thu Jan 27 08:47:06 2011 New Revision: 217926 URL: http://svn.freebsd.org/changeset/base/217926 Log: Fix submodules loading order. This makes taste sequence start only after all parts are in place and removes some dirty hacks initially used for that. Modified: projects/graid/head/sys/geom/raid/g_raid.c projects/graid/head/sys/geom/raid/g_raid.h projects/graid/head/sys/geom/raid/tr_raid0.c projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/g_raid.c ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 27 08:42:50 2011 (r217925) +++ projects/graid/head/sys/geom/raid/g_raid.c Thu Jan 27 08:47:06 2011 (r217926) @@ -93,6 +93,7 @@ LIST_HEAD(, g_raid_volume) g_raid_volume LIST_HEAD_INITIALIZER(g_raid_volumes); //static eventhandler_tag g_raid_pre_sync = NULL; +static int g_raid_started = 0; static int g_raid_destroy_geom(struct gctl_req *req, struct g_class *mp, struct g_geom *gp); @@ -1991,9 +1992,6 @@ g_raid_shutdown_pre_sync(void *arg, int } #endif -extern struct g_raid_tr_class g_raid_tr_raid0_class; -extern struct g_raid_tr_class g_raid_tr_raid1_class; - static void g_raid_init(struct g_class *mp) { @@ -2002,18 +2000,16 @@ g_raid_init(struct g_class *mp) // g_raid_shutdown_pre_sync, mp, SHUTDOWN_PRI_FIRST); // if (g_raid_pre_sync == NULL) // G_RAID_DEBUG(0, "Warning! Cannot register shutdown event."); - LIST_INSERT_HEAD(&g_raid_tr_classes, &g_raid_tr_raid1_class, trc_list); - LIST_INSERT_HEAD(&g_raid_tr_classes, &g_raid_tr_raid0_class, trc_list); + g_raid_started = 1; } static void g_raid_fini(struct g_class *mp) { - LIST_REMOVE(&g_raid_tr_raid0_class, trc_list); - LIST_REMOVE(&g_raid_tr_raid1_class, trc_list); // if (g_raid_pre_sync != NULL) // EVENTHANDLER_DEREGISTER(shutdown_pre_sync, g_raid_pre_sync); + g_raid_started = 0; } int @@ -2035,7 +2031,8 @@ g_raid_md_modevent(module_t mod, int typ c = nc; LIST_INSERT_AFTER(c, class, mdc_list); } - g_retaste(&g_raid_class); + if (g_raid_started) + g_retaste(&g_raid_class); break; case MOD_UNLOAD: LIST_REMOVE(class, mdc_list); @@ -2079,4 +2076,14 @@ g_raid_tr_modevent(module_t mod, int typ return (error); } -DECLARE_GEOM_CLASS(g_raid_class, g_raid); +/* + * Use local implementation of DECLARE_GEOM_CLASS(g_raid_class, g_raid) + * to reduce module priority, allowing submodules to register them first. + */ +static moduledata_t g_raid_mod = { + "g_raid", + g_modevent, + &g_raid_class +}; +DECLARE_MODULE(g_raid, g_raid_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD); +MODULE_VERSION(geom_raid, 0); Modified: projects/graid/head/sys/geom/raid/g_raid.h ============================================================================== --- projects/graid/head/sys/geom/raid/g_raid.h Thu Jan 27 08:42:50 2011 (r217925) +++ projects/graid/head/sys/geom/raid/g_raid.h Thu Jan 27 08:47:06 2011 (r217926) @@ -285,7 +285,8 @@ int g_raid_md_modevent(module_t, int, vo g_raid_md_modevent, \ &name##_class \ }; \ - DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) + DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_SECOND); \ + MODULE_DEPEND(name, geom_raid, 0, 0, 0) /* * KOBJ parent class of data transformation modules. @@ -313,7 +314,8 @@ int g_raid_tr_modevent(module_t, int, vo g_raid_tr_modevent, \ &name##_class \ }; \ - DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_ANY) + DECLARE_MODULE(name, name##_mod, SI_SUB_DRIVERS, SI_ORDER_FIRST); \ + MODULE_DEPEND(name, geom_raid, 0, 0, 0) const char * g_raid_volume_level2str(int level, int qual); int g_raid_volume_str2level(const char *str, int *level, int *qual); Modified: projects/graid/head/sys/geom/raid/tr_raid0.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid0.c Thu Jan 27 08:42:50 2011 (r217925) +++ projects/graid/head/sys/geom/raid/tr_raid0.c Thu Jan 27 08:47:06 2011 (r217926) @@ -69,7 +69,7 @@ static kobj_method_t g_raid_tr_raid0_met { 0, 0 } }; -struct g_raid_tr_class g_raid_tr_raid0_class = { +static struct g_raid_tr_class g_raid_tr_raid0_class = { "RAID0", g_raid_tr_raid0_methods, sizeof(struct g_raid_tr_raid0_object), @@ -348,4 +348,4 @@ g_raid_tr_free_raid0(struct g_raid_tr_ob return (0); } -//G_RAID_TR_DECLARE(g_raid_tr_raid0); +G_RAID_TR_DECLARE(g_raid_tr_raid0); Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Thu Jan 27 08:42:50 2011 (r217925) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Thu Jan 27 08:47:06 2011 (r217926) @@ -97,7 +97,7 @@ static kobj_method_t g_raid_tr_raid1_met { 0, 0 } }; -struct g_raid_tr_class g_raid_tr_raid1_class = { +static struct g_raid_tr_class g_raid_tr_raid1_class = { "RAID1", g_raid_tr_raid1_methods, sizeof(struct g_raid_tr_raid1_object), @@ -772,4 +772,4 @@ g_raid_tr_free_raid1(struct g_raid_tr_ob return (0); } -//G_RAID_TR_DECLARE(g_raid_tr_raid1); +G_RAID_TR_DECLARE(g_raid_tr_raid1);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201101270847.p0R8l6ld007178>