Page MenuHomeFreeBSD

D55665.id173182.diff
No OneTemporary

D55665.id173182.diff

diff --git a/sys/fs/p9fs/p9fs_vnops.c b/sys/fs/p9fs/p9fs_vnops.c
--- a/sys/fs/p9fs/p9fs_vnops.c
+++ b/sys/fs/p9fs/p9fs_vnops.c
@@ -959,8 +959,12 @@
/* Update the pager size if file size changes on host */
if (inode->i_size != stat->st_size) {
inode->i_size = stat->st_size;
- if (vp->v_type == VREG)
- vnode_pager_setsize(vp, inode->i_size);
+ if (vp->v_type == VREG) {
+ if (VOP_ISLOCKED(vp) == LK_EXCLUSIVE)
+ vnode_pager_setsize(vp, inode->i_size);
+ else
+ vn_delay_setsize(vp);
+ }
}
inode->i_mtime = stat->st_mtime_sec;
@@ -2213,12 +2217,25 @@
return (rtvals[0]);
}
+static int
+p9fs_delayed_setsize(struct vop_delayed_setsize_args *ap)
+{
+ struct vnode *vp;
+ struct p9fs_node *np;
+
+ vp = ap->a_vp;
+ np = P9FS_VTON(vp);
+ vnode_pager_setsize(vp, np->inode.i_size);
+ return (0);
+}
+
struct vop_vector p9fs_vnops = {
.vop_default = &default_vnodeops,
.vop_lookup = p9fs_lookup,
.vop_open = p9fs_open,
.vop_close = p9fs_close,
.vop_access = p9fs_access,
+ .vop_delayed_setsize = p9fs_delayed_setsize,
.vop_getattr = p9fs_getattr_dotl,
.vop_setattr = p9fs_setattr_dotl,
.vop_reclaim = p9fs_reclaim,

File Metadata

Mime Type
text/plain
Expires
Fri, May 22, 8:42 PM (17 h, 13 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
29325875
Default Alt Text
D55665.id173182.diff (1 KB)

Event Timeline