proc->thread stage 4: rework the VFS and DEVICE subsystems to take thread
[dragonfly.git] / sys / vfs / smbfs / smbfs_io.c
index 2aa234b..58e7626 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/smbfs/smbfs_io.c,v 1.3.2.3 2003/01/17 08:20:26 tjr Exp $
- * $DragonFly: src/sys/vfs/smbfs/smbfs_io.c,v 1.2 2003/06/17 04:28:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/smbfs/smbfs_io.c,v 1.3 2003/06/25 03:55:52 dillon Exp $
  *
  */
 #include <sys/param.h>
@@ -93,7 +93,7 @@ smbfs_readvdir(struct vnode *vp, struct uio *uio, struct ucred *cred)
 
        np = VTOSMB(vp);
        SMBVDEBUG("dirname='%s'\n", np->n_name);
-       smb_makescred(&scred, uio->uio_procp, cred);
+       smb_makescred(&scred, uio->uio_td, cred);
        offset = uio->uio_offset / DE_SIZE;     /* offset in the directory */
        limit = uio->uio_resid / DE_SIZE;
        if (uio->uio_resid < DE_SIZE || uio->uio_offset < 0)
@@ -180,9 +180,9 @@ smbfs_readvdir(struct vnode *vp, struct uio *uio, struct ucred *cred)
 int
 smbfs_readvnode(struct vnode *vp, struct uio *uiop, struct ucred *cred)
 {
+       struct thread *td;
        struct smbmount *smp = VFSTOSMBFS(vp->v_mount);
        struct smbnode *np = VTOSMB(vp);
-       struct proc *p;
        struct vattr vattr;
        struct smb_cred scred;
        int error, lks;
@@ -203,36 +203,36 @@ smbfs_readvnode(struct vnode *vp, struct uio *uiop, struct ucred *cred)
                return EINVAL;
 /*     if (uiop->uio_offset + uiop->uio_resid > smp->nm_maxfilesize)
                return EFBIG;*/
-       p = uiop->uio_procp;
+       td = uiop->uio_td;
        if (vp->v_type == VDIR) {
-               lks = LK_EXCLUSIVE;/*lockstatus(&vp->v_lock, p);*/
+               lks = LK_EXCLUSIVE;/*lockstatus(&vp->v_lock, td);*/
                if (lks == LK_SHARED)
-                       vn_lock(vp, LK_UPGRADE | LK_RETRY, p);
+                       vn_lock(vp, LK_UPGRADE | LK_RETRY, td);
                error = smbfs_readvdir(vp, uiop, cred);
                if (lks == LK_SHARED)
-                       vn_lock(vp, LK_DOWNGRADE | LK_RETRY, p);
+                       vn_lock(vp, LK_DOWNGRADE | LK_RETRY, td);
                return error;
        }
 
 /*     biosize = SSTOCN(smp->sm_share)->sc_txmax;*/
        if (np->n_flag & NMODIFIED) {
                smbfs_attr_cacheremove(vp);
-               error = VOP_GETATTR(vp, &vattr, cred, p);
+               error = VOP_GETATTR(vp, &vattr, cred, td);
                if (error)
                        return error;
                np->n_mtime.tv_sec = vattr.va_mtime.tv_sec;
        } else {
-               error = VOP_GETATTR(vp, &vattr, cred, p);
+               error = VOP_GETATTR(vp, &vattr, cred, td);
                if (error)
                        return error;
                if (np->n_mtime.tv_sec != vattr.va_mtime.tv_sec) {
-                       error = smbfs_vinvalbuf(vp, V_SAVE, cred, p, 1);
+                       error = smbfs_vinvalbuf(vp, V_SAVE, cred, td, 1);
                        if (error)
                                return error;
                        np->n_mtime.tv_sec = vattr.va_mtime.tv_sec;
                }
        }
-       smb_makescred(&scred, p, cred);
+       smb_makescred(&scred, td, cred);
        return smb_read(smp->sm_share, np->n_fid, uiop, &scred);
 }
 
@@ -240,10 +240,10 @@ int
 smbfs_writevnode(struct vnode *vp, struct uio *uiop,
        struct ucred *cred, int ioflag)
 {
+       struct thread *td;
        struct smbmount *smp = VTOSMBFS(vp);
        struct smbnode *np = VTOSMB(vp);
        struct smb_cred scred;
-       struct proc *p;
        int error = 0;
 
        if (vp->v_type != VREG) {
@@ -255,11 +255,11 @@ smbfs_writevnode(struct vnode *vp, struct uio *uiop,
                return EINVAL;
 /*     if (uiop->uio_offset + uiop->uio_resid > smp->nm_maxfilesize)
                return (EFBIG);*/
-       p = uiop->uio_procp;
+       td = uiop->uio_td;
        if (ioflag & (IO_APPEND | IO_SYNC)) {
                if (np->n_flag & NMODIFIED) {
                        smbfs_attr_cacheremove(vp);
-                       error = smbfs_vinvalbuf(vp, V_SAVE, cred, p, 1);
+                       error = smbfs_vinvalbuf(vp, V_SAVE, cred, td, 1);
                        if (error)
                                return error;
                }
@@ -269,7 +269,7 @@ smbfs_writevnode(struct vnode *vp, struct uio *uiop,
                         * File size can be changed by another client
                         */
                        smbfs_attr_cacheremove(vp);
-                       error = VOP_GETATTR(vp, &vattr, cred, p);
+                       error = VOP_GETATTR(vp, &vattr, cred, td);
                        if (error) return (error);
 #endif
                        uiop->uio_offset = np->n_size;
@@ -277,11 +277,13 @@ smbfs_writevnode(struct vnode *vp, struct uio *uiop,
        }
        if (uiop->uio_resid == 0)
                return 0;
-       if (p && uiop->uio_offset + uiop->uio_resid > p->p_rlimit[RLIMIT_FSIZE].rlim_cur) {
-               psignal(p, SIGXFSZ);
+       if (td->td_proc &&
+           uiop->uio_offset + uiop->uio_resid >
+           td->td_proc->p_rlimit[RLIMIT_FSIZE].rlim_cur) {
+               psignal(td->td_proc, SIGXFSZ);
                return EFBIG;
        }
-       smb_makescred(&scred, p, cred);
+       smb_makescred(&scred, td, cred);
        error = smb_write(smp->sm_share, np->n_fid, uiop, &scred);
        SMBVDEBUG("after: ofs=%d,resid=%d\n",(int)uiop->uio_offset, uiop->uio_resid);
        if (!error) {
@@ -297,7 +299,7 @@ smbfs_writevnode(struct vnode *vp, struct uio *uiop,
  * Do an I/O operation to/from a cache block.
  */
 int
-smbfs_doio(struct buf *bp, struct ucred *cr, struct proc *p)
+smbfs_doio(struct buf *bp, struct ucred *cr, struct thread *td)
 {
        struct vnode *vp = bp->b_vp;
        struct smbmount *smp = VFSTOSMBFS(vp->v_mount);
@@ -310,9 +312,9 @@ smbfs_doio(struct buf *bp, struct ucred *cr, struct proc *p)
        uiop->uio_iov = &io;
        uiop->uio_iovcnt = 1;
        uiop->uio_segflg = UIO_SYSSPACE;
-       uiop->uio_procp = p;
+       uiop->uio_td = td;
 
-       smb_makescred(&scred, p, cr);
+       smb_makescred(&scred, td, cr);
 
        if (bp->b_flags & B_READ) {
            io.iov_len = uiop->uio_resid = bp->b_bcount;
@@ -422,16 +424,17 @@ smbfs_getpages(ap)
        vm_offset_t kva;
        struct buf *bp;
        struct vnode *vp;
-       struct proc *p;
+       struct thread *td = curthread;  /* XXX */
        struct ucred *cred;
        struct smbmount *smp;
        struct smbnode *np;
        struct smb_cred scred;
        vm_page_t *pages;
 
+       KKASSERT(td->td_proc);
+
        vp = ap->a_vp;
-       p = curproc;                            /* XXX */
-       cred = curproc->p_ucred;                /* XXX */
+       cred = td->td_proc->p_ucred;
        np = VTOSMB(vp);
        smp = VFSTOSMBFS(vp->v_mount);
        pages = ap->a_m;
@@ -441,7 +444,7 @@ smbfs_getpages(ap)
                printf("smbfs_getpages: called with non-merged cache vnode??\n");
                return VM_PAGER_ERROR;
        }
-       smb_makescred(&scred, p, cred);
+       smb_makescred(&scred, td, cred);
 
        bp = getpbuf(&smbfs_pbuf_freecnt);
        npages = btoc(count);
@@ -456,7 +459,7 @@ smbfs_getpages(ap)
        uio.uio_resid = count;
        uio.uio_segflg = UIO_SYSSPACE;
        uio.uio_rw = UIO_READ;
-       uio.uio_procp = p;
+       uio.uio_td = td;
 
        error = smb_read(smp->sm_share, np->n_fid, &uio, &scred);
        pmap_qremove(kva, npages);
@@ -536,16 +539,16 @@ smbfs_putpages(ap)
 {
        int error;
        struct vnode *vp = ap->a_vp;
-       struct proc *p;
+       struct thread *td = curthread;  /* XXX */
        struct ucred *cred;
 
 #ifdef SMBFS_RWGENERIC
-       p = curproc;                    /* XXX */
-       cred = p->p_ucred;              /* XXX */
-       VOP_OPEN(vp, FWRITE, cred, p);
+       KKASSERT(td->td_proc);
+       cred = td->td_proc->p_ucred;
+       VOP_OPEN(vp, FWRITE, cred, td);
        error = vnode_pager_generic_putpages(ap->a_vp, ap->a_m, ap->a_count,
                ap->a_sync, ap->a_rtvals);
-       VOP_CLOSE(vp, FWRITE, cred, p);
+       VOP_CLOSE(vp, FWRITE, cred, td);
        return error;
 #else
        struct uio uio;
@@ -559,9 +562,9 @@ smbfs_putpages(ap)
        struct smb_cred scred;
        vm_page_t *pages;
 
-       p = curproc;                    /* XXX */
-       cred = p->p_ucred;              /* XXX */
-/*     VOP_OPEN(vp, FWRITE, cred, p);*/
+       KKASSERT(td->td_proc);
+       cred = td->td_proc->p_ucred;
+/*     VOP_OPEN(vp, FWRITE, cred, td);*/
        np = VTOSMB(vp);
        smp = VFSTOSMBFS(vp->v_mount);
        pages = ap->a_m;
@@ -585,12 +588,12 @@ smbfs_putpages(ap)
        uio.uio_resid = count;
        uio.uio_segflg = UIO_SYSSPACE;
        uio.uio_rw = UIO_WRITE;
-       uio.uio_procp = p;
+       uio.uio_td = td;
        SMBVDEBUG("ofs=%d,resid=%d\n",(int)uio.uio_offset, uio.uio_resid);
 
-       smb_makescred(&scred, p, cred);
+       smb_makescred(&scred, td, cred);
        error = smb_write(smp->sm_share, np->n_fid, &uio, &scred);
-/*     VOP_CLOSE(vp, FWRITE, cred, p);*/
+/*     VOP_CLOSE(vp, FWRITE, cred, td);*/
        SMBVDEBUG("paged write done: %d\n", error);
 
        pmap_qremove(kva, npages);
@@ -612,11 +615,11 @@ smbfs_putpages(ap)
  * doing the flush, just wait for completion.
  */
 int
-smbfs_vinvalbuf(vp, flags, cred, p, intrflg)
+smbfs_vinvalbuf(vp, flags, cred, td, intrflg)
        struct vnode *vp;
        int flags;
        struct ucred *cred;
-       struct proc *p;
+       struct thread *td;
        int intrflg;
 {
        struct smbnode *np = VTOSMB(vp);
@@ -634,12 +637,12 @@ smbfs_vinvalbuf(vp, flags, cred, p, intrflg)
        while (np->n_flag & NFLUSHINPROG) {
                np->n_flag |= NFLUSHWANT;
                error = tsleep((caddr_t)&np->n_flag, PRIBIO + 2, "smfsvinv", slptimeo);
-               error = smb_proc_intr(p);
+               error = smb_proc_intr(td);
                if (error == EINTR && intrflg)
                        return EINTR;
        }
        np->n_flag |= NFLUSHINPROG;
-       error = vinvalbuf(vp, flags, cred, p, slpflag, 0);
+       error = vinvalbuf(vp, flags, cred, td, slpflag, 0);
        while (error) {
                if (intrflg && (error == ERESTART || error == EINTR)) {
                        np->n_flag &= ~NFLUSHINPROG;
@@ -649,7 +652,7 @@ smbfs_vinvalbuf(vp, flags, cred, p, intrflg)
                        }
                        return EINTR;
                }
-               error = vinvalbuf(vp, flags, cred, p, slpflag, 0);
+               error = vinvalbuf(vp, flags, cred, td, slpflag, 0);
        }
        np->n_flag &= ~(NMODIFIED | NFLUSHINPROG);
        if (np->n_flag & NFLUSHWANT) {