Module Name: src
Committed By: hannken
Date: Thu Jun 16 09:21:04 UTC 2011
Modified Files:
src/sys/fs/msdosfs: msdosfs_denode.c msdosfs_vnops.c
src/sys/fs/tmpfs: tmpfs_subr.c
src/sys/fs/udf: udf_allocation.c
src/sys/rump/librump/rumpvfs: vm_vfs.c
src/sys/ufs/ext2fs: ext2fs_inode.c
src/sys/ufs/ffs: ffs_inode.c
src/sys/ufs/lfs: lfs_inode.c
src/sys/uvm: uvm_bio.c uvm_extern.h
Log Message:
Rename uvm_vnp_zerorange(struct vnode *, off_t, size_t) to
ubc_zerorange(struct uvm_object *, off_t, size_t, int) changing
the first argument to an uvm_object and adding a flags argument.
Modify tmpfs_reg_resize() to zero the backing store (aobj) instead
of the vnode. Ubc_purge() no longer panics when unmounting tmpfs.
Keep uvm_vnp_zerorange() until the next kernel version bump.
To generate a diff of this commit:
cvs rdiff -u -r1.45 -r1.46 src/sys/fs/msdosfs/msdosfs_denode.c
cvs rdiff -u -r1.76 -r1.77 src/sys/fs/msdosfs/msdosfs_vnops.c
cvs rdiff -u -r1.73 -r1.74 src/sys/fs/tmpfs/tmpfs_subr.c
cvs rdiff -u -r1.31 -r1.32 src/sys/fs/udf/udf_allocation.c
cvs rdiff -u -r1.29 -r1.30 src/sys/rump/librump/rumpvfs/vm_vfs.c
cvs rdiff -u -r1.73 -r1.74 src/sys/ufs/ext2fs/ext2fs_inode.c
cvs rdiff -u -r1.106 -r1.107 src/sys/ufs/ffs/ffs_inode.c
cvs rdiff -u -r1.123 -r1.124 src/sys/ufs/lfs/lfs_inode.c
cvs rdiff -u -r1.73 -r1.74 src/sys/uvm/uvm_bio.c
cvs rdiff -u -r1.173 -r1.174 src/sys/uvm/uvm_extern.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/fs/msdosfs/msdosfs_denode.c
diff -u src/sys/fs/msdosfs/msdosfs_denode.c:1.45 src/sys/fs/msdosfs/msdosfs_denode.c:1.46
--- src/sys/fs/msdosfs/msdosfs_denode.c:1.45 Sun Jun 12 03:35:53 2011
+++ src/sys/fs/msdosfs/msdosfs_denode.c Thu Jun 16 09:21:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: msdosfs_denode.c,v 1.45 2011/06/12 03:35:53 rmind Exp $ */
+/* $NetBSD: msdosfs_denode.c,v 1.46 2011/06/16 09:21:02 hannken Exp $ */
/*-
* Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_denode.c,v 1.45 2011/06/12 03:35:53 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_denode.c,v 1.46 2011/06/16 09:21:02 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -537,8 +537,9 @@
else
bdwrite(bp);
} else {
- uvm_vnp_zerorange(DETOV(dep), length,
- pmp->pm_bpcluster - boff);
+ ubc_zerorange(&DETOV(dep)->v_uobj, length,
+ pmp->pm_bpcluster - boff,
+ UBC_UNMAP_FLAG(DETOV(dep)));
}
}
@@ -626,7 +627,7 @@
}
/*
- * Zero extend file range; uvm_vnp_zerorange() uses ubc_alloc() and a
+ * Zero extend file range; ubc_zerorange() uses ubc_alloc() and a
* memset(); we set the write size so ubc won't read in file data that
* is zero'd later.
*/
@@ -634,8 +635,9 @@
dep->de_FileSize = length;
uvm_vnp_setwritesize(DETOV(dep), (voff_t)dep->de_FileSize);
dep->de_flag |= DE_UPDATE|DE_MODIFIED;
- uvm_vnp_zerorange(DETOV(dep), (off_t)osize,
- (size_t)(round_page(dep->de_FileSize) - osize));
+ ubc_zerorange(&DETOV(dep)->v_uobj, (off_t)osize,
+ (size_t)(round_page(dep->de_FileSize) - osize),
+ UBC_UNMAP_FLAG(DETOV(dep)));
uvm_vnp_setsize(DETOV(dep), (voff_t)dep->de_FileSize);
return (deupdat(dep, 1));
}
Index: src/sys/fs/msdosfs/msdosfs_vnops.c
diff -u src/sys/fs/msdosfs/msdosfs_vnops.c:1.76 src/sys/fs/msdosfs/msdosfs_vnops.c:1.77
--- src/sys/fs/msdosfs/msdosfs_vnops.c:1.76 Sun Jun 12 03:35:53 2011
+++ src/sys/fs/msdosfs/msdosfs_vnops.c Thu Jun 16 09:21:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: msdosfs_vnops.c,v 1.76 2011/06/12 03:35:53 rmind Exp $ */
+/* $NetBSD: msdosfs_vnops.c,v 1.77 2011/06/16 09:21:02 hannken Exp $ */
/*-
* Copyright (C) 1994, 1995, 1997 Wolfgang Solfrank.
@@ -48,7 +48,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.76 2011/06/12 03:35:53 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: msdosfs_vnops.c,v 1.77 2011/06/16 09:21:02 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -627,7 +627,8 @@
/* zero out the remainder of the last page */
rem = round_page(dep->de_FileSize) - dep->de_FileSize;
if (rem > 0)
- uvm_vnp_zerorange(vp, (off_t)dep->de_FileSize, rem);
+ ubc_zerorange(&vp->v_uobj, (off_t)dep->de_FileSize,
+ rem, UBC_UNMAP_FLAG(vp));
extended = 1;
}
Index: src/sys/fs/tmpfs/tmpfs_subr.c
diff -u src/sys/fs/tmpfs/tmpfs_subr.c:1.73 src/sys/fs/tmpfs/tmpfs_subr.c:1.74
--- src/sys/fs/tmpfs/tmpfs_subr.c:1.73 Sun Jun 12 03:35:54 2011
+++ src/sys/fs/tmpfs/tmpfs_subr.c Thu Jun 16 09:21:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: tmpfs_subr.c,v 1.73 2011/06/12 03:35:54 rmind Exp $ */
+/* $NetBSD: tmpfs_subr.c,v 1.74 2011/06/16 09:21:02 hannken Exp $ */
/*
* Copyright (c) 2005-2011 The NetBSD Foundation, Inc.
@@ -74,7 +74,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tmpfs_subr.c,v 1.73 2011/06/12 03:35:54 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tmpfs_subr.c,v 1.74 2011/06/16 09:21:02 hannken Exp $");
#include <sys/param.h>
#include <sys/dirent.h>
@@ -803,6 +803,7 @@
{
tmpfs_mount_t *tmp = VFS_TO_TMPFS(vp->v_mount);
tmpfs_node_t *node = VP_TO_TMPFS_NODE(vp);
+ struct uvm_object *uobj = node->tn_spec.tn_reg.tn_aobj;
size_t newpages, oldpages;
off_t oldsize;
@@ -822,8 +823,7 @@
} else if (newsize < oldsize) {
int zerolen = MIN(round_page(newsize), node->tn_size) - newsize;
- /* Zero out the truncated part of the last page. */
- uvm_vnp_zerorange(vp, newsize, zerolen);
+ ubc_zerorange(uobj, newsize, zerolen, UBC_UNMAP_FLAG(vp));
}
node->tn_spec.tn_reg.tn_aobj_pages = newpages;
@@ -834,9 +834,6 @@
* Free "backing store".
*/
if (newpages < oldpages) {
- struct uvm_object *uobj;
-
- uobj = node->tn_spec.tn_reg.tn_aobj;
KASSERT(uobj->vmobjlock == vp->v_interlock);
mutex_enter(uobj->vmobjlock);
Index: src/sys/fs/udf/udf_allocation.c
diff -u src/sys/fs/udf/udf_allocation.c:1.31 src/sys/fs/udf/udf_allocation.c:1.32
--- src/sys/fs/udf/udf_allocation.c:1.31 Fri Jan 14 09:09:18 2011
+++ src/sys/fs/udf/udf_allocation.c Thu Jun 16 09:21:02 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: udf_allocation.c,v 1.31 2011/01/14 09:09:18 reinoud Exp $ */
+/* $NetBSD: udf_allocation.c,v 1.32 2011/06/16 09:21:02 hannken Exp $ */
/*
* Copyright (c) 2006, 2008 Reinoud Zandijk
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
#ifndef lint
-__KERNEL_RCSID(0, "$NetBSD: udf_allocation.c,v 1.31 2011/01/14 09:09:18 reinoud Exp $");
+__KERNEL_RCSID(0, "$NetBSD: udf_allocation.c,v 1.32 2011/06/16 09:21:02 hannken Exp $");
#endif /* not lint */
@@ -2711,7 +2711,8 @@
#if 0
/* zero append space in buffer */
- uvm_vnp_zerorange(vp, old_size, new_size - old_size);
+ ubc_zerorange(&vp->v_uobj, old_size,
+ new_size - old_size, UBC_UNMAP_FLAG(vp));
#endif
udf_node_sanity_check(udf_node, &new_inflen, &new_lbrec);
@@ -2817,7 +2818,8 @@
c_ad.len = udf_rw32(len | flags);
/* TODO zero appened space in buffer! */
- /* using uvm_vnp_zerorange(vp, old_size, new_size - old_size); ? */
+ /* using ubc_zerorange(&vp->v_uobj, old_size, */
+ /* new_size - old_size, UBC_UNMAP_FLAG(vp)); ? */
}
memset(&s_ad, 0, sizeof(struct long_ad));
@@ -2987,7 +2989,8 @@
memset(data_pos + new_size, 0, old_size - new_size);
/* TODO zero appened space in buffer! */
- /* using uvm_vnp_zerorange(vp, old_size, old_size - new_size); ? */
+ /* using ubc_zerorange(&vp->v_uobj, old_size, */
+ /* old_size - new_size, UBC_UNMAP_FLAG(vp)); ? */
/* set new size for uvm */
uvm_vnp_setsize(vp, new_size);
Index: src/sys/rump/librump/rumpvfs/vm_vfs.c
diff -u src/sys/rump/librump/rumpvfs/vm_vfs.c:1.29 src/sys/rump/librump/rumpvfs/vm_vfs.c:1.30
--- src/sys/rump/librump/rumpvfs/vm_vfs.c:1.29 Sun Jun 12 03:35:59 2011
+++ src/sys/rump/librump/rumpvfs/vm_vfs.c Thu Jun 16 09:21:03 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: vm_vfs.c,v 1.29 2011/06/12 03:35:59 rmind Exp $ */
+/* $NetBSD: vm_vfs.c,v 1.30 2011/06/16 09:21:03 hannken Exp $ */
/*
* Copyright (c) 2008-2011 Antti Kantee. All Rights Reserved.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vm_vfs.c,v 1.29 2011/06/12 03:35:59 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_vfs.c,v 1.30 2011/06/16 09:21:03 hannken Exp $");
#include <sys/param.h>
@@ -102,9 +102,8 @@
#define PAGERFLAGS (PGO_SYNCIO | PGO_NOBLOCKALLOC | PGO_NOTIMESTAMP)
void
-uvm_vnp_zerorange(struct vnode *vp, off_t off, size_t len)
+ubc_zerorange(struct uvm_object *uobj, off_t off, size_t len, int flags)
{
- struct uvm_object *uobj = &vp->v_uobj;
struct vm_page **pgs;
struct uvm_object *pguobj;
int maxpages = MIN(32, round_page(len) >> PAGE_SHIFT);
Index: src/sys/ufs/ext2fs/ext2fs_inode.c
diff -u src/sys/ufs/ext2fs/ext2fs_inode.c:1.73 src/sys/ufs/ext2fs/ext2fs_inode.c:1.74
--- src/sys/ufs/ext2fs/ext2fs_inode.c:1.73 Wed Jul 28 11:03:48 2010
+++ src/sys/ufs/ext2fs/ext2fs_inode.c Thu Jun 16 09:21:03 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: ext2fs_inode.c,v 1.73 2010/07/28 11:03:48 hannken Exp $ */
+/* $NetBSD: ext2fs_inode.c,v 1.74 2011/06/16 09:21:03 hannken Exp $ */
/*
* Copyright (c) 1982, 1986, 1989, 1993
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ext2fs_inode.c,v 1.73 2010/07/28 11:03:48 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ext2fs_inode.c,v 1.74 2011/06/16 09:21:03 hannken Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -311,7 +311,8 @@
size = fs->e2fs_bsize;
/* XXXUBC we should handle more than just VREG */
- uvm_vnp_zerorange(ovp, length, size - offset);
+ ubc_zerorange(&ovp->v_uobj, length, size - offset,
+ UBC_UNMAP_FLAG(ovp));
}
(void)ext2fs_setsize(oip, length);
uvm_vnp_setsize(ovp, length);
Index: src/sys/ufs/ffs/ffs_inode.c
diff -u src/sys/ufs/ffs/ffs_inode.c:1.106 src/sys/ufs/ffs/ffs_inode.c:1.107
--- src/sys/ufs/ffs/ffs_inode.c:1.106 Sun Jun 12 03:36:00 2011
+++ src/sys/ufs/ffs/ffs_inode.c Thu Jun 16 09:21:03 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: ffs_inode.c,v 1.106 2011/06/12 03:36:00 rmind Exp $ */
+/* $NetBSD: ffs_inode.c,v 1.107 2011/06/16 09:21:03 hannken Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -61,7 +61,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ffs_inode.c,v 1.106 2011/06/12 03:36:00 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ffs_inode.c,v 1.107 2011/06/16 09:21:03 hannken Exp $");
#if defined(_KERNEL_OPT)
#include "opt_ffs.h"
@@ -321,7 +321,8 @@
size = blksize(fs, oip, lbn);
eoz = MIN(MAX(lblktosize(fs, lbn) + size, round_page(pgoffset)),
osize);
- uvm_vnp_zerorange(ovp, length, eoz - length);
+ ubc_zerorange(&ovp->v_uobj, length, eoz - length,
+ UBC_UNMAP_FLAG(ovp));
if (round_page(eoz) > round_page(length)) {
mutex_enter(ovp->v_interlock);
error = VOP_PUTPAGES(ovp, round_page(length),
Index: src/sys/ufs/lfs/lfs_inode.c
diff -u src/sys/ufs/lfs/lfs_inode.c:1.123 src/sys/ufs/lfs/lfs_inode.c:1.124
--- src/sys/ufs/lfs/lfs_inode.c:1.123 Sun Jun 12 03:36:01 2011
+++ src/sys/ufs/lfs/lfs_inode.c Thu Jun 16 09:21:03 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_inode.c,v 1.123 2011/06/12 03:36:01 rmind Exp $ */
+/* $NetBSD: lfs_inode.c,v 1.124 2011/06/16 09:21:03 hannken Exp $ */
/*-
* Copyright (c) 1999, 2000, 2001, 2002, 2003 The NetBSD Foundation, Inc.
@@ -60,7 +60,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_inode.c,v 1.123 2011/06/12 03:36:01 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_inode.c,v 1.124 2011/06/16 09:21:03 hannken Exp $");
#if defined(_KERNEL_OPT)
#include "opt_quota.h"
@@ -391,7 +391,8 @@
xlbn = lblkno(fs, length);
size = blksize(fs, oip, xlbn);
eoz = MIN(lblktosize(fs, xlbn) + size, osize);
- uvm_vnp_zerorange(ovp, length, eoz - length);
+ ubc_zerorange(&ovp->v_uobj, length, eoz - length,
+ UBC_UNMAP_FLAG(ovp));
if (round_page(eoz) > round_page(length)) {
mutex_enter(ovp->v_interlock);
error = VOP_PUTPAGES(ovp, round_page(length),
Index: src/sys/uvm/uvm_bio.c
diff -u src/sys/uvm/uvm_bio.c:1.73 src/sys/uvm/uvm_bio.c:1.74
--- src/sys/uvm/uvm_bio.c:1.73 Sun Jun 12 03:36:02 2011
+++ src/sys/uvm/uvm_bio.c Thu Jun 16 09:21:03 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_bio.c,v 1.73 2011/06/12 03:36:02 rmind Exp $ */
+/* $NetBSD: uvm_bio.c,v 1.74 2011/06/16 09:21:03 hannken Exp $ */
/*
* Copyright (c) 1998 Chuck Silvers.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uvm_bio.c,v 1.73 2011/06/12 03:36:02 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uvm_bio.c,v 1.74 2011/06/16 09:21:03 hannken Exp $");
#include "opt_uvmhist.h"
#include "opt_ubc.h"
@@ -744,14 +744,13 @@
}
/*
- * uvm_vnp_zerorange: set a range of bytes in a file to zero.
+ * ubc_zerorange: set a range of bytes in an object to zero.
*/
void
-uvm_vnp_zerorange(struct vnode *vp, off_t off, size_t len)
+ubc_zerorange(struct uvm_object *uobj, off_t off, size_t len, int flags)
{
void *win;
- int flags;
/*
* XXXUBC invent kzero() and use it
@@ -760,10 +759,8 @@
while (len) {
vsize_t bytelen = len;
- win = ubc_alloc(&vp->v_uobj, off, &bytelen, UVM_ADV_NORMAL,
- UBC_WRITE);
+ win = ubc_alloc(uobj, off, &bytelen, UVM_ADV_NORMAL, UBC_WRITE);
memset(win, 0, bytelen);
- flags = UBC_WANT_UNMAP(vp) ? UBC_UNMAP : 0;
ubc_release(win, flags);
off += bytelen;
@@ -772,6 +769,18 @@
}
/*
+ * uvm_vnp_zerorange: set a range of bytes in a file to zero.
+ * WILL BE REMOVED AFTER THE NEXT KERNEL VERSION BUMP (5.99.54)!
+ */
+void uvm_vnp_zerorange(struct vnode *, off_t, size_t);
+void
+uvm_vnp_zerorange(struct vnode *vp, off_t off, size_t len)
+{
+
+ ubc_zerorange(&vp->v_uobj, off, len, UBC_UNMAP_FLAG(vp));
+}
+
+/*
* ubc_purge: disassociate ubc_map structures from an empty uvm_object.
*/
Index: src/sys/uvm/uvm_extern.h
diff -u src/sys/uvm/uvm_extern.h:1.173 src/sys/uvm/uvm_extern.h:1.174
--- src/sys/uvm/uvm_extern.h:1.173 Sun Jun 12 03:36:02 2011
+++ src/sys/uvm/uvm_extern.h Thu Jun 16 09:21:03 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: uvm_extern.h,v 1.173 2011/06/12 03:36:02 rmind Exp $ */
+/* $NetBSD: uvm_extern.h,v 1.174 2011/06/16 09:21:03 hannken Exp $ */
/*
* Copyright (c) 1997 Charles D. Cranor and Washington University.
@@ -574,6 +574,7 @@
void ubc_release(void *, int);
int ubc_uiomove(struct uvm_object *, struct uio *, vsize_t,
int, int);
+void ubc_zerorange(struct uvm_object *, off_t, size_t, int);
void ubc_purge(struct uvm_object *);
/* uvm_emap.c */
@@ -756,7 +757,6 @@
void uvm_vnp_setwritesize(struct vnode *, voff_t);
int uvn_findpages(struct uvm_object *, voff_t,
int *, struct vm_page **, int);
-void uvm_vnp_zerorange(struct vnode *, off_t, size_t);
bool uvn_text_p(struct uvm_object *);
bool uvn_clean_p(struct uvm_object *);
bool uvn_needs_writefault_p(struct uvm_object *);