Index: geom_subr.c =================================================================== RCS file: /usr/repo/src/sys/geom/geom_subr.c,v retrieving revision 1.87 diff -u -p -r1.87 geom_subr.c --- geom_subr.c 26 Mar 2005 21:07:35 -0000 1.87 +++ geom_subr.c 5 Apr 2005 12:54:35 -0000 @@ -712,19 +712,29 @@ g_access(struct g_consumer *cp, int dcr, pp->acr, pp->acw, pp->ace, pp, pp->name); - /* If foot-shooting is enabled, any open on rank#1 is OK */ - if ((g_debugflags & 16) && pp->geom->rank == 1) - ; + error = 0; /* If we try exclusive but already write: fail */ - else if (dce > 0 && pw > 0) - return (EPERM); + if (dce > 0 && pw > 0) + error = EPERM; /* If we try write but already exclusive: fail */ else if (dcw > 0 && pe > 0) - return (EPERM); + error = EPERM; /* If we try to open more but provider is error'ed: fail */ else if ((dcr > 0 || dcw > 0 || dce > 0) && pp->error != 0) return (pp->error); + if (error == EPERM && pp->geom->rank == 1) { + /* If foot-shooting is enabled, any open on rank#1 is OK */ + if (g_debugflags & 16) + error = 0; + else { + printf("You must set kern.geom.debugflags to 16 to " + "write to %s.\n", pp->name); + } + } + if (error != 0) + return (error); + /* Ok then... */ error = pp->geom->access(pp, dcr, dcw, dce);