summaryrefslogtreecommitdiffstats
path: root/sys/dev/md/md.c
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
committerjulian <julian@FreeBSD.org>2001-09-12 08:38:13 +0000
commit5596676e6c6c1e81e899cd0531f9b1c28a292669 (patch)
treeb1a19fcdf05759281fab0d89efb13f0fdf42102e /sys/dev/md/md.c
parent83e00d4274950d2b531c24692cd123538ffbddb9 (diff)
downloadFreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.zip
FreeBSD-src-5596676e6c6c1e81e899cd0531f9b1c28a292669.tar.gz
KSE Milestone 2
Note ALL MODULES MUST BE RECOMPILED make the kernel aware that there are smaller units of scheduling than the process. (but only allow one thread per process at this time). This is functionally equivalent to teh previousl -current except that there is a thread associated with each process. Sorry john! (your next MFC will be a doosie!) Reviewed by: peter@freebsd.org, dillon@freebsd.org X-MFC after: ha ha ha ha
Diffstat (limited to 'sys/dev/md/md.c')
-rw-r--r--sys/dev/md/md.c71
1 files changed, 36 insertions, 35 deletions
diff --git a/sys/dev/md/md.c b/sys/dev/md/md.c
index 3f16777..9666ef3 100644
--- a/sys/dev/md/md.c
+++ b/sys/dev/md/md.c
@@ -180,14 +180,14 @@ struct md_s {
};
static int
-mdopen(dev_t dev, int flag, int fmt, struct proc *p)
+mdopen(dev_t dev, int flag, int fmt, struct thread *td)
{
struct md_s *sc;
struct disklabel *dl;
if (md_debug)
printf("mdopen(%s %x %x %p)\n",
- devtoname(dev), flag, fmt, p);
+ devtoname(dev), flag, fmt, td->td_proc);
sc = dev->si_drv1;
@@ -204,7 +204,7 @@ mdopen(dev_t dev, int flag, int fmt, struct proc *p)
}
static int
-mdclose(dev_t dev, int flags, int fmt, struct proc *p)
+mdclose(dev_t dev, int flags, int fmt, struct thread *td)
{
struct md_s *sc = dev->si_drv1;
@@ -213,12 +213,12 @@ mdclose(dev_t dev, int flags, int fmt, struct proc *p)
}
static int
-mdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
+mdioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
{
if (md_debug)
printf("mdioctl(%s %lx %p %x %p)\n",
- devtoname(dev), cmd, addr, flags, p);
+ devtoname(dev), cmd, addr, flags, td);
return (ENOIOCTL);
}
@@ -385,19 +385,19 @@ mdstart_vnode(struct md_s *sc)
else
auio.uio_rw = UIO_WRITE;
auio.uio_resid = bp->bio_bcount;
- auio.uio_procp = curproc;
+ auio.uio_td = curthread;
if (VOP_ISLOCKED(sc->vnode, NULL))
vprint("unexpected md driver lock", sc->vnode);
if (bp->bio_cmd == BIO_READ) {
- vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curproc);
+ vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curthread);
error = VOP_READ(sc->vnode, &auio, 0, sc->cred);
} else {
(void) vn_start_write(sc->vnode, &mp, V_WAIT);
- vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curproc);
+ vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curthread);
error = VOP_WRITE(sc->vnode, &auio, 0, sc->cred);
vn_finished_write(mp);
}
- VOP_UNLOCK(sc->vnode, 0, curproc);
+ VOP_UNLOCK(sc->vnode, 0, curthread);
bp->bio_resid = auio.uio_resid;
biofinish(bp, &sc->stats, error);
}
@@ -633,17 +633,18 @@ mdsetcred(struct md_s *sc, struct ucred *cred)
auio.uio_rw = UIO_READ;
auio.uio_segflg = UIO_SYSSPACE;
auio.uio_resid = aiov.iov_len;
- vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curproc);
+ vn_lock(sc->vnode, LK_EXCLUSIVE | LK_RETRY, curthread);
error = VOP_READ(sc->vnode, &auio, 0, sc->cred);
- VOP_UNLOCK(sc->vnode, 0, curproc);
+ VOP_UNLOCK(sc->vnode, 0, curthread);
free(tmpbuf, M_TEMP);
}
return (error);
}
static int
-mdcreate_vnode(struct md_ioctl *mdio, struct proc *p)
+mdcreate_vnode(struct md_ioctl *mdio, struct thread *td)
{
+ struct proc *p = td->td_proc;
struct md_s *sc;
struct vattr vattr;
struct nameidata nd;
@@ -662,26 +663,26 @@ mdcreate_vnode(struct md_ioctl *mdio, struct proc *p)
sc->flags = mdio->md_options & MD_FORCE;
flags = FREAD|FWRITE;
- NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, p);
+ NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, td);
error = vn_open(&nd, &flags, 0);
if (error) {
if (error != EACCES && error != EPERM && error != EROFS)
return (error);
flags &= ~FWRITE;
sc->flags |= MD_READONLY;
- NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, p);
+ NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, mdio->md_file, td);
error = vn_open(&nd, &flags, 0);
if (error)
return (error);
}
NDFREE(&nd, NDF_ONLY_PNBUF);
if (nd.ni_vp->v_type != VREG ||
- (error = VOP_GETATTR(nd.ni_vp, &vattr, p->p_ucred, p))) {
- VOP_UNLOCK(nd.ni_vp, 0, p);
- (void) vn_close(nd.ni_vp, flags, p->p_ucred, p);
+ (error = VOP_GETATTR(nd.ni_vp, &vattr, p->p_ucred, td))) {
+ VOP_UNLOCK(nd.ni_vp, 0, td);
+ (void) vn_close(nd.ni_vp, flags, p->p_ucred, td);
return (error ? error : EINVAL);
}
- VOP_UNLOCK(nd.ni_vp, 0, p);
+ VOP_UNLOCK(nd.ni_vp, 0, td);
sc->secsize = DEV_BSIZE;
sc->vnode = nd.ni_vp;
@@ -693,12 +694,12 @@ mdcreate_vnode(struct md_ioctl *mdio, struct proc *p)
else
sc->nsect = vattr.va_size / sc->secsize; /* XXX: round up ? */
if (sc->nsect == 0) {
- (void) vn_close(nd.ni_vp, flags, p->p_ucred, p);
+ (void) vn_close(nd.ni_vp, flags, p->p_ucred, td);
return (EINVAL);
}
error = mdsetcred(sc, p->p_ucred);
if (error) {
- (void) vn_close(nd.ni_vp, flags, p->p_ucred, p);
+ (void) vn_close(nd.ni_vp, flags, p->p_ucred, td);
return (error);
}
mdinit(sc);
@@ -706,7 +707,7 @@ mdcreate_vnode(struct md_ioctl *mdio, struct proc *p)
}
static int
-mddestroy(struct md_s *sc, struct proc *p)
+mddestroy(struct md_s *sc, struct thread *td)
{
unsigned u;
@@ -718,7 +719,7 @@ mddestroy(struct md_s *sc, struct proc *p)
}
if (sc->vnode != NULL)
(void)vn_close(sc->vnode, sc->flags & MD_READONLY ?
- FREAD : (FREAD|FWRITE), sc->cred, p);
+ FREAD : (FREAD|FWRITE), sc->cred, td);
if (sc->cred != NULL)
crfree(sc->cred);
if (sc->object != NULL) {
@@ -739,7 +740,7 @@ mddestroy(struct md_s *sc, struct proc *p)
}
static int
-mdcreate_swap(struct md_ioctl *mdio, struct proc *p)
+mdcreate_swap(struct md_ioctl *mdio, struct thread *td)
{
int error;
struct md_s *sc;
@@ -763,7 +764,7 @@ mdcreate_swap(struct md_ioctl *mdio, struct proc *p)
*/
if (mdio->md_size == 0) {
- mddestroy(sc, p);
+ mddestroy(sc, td);
return (EDOM);
}
@@ -784,20 +785,20 @@ mdcreate_swap(struct md_ioctl *mdio, struct proc *p)
if (swap_pager_reserve(sc->object, 0, sc->nsect) < 0) {
vm_pager_deallocate(sc->object);
sc->object = NULL;
- mddestroy(sc, p);
+ mddestroy(sc, td);
return (EDOM);
}
}
- error = mdsetcred(sc, p->p_ucred);
+ error = mdsetcred(sc, td->td_proc->p_ucred);
if (error)
- mddestroy(sc, p);
+ mddestroy(sc, td);
else
mdinit(sc);
return (error);
}
static int
-mddetach(int unit, struct proc *p)
+mddetach(int unit, struct thread *td)
{
struct md_s *sc;
@@ -811,21 +812,21 @@ mddetach(int unit, struct proc *p)
case MD_SWAP:
case MD_MALLOC:
case MD_PRELOAD:
- return (mddestroy(sc, p));
+ return (mddestroy(sc, td));
default:
return (EOPNOTSUPP);
}
}
static int
-mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
+mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct thread *td)
{
struct md_ioctl *mdio;
struct md_s *sc;
if (md_debug)
printf("mdctlioctl(%s %lx %p %x %p)\n",
- devtoname(dev), cmd, addr, flags, p);
+ devtoname(dev), cmd, addr, flags, td);
mdio = (struct md_ioctl *)addr;
switch (cmd) {
@@ -836,9 +837,9 @@ mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
case MD_PRELOAD:
return (mdcreate_preload(mdio));
case MD_VNODE:
- return (mdcreate_vnode(mdio, p));
+ return (mdcreate_vnode(mdio, td));
case MD_SWAP:
- return (mdcreate_swap(mdio, p));
+ return (mdcreate_swap(mdio, td));
default:
return (EINVAL);
}
@@ -846,7 +847,7 @@ mdctlioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p)
if (mdio->md_file != NULL || mdio->md_size != 0 ||
mdio->md_options != 0)
return (EINVAL);
- return (mddetach(mdio->md_unit, p));
+ return (mddetach(mdio->md_unit, td));
case MDIOCQUERY:
sc = mdfind(mdio->md_unit);
if (sc == NULL)
@@ -941,7 +942,7 @@ md_modevent(module_t mod, int type, void *data)
break;
case MOD_UNLOAD:
LIST_FOREACH(sc, &md_softc_list, list) {
- error = mddetach(sc->unit, curproc);
+ error = mddetach(sc->unit, curthread);
if (error != 0)
return (error);
}
OpenPOWER on IntegriCloud