* @(#)procfs_vfsops.c 8.7 (Berkeley) 5/10/95
*
* $FreeBSD: src/sys/i386/linux/linprocfs/linprocfs_vfsops.c,v 1.2.2.3 2001/10/15 20:42:01 des Exp $
- * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c,v 1.9 2005/02/02 21:34:18 joerg Exp $
+ * $DragonFly: src/sys/emulation/linux/i386/linprocfs/linprocfs_vfsops.c,v 1.10 2005/09/17 07:42:58 dillon Exp $
*/
/*
mp->mnt_data = 0;
vfs_getnewfsid(mp);
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, linprocfs_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ linprocfs_vnodeop_entries, 0);
size = sizeof("linprocfs") - 1;
bcopy("linprocfs", mp->mnt_stat.f_mntfromname, size);
*
* @(#)vfs_cache.c 8.5 (Berkeley) 3/22/95
* $FreeBSD: src/sys/kern/vfs_cache.c,v 1.42.2.6 2001/10/05 20:07:03 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_cache.c,v 1.57 2005/08/27 20:23:05 joerg Exp $
+ * $DragonFly: src/sys/kern/vfs_cache.c,v 1.58 2005/09/17 07:42:59 dillon Exp $
*/
#include <sys/param.h>
static LIST_HEAD(nchashhead, namecache) *nchashtbl; /* Hash Table */
static struct namecache_list ncneglist; /* instead of vnode */
-static int64_t last_fsmid; /* node change id */
/*
* ncvp_debug - debug cache_fromvp(). This is used by the NFS server
ncp->nc_flag = NCF_UNRESOLVED;
ncp->nc_error = ENOTCONN; /* needs to be resolved */
ncp->nc_refs = 1;
- ncp->nc_fsmid = ++last_fsmid;
+ ncp->nc_fsmid = 1;
TAILQ_INIT(&ncp->nc_list);
cache_lock(ncp);
return(ncp);
* any time if not locked, even if held.
*/
int
-cache_inval_vp(struct vnode *vp, int flags)
+cache_inval_vp(struct vnode *vp, int flags, int *retflags)
{
struct namecache *ncp;
struct namecache *next;
cache_drop(next);
goto restart;
}
+ *retflags |= ncp->nc_flag & NCF_FSMID;
cache_inval(ncp, flags);
cache_put(ncp); /* also releases reference */
ncp = next;
return(error);
}
+/*
+ * Recursively set the FSMID update flag for namecache nodes leading
+ * to root. This will cause the next getattr to increment the fsmid.
+ */
void
cache_update_fsmid(struct namecache *ncp)
{
struct vnode *vp;
struct namecache *scan;
- int64_t fsmid = ++last_fsmid;
if ((vp = ncp->nc_vp) != NULL) {
TAILQ_FOREACH(ncp, &vp->v_namecache, nc_vnode) {
for (scan = ncp; scan; scan = scan->nc_parent)
- scan->nc_fsmid = fsmid;
+ scan->nc_flag |= NCF_FSMID;
}
} else {
while (ncp) {
- ncp->nc_fsmid = fsmid;
+ ncp->nc_flag |= NCF_FSMID;
ncp = ncp->nc_parent;
}
}
{
struct namecache *ncp;
struct namecache *scan;
- int64_t fsmid = ++last_fsmid;
TAILQ_FOREACH(ncp, &vp->v_namecache, nc_vnode) {
for (scan = ncp; scan; scan = scan->nc_parent)
- scan->nc_fsmid = fsmid;
+ scan->nc_flag |= NCF_FSMID;
}
}
/*
+ * If getattr is called on a vnode (e.g. a stat call), the filesystem
+ * may call this routine to determine if the namecache has the hierarchical
+ * change flag set, requiring the fsmid to be updated.
+ *
+ * Since 0 indicates no support, make sure the filesystem fsmid is at least
+ * 1.
+ */
+int
+cache_check_fsmid_vp(struct vnode *vp, int64_t *fsmid)
+{
+ struct namecache *ncp;
+ int changed = 0;
+
+ TAILQ_FOREACH(ncp, &vp->v_namecache, nc_vnode) {
+ if (ncp->nc_flag & NCF_FSMID) {
+ ncp->nc_flag &= ~NCF_FSMID;
+ changed = 1;
+ }
+ }
+ if (*fsmid == 0)
+ ++*fsmid;
+ if (changed)
+ ++*fsmid;
+ return(changed);
+}
+
+/*
* Convert a directory vnode to a namecache record without any other
* knowledge of the topology. This ONLY works with directory vnodes and
* is ONLY used by the NFS server. dvp must be refd but unlocked, and the
* XXX: v_id wraparound. The period of resistance can be extended
* XXX: by incrementing each vnodes v_id individually instead of
* XXX: using the global v_id.
+ *
+ * Does not support NCP_FSMID accumulation on invalidation (retflags is
+ * not used).
*/
void
cache_purge(struct vnode *vp)
{
static u_long nextid;
+ int retflags = 0;
- cache_inval_vp(vp, CINV_DESTROY | CINV_CHILDREN);
+ cache_inval_vp(vp, CINV_DESTROY | CINV_CHILDREN, &retflags);
/*
* Calculate a new unique id for ".." handling
*
*
* $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.27 2005/09/14 01:13:20 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_default.c,v 1.28 2005/09/17 07:43:00 dillon Exp $
*/
#include <sys/param.h>
};
static struct vnodeopv_desc default_vnodeop_opv_desc =
- { &default_vnode_vops, default_vnodeop_entries };
+ { &default_vnode_vops, default_vnodeop_entries, 0 };
VNODEOP_SET(default_vnodeop_opv_desc);
*
* @(#)vfs_init.c 8.3 (Berkeley) 1/4/94
* $FreeBSD: src/sys/kern/vfs_init.c,v 1.59 2002/04/30 18:44:32 dillon Exp $
- * $DragonFly: src/sys/kern/vfs_init.c,v 1.9 2005/07/26 15:43:35 hmp Exp $
+ * $DragonFly: src/sys/kern/vfs_init.c,v 1.10 2005/09/17 07:43:00 dillon Exp $
*/
/*
* Manage vnode VOP operations vectors
{
const struct vnodeopv_desc *vdesc = data;
- vfs_add_vnodeops(NULL, vdesc->opv_desc_vector, vdesc->opv_desc_ops);
+ vfs_add_vnodeops(NULL, vdesc->opv_desc_vector,
+ vdesc->opv_desc_ops, vdesc->opv_flags);
}
/*
void
vfs_add_vnodeops(struct mount *mp, struct vop_ops **vops_pp,
- struct vnodeopv_entry_desc *descs)
+ struct vnodeopv_entry_desc *descs, int flags)
{
struct vnodeopv_node *node;
struct vop_ops *ops;
node->ops = ops;
node->descs = descs;
ops->vv_mount = mp;
+ ops->vv_flags |= flags;
+
+ /*
+ * Journal and coherency ops inherit normal ops flags
+ */
+ if (vops_pp == &mp->mnt_vn_coherency_ops && mp->mnt_vn_norm_ops)
+ ops->vv_flags |= mp->mnt_vn_norm_ops->vv_flags;
+ if (vops_pp == &mp->mnt_vn_journal_ops && mp->mnt_vn_norm_ops)
+ ops->vv_flags |= mp->mnt_vn_norm_ops->vv_flags;
+
++ops->vv_refs;
TAILQ_INSERT_TAIL(&vnodeopv_list, node, entry);
+
vfs_recalc_vnodeops();
+
if (mp) {
if (mp->mnt_vn_coherency_ops)
mp->mnt_vn_use_ops = mp->mnt_vn_coherency_ops;
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/kern/vfs_jops.c,v 1.22 2005/09/07 19:04:18 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_jops.c,v 1.23 2005/09/17 07:43:00 dillon Exp $
*/
/*
* Each mount point may have zero or more independantly configured journals
static int
journal_attach(struct mount *mp)
{
- vfs_add_vnodeops(mp, &mp->mnt_vn_journal_ops, journal_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_journal_ops,
+ journal_vnodeop_entries, 0);
return(0);
}
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/kern/vfs_journal.c,v 1.22 2005/09/07 19:04:18 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_journal.c,v 1.23 2005/09/17 07:43:00 dillon Exp $
*/
/*
* Each mount point may have zero or more independantly configured journals
static int
journal_attach(struct mount *mp)
{
- vfs_add_vnodeops(mp, &mp->mnt_vn_journal_ops, journal_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_journal_ops,
+ journal_vnodeop_entries, 0);
return(0);
}
*
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
* $FreeBSD: src/sys/kern/vfs_subr.c,v 1.249.2.30 2003/04/04 20:35:57 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_subr.c,v 1.63 2005/08/27 20:23:05 joerg Exp $
+ * $DragonFly: src/sys/kern/vfs_subr.c,v 1.64 2005/09/17 07:43:00 dillon Exp $
*/
/*
vap->va_flags = VNOVAL;
vap->va_gen = VNOVAL;
vap->va_vaflags = 0;
+ vap->va_fsmid = VNOVAL;
}
/*
vclean(struct vnode *vp, int flags, struct thread *td)
{
int active;
+ int retflags = 0;
/*
* If the vnode has already been reclaimed we have nothing to do.
/*
* Scrap the vfs cache
*/
- while (cache_inval_vp(vp, 0) != 0) {
+ while (cache_inval_vp(vp, 0, &retflags) != 0) {
printf("Warning: vnode %p clean/cache_resolution race detected\n", vp);
tsleep(vp, 0, "vclninv", 2);
}
/*
* Reclaim the vnode.
*/
- if (VOP_RECLAIM(vp, td))
+ if (VOP_RECLAIM(vp, retflags, td))
panic("vclean: cannot reclaim");
/*
*
* @(#)vfs_subr.c 8.31 (Berkeley) 5/26/95
* $FreeBSD: src/sys/kern/vfs_subr.c,v 1.249.2.30 2003/04/04 20:35:57 tegge Exp $
- * $DragonFly: src/sys/kern/vfs_sync.c,v 1.6 2005/06/06 15:02:28 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_sync.c,v 1.7 2005/09/17 07:43:00 dillon Exp $
*/
/*
};
static struct vnodeopv_desc sync_vnodeop_opv_desc =
- { &sync_vnode_vops, sync_vnodeop_entries };
+ { &sync_vnode_vops, sync_vnodeop_entries, 0 };
VNODEOP_SET(sync_vnodeop_opv_desc);
*
* @(#)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.71 2005/09/02 07:16:58 hsu Exp $
+ * $DragonFly: src/sys/kern/vfs_syscalls.c,v 1.72 2005/09/17 07:43:00 dillon Exp $
*/
#include <sys/param.h>
goto again;
}
}
-
- /*
- * The fsmid can be used to detect that something has changed
- * at or below the specified file/dir in the filesystem. At
- * a minimum the fsmid is synthesized by the kernel via the
- * namecache and requires an open descriptor for deterministic
- * operation. Filesystems supporting fsmid may store it in the
- * inode, but this is not a requirement.
- */
- st->st_fsmid = nd->nl_ncp->nc_fsmid;
-
vput(vp);
return (error);
}
*
* @(#)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.32 2005/09/02 07:16:58 hsu Exp $
+ * $DragonFly: src/sys/kern/vfs_vnops.c,v 1.33 2005/09/17 07:43:00 dillon Exp $
*/
#include <sys/param.h>
#else
sb->st_blocks = vap->va_bytes / S_BLKSIZE;
#endif
-
- /*
- * Set the fsmid from the namecache. Use the first available
- * namecache record.
- */
- if ((ncp = TAILQ_FIRST(&vp->v_namecache)) != NULL)
- sb->st_fsmid = ncp->nc_fsmid;
- else
- sb->st_fsmid = 0;
-
+ sb->st_fsmid = vap->va_fsmid;
return (0);
}
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.15 2005/09/14 01:13:20 dillon Exp $
+ * $DragonFly: src/sys/kern/vfs_vopops.c,v 1.16 2005/09/17 07:43:00 dillon Exp $
*/
#include <sys/param.h>
struct thread *td)
{
struct vop_getattr_args ap;
+ struct namecache *ncp;
int error;
ap.a_head.a_desc = &vop_getattr_desc;
ap.a_td = td;
DO_OPS(ops, error, &ap, vop_getattr);
+ if ((ops->vv_flags & VVF_SUPPORTS_FSMID) == 0) {
+ if ((ncp = TAILQ_FIRST(&vp->v_namecache)) != NULL) {
+ if (ncp->nc_flag & NCF_FSMID) {
+ ncp->nc_flag &= ~NCF_FSMID;
+ ++ncp->nc_fsmid;
+ }
+ vap->va_fsmid = ncp->nc_fsmid;
+ }
+ }
return(error);
}
}
int
-vop_reclaim(struct vop_ops *ops, struct vnode *vp, struct thread *td)
+vop_reclaim(struct vop_ops *ops, struct vnode *vp, int retflags, struct thread *td)
{
struct vop_reclaim_args ap;
int error;
ap.a_head.a_ops = ops;
ap.a_vp = vp;
ap.a_td = td;
+ ap.a_retflags = retflags; /* return to filesystem inode */
DO_OPS(ops, error, &ap, vop_reclaim);
return(error);
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/sys/namecache.h,v 1.21 2005/09/14 01:13:22 dillon Exp $
+ * $DragonFly: src/sys/sys/namecache.h,v 1.22 2005/09/17 07:43:01 dillon Exp $
*/
#ifndef _SYS_NAMECACHE_H_
#define NCF_ISSYMLINK 0x0100 /* represents a symlink */
#define NCF_ISDIR 0x0200 /* represents a directory */
#define NCF_DESTROYED 0x0400 /* name association is considered destroyed */
+#define NCF_FSMID 0x0800 /* FSMID updated */
/*
* cache_inval[_vp]() flags
struct namecache *cache_nlookup(struct namecache *par, struct nlcomponent *nlc);
struct namecache *cache_allocroot(struct mount *mp, struct vnode *vp);
int cache_inval(struct namecache *ncp, int flags);
-int cache_inval_vp(struct vnode *vp, int flags);
+int cache_inval_vp(struct vnode *vp, int flags, int *retflags);
void vfs_cache_setroot(struct vnode *vp, struct namecache *ncp);
int cache_resolve(struct namecache *ncp, struct ucred *cred);
int cache_fullpath(struct proc *, struct namecache *, char **, char **);
void cache_update_fsmid(struct namecache *);
void cache_update_fsmid_vp(struct vnode *);
-
+int cache_check_fsmid_vp(struct vnode *, int64_t *);
#endif
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/sys/vfscache.h,v 1.2 2005/08/02 13:03:55 joerg Exp $
+ * $DragonFly: src/sys/sys/vfscache.h,v 1.3 2005/09/17 07:43:01 dillon Exp $
*/
/*
* This module serves as a focal point for virtually all filesystem and
u_quad_t va_filerev; /* file modification number */
u_int va_vaflags; /* operations flags, see below */
long va_spare; /* remain quad aligned */
+ int64_t va_fsmid; /* filesystem modification id */
};
/*
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * $DragonFly: src/sys/sys/vfsops.h,v 1.13 2005/09/14 01:13:22 dillon Exp $
+ * $DragonFly: src/sys/sys/vfsops.h,v 1.14 2005/09/17 07:43:01 dillon Exp $
*/
/*
struct vop_generic_args a_head;
struct vnode *a_vp;
struct thread *a_td;
+ int a_retflags;
};
struct vop_lock_args {
#define VVF_JOURNAL_LAYER 0x0001
#define VVF_COHERENCY_LAYER 0x0002
-#define VVF_UNUSED_04 0x0004
+#define VVF_SUPPORTS_FSMID 0x0004
#define VVF_UNUSED_08 0x0008
#define VVF_NOATIME 0x0010 /* FUTURE */
#define VVF_RDONLY 0x0020 /* FUTURE */
int vop_readlink(struct vop_ops *ops, struct vnode *vp, struct uio *uio,
struct ucred *cred);
int vop_inactive(struct vop_ops *ops, struct vnode *vp, struct thread *td);
-int vop_reclaim(struct vop_ops *ops, struct vnode *vp, struct thread *td);
+int vop_reclaim(struct vop_ops *ops, struct vnode *vp, int retflags,
+ struct thread *td);
int vop_lock(struct vop_ops *ops, struct vnode *vp,
int flags, struct thread *td);
int vop_unlock(struct vop_ops *ops, struct vnode *vp,
vop_readlink(*(vp)->v_ops, vp, uio, cred)
#define VOP_INACTIVE(vp, td) \
vop_inactive(*(vp)->v_ops, vp, td)
-#define VOP_RECLAIM(vp, td) \
- vop_reclaim(*(vp)->v_ops, vp, td)
+#define VOP_RECLAIM(vp, retflags, td) \
+ vop_reclaim(*(vp)->v_ops, vp, retflags, td)
#define VOP_LOCK(vp, flags, td) \
vop_lock(*(vp)->v_ops, vp, flags, td)
#define VOP_UNLOCK(vp, flags, td) \
*
* @(#)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.38 2005/08/10 14:28:34 joerg Exp $
+ * $DragonFly: src/sys/sys/vnode.h,v 1.39 2005/09/17 07:43:01 dillon Exp $
*/
#ifndef _SYS_VNODE_H_
struct vnodeopv_desc {
struct vop_ops **opv_desc_vector; /* vect to allocate/fill*/
struct vnodeopv_entry_desc *opv_desc_ops; /* null terminated list */
+ int opv_flags;
};
struct vnodeopv_node {
void vfs_add_vnodeops_sysinit (const void *);
void vfs_rm_vnodeops_sysinit (const void *);
void vfs_add_vnodeops(struct mount *, struct vop_ops **,
- struct vnodeopv_entry_desc *);
+ struct vnodeopv_entry_desc *, int);
void vfs_rm_vnodeops(struct vop_ops **);
int vflush (struct mount *mp, int rootrefs, int flags);
int vmntvnodescan(struct mount *mp, int flags,
*
* @(#)dead_vnops.c 8.1 (Berkeley) 6/10/93
* $FreeBSD: src/sys/miscfs/deadfs/dead_vnops.c,v 1.26 1999/08/28 00:46:42 peter Exp $
- * $DragonFly: src/sys/vfs/deadfs/dead_vnops.c,v 1.13 2005/09/14 01:13:24 dillon Exp $
+ * $DragonFly: src/sys/vfs/deadfs/dead_vnops.c,v 1.14 2005/09/17 07:43:02 dillon Exp $
*/
#include <sys/param.h>
{ NULL, NULL }
};
static struct vnodeopv_desc dead_vnodeop_opv_desc =
- { &dead_vnode_vops, dead_vnodeop_entries };
+ { &dead_vnode_vops, dead_vnodeop_entries, 0 };
VNODEOP_SET(dead_vnodeop_opv_desc);
* @(#)fdesc_vfsops.c 8.4 (Berkeley) 1/21/94
*
* $FreeBSD: src/sys/miscfs/fdesc/fdesc_vfsops.c,v 1.22.2.3 2002/08/23 17:42:39 njl Exp $
- * $DragonFly: src/sys/vfs/fdesc/fdesc_vfsops.c,v 1.15 2005/07/26 15:43:35 hmp Exp $
+ * $DragonFly: src/sys/vfs/fdesc/fdesc_vfsops.c,v 1.16 2005/09/17 07:43:03 dillon Exp $
*/
/*
if (mp->mnt_flag & MNT_UPDATE)
return (EOPNOTSUPP);
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, fdesc_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ fdesc_vnodeop_entries, 0);
error = fdesc_allocvp(Froot, FD_ROOT, mp, &rvp, td);
if (error)
*
* @(#)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.20 2005/09/14 01:13:34 dillon Exp $
+ * $DragonFly: src/sys/vfs/fifofs/fifo_vnops.c,v 1.21 2005/09/17 07:43:04 dillon Exp $
*/
#include <sys/param.h>
{ NULL, NULL }
};
static struct vnodeopv_desc fifo_vnodeop_opv_desc =
- { &fifo_vnode_vops, fifo_vnodeop_entries };
+ { &fifo_vnode_vops, fifo_vnodeop_entries, 0 };
VNODEOP_SET(fifo_vnodeop_opv_desc);
*
* @(#)ffs_vfsops.c 8.8 (Berkeley) 4/18/94
* $FreeBSD: src/sys/gnu/ext2fs/ext2_vfsops.c,v 1.63.2.7 2002/07/01 00:18:51 iedowse Exp $
- * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.30 2005/07/26 15:43:35 hmp Exp $
+ * $DragonFly: src/sys/vfs/gnu/ext2fs/ext2_vfsops.c,v 1.31 2005/09/17 07:43:06 dillon Exp $
*/
#include "opt_quota.h"
ump->um_quotas[i] = NULLVP;
dev->si_mountpoint = mp;
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, ext2_vnodeop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops, ext2_specop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops, ext2_fifoop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ ext2_vnodeop_entries, 0);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops,
+ ext2_specop_entries, 0);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops,
+ ext2_fifoop_entries, 0);
if (ronly == 0)
ext2_sbupdate(ump, MNT_WAIT);
* SUCH DAMAGE.
*
* $FreeBSD: src/sys/fs/hpfs/hpfs_vfsops.c,v 1.3.2.2 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.29 2005/08/02 13:03:55 joerg Exp $
+ * $DragonFly: src/sys/vfs/hpfs/hpfs_vfsops.c,v 1.30 2005/09/17 07:43:07 dillon Exp $
*/
hpfs_bmdeinit(hpmp);
goto failed;
}
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, hpfs_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ hpfs_vnodeop_entries, 0);
error = hpfs_root(mp, &vp);
if (error) {
*
* @(#)cd9660_vfsops.c 8.18 (Berkeley) 5/22/95
* $FreeBSD: src/sys/isofs/cd9660/cd9660_vfsops.c,v 1.74.2.7 2002/04/08 09:39:29 bde Exp $
- * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.27 2005/07/26 15:43:35 hmp Exp $
+ * $DragonFly: src/sys/vfs/isofs/cd9660/cd9660_vfsops.c,v 1.28 2005/09/17 07:43:08 dillon Exp $
*/
#include <sys/param.h>
supbp = NULL;
}
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, cd9660_vnodeop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops, cd9660_specop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops, cd9660_fifoop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ cd9660_vnodeop_entries, 0);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops,
+ cd9660_specop_entries, 0);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops,
+ cd9660_fifoop_entries, 0);
return 0;
out:
*
* @(#)mfs_vnops.c 8.11 (Berkeley) 5/22/95
* $FreeBSD: src/sys/ufs/mfs/mfs_vnops.c,v 1.47.2.1 2001/05/22 02:06:43 bp Exp $
- * $DragonFly: src/sys/vfs/mfs/mfs_vnops.c,v 1.18 2005/06/06 15:09:38 drhodus Exp $
+ * $DragonFly: src/sys/vfs/mfs/mfs_vnops.c,v 1.19 2005/09/17 07:43:09 dillon Exp $
*/
#include <sys/param.h>
{ NULL, NULL }
};
static struct vnodeopv_desc mfs_vnodeop_opv_desc =
- { &mfs_vnode_vops, mfs_vnodeop_entries };
+ { &mfs_vnode_vops, mfs_vnodeop_entries, 0 };
VNODEOP_SET(mfs_vnodeop_opv_desc);
/* $FreeBSD: /usr/local/www/cvsroot/FreeBSD/src/sys/msdosfs/Attic/msdosfs_vfsops.c,v 1.60.2.8 2004/03/02 09:43:04 tjr Exp $ */
-/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vfsops.c,v 1.27 2005/09/01 00:18:24 swildner Exp $ */
+/* $DragonFly: src/sys/vfs/msdosfs/msdosfs_vfsops.c,v 1.28 2005/09/17 07:43:10 dillon Exp $ */
/* $NetBSD: msdosfs_vfsops.c,v 1.51 1997/11/17 15:36:58 ws Exp $ */
/*-
mp->mnt_stat.f_fsid.val[0] = dev2udev(dev);
mp->mnt_stat.f_fsid.val[1] = mp->mnt_vfc->vfc_typenum;
mp->mnt_flag |= MNT_LOCAL;
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, msdosfs_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ msdosfs_vnodeop_entries, 0);
dev->si_mountpoint = mp;
return 0;
*
* @(#)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.26 2005/06/06 15:09:38 drhodus Exp $
+ * $DragonFly: src/sys/vfs/nfs/Attic/nfs_nqlease.c,v 1.27 2005/09/17 07:43:12 dillon Exp $
*/
struct nfsreq myrep;
struct nfsuid *nuidp, *nnuidp;
int error = 0, vpid;
+ int retdummy;
/*
* First initialize some variables
if (np->n_flag & NQNFSEVICTED) {
if (vp->v_type == VDIR)
nfs_invaldir(vp);
- cache_inval_vp(vp, 0);
+ retdummy = 0;
+ cache_inval_vp(vp, 0, &retdummy);
(void) nfs_vinvalbuf(vp,
V_SAVE, td, 0);
np->n_flag &= ~NQNFSEVICTED;
*
* @(#)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.29 2005/06/09 18:39:05 hsu Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_socket.c,v 1.30 2005/09/17 07:43:12 dillon Exp $
*/
/*
int t1, nqlflag, cachable, error = 0, mrest_len, auth_len, auth_type;
int trylater_delay = NQ_TRYLATERDEL, 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;
* If the File Handle was stale, invalidate the
* lookup cache, just in case.
*/
- if (error == ESTALE)
- cache_inval_vp(vp, CINV_CHILDREN);
+ if (error == ESTALE) {
+ retdummy = 0;
+ cache_inval_vp(vp, CINV_CHILDREN, &retdummy);
+ }
if (nmp->nm_flag & NFSMNT_NFSV3) {
*mrp = mrep;
*mdp = md;
*
* @(#)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.32 2005/09/04 04:06:28 dillon Exp $
+ * $DragonFly: src/sys/vfs/nfs/nfs_vfsops.c,v 1.33 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_bootp.h"
/*
* Install vop_ops for our vnops
*/
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, nfsv2_vnodeop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops, nfsv2_specop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops, nfsv2_fifoop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ nfsv2_vnodeop_entries, 0);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops,
+ nfsv2_specop_entries, 0);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops,
+ nfsv2_fifoop_entries, 0);
/*
* A reference count is needed on the nfsnode representing the
* SUCH DAMAGE.
*
* $FreeBSD: src/sys/ntfs/ntfs_vfsops.c,v 1.20.2.5 2001/12/25 01:44:45 dillon Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.29 2005/08/02 13:03:55 joerg Exp $
+ * $DragonFly: src/sys/vfs/ntfs/ntfs_vfsops.c,v 1.30 2005/09/17 07:43:12 dillon Exp $
*/
(ntmp->ntm_flag & NTFS_MFLAG_ALLNAMES)?" allnames,":"",
ntmp->ntm_uid, ntmp->ntm_gid, ntmp->ntm_mode));
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, ntfs_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ ntfs_vnodeop_entries, 0);
/*
* We read in some system nodes to do not allow
*
* @(#)lofs_vfsops.c 1.2 (Berkeley) 6/18/92
* $FreeBSD: src/sys/miscfs/nullfs/null_vfsops.c,v 1.35.2.3 2001/07/26 20:37:11 iedowse Exp $
- * $DragonFly: src/sys/vfs/nullfs/null_vfsops.c,v 1.17 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/nullfs/null_vfsops.c,v 1.18 2005/09/17 07:43:12 dillon Exp $
*/
/*
*/
xmp->nullm_vfs = lowerrootvp->v_mount;
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, null_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ null_vnodeop_entries, 0);
/*
* Save reference. Each mount also holds
* 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.19 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/nwfs/nwfs_vfsops.c,v 1.20 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_ncp.h"
#ifndef NCP
/* 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_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ nwfs_vnodeop_entries, 0);
vfs_getnewfsid(mp);
error = nwfs_root(mp, &vp);
* @(#)portal_vfsops.c 8.11 (Berkeley) 5/14/95
*
* $FreeBSD: src/sys/miscfs/portal/portal_vfsops.c,v 1.26.2.2 2001/07/26 20:37:16 iedowse Exp $
- * $DragonFly: src/sys/vfs/portal/portal_vfsops.c,v 1.16 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/portal/portal_vfsops.c,v 1.17 2005/09/17 07:43:12 dillon Exp $
*/
/*
M_PORTALFSMNT, M_WAITOK); /* XXX */
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, portal_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ portal_vnodeop_entries, 0);
error = getnewvnode(VT_PORTAL, mp, &rvp, 0, 0);
if (error) {
* @(#)procfs_vfsops.c 8.7 (Berkeley) 5/10/95
*
* $FreeBSD: src/sys/miscfs/procfs/procfs_vfsops.c,v 1.32.2.1 2001/10/15 20:42:01 des Exp $
- * $DragonFly: src/sys/vfs/procfs/procfs_vfsops.c,v 1.12 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/procfs/procfs_vfsops.c,v 1.13 2005/09/17 07:43:12 dillon Exp $
*/
/*
bcopy("procfs", mp->mnt_stat.f_mntfromname, size);
bzero(mp->mnt_stat.f_mntfromname + size, MNAMELEN - size);
procfs_statfs(mp, &mp->mnt_stat, td);
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, procfs_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ procfs_vnodeop_entries, 0);
return (0);
}
* SUCH DAMAGE.
*
* $FreeBSD: src/sys/fs/smbfs/smbfs_vfsops.c,v 1.2.2.5 2003/01/17 08:20:26 tjr Exp $
- * $DragonFly: src/sys/vfs/smbfs/smbfs_vfsops.c,v 1.22 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/smbfs/smbfs_vfsops.c,v 1.23 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_netsmb.h"
#ifndef NETSMB
smp->sm_args.mount_point[sizeof(smp->sm_args.mount_point) - 1] = '\0';
vfs_getnewfsid(mp);
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, smbfs_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ smbfs_vnodeop_entries, 0);
error = smbfs_root(mp, &vp);
if (error)
*
* @(#)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.28 2005/09/14 01:13:46 dillon Exp $
+ * $DragonFly: src/sys/vfs/specfs/spec_vnops.c,v 1.29 2005/09/17 07:43:12 dillon Exp $
*/
#include <sys/param.h>
{ NULL, NULL }
};
static struct vnodeopv_desc spec_vnodeop_opv_desc =
- { &spec_vnode_vops, spec_vnodeop_entries };
+ { &spec_vnode_vops, spec_vnodeop_entries, 0 };
VNODEOP_SET(spec_vnodeop_opv_desc);
extern int dev_ref_debug;
* SUCH DAMAGE.
*
* $FreeBSD: src/sys/fs/udf/udf_vfsops.c,v 1.16 2003/11/05 06:56:08 scottl Exp $
- * $DragonFly: src/sys/vfs/udf/udf_vfsops.c,v 1.14 2005/08/04 16:44:12 joerg Exp $
+ * $DragonFly: src/sys/vfs/udf/udf_vfsops.c,v 1.15 2005/09/17 07:43:12 dillon Exp $
*/
/* udf_vfsops.c */
goto bail;
}
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, udf_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ udf_vnodeop_entries, 0);
/*
* Find the file entry for the root directory.
*
* @(#)dinode.h 8.3 (Berkeley) 1/21/94
* $FreeBSD: src/sys/ufs/ufs/dinode.h,v 1.7 1999/08/28 00:52:27 peter Exp $
- * $DragonFly: src/sys/vfs/ufs/dinode.h,v 1.4 2005/08/28 04:34:44 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/dinode.h,v 1.5 2005/09/17 07:43:12 dillon Exp $
*/
#ifndef _UFS_UFS_DINODE_H_
int32_t di_gen; /* 108: Generation number. */
uint32_t di_uid; /* 112: File owner. */
uint32_t di_gid; /* 116: File group. */
- int32_t di_spare[2]; /* 120: Reserved; currently unused */
+ union { /* 120: File hierarchy modified */
+ int32_t spare[2]; /* (used by ext2fs) */
+ int64_t fsmid; /* (used by dragonfly) */
+ } di_v;
};
/*
#define di_ouid di_u.oldids[0]
#define di_rdev di_db[0]
#define di_shortlink di_db
+#define di_spare di_v.spare /* ext2fs */
+#define di_fsmid di_v.fsmid
#define MAXSYMLINKLEN ((NDADDR + NIADDR) * sizeof(ufs_daddr_t))
/* File permissions. */
*
* @(#)ffs_vfsops.c 8.31 (Berkeley) 5/20/95
* $FreeBSD: src/sys/ufs/ffs/ffs_vfsops.c,v 1.117.2.10 2002/06/23 22:34:52 iedowse Exp $
- * $DragonFly: src/sys/vfs/ufs/ffs_vfsops.c,v 1.33 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/ufs/ffs_vfsops.c,v 1.34 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_quota.h"
fs->fs_clean = 0;
(void) ffs_sbupdate(ump, MNT_WAIT);
}
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, ffs_vnodeop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops, ffs_specop_entries);
- vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops, ffs_fifoop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, ffs_vnodeop_entries, VVF_SUPPORTS_FSMID);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_spec_ops, ffs_specop_entries, VVF_SUPPORTS_FSMID);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_fifo_ops, ffs_fifoop_entries, VVF_SUPPORTS_FSMID);
return (0);
out:
*
* @(#)inode.h 8.9 (Berkeley) 5/14/95
* $FreeBSD: src/sys/ufs/ufs/inode.h,v 1.28.2.2 2001/09/29 12:52:52 iedowse Exp $
- * $DragonFly: src/sys/vfs/ufs/inode.h,v 1.9 2004/12/30 07:01:52 cpressey Exp $
+ * $DragonFly: src/sys/vfs/ufs/inode.h,v 1.10 2005/09/17 07:43:12 dillon Exp $
*/
#ifndef _UFS_UFS_INODE_H_
#define i_shortlink i_din.di_shortlink
#define i_size i_din.di_size
#define i_uid i_din.di_uid
+#define i_fsmid i_din.di_fsmid
#endif
*
* @(#)ufs_inode.c 8.9 (Berkeley) 5/14/95
* $FreeBSD: src/sys/ufs/ufs/ufs_inode.c,v 1.25.2.3 2002/07/05 22:42:31 dillon Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_inode.c,v 1.13 2005/07/20 17:59:45 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_inode.c,v 1.14 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_quota.h"
if (prtactive && vp->v_usecount != 1)
vprint("ufs_reclaim: pushing active", vp);
ip = VTOI(vp);
- if (ip && (ip->i_flag & IN_LAZYMOD)) {
- ip->i_flag |= IN_MODIFIED;
- UFS_UPDATE(vp, 0);
+
+ /*
+ * Lazy updates.
+ */
+ if (ip) {
+ if (ap->a_retflags & NCF_FSMID) {
+ ++ip->i_fsmid;
+ ip->i_flag |= IN_LAZYMOD;
+ }
+ if (ip->i_flag & IN_LAZYMOD) {
+ ip->i_flag |= IN_MODIFIED;
+ UFS_UPDATE(vp, 0);
+ }
}
#ifdef INVARIANTS
if (ip && (ip->i_flag & (IN_ACCESS | IN_CHANGE | IN_MODIFIED | IN_UPDATE))) {
*
* @(#)ufs_vnops.c 8.27 (Berkeley) 5/27/95
* $FreeBSD: src/sys/ufs/ufs/ufs_vnops.c,v 1.131.2.8 2003/01/02 17:26:19 bde Exp $
- * $DragonFly: src/sys/vfs/ufs/ufs_vnops.c,v 1.31 2005/09/14 01:13:48 dillon Exp $
+ * $DragonFly: src/sys/vfs/ufs/ufs_vnops.c,v 1.32 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_quota.h"
struct inode *ip = VTOI(vp);
struct vattr *vap = ap->a_vap;
+ /*
+ * This may cause i_fsmid to be updated even if no change (0)
+ * is returned, but we should only write out the inode if non-zero
+ * is returned and if the mount is read-write.
+ */
+ if (cache_check_fsmid_vp(vp, &ip->i_fsmid) &&
+ (vp->v_mount->mnt_flag & MNT_RDONLY) == 0
+ ) {
+ ip->i_flag |= IN_LAZYMOD;
+ }
+
ufs_itimes(vp);
/*
* Copy from inode table
vap->va_bytes = dbtob((u_quad_t)ip->i_blocks);
vap->va_type = IFTOVT(ip->i_mode);
vap->va_filerev = ip->i_modrev;
+ vap->va_fsmid = ip->i_fsmid;
return (0);
}
{ NULL, NULL }
};
static struct vnodeopv_desc ufs_vnodeop_opv_desc =
- { &ufs_vnode_vops, ufs_vnodeop_entries };
+ { &ufs_vnode_vops, ufs_vnodeop_entries, VVF_SUPPORTS_FSMID };
static struct vop_ops *ufs_spec_vops;
static struct vnodeopv_entry_desc ufs_specop_entries[] = {
{ NULL, NULL }
};
static struct vnodeopv_desc ufs_specop_opv_desc =
- { &ufs_spec_vops, ufs_specop_entries };
+ { &ufs_spec_vops, ufs_specop_entries, VVF_SUPPORTS_FSMID };
static struct vop_ops *ufs_fifo_vops;
static struct vnodeopv_entry_desc ufs_fifoop_entries[] = {
{ NULL, NULL }
};
static struct vnodeopv_desc ufs_fifoop_opv_desc =
- { &ufs_fifo_vops, ufs_fifoop_entries };
+ { &ufs_fifo_vops, ufs_fifoop_entries, VVF_SUPPORTS_FSMID };
VNODEOP_SET(ufs_vnodeop_opv_desc);
VNODEOP_SET(ufs_specop_opv_desc);
* @(#)umap_vfsops.c 8.8 (Berkeley) 5/14/95
*
* $FreeBSD: src/sys/miscfs/umapfs/umap_vfsops.c,v 1.31.2.2 2001/09/11 09:49:53 kris Exp $
- * $DragonFly: src/sys/vfs/umapfs/Attic/umap_vfsops.c,v 1.17 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/umapfs/Attic/umap_vfsops.c,v 1.18 2005/09/17 07:43:12 dillon Exp $
*/
/*
amp->info_gmapdata[i][1]);
#endif
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, umap_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ umap_vnodeop_entries, 0);
/*
* Save reference. Each mount also holds
*
* @(#)union_vfsops.c 8.20 (Berkeley) 5/20/95
* $FreeBSD: src/sys/miscfs/union/union_vfsops.c,v 1.39.2.2 2001/10/25 19:18:53 dillon Exp $
- * $DragonFly: src/sys/vfs/union/union_vfsops.c,v 1.20 2005/07/26 15:43:36 hmp Exp $
+ * $DragonFly: src/sys/vfs/union/union_vfsops.c,v 1.21 2005/09/17 07:43:12 dillon Exp $
*/
/*
(void) copyinstr(args.target, cp, len - 1, &size);
bzero(cp + size, len - size);
- vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops, union_vnodeop_entries);
+ vfs_add_vnodeops(mp, &mp->mnt_vn_norm_ops,
+ union_vnodeop_entries, 0);
(void)union_statfs(mp, &mp->mnt_stat, td);
*
* @(#)vm_swap.c 8.5 (Berkeley) 2/17/94
* $FreeBSD: src/sys/vm/vm_swap.c,v 1.96.2.2 2001/10/14 18:46:47 iedowse Exp $
- * $DragonFly: src/sys/vm/vm_swap.c,v 1.18 2005/06/02 20:57:21 swildner Exp $
+ * $DragonFly: src/sys/vm/vm_swap.c,v 1.19 2005/09/17 07:43:12 dillon Exp $
*/
#include "opt_swap.h"
{ NULL, NULL }
};
static struct vnodeopv_desc swapdev_vnodeop_opv_desc =
- { &swapdev_vnode_vops, swapdev_vnodeop_entries };
+ { &swapdev_vnode_vops, swapdev_vnodeop_entries, 0 };
VNODEOP_SET(swapdev_vnodeop_opv_desc);