GC local variable size.
[dragonfly.git] / sys / vfs / nwfs / nwfs_vfsops.c
index e6e8ef1..07c3f51 100644 (file)
@@ -30,7 +30,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/nwfs/nwfs_vfsops.c,v 1.6.2.6 2001/10/25 19:18:54 dillon Exp $
- * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.7 2003/08/07 21:54:36 dillon Exp $
+ * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.16 2005/02/12 01:31:38 joerg Exp $
  */
 #include "opt_ncp.h"
 #ifndef NCP
@@ -58,6 +58,8 @@
 #include "nwfs_node.h"
 #include "nwfs_subr.h"
 
+extern struct vnodeopv_entry_desc nwfs_vnodeop_entries[];
+
 int nwfs_debuglevel = 0;
 
 static int nwfs_version = NWFS_VERSION;
@@ -67,8 +69,7 @@ SYSCTL_NODE(_vfs, OID_AUTO, nwfs, CTLFLAG_RW, 0, "Netware file system");
 SYSCTL_INT(_vfs_nwfs, OID_AUTO, version, CTLFLAG_RD, &nwfs_version, 0, "");
 SYSCTL_INT(_vfs_nwfs, OID_AUTO, debuglevel, CTLFLAG_RW, &nwfs_debuglevel, 0, "");
 
-static int nwfs_mount(struct mount *, char *, caddr_t,
-                       struct nameidata *, struct thread *);
+static int nwfs_mount(struct mount *, char *, caddr_t, struct thread *);
 static int nwfs_quotactl(struct mount *, int, uid_t, caddr_t, struct thread *);
 static int nwfs_root(struct mount *, struct vnode **);
 static int nwfs_start(struct mount *, int, struct thread *);
@@ -140,11 +141,10 @@ nwfs_initnls(struct nwmount *nmp) {
  * mp - path - addr in user space of mount point (ie /usr or whatever)
  * data - addr in user space of mount params 
  */
-static int nwfs_mount(struct mount *mp, char *path, caddr_t data, 
-                     struct nameidata *ndp, struct thread *td)
+static int
+nwfs_mount(struct mount *mp, char *path, caddr_t data, struct thread *td)
 {
        struct nwfs_args args;    /* will hold data from mount request */
-       size_t size;
        int error;
        struct nwmount *nmp = NULL;
        struct ncp_conn *conn = NULL;
@@ -184,7 +184,7 @@ static int nwfs_mount(struct mount *mp, char *path, caddr_t data,
        ncp_conn_unlock(conn,td);       /* we keep the ref */
        mp->mnt_stat.f_iosize = conn->buffer_size;
         /* We must malloc our own mount info */
-        MALLOC(nmp,struct nwmount *,sizeof(struct nwmount),M_NWFSDATA,M_USE_RESERVE | M_ZERO);
+        MALLOC(nmp,struct nwmount *,sizeof(struct nwmount),M_NWFSDATA, M_WAITOK|M_USE_RESERVE|M_ZERO);
         if (nmp == NULL) {
                 nwfs_printf("could not alloc nwmount\n");
                 error = ENOMEM;
@@ -200,8 +200,6 @@ static int nwfs_mount(struct mount *mp, char *path, caddr_t data,
        nmp->m.dir_mode  = (nmp->m.dir_mode &
                            (S_IRWXU|S_IRWXG|S_IRWXO)) | S_IFDIR;
        if ((error = nwfs_initnls(nmp)) != 0) goto bad;
-       (void) copyinstr(path, mp->mnt_stat.f_mntonname, MNAMELEN - 1, &size);
-       bzero(mp->mnt_stat.f_mntonname + size, MNAMELEN - size);
        pc = mp->mnt_stat.f_mntfromname;
        pe = pc+sizeof(mp->mnt_stat.f_mntfromname);
        bzero(pc, MNAMELEN);
@@ -217,6 +215,9 @@ static int nwfs_mount(struct mount *mp, char *path, caddr_t data,
        }
        /* protect against invalid mount points */
        nmp->m.mount_point[sizeof(nmp->m.mount_point)-1] = '\0';
+
+       vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, nwfs_vnodeop_entries);
+
        vfs_getnewfsid(mp);
        error = nwfs_root(mp, &vp);
        if (error)
@@ -271,7 +272,8 @@ nwfs_unmount(struct mount *mp, int mntflags, struct thread *td)
 
 /*  Return locked vnode to root of a filesystem */
 static int
-nwfs_root(struct mount *mp, struct vnode **vpp) {
+nwfs_root(struct mount *mp, struct vnode **vpp)
+{
        struct vnode *vp;
        struct nwmount *nmp;
        struct nwnode *np;
@@ -371,10 +373,7 @@ nwfs_root(struct mount *mp, struct vnode **vpp) {
  */
 /* ARGSUSED */
 static int
-nwfs_start(mp, flags, td)
-       struct mount *mp;
-       int flags;
-       struct thread *td;
+nwfs_start(struct mount *mp, int flags, struct thread *td)
 {
        NCPVODEBUG("flags=%04x\n",flags);
        return (0);
@@ -385,12 +384,8 @@ nwfs_start(mp, flags, td)
  */
 /* ARGSUSED */
 static int
-nwfs_quotactl(mp, cmd, uid, arg, td)
-       struct mount *mp;
-       int cmd;
-       uid_t uid;
-       caddr_t arg;
-       struct thread *td;
+nwfs_quotactl(struct mount *mp, int cmd, uid_t uid, caddr_t arg,
+             struct thread *td)
 {
        NCPVODEBUG("return EOPNOTSUPP\n");
        return (EOPNOTSUPP);
@@ -430,10 +425,7 @@ nwfs_uninit(struct vfsconf *vfsp)
  * nwfs_statfs call
  */
 int
-nwfs_statfs(mp, sbp, td)
-       struct mount *mp;
-       struct statfs *sbp;
-       struct thread *td;
+nwfs_statfs(struct mount *mp, struct statfs *sbp, struct thread *td)
 {
        struct nwmount *nmp = VFSTONWFS(mp);
        int error = 0, secsize;
@@ -468,7 +460,6 @@ nwfs_statfs(mp, sbp, td)
                sbp->f_fsid = mp->mnt_stat.f_fsid;      /* file system id */
                sbp->f_owner = mp->mnt_stat.f_owner;    /* user that mounted the filesystem */
                sbp->f_type = mp->mnt_vfc->vfc_typenum; /* type of filesystem */
-               bcopy(mp->mnt_stat.f_mntonname, sbp->f_mntonname, MNAMELEN);
                bcopy(mp->mnt_stat.f_mntfromname, sbp->f_mntfromname, MNAMELEN);
        }
        strncpy(sbp->f_fstypename, mp->mnt_vfc->vfc_name, MFSNAMELEN);
@@ -480,10 +471,7 @@ nwfs_statfs(mp, sbp, td)
  */
 /* ARGSUSED */
 static int
-nwfs_sync(mp, waitfor, td)
-       struct mount *mp;
-       int waitfor;
-       struct thread *td;
+nwfs_sync(struct mount *mp, int waitfor, struct thread *td)
 {
        struct vnode *vp;
        int error, allerror = 0;
@@ -494,6 +482,8 @@ loop:
        for (vp = TAILQ_FIRST(&mp->mnt_nvnodelist);
             vp != NULL;
             vp = TAILQ_NEXT(vp, v_nmntvnodes)) {
+               if (vp->v_flag & VPLACEMARKER)  /* ZZZ */
+                       continue;
                /*
                 * If the vnode that we are about to sync is no longer
                 * associated with this mount point, start over.
@@ -505,6 +495,7 @@ loop:
                        continue;
                if (vget(vp, LK_EXCLUSIVE, td))
                        goto loop;
+               /* XXX vp may not be retained */
                error = VOP_FSYNC(vp, waitfor, td);
                if (error)
                        allerror = error;