Patch review reguest: zfs_znode.c
Martin Matuska
mm at FreeBSD.org
Wed Aug 24 19:14:15 UTC 2011
On 24. 8. 2011 19:51, Kostik Belousov wrote:
> I recommend you to create a local variable of the type vm_object_t
> and use it, instead of dereferencing the long chain of pointers.
>
> Also, consider moving ffs_pages_remove out from ffs_inode() into vfs_vnops.c,
> calling it e.g. vn_pages_remove(), and use it instead.
Thank you very much for your comments.
A new version with function moved to zfs_vnops.c and considering pjd's
remark is attached.
The function is thematically placed after static update_pages() and
before static mappedread_sf().
--
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)
@@ -1253,6 +1253,8 @@ again:
return (err);
}
+extern void zfs_remove_pages(vnode_t *vp);
+
int
zfs_rezget(znode_t *zp)
{
@@ -1343,8 +1345,11 @@ zfs_rezget(znode_t *zp)
zp->z_unlinked = (zp->z_links == 0);
zp->z_blksz = doi.doi_data_block_size;
- if (zp->z_size != size && ZTOV(zp) != NULL)
- vnode_pager_setsize(ZTOV(zp), zp->z_size);
+ if (ZTOV(zp) != NULL) {
+ zfs_remove_pages(ZTOV(zp));
+ if (zp->z_size != size)
+ vnode_pager_setsize(ZTOV(zp), zp->z_size);
+ }
ZFS_OBJ_HOLD_EXIT(zfsvfs, obj_num);
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
===================================================================
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (revision 225140)
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c (working copy)
@@ -420,6 +420,21 @@ update_pages(vnode_t *vp, int64_t start, int len,
}
/*
+ * Remove all mapped pages from a vnode
+ */
+void
+zfs_remove_pages(vnode_t *vp)
+{
+ vm_object_t obj = vp->v_object;
+
+ if (obj != NULL) {
+ VM_OBJECT_LOCK(obj);
+ vm_object_page_remove(obj, 0, 0, 0);
+ VM_OBJECT_UNLOCK(obj);
+ }
+}
+
+/*
* Read with UIO_NOCOPY flag means that sendfile(2) requests
* ZFS to populate a range of page cache pages with data.
*
More information about the zfs-devel
mailing list