From owner-svn-src-projects@FreeBSD.ORG Thu Jan 27 08:47:06 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BB7EF1065693; Thu, 27 Jan 2011 08:47:06 +0000 (UTC) (envelope-from mav@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id AAB418FC15; Thu, 27 Jan 2011 08:47:06 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p0R8l6op007183; Thu, 27 Jan 2011 08:47:06 GMT (envelope-from mav@svn.freebsd.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p0R8l6ld007178; Thu, 27 Jan 2011 08:47:06 GMT (envelope-from mav@svn.freebsd.org) Message-Id: <201101270847.p0R8l6ld007178@svn.freebsd.org> From: Alexander Motin Date: Thu, 27 Jan 2011 08:47:06 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r217926 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Jan 2011 08:47:06 -0000 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);