proc->thread stage 4: rework the VFS and DEVICE subsystems to take thread
[dragonfly.git] / sys / vfs / ntfs / ntfs_vfsops.c
index 5113a0b..0d65214 100644 (file)
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ntfs/ntfs_vfsops.c,v 1.20.2.5 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.2 2003/06/17 04:28:54 dillon Exp $
+ * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.3 2003/06/25 03:56:07 dillon Exp $
  */
 
 
 #include <sys/param.h>
 #include <sys/systm.h>
-#include <sys/namei.h>
 #include <sys/conf.h>
 #include <sys/proc.h>
+#include <sys/namei.h>
 #include <sys/kernel.h>
 #include <sys/vnode.h>
 #include <sys/mount.h>
@@ -77,38 +77,38 @@ MALLOC_DEFINE(M_NTFSDIR,"NTFS dir",  "NTFS dir buffer");
 
 static int     ntfs_root __P((struct mount *, struct vnode **));
 static int     ntfs_statfs __P((struct mount *, struct statfs *,
-                                struct proc *));
-static int     ntfs_unmount __P((struct mount *, int, struct proc *));
+                                struct thread *));
+static int     ntfs_unmount __P((struct mount *, int, struct thread *));
 static int     ntfs_vget __P((struct mount *mp, ino_t ino,
                               struct vnode **vpp));
 static int     ntfs_mountfs __P((register struct vnode *, struct mount *, 
-                                 struct ntfs_args *, struct proc *));
+                                 struct ntfs_args *, struct thread *));
 static int     ntfs_vptofh __P((struct vnode *, struct fid *));
 static int     ntfs_fhtovp __P((struct mount *, struct fid *,
                                 struct vnode **));
 
 #if !defined (__FreeBSD__)
 static int     ntfs_quotactl __P((struct mount *, int, uid_t, caddr_t,
-                                  struct proc *));
-static int     ntfs_start __P((struct mount *, int, struct proc *));
+                                  struct thread *));
+static int     ntfs_start __P((struct mount *, int, struct thread *));
 static int     ntfs_sync __P((struct mount *, int, struct ucred *,
-                              struct proc *));
+                              struct thread *));
 #endif
 
 #if defined(__FreeBSD__)
 struct sockaddr;
 static int     ntfs_mount __P((struct mount *, char *, caddr_t,
-                               struct nameidata *, struct proc *));
+                               struct nameidata *, struct thread *));
 static int     ntfs_init __P((struct vfsconf *));
 static int     ntfs_checkexp __P((struct mount *, struct sockaddr *,
                                   int *, struct ucred **));
 #elif defined(__NetBSD__)
 static int     ntfs_mount __P((struct mount *, const char *, void *,
-                               struct nameidata *, struct proc *));
+                               struct nameidata *, struct thread *));
 static void    ntfs_init __P((void));
 static int     ntfs_mountroot __P((void));
 static int     ntfs_sysctl __P((int *, u_int, void *, size_t *, void *,
-                                size_t, struct proc *));
+                                size_t, struct thread *));
 static int     ntfs_checkexp __P((struct mount *, struct mbuf *,
                                   int *, struct ucred **));
 #endif
@@ -149,14 +149,14 @@ ntfs_checkexp(mp, nam, exflagsp, credanonp)
 #if defined(__NetBSD__)
 /*ARGSUSED*/
 static int
-ntfs_sysctl(name, namelen, oldp, oldlenp, newp, newlen, p)
+ntfs_sysctl(name, namelen, oldp, oldlenp, newp, newlen, td)
        int *name;
        u_int namelen;
        void *oldp;
        size_t *oldlenp;
        void *newp;
        size_t newlen;
-       struct proc *p;
+       struct thread *td;
 {
        return (EINVAL);
 }
@@ -166,7 +166,7 @@ ntfs_mountroot()
 {
        struct mount *mp;
        extern struct vnode *rootvp;
-       struct proc *p = curproc;       /* XXX */
+       struct thread *td = curthread;  /* XXX */
        int error;
        struct ntfs_args args;
 
@@ -189,7 +189,7 @@ ntfs_mountroot()
        args.gid = 0;
        args.mode = 0777;
 
-       if ((error = ntfs_mountfs(rootvp, mp, &args, p)) != 0) {
+       if ((error = ntfs_mountfs(rootvp, mp, &args, td)) != 0) {
                mp->mnt_op->vfs_refcount--;
                vfs_unbusy(mp);
                free(mp, M_MOUNT);
@@ -200,7 +200,7 @@ ntfs_mountroot()
        simple_lock(&mountlist_slock);
        CIRCLEQ_INSERT_TAIL(&mountlist, mp, mnt_list);
        simple_unlock(&mountlist_slock);
-       (void)ntfs_statfs(mp, &mp->mnt_stat, p);
+       (void)ntfs_statfs(mp, &mp->mnt_stat, td);
        vfs_unbusy(mp);
        return (0);
 }
@@ -236,8 +236,8 @@ ntfs_mount (
        void *data,
 #endif
        struct nameidata *ndp,
-       struct proc *p )
-{
+       struct thread *td
+{
        size_t          size;
        int             err = 0;
        struct vnode    *devvp;
@@ -266,7 +266,7 @@ ntfs_mount (
                /*
                 * Attempt mount
                 */
-               if( ( err = ntfs_mountfs(rootvp, mp, &args, p)) != 0) {
+               if( ( err = ntfs_mountfs(rootvp, mp, &args, td)) != 0) {
                        /* fs specific cleanup (if any)*/
                        goto error_1;
                }
@@ -312,7 +312,7 @@ ntfs_mount (
         * Not an update, or updating the name: look up the name
         * and verify that it refers to a sensible block device.
         */
-       NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, args.fspec, p);
+       NDINIT(ndp, LOOKUP, FOLLOW, UIO_USERSPACE, args.fspec, td);
        err = namei(ndp);
        if (err) {
                /* can't get devvp!*/
@@ -385,7 +385,7 @@ ntfs_mount (
                                &size);                         /* real size*/
                bzero( mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
 
-               err = ntfs_mountfs(devvp, mp, &args, p);
+               err = ntfs_mountfs(devvp, mp, &args, td);
        }
        if (err) {
                goto error_2;
@@ -400,7 +400,7 @@ dostatfs:
         *
         * This code is common to root and non-root mounts
         */
-       (void)VFS_STATFS(mp, &mp->mnt_stat, p);
+       (void)VFS_STATFS(mp, &mp->mnt_stat, td);
 
        goto success;
 
@@ -420,17 +420,21 @@ success:
  * Common code for mount and mountroot
  */
 int
-ntfs_mountfs(devvp, mp, argsp, p)
+ntfs_mountfs(devvp, mp, argsp, td)
        register struct vnode *devvp;
        struct mount *mp;
        struct ntfs_args *argsp;
-       struct proc *p;
+       struct thread *td;
 {
        struct buf *bp;
        struct ntfsmount *ntmp;
        dev_t dev = devvp->v_rdev;
        int error, ronly, ncount, i;
        struct vnode *vp;
+       struct ucred *cred;
+
+       KKASSERT(td->td_proc);
+       cred = td->td_proc->p_ucred;
 
        /*
         * Disallow multiple mounts of the same device.
@@ -449,19 +453,19 @@ ntfs_mountfs(devvp, mp, argsp, p)
        if (ncount > 1 && devvp != rootvp)
                return (EBUSY);
 #if defined(__FreeBSD__)
-       VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, p);
-       error = vinvalbuf(devvp, V_SAVE, p->p_ucred, p, 0, 0);
-       VOP__UNLOCK(devvp, 0, p);
+       VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, td);
+       error = vinvalbuf(devvp, V_SAVE, cred, td, 0, 0);
+       VOP__UNLOCK(devvp, 0, td);
 #else
-       error = vinvalbuf(devvp, V_SAVE, p->p_ucred, p, 0, 0);
+       error = vinvalbuf(devvp, V_SAVE, cred, td, 0, 0);
 #endif
        if (error)
                return (error);
 
        ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
-       VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, p);
-       error = VOP_OPEN(devvp, ronly ? FREAD : FREAD|FWRITE, FSCRED, p);
-       VOP__UNLOCK(devvp, 0, p);
+       VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, td);
+       error = VOP_OPEN(devvp, ronly ? FREAD : FREAD|FWRITE, FSCRED, td);
+       VOP__UNLOCK(devvp, 0, td);
        if (error)
                return (error);
 
@@ -625,11 +629,11 @@ out:
 
 #if defined __NetBSD__
        /* lock the device vnode before calling VOP_CLOSE() */
-       VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, p);
-       (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, p);
-       VOP__UNLOCK(devvp, 0, p);
+       VN_LOCK(devvp, LK_EXCLUSIVE | LK_RETRY, td);
+       (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, td);
+       VOP__UNLOCK(devvp, 0, td);
 #else
-       (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, p);
+       (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, td);
 #endif
        
        return (error);
@@ -640,7 +644,7 @@ static int
 ntfs_start (
        struct mount *mp,
        int flags,
-       struct proc *p )
+       struct thread *td)
 {
        return (0);
 }
@@ -650,7 +654,7 @@ static int
 ntfs_unmount( 
        struct mount *mp,
        int mntflags,
-       struct proc *p)
+       struct thread *td)
 {
        register struct ntfsmount *ntmp;
        int error, ronly = 0, flags, i;
@@ -690,17 +694,17 @@ ntfs_unmount(
        if (ntmp->ntm_devvp->v_type != VBAD)
                ntmp->ntm_devvp->v_specmountpoint = NULL;
 
-       vinvalbuf(ntmp->ntm_devvp, V_SAVE, NOCRED, p, 0, 0);
+       vinvalbuf(ntmp->ntm_devvp, V_SAVE, NOCRED, td, 0, 0);
 
 #if defined(__NetBSD__)
        /* lock the device vnode before calling VOP_CLOSE() */
        VOP_LOCK(ntmp->ntm_devvp, LK_EXCLUSIVE | LK_RETRY);
        error = VOP_CLOSE(ntmp->ntm_devvp, ronly ? FREAD : FREAD|FWRITE,
-               NOCRED, p);
-       VOP__UNLOCK(ntmp->ntm_devvp, 0, p);
+               NOCRED, td);
+       VOP__UNLOCK(ntmp->ntm_devvp, 0, td);
 #else
        error = VOP_CLOSE(ntmp->ntm_devvp, ronly ? FREAD : FREAD|FWRITE,
-               NOCRED, p);
+               NOCRED, td);
 #endif
 
        vrele(ntmp->ntm_devvp);
@@ -745,7 +749,7 @@ ntfs_quotactl (
        int cmds,
        uid_t uid,
        caddr_t arg,
-       struct proc *p)
+       struct thread *td)
 {
        printf("\nntfs_quotactl():\n");
        return EOPNOTSUPP;
@@ -788,7 +792,7 @@ static int
 ntfs_statfs(
        struct mount *mp,
        struct statfs *sbp,
-       struct proc *p)
+       struct thread *td)
 {
        struct ntfsmount *ntmp = VFSTONTFS(mp);
        u_int64_t mftsize,mftallocated;
@@ -832,7 +836,7 @@ ntfs_sync (
        struct mount *mp,
        int waitfor,
        struct ucred *cred,
-       struct proc *p)
+       struct thread *td)
 {
        /*dprintf(("ntfs_sync():\n"));*/
        return (0);
@@ -889,7 +893,7 @@ ntfs_vgetex(
        char *attrname,
        u_long lkflags,
        u_long flags,
-       struct proc *p,
+       struct thread *td,
        struct vnode **vpp) 
 {
        int error;
@@ -954,7 +958,7 @@ ntfs_vgetex(
        }
 
        if (FTOV(fp)) {
-               VGET(FTOV(fp), lkflags, p);
+               VGET(FTOV(fp), lkflags, td);
                *vpp = FTOV(fp);
                ntfs_ntput(ip);
                return (0);
@@ -981,7 +985,7 @@ ntfs_vgetex(
        ntfs_ntput(ip);
 
        if (lkflags & LK_TYPE_MASK) {
-               error = VN_LOCK(vp, lkflags, p);
+               error = VN_LOCK(vp, lkflags, td);
                if (error) {
                        vput(vp);
                        return (error);
@@ -1000,7 +1004,7 @@ ntfs_vget(
        struct vnode **vpp) 
 {
        return ntfs_vgetex(mp, ino, NTFS_A_DATA, NULL,
-                       LK_EXCLUSIVE | LK_RETRY, 0, curproc, vpp);
+                       LK_EXCLUSIVE | LK_RETRY, 0, curthread, vpp);
 }
 
 #if defined(__FreeBSD__)