[PATCH] fix for kern/160035 for review

Martin Matuska mm at FreeBSD.org
Wed Aug 24 13:03:15 UTC 2011


The attached patch fixes kern/160035 and kern/156933.
http://www.freebsd.org/cgi/query-pr.cgi?pr=160035

The function zfs_rezget() is called as part of zfs_resume_fs().
Suspending and resuming a ZFS filesystem is used in three cases:
1.) zfs rollback
2.) snapshot receive on a mounted fs (zfs recv -F)
3.) zfs upgrade

To make sure we don't have mmaped wrong data we have to invalidate
buffers for all vnodes.

-- 
Martin Matuska
FreeBSD committer
http://blog.vx.sk

-------------- next part --------------
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c
===================================================================
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	(revision 225140)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_znode.c	(working copy)
@@ -1343,6 +1343,9 @@ zfs_rezget(znode_t *zp)
 
 	zp->z_unlinked = (zp->z_links == 0);
 	zp->z_blksz = doi.doi_data_block_size;
+
+	if (vinvalbuf(ZTOV(zp), V_SAVE, 0, 0) != 0)
+		vinvalbuf(ZTOV(zp), 0, 0, 0);
 	if (zp->z_size != size && ZTOV(zp) != NULL)
 		vnode_pager_setsize(ZTOV(zp), zp->z_size);
 


More information about the zfs-devel mailing list