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 *);

Reply via email to