Remove NQNFS support. The mechanisms are too crude to co-exist with
authorMatthew Dillon <dillon@dragonflybsd.org>
Mon, 27 Mar 2006 16:19:00 +0000 (16:19 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Mon, 27 Mar 2006 16:19:00 +0000 (16:19 +0000)
upcoming cache coherency management work and the original implementation
hacked up the NFS code pretty severely.

Move nqnfs_clientd() out of nfs_nqlease.c to a new file, nfs_kerb.c,
and rename it nfs_clientd().

39 files changed:
sbin/mount_nfs/mount_nfs.8
sbin/mount_nfs/mount_nfs.c
sys/conf/files
sys/kern/kern_acct.c
sys/kern/kern_acl.c
sys/kern/kern_ktrace.c
sys/kern/kern_sig.c
sys/kern/kern_time.c
sys/kern/link_aout.c
sys/kern/vfs_default.c
sys/kern/vfs_lock.c
sys/kern/vfs_syscalls.c
sys/kern/vfs_vnops.c
sys/kern/vfs_vopops.c
sys/sys/vfsops.h
sys/sys/vnode.h
sys/vfs/coda/coda_vnops.c
sys/vfs/fifofs/fifo_vnops.c
sys/vfs/nfs/Makefile
sys/vfs/nfs/nfs.h
sys/vfs/nfs/nfs_bio.c
sys/vfs/nfs/nfs_kerb.c [new file with mode: 0644]
sys/vfs/nfs/nfs_node.c
sys/vfs/nfs/nfs_nqlease.c [deleted file]
sys/vfs/nfs/nfs_serv.c
sys/vfs/nfs/nfs_socket.c
sys/vfs/nfs/nfs_srvcache.c
sys/vfs/nfs/nfs_subs.c
sys/vfs/nfs/nfs_syscalls.c
sys/vfs/nfs/nfs_vfsops.c
sys/vfs/nfs/nfs_vnops.c
sys/vfs/nfs/nfsm_subs.h
sys/vfs/nfs/nfsmount.h
sys/vfs/nfs/nfsnode.h
sys/vfs/nfs/nqnfs.h [deleted file]
sys/vfs/specfs/spec_vnops.c
sys/vfs/union/union_subr.c
sys/vfs/union/union_vnops.c
usr.sbin/pstat/pstat.c

index 6ed4c36..a46323b 100644 (file)
@@ -32,7 +32,7 @@
 .\"    @(#)mount_nfs.8 8.3 (Berkeley) 3/29/95
 .\"
 .\" $FreeBSD: src/sbin/mount_nfs/mount_nfs.8,v 1.18.2.10 2003/05/13 14:45:40 trhodes Exp $
-.\" $DragonFly: src/sbin/mount_nfs/mount_nfs.8,v 1.4 2006/02/28 02:25:10 swildner Exp $
+.\" $DragonFly: src/sbin/mount_nfs/mount_nfs.8,v 1.5 2006/03/27 16:18:13 dillon Exp $
 .\""
 .Dd March 29, 1995
 .Dt MOUNT_NFS 8
 .Nd mount nfs file systems
 .Sh SYNOPSIS
 .Nm
-.Op Fl 23KNPTUbcdilqs
+.Op Fl 23KNPTUbcdils
 .Op Fl D Ar deadthresh
 .Op Fl I Ar readdirsize
-.Op Fl L Ar leaseterm
 .Op Fl R Ar retrycnt
 .Op Fl a Ar maxreadahead
 .Op Fl g Ar maxgroups
@@ -103,7 +102,7 @@ gigabytes.
 .It Fl 3
 Use the NFS Version 3 protocol.
 .It Fl D
-Used with NQNFS to set the
+Used to set the
 .Dq "dead server threshold"
 to the specified number of round trip timeout intervals.
 After a
@@ -129,10 +128,6 @@ are provided in the NFS source.
 (Refer to the INTERNET-DRAFT titled
 .%T "Authentication Mechanisms for ONC RPC" ,
 for more information.)
-.It Fl L
-Used with NQNFS to set the lease term to the specified number of seconds.
-Only use this argument for mounts with a large round trip delay.
-Values are normally in the 10-30 second range.
 .It Fl N
 Do
 .Em not
@@ -201,7 +196,7 @@ are delayed due to an unresponsive server will fail with
 when a
 termination signal is posted for the process.
 .It Fl l
-Used with NQNFS and NFSV3 to specify that the \fBReaddirPlus\fR RPC should
+Used with NFSV3 to specify that the \fBReaddirPlus\fR RPC should
 be used.
 This option reduces RPC traffic for cases such as
 .Dq "ls -l" ,
@@ -276,9 +271,6 @@ Same as
 .It resvport
 Same as
 .Fl P .
-.It nqnfs
-Same as
-.Fl q .
 .It soft
 Same as
 .Fl s .
@@ -286,13 +278,6 @@ Same as
 Same as
 .Fl T .
 .El
-.It Fl q
-Use the Not Quite NFS (NQNFS) protocol.
-This experimental protocol is NFS Version 2 with leasing extensions
-similar to those found in NFS Version 3.
-The interoperability of this protocol with other systems is
-very limited and its implementation is not widely used.
-Do not use this option unless you know exactly what you are doing!
 .It Fl r
 Set the read data size to the specified value.
 It should normally be a power of 2 greater than or equal to 1024.
index de2b38d..0c77564 100644 (file)
@@ -36,7 +36,7 @@
  * @(#) Copyright (c) 1992, 1993, 1994 The Regents of the University of California.  All rights reserved.
  * @(#)mount_nfs.c     8.11 (Berkeley) 5/4/95
  * $FreeBSD: src/sbin/mount_nfs/mount_nfs.c,v 1.36.2.6 2003/05/13 14:45:40 trhodes Exp $
- * $DragonFly: src/sbin/mount_nfs/mount_nfs.c,v 1.11 2005/11/06 12:34:21 swildner Exp $
+ * $DragonFly: src/sbin/mount_nfs/mount_nfs.c,v 1.12 2006/03/27 16:18:13 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -51,7 +51,6 @@
 #include <vfs/nfs/rpcv2.h>
 #include <vfs/nfs/nfsproto.h>
 #include <vfs/nfs/nfs.h>
-#include <vfs/nfs/nqnfs.h>
 
 #include <arpa/inet.h>
 
@@ -79,7 +78,7 @@
 #define        ALTF_MNTUDP     0x80
 #define ALTF_RESVPORT  0x100
 #define ALTF_SEQPACKET 0x200
-#define ALTF_NQNFS     0x400
+#define ALTF_UNUSED400 0x400
 #define ALTF_SOFT      0x800
 #define ALTF_TCP       0x1000
 #define ALTF_PORT      0x2000
@@ -105,7 +104,6 @@ struct mntopt mopts[] = {
        { "rdirplus", 0, ALTF_RDIRPLUS, 1 },
        { "mntudp", 0, ALTF_MNTUDP, 1 },
        { "resvport", 0, ALTF_RESVPORT, 1 },
-       { "nqnfs", 0, ALTF_NQNFS, 1 },
        { "soft", 0, ALTF_SOFT, 1 },
        { "tcp", 0, ALTF_TCP, 1 },
        { "port=", 0, ALTF_PORT, 1 },
@@ -133,8 +131,8 @@ struct nfs_args nfsdefargs = {
        NFS_RETRANS,
        NFS_MAXGRPS,
        NFS_DEFRAHEAD,
-       NQ_DEFLEASE,
-       NQ_DEADTHRESH,
+       0,
+       NFS_DEADTHRESH,
        (char *)0,
        /* args version 4 */
        NFS_MINATTRTIMO,
@@ -232,7 +230,6 @@ set_flags(int* altflags, int* nfsflags, int dir)
 #endif
        F(RDIRPLUS);
        F(RESVPORT);
-       F(NQNFS);
        F(SOFT);
        F(ACREGMIN);
        F(ACREGMAX);
@@ -272,7 +269,7 @@ main(int argc, char **argv)
        nfsargs = nfsdefargs;
        nfsargsp = &nfsargs;
        while ((c = getopt(argc, argv,
-           "23a:bcdD:g:I:iKL:lm:No:PqR:r:sTt:w:x:U")) != -1)
+           "23a:bcdD:g:I:iKlm:No:PR:r:sTt:w:x:U")) != -1)
                switch (c) {
                case '2':
                        mountmode = V2;
@@ -326,13 +323,6 @@ main(int argc, char **argv)
                        nfsargsp->flags |= NFSMNT_KERB;
                        break;
 #endif
-               case 'L':
-                       num = strtol(optarg, &p, 10);
-                       if (*p || num < 2)
-                               errx(1, "illegal -L value -- %s", optarg);
-                       nfsargsp->leaseterm = num;
-                       nfsargsp->flags |= NFSMNT_LEASETERM;
-                       break;
                case 'l':
                        nfsargsp->flags |= NFSMNT_RDIRPLUS;
                        break;
@@ -389,10 +379,6 @@ main(int argc, char **argv)
                case 'P':
                        /* obsolete for NFSMNT_RESVPORT, now default */
                        break;
-               case 'q':
-                       mountmode = V3;
-                       nfsargsp->flags |= NFSMNT_NQNFS;
-                       break;
                case 'R':
                        num = strtol(optarg, &p, 10);
                        if (*p || num < 0)
@@ -473,7 +459,7 @@ main(int argc, char **argv)
 
        if (mount(vfc.vfc_name, mntpath, mntflags, nfsargsp))
                err(1, "%s", mntpath);
-       if (nfsargsp->flags & (NFSMNT_NQNFS | NFSMNT_KERB)) {
+       if (nfsargsp->flags & NFSMNT_KERB) {
                if ((opflags & ISBGRND) == 0) {
                        if (daemon(0, 0) != 0)
                                err(1, "daemon");
@@ -992,8 +978,8 @@ static void
 usage(void)
 {
        fprintf(stderr, "%s\n%s\n%s\n%s\n",
-"usage: mount_nfs [-23KNPTUbcdilqs] [-D deadthresh] [-I readdirsize]",
-"                 [-L leaseterm] [-R retrycnt] [-a maxreadahead]",
+"usage: mount_nfs [-23KNPTUbcdils] [-D deadthresh] [-I readdirsize]",
+"                 [-R retrycnt] [-a maxreadahead]",
 "                 [-g maxgroups] [-m realm] [-o options] [-r readsize]",
 "                 [-t timeout] [-w writesize] [-x retrans] rhost:path node");
        exit(1);
index 84d7b00..4d84dfb 100644 (file)
@@ -1,5 +1,5 @@
 # $FreeBSD: src/sys/conf/files,v 1.340.2.137 2003/06/04 17:10:30 sam Exp $
-# $DragonFly: src/sys/conf/files,v 1.114 2005/12/26 13:39:50 sephe Exp $
+# $DragonFly: src/sys/conf/files,v 1.115 2006/03/27 16:18:30 dillon Exp $
 #
 # The long compile-with and dependency lines are required because of
 # limitations in config: backslash-newline doesn't work in strings, and
@@ -975,7 +975,6 @@ netproto/ns/spp_debug.c             optional ns
 netproto/ns/spp_usrreq.c       optional ns
 vfs/nfs/nfs_bio.c              optional nfs
 vfs/nfs/nfs_node.c             optional nfs
-vfs/nfs/nfs_nqlease.c          optional nfs
 vfs/nfs/nfs_serv.c             optional nfs
 vfs/nfs/nfs_socket.c           optional nfs
 vfs/nfs/nfs_srvcache.c         optional nfs
@@ -983,6 +982,7 @@ vfs/nfs/nfs_subs.c          optional nfs
 vfs/nfs/nfs_syscalls.c         optional nfs
 vfs/nfs/nfs_vfsops.c           optional nfs
 vfs/nfs/nfs_vnops.c            optional nfs
+vfs/nfs/nfs_kerb.c             optional nfs
 vfs/nfs/bootp_subr.c           optional bootp
 vfs/nfs/nfs_mountrpc.c         optional nfs
 vfs/nfs/krpc_subr.c            optional nfs
index ac46a2d..2d4d1d6 100644 (file)
@@ -38,7 +38,7 @@
  *
  *     @(#)kern_acct.c 8.1 (Berkeley) 6/14/93
  * $FreeBSD: src/sys/kern/kern_acct.c,v 1.23.2.1 2002/07/24 18:33:55 johan Exp $
- * $DragonFly: src/sys/kern/kern_acct.c,v 1.19 2005/10/08 19:46:50 corecode Exp $
+ * $DragonFly: src/sys/kern/kern_acct.c,v 1.20 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -261,7 +261,6 @@ acct_process(struct proc *p)
        /*
         * Write the accounting information to the file.
         */
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        return (vn_rdwr(UIO_WRITE, vp, (caddr_t)&acct, sizeof (acct),
            (off_t)0, UIO_SYSSPACE, IO_APPEND|IO_UNIT, p->p_ucred,
            (int *)0, td));
index 89acbda..273145c 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/kern/kern_acl.c,v 1.2.2.1 2000/07/28 18:48:16 rwatson Exp $
- * $DragonFly: src/sys/kern/kern_acl.c,v 1.9 2005/03/29 00:35:55 drhodus Exp $
+ * $DragonFly: src/sys/kern/kern_acl.c,v 1.10 2006/03/27 16:18:34 dillon Exp $
  */
 
 /*
@@ -79,7 +79,6 @@ vacl_set_acl(struct vnode *vp, acl_type_t type, struct acl *aclp)
        KKASSERT(td->td_proc);
        ucred = td->td_proc->p_ucred;
 
-       VOP_LEASE(vp, td, ucred, LEASE_WRITE);
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
        error = VOP_SETACL(vp, type, &inkernacl, ucred, td);
        VOP_UNLOCK(vp, 0, td);
@@ -117,7 +116,6 @@ vacl_delete(struct vnode *vp, acl_type_t type)
 
        KKASSERT(td->td_proc);
        ucred = td->td_proc->p_ucred;
-       VOP_LEASE(vp, td, ucred, LEASE_WRITE);
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
        error = VOP_SETACL(vp, ACL_TYPE_DEFAULT, 0, ucred, td);
        VOP_UNLOCK(vp, 0, td);
index 3a0d6c7..3c6dcee 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)kern_ktrace.c       8.2 (Berkeley) 9/23/93
  * $FreeBSD: src/sys/kern/kern_ktrace.c,v 1.35.2.6 2002/07/05 22:36:38 darrenr Exp $
- * $DragonFly: src/sys/kern/kern_ktrace.c,v 1.19 2005/07/28 18:10:23 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_ktrace.c,v 1.20 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include "opt_ktrace.h"
@@ -495,11 +495,9 @@ ktrwrite(struct vnode *vp, struct ktr_header *kth, struct uio *uio)
                if (uio != NULL)
                        kth->ktr_len += uio->uio_resid;
        }
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
        error = VOP_WRITE(vp, &auio, IO_UNIT | IO_APPEND, p->p_ucred);
        if (error == 0 && uio != NULL) {
-               VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
                error = VOP_WRITE(vp, uio, IO_UNIT | IO_APPEND, p->p_ucred);
        }
        VOP_UNLOCK(vp, 0, td);
index 08f8e3e..18adf4e 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_sig.c  8.7 (Berkeley) 4/18/94
  * $FreeBSD: src/sys/kern/kern_sig.c,v 1.72.2.17 2003/05/16 16:34:34 obrien Exp $
- * $DragonFly: src/sys/kern/kern_sig.c,v 1.43 2006/03/09 08:32:42 davidxu Exp $
+ * $DragonFly: src/sys/kern/kern_sig.c,v 1.44 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include "opt_ktrace.h"
@@ -1687,7 +1687,6 @@ coredump(struct proc *p)
        VATTR_NULL(&vattr);
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
        vattr.va_size = 0;
-       VOP_LEASE(vp, td, cred, LEASE_WRITE);
        VOP_SETATTR(vp, &vattr, cred, td);
        p->p_acflag |= ACORE;
        VOP_UNLOCK(vp, 0, td);
index 9f4f843..fd6d995 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)kern_time.c 8.1 (Berkeley) 6/10/93
  * $FreeBSD: src/sys/kern/kern_time.c,v 1.68.2.1 2002/10/01 08:00:41 bde Exp $
- * $DragonFly: src/sys/kern/kern_time.c,v 1.32 2006/03/19 17:53:54 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_time.c,v 1.33 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -70,19 +70,10 @@ static int  nanosleep1 (struct timespec *rqt,
                    struct timespec *rmt);
 static int     settime (struct timeval *);
 static void    timevalfix (struct timeval *);
-static void    no_lease_updatetime (int);
 
 static int     sleep_hard_us = 100;
 SYSCTL_INT(_kern, OID_AUTO, sleep_hard_us, CTLFLAG_RW, &sleep_hard_us, 0, "")
 
-static void 
-no_lease_updatetime(deltat)
-       int deltat;
-{
-}
-
-void (*lease_updatetime) (int)  = no_lease_updatetime;
-
 static int
 settime(tv)
        struct timeval *tv;
@@ -140,7 +131,6 @@ settime(tv)
        ts.tv_sec = tv->tv_sec;
        ts.tv_nsec = tv->tv_usec * 1000;
        set_timeofday(&ts);
-       lease_updatetime(delta.tv_sec);
        crit_exit();
 
        if (origcpu != 0)
index 1e9f3a2..43cf60d 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/kern/link_aout.c,v 1.26 1999/12/24 15:33:36 bde Exp $
- * $DragonFly: src/sys/kern/link_aout.c,v 1.14 2005/04/30 23:04:21 swildner Exp $
+ * $DragonFly: src/sys/kern/link_aout.c,v 1.15 2006/03/27 16:18:34 dillon Exp $
  */
 
 #define FREEBSD_AOUT   1
@@ -250,7 +250,6 @@ link_aout_load_file(const char* filename, linker_file_t* result)
     /*
      * Read the text and data sections and zero the bss.
      */
-    VOP_LEASE(vp, td, p->p_ucred, LEASE_READ);
     error = vn_rdwr(UIO_READ, vp, (void*) af->address,
                    header.a_text + header.a_data, 0,
                    UIO_SYSSPACE, IO_NODELOCKED, p->p_ucred, &resid, td);
index 47137ef..9bfb585 100644 (file)
@@ -37,7 +37,7 @@
  *
  *
  * $FreeBSD: src/sys/kern/vfs_default.c,v 1.28.2.7 2003/01/10 18:23:26 bde Exp $
- * $DragonFly: src/sys/kern/vfs_default.c,v 1.29 2006/02/17 19:18:06 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_default.c,v 1.30 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -84,7 +84,6 @@ static struct vnodeopv_entry_desc default_vnodeop_entries[] = {
        { &vop_getvobject_desc,         (void *) vop_stdgetvobject },
        { &vop_ioctl_desc,              vop_enotty },
        { &vop_islocked_desc,           (void *) vop_stdislocked },
-       { &vop_lease_desc,              vop_null },
        { &vop_lock_desc,               (void *) vop_stdlock },
        { &vop_mmap_desc,               vop_einval },
        { &vop_old_lookup_desc,         (void *) vop_nolookup },
@@ -374,7 +373,6 @@ vop_compat_ncreate(struct vop_ncreate_args *ap)
         */
        if (error == EJUSTRETURN) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_CREATE(dvp, ap->a_vpp, &cnp, ap->a_vap);
                if (error == 0) {
                        cache_setunresolved(ncp);
@@ -457,7 +455,6 @@ vop_compat_nmkdir(struct vop_nmkdir_args *ap)
         */
        if (error == EJUSTRETURN) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_MKDIR(dvp, ap->a_vpp, &cnp, ap->a_vap);
                if (error == 0) {
                        cache_setunresolved(ncp);
@@ -540,7 +537,6 @@ vop_compat_nmknod(struct vop_nmknod_args *ap)
         */
        if (error == EJUSTRETURN) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_MKNOD(dvp, ap->a_vpp, &cnp, ap->a_vap);
                if (error == 0) {
                        cache_setunresolved(ncp);
@@ -622,8 +618,6 @@ vop_compat_nlink(struct vop_nlink_args *ap)
         */
        if (error == EJUSTRETURN) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
-               VOP_LEASE(ap->a_vp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_LINK(dvp, ap->a_vp, &cnp);
                if (error == 0) {
                        cache_setunresolved(ncp);
@@ -696,7 +690,6 @@ vop_compat_nsymlink(struct vop_nsymlink_args *ap)
         */
        if (error == EJUSTRETURN) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_SYMLINK(dvp, &vp, &cnp, ap->a_vap, ap->a_target);
                if (error == 0) {
                        cache_setunresolved(ncp);
@@ -787,7 +780,6 @@ vop_compat_nwhiteout(struct vop_nwhiteout_args *ap)
                error = vop_old_lookup(ap->a_head.a_ops, dvp, &vp, &cnp);
                if (error == EJUSTRETURN) {
                        KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-                       VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
                        error = VOP_OLD_WHITEOUT(dvp, &cnp, ap->a_flags);
                        if (error == 0)
                                cache_setunresolved(ncp);
@@ -870,8 +862,6 @@ vop_compat_nremove(struct vop_nremove_args *ap)
                error = EPERM;
        if (error == 0) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
-               VOP_LEASE(vp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_REMOVE(dvp, vp, &cnp);
                if (error == 0) {
                        cache_setunresolved(ncp);
@@ -950,8 +940,6 @@ vop_compat_nrmdir(struct vop_nrmdir_args *ap)
                error = EBUSY;
        if (error == 0) {
                KKASSERT((cnp.cn_flags & CNP_PDIRUNLOCK) == 0);
-               VOP_LEASE(dvp, td, ap->a_cred, LEASE_WRITE);
-               VOP_LEASE(vp, td, ap->a_cred, LEASE_WRITE);
                error = VOP_OLD_RMDIR(dvp, vp, &cnp);
 
                /*
index 09cfe17..8734763 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/kern/vfs_lock.c,v 1.11 2006/03/27 01:54:15 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_lock.c,v 1.12 2006/03/27 16:18:34 dillon Exp $
  */
 
 /*
@@ -454,8 +454,6 @@ allocvnode(int lktimeout, int lkflags)
         * If we have a vp it will be refd and VX locked.
         */
        if (vp) {
-               vp->v_lease = NULL;
-
 #ifdef INVARIANTS
                if (vp->v_data)
                        panic("cleaned vnode isn't");
index ec199ca..15f0a17 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_syscalls.c      8.13 (Berkeley) 4/15/94
  * $FreeBSD: src/sys/kern/vfs_syscalls.c,v 1.151.2.18 2003/04/04 20:35:58 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.77 2006/03/02 19:07:59 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.78 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -2098,7 +2098,6 @@ setfflags(struct vnode *vp, int flags)
         * note: vget is required for any operation that might mod the vnode
         * so VINACTIVE is properly cleared.
         */
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        if ((error = vget(vp, LK_EXCLUSIVE, td)) == 0) {
                VATTR_NULL(&vattr);
                vattr.va_flags = flags;
@@ -2167,7 +2166,6 @@ setfmode(struct vnode *vp, int mode)
         * note: vget is required for any operation that might mod the vnode
         * so VINACTIVE is properly cleared.
         */
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        if ((error = vget(vp, LK_EXCLUSIVE, td)) == 0) {
                VATTR_NULL(&vattr);
                vattr.va_mode = mode & ALLPERMS;
@@ -2262,7 +2260,6 @@ setfown(struct vnode *vp, uid_t uid, gid_t gid)
         * note: vget is required for any operation that might mod the vnode
         * so VINACTIVE is properly cleared.
         */
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        if ((error = vget(vp, LK_EXCLUSIVE, td)) == 0) {
                VATTR_NULL(&vattr);
                vattr.va_uid = uid;
@@ -2373,7 +2370,6 @@ setutimes(struct vnode *vp, const struct timespec *ts, int nullflag)
         * note: vget is required for any operation that might mod the vnode
         * so VINACTIVE is properly cleared.
         */
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        if ((error = vget(vp, LK_EXCLUSIVE, td)) == 0) {
                VATTR_NULL(&vattr);
                vattr.va_atime = ts[0];
@@ -2508,7 +2504,6 @@ kern_truncate(struct nlookupdata *nd, off_t length)
                return (error);
        if ((error = cache_vref(nd->nl_ncp, nd->nl_cred, &vp)) != 0)
                return (error);
-       VOP_LEASE(vp, nd->nl_td, nd->nl_cred, LEASE_WRITE);
        if ((error = vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, nd->nl_td)) != 0) {
                vrele(vp);
                return (error);
@@ -2560,7 +2555,6 @@ kern_ftruncate(int fd, off_t length)
        if ((fp->f_flag & FWRITE) == 0)
                return (EINVAL);
        vp = (struct vnode *)fp->f_data;
-       VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
        if (vp->v_type == VDIR)
                error = EISDIR;
@@ -3171,7 +3165,6 @@ fhopen(struct fhopen_args *uap)
        }
        if (fmode & O_TRUNC) {
                VOP_UNLOCK(vp, 0, td);                  /* XXX */
-               VOP_LEASE(vp, td, p->p_ucred, LEASE_WRITE);
                vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);       /* XXX */
                VATTR_NULL(vap);
                vap->va_size = 0;
index 1bf9eca..37f8975 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)vfs_vnops.c 8.2 (Berkeley) 1/21/94
  * $FreeBSD: src/sys/kern/vfs_vnops.c,v 1.87.2.13 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_vnops.c,v 1.34 2005/10/27 13:33:19 sephe Exp $
+ * $DragonFly: src/sys/kern/vfs_vnops.c,v 1.35 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -258,7 +258,6 @@ again:
        }
        if (fmode & O_TRUNC) {
                VOP_UNLOCK(vp, 0, td);                  /* XXX */
-               VOP_LEASE(vp, td, cred, LEASE_WRITE);
                vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);       /* XXX */
                VATTR_NULL(vap);
                vap->va_size = 0;
@@ -420,9 +419,6 @@ sequential_heuristic(struct uio *uio, struct file *fp)
 
 /*
  * Package up an I/O request on a vnode into a uio and do it.
- *
- * We are going to assume the caller has done the appropriate
- * VOP_LEASE() call before calling vn_rdwr()
  */
 int
 vn_rdwr(rw, vp, base, len, offset, segflg, ioflg, cred, aresid, td)
@@ -540,7 +536,6 @@ vn_read(fp, uio, cred, flags, td)
                ioflag |= IO_NDELAY;
        if (fp->f_flag & O_DIRECT)
                ioflag |= IO_DIRECT;
-       VOP_LEASE(vp, td, cred, LEASE_READ);
        vn_lock(vp, LK_SHARED | LK_NOPAUSE | LK_RETRY, td);
        if ((flags & FOF_OFFSET) == 0)
                uio->uio_offset = fp->f_offset;
@@ -635,7 +630,6 @@ vn_write(fp, uio, cred, flags, td)
        if ((fp->f_flag & O_FSYNC) ||
            (vp->v_mount && (vp->v_mount->mnt_flag & MNT_SYNCHRONOUS)))
                ioflag |= IO_SYNC;
-       VOP_LEASE(vp, td, cred, LEASE_WRITE);
        vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
        if ((flags & FOF_OFFSET) == 0)
                uio->uio_offset = fp->f_offset;
index 1bc66fe..e2dbb48 100644 (file)
@@ -32,7 +32,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.18 2006/03/24 18:35:33 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.19 2006/03/27 16:18:34 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -224,7 +224,6 @@ VNODEOP_DESC_INIT_VP(getattr);
 VNODEOP_DESC_INIT_VP_CRED(setattr);
 VNODEOP_DESC_INIT_VP_CRED(read);
 VNODEOP_DESC_INIT_VP_CRED(write);
-VNODEOP_DESC_INIT_VP_CRED(lease);
 VNODEOP_DESC_INIT_VP_CRED(ioctl);
 VNODEOP_DESC_INIT_VP_CRED(poll);
 VNODEOP_DESC_INIT_VP(kqfilter);
@@ -531,24 +530,6 @@ vop_write(struct vop_ops *ops, struct vnode *vp, struct uio *uio, int ioflag,
        return(error);
 }
 
-int
-vop_lease(struct vop_ops *ops, struct vnode *vp, struct thread *td,
-       struct ucred *cred, int flag)
-{
-       struct vop_lease_args ap;
-       int error;
-
-       ap.a_head.a_desc = &vop_lease_desc;
-       ap.a_head.a_ops = ops;
-       ap.a_vp = vp;
-       ap.a_td = td;
-       ap.a_cred = cred;
-       ap.a_flag = flag;
-
-       DO_OPS(ops, error, &ap, vop_lease);
-       return(error);
-}
-
 int
 vop_ioctl(struct vop_ops *ops, struct vnode *vp, u_long command, caddr_t data,
        int fflag, struct ucred *cred,
@@ -1647,15 +1628,6 @@ vop_write_ap(struct vop_write_args *ap)
        return(error);
 }
 
-int
-vop_lease_ap(struct vop_lease_args *ap)
-{
-       int error;
-
-       DO_OPS(ap->a_head.a_ops, error, ap, vop_lease);
-       return(error);
-}
-
 int
 vop_ioctl_ap(struct vop_ioctl_args *ap)
 {
index 12405db..22e7241 100644 (file)
@@ -31,7 +31,7 @@
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/sys/vfsops.h,v 1.16 2006/03/24 18:35:33 dillon Exp $
+ * $DragonFly: src/sys/sys/vfsops.h,v 1.17 2006/03/27 16:18:35 dillon Exp $
  */
 
 /*
@@ -179,14 +179,6 @@ struct vop_write_args {
        struct ucred *a_cred;
 };
 
-struct vop_lease_args {
-       struct vop_generic_args a_head;
-       struct vnode *a_vp;
-       struct thread *a_td;
-       struct ucred *a_cred;
-       int a_flag;
-};
-
 struct vop_ioctl_args {
        struct vop_generic_args a_head;
        struct vnode *a_vp;
@@ -600,7 +592,7 @@ struct vop_ops {
        int     (*vop_setattr)(struct vop_setattr_args *);
        int     (*vop_read)(struct vop_read_args *);
        int     (*vop_write)(struct vop_write_args *);
-       int     (*vop_lease)(struct vop_lease_args *);
+       int     (*vop_unused04)(void *);
        int     (*vop_ioctl)(struct vop_ioctl_args *);
        int     (*vop_poll)(struct vop_poll_args *);
        int     (*vop_kqfilter)(struct vop_kqfilter_args *);
@@ -689,7 +681,6 @@ union vop_args_union {
        struct vop_setattr_args vu_setattr;
        struct vop_read_args vu_read;
        struct vop_write_args vu_write;
-       struct vop_lease_args vu_lease;
        struct vop_ioctl_args vu_ioctl;
        struct vop_poll_args vu_poll;
        struct vop_kqfilter_args vu_kqfilter;
@@ -777,8 +768,6 @@ int vop_read(struct vop_ops *ops, struct vnode *vp, struct uio *uio,
                int ioflag, struct ucred *cred);
 int vop_write(struct vop_ops *ops, struct vnode *vp, struct uio *uio,
                int ioflag, struct ucred *cred);
-int vop_lease(struct vop_ops *ops, struct vnode *vp, struct thread *td,
-               struct ucred *cred, int flag);
 int vop_ioctl(struct vop_ops *ops, struct vnode *vp, u_long command,
                caddr_t data, int fflag,
                struct ucred *cred, struct thread *td);
@@ -903,7 +892,6 @@ int vop_getattr_ap(struct vop_getattr_args *ap);
 int vop_setattr_ap(struct vop_setattr_args *ap);
 int vop_read_ap(struct vop_read_args *ap);
 int vop_write_ap(struct vop_write_args *ap);
-int vop_lease_ap(struct vop_lease_args *ap);
 int vop_ioctl_ap(struct vop_ioctl_args *ap);
 int vop_poll_ap(struct vop_poll_args *ap);
 int vop_kqfilter_ap(struct vop_kqfilter_args *ap);
@@ -973,7 +961,6 @@ extern struct vnodeop_desc vop_getattr_desc;
 extern struct vnodeop_desc vop_setattr_desc;
 extern struct vnodeop_desc vop_read_desc;
 extern struct vnodeop_desc vop_write_desc;
-extern struct vnodeop_desc vop_lease_desc;
 extern struct vnodeop_desc vop_ioctl_desc;
 extern struct vnodeop_desc vop_poll_desc;
 extern struct vnodeop_desc vop_kqfilter_desc;
@@ -1047,8 +1034,6 @@ extern struct vnodeop_desc vop_nrename_desc;
        vop_read(*(vp)->v_ops, vp, uio, ioflag, cred)
 #define VOP_WRITE(vp, uio, ioflag, cred)               \
        vop_write(*(vp)->v_ops, vp, uio, ioflag, cred)
-#define VOP_LEASE(vp, td, cred, flag)                  \
-       vop_lease(*(vp)->v_ops, vp, td, cred, flag)
 #define VOP_IOCTL(vp, command, data, fflag, cred, td)  \
        vop_ioctl(*(vp)->v_ops, vp, command, data, fflag, cred, td)
 #define VOP_POLL(vp, events, cred, td)                 \
index 6e8bb7d..938e3d9 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)vnode.h     8.7 (Berkeley) 2/4/94
  * $FreeBSD: src/sys/sys/vnode.h,v 1.111.2.19 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/sys/vnode.h,v 1.43 2006/03/27 01:54:16 dillon Exp $
+ * $DragonFly: src/sys/sys/vnode.h,v 1.44 2006/03/27 16:18:35 dillon Exp $
  */
 
 #ifndef _SYS_VNODE_H_
@@ -188,7 +188,6 @@ struct vnode {
                } vu_spec;
                struct fifoinfo *vu_fifoinfo;   /* fifo (VFIFO) */
        } v_un;
-       struct  nqlease *v_lease;               /* Soft reference to lease */
        off_t   v_filesize;                     /* file EOF or NOOFFSET */
        off_t   v_lazyw;                        /* lazy write iterator */
        off_t   v_lastw;                        /* last write (write cluster) */
@@ -361,15 +360,6 @@ extern     int numvnodes;
 extern int freevnodes;
 extern  int vfs_fastdev;               /* fast specfs device access */
 
-/*
- * Macro/function to check for client cache inconsistency w.r.t. leasing.
- */
-#define        LEASE_READ      0x1             /* Check lease for readers */
-#define        LEASE_WRITE     0x2             /* Check lease for modifiers */
-
-
-extern void    (*lease_updatetime) (int deltat);
-
 #endif /* _KERNEL */
 
 /*
@@ -589,8 +579,6 @@ struct vattr;
 struct vnode;
 struct vop_bwrite_args;
 
-extern int     (*lease_check_hook) (struct vop_lease_args *);
-
 void   addaliasu (struct vnode *vp, udev_t nvp_udev);
 int    v_associate_rdev(struct vnode *vp, dev_t dev);
 void   v_release_rdev(struct vnode *vp);
@@ -601,7 +589,6 @@ int getnewvnode (enum vtagtype tag, struct mount *mp,
 int    getspecialvnode (enum vtagtype tag, struct mount *mp, 
                    struct vop_ops **ops, struct vnode **vpp, int timo, 
                    int lkflags);
-int    lease_check (struct vop_lease_args *ap);
 int    spec_vnoperate (struct vop_generic_args *);
 int    speedup_syncer (void);
 void   vattr_null (struct vattr *vap);
index 44965e6..6207407 100644 (file)
@@ -28,7 +28,7 @@
  * 
  *     @(#) src/sys/coda/coda_vnops.c,v 1.1.1.1 1998/08/29 21:14:52 rvb Exp $
  * $FreeBSD: src/sys/coda/coda_vnops.c,v 1.22.2.1 2001/06/29 16:26:22 shafeeq Exp $
- * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.c,v 1.30 2006/03/24 18:35:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/coda/Attic/coda_vnops.c,v 1.31 2006/03/27 16:18:36 dillon Exp $
  * 
  */
 
@@ -144,7 +144,6 @@ struct vnodeopv_entry_desc coda_vnodeop_entries[] = {
     { &vop_pathconf_desc, (vnodeopv_entry_t)coda_vop_error },  /* pathconf */
     { &vop_advlock_desc, (vnodeopv_entry_t)coda_vop_nop },     /* advlock */
     { &vop_bwrite_desc, (vnodeopv_entry_t)coda_vop_error },    /* bwrite */
-    { &vop_lease_desc, (vnodeopv_entry_t)coda_vop_nop },       /* lease */
     { &vop_poll_desc, (vnodeopv_entry_t)vop_stdpoll },         /* poll */
     { &vop_getpages_desc, (vnodeopv_entry_t)coda_fbsd_getpages }, /* pager intf.*/
     { &vop_putpages_desc, (vnodeopv_entry_t)coda_fbsd_putpages }, /* pager intf.*/
index 1660e15..0c19d08 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)fifo_vnops.c        8.10 (Berkeley) 5/27/95
  * $FreeBSD: src/sys/miscfs/fifofs/fifo_vnops.c,v 1.45.2.4 2003/04/22 10:11:24 bde Exp $
- * $DragonFly: src/sys/vfs/fifofs/fifo_vnops.c,v 1.23 2006/03/24 18:35:33 dillon Exp $
+ * $DragonFly: src/sys/vfs/fifofs/fifo_vnops.c,v 1.24 2006/03/27 16:18:37 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -100,7 +100,6 @@ static struct vnodeopv_entry_desc fifo_vnodeop_entries[] = {
        { &vop_inactive_desc,           (vnodeopv_entry_t) fifo_inactive },
        { &vop_ioctl_desc,              (vnodeopv_entry_t) fifo_ioctl },
        { &vop_kqfilter_desc,           (vnodeopv_entry_t) fifo_kqfilter },
-       { &vop_lease_desc,              (vnodeopv_entry_t) vop_null },
        { &vop_old_link_desc,           (vnodeopv_entry_t) fifo_badop },
        { &vop_old_lookup_desc,         (vnodeopv_entry_t) fifo_lookup },
        { &vop_old_mkdir_desc,          (vnodeopv_entry_t) fifo_badop },
index 58ea12d..9f58101 100644 (file)
@@ -1,8 +1,8 @@
 # $FreeBSD: src/sys/modules/nfs/Makefile,v 1.16 1999/12/12 20:34:06 peter Exp $
-# $DragonFly: src/sys/vfs/nfs/Makefile,v 1.5 2005/09/04 04:06:28 dillon Exp $
+# $DragonFly: src/sys/vfs/nfs/Makefile,v 1.6 2006/03/27 16:18:39 dillon Exp $
 
 KMOD=  nfs
-SRCS=  nfs_bio.c nfs_node.c nfs_nqlease.c nfs_serv.c nfs_socket.c \
+SRCS=  nfs_bio.c nfs_node.c nfs_kerb.c nfs_serv.c nfs_socket.c \
        nfs_srvcache.c nfs_subs.c nfs_syscalls.c nfs_vfsops.c \
        nfs_vnops.c opt_inet.h opt_nfs.h opt_vmpage.h opt_bootp.h \
        opt_nfsroot.h
index fa73d35..01f2a2e 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs.h       8.4 (Berkeley) 5/1/95
  * $FreeBSD: src/sys/nfs/nfs.h,v 1.53.2.5 2002/02/20 01:35:34 iedowse Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs.h,v 1.14 2006/02/21 19:00:19 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs.h,v 1.15 2006/03/27 16:18:39 dillon Exp $
  */
 
 #ifndef _NFS_NFS_H_
 #ifndef NFS_MAXDIRATTRTIMO
 #define        NFS_MAXDIRATTRTIMO 60
 #endif
+#ifndef NFS_DEADTHRESH
+#define NFS_DEADTHRESH NFS_NEVERDEAD
+#endif
+#define NFS_NEVERDEAD  9
 #define        NFS_WSIZE       8192            /* Def. write data size <= 8192 */
 #define        NFS_RSIZE       8192            /* Def. read data size <= 8192 */
 #define NFS_READDIRSIZE        8192            /* Def. readdir size */
@@ -137,7 +141,7 @@ struct nfs_args {
        int             retrans;        /* times to retry send */
        int             maxgrouplist;   /* Max. size of group list */
        int             readahead;      /* # of blocks to readahead */
-       int             leaseterm;      /* Term (sec) of lease */
+       int             unused01;       /* Term (sec) of lease */
        int             deadthresh;     /* Retrans threshold */
        char            *hostname;      /* server's name */
        int             acregmin;       /* cache attrs for reg files min time */
@@ -157,11 +161,11 @@ struct nfs_args {
 #define        NFSMNT_MAXGRPS          0x00000020  /* set maximum grouplist size */
 #define        NFSMNT_INT              0x00000040  /* allow interrupts on hard mount */
 #define        NFSMNT_NOCONN           0x00000080  /* Don't Connect the socket */
-#define        NFSMNT_NQNFS            0x00000100  /* Use Nqnfs protocol */
+#define        NFSMNT_UNUSED0100       0x00000100
 #define        NFSMNT_NFSV3            0x00000200  /* Use NFS Version 3 protocol */
 #define        NFSMNT_KERB             0x00000400  /* Use Kerberos authentication */
 #define        NFSMNT_DUMBTIMR         0x00000800  /* Don't estimate rtt dynamically */
-#define        NFSMNT_LEASETERM        0x00001000  /* set lease term (nqnfs) */
+#define        NFSMNT_UNUSED1000       0x00001000  /* set lease term (nqnfs) */
 #define        NFSMNT_READAHEAD        0x00002000  /* set read ahead */
 #define        NFSMNT_DEADTHRESH       0x00004000  /* set dead server retry thresh */
 #define        NFSMNT_RESVPORT         0x00008000  /* Allocate a reserved port */
@@ -298,7 +302,6 @@ MALLOC_DECLARE(M_NFSREQ);
 MALLOC_DECLARE(M_NFSDIROFF);
 MALLOC_DECLARE(M_NFSRVDESC);
 MALLOC_DECLARE(M_NFSUID);
-MALLOC_DECLARE(M_NQLEASE);
 MALLOC_DECLARE(M_NFSD);
 MALLOC_DECLARE(M_NFSBIGFH);
 MALLOC_DECLARE(M_NFSHASH);
@@ -516,19 +519,17 @@ struct nfsrv_descript {
        int                     nd_len;         /* Length of this write */
        int                     nd_repstat;     /* Reply status */
        u_int32_t               nd_retxid;      /* Reply xid */
-       u_int32_t               nd_duration;    /* Lease duration */
        struct timeval          nd_starttime;   /* Time RPC initiated */
        fhandle_t               nd_fh;          /* File handle */
        struct ucred            nd_cr;          /* Credentials */
 };
 
 /* Bits for "nd_flag" */
-#define        ND_READ         LEASE_READ
-#define ND_WRITE       LEASE_WRITE
+#define        ND_READ         0x01
+#define ND_WRITE       0x02
 #define ND_CHECK       0x04
-#define ND_LEASE       (ND_READ | ND_WRITE | ND_CHECK)
 #define ND_NFSV3       0x08
-#define ND_NQNFS       0x10
+#define ND_UNUSED010   0x10
 #define ND_KERBNICK    0x20
 #define ND_KERBFULL    0x40
 #define ND_KERBAUTH    (ND_KERBNICK | ND_KERBFULL)
@@ -600,8 +601,7 @@ int nfs_getreq (struct nfsrv_descript *,struct nfsd *,int);
 int    nfs_send (struct socket *, struct sockaddr *, struct mbuf *, 
                      struct nfsreq *);
 int    nfs_rephead (int, struct nfsrv_descript *, struct nfssvc_sock *,
-                        int, int, u_quad_t *, struct mbuf **, struct mbuf **,
-                        caddr_t *);
+                        int, struct mbuf **, struct mbuf **, caddr_t *);
 int    nfs_sndlock (struct nfsreq *);
 void   nfs_sndunlock (struct nfsreq *);
 int    nfs_slplock (struct nfssvc_sock *, int);
@@ -737,6 +737,10 @@ int        nfsrv_write (struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
 void   nfsrv_rcv (struct socket *so, void *arg, int waitflag);
 void   nfsrv_slpderef (struct nfssvc_sock *slp);
 int    nfs_meta_setsize (struct vnode *vp, struct thread *td, u_quad_t nsize);
+int    nfs_clientd(struct nfsmount *nmp, struct ucred *cred,
+                       struct nfsd_cargs *ncd, int flag, caddr_t argp,
+                       struct thread *td);
+
 
 #endif /* _KERNEL */
 
index a2c2f1f..ca2d35b 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_bio.c   8.9 (Berkeley) 3/30/95
  * $FreeBSD: /repoman/r/ncvs/src/sys/nfsclient/nfs_bio.c,v 1.130 2004/04/14 23:23:55 peadar Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_bio.c,v 1.29 2006/03/24 19:08:52 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_bio.c,v 1.30 2006/03/27 16:18:39 dillon Exp $
  */
 
 
@@ -64,7 +64,6 @@
 #include "nfsproto.h"
 #include "nfs.h"
 #include "nfsmount.h"
-#include "nqnfs.h"
 #include "nfsnode.h"
 
 static struct buf *nfs_getcacheblk(struct vnode *vp, off_t loffset,
@@ -386,56 +385,26 @@ nfs_bioread(struct vnode *vp, struct uio *uio, int ioflag)
         *              cleared which means GETATTR may use cached data and
         *              not immediately detect changes made on the server.
         */
-       if ((nmp->nm_flag & NFSMNT_NQNFS) == 0) {
-               if ((np->n_flag & NLMODIFIED) && vp->v_type == VDIR) {
+       if ((np->n_flag & NLMODIFIED) && vp->v_type == VDIR) {
+               nfs_invaldir(vp);
+               error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
+               if (error)
+                       return (error);
+               np->n_attrstamp = 0;
+       }
+       error = VOP_GETATTR(vp, &vattr, td);
+       if (error)
+               return (error);
+       if (np->n_flag & NRMODIFIED) {
+               if (vp->v_type == VDIR)
                        nfs_invaldir(vp);
-                       error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
-                       if (error)
-                               return (error);
-                       np->n_attrstamp = 0;
-               }
-               error = VOP_GETATTR(vp, &vattr, td);
+               error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
                if (error)
                        return (error);
-               if (np->n_flag & NRMODIFIED) {
-                       if (vp->v_type == VDIR)
-                               nfs_invaldir(vp);
-                       error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
-                       if (error)
-                               return (error);
-                       np->n_flag &= ~NRMODIFIED;
-               }
+               np->n_flag &= ~NRMODIFIED;
        }
        do {
-
-           /*
-            * Get a valid lease. If cached data is stale, flush it.
-            */
-           if (nmp->nm_flag & NFSMNT_NQNFS) {
-               if (NQNFS_CKINVALID(vp, np, ND_READ)) {
-                   do {
-                       error = nqnfs_getlease(vp, ND_READ, td);
-                   } while (error == NQNFS_EXPIRED);
-                   if (error)
-                       return (error);
-                   if (np->n_lrev != np->n_brev ||
-                       (np->n_flag & NQNFSNONCACHE) ||
-                       ((np->n_flag & NLMODIFIED) && vp->v_type == VDIR)) {
-                       if (vp->v_type == VDIR)
-                           nfs_invaldir(vp);
-                       error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
-                       if (error)
-                           return (error);
-                       np->n_brev = np->n_lrev;
-                   }
-               } else if (vp->v_type == VDIR && (np->n_flag & NLMODIFIED)) {
-                   nfs_invaldir(vp);
-                   error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
-                   if (error)
-                       return (error);
-               }
-           }
-           if (np->n_flag & NQNFSNONCACHE) {
+           if (np->n_flag & NDONTCACHE) {
                switch (vp->v_type) {
                case VREG:
                        return (nfs_readrpc(vp, uio));
@@ -444,8 +413,8 @@ nfs_bioread(struct vnode *vp, struct uio *uio, int ioflag)
                case VDIR:
                        break;
                default:
-                       printf(" NQNFSNONCACHE: type %x unexpected\n",  
-                               vp->v_type);
+                       printf(" NDONTCACHE: type %x unexpected\n", vp->v_type);
+                       break;
                };
            }
            switch (vp->v_type) {
@@ -649,7 +618,7 @@ again:
                    (bp->b_flags & B_INVAL) == 0 &&
                    (np->n_direofoffset == 0 ||
                    loffset + NFS_DIRBLKSIZ < np->n_direofoffset) &&
-                   !(np->n_flag & NQNFSNONCACHE) &&
+                   (np->n_flag & NDONTCACHE) == 0 &&
                    !findblk(vp, loffset + NFS_DIRBLKSIZ)) {
                        rabp = nfs_getcacheblk(vp, loffset + NFS_DIRBLKSIZ,
                                               NFS_DIRBLKSIZ, td);
@@ -734,7 +703,7 @@ again:
                 * Invalidate buffer if caching is disabled, forcing a
                 * re-read from the remote later.
                 */
-               if (np->n_flag & NQNFSNONCACHE)
+               if (np->n_flag & NDONTCACHE)
                        bp->b_flags |= B_INVAL;
                break;
            default:
@@ -887,25 +856,7 @@ restart:
        biosize = vp->v_mount->mnt_stat.f_iosize;
 
        do {
-               /*
-                * Check for a valid write lease.
-                */
-               if ((nmp->nm_flag & NFSMNT_NQNFS) &&
-                   NQNFS_CKINVALID(vp, np, ND_WRITE)) {
-                       do {
-                               error = nqnfs_getlease(vp, ND_WRITE, td);
-                       } while (error == NQNFS_EXPIRED);
-                       if (error)
-                               break;
-                       if (np->n_lrev != np->n_brev ||
-                           (np->n_flag & NQNFSNONCACHE)) {
-                               error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
-                               if (error)
-                                       break;
-                               np->n_brev = np->n_lrev;
-                       }
-               }
-               if ((np->n_flag & NQNFSNONCACHE) && uio->uio_iovcnt == 1) {
+               if ((np->n_flag & NDONTCACHE) && uio->uio_iovcnt == 1) {
                    iomode = NFSV3WRITE_FILESYNC;
                    error = nfs_writerpc(vp, uio, &iomode, &must_commit);
                    if (must_commit)
@@ -1054,30 +1005,6 @@ again:
                        goto again;
                }
 
-               /*
-                * Check for valid write lease and get one as required.
-                * In case getblk() and/or bwrite() delayed us.
-                */
-               if ((nmp->nm_flag & NFSMNT_NQNFS) &&
-                   NQNFS_CKINVALID(vp, np, ND_WRITE)) {
-                       do {
-                               error = nqnfs_getlease(vp, ND_WRITE, td);
-                       } while (error == NQNFS_EXPIRED);
-                       if (error) {
-                               brelse(bp);
-                               break;
-                       }
-                       if (np->n_lrev != np->n_brev ||
-                           (np->n_flag & NQNFSNONCACHE)) {
-                               brelse(bp);
-                               error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
-                               if (error)
-                                       break;
-                               np->n_brev = np->n_lrev;
-                               goto again;
-                       }
-               }
-
                error = uiomove((char *)bp->b_data + on, n, uio);
 
                /*
@@ -1121,19 +1048,18 @@ again:
                 * IO_INVAL appears to be unused.  The idea appears to be
                 * to turn off caching in this case.  Very odd.  XXX
                 */
-               if ((np->n_flag & NQNFSNONCACHE) || (ioflag & IO_SYNC)) {
+               if ((np->n_flag & NDONTCACHE) || (ioflag & IO_SYNC)) {
                        if (ioflag & IO_INVAL)
                                bp->b_flags |= B_NOCACHE;
                        error = VOP_BWRITE(vp, bp);
                        if (error)
                                break;
-                       if (np->n_flag & NQNFSNONCACHE) {
+                       if (np->n_flag & NDONTCACHE) {
                                error = nfs_vinvalbuf(vp, V_SAVE, td, 1);
                                if (error)
                                        break;
                        }
-               } else if ((n + on) == biosize &&
-                       (nmp->nm_flag & NFSMNT_NQNFS) == 0) {
+               } else if ((n + on) == biosize) {
                        bp->b_flags |= B_ASYNC;
                        nfs_writebp(bp, 0, 0);
                } else {
@@ -1472,11 +1398,7 @@ nfs_doio(struct vnode *vp, struct bio *bio, struct thread *td)
                    }
                }
                if (td && td->td_proc && (vp->v_flag & VTEXT) &&
-                       (((nmp->nm_flag & NFSMNT_NQNFS) &&
-                         NQNFS_CKINVALID(vp, np, ND_READ) &&
-                         np->n_lrev != np->n_brev) ||
-                        (!(nmp->nm_flag & NFSMNT_NQNFS) &&
-                         np->n_mtime != np->n_vattr.va_mtime.tv_sec))) {
+                   np->n_mtime != np->n_vattr.va_mtime.tv_sec) {
                        uprintf("Process killed due to text file modification\n");
                        psignal(td->td_proc, SIGKILL);
                }
diff --git a/sys/vfs/nfs/nfs_kerb.c b/sys/vfs/nfs/nfs_kerb.c
new file mode 100644 (file)
index 0000000..91b567b
--- /dev/null
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * Rick Macklem at The University of Guelph.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)nfs_nqlease.c       8.9 (Berkeley) 5/20/95
+ * $FreeBSD: src/sys/nfs/nfs_nqlease.c,v 1.50 2000/02/13 03:32:05 peter Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_kerb.c,v 1.1 2006/03/27 16:18:39 dillon Exp $
+ */
+
+#include <sys/param.h>
+#include <sys/vnode.h>
+#include <sys/malloc.h>
+#include <sys/mount.h>
+#include <sys/kernel.h>
+#include <sys/proc.h>
+#include <sys/systm.h>
+#include <sys/mbuf.h>
+#include <sys/socket.h>
+#include <sys/socketvar.h>
+#include <sys/protosw.h>
+
+#include <vm/vm_zone.h>
+
+#include <netinet/in.h>
+#include "rpcv2.h"
+#include "nfsproto.h"
+#include "nfs.h"
+#include "nfsm_subs.h"
+#include "xdr_subs.h"
+#include "nfsmount.h"
+#include "nfsnode.h"
+
+#include <sys/thread2.h>
+
+#define TRUE   1
+#define        FALSE   0
+
+#ifndef NFS_NOSERVER 
+
+/*
+ * Nqnfs client helper daemon. Runs once a second to expire leases.
+ * It also get authorization strings for "kerb" mounts.
+ * It must start at the beginning of the list again after any potential
+ * "sleep" since nfs_reclaim() called from vclean() can pull a node off
+ * the list asynchronously.
+ */
+int
+nfs_clientd(struct nfsmount *nmp, struct ucred *cred, struct nfsd_cargs *ncd,
+           int flag, caddr_t argp, struct thread *td)
+{
+       struct nfsuid *nuidp, *nnuidp;
+       int error = 0;
+
+       /*
+        * If an authorization string is being passed in, get it.
+        */
+       if ((flag & NFSSVC_GOTAUTH) &&
+           (nmp->nm_state & (NFSSTA_WAITAUTH | NFSSTA_DISMNT)) == 0) {
+           if (nmp->nm_state & NFSSTA_HASAUTH)
+               panic("cld kerb");
+           if ((flag & NFSSVC_AUTHINFAIL) == 0) {
+               if (ncd->ncd_authlen <= nmp->nm_authlen &&
+                   ncd->ncd_verflen <= nmp->nm_verflen &&
+                   !copyin(ncd->ncd_authstr,nmp->nm_authstr,ncd->ncd_authlen)&&
+                   !copyin(ncd->ncd_verfstr,nmp->nm_verfstr,ncd->ncd_verflen)){
+                   nmp->nm_authtype = ncd->ncd_authtype;
+                   nmp->nm_authlen = ncd->ncd_authlen;
+                   nmp->nm_verflen = ncd->ncd_verflen;
+#ifdef NFSKERB
+                   nmp->nm_key = ncd->ncd_key;
+#endif
+               } else
+                   nmp->nm_state |= NFSSTA_AUTHERR;
+           } else
+               nmp->nm_state |= NFSSTA_AUTHERR;
+           nmp->nm_state |= NFSSTA_HASAUTH;
+           wakeup((caddr_t)&nmp->nm_authlen);
+       } else
+           nmp->nm_state |= NFSSTA_WAITAUTH;
+
+       /*
+        * Loop every second updating queue until there is a termination sig.
+        */
+       while ((nmp->nm_state & NFSSTA_DISMNT) == 0) {
+           /*
+            * Get an authorization string, if required.
+            */
+           if ((nmp->nm_state & (NFSSTA_WAITAUTH | NFSSTA_DISMNT | NFSSTA_HASAUTH)) == 0) {
+               ncd->ncd_authuid = nmp->nm_authuid;
+               if (copyout((caddr_t)ncd, argp, sizeof (struct nfsd_cargs)))
+                       nmp->nm_state |= NFSSTA_WAITAUTH;
+               else
+                       return (ENEEDAUTH);
+           }
+
+           /*
+            * Wait a bit (no pun) and do it again.
+            */
+           if ((nmp->nm_state & NFSSTA_DISMNT) == 0 &&
+               (nmp->nm_state & (NFSSTA_WAITAUTH | NFSSTA_HASAUTH))) {
+                   error = tsleep((caddr_t)&nmp->nm_authstr, PCATCH,
+                       "nqnfstimr", hz / 3);
+                   if (error == EINTR || error == ERESTART)
+                       (void) dounmount(nmp->nm_mountp, 0, td);
+           }
+       }
+
+       /*
+        * Finally, we can free up the mount structure.
+        */
+       TAILQ_FOREACH_MUTABLE(nuidp, &nmp->nm_uidlruhead, nu_lru, nnuidp) {
+               LIST_REMOVE(nuidp, nu_hash);
+               TAILQ_REMOVE(&nmp->nm_uidlruhead, nuidp, nu_lru);
+               free((caddr_t)nuidp, M_NFSUID);
+       }
+       nfs_free_mount(nmp);
+       if (error == EWOULDBLOCK)
+               error = 0;
+       return (error);
+}
+
+#endif /* NFS_NOSERVER */
+
index 091680e..13843ee 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_node.c  8.6 (Berkeley) 5/22/95
  * $FreeBSD: src/sys/nfs/nfs_node.c,v 1.36.2.3 2002/01/05 22:25:04 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_node.c,v 1.21 2006/03/27 01:54:17 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_node.c,v 1.22 2006/03/27 16:18:39 dillon Exp $
  */
 
 
@@ -260,7 +260,6 @@ nfs_reclaim(struct vop_reclaim_args *ap)
 {
        struct vnode *vp = ap->a_vp;
        struct nfsnode *np = VTONFS(vp);
-       struct nfsmount *nmp = VFSTONFS(vp->v_mount);
        struct nfsdmap *dp, *dp2;
 
        if (prtactive && vp->v_usecount != 0)
@@ -269,13 +268,6 @@ nfs_reclaim(struct vop_reclaim_args *ap)
        if (np->n_hash.le_prev != NULL)
                LIST_REMOVE(np, n_hash);
 
-       /*
-        * For nqnfs, take it off the timer queue as required.
-        */
-       if ((nmp->nm_flag & NFSMNT_NQNFS) && np->n_timer.cqe_next != 0) {
-               CIRCLEQ_REMOVE(&nmp->nm_timerhead, np, n_timer);
-       }
-
        /*
         * Free up any directory cookie structures and
         * large file handle structures that might be associated with
diff --git a/sys/vfs/nfs/nfs_nqlease.c b/sys/vfs/nfs/nfs_nqlease.c
deleted file mode 100644 (file)
index 38fc5ed..0000000
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)nfs_nqlease.c       8.9 (Berkeley) 5/20/95
- * $FreeBSD: src/sys/nfs/nfs_nqlease.c,v 1.50 2000/02/13 03:32:05 peter Exp $
- * $DragonFly: src/sys/vfs/nfs/Attic/nfs_nqlease.c,v 1.28 2006/02/21 04:47:56 dillon Exp $
- */
-
-
-/*
- * References:
- *     Cary G. Gray and David R. Cheriton, "Leases: An Efficient Fault-Tolerant
- *             Mechanism for Distributed File Cache Consistency",
- *             In Proc. of the Twelfth ACM Symposium on Operating Systems
- *             Principals, pg. 202-210, Litchfield Park, AZ, Dec. 1989.
- *     Michael N. Nelson, Brent B. Welch and John K. Ousterhout, "Caching
- *             in the Sprite Network File System", ACM TOCS 6(1),
- *             pages 134-154, February 1988.
- *     V. Srinivasan and Jeffrey C. Mogul, "Spritely NFS: Implementation and
- *             Performance of Cache-Consistency Protocols", Digital
- *             Equipment Corporation WRL Research Report 89/5, May 1989.
- */
-#include <sys/param.h>
-#include <sys/vnode.h>
-#include <sys/malloc.h>
-#include <sys/mount.h>
-#include <sys/kernel.h>
-#include <sys/proc.h>
-#include <sys/systm.h>
-#include <sys/mbuf.h>
-#include <sys/socket.h>
-#include <sys/socketvar.h>
-#include <sys/protosw.h>
-
-#include <vm/vm_zone.h>
-
-#include <netinet/in.h>
-#include "rpcv2.h"
-#include "nfsproto.h"
-#include "nfs.h"
-#include "nfsm_subs.h"
-#include "xdr_subs.h"
-#include "nqnfs.h"
-#include "nfsmount.h"
-#include "nfsnode.h"
-
-#include <sys/thread2.h>
-
-static MALLOC_DEFINE(M_NQMHOST, "NQNFS Host", "Nqnfs host address table");
-
-time_t nqnfsstarttime = (time_t)0;
-int nqsrv_clockskew = NQ_CLOCKSKEW;
-int nqsrv_writeslack = NQ_WRITESLACK;
-int nqsrv_maxlease = NQ_MAXLEASE;
-#ifndef NFS_NOSERVER
-static int nqsrv_maxnumlease = NQ_MAXNUMLEASE;
-#endif
-
-struct vop_lease_args;
-
-#ifndef NFS_NOSERVER
-static int     nqsrv_cmpnam (struct nfssvc_sock *, struct sockaddr *,
-                       struct nqhost *);
-static int     nqnfs_vacated (struct vnode *vp, struct ucred *cred);
-static void    nqsrv_addhost (struct nqhost *lph, struct nfssvc_sock *slp,
-                                  struct sockaddr *nam);
-static void    nqsrv_instimeq (struct nqlease *lp, u_int32_t duration);
-static void    nqsrv_locklease (struct nqlease *lp);
-static void    nqsrv_send_eviction (struct vnode *vp, struct nqlease *lp,
-                                        struct nfssvc_sock *slp,
-                                        struct sockaddr *nam, 
-                                        struct ucred *cred);
-static void    nqsrv_unlocklease (struct nqlease *lp);
-static void    nqsrv_waitfor_expiry (struct nqlease *lp);
-#endif
-extern void    nqnfs_lease_updatetime (int deltat);
-
-/*
- * Signifies which rpcs can have piggybacked lease requests
- */
-int nqnfs_piggy[NFS_NPROCS] = {
-       0,
-       0,
-       ND_WRITE,
-       ND_READ,
-       0,
-       ND_READ,
-       ND_READ,
-       ND_WRITE,
-       0,
-       0,
-       0,
-       0,
-       0,
-       0,
-       0,
-       0,
-       ND_READ,
-       ND_READ,
-       0,
-       0,
-       0,
-       0,
-       0,
-       0,
-       0,
-       0,
-};
-
-extern nfstype nfsv2_type[9];
-extern nfstype nfsv3_type[9];
-extern struct nfsstats nfsstats;
-
-#define TRUE   1
-#define        FALSE   0
-
-#ifndef NFS_NOSERVER 
-/*
- * Get or check for a lease for "vp", based on ND_CHECK flag.
- * The rules are as follows:
- * - if a current non-caching lease, reply non-caching
- * - if a current lease for same host only, extend lease
- * - if a read cachable lease and a read lease request
- *     add host to list any reply cachable
- * - else { set non-cachable for read-write sharing }
- *     send eviction notice messages to all other hosts that have lease
- *     wait for lease termination { either by receiving vacated messages
- *                                     from all the other hosts or expiry
- *                                     via. timeout }
- *     modify lease to non-cachable
- * - else if no current lease, issue new one
- * - reply
- * - return boolean TRUE iff nam should be m_freem()'d
- * NB: Since nqnfs_serverd() is called from a timer, any potential tsleep()
- *     in here must be framed by nqsrv_locklease() and nqsrv_unlocklease().
- *     nqsrv_locklease() is coded such that at least one of LC_LOCKED and
- *     LC_WANTED is set whenever a process is tsleeping in it. The exception
- *     is when a new lease is being allocated, since it is not in the timer
- *     queue yet. (Ditto for the splsoftclock() and splx(s) calls)
- */
-int
-nqsrv_getlease(struct vnode *vp, u_int32_t *duration, int flags,
-              struct nfssvc_sock *slp, struct thread *td,
-              struct sockaddr *nam, int *cachablep, u_quad_t *frev,
-              struct ucred *cred)
-{
-       struct nqlease *lp;
-       struct nqfhhashhead *lpp = NULL;
-       struct nqhost *lph = NULL;
-       struct nqlease *tlp;
-       struct nqm **lphp;
-       struct vattr vattr;
-       fhandle_t fh;
-       int i, ok, error;
-
-       if (vp->v_type != VREG && vp->v_type != VDIR && vp->v_type != VLNK)
-               return (0);
-       if (*duration > nqsrv_maxlease)
-               *duration = nqsrv_maxlease;
-       error = VOP_GETATTR(vp, &vattr, td);
-       if (error)
-               return (error);
-       *frev = vattr.va_filerev;
-       crit_enter();
-       tlp = vp->v_lease;
-       if ((flags & ND_CHECK) == 0)
-               nfsstats.srvnqnfs_getleases++;
-       if (tlp == 0) {
-               /*
-                * Find the lease by searching the hash list.
-                */
-               fh.fh_fsid = vp->v_mount->mnt_stat.f_fsid;
-               error = VFS_VPTOFH(vp, &fh.fh_fid);
-               if (error) {
-                       crit_exit();
-                       return (error);
-               }
-               lpp = NQFHHASH(fh.fh_fid.fid_data);
-               for (lp = lpp->lh_first; lp != 0; lp = lp->lc_hash.le_next)
-                       if (fh.fh_fsid.val[0] == lp->lc_fsid.val[0] &&
-                           fh.fh_fsid.val[1] == lp->lc_fsid.val[1] &&
-                           !bcmp(fh.fh_fid.fid_data, lp->lc_fiddata,
-                                 fh.fh_fid.fid_len - sizeof (int32_t))) {
-                               /* Found it */
-                               lp->lc_vp = vp;
-                               vp->v_lease = lp;
-                               tlp = lp;
-                               break;
-                       }
-       } else
-               lp = tlp;
-       if (lp != 0) {
-               if ((lp->lc_flag & LC_NONCACHABLE) ||
-                   (lp->lc_morehosts == (struct nqm *)0 &&
-                    nqsrv_cmpnam(slp, nam, &lp->lc_host)))
-                       goto doreply;
-               if ((flags & ND_READ) && (lp->lc_flag & LC_WRITE) == 0) {
-                       if (flags & ND_CHECK)
-                               goto doreply;
-                       if (nqsrv_cmpnam(slp, nam, &lp->lc_host))
-                               goto doreply;
-                       i = 0;
-                       if (lp->lc_morehosts) {
-                               lph = lp->lc_morehosts->lpm_hosts;
-                               lphp = &lp->lc_morehosts->lpm_next;
-                               ok = 1;
-                       } else {
-                               lphp = &lp->lc_morehosts;
-                               ok = 0;
-                       }
-                       while (ok && (lph->lph_flag & LC_VALID)) {
-                               if (nqsrv_cmpnam(slp, nam, lph))
-                                       goto doreply;
-                               if (++i == LC_MOREHOSTSIZ) {
-                                       i = 0;
-                                       if (*lphp) {
-                                               lph = (*lphp)->lpm_hosts;
-                                               lphp = &((*lphp)->lpm_next);
-                                       } else
-                                               ok = 0;
-                               } else
-                                       lph++;
-                       }
-                       nqsrv_locklease(lp);
-                       if (!ok) {
-                               *lphp = (struct nqm *)
-                                       malloc(sizeof (struct nqm),
-                                               M_NQMHOST, M_WAITOK);
-                               bzero((caddr_t)*lphp, sizeof (struct nqm));
-                               lph = (*lphp)->lpm_hosts;
-                       }
-                       nqsrv_addhost(lph, slp, nam);
-                       nqsrv_unlocklease(lp);
-               } else {
-                       lp->lc_flag |= LC_NONCACHABLE;
-                       nqsrv_locklease(lp);
-                       nqsrv_send_eviction(vp, lp, slp, nam, cred);
-                       nqsrv_waitfor_expiry(lp);
-                       nqsrv_unlocklease(lp);
-               }
-doreply:
-               /*
-                * Update the lease and return
-                */
-               if ((flags & ND_CHECK) == 0)
-                       nqsrv_instimeq(lp, *duration);
-               if (lp->lc_flag & LC_NONCACHABLE)
-                       *cachablep = 0;
-               else {
-                       *cachablep = 1;
-                       if (flags & ND_WRITE)
-                               lp->lc_flag |= LC_WRITTEN;
-               }
-               crit_exit();
-               return (0);
-       }
-       crit_exit();
-       if (flags & ND_CHECK)
-               return (0);
-
-       /*
-        * Allocate new lease
-        * The value of nqsrv_maxnumlease should be set generously, so that
-        * the following "printf" happens infrequently.
-        */
-       if (nfsstats.srvnqnfs_leases > nqsrv_maxnumlease) {
-               printf("Nqnfs server, too many leases\n");
-               do {
-                       (void) tsleep((caddr_t)&lbolt, 0, "nqsrvnuml", 0);
-               } while (nfsstats.srvnqnfs_leases > nqsrv_maxnumlease);
-       }
-       MALLOC(lp, struct nqlease *, sizeof (struct nqlease), M_NQLEASE, M_WAITOK);
-       bzero((caddr_t)lp, sizeof (struct nqlease));
-       if (flags & ND_WRITE)
-               lp->lc_flag |= (LC_WRITE | LC_WRITTEN);
-       nqsrv_addhost(&lp->lc_host, slp, nam);
-       lp->lc_vp = vp;
-       lp->lc_fsid = fh.fh_fsid;
-       bcopy(fh.fh_fid.fid_data, lp->lc_fiddata,
-               fh.fh_fid.fid_len - sizeof (int32_t));
-       if(!lpp)
-               panic("nfs_nqlease.c: Phoney lpp");
-       LIST_INSERT_HEAD(lpp, lp, lc_hash);
-       vp->v_lease = lp;
-       crit_enter();
-       nqsrv_instimeq(lp, *duration);
-       crit_exit();
-       *cachablep = 1;
-       if (++nfsstats.srvnqnfs_leases > nfsstats.srvnqnfs_maxleases)
-               nfsstats.srvnqnfs_maxleases = nfsstats.srvnqnfs_leases;
-       return (0);
-}
-
-/*
- * Local lease check for server syscalls.
- * Just set up args and let nqsrv_getlease() do the rest.
- * nqnfs_vop_lease_check() is the VOP_LEASE() form of the same routine.
- * Ifdef'd code in nfsnode.h renames these routines to whatever a particular
- * OS needs.
- */
-int
-nqnfs_lease_check(struct vnode *vp, struct thread *td,
-                 struct ucred *cred, int flag)
-{
-       u_int32_t duration = 0;
-       int cache;
-       u_quad_t frev;
-
-       nqsrv_getlease(vp, &duration, ND_CHECK | flag, NQLOCALSLP,
-               td, (struct sockaddr *)0, &cache, &frev, cred);
-       return(0);
-}
-
-/*
- * nqnfs_vop_lease_check(struct vnode *a_vp, struct thread *a_td,
- *                      struct ucred *a_cred, int a_flag)
- */
-int
-nqnfs_vop_lease_check(struct vop_lease_args *ap)
-{
-       u_int32_t duration = 0;
-       int cache;
-       u_quad_t frev;
-
-       (void) nqsrv_getlease(ap->a_vp, &duration, ND_CHECK | ap->a_flag,
-                             NQLOCALSLP, ap->a_td, (struct sockaddr *)0,
-                             &cache, &frev, ap->a_cred);
-       return (0);
-}
-
-
-/*
- * Add a host to an nqhost structure for a lease.
- */
-static void
-nqsrv_addhost(struct nqhost *lph, struct nfssvc_sock *slp, struct sockaddr *nam)
-{
-       struct sockaddr_in *saddr;
-       struct socket *nsso;
-
-       if (slp == NQLOCALSLP) {
-               lph->lph_flag |= (LC_VALID | LC_LOCAL);
-               return;
-       }
-       nsso = slp->ns_so;
-       lph->lph_slp = slp;
-       if (nsso && nsso->so_proto->pr_protocol == IPPROTO_UDP) {
-               saddr = (struct sockaddr_in *)nam;
-               lph->lph_flag |= (LC_VALID | LC_UDP);
-               lph->lph_inetaddr = saddr->sin_addr.s_addr;
-               lph->lph_port = saddr->sin_port;
-       } else {
-               lph->lph_flag |= (LC_VALID | LC_SREF);
-               slp->ns_sref++;
-       }
-}
-
-/*
- * Update the lease expiry time and position it in the timer queue correctly.
- */
-static void
-nqsrv_instimeq(struct nqlease *lp, u_int32_t duration)
-{
-       struct nqlease *tlp;
-       time_t newexpiry;
-
-       newexpiry = time_second + duration + nqsrv_clockskew;
-       if (lp->lc_expiry == newexpiry)
-               return;
-       if (lp->lc_timer.cqe_next != 0) {
-               CIRCLEQ_REMOVE(&nqtimerhead, lp, lc_timer);
-       }
-       lp->lc_expiry = newexpiry;
-
-       /*
-        * Find where in the queue it should be.
-        */
-       tlp = nqtimerhead.cqh_last;
-       while (tlp != (void *)&nqtimerhead && tlp->lc_expiry > newexpiry)
-               tlp = tlp->lc_timer.cqe_prev;
-#ifdef HASNVRAM
-       if (tlp == nqtimerhead.cqh_last)
-               NQSTORENOVRAM(newexpiry);
-#endif /* HASNVRAM */
-       if (tlp == (void *)&nqtimerhead) {
-               CIRCLEQ_INSERT_HEAD(&nqtimerhead, lp, lc_timer);
-       } else {
-               CIRCLEQ_INSERT_AFTER(&nqtimerhead, tlp, lp, lc_timer);
-       }
-}
-
-/*
- * Compare the requesting host address with the lph entry in the lease.
- * Return true iff it is the same.
- * This is somewhat messy due to the union in the nqhost structure.
- * The local host is indicated by the special value of NQLOCALSLP for slp.
- */
-static int
-nqsrv_cmpnam(struct nfssvc_sock *slp, struct sockaddr *nam, struct nqhost *lph)
-{
-       struct sockaddr_in *saddr;
-       struct sockaddr *addr;
-       union nethostaddr lhaddr;
-       struct socket *nsso;
-       int ret;
-
-       if (slp == NQLOCALSLP) {
-               if (lph->lph_flag & LC_LOCAL)
-                       return (1);
-               else
-                       return (0);
-       }
-       nsso = slp->ns_so;
-       if (nsso && nsso->so_proto->pr_protocol == IPPROTO_UDP) {
-               addr = nam;
-       } else {
-               addr = slp->ns_nam;
-       }
-       if (lph->lph_flag & LC_UDP) {
-               ret = netaddr_match(AF_INET, &lph->lph_haddr, addr);
-       } else {
-               if ((lph->lph_slp->ns_flag & SLP_VALID) == 0)
-                       return (0);
-               saddr = (struct sockaddr_in *)lph->lph_slp->ns_nam;
-               if (saddr->sin_family == AF_INET)
-                       lhaddr.had_inetaddr = saddr->sin_addr.s_addr;
-               else
-                       lhaddr.had_nam = lph->lph_slp->ns_nam;
-               ret = netaddr_match(saddr->sin_family, &lhaddr, addr);
-       }
-       return (ret);
-}
-
-/*
- * Send out eviction notice messages to all other hosts for the lease.
- */
-static void
-nqsrv_send_eviction(struct vnode *vp, struct nqlease *lp,
-                   struct nfssvc_sock *slp, struct sockaddr *nam,
-                   struct ucred *cred)
-{
-       struct nqhost *lph = &lp->lc_host;
-       int siz;
-       struct nqm *lphnext = lp->lc_morehosts;
-       struct mbuf *m, *mreq, *mb, *mb2, *mheadend;
-       struct sockaddr *nam2;
-       struct sockaddr_in *saddr;
-       nfsfh_t nfh;
-       fhandle_t *fhp;
-       caddr_t bpos, cp;
-       u_int32_t xid, *tl;
-       int len = 1, ok = 1, i = 0;
-
-       while (ok && (lph->lph_flag & LC_VALID)) {
-               if (nqsrv_cmpnam(slp, nam, lph)) {
-                       lph->lph_flag |= LC_VACATED;
-               } else if ((lph->lph_flag & (LC_LOCAL | LC_VACATED)) == 0) {
-                       struct socket *so;
-                       int sotype;
-                       int *solockp = NULL;
-
-                       so = lph->lph_slp->ns_so;
-                       if (lph->lph_flag & LC_UDP) {
-                               MALLOC(nam2, struct sockaddr *,
-                                      sizeof *nam2, M_SONAME, M_WAITOK);
-                               saddr = (struct sockaddr_in *)nam2;
-                               saddr->sin_len = sizeof *saddr;
-                               saddr->sin_family = AF_INET;
-                               saddr->sin_addr.s_addr = lph->lph_inetaddr;
-                               saddr->sin_port = lph->lph_port;
-                       } else if (lph->lph_slp->ns_flag & SLP_VALID) {
-                               nam2 = (struct sockaddr *)0;
-                       } else {
-                               goto nextone;
-                       }
-                       sotype = so->so_type;
-                       if (so->so_proto->pr_flags & PR_CONNREQUIRED)
-                               solockp = &lph->lph_slp->ns_solock;
-                       nfsm_reqhead((struct vnode *)0, NQNFSPROC_EVICTED,
-                               NFSX_V3FH + NFSX_UNSIGNED);
-                       fhp = &nfh.fh_generic;
-                       bzero((caddr_t)fhp, sizeof(nfh));
-                       fhp->fh_fsid = vp->v_mount->mnt_stat.f_fsid;
-                       VFS_VPTOFH(vp, &fhp->fh_fid);
-                       nfsm_srvfhtom(fhp, 1);
-                       m = mreq;
-                       siz = 0;
-                       while (m) {
-                               siz += m->m_len;
-                               m = m->m_next;
-                       }
-                       if (siz <= 0 || siz > NFS_MAXPACKET) {
-                               printf("mbuf siz=%d\n",siz);
-                               panic("Bad nfs svc reply");
-                       }
-                       m = nfsm_rpchead(cred, (NFSMNT_NFSV3 | NFSMNT_NQNFS),
-                               NQNFSPROC_EVICTED,
-                               RPCAUTH_UNIX, 5 * NFSX_UNSIGNED, (char *)0,
-                               0, (char *)NULL, mreq, siz, &mheadend, &xid);
-                       /*
-                        * For stream protocols, prepend a Sun RPC
-                        * Record Mark.
-                        */
-                       if (sotype == SOCK_STREAM) {
-                               M_PREPEND(m, NFSX_UNSIGNED, MB_WAIT);
-                               /* XXX-MBUF */
-                               printf("nfs_nqlease: M_PREPEND failed\n");
-                               *mtod(m, u_int32_t *) = htonl(0x80000000 |
-                                       (m->m_pkthdr.len - NFSX_UNSIGNED));
-                       }
-                       /*
-                        * nfs_sndlock if PR_CONNREQUIRED XXX
-                        */
-
-                       if ((lph->lph_flag & LC_UDP) == 0 &&
-                           ((lph->lph_slp->ns_flag & SLP_VALID) == 0 ||
-                           nfs_slplock(lph->lph_slp, 0) == 0)) {
-                               m_freem(m);
-                       } else {
-                               nfs_send(so, nam2, m, NULL);
-                               if (solockp)
-                                       nfs_slpunlock(lph->lph_slp);
-                       }
-                       if (lph->lph_flag & LC_UDP)
-                               FREE(nam2, M_SONAME);
-               }
-nextone:
-               if (++i == len) {
-                       if (lphnext) {
-                               i = 0;
-                               len = LC_MOREHOSTSIZ;
-                               lph = lphnext->lpm_hosts;
-                               lphnext = lphnext->lpm_next;
-                       } else
-                               ok = 0;
-               } else
-                       lph++;
-       }
-}
-
-/*
- * Wait for the lease to expire.
- * This will occur when all clients have sent "vacated" messages to
- * this server OR when it expires do to timeout.
- */
-static void
-nqsrv_waitfor_expiry(struct nqlease *lp)
-{
-       struct nqhost *lph;
-       int i;
-       struct nqm *lphnext;
-       int len, ok;
-
-tryagain:
-       if (time_second > lp->lc_expiry)
-               return;
-       lph = &lp->lc_host;
-       lphnext = lp->lc_morehosts;
-       len = 1;
-       i = 0;
-       ok = 1;
-       while (ok && (lph->lph_flag & LC_VALID)) {
-               if ((lph->lph_flag & (LC_LOCAL | LC_VACATED)) == 0) {
-                       lp->lc_flag |= LC_EXPIREDWANTED;
-                       (void) tsleep((caddr_t)&lp->lc_flag, 0, "nqexp", 0);
-                       goto tryagain;
-               }
-               if (++i == len) {
-                       if (lphnext) {
-                               i = 0;
-                               len = LC_MOREHOSTSIZ;
-                               lph = lphnext->lpm_hosts;
-                               lphnext = lphnext->lpm_next;
-                       } else
-                               ok = 0;
-               } else
-                       lph++;
-       }
-}
-
-/*
- * Nqnfs server timer that maintains the server lease queue.
- * Scan the lease queue for expired entries:
- * - when one is found, wakeup anyone waiting for it
- *   else dequeue and free
- */
-void
-nqnfs_serverd(void)
-{
-       struct nqlease *lp;
-       struct nqhost *lph;
-       struct nqlease *nextlp;
-       struct nqm *lphnext, *olphnext;
-       int i, len, ok;
-
-       for (lp = nqtimerhead.cqh_first; lp != (void *)&nqtimerhead;
-           lp = nextlp) {
-               if (lp->lc_expiry >= time_second)
-                       break;
-               nextlp = lp->lc_timer.cqe_next;
-               if (lp->lc_flag & LC_EXPIREDWANTED) {
-                       lp->lc_flag &= ~LC_EXPIREDWANTED;
-                       wakeup((caddr_t)&lp->lc_flag);
-               } else if ((lp->lc_flag & (LC_LOCKED | LC_WANTED)) == 0) {
-                   /*
-                    * Make a best effort at keeping a write caching lease long
-                    * enough by not deleting it until it has been explicitly
-                    * vacated or there have been no writes in the previous
-                    * write_slack seconds since expiry and the nfsds are not
-                    * all busy. The assumption is that if the nfsds are not
-                    * all busy now (no queue of nfs requests), then the client
-                    * would have been able to do at least one write to the
-                    * file during the last write_slack seconds if it was still
-                    * trying to push writes to the server.
-                    */
-                   if ((lp->lc_flag & (LC_WRITE | LC_VACATED)) == LC_WRITE &&
-                       ((lp->lc_flag & LC_WRITTEN) || nfsd_waiting == 0)) {
-                       lp->lc_flag &= ~LC_WRITTEN;
-                       nqsrv_instimeq(lp, nqsrv_writeslack);
-                   } else {
-                       CIRCLEQ_REMOVE(&nqtimerhead, lp, lc_timer);
-                       LIST_REMOVE(lp, lc_hash);
-                       /*
-                        * This soft reference may no longer be valid, but
-                        * no harm done. The worst case is if the vnode was
-                        * recycled and has another valid lease reference,
-                        * which is dereferenced prematurely.
-                        */
-                       lp->lc_vp->v_lease = (struct nqlease *)0;
-                       lph = &lp->lc_host;
-                       lphnext = lp->lc_morehosts;
-                       olphnext = (struct nqm *)0;
-                       len = 1;
-                       i = 0;
-                       ok = 1;
-                       while (ok && (lph->lph_flag & LC_VALID)) {
-                               if (lph->lph_flag & LC_SREF)
-                                       nfsrv_slpderef(lph->lph_slp);
-                               if (++i == len) {
-                                       if (olphnext) {
-                                               free((caddr_t)olphnext, M_NQMHOST);
-                                               olphnext = (struct nqm *)0;
-                                       }
-                                       if (lphnext) {
-                                               olphnext = lphnext;
-                                               i = 0;
-                                               len = LC_MOREHOSTSIZ;
-                                               lph = lphnext->lpm_hosts;
-                                               lphnext = lphnext->lpm_next;
-                                       } else
-                                               ok = 0;
-                               } else
-                                       lph++;
-                       }
-                       FREE((caddr_t)lp, M_NQLEASE);
-                       if (olphnext)
-                               free((caddr_t)olphnext, M_NQMHOST);
-                       nfsstats.srvnqnfs_leases--;
-                   }
-               }
-       }
-}
-
-/*
- * Called from nfssvc_nfsd() for a getlease rpc request.
- * Do the from/to xdr translation and call nqsrv_getlease() to
- * do the real work.
- */
-int
-nqnfsrv_getlease(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
-                struct thread *td, struct mbuf **mrq)
-{
-       struct mbuf *mrep = nfsd->nd_mrep, *md = nfsd->nd_md;
-       struct sockaddr *nam = nfsd->nd_nam;
-       caddr_t dpos = nfsd->nd_dpos;
-       struct ucred *cred = &nfsd->nd_cr;
-       struct nfs_fattr *fp;
-       struct vattr va;
-       struct vattr *vap = &va;
-       struct vnode *vp;
-       nfsfh_t nfh;
-       fhandle_t *fhp;
-       u_int32_t *tl;
-       int32_t t1;
-       u_quad_t frev;
-       caddr_t bpos;
-       int error = 0;
-       char *cp2;
-       struct mbuf *mb, *mb2, *mreq;
-       int flags, rdonly, cache;
-
-       fhp = &nfh.fh_generic;
-       nfsm_srvmtofh(fhp);
-       nfsm_dissect(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
-       flags = fxdr_unsigned(int, *tl++);
-       nfsd->nd_duration = fxdr_unsigned(int, *tl);
-       error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam, &rdonly,
-               (nfsd->nd_flag & ND_KERBAUTH), TRUE);
-       if (error) {
-               nfsm_reply(0);
-               goto nfsmout;
-       }
-       if (rdonly && flags == ND_WRITE) {
-               error = EROFS;
-               vput(vp);
-               nfsm_reply(0);
-       }
-       (void) nqsrv_getlease(vp, &nfsd->nd_duration, flags, slp, td,
-               nam, &cache, &frev, cred);
-       error = VOP_GETATTR(vp, vap, td);
-       vput(vp);
-       nfsm_reply(NFSX_V3FATTR + 4 * NFSX_UNSIGNED);
-       nfsm_build(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
-       *tl++ = txdr_unsigned(cache);
-       *tl++ = txdr_unsigned(nfsd->nd_duration);
-       txdr_hyper(frev, tl);
-       nfsm_build(fp, struct nfs_fattr *, NFSX_V3FATTR);
-       nfsm_srvfillattr(vap, fp);
-       nfsm_srvdone;
-}
-
-/*
- * Called from nfssvc_nfsd() when a "vacated" message is received from a
- * client. Find the entry and expire it.
- */
-int
-nqnfsrv_vacated(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
-               struct thread *td, struct mbuf **mrq)
-{
-       struct mbuf *mrep = nfsd->nd_mrep, *md = nfsd->nd_md;
-       struct sockaddr *nam = nfsd->nd_nam;
-       caddr_t dpos = nfsd->nd_dpos;
-       struct nqlease *lp;
-       struct nqhost *lph;
-       struct nqlease *tlp = (struct nqlease *)0;
-       nfsfh_t nfh;
-       fhandle_t *fhp;
-       u_int32_t *tl;
-       int32_t t1;
-       struct nqm *lphnext;
-       struct mbuf *mreq, *mb;
-       int error = 0, i, len, ok, gotit = 0, cache = 0;
-       char *cp2, *bpos;
-       u_quad_t frev;
-
-       fhp = &nfh.fh_generic;
-       nfsm_srvmtofh(fhp);
-       m_freem(mrep);
-       /*
-        * Find the lease by searching the hash list.
-        */
-       for (lp = NQFHHASH(fhp->fh_fid.fid_data)->lh_first; lp != 0;
-           lp = lp->lc_hash.le_next)
-               if (fhp->fh_fsid.val[0] == lp->lc_fsid.val[0] &&
-                   fhp->fh_fsid.val[1] == lp->lc_fsid.val[1] &&
-                   !bcmp(fhp->fh_fid.fid_data, lp->lc_fiddata,
-                         MAXFIDSZ)) {
-                       /* Found it */
-                       tlp = lp;
-                       break;
-               }
-       if (tlp != 0) {
-               lp = tlp;
-               len = 1;
-               i = 0;
-               lph = &lp->lc_host;
-               lphnext = lp->lc_morehosts;
-               ok = 1;
-               while (ok && (lph->lph_flag & LC_VALID)) {
-                       if (nqsrv_cmpnam(slp, nam, lph)) {
-                               lph->lph_flag |= LC_VACATED;
-                               gotit++;
-                               break;
-                       }
-                       if (++i == len) {
-                               if (lphnext) {
-                                       len = LC_MOREHOSTSIZ;
-                                       i = 0;
-                                       lph = lphnext->lpm_hosts;
-                                       lphnext = lphnext->lpm_next;
-                               } else
-                                       ok = 0;
-                       } else
-                               lph++;
-               }
-               if ((lp->lc_flag & LC_EXPIREDWANTED) && gotit) {
-                       lp->lc_flag &= ~LC_EXPIREDWANTED;
-                       wakeup((caddr_t)&lp->lc_flag);
-               }
-nfsmout:
-               return (EPERM);
-       }
-       return (EPERM);
-}
-
-#endif /* NFS_NOSERVER */
-
-/*
- * Client get lease rpc function.
- */
-int
-nqnfs_getlease(struct vnode *vp, int rwflag, struct thread *td)
-{
-       u_int32_t *tl;
-       caddr_t cp;
-       int32_t t1, t2;
-       struct nfsnode *np;
-       struct nfsmount *nmp = VFSTONFS(vp->v_mount);
-       caddr_t bpos, dpos, cp2;
-       time_t reqtime;
-       int error = 0;
-       struct mbuf *mreq, *mrep, *md, *mb, *mb2;
-       int cachable;
-       u_quad_t frev;
-
-       nfsstats.rpccnt[NQNFSPROC_GETLEASE]++;
-       mb = mreq = nfsm_reqh(vp, NQNFSPROC_GETLEASE, NFSX_V3FH+2*NFSX_UNSIGNED,
-                &bpos);
-       nfsm_fhtom(vp, 1);
-       nfsm_build(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
-       *tl++ = txdr_unsigned(rwflag);
-       *tl = txdr_unsigned(nmp->nm_leaseterm);
-       reqtime = time_second;
-       nfsm_request(vp, NQNFSPROC_GETLEASE, td, nfs_vpcred(vp, rwflag));
-       np = VTONFS(vp);
-       nfsm_dissect(tl, u_int32_t *, 4 * NFSX_UNSIGNED);
-       cachable = fxdr_unsigned(int, *tl++);
-       reqtime += fxdr_unsigned(int, *tl++);
-       if (reqtime > time_second) {
-               frev = fxdr_hyper(tl);
-               nqnfs_clientlease(nmp, np, rwflag, cachable, reqtime, frev);
-               nfsm_loadattr(vp, (struct vattr *)0);
-       } else {
-               error = NQNFS_EXPIRED;
-       }
-       m_freem(mrep);
-nfsmout:
-       return (error);
-}
-
-#ifndef NFS_NOSERVER 
-/*
- * Client vacated message function.
- */
-static int
-nqnfs_vacated(struct vnode *vp, struct ucred *cred)
-{
-       caddr_t cp;
-       int i;
-       u_int32_t *tl;
-       int32_t t2;
-       caddr_t bpos;
-       u_int32_t xid;
-       int error = 0;
-       struct mbuf *m, *mreq, *mb, *mb2, *mheadend;
-       struct nfsmount *nmp;
-       struct nfsreq myrep;
-
-       nmp = VFSTONFS(vp->v_mount);
-       nfsstats.rpccnt[NQNFSPROC_VACATED]++;
-       nfsm_reqhead(vp, NQNFSPROC_VACATED, NFSX_FH(1));
-       nfsm_fhtom(vp, 1);
-       m = mreq;
-       i = 0;
-       while (m) {
-               i += m->m_len;
-               m = m->m_next;
-       }
-       m = nfsm_rpchead(cred, nmp->nm_flag, NQNFSPROC_VACATED,
-               RPCAUTH_UNIX, 5 * NFSX_UNSIGNED, (char *)0,
-               0, (char *)NULL, mreq, i, &mheadend, &xid);
-       if (nmp->nm_sotype == SOCK_STREAM) {
-               M_PREPEND(m, NFSX_UNSIGNED, MB_WAIT);
-               if (m == NULL)
-                       return (ENOBUFS);
-               *mtod(m, u_int32_t *) = htonl(0x80000000 | (m->m_pkthdr.len -
-                       NFSX_UNSIGNED));
-       }
-       myrep.r_flags = 0;
-       myrep.r_nmp = nmp;
-       myrep.r_td = NULL;
-       if (nmp->nm_soflags & PR_CONNREQUIRED)
-               (void) nfs_sndlock(&myrep);
-       nfs_send(nmp->nm_so, nmp->nm_nam, m, &myrep);
-       if (nmp->nm_soflags & PR_CONNREQUIRED)
-               nfs_sndunlock(&myrep);
-nfsmout:
-       return (error);
-}
-
-/*
- * Called for client side callbacks
- */
-int
-nqnfs_callback(struct nfsmount *nmp, struct mbuf *mrep, struct mbuf *md,
-              caddr_t dpos)
-{
-       struct vnode *vp;
-       u_int32_t *tl;
-       int32_t t1;
-       nfsfh_t nfh;
-       fhandle_t *fhp;
-       struct nfsnode *np;
-       struct nfsd tnfsd;
-       struct nfssvc_sock *slp;
-       struct nfsrv_descript ndesc;
-       struct nfsrv_descript *nfsd = &ndesc;
-       struct mbuf **mrq = (struct mbuf **)0, *mb, *mreq;
-       int error = 0, cache = 0;
-       char *cp2, *bpos;
-       u_quad_t frev;
-
-#ifndef nolint
-       slp = NULL;
-#endif
-       nfsd->nd_mrep = mrep;
-       nfsd->nd_md = md;
-       nfsd->nd_dpos = dpos;
-       error = nfs_getreq(nfsd, &tnfsd, FALSE);
-       if (error)
-               return (error);
-       md = nfsd->nd_md;
-       dpos = nfsd->nd_dpos;
-       if (nfsd->nd_procnum != NQNFSPROC_EVICTED) {
-               m_freem(mrep);
-               return (EPERM);
-       }
-       fhp = &nfh.fh_generic;
-       nfsm_srvmtofh(fhp);
-       m_freem(mrep);
-       error = nfs_nget(nmp->nm_mountp, (nfsfh_t *)fhp, NFSX_V3FH, &np);
-       if (error)
-               return (error);
-       vp = NFSTOV(np);
-       if (np->n_timer.cqe_next != 0) {
-               np->n_expiry = 0;
-               np->n_flag |= NQNFSEVICTED;
-               if (nmp->nm_timerhead.cqh_first != np) {
-                       CIRCLEQ_REMOVE(&nmp->nm_timerhead, np, n_timer);
-                       CIRCLEQ_INSERT_HEAD(&nmp->nm_timerhead, np, n_timer);
-               }
-       }
-       vput(vp);
-       nfsm_srvdone;
-}
-
-
-/*
- * Nqnfs client helper daemon. Runs once a second to expire leases.
- * It also get authorization strings for "kerb" mounts.
- * It must start at the beginning of the list again after any potential
- * "sleep" since nfs_reclaim() called from vclean() can pull a node off
- * the list asynchronously.
- */
-int
-nqnfs_clientd(struct nfsmount *nmp, struct ucred *cred, struct nfsd_cargs *ncd,
-             int flag, caddr_t argp, struct thread *td)
-{
-       struct nfsnode *np;
-       struct vnode *vp;
-       struct nfsreq myrep;
-       struct nfsuid *nuidp, *nnuidp;
-       int error = 0, vpid;
-       int retdummy;
-
-       /*
-        * First initialize some variables
-        */
-
-       /*
-        * If an authorization string is being passed in, get it.
-        */
-       if ((flag & NFSSVC_GOTAUTH) &&
-           (nmp->nm_state & (NFSSTA_WAITAUTH | NFSSTA_DISMNT)) == 0) {
-           if (nmp->nm_state & NFSSTA_HASAUTH)
-               panic("cld kerb");
-           if ((flag & NFSSVC_AUTHINFAIL) == 0) {
-               if (ncd->ncd_authlen <= nmp->nm_authlen &&
-                   ncd->ncd_verflen <= nmp->nm_verflen &&
-                   !copyin(ncd->ncd_authstr,nmp->nm_authstr,ncd->ncd_authlen)&&
-                   !copyin(ncd->ncd_verfstr,nmp->nm_verfstr,ncd->ncd_verflen)){
-                   nmp->nm_authtype = ncd->ncd_authtype;
-                   nmp->nm_authlen = ncd->ncd_authlen;
-                   nmp->nm_verflen = ncd->ncd_verflen;
-#ifdef NFSKERB
-                   nmp->nm_key = ncd->ncd_key;
-#endif
-               } else
-                   nmp->nm_state |= NFSSTA_AUTHERR;
-           } else
-               nmp->nm_state |= NFSSTA_AUTHERR;
-           nmp->nm_state |= NFSSTA_HASAUTH;
-           wakeup((caddr_t)&nmp->nm_authlen);
-       } else
-           nmp->nm_state |= NFSSTA_WAITAUTH;
-
-       /*
-        * Loop every second updating queue until there is a termination sig.
-        */
-       while ((nmp->nm_state & NFSSTA_DISMNT) == 0) {
-           if (nmp->nm_flag & NFSMNT_NQNFS) {
-               /*
-                * If there are no outstanding requests (and therefore no
-                * processes in nfs_reply) and there is data in the receive
-                * queue, poke for callbacks.
-                */
-               if (TAILQ_EMPTY(&nfs_reqq) && nmp->nm_so &&
-                   nmp->nm_so->so_rcv.sb_cc > 0) {
-                       myrep.r_flags = R_GETONEREP;
-                       myrep.r_nmp = nmp;
-                       myrep.r_mrep = (struct mbuf *)0;
-                       myrep.r_td = NULL;
-                       nfs_reply(&myrep);
-               }
-
-               /*
-                * Loop through the leases, updating as required.
-                */
-               np = nmp->nm_timerhead.cqh_first;
-               while (np != (void *)&nmp->nm_timerhead &&
-                      (nmp->nm_state & NFSSTA_DISMINPROG) == 0) {
-                       vp = NFSTOV(np);
-                       vpid = vp->v_id;
-                       if (np->n_expiry < time_second) {
-                          if (vget(vp, LK_EXCLUSIVE, td) == 0) {
-                            nmp->nm_inprog = vp;
-                            if (vpid == vp->v_id) {
-                               CIRCLEQ_REMOVE(&nmp->nm_timerhead, np, n_timer);
-                               np->n_timer.cqe_next = 0;
-                               if (np->n_flag & (NLMODIFIED | NQNFSEVICTED)) {
-                                       if (np->n_flag & NQNFSEVICTED) {
-                                               if (vp->v_type == VDIR)
-                                                       nfs_invaldir(vp);
-                                               retdummy = 0;
-                                               cache_inval_vp(vp, 0, &retdummy);
-                                               (void) nfs_vinvalbuf(vp,
-                                                      V_SAVE, td, 0);
-                                               np->n_flag &= ~NQNFSEVICTED;
-                                               (void) nqnfs_vacated(vp, cred);
-                                       } else if (vp->v_type == VREG) {
-                                               (void) VOP_FSYNC(vp, MNT_WAIT, td);
-                                               np->n_flag &= ~NLMODIFIED;
-                                       }
-                               }
-                             }
-                             vput(vp);
-                             nmp->nm_inprog = NULLVP;
-                           }
-                       } else if ((np->n_expiry - NQ_RENEWAL) < time_second) {
-                           if ((np->n_flag & (NQNFSWRITE | NQNFSNONCACHE))
-                                == NQNFSWRITE &&
-                                !RB_EMPTY(&vp->v_rbdirty_tree) &&
-                                vget(vp, LK_EXCLUSIVE, td) == 0) {
-                                nmp->nm_inprog = vp;
-                                if (vpid == vp->v_id &&
-                                    nqnfs_getlease(vp, ND_WRITE, td)==0)
-                                       np->n_brev = np->n_lrev;
-                                vput(vp);
-                                nmp->nm_inprog = NULLVP;
-                           }
-                       } else
-                               break;
-                       if (np == nmp->nm_timerhead.cqh_first)
-                               break;
-                       np = nmp->nm_timerhead.cqh_first;
-               }
-           }
-
-           /*
-            * Get an authorization string, if required.
-            */
-           if ((nmp->nm_state & (NFSSTA_WAITAUTH | NFSSTA_DISMNT | NFSSTA_HASAUTH)) == 0) {
-               ncd->ncd_authuid = nmp->nm_authuid;
-               if (copyout((caddr_t)ncd, argp, sizeof (struct nfsd_cargs)))
-                       nmp->nm_state |= NFSSTA_WAITAUTH;
-               else
-                       return (ENEEDAUTH);
-           }
-
-           /*
-            * Wait a bit (no pun) and do it again.
-            */
-           if ((nmp->nm_state & NFSSTA_DISMNT) == 0 &&
-               (nmp->nm_state & (NFSSTA_WAITAUTH | NFSSTA_HASAUTH))) {
-                   error = tsleep((caddr_t)&nmp->nm_authstr, PCATCH,
-                       "nqnfstimr", hz / 3);
-                   if (error == EINTR || error == ERESTART)
-                       (void) dounmount(nmp->nm_mountp, 0, td);
-           }
-       }
-
-       /*
-        * Finally, we can free up the mount structure.
-        */
-       TAILQ_FOREACH_MUTABLE(nuidp, &nmp->nm_uidlruhead, nu_lru, nnuidp) {
-               LIST_REMOVE(nuidp, nu_hash);
-               TAILQ_REMOVE(&nmp->nm_uidlruhead, nuidp, nu_lru);
-               free((caddr_t)nuidp, M_NFSUID);
-       }
-       nfs_free_mount(nmp);
-       if (error == EWOULDBLOCK)
-               error = 0;
-       return (error);
-}
-
-#endif /* NFS_NOSERVER */
-
-/*
- * Adjust all timer queue expiry times when the time of day clock is changed.
- * Called from the settimeofday() syscall.
- */
-static int nqnfs_lease_updatetime_callback(struct mount *mp, void *data);
-
-void
-nqnfs_lease_updatetime(int deltat)
-{
-       struct nqlease *lp;
-
-       if (nqnfsstarttime != 0)
-               nqnfsstarttime += deltat;
-       crit_enter();
-       for (lp = nqtimerhead.cqh_first; lp != (void *)&nqtimerhead;
-           lp = lp->lc_timer.cqe_next)
-               lp->lc_expiry += deltat;
-       crit_exit();
-
-       /*
-        * Search the mount list for all nqnfs mounts and do their timer
-        * queues.
-        */
-       mountlist_scan(nqnfs_lease_updatetime_callback, 
-                       &deltat, MNTSCAN_FORWARD);
-}
-
-static
-int
-nqnfs_lease_updatetime_callback(struct mount *mp, void *data)
-{
-       int deltat = *(int *)data;
-       struct nfsmount *nmp;
-       struct nfsnode *np;
-
-       if (mp->mnt_stat.f_type == nfs_mount_type) {
-               nmp = VFSTONFS(mp);
-               if (nmp->nm_flag & NFSMNT_NQNFS) {
-                       for (np = nmp->nm_timerhead.cqh_first;
-                           np != (void *)&nmp->nm_timerhead;
-                           np = np->n_timer.cqe_next) {
-                               np->n_expiry += deltat;
-                       }
-               }
-       }
-       return(0);
-}
-
-#ifndef NFS_NOSERVER 
-/*
- * Lock a server lease.
- */
-static void
-nqsrv_locklease(struct nqlease *lp)
-{
-
-       while (lp->lc_flag & LC_LOCKED) {
-               lp->lc_flag |= LC_WANTED;
-               (void) tsleep((caddr_t)lp, 0, "nqlc", 0);
-       }
-       lp->lc_flag |= LC_LOCKED;
-       lp->lc_flag &= ~LC_WANTED;
-}
-
-/*
- * Unlock a server lease.
- */
-static void
-nqsrv_unlocklease(struct nqlease *lp)
-{
-
-       lp->lc_flag &= ~LC_LOCKED;
-       if (lp->lc_flag & LC_WANTED)
-               wakeup((caddr_t)lp);
-}
-#endif /* NFS_NOSERVER */
-
-/*
- * Update a client lease.
- */
-void
-nqnfs_clientlease(struct nfsmount *nmp, struct nfsnode *np, int rwflag,
-                 int cachable, time_t expiry, u_quad_t frev)
-{
-       struct nfsnode *tp;
-
-       if (np->n_timer.cqe_next != 0) {
-               CIRCLEQ_REMOVE(&nmp->nm_timerhead, np, n_timer);
-               if (rwflag == ND_WRITE)
-                       np->n_flag |= NQNFSWRITE;
-       } else if (rwflag == ND_READ)
-               np->n_flag &= ~NQNFSWRITE;
-       else
-               np->n_flag |= NQNFSWRITE;
-       if (cachable)
-               np->n_flag &= ~NQNFSNONCACHE;
-       else
-               np->n_flag |= NQNFSNONCACHE;
-       np->n_expiry = expiry;
-       np->n_lrev = frev;
-       tp = nmp->nm_timerhead.cqh_last;
-       while (tp != (void *)&nmp->nm_timerhead && tp->n_expiry > np->n_expiry)
-               tp = tp->n_timer.cqe_prev;
-       if (tp == (void *)&nmp->nm_timerhead) {
-               CIRCLEQ_INSERT_HEAD(&nmp->nm_timerhead, np, n_timer);
-       } else {
-               CIRCLEQ_INSERT_AFTER(&nmp->nm_timerhead, tp, np, n_timer);
-       }
-}
index a9cd248..191b817 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_serv.c  8.8 (Berkeley) 7/31/95
  * $FreeBSD: src/sys/nfs/nfs_serv.c,v 1.93.2.6 2002/12/29 18:19:53 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_serv.c,v 1.29 2006/03/24 18:35:34 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_serv.c,v 1.30 2006/03/27 16:18:39 dillon Exp $
  */
 
 /*
@@ -95,7 +95,6 @@
 #include "nfs.h"
 #include "xdr_subs.h"
 #include "nfsm_subs.h"
-#include "nqnfs.h"
 
 #ifdef NFSRV_DEBUG
 #define nfsdbprintf(info)      printf info
@@ -164,17 +163,13 @@ nfsrv3_access(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, getret;
+       int error = 0, rdonly, getret;
        char *cp2;
        struct mbuf *mb, *mreq, *mb2;
        struct vattr vattr, *vap = &vattr;
        u_long testmode, nfsmode;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        fhp = &nfh.fh_generic;
        nfsm_srvmtofh(fhp);
        nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED);
@@ -238,10 +233,9 @@ nfsrv_getattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache;
+       int error = 0, rdonly;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        fhp = &nfh.fh_generic;
@@ -253,7 +247,6 @@ nfsrv_getattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                error = 0;
                goto nfsmout;
        }
-       nqsrv_getl(vp, ND_READ);
        error = VOP_GETATTR(vp, vap, td);
        vput(vp);
        vp = NULL;
@@ -293,11 +286,10 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, preat_ret = 1, postat_ret = 1;
+       int error = 0, rdonly, preat_ret = 1, postat_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3), gcheck = 0;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
-       u_quad_t frev;
        struct timespec guard;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
@@ -359,7 +351,6 @@ nfsrv_setattr(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
         * vp now an active resource, pay careful attention to cleanup
         */
 
-       nqsrv_getl(vp, ND_WRITE);
        if (v3) {
                error = preat_ret = VOP_GETATTR(vp, &preat, td);
                if (!error && gcheck &&
@@ -440,12 +431,11 @@ nfsrv_lookup(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, cache = 0, len, dirattr_ret = 1;
+       int error = 0, len, dirattr_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3), pubflag;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
        struct vattr va, dirattr, *vap = &va;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -562,11 +552,6 @@ nfsrv_lookup(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                goto nfsmout;
        }
 
-#if 0
-       /* XXX not sure how to deal with this */
-       nqsrv_getl(ndp->ni_startdir, ND_READ);
-#endif
-
        /*
         * Clear out some resources prior to potentially blocking.  This
         * is not as critical as ni_dvp resources in other routines, but
@@ -627,7 +612,7 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, i, tlen, len, getret;
+       int error = 0, rdonly, i, tlen, len, getret;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
        struct mbuf *mb, *mb2, *mp2, *mp3, *mreq;
@@ -636,7 +621,6 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        nfsfh_t nfh;
        fhandle_t *fhp;
        struct uio io, *uiop = &io;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
 #ifndef nolint
@@ -688,7 +672,6 @@ nfsrv_readlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                        error = ENXIO;
                goto out;
        }
-       nqsrv_getl(vp, ND_READ);
        error = VOP_READLINK(vp, uiop, cred);
 out:
        getret = VOP_GETATTR(vp, &attr, td);
@@ -738,7 +721,7 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        int32_t t1;
        int i;
        caddr_t bpos;
-       int error = 0, rdonly, cache, cnt, len, left, siz, tlen, getret;
+       int error = 0, rdonly, cnt, len, left, siz, tlen, getret;
        int v3 = (nfsd->nd_flag & ND_NFSV3), reqlen;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
@@ -751,7 +734,6 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct nfsheur *nh;
        off_t off;
        int ioflag = 0;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        fhp = &nfh.fh_generic;
@@ -788,7 +770,6 @@ nfsrv_read(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                        error = (vp->v_type == VDIR) ? EISDIR : EACCES;
        }
        if (!error) {
-           nqsrv_getl(vp, ND_READ);
            if ((error = nfsrv_access(vp, VREAD, cred, rdonly, td, 1)) != 0)
                error = nfsrv_access(vp, VEXEC, cred, rdonly, td, 1);
        }
@@ -987,7 +968,7 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, len, forat_ret = 1;
+       int error = 0, rdonly, len, forat_ret = 1;
        int ioflags, aftat_ret = 1, retlen, zeroing, adjust;
        int stable = NFSV3WRITE_FILESYNC;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
@@ -998,7 +979,6 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        fhandle_t *fhp;
        struct uio io, *uiop = &io;
        off_t off;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        if (mrep == NULL) {
@@ -1078,7 +1058,6 @@ nfsrv_write(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                        error = (vp->v_type == VDIR) ? EISDIR : EACCES;
        }
        if (!error) {
-               nqsrv_getl(vp, ND_WRITE);
                error = nfsrv_access(vp, VWRITE, cred, rdonly, td, 1);
        }
        if (error) {
@@ -1191,13 +1170,13 @@ nfsrv_writegather(struct nfsrv_descript **ndp, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos, dpos;
-       int error = 0, rdonly, cache, len, forat_ret = 1;
+       int error = 0, rdonly, len, forat_ret = 1;
        int ioflags, aftat_ret = 1, adjust, v3, zeroing;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq, *mrep, *md;
        struct vnode *vp = NULL;
        struct uio io, *uiop = &io;
-       u_quad_t frev, cur_usec;
+       u_quad_t cur_usec;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
 #ifndef nolint
@@ -1364,7 +1343,6 @@ loop1:
                    vp = NULL;
                }
                if (!error) {
-                   nqsrv_getl(vp, ND_WRITE);
                    error = nfsrv_access(vp, VWRITE, cred, rdonly, td, 1);
                }
     
@@ -1562,7 +1540,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct nlookupdata nd;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdev, cache, len, tsize, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, rdev, len, tsize, dirfor_ret = 1, diraft_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3), how, exclusive_flag = 0;
        caddr_t cp;
        char *cp2;
@@ -1572,7 +1550,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vnode *vp;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev, tempsize;
+       u_quad_t tempsize;
        u_char cverf[NFSX_V3CREATEVERF];
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
@@ -1683,7 +1661,6 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                if (vap->va_mode == (mode_t)VNOVAL)
                        vap->va_mode = 0;
                if (vap->va_type == VREG || vap->va_type == VSOCK) {
-                       nqsrv_getl(dvp, ND_WRITE);
                        vput(dvp);
                        dvp = NULL;
                        error = VOP_NCREATE(nd.nl_ncp, &vp, nd.nl_cred, vap);
@@ -1713,7 +1690,6 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                                goto nfsmreply0;
                         }
                        vap->va_rdev = rdev;
-                       nqsrv_getl(dvp, ND_WRITE);
 
                        vput(dvp);
                        dvp = NULL;
@@ -1766,7 +1742,6 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                        error = nfsrv_access(vp, VWRITE, cred,
                            (nd.nl_flags & NLC_NFS_RDONLY), td, 0);
                        if (!error) {
-                               nqsrv_getl(vp, ND_WRITE);
                                tempsize = vap->va_size;
                                VATTR_NULL(vap);
                                vap->va_size = tempsize;
@@ -1842,7 +1817,7 @@ nfsrv_mknod(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct nlookupdata nd;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, cache, len, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, len, dirfor_ret = 1, diraft_ret = 1;
        u_int32_t major, minor;
        enum vtype vtyp;
        char *cp2;
@@ -1852,7 +1827,6 @@ nfsrv_mknod(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vnode *vp;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -1907,12 +1881,10 @@ nfsrv_mknod(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        if (vap->va_mode == (mode_t)VNOVAL)
                vap->va_mode = 0;
        if (vtyp == VSOCK) {
-               nqsrv_getl(dvp, ND_WRITE);
                error = VOP_NCREATE(nd.nl_ncp, &vp, nd.nl_cred, vap);
        } else {
                if (vtyp != VFIFO && (error = suser_cred(cred, 0)))
                        goto out;
-               nqsrv_getl(dvp, ND_WRITE);
 
                error = VOP_NMKNOD(nd.nl_ncp, &vp, nd.nl_cred, vap);
                if (error)
@@ -2012,7 +1984,7 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, cache, len, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, len, dirfor_ret = 1, diraft_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
        struct mbuf *mb, *mreq;
@@ -2022,7 +1994,6 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vattr dirfor, diraft;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -2055,8 +2026,6 @@ nfsrv_remove(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                }
 out:
                if (!error) {
-                       nqsrv_getl(dvp, ND_WRITE);
-                       nqsrv_getl(vp, ND_WRITE);
                        if (dvp) {
                                if (dvp == vp)
                                        vrele(dvp);
@@ -2107,7 +2076,7 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, cache = 0, len, len2, fdirfor_ret = 1, fdiraft_ret = 1;
+       int error = 0, len, len2, fdirfor_ret = 1, fdiraft_ret = 1;
        int tdirfor_ret = 1, tdiraft_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
@@ -2119,7 +2088,6 @@ nfsrv_rename(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vattr fdirfor, fdiraft, tdirfor, tdiraft;
        nfsfh_t fnfh, tnfh;
        fhandle_t *ffhp, *tfhp;
-       u_quad_t frev;
        uid_t saved_uid;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
@@ -2272,14 +2240,6 @@ out:
                 * locks prior to returning so we need to clear the pointers
                 * to bypass cleanup code later on.
                 */
-#if 0
-               /* XXX should be handled by NRENAME */
-               nqsrv_getl(fdvp, ND_WRITE);
-               nqsrv_getl(tdvp, ND_WRITE);
-               if (tvp) {
-                       nqsrv_getl(tvp, ND_WRITE);
-               }
-#endif
                error = VOP_NRENAME(fromnd.nl_ncp, tond.nl_ncp, tond.nl_cred);
        } else {
                if (error == -1)
@@ -2325,7 +2285,7 @@ nfsrv_link(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache = 0, len, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, rdonly, len, dirfor_ret = 1, diraft_ret = 1;
        int getret = 1, v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
        struct mbuf *mb, *mreq;
@@ -2336,7 +2296,6 @@ nfsrv_link(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vattr dirfor, diraft, at;
        nfsfh_t nfh, dnfh;
        fhandle_t *fhp, *dfhp;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -2381,10 +2340,6 @@ nfsrv_link(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                error = EXDEV;
 out:
        if (!error) {
-#if 0
-               nqsrv_getl(xp, ND_WRITE);
-               nqsrv_getl(vp, ND_WRITE);
-#endif
                error = VOP_NLINK(nd.nl_ncp, xp, nd.nl_cred);
        }
        /* fall through */
@@ -2439,14 +2394,13 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        char *bpos, *pathcp = (char *)0, *cp2;
        struct uio io;
        struct iovec iv;
-       int error = 0, cache = 0, len, len2, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, len, len2, dirfor_ret = 1, diraft_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        struct mbuf *mb, *mreq, *mb2;
        struct vnode *dirp;
        struct vnode *vp;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -2493,9 +2447,6 @@ nfsrv_symlink(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
 
        if (vap->va_mode == (mode_t)VNOVAL)
                vap->va_mode = 0;
-#if 0
-       nqsrv_getl(dvp, ND_WRITE);
-#endif
        error = VOP_NSYMLINK(nd.nl_ncp, &vp, nd.nl_cred, vap, pathcp);
        if (error == 0) {
                bzero((caddr_t)fhp, sizeof(nfh));
@@ -2594,7 +2545,7 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, cache = 0, len, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, len, dirfor_ret = 1, diraft_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
@@ -2602,7 +2553,6 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vnode *vp;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -2652,9 +2602,6 @@ nfsrv_mkdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
         */
        if (vap->va_mode == (mode_t)VNOVAL)
                vap->va_mode = 0;
-#if 0
-       nqsrv_getl(nd.ni_dvp, ND_WRITE);
-#endif
        error = VOP_NMKDIR(nd.nl_ncp, &vp, nd.nl_cred, vap);
 
        if (error == 0) {
@@ -2705,7 +2652,7 @@ nfsrv_rmdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, cache = 0, len, dirfor_ret = 1, diraft_ret = 1;
+       int error = 0, len, dirfor_ret = 1, diraft_ret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
        struct mbuf *mb, *mreq;
@@ -2715,7 +2662,6 @@ nfsrv_rmdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        nfsfh_t nfh;
        fhandle_t *fhp;
        struct nlookupdata nd;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
        nlookup_zero(&nd);
@@ -2755,10 +2701,6 @@ out:
         * component is freed by the VOP after either.
         */
        if (!error) {
-#if 0
-               nqsrv_getl(nd.ni_dvp, ND_WRITE);
-               nqsrv_getl(vp, ND_WRITE);
-#endif
                vput(vp);
                vp = NULL;
                error = VOP_NRMDIR(nd.nl_ncp, nd.nl_cred);
@@ -2845,9 +2787,9 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct uio io;
        struct iovec iv;
        int len, nlen, rem, xfer, tsiz, i, error = 0, getret = 1;
-       int siz, cnt, fullsiz, eofflag, rdonly, cache, ncookies;
+       int siz, cnt, fullsiz, eofflag, rdonly, ncookies;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
-       u_quad_t frev, off, toff, verf;
+       u_quad_t off, toff, verf;
        u_long *cookies = NULL, *cookiep; /* needs to be int64_t or off_t */
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
@@ -2891,7 +2833,6 @@ nfsrv_readdir(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
         * Obtain lock on vnode for this section of the code
         */
 
-       nqsrv_getl(vp, ND_READ);
        if (v3) {
                error = getret = VOP_GETATTR(vp, &at, td);
 #if 0
@@ -3139,8 +3080,8 @@ nfsrv_readdirplus(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vattr va, at, *vap = &va;
        struct nfs_fattr *fp;
        int len, nlen, rem, xfer, tsiz, i, error = 0, getret = 1;
-       int siz, cnt, fullsiz, eofflag, rdonly, cache, dirlen, ncookies;
-       u_quad_t frev, off, toff, verf;
+       int siz, cnt, fullsiz, eofflag, rdonly, dirlen, ncookies;
+       u_quad_t off, toff, verf;
        u_long *cookies = NULL, *cookiep; /* needs to be int64_t or off_t */
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
@@ -3183,7 +3124,6 @@ nfsrv_readdirplus(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
                error = NFSERR_BAD_COOKIE;
 #endif
        if (!error) {
-               nqsrv_getl(vp, ND_READ);
                error = nfsrv_access(vp, VEXEC, cred, rdonly, td, 0);
        }
        if (error) {
@@ -3466,15 +3406,12 @@ nfsrv_commit(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, for_ret = 1, aft_ret = 1, cnt, cache;
+       int error = 0, rdonly, for_ret = 1, aft_ret = 1, cnt;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
-       u_quad_t frev, off;
+       u_quad_t off;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        fhp = &nfh.fh_generic;
        nfsm_srvmtofh(fhp);
        nfsm_dissect(tl, u_int32_t *, 3 * NFSX_UNSIGNED);
@@ -3598,7 +3535,7 @@ nfsrv_statfs(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        u_int32_t *tl;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, getret = 1;
+       int error = 0, rdonly, getret = 1;
        int v3 = (nfsd->nd_flag & ND_NFSV3);
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
@@ -3607,12 +3544,9 @@ nfsrv_statfs(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        nfsfh_t nfh;
        fhandle_t *fhp;
        struct statfs statfs;
-       u_quad_t frev, tval;
+       u_quad_t tval;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        fhp = &nfh.fh_generic;
        nfsm_srvmtofh(fhp);
        error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam,
@@ -3681,20 +3615,17 @@ nfsrv_fsinfo(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct nfsv3_fsinfo *sip;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, getret = 1, pref;
+       int error = 0, rdonly, getret = 1, pref;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
        struct vnode *vp = NULL;
        struct vattr at;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev, maxfsize;
+       u_quad_t maxfsize;
        struct statfs sb;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        fhp = &nfh.fh_generic;
        nfsm_srvmtofh(fhp);
        error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam,
@@ -3760,7 +3691,7 @@ nfsrv_pathconf(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct nfsv3_pathconf *pc;
        int32_t t1;
        caddr_t bpos;
-       int error = 0, rdonly, cache, getret = 1;
+       int error = 0, rdonly, getret = 1;
        register_t linkmax, namemax, chownres, notrunc;
        char *cp2;
        struct mbuf *mb, *mb2, *mreq;
@@ -3768,12 +3699,8 @@ nfsrv_pathconf(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
        struct vattr at;
        nfsfh_t nfh;
        fhandle_t *fhp;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        fhp = &nfh.fh_generic;
        nfsm_srvmtofh(fhp);
        error = nfsrv_fhtovp(fhp, 1, &vp, cred, slp, nam,
@@ -3830,14 +3757,10 @@ nfsrv_null(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
 {
        struct mbuf *mrep = nfsd->nd_mrep;
        caddr_t bpos;
-       int error = NFSERR_RETVOID, cache;
+       int error = NFSERR_RETVOID;
        struct mbuf *mb, *mreq;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        nfsm_reply(0);
        nfsm_srvdone;
 }
@@ -3852,14 +3775,10 @@ nfsrv_noop(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
 {
        struct mbuf *mrep = nfsd->nd_mrep;
        caddr_t bpos;
-       int error, cache;
+       int error;
        struct mbuf *mb, *mreq;
-       u_quad_t frev;
 
        nfsdbprintf(("%s %d\n", __FILE__, __LINE__));
-#ifndef nolint
-       cache = 0;
-#endif
        if (nfsd->nd_repstat)
                error = nfsd->nd_repstat;
        else
index 2fa97e4..4227cf7 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_socket.c        8.5 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nfs_socket.c,v 1.60.2.6 2003/03/26 01:44:46 alfred Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_socket.c,v 1.32 2006/03/01 15:09:35 drhodus Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_socket.c,v 1.33 2006/03/27 16:18:39 dillon Exp $
  */
 
 /*
@@ -73,7 +73,6 @@
 #include "nfsmount.h"
 #include "nfsnode.h"
 #include "nfsrtt.h"
-#include "nqnfs.h"
 
 #define        TRUE    1
 #define        FALSE   0
 extern u_int32_t rpc_reply, rpc_msgdenied, rpc_mismatch, rpc_vers,
        rpc_auth_unix, rpc_msgaccepted, rpc_call, rpc_autherr,
        rpc_auth_kerb;
-extern u_int32_t nfs_prog, nqnfs_prog;
-extern time_t nqnfsstarttime;
+extern u_int32_t nfs_prog;
 extern struct nfsstats nfsstats;
 extern int nfsv3_procid[NFS_NPROCS];
 extern int nfs_ticks;
@@ -191,8 +189,8 @@ int (*nfsrv3_procs[NFS_NPROCS]) (struct nfsrv_descript *nd,
        nfsrv_fsinfo,
        nfsrv_pathconf,
        nfsrv_commit,
-       nqnfsrv_getlease,
-       nqnfsrv_vacated,
+       nfsrv_noop,
+       nfsrv_noop,
        nfsrv_noop,
        nfsrv_noop
 };
@@ -806,18 +804,8 @@ nfs_reply(struct nfsreq *myrep)
                nfsm_dissect(tl, u_int32_t *, 2*NFSX_UNSIGNED);
                rxid = *tl++;
                if (*tl != rpc_reply) {
-#ifndef NFS_NOSERVER
-                       if (nmp->nm_flag & NFSMNT_NQNFS) {
-                               if (nqnfs_callback(nmp, mrep, md, dpos))
-                                       nfsstats.rpcinvalid++;
-                       } else {
-                               nfsstats.rpcinvalid++;
-                               m_freem(mrep);
-                       }
-#else
                        nfsstats.rpcinvalid++;
                        m_freem(mrep);
-#endif
 nfsmout:
                        if (myrep->r_flags & R_GETONEREP)
                                return (0);
@@ -943,16 +931,14 @@ nfs_request(struct vnode *vp, struct mbuf *mrest, int procnum,
        int i;
        struct nfsmount *nmp;
        struct mbuf *m, *md, *mheadend;
-       struct nfsnode *np;
        char nickv[RPCX_NICKVERF];
-       time_t reqtime, waituntil;
+       time_t waituntil;
        caddr_t dpos, cp2;
-       int t1, nqlflag, cachable, error = 0, mrest_len, auth_len, auth_type;
-       int trylater_delay = NQ_TRYLATERDEL, trylater_cnt = 0, failed_auth = 0;
+       int t1, error = 0, mrest_len, auth_len, auth_type;
+       int trylater_delay = 15, trylater_cnt = 0, failed_auth = 0;
        int verf_len, verf_type;
        int retdummy;
        u_int32_t xid;
-       u_quad_t frev;
        char *auth_str, *verf_str;
        NFSKERBKEY_T key;               /* save session key */
 
@@ -1051,9 +1037,6 @@ tryagain:
        crit_enter();
        TAILQ_INSERT_TAIL(&nfs_reqq, rep, r_chain);
 
-       /* Get send time for nqnfs */
-       reqtime = time_second;
-
        /*
         * If backing off another request or avoiding congestion, don't
         * send this one now but let timer do it.  If not timing a request,
@@ -1208,24 +1191,6 @@ tryagain:
                        return (error);
                }
 
-               /*
-                * For nqnfs, get any lease in reply
-                */
-               if (nmp->nm_flag & NFSMNT_NQNFS) {
-                       nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED);
-                       if (*tl) {
-                               np = VTONFS(vp);
-                               nqlflag = fxdr_unsigned(int, *tl);
-                               nfsm_dissect(tl, u_int32_t *, 4*NFSX_UNSIGNED);
-                               cachable = fxdr_unsigned(int, *tl++);
-                               reqtime += fxdr_unsigned(int, *tl++);
-                               if (reqtime > time_second) {
-                                   frev = fxdr_hyper(tl);
-                                   nqnfs_clientlease(nmp, np, nqlflag,
-                                       cachable, reqtime, frev);
-                               }
-                       }
-               }
                *mrp = mrep;
                *mdp = md;
                *dposp = dpos;
@@ -1248,8 +1213,7 @@ nfsmout:
  */
 int
 nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
-           int err, int cache, u_quad_t *frev, struct mbuf **mrq,
-           struct mbuf **mbp, caddr_t *bposp)
+           int err, struct mbuf **mrq, struct mbuf **mbp, caddr_t *bposp)
 {
        u_int32_t *tl;
        struct mbuf *mreq;
@@ -1335,13 +1299,8 @@ nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
                case EPROGMISMATCH:
                        *tl = txdr_unsigned(RPC_PROGMISMATCH);
                        nfsm_build(tl, u_int32_t *, 2 * NFSX_UNSIGNED);
-                       if (nd->nd_flag & ND_NQNFS) {
-                               *tl++ = txdr_unsigned(3);
-                               *tl = txdr_unsigned(3);
-                       } else {
-                               *tl++ = txdr_unsigned(2);
-                               *tl = txdr_unsigned(3);
-                       }
+                       *tl++ = txdr_unsigned(2);
+                       *tl = txdr_unsigned(3);
                        break;
                case EPROCUNAVAIL:
                        *tl = txdr_unsigned(RPC_PROCUNAVAIL);
@@ -1362,21 +1321,6 @@ nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
                };
        }
 
-       /*
-        * For nqnfs, piggyback lease as requested.
-        */
-       if ((nd->nd_flag & ND_NQNFS) && err == 0) {
-               if (nd->nd_flag & ND_LEASE) {
-                       nfsm_build(tl, u_int32_t *, 5 * NFSX_UNSIGNED);
-                       *tl++ = txdr_unsigned(nd->nd_flag & ND_LEASE);
-                       *tl++ = txdr_unsigned(cache);
-                       *tl++ = txdr_unsigned(nd->nd_duration);
-                       txdr_hyper(*frev, tl);
-               } else {
-                       nfsm_build(tl, u_int32_t *, NFSX_UNSIGNED);
-                       *tl = 0;
-               }
-       }
        if (mrq != NULL)
            *mrq = mreq;
        *mbp = mb;
@@ -1404,7 +1348,6 @@ nfs_timer(void *arg /* never used */)
        int timeo;
        int error;
 #ifndef NFS_NOSERVER
-       static long lasttime = 0;
        struct nfssvc_sock *slp;
        u_quad_t cur_usec;
 #endif /* NFS_NOSERVER */
@@ -1508,13 +1451,6 @@ skip:
                rep->r_flags &= ~R_LOCKED;
        }
 #ifndef NFS_NOSERVER
-       /*
-        * Call the nqnfs server timer once a second to handle leases.
-        */
-       if (lasttime != time_second) {
-               lasttime = time_second;
-               nqnfs_serverd();
-       }
 
        /*
         * Scan the write gathering queues for writes that need to be
@@ -1835,7 +1771,7 @@ nfs_getreq(struct nfsrv_descript *nd, struct nfsd *nfsd, int has_header)
        caddr_t dpos, cp2, cp;
        u_int32_t nfsvers, auth_type;
        uid_t nickuid;
-       int error = 0, nqnfs = 0, ticklen;
+       int error = 0, ticklen;
        struct mbuf *mrep, *md;
        struct nfsuid *nuidp;
        struct timeval tvin, tvout;
@@ -1863,31 +1799,24 @@ nfs_getreq(struct nfsrv_descript *nd, struct nfsd *nfsd, int has_header)
                return (0);
        }
        if (*tl != nfs_prog) {
-               if (*tl == nqnfs_prog)
-                       nqnfs++;
-               else {
-                       nd->nd_repstat = EPROGUNAVAIL;
-                       nd->nd_procnum = NFSPROC_NOOP;
-                       return (0);
-               }
+               nd->nd_repstat = EPROGUNAVAIL;
+               nd->nd_procnum = NFSPROC_NOOP;
+               return (0);
        }
        tl++;
        nfsvers = fxdr_unsigned(u_int32_t, *tl++);
-       if (((nfsvers < NFS_VER2 || nfsvers > NFS_VER3) && !nqnfs) ||
-               (nfsvers != NQNFS_VER3 && nqnfs)) {
+       if (nfsvers < NFS_VER2 || nfsvers > NFS_VER3) {
                nd->nd_repstat = EPROGMISMATCH;
                nd->nd_procnum = NFSPROC_NOOP;
                return (0);
        }
-       if (nqnfs)
-               nd->nd_flag = (ND_NFSV3 | ND_NQNFS);
-       else if (nfsvers == NFS_VER3)
+       if (nfsvers == NFS_VER3)
                nd->nd_flag = ND_NFSV3;
        nd->nd_procnum = fxdr_unsigned(u_int32_t, *tl++);
        if (nd->nd_procnum == NFSPROC_NULL)
                return (0);
        if (nd->nd_procnum >= NFS_NPROCS ||
-               (!nqnfs && nd->nd_procnum >= NQNFSPROC_GETLEASE) ||
+               (nd->nd_procnum >= NQNFSPROC_GETLEASE) ||
                (!nd->nd_flag && nd->nd_procnum > NFSV2PROC_STATFS)) {
                nd->nd_repstat = EPROCUNAVAIL;
                nd->nd_procnum = NFSPROC_NOOP;
@@ -2043,19 +1972,6 @@ nfs_getreq(struct nfsrv_descript *nd, struct nfsd *nfsd, int has_header)
                return (0);
        }
 
-       /*
-        * For nqnfs, get piggybacked lease request.
-        */
-       if (nqnfs && nd->nd_procnum != NQNFSPROC_EVICTED) {
-               nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED);
-               nd->nd_flag |= fxdr_unsigned(int, *tl);
-               if (nd->nd_flag & ND_LEASE) {
-                       nfsm_dissect(tl, u_int32_t *, NFSX_UNSIGNED);
-                       nd->nd_duration = fxdr_unsigned(int32_t, *tl);
-               } else
-                       nd->nd_duration = NQ_MINLEASE;
-       } else
-               nd->nd_duration = NQ_MINLEASE;
        nd->nd_md = md;
        nd->nd_dpos = dpos;
        return (0);
index c833508..0c90f22 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_srvcache.c      8.3 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nfs_srvcache.c,v 1.21 2000/02/13 03:32:06 peter Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_srvcache.c,v 1.9 2004/08/02 13:22:34 joerg Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_srvcache.c,v 1.10 2006/03/27 16:18:39 dillon Exp $
  */
 
 /*
@@ -195,7 +195,7 @@ loop:
                        } else if (rp->rc_flag & RC_REPSTATUS) {
                                nfsstats.srvcache_nonidemdonehits++;
                                nfs_rephead(0, nd, slp, rp->rc_status,
-                                  0, (u_quad_t *)0, repp, &mb, &bpos);
+                                           repp, &mb, &bpos);
                                ret = RC_REPLY;
                        } else if (rp->rc_flag & RC_REPMBUF) {
                                nfsstats.srvcache_nonidemdonehits++;
index 563c9e0..7d11cdb 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_subs.c  8.8 (Berkeley) 5/22/95
  * $FreeBSD: /repoman/r/ncvs/src/sys/nfsclient/nfs_subs.c,v 1.128 2004/04/14 23:23:55 peadar Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_subs.c,v 1.34 2006/02/21 19:00:19 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_subs.c,v 1.35 2006/03/27 16:18:39 dillon Exp $
  */
 
 /*
@@ -74,7 +74,6 @@
 #include "nfsnode.h"
 #include "xdr_subs.h"
 #include "nfsm_subs.h"
-#include "nqnfs.h"
 #include "nfsrtt.h"
 
 #include <netinet/in.h>
@@ -87,7 +86,7 @@ u_int32_t nfs_xdrneg1;
 u_int32_t rpc_call, rpc_vers, rpc_reply, rpc_msgdenied, rpc_autherr,
        rpc_mismatch, rpc_auth_unix, rpc_msgaccepted,
        rpc_auth_kerb;
-u_int32_t nfs_prog, nqnfs_prog, nfs_true, nfs_false;
+u_int32_t nfs_prog, nfs_true, nfs_false;
 
 /* And other global data */
 static u_int32_t nfs_xid = 0;
@@ -107,18 +106,14 @@ int nfssvc_sockhead_flag;
 struct nfsd_head nfsd_head;
 int nfsd_head_flag;
 struct nfs_bufq nfs_bufq;
-struct nqtimerhead nqtimerhead;
 struct nqfhhashhead *nqfhhashtbl;
 u_long nqfhhash;
 
-static void (*nfs_prev_lease_updatetime) (int);
 static int nfs_prev_nfssvc_sy_narg;
 static sy_call_t *nfs_prev_nfssvc_sy_call;
 
 #ifndef NFS_NOSERVER
 
-static int (*nfs_prev_vop_lease_check)(struct vop_lease_args *);
-
 /*
  * Mapping of old NFS Version 2 RPC numbers to generic numbers.
  */
@@ -546,12 +541,7 @@ static short *nfsrv_v3errmap[] = {
 #endif /* NFS_NOSERVER */
 
 extern struct nfsrtt nfsrtt;
-extern time_t nqnfsstarttime;
-extern int nqsrv_clockskew;
-extern int nqsrv_writeslack;
-extern int nqsrv_maxlease;
 extern struct nfsstats nfsstats;
-extern int nqnfs_piggy[NFS_NPROCS];
 extern nfstype nfsv2_type[9];
 extern nfstype nfsv3_type[9];
 extern struct nfsnodehashhead *nfsnodehashtbl;
@@ -585,33 +575,12 @@ struct mbuf *
 nfsm_reqh(struct vnode *vp, u_long procid, int hsiz, caddr_t *bposp)
 {
        struct mbuf *mb;
-       u_int32_t *tl;
        caddr_t bpos;
-       struct mbuf *mb2;
-       struct nfsmount *nmp;
-       int nqflag;
 
        mb = m_getl(hsiz, MB_WAIT, MT_DATA, 0, NULL);
        mb->m_len = 0;
        bpos = mtod(mb, caddr_t);
 
-       /*
-        * For NQNFS, add lease request.
-        */
-       if (vp) {
-               nmp = VFSTONFS(vp->v_mount);
-               if (nmp->nm_flag & NFSMNT_NQNFS) {
-                       nqflag = NQNFS_NEEDLEASE(vp, procid);
-                       if (nqflag) {
-                               nfsm_build(tl, u_int32_t *, 2*NFSX_UNSIGNED);
-                               *tl++ = txdr_unsigned(nqflag);
-                               *tl = txdr_unsigned(nmp->nm_leaseterm);
-                       } else {
-                               nfsm_build(tl, u_int32_t *, NFSX_UNSIGNED);
-                               *tl = 0;
-                       }
-               }
-       }
        /* Finally, return values */
        *bposp = bpos;
        return (mb);
@@ -666,16 +635,11 @@ nfsm_rpchead(struct ucred *cr, int nmflag, int procid, int auth_type,
        *tl++ = *xidp = txdr_unsigned(nfs_xid);
        *tl++ = rpc_call;
        *tl++ = rpc_vers;
-       if (nmflag & NFSMNT_NQNFS) {
-               *tl++ = txdr_unsigned(NQNFS_PROG);
-               *tl++ = txdr_unsigned(NQNFS_VER3);
-       } else {
-               *tl++ = txdr_unsigned(NFS_PROG);
-               if (nmflag & NFSMNT_NFSV3)
-                       *tl++ = txdr_unsigned(NFS_VER3);
-               else
-                       *tl++ = txdr_unsigned(NFS_VER2);
-       }
+       *tl++ = txdr_unsigned(NFS_PROG);
+       if (nmflag & NFSMNT_NFSV3)
+               *tl++ = txdr_unsigned(NFS_VER3);
+       else
+               *tl++ = txdr_unsigned(NFS_VER2);
        if (nmflag & NFSMNT_NFSV3)
                *tl++ = txdr_unsigned(procid);
        else
@@ -1084,7 +1048,6 @@ nfs_init(struct vfsconf *vfsp)
        rpc_auth_unix = txdr_unsigned(RPCAUTH_UNIX);
        rpc_auth_kerb = txdr_unsigned(RPCAUTH_KERB4);
        nfs_prog = txdr_unsigned(NFS_PROG);
-       nqnfs_prog = txdr_unsigned(NQNFS_PROG);
        nfs_true = txdr_unsigned(TRUE);
        nfs_false = txdr_unsigned(FALSE);
        nfs_xdrneg1 = txdr_unsigned(-1);
@@ -1102,17 +1065,6 @@ nfs_init(struct vfsconf *vfsp)
        nfsrv_initcache();              /* Init the server request cache */
 #endif
 
-       /*
-        * Initialize the nqnfs server stuff.
-        */
-       if (nqnfsstarttime == 0) {
-               nqnfsstarttime = boottime.tv_sec + nqsrv_maxlease
-                       + nqsrv_clockskew + nqsrv_writeslack;
-               NQLOADNOVRAM(nqnfsstarttime);
-               CIRCLEQ_INIT(&nqtimerhead);
-               nqfhhashtbl = hashinit(NQLCHSZ, M_NQLEASE, &nqfhhash);
-       }
-
        /*
         * Initialize reply list and start timer
         */
@@ -1120,16 +1072,6 @@ nfs_init(struct vfsconf *vfsp)
 
        nfs_timer(0);
 
-       /*
-        * Set up lease_check and lease_updatetime so that other parts
-        * of the system can call us, if we are loadable.
-        */
-#ifndef NFS_NOSERVER
-       nfs_prev_vop_lease_check = default_vnode_vops->vop_lease;
-       default_vnode_vops->vop_lease = nqnfs_vop_lease_check;
-#endif
-       nfs_prev_lease_updatetime = lease_updatetime;
-       lease_updatetime = nfs_lease_updatetime;
        nfs_prev_nfssvc_sy_narg = sysent[SYS_nfssvc].sy_narg;
        sysent[SYS_nfssvc].sy_narg = 2;
        nfs_prev_nfssvc_sy_call = sysent[SYS_nfssvc].sy_call;
@@ -1145,10 +1087,6 @@ nfs_uninit(struct vfsconf *vfsp)
 {
        callout_stop(&nfs_timer_handle);
        nfs_mount_type = -1;
-#ifndef NFS_NOSERVER
-       default_vnode_vops->vop_lease = nfs_prev_vop_lease_check;
-#endif
-       lease_updatetime = nfs_prev_lease_updatetime;
        sysent[SYS_nfssvc].sy_narg = nfs_prev_nfssvc_sy_narg;
        sysent[SYS_nfssvc].sy_call = nfs_prev_nfssvc_sy_call;
        return (0);
index de9b355..cb2ae42 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_syscalls.c      8.5 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nfs_syscalls.c,v 1.58.2.1 2000/11/26 02:30:06 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_syscalls.c,v 1.22 2006/02/17 19:18:07 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_syscalls.c,v 1.23 2006/03/27 16:18:39 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -69,7 +69,6 @@
 #include "nfsrvcache.h"
 #include "nfsmount.h"
 #include "nfsnode.h"
-#include "nqnfs.h"
 #include "nfsrtt.h"
 
 #include <sys/thread2.h>
@@ -82,8 +81,6 @@ extern int32_t (*nfsrv3_procs[NFS_NPROCS]) (struct nfsrv_descript *nd,
                                            struct thread *td,
                                            struct mbuf **mreqp);
 extern int nfs_numasync;
-extern time_t nqnfsstarttime;
-extern int nqsrv_writeslack;
 extern int nfsrtton;
 extern struct nfsstats nfsstats;
 extern int nfsrvw_procrastinate;
@@ -106,8 +103,6 @@ SYSCTL_DECL(_vfs_nfs);
 int nfsd_waiting = 0;
 static struct nfsdrt nfsdrt;
 static int nfs_numnfsd = 0;
-static int notstarted = 1;
-static int modify_flag = 0;
 static void    nfsd_rt (int sotype, struct nfsrv_descript *nd,
                             int cacherep);
 static int     nfssvc_addsock (struct file *, struct sockaddr *,
@@ -196,8 +191,8 @@ nfssvc(struct nfssvc_args *uap)
                        (uap->flag & NFSSVC_GOTAUTH) == 0)
                        return (0);
                nmp->nm_state |= NFSSTA_MNTD;
-               error = nqnfs_clientd(nmp, td->td_proc->p_ucred, &ncd, uap->flag,
-                       uap->argp, td);
+               error = nfs_clientd(nmp, td->td_proc->p_ucred, &ncd, uap->flag,
+                                   uap->argp, td);
        } else if (uap->flag & NFSSVC_ADDSOCK) {
                error = copyin(uap->argp, (caddr_t)&nfsdarg, sizeof(nfsdarg));
                if (error)
@@ -548,30 +543,11 @@ nfssvc_nfsd(struct nfsd_srvargs *nsd, caddr_t argp, struct thread *td)
                            !copyout((caddr_t)nsd, argp, sizeof (*nsd)))
                            return (ENEEDAUTH);
                        cacherep = RC_DROPIT;
-                   } else
+                   } else {
                        cacherep = nfsrv_getcache(nd, slp, &mreq);
-
-                   /*
-                    * Check for just starting up for NQNFS and send
-                    * fake "try again later" replies to the NQNFS clients.
-                    */
-                   if (notstarted && nqnfsstarttime <= time_second) {
-                       if (modify_flag) {
-                               nqnfsstarttime = time_second + nqsrv_writeslack;
-                               modify_flag = 0;
-                       } else
-                               notstarted = 0;
                    }
-                   if (notstarted) {
-                       if ((nd->nd_flag & ND_NQNFS) == 0)
-                               cacherep = RC_DROPIT;
-                       else if (nd->nd_procnum != NFSPROC_WRITE) {
-                               nd->nd_procnum = NFSPROC_NOOP;
-                               nd->nd_repstat = NQNFS_TRYLATER;
-                               cacherep = RC_DOIT;
-                       } else
-                               modify_flag = 1;
-                   } else if (nfsd->nfsd_flag & NFSD_AUTHFAIL) {
+
+                   if (nfsd->nfsd_flag & NFSD_AUTHFAIL) {
                        nfsd->nfsd_flag &= ~NFSD_AUTHFAIL;
                        nd->nd_procnum = NFSPROC_NOOP;
                        nd->nd_repstat = (NFSERR_AUTHERR | AUTH_TOOWEAK);
@@ -608,12 +584,14 @@ nfssvc_nfsd(struct nfsd_srvargs *nsd, caddr_t argp, struct thread *td)
                        else
                            procrastinate = nfsrvw_procrastinate;
                        if (writes_todo || (nd->nd_procnum == NFSPROC_WRITE &&
-                           procrastinate > 0 && !notstarted))
+                           procrastinate > 0)
+                       ) {
                            error = nfsrv_writegather(&nd, slp,
                                nfsd->nfsd_td, &mreq);
-                       else
+                       } else {
                            error = (*(nfsrv3_procs[nd->nd_procnum]))(nd,
                                slp, nfsd->nfsd_td, &mreq);
+                       }
                        if (mreq == NULL)
                                break;
                        if (error != 0 && error != NFSERR_RETVOID) {
@@ -892,9 +870,7 @@ nfsd_rt(int sotype, struct nfsrv_descript *nd, int cacherep)
                rt->flag = DRT_CACHEDROP;
        if (sotype == SOCK_STREAM)
                rt->flag |= DRT_TCP;
-       if (nd->nd_flag & ND_NQNFS)
-               rt->flag |= DRT_NQNFS;
-       else if (nd->nd_flag & ND_NFSV3)
+       if (nd->nd_flag & ND_NFSV3)
                rt->flag |= DRT_NFSV3;
        rt->proc = nd->nd_procnum;
        if (nd->nd_nam->sa_family == AF_INET)
index 4a2fae6..1dc85a4 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_vfsops.c        8.12 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/nfs/nfs_vfsops.c,v 1.91.2.7 2003/01/27 20:04:08 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.35 2006/02/17 19:18:07 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.36 2006/03/27 16:18:39 dillon Exp $
  */
 
 #include "opt_bootp.h"
@@ -72,7 +72,6 @@
 #include "xdr_subs.h"
 #include "nfsm_subs.h"
 #include "nfsdiskless.h"
-#include "nqnfs.h"
 #include "nfsmountrpc.h"
 
 extern int     nfs_mountroot(struct mount *mp);
@@ -89,7 +88,6 @@ MALLOC_DEFINE(M_NFSD, "NFS daemon", "Nfs server daemon structure");
 MALLOC_DEFINE(M_NFSDIROFF, "NFSV3 diroff", "NFS directory offset data");
 MALLOC_DEFINE(M_NFSRVDESC, "NFSV3 srvdesc", "NFS server socket descriptor");
 MALLOC_DEFINE(M_NFSUID, "NFS uid", "Nfs uid mapping structure");
-MALLOC_DEFINE(M_NQLEASE, "NQNFS Lease", "Nqnfs lease");
 MALLOC_DEFINE(M_NFSHASH, "NFS hash", "NFS hash tables");
 
 vm_zone_t nfsmount_zone;
@@ -769,17 +767,11 @@ nfs_decode_args(nmp, argp)
                else
                        nmp->nm_readahead = NFS_MAXRAHEAD;
        }
-       if ((argp->flags & NFSMNT_LEASETERM) && argp->leaseterm >= 2) {
-               if (argp->leaseterm <= NQ_MAXLEASE)
-                       nmp->nm_leaseterm = argp->leaseterm;
-               else
-                       nmp->nm_leaseterm = NQ_MAXLEASE;
-       }
        if ((argp->flags & NFSMNT_DEADTHRESH) && argp->deadthresh >= 1) {
-               if (argp->deadthresh <= NQ_NEVERDEAD)
+               if (argp->deadthresh <= NFS_NEVERDEAD)
                        nmp->nm_deadthresh = argp->deadthresh;
                else
-                       nmp->nm_deadthresh = NQ_NEVERDEAD;
+                       nmp->nm_deadthresh = NFS_NEVERDEAD;
        }
 
        adjsock |= ((nmp->nm_sotype != argp->sotype) ||
@@ -848,12 +840,12 @@ nfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
                        return (EIO);
                /*
                 * When doing an update, we can't change from or to
-                * v3 and/or nqnfs, or change cookie translation
+                * v3, or change cookie translation
                 */
                args.flags = (args.flags &
-                   ~(NFSMNT_NFSV3|NFSMNT_NQNFS /*|NFSMNT_XLATECOOKIE*/)) |
+                   ~(NFSMNT_NFSV3/*|NFSMNT_XLATECOOKIE*/)) |
                    (nmp->nm_flag &
-                       (NFSMNT_NFSV3|NFSMNT_NQNFS /*|NFSMNT_XLATECOOKIE*/));
+                       (NFSMNT_NFSV3/*|NFSMNT_XLATECOOKIE*/));
                nfs_decode_args(nmp, &args);
                return (0);
        }
@@ -916,15 +908,6 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
        }
        vfs_getnewfsid(mp);
        nmp->nm_mountp = mp;
-       if (argp->flags & NFSMNT_NQNFS) {
-               /*
-                * We have to set mnt_maxsymlink to a non-zero value so
-                * that COMPAT_43 routines will know that we are setting
-                * the d_type field in directories (and can zero it for
-                * unsuspecting binaries).
-                */
-               mp->mnt_maxsymlinklen = 1;
-       }
 
        /*
         * V2 can only handle 32 bit filesizes.  A 4GB-1 limit may be too
@@ -948,10 +931,7 @@ mountnfs(struct nfs_args *argp, struct mount *mp, struct sockaddr *nam,
        nmp->nm_readdirsize = NFS_READDIRSIZE;
        nmp->nm_numgrps = NFS_MAXGRPS;
        nmp->nm_readahead = NFS_DEFRAHEAD;
-       nmp->nm_leaseterm = NQ_DEFLEASE;
-       nmp->nm_deadthresh = NQ_DEADTHRESH;
-       CIRCLEQ_INIT(&nmp->nm_timerhead);
-       nmp->nm_inprog = NULLVP;
+       nmp->nm_deadthresh = NFS_DEFDEADTHRESH;
        nmp->nm_fhsize = argp->fhsize;
        bcopy((caddr_t)argp->fh, (caddr_t)nmp->nm_fh, argp->fhsize);
        bcopy(hst, mp->mnt_stat.f_mntfromname, MNAMELEN);
@@ -1053,11 +1033,9 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
                        return (error);
        }
        /*
-        * Must handshake with nqnfs_clientd() if it is active.
+        * Must handshake with nfs_clientd() if it is active. XXX
         */
        nmp->nm_state |= NFSSTA_DISMINPROG;
-       while (nmp->nm_inprog != NULLVP)
-               (void) tsleep((caddr_t)&lbolt, 0, "nfsdism", 0);
 
        /* We hold 1 extra ref on the root vnode; see comment in mountnfs(). */
        error = vflush(mp, 1, flags);
@@ -1070,13 +1048,13 @@ nfs_unmount(struct mount *mp, int mntflags, struct thread *td)
         * We are now committed to the unmount.
         * For NQNFS, let the server daemon free the nfsmount structure.
         */
-       if (nmp->nm_flag & (NFSMNT_NQNFS | NFSMNT_KERB))
+       if (nmp->nm_flag & NFSMNT_KERB)
                nmp->nm_state |= NFSSTA_DISMNT;
 
        nfs_disconnect(nmp);
        FREE(nmp->nm_nam, M_SONAME);
 
-       if ((nmp->nm_flag & (NFSMNT_NQNFS | NFSMNT_KERB)) == 0)
+       if ((nmp->nm_flag & NFSMNT_KERB) == 0)
                nfs_free_mount(nmp);
        return (0);
 }
index d68ac8d..cc1cdf3 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfs_vnops.c 8.16 (Berkeley) 5/27/95
  * $FreeBSD: src/sys/nfs/nfs_vnops.c,v 1.150.2.5 2001/12/20 19:56:28 dillon Exp $
- * $DragonFly: src/sys/vfs/nfs/nfs_vnops.c,v 1.50 2006/03/24 18:35:34 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_vnops.c,v 1.51 2006/03/27 16:18:39 dillon Exp $
  */
 
 
@@ -83,7 +83,6 @@
 #include "nfsnode.h"
 #include "xdr_subs.h"
 #include "nfsm_subs.h"
-#include "nqnfs.h"
 
 #include <net/if.h>
 #include <netinet/in.h>
@@ -159,7 +158,6 @@ struct vnodeopv_entry_desc nfsv2_vnodeop_entries[] = {
        { &vop_putpages_desc,           (vnodeopv_entry_t) nfs_putpages },
        { &vop_inactive_desc,           (vnodeopv_entry_t) nfs_inactive },
        { &vop_islocked_desc,           (vnodeopv_entry_t) vop_stdislocked },
-       { &vop_lease_desc,              vop_null },
        { &vop_old_link_desc,           (vnodeopv_entry_t) nfs_link },
        { &vop_lock_desc,               (vnodeopv_entry_t) vop_stdlock },
        { &vop_old_lookup_desc,         (vnodeopv_entry_t) nfs_lookup },
@@ -477,7 +475,6 @@ nfs_open(struct vop_open_args *ap)
 {
        struct vnode *vp = ap->a_vp;
        struct nfsnode *np = VTONFS(vp);
-       struct nfsmount *nmp = VFSTONFS(vp->v_mount);
        struct vattr vattr;
        int error;
 
@@ -497,63 +494,42 @@ nfs_open(struct vop_open_args *ap)
        if (ap->a_mode & FWRITE)
                np->n_attrstamp = 0;
 
-       if (nmp->nm_flag & NFSMNT_NQNFS) {
-               /*
-                * If NQNFS is active, get a valid lease
-                */
-               if (NQNFS_CKINVALID(vp, np, ND_READ)) {
-                   do {
-                       error = nqnfs_getlease(vp, ND_READ, ap->a_td);
-                   } while (error == NQNFS_EXPIRED);
-                   if (error)
-                       return (error);
-                   if (np->n_lrev != np->n_brev ||
-                       (np->n_flag & NQNFSNONCACHE)) {
-                       if ((error = nfs_vinvalbuf(vp, V_SAVE, ap->a_td, 1))
-                           == EINTR) {
-                               return (error);
-                       }
-                       np->n_brev = np->n_lrev;
-                   }
-               }
-       } else {
-               /*
-                * For normal NFS, reconcile changes made locally verses 
-                * changes made remotely.  Note that VOP_GETATTR only goes
-                * to the wire if the cached attribute has timed out or been
-                * cleared.
-                *
-                * If local modifications have been made clear the attribute
-                * cache to force an attribute and modified time check.  If
-                * GETATTR detects that the file has been changed by someone
-                * other then us it will set NRMODIFIED.
-                *
-                * If we are opening a directory and local changes have been
-                * made we have to invalidate the cache in order to ensure
-                * that we get the most up-to-date information from the
-                * server.  XXX
-                */
-               if (np->n_flag & NLMODIFIED) {
-                       np->n_attrstamp = 0;
-                       if (vp->v_type == VDIR) {
-                               error = nfs_vinvalbuf(vp, V_SAVE, ap->a_td, 1);
-                               if (error == EINTR)
-                                       return (error);
-                               nfs_invaldir(vp);
-                       }
-               }
-               error = VOP_GETATTR(vp, &vattr, ap->a_td);
-               if (error)
-                       return (error);
-               if (np->n_flag & NRMODIFIED) {
-                       if (vp->v_type == VDIR)
-                               nfs_invaldir(vp);
+       /*
+        * For normal NFS, reconcile changes made locally verses 
+        * changes made remotely.  Note that VOP_GETATTR only goes
+        * to the wire if the cached attribute has timed out or been
+        * cleared.
+        *
+        * If local modifications have been made clear the attribute
+        * cache to force an attribute and modified time check.  If
+        * GETATTR detects that the file has been changed by someone
+        * other then us it will set NRMODIFIED.
+        *
+        * If we are opening a directory and local changes have been
+        * made we have to invalidate the cache in order to ensure
+        * that we get the most up-to-date information from the
+        * server.  XXX
+        */
+       if (np->n_flag & NLMODIFIED) {
+               np->n_attrstamp = 0;
+               if (vp->v_type == VDIR) {
                        error = nfs_vinvalbuf(vp, V_SAVE, ap->a_td, 1);
                        if (error == EINTR)
                                return (error);
-                       np->n_flag &= ~NRMODIFIED;
+                       nfs_invaldir(vp);
                }
        }
+       error = VOP_GETATTR(vp, &vattr, ap->a_td);
+       if (error)
+               return (error);
+       if (np->n_flag & NRMODIFIED) {
+               if (vp->v_type == VDIR)
+                       nfs_invaldir(vp);
+               error = nfs_vinvalbuf(vp, V_SAVE, ap->a_td, 1);
+               if (error == EINTR)
+                       return (error);
+               np->n_flag &= ~NRMODIFIED;
+       }
 
        return (0);
 }
@@ -600,8 +576,7 @@ nfs_close(struct vop_close_args *ap)
        int error = 0;
 
        if (vp->v_type == VREG) {
-           if ((VFSTONFS(vp->v_mount)->nm_flag & NFSMNT_NQNFS) == 0 &&
-               (np->n_flag & NLMODIFIED)) {
+           if (np->n_flag & NLMODIFIED) {
                if (NFS_ISV3(vp)) {
                    /*
                     * Under NFSv3 we have dirty buffers to dispose of.  We
@@ -2147,13 +2122,8 @@ nfs_readdir(struct vop_readdir_args *ap)
         */
        if (np->n_direofoffset > 0 && uio->uio_offset >= np->n_direofoffset &&
            (np->n_flag & (NLMODIFIED|NRMODIFIED)) == 0) {
-               if (VFSTONFS(vp->v_mount)->nm_flag & NFSMNT_NQNFS) {
-                       if (NQNFS_CKCACHABLE(vp, ND_READ)) {
-                               nfsstats.direofcache_hits++;
-                               return (0);
-                       }
-               } else if (VOP_GETATTR(vp, &vattr, uio->uio_td) == 0 &&
-                       (np->n_flag & (NLMODIFIED|NRMODIFIED)) == 0
+               if (VOP_GETATTR(vp, &vattr, uio->uio_td) == 0 &&
+                   (np->n_flag & (NLMODIFIED|NRMODIFIED)) == 0
                ) {
                        nfsstats.direofcache_hits++;
                        return (0);
index 592208e..c9fa45f 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfsm_subs.h 8.2 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nfsm_subs.h,v 1.27.2.1 2000/10/28 16:27:27 dwmalone Exp $
- * $DragonFly: src/sys/vfs/nfs/nfsm_subs.h,v 1.8 2005/05/29 10:08:36 hsu Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfsm_subs.h,v 1.9 2006/03/27 16:18:39 dillon Exp $
  */
 
 
@@ -437,11 +437,9 @@ struct mbuf *nfsm_rpchead (struct ucred *cr, int nmflag, int procid,
        do { \
                nfsd->nd_repstat = error; \
                if (error && !(nfsd->nd_flag & ND_NFSV3)) \
-                  (void) nfs_rephead(0, nfsd, slp, error, cache, &frev, \
-                       mrq, &mb, &bpos); \
+                   nfs_rephead(0, nfsd, slp, error, mrq, &mb, &bpos); \
                else \
-                  (void) nfs_rephead((s), nfsd, slp, error, cache, &frev, \
-                       mrq, &mb, &bpos); \
+                   nfs_rephead((s), nfsd, slp, error, mrq, &mb, &bpos); \
                if (mrep != NULL) { \
                        m_freem(mrep); \
                        mrep = NULL; \
@@ -458,11 +456,9 @@ struct mbuf *nfsm_rpchead (struct ucred *cr, int nmflag, int procid,
        do { \
                nfsd->nd_repstat = error; \
                if (error && !(v3)) \
-                  (void) nfs_rephead(0, nfsd, slp, error, cache, &frev, \
-                       &mreq, &mb, &bpos); \
+                   nfs_rephead(0, nfsd, slp, error, &mreq, &mb, &bpos); \
                else \
-                  (void) nfs_rephead((s), nfsd, slp, error, cache, &frev, \
-                       &mreq, &mb, &bpos); \
+                   nfs_rephead((s), nfsd, slp, error, &mreq, &mb, &bpos); \
        } while (0)
 
 #define        nfsm_adv(s) \
index a882e18..2f124d6 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfsmount.h  8.3 (Berkeley) 3/30/95
  * $FreeBSD: src/sys/nfs/nfsmount.h,v 1.17 1999/12/29 04:54:54 peter Exp $
- * $DragonFly: src/sys/vfs/nfs/nfsmount.h,v 1.6 2006/02/17 19:18:07 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfsmount.h,v 1.7 2006/03/27 16:18:39 dillon Exp $
  */
 
 
@@ -71,13 +71,11 @@ struct      nfsmount {
        int     nm_wsize;               /* Max size of write rpc */
        int     nm_readdirsize;         /* Size of a readdir rpc */
        int     nm_readahead;           /* Num. of blocks to readahead */
-       int     nm_leaseterm;           /* Term (sec) for NQNFS lease */
+       int     nm_unused01;            /* Term (sec) for NQNFS lease */
        int     nm_acdirmin;            /* Directory attr cache min lifetime */
        int     nm_acdirmax;            /* Directory attr cache max lifetime */
        int     nm_acregmin;            /* Reg file attr cache min lifetime */
        int     nm_acregmax;            /* Reg file attr cache max lifetime */
-       CIRCLEQ_HEAD(, nfsnode) nm_timerhead; /* Head of lease timer queue */
-       struct vnode *nm_inprog;        /* Vnode in prog by nqnfs_clientd() */
        uid_t   nm_authuid;             /* Uid for authenticator */
        int     nm_authtype;            /* Authenticator type */
        int     nm_authlen;             /* and length */
index 39338bf..8eedf05 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     @(#)nfsnode.h   8.9 (Berkeley) 5/14/95
  * $FreeBSD: /repoman/r/ncvs/src/sys/nfsclient/nfsnode.h,v 1.43 2004/04/14 23:23:55 peadar Exp $
- * $DragonFly: src/sys/vfs/nfs/nfsnode.h,v 1.14 2005/08/27 20:23:06 joerg Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfsnode.h,v 1.15 2006/03/27 16:18:39 dillon Exp $
  */
 
 
@@ -107,10 +107,8 @@ struct nfsdmap {
  */
 struct nfsnode {
        LIST_ENTRY(nfsnode)     n_hash;         /* Hash chain */
-       CIRCLEQ_ENTRY(nfsnode)  n_timer;        /* Nqnfs timer chain */
        u_quad_t                n_size;         /* Current size of file */
        u_quad_t                n_brev;         /* Modify rev when cached */
-       u_quad_t                n_lrev;         /* Modify rev for lease */
        struct vattr            n_vattr;        /* Vnode attribute cache */
        time_t                  n_attrstamp;    /* Attr. cache timestamp */
        u_int32_t               n_mode;         /* ACCESS mode cache */
@@ -157,8 +155,8 @@ struct nfsnode {
 #define        NFLUSHINPROG    0x0002  /* Avoid multiple calls to vinvalbuf() */
 #define        NLMODIFIED      0x0004  /* Client has pending modifications */
 #define        NWRITEERR       0x0008  /* Flag write errors so close will know */
-#define        NQNFSNONCACHE   0x0020  /* Non-cachable lease */
-#define        NQNFSWRITE      0x0040  /* Write lease */
+#define        NDONTCACHE      0x0020  /* Non-cachable */
+#define        NUNUSED040      0x0040
 #define        NQNFSEVICTED    0x0080  /* Has been evicted */
 #define        NACC            0x0100  /* Special file accessed */
 #define        NUPD            0x0200  /* Special file updated */
@@ -226,7 +224,6 @@ nfs_vpcred(struct vnode *vp, int ndflag)
 int    nfs_getpages (struct vop_getpages_args *);
 int    nfs_putpages (struct vop_putpages_args *);
 int    nfs_write (struct vop_write_args *);
-int    nqnfs_vop_lease_check (struct vop_lease_args *);
 int    nfs_inactive (struct vop_inactive_args *);
 int    nfs_reclaim (struct vop_reclaim_args *);
 int    nfs_flush (struct vnode *, int, struct thread *, int);
@@ -237,8 +234,6 @@ int nfs_nget (struct mount *,nfsfh_t *,int,struct nfsnode **);
 nfsuint64 *nfs_getcookie (struct nfsnode *, off_t, int);
 void   nfs_invaldir (struct vnode *);
 
-#define        nqnfs_lease_updatetime  nfs_lease_updatetime
-
 #endif /* _KERNEL */
 
 #endif
diff --git a/sys/vfs/nfs/nqnfs.h b/sys/vfs/nfs/nqnfs.h
deleted file mode 100644 (file)
index c5ab451..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 1992, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Rick Macklem at The University of Guelph.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *     This product includes software developed by the University of
- *     California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)nqnfs.h     8.3 (Berkeley) 3/30/95
- * $FreeBSD: src/sys/nfs/nqnfs.h,v 1.22 2000/02/13 03:32:07 peter Exp $
- * $DragonFly: src/sys/vfs/nfs/Attic/nqnfs.h,v 1.6 2004/08/13 17:51:12 dillon Exp $
- */
-
-
-#ifndef _NFS_NQNFS_H_
-#define _NFS_NQNFS_H_
-
-/*
- * Definitions for NQNFS (Not Quite NFS) cache consistency protocol.
- */
-
-/* Tunable constants */
-#define        NQ_CLOCKSKEW    3       /* Clock skew factor (sec) */
-#define        NQ_WRITESLACK   5       /* Delay for write cache flushing */
-#define        NQ_MAXLEASE     60      /* Max lease duration (sec) */
-#define        NQ_MINLEASE     5       /* Min lease duration (sec) */
-#define        NQ_DEFLEASE     30      /* Default lease duration (sec) */
-#define        NQ_RENEWAL      3       /* Time before expiry (sec) to renew */
-#define        NQ_TRYLATERDEL  15      /* Initial try later delay (sec) */
-#define        NQ_MAXNUMLEASE  2048    /* Upper bound on number of server leases */
-#define        NQ_DEADTHRESH   NQ_NEVERDEAD    /* Default nm_deadthresh */
-#define        NQ_NEVERDEAD    9       /* Greater than max. nm_timeouts */
-#define        NQLCHSZ         256     /* Server hash table size */
-
-#define        NQNFS_PROG      300105  /* As assigned by Sun */
-#define        NQNFS_VER3      3
-#define        NQNFS_EVICTSIZ  156     /* Size of eviction request in bytes */
-
-#if defined(_KERNEL)
-/*
- * Definitions used for saving the "last lease expires" time in Non-volatile
- * RAM on the server. The default definitions below assume that NOVRAM is not
- * available.
- */
-#ifdef HASNVRAM
-#  undef HASNVRAM
-#endif
-#define        NQSTORENOVRAM(t)
-#define        NQLOADNOVRAM(t)
-
-/*
- * Defn and structs used on the server to maintain state for current leases.
- * The list of host(s) that hold the lease are kept as nqhost structures.
- * The first one lives in nqlease and any others are held in a linked
- * list of nqm structures hanging off of nqlease.
- *
- * Each nqlease structure is chained into two lists. The first is a list
- * ordered by increasing expiry time for nqsrv_timer() and the second is a chain
- * hashed on lc_fh.
- */
-#define        LC_MOREHOSTSIZ  10
-
-struct nqhost {
-       u_int16_t lph_flag;
-       u_int16_t lph_port;
-       struct nfssvc_sock *lph_slp;
-
-       union {
-               struct {
-                       union nethostaddr udp_haddr;
-               } un_udp;
-               struct {
-                       int     dummy;
-               } un_conn;
-       } lph_un;
-};
-#define        lph_haddr       lph_un.un_udp.udp_haddr
-#define        lph_inetaddr    lph_un.un_udp.udp_haddr.had_inetaddr
-
-struct nqlease {
-       LIST_ENTRY(nqlease) lc_hash;    /* Fhandle hash list */
-       CIRCLEQ_ENTRY(nqlease) lc_timer; /* Timer queue list */
-       time_t          lc_expiry;      /* Expiry time (sec) */
-       struct nqhost   lc_host;        /* Host that got lease */
-       struct nqm      *lc_morehosts;  /* Other hosts that share read lease */
-       fsid_t          lc_fsid;        /* Fhandle */
-       char            lc_fiddata[MAXFIDSZ];
-       struct vnode    *lc_vp;         /* Soft reference to associated vnode */
-};
-#define        lc_flag         lc_host.lph_flag
-
-/* lc_flag bits */
-#define        LC_VALID        0x0001  /* Host address valid */
-#define        LC_WRITE        0x0002  /* Write cache */
-#define        LC_NONCACHABLE  0x0004  /* Non-cachable lease */
-#define        LC_LOCKED       0x0008  /* Locked */
-#define        LC_WANTED       0x0010  /* Lock wanted */
-#define        LC_EXPIREDWANTED 0x0020 /* Want lease when expired */
-#define        LC_UDP          0x0040  /* Host address for udp socket */
-/* 0x0080 free */
-#define        LC_LOCAL        0x0100  /* Host is server */
-#define        LC_VACATED      0x0200  /* Host has vacated lease */
-#define        LC_WRITTEN      0x0400  /* Recently wrote to the leased file */
-#define        LC_SREF         0x0800  /* Holds a nfssvc_sock reference */
-
-struct nqm {
-       struct nqm      *lpm_next;
-       struct nqhost   lpm_hosts[LC_MOREHOSTSIZ];
-};
-
-/*
- * Special value for slp for local server calls.
- */
-#define        NQLOCALSLP      ((struct nfssvc_sock *) -1)
-
-/*
- * Server side macros.
- */
-#define        nqsrv_getl(v, l) \
-               (void) nqsrv_getlease((v), &nfsd->nd_duration, \
-                ((nfsd->nd_flag & ND_LEASE) ? (nfsd->nd_flag & ND_LEASE) : \
-                ((l) | ND_CHECK)), \
-                slp, td, nfsd->nd_nam, &cache, &frev, cred)
-
-/*
- * Client side macros that check for a valid lease.
- */
-#define        NQNFS_CKINVALID(v, n, f) \
- ((time_second > (n)->n_expiry && \
- VFSTONFS((v)->v_mount)->nm_timeouts < VFSTONFS((v)->v_mount)->nm_deadthresh) \
-  || ((f) == ND_WRITE && ((n)->n_flag & NQNFSWRITE) == 0))
-
-#define        NQNFS_CKCACHABLE(v, f) \
- ((time_second <= VTONFS(v)->n_expiry || \
-  VFSTONFS((v)->v_mount)->nm_timeouts >= VFSTONFS((v)->v_mount)->nm_deadthresh) \
-   && (VTONFS(v)->n_flag & NQNFSNONCACHE) == 0 && \
-   ((f) == ND_READ || (VTONFS(v)->n_flag & NQNFSWRITE)))
-
-#define        NQNFS_NEEDLEASE(v, p) \
-               (time_second > VTONFS(v)->n_expiry ? \
-                ((VTONFS(v)->n_flag & NQNFSEVICTED) ? 0 : nqnfs_piggy[p]) : \
-                (((time_second + NQ_RENEWAL) > VTONFS(v)->n_expiry && \
-                  nqnfs_piggy[p]) ? \
-                  ((VTONFS(v)->n_flag & NQNFSWRITE) ? \
-                   ND_WRITE : nqnfs_piggy[p]) : 0))
-
-/*
- * List head for timer queue.
- */
-extern CIRCLEQ_HEAD(nqtimerhead, nqlease) nqtimerhead;
-
-/*
- * List head for the file handle hash table.
- */
-#define        NQFHHASH(f) \
-       (&nqfhhashtbl[(*((u_int32_t *)(f))) & nqfhhash])
-extern LIST_HEAD(nqfhhashhead, nqlease) *nqfhhashtbl;
-extern u_long nqfhhash;
-
-/*
- * Nqnfs return status numbers.
- */
-#define        NQNFS_EXPIRED   500
-#define        NQNFS_TRYLATER  501
-
-int    nqnfs_lease_check (struct vnode *, struct thread *, struct ucred *, int);
-void   nqnfs_lease_updatetime (int);
-int    nqsrv_getlease (struct vnode *, u_int32_t *, int,
-                           struct nfssvc_sock *, struct thread *,
-                           struct sockaddr *, int *, u_quad_t *,
-                           struct ucred *);
-int    nqnfs_getlease (struct vnode *,int,struct thread *);
-int    nqnfs_callback (struct nfsmount *,struct mbuf *,struct mbuf *,caddr_t);
-int    nqnfs_clientd (struct nfsmount *,struct ucred *,struct nfsd_cargs *,int,caddr_t,struct thread *);
-struct nfsnode;
-void   nqnfs_clientlease (struct nfsmount *, struct nfsnode *, int, int, time_t, u_quad_t);
-void   nqnfs_serverd (void);
-int    nqnfsrv_getlease (struct nfsrv_descript *, struct nfssvc_sock *, struct thread *, struct mbuf **);
-int    nqnfsrv_vacated (struct nfsrv_descript *, struct nfssvc_sock *, struct thread *, struct mbuf **);
-#endif
-
-#endif
index 3265be5..136b2dd 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)spec_vnops.c        8.14 (Berkeley) 5/21/95
  * $FreeBSD: src/sys/miscfs/specfs/spec_vnops.c,v 1.131.2.4 2001/02/26 04:23:20 jlemon Exp $
- * $DragonFly: src/sys/vfs/specfs/spec_vnops.c,v 1.31 2006/03/24 18:35:34 dillon Exp $
+ * $DragonFly: src/sys/vfs/specfs/spec_vnops.c,v 1.32 2006/03/27 16:18:59 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -87,7 +87,6 @@ struct vnodeopv_entry_desc spec_vnodeop_entries[] = {
        { &vop_getpages_desc,           (vnodeopv_entry_t) spec_getpages },
        { &vop_inactive_desc,           (vnodeopv_entry_t) spec_inactive },
        { &vop_ioctl_desc,              (vnodeopv_entry_t) spec_ioctl },
-       { &vop_lease_desc,              vop_null },
        { &vop_old_link_desc,           vop_panic },
        { &vop_old_mkdir_desc,          vop_panic },
        { &vop_old_mknod_desc,          vop_panic },
index b5606e5..13e52b2 100644 (file)
@@ -36,7 +36,7 @@
  *
  *     @(#)union_subr.c        8.20 (Berkeley) 5/20/95
  * $FreeBSD: src/sys/miscfs/union/union_subr.c,v 1.43.2.2 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/union/union_subr.c,v 1.19 2005/09/02 07:16:58 hsu Exp $
+ * $DragonFly: src/sys/vfs/union/union_subr.c,v 1.20 2006/03/27 16:19:00 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -657,9 +657,6 @@ union_copyfile(struct vnode *fvp, struct vnode *tvp, struct ucred *cred,
        uio.uio_segflg = UIO_SYSSPACE;
        uio.uio_offset = 0;
 
-       VOP_LEASE(fvp, td, cred, LEASE_READ);
-       VOP_LEASE(tvp, td, cred, LEASE_WRITE);
-
        buf = malloc(MAXBSIZE, M_TEMP, M_WAITOK);
 
        /* ugly loop follows... */
@@ -906,9 +903,6 @@ union_mkshadow(struct union_mount *um, struct vnode *dvp,
        va.va_type = VDIR;
        va.va_mode = um->um_cmode;
 
-       /* VOP_LEASE: dvp is locked */
-       VOP_LEASE(dvp, td, cn.cn_cred, LEASE_WRITE);
-
        error = VOP_MKDIR(dvp, vpp, &cn, &va);
        /*vput(dvp);*/
        return (error);
@@ -948,9 +942,6 @@ union_mkwhiteout(struct union_mount *um, struct vnode *dvp,
                return (EEXIST);
        }
 
-       /* VOP_LEASE: dvp is locked */
-       VOP_LEASE(dvp, td, cred, LEASE_WRITE);
-
        error = VOP_WHITEOUT(dvp, &cn, NAMEI_CREATE);
        return (error);
 }
@@ -1042,7 +1033,6 @@ union_vn_create(struct vnode **vpp, struct union_node *un, struct thread *td)
        VATTR_NULL(vap);
        vap->va_type = VREG;
        vap->va_mode = cmode;
-       VOP_LEASE(un->un_dirvp, td, cred, LEASE_WRITE);
        error = VOP_CREATE(un->un_dirvp, &vp, &cn, vap);
        vput(un->un_dirvp);
        if (error)
index 52c0638..ed2ceff 100644 (file)
@@ -36,7 +36,7 @@
  *
  *     @(#)union_vnops.c       8.32 (Berkeley) 6/23/95
  * $FreeBSD: src/sys/miscfs/union/union_vnops.c,v 1.72 1999/12/15 23:02:14 eivind Exp $
- * $DragonFly: src/sys/vfs/union/union_vnops.c,v 1.23 2006/03/24 18:35:34 dillon Exp $
+ * $DragonFly: src/sys/vfs/union/union_vnops.c,v 1.24 2006/03/27 16:19:00 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -77,7 +77,6 @@ static int    union_fsync (struct vop_fsync_args *ap);
 static int     union_getattr (struct vop_getattr_args *ap);
 static int     union_inactive (struct vop_inactive_args *ap);
 static int     union_ioctl (struct vop_ioctl_args *ap);
-static int     union_lease (struct vop_lease_args *ap);
 static int     union_link (struct vop_old_link_args *ap);
 static int     union_lock (struct vop_lock_args *ap);
 static int     union_lookup (struct vop_old_lookup_args *ap);
@@ -1107,20 +1106,6 @@ union_write(struct vop_read_args *ap)
        return (error);
 }
 
-/*
- * union_lease(struct vnode *a_vp, struct thread *a_td, struct ucred *a_cred,
- *             int a_flag)
- */
-static int
-union_lease(struct vop_lease_args *ap)
-{
-       struct vnode *ovp = OTHERVP(ap->a_vp);
-
-       ap->a_head.a_ops = *ovp->v_ops;
-       ap->a_vp = ovp;
-       return (vop_lease_ap(ap));
-}
-
 /*
  * union_ioctl(struct vnode *a_vp, int a_command, caddr_t a_data, int a_fflag,
  *             struct ucred *a_cred, struct thread *a_td)
@@ -1873,7 +1858,6 @@ struct vnodeopv_entry_desc union_vnodeop_entries[] = {
        { &vop_inactive_desc,           (vnodeopv_entry_t) union_inactive },
        { &vop_ioctl_desc,              (vnodeopv_entry_t) union_ioctl },
        { &vop_islocked_desc,           vop_stdislocked },
-       { &vop_lease_desc,              (vnodeopv_entry_t) union_lease },
        { &vop_old_link_desc,           (vnodeopv_entry_t) union_link },
        { &vop_lock_desc,               (vnodeopv_entry_t) union_lock },
        { &vop_old_lookup_desc,         (vnodeopv_entry_t) union_lookup },
index 6fa0c08..d46a2eb 100644 (file)
@@ -33,7 +33,7 @@
  * @(#) Copyright (c) 1980, 1991, 1993, 1994 The Regents of the University of California.  All rights reserved.
  * @(#)pstat.c 8.16 (Berkeley) 5/9/95
  * $FreeBSD: src/usr.sbin/pstat/pstat.c,v 1.49.2.5 2002/07/12 09:12:49 des Exp $
- * $DragonFly: src/usr.sbin/pstat/pstat.c,v 1.17 2006/02/08 08:34:13 dillon Exp $
+ * $DragonFly: src/usr.sbin/pstat/pstat.c,v 1.18 2006/03/27 16:18:15 dillon Exp $
  */
 
 #define _KERNEL_STRUCTURES
@@ -533,10 +533,6 @@ nfs_print(struct vnode *vp)
                *flags++ = 'R';
        if (flag & NWRITEERR)
                *flags++ = 'E';
-       if (flag & NQNFSNONCACHE)
-               *flags++ = 'X';
-       if (flag & NQNFSWRITE)
-               *flags++ = 'O';
        if (flag & NQNFSEVICTED)
                *flags++ = 'G';
        if (flag & NACC)