Module Name: src Committed By: pgoyette Date: Sun Jul 31 01:36:49 UTC 2016
Modified Files: src/sys/dev [pgoyette-localcount]: fss.c src/sys/rump/dev/lib/libfss [pgoyette-localcount]: fss_component.c Log Message: When initializing the rump component, detach the [bc]devsw after using the devmajors to create the device nodes. Normal module initialization will reattach them. XXX This code sequence is fairly common, and probably should be XXX extracted into a separate routine and/or macro. But there's XXX a lot of variables/parameters involved... To generate a diff of this commit: cvs rdiff -u -r1.93.2.5 -r1.93.2.6 src/sys/dev/fss.c cvs rdiff -u -r1.2 -r1.2.2.1 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.2.5 src/sys/dev/fss.c:1.93.2.6 --- src/sys/dev/fss.c:1.93.2.5 Wed Jul 27 03:25:00 2016 +++ src/sys/dev/fss.c Sun Jul 31 01:36:49 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: fss.c,v 1.93.2.5 2016/07/27 03:25:00 pgoyette Exp $ */ +/* $NetBSD: fss.c,v 1.93.2.6 2016/07/31 01:36:49 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.2.5 2016/07/27 03:25:00 pgoyette Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.93.2.6 2016/07/31 01:36:49 pgoyette Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1321,10 +1321,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) { @@ -1342,9 +1343,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); @@ -1354,11 +1354,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.2.2.1 --- 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 Sun Jul 31 01:36:49 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.2.2.1 2016/07/31 01:36:49 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.2.2.1 2016/07/31 01:36:49 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_bmajor, fss_cmajor; 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); }