diff options
| author | Julian Elischer <julian@FreeBSD.org> | 1998-04-22 10:25:27 +0000 |
|---|---|---|
| committer | Julian Elischer <julian@FreeBSD.org> | 1998-04-22 10:25:27 +0000 |
| commit | 26d3bf5f1b814330645875e5e81c6d592440ce5c (patch) | |
| tree | 33b1fdaece595345f8c28fee655bf5e2b5dbcdd5 /sys/dev/slice | |
| parent | 4bc57bd94fe51a48b410125e08be681446ccebc8 (diff) | |
Notes
Diffstat (limited to 'sys/dev/slice')
| -rw-r--r-- | sys/dev/slice/disklabel.c | 8 | ||||
| -rw-r--r-- | sys/dev/slice/mbr.c | 8 | ||||
| -rw-r--r-- | sys/dev/slice/slice_base.c | 30 | ||||
| -rw-r--r-- | sys/dev/slice/slice_device.c | 34 |
4 files changed, 49 insertions, 31 deletions
diff --git a/sys/dev/slice/disklabel.c b/sys/dev/slice/disklabel.c index cb2119b2f1894..513d11fb2f55b 100644 --- a/sys/dev/slice/disklabel.c +++ b/sys/dev/slice/disklabel.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: $ + * $Id: disklabel.c,v 1.1 1998/04/19 23:31:03 julian Exp $ */ @@ -63,7 +63,7 @@ static sl_h_constructor_t dkl_constructor; /* constructor (from device) */ static sl_h_IO_req_t dkl_IOreq; /* IO req downward (to device) */ static sl_h_ioctl_t dkl_ioctl; /* ioctl req downward (to device) */ static sl_h_open_t dkl_open; /* downwards travelling open */ -static sl_h_close_t dkl_close; /* downwards travelling close */ +/*static sl_h_close_t dkl_close; */ /* downwards travelling close */ static sl_h_claim_t dkl_claim; /* upwards travelling claim */ static sl_h_revoke_t dkl_revoke;/* upwards travelling revokation */ static sl_h_verify_t dkl_verify;/* things changed, are we stil valid? */ @@ -78,7 +78,7 @@ static struct slice_handler slicetype = { &dkl_IOreq, &dkl_ioctl, &dkl_open, - &dkl_close, + /*&dkl_close*/NULL, &dkl_revoke, /* revoke */ &dkl_claim, /* claim */ &dkl_verify, /* verify */ @@ -658,6 +658,7 @@ RR; return (0); } +#if 0 static void dkl_close(void *private, int flags, int mode, struct proc * p) { @@ -701,6 +702,7 @@ RR; pd->savedoflags = newoflags; return ; } +#endif /* 0 */ static int dkl_ioctl(void *private, int cmd, caddr_t addr, int flag, struct proc * p) diff --git a/sys/dev/slice/mbr.c b/sys/dev/slice/mbr.c index 7babfc9bb9493..29e8b01142641 100644 --- a/sys/dev/slice/mbr.c +++ b/sys/dev/slice/mbr.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: $ + * $Id: mbr.c,v 1.1 1998/04/19 23:31:05 julian Exp $ */ #include <sys/param.h> @@ -80,7 +80,7 @@ static sl_h_constructor_t mbr_constructor; /* constructor (from device) */ static sl_h_IO_req_t mbr_IOreq; /* IO req downward (to device) */ static sl_h_ioctl_t mbr_ioctl; /* ioctl req downward (to device) */ static sl_h_open_t mbr_open; /* downwards travelling open */ -static sl_h_close_t mbr_close; /* downwards travelling close */ +/*static sl_h_close_t mbr_close; */ /* downwards travelling close */ static sl_h_claim_t mbr_claim; /* upwards travelling claim */ static sl_h_revoke_t mbr_revoke;/* upwards travelling revokation */ static sl_h_verify_t mbr_verify;/* things changed, are we stil valid? */ @@ -95,7 +95,7 @@ static struct slice_handler slicetype = { &mbr_IOreq, &mbr_ioctl, &mbr_open, - &mbr_close, + /*&mbr_close*/NULL, &mbr_revoke, /* revoke */ &mbr_claim, /* claim */ &mbr_verify, /* verify */ @@ -761,6 +761,7 @@ RR; return (0); } +#if 0 static void mbr_close(void *private, int flags, int mode, struct proc * p) { @@ -801,6 +802,7 @@ RR; pd->savedoflags = newoflags; return ; } +#endif /* 0 */ static int mbr_ioctl(void *private, int cmd, caddr_t addr, int flag, struct proc * p) diff --git a/sys/dev/slice/slice_base.c b/sys/dev/slice/slice_base.c index 983de116fbf41..e5f23dee1423e 100644 --- a/sys/dev/slice/slice_base.c +++ b/sys/dev/slice/slice_base.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: slice_base.c,v 1.1 1998/04/19 23:31:12 julian Exp $ + * $Id: slice_base.c,v 1.2 1998/04/22 01:51:34 julian Exp $ */ #include <sys/param.h> @@ -575,6 +575,31 @@ sliceopen(struct slice *slice, int flags, int mode, } slice->flags &= ~SLF_OPEN_STATE; slice->flags |= sl_flags; +#if 1 /* it was basically a close */ + if ((slice->flags & SLF_OPEN_STATE) == SLF_CLOSED) { + sh_p tp; + + /* + * If we had an upper handler, ask it to check if it's still + * valid. it may decide to self destruct. + */ + if (slice->handler_up) { + (*slice->handler_up->verify)(slice); + } + /* + * If we don't have an upper handler, check if + * maybe there is now a suitable environment for one. + * We may end up with a different handler + * from what we had above. Maybe we should clear the hint? + * Maybe we should ask the lower one to re-issue the request? + */ + if (slice->handler_up == NULL) { + if ((tp = slice_probeall(slice)) != NULL) { + (*tp->constructor)(slice); + } + } + } +#endif reject: unlockslice(slice); if ((slice->flags & SLF_INVALID) == SLF_INVALID) @@ -583,6 +608,7 @@ reject: return (error); } +#if 0 void sliceclose(struct slice *slice, int flags, int mode, struct proc * p, enum slc_who who) @@ -643,7 +669,7 @@ sliceclose(struct slice *slice, int flags, int mode, sl_unref(slice); return ; } - +#endif /* 0 */ /* * control behaviour of slices WRT sharing: diff --git a/sys/dev/slice/slice_device.c b/sys/dev/slice/slice_device.c index 4b7f86bf74115..783a862f25964 100644 --- a/sys/dev/slice/slice_device.c +++ b/sys/dev/slice/slice_device.c @@ -23,8 +23,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: $ + * $Id: slice_device.c,v 1.1 1998/04/19 23:31:14 julian Exp $ */ +#define DIAGNOSTIC 1 #include <sys/param.h> #include <sys/systm.h> @@ -140,26 +141,7 @@ minor_to_slice(unsigned int minor) return (NULL); } -/* - * Macro to check that the unit number is valid Often this isn't needed as - * once the open() is performed, the unit number is pretty much safe.. The - * exception would be if we implemented devices that could "go away". in - * which case all these routines would be wise to check the number, - * DIAGNOSTIC or not. - */ -#define CHECKUNIT() \ -do { /* the do-while is a safe way to do this grouping */ \ - if (slice == NULL) { \ - printf( __FUNCTION__ ": unit not attached\n", unit); \ - panic ("slice"); \ - } \ -} while (0) -#ifdef DIAGNOSTIC -#define CHECKUNIT_DIAG() CHECKUNIT() -#else /* DIAGNOSTIC */ -#define CHECKUNIT_DIAG() -#endif /* DIAGNOSTIC */ int slcdevioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc * p) @@ -167,7 +149,6 @@ slcdevioctl(dev_t dev, int cmd, caddr_t data, int flag, struct proc * p) sl_p slice = minor_to_slice(minor(dev)); int error = 0; - CHECKUNIT_DIAG(); RR; /* @@ -246,8 +227,15 @@ slcdevclose(dev_t dev, int flags, int mode, struct proc * p) { sl_p slice = minor_to_slice(minor(dev)); RR; - CHECKUNIT_DIAG(); - sliceclose(slice, flags, mode, p, SLW_DEVICE); +#ifdef DIAGNOSTIC + if ((flags & (FWRITE | FREAD)) != 0) { + printf("sliceclose called with non 0 flags\n"); + } +#endif + /* + * Close is just an open for non-read/nonwrite in this context. + */ + sliceopen(slice, 0, mode, p, SLW_DEVICE); return(0); } |
