Module Name: src Committed By: pgoyette Date: Sat Jul 30 22:36:14 UTC 2016
Modified Files: src/sys/dev: fss.c src/sys/rump/dev/lib/libfss: fss_component.c Log Message: More adaptation of the rump component init, to avoid EEXIST during regular module initialization. To generate a diff of this commit: cvs rdiff -u -r1.93 -r1.94 src/sys/dev/fss.c cvs rdiff -u -r1.2 -r1.3 src/sys/rump/dev/lib/libfss/fss_component.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/fss.c diff -u src/sys/dev/fss.c:1.93 src/sys/dev/fss.c:1.94 --- src/sys/dev/fss.c:1.93 Thu Aug 20 14:40:17 2015 +++ src/sys/dev/fss.c Sat Jul 30 22:36:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: fss.c,v 1.93 2015/08/20 14:40:17 christos Exp $ */ +/* $NetBSD: fss.c,v 1.94 2016/07/30 22:36:14 pgoyette Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -36,7 +36,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.93 2015/08/20 14:40:17 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.94 2016/07/30 22:36:14 pgoyette Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1290,10 +1290,11 @@ fss_bs_thread(void *arg) MODULE(MODULE_CLASS_DRIVER, fss, NULL); CFDRIVER_DECL(fss, DV_DISK, NULL); +devmajor_t fss_bmajor = -1, fss_cmajor = -1; + static int fss_modcmd(modcmd_t cmd, void *arg) { - devmajor_t bmajor = -1, cmajor = -1; int error = 0; switch (cmd) { @@ -1311,9 +1312,8 @@ fss_modcmd(modcmd_t cmd, void *arg) break; } error = devsw_attach(fss_cd.cd_name, - &fss_bdevsw, &bmajor, &fss_cdevsw, &cmajor); - if (error == EEXIST) - error = 0; + &fss_bdevsw, &fss_bmajor, &fss_cdevsw, &fss_cmajor); + if (error) { config_cfattach_detach(fss_cd.cd_name, &fss_ca); config_cfdriver_detach(&fss_cd); @@ -1323,11 +1323,14 @@ fss_modcmd(modcmd_t cmd, void *arg) break; case MODULE_CMD_FINI: + devsw_detach(&fss_bdevsw, &fss_cdevsw); error = config_cfattach_detach(fss_cd.cd_name, &fss_ca); - if (error) + if (error) { + devsw_attach(fss_cd.cd_name, &fss_bdevsw, &fss_bmajor, + &fss_cdevsw, &fss_cmajor); break; + } config_cfdriver_detach(&fss_cd); - devsw_detach(&fss_bdevsw, &fss_cdevsw); mutex_destroy(&fss_device_lock); break; Index: src/sys/rump/dev/lib/libfss/fss_component.c diff -u src/sys/rump/dev/lib/libfss/fss_component.c:1.2 src/sys/rump/dev/lib/libfss/fss_component.c:1.3 --- src/sys/rump/dev/lib/libfss/fss_component.c:1.2 Tue Jan 26 23:12:15 2016 +++ src/sys/rump/dev/lib/libfss/fss_component.c Sat Jul 30 22:36:14 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: fss_component.c,v 1.2 2016/01/26 23:12:15 pooka Exp $ */ +/* $NetBSD: fss_component.c,v 1.3 2016/07/30 22:36:14 pgoyette Exp $ */ /* * Copyright (c) 2009 Antti Kantee. All Rights Reserved. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fss_component.c,v 1.2 2016/01/26 23:12:15 pooka Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fss_component.c,v 1.3 2016/07/30 22:36:14 pgoyette Exp $"); #include <sys/param.h> #include <sys/conf.h> @@ -40,20 +40,22 @@ RUMP_COMPONENT(RUMP_COMPONENT_DEV) { extern const struct bdevsw fss_bdevsw; extern const struct cdevsw fss_cdevsw; - devmajor_t bmaj, cmaj; + extern devmajor_t fss_bmaj, fss_cmaj; int error; - bmaj = bdevsw_lookup_major(&fss_bdevsw); - cmaj = cdevsw_lookup_major(&fss_cdevsw); + fss_bmajor = bdevsw_lookup_major(&fss_bdevsw); + fss_cmajor = cdevsw_lookup_major(&fss_cdevsw); - if ((error = devsw_attach("fss", &fss_bdevsw, &bmaj, - &fss_cdevsw, &cmaj)) != 0) + if ((error = devsw_attach("fss", &fss_bdevsw, &fss_bmajor, + &fss_cdevsw, &fss_cmajor)) != 0) panic("cannot attach fss: %d", error); if ((error = rump_vfs_makedevnodes(S_IFBLK, "/dev/fss", '0', - bmaj, 0, 4)) != 0) + fss_bmajor, 0, 4)) != 0) panic("cannot create cooked fss dev nodes: %d", error); if ((error = rump_vfs_makedevnodes(S_IFCHR, "/dev/rfss", '0', - cmaj, 0, 4)) != 0) + fss_cmajor, 0, 4)) != 0) panic("cannot create raw fss dev nodes: %d", error); + + devsw_detach(&fss_bdevsw, &fss_cdevsw); }