[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