PERFORCE change 195348 for review

Ilya Putsikau ilya at FreeBSD.org
Sun Jun 26 09:48:02 UTC 2011


http://p4web.freebsd.org/@@195348?ac=10

Change 195348 by ilya at ilya_triton2011 on 2011/06/26 09:47:02

	Resync size in vnop_getattr(). Invalidate attr cache after resize in
	vnop_setattr().  Remove unused node->newfilesize.
	
	Merge http://macfuse.googlecode.com/svn/trunk@89
	Merge http://macfuse.googlecode.com/svn/trunk@149
	Partially merge http://macfuse.googlecode.com/svn/trunk@147

Affected files ...

.. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.h#8 edit
.. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#21 edit

Differences ...

==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_node.h#8 (text+ko) ====

@@ -42,7 +42,6 @@
     struct sx  truncatelock;
 
     off_t      filesize; 
-    off_t      newfilesize;
 
     struct     fuse_filehandle fufh[3];
 

==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#21 (text+ko) ====

@@ -474,6 +474,20 @@
         memcpy(vap, VTOVA(vp), sizeof(*vap));
     }
 
+    if (vnode_isreg(vp)) {
+        /*
+         * This is for those cases when the file size changed without us
+         * knowing, and we want to catch up.
+         */
+        struct fuse_vnode_data *fvdat = VTOFUD(vp);
+        off_t new_filesize = ((struct fuse_attr_out *)fdi.answ)->attr.size;
+
+        if (fvdat->filesize != new_filesize) {
+            fvdat->filesize = new_filesize;
+            vnode_pager_setsize(vp, new_filesize);
+        }
+    }
+
     fuse_ticket_drop(fdi.tick);
 
     if (vnode_vtype(vp) != vap->va_type) {
@@ -1681,13 +1695,15 @@
         }
     }
 
-    cache_attrs(vp, (struct fuse_attr_out *)fdi.answ);
+    if (!err && !sizechanged) {
+        cache_attrs(vp, (struct fuse_attr_out *)fdi.answ);
+    }
 
 out:
     fuse_ticket_drop(fdi.tick);
     if (!err && sizechanged) {
+        fuse_invalidate_attr(vp);
         VTOFUD(vp)->filesize = newsize;
-        VTOFUD(vp)->newfilesize = newsize;
         vnode_pager_setsize(vp, newsize);
     }
 


More information about the p4-projects mailing list