PERFORCE change 195354 for review

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


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

Change 195354 by ilya at ilya_triton2011 on 2011/06/26 09:52:26

	Invalidate attr and purge cache
	Merge http://macfuse.googlecode.com/svn/trunk@1469
	Merge http://macfuse.googlecode.com/svn/trunk@1472
	Partial merge http://macfuse.googlecode.com/svn/trunk@317

Affected files ...

.. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.c#7 edit
.. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#14 edit
.. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#27 edit

Differences ...

==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_file.c#7 (text+ko) ====

@@ -84,6 +84,12 @@
     fuse_fh_upcall_count++;
     if ((err = fdisp_wait_answ(&fdi))) {
         debug_printf("OUCH ... daemon didn't give fh (err = %d)\n", err);
+        if (err == ENOENT) {
+            /*
+             * See comment in fuse_vnop_reclaim().
+             */
+            cache_purge(vp);
+        }
         return err;
     }
 
@@ -148,6 +154,7 @@
 out:
     fufh->fh_id = (uint64_t)-1;
     fufh->fh_type = FUFH_INVALID;
+    fuse_invalidate_attr(vp);
 
     return err;
 }

==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#14 (text+ko) ====

@@ -88,7 +88,7 @@
             int denied = fuse_match_cred(data->daemoncred,
                                          cred);
             if (denied) {
-                return EACCES;
+                return EPERM;
             }
         }
         facp->facc_flags |= FACCESS_NOCHECKSPY;
@@ -150,7 +150,7 @@
 
     if (err == ENOSYS) {
         fuse_get_mpdata(mp)->dataflags |= FSESS_NOACCESS;
-        err = 0; // ENOTSUP;
+        err = 0;
     }
 
     return err;

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

@@ -341,6 +341,10 @@
 	fuse_vnode_open(*vpp, x_open_flags, td);
     }
 
+    cache_purge_negative(dvp);
+
+    fuse_ticket_drop(fdip->tick);
+
     return 0;
 
 undo:
@@ -1044,6 +1048,10 @@
     err = fuse_internal_newentry(dvp, vpp, cnp, FUSE_MKDIR, &fmdi,
                                  sizeof(fmdi), VDIR);
 
+    if (err == 0) {
+        fuse_invalidate_attr(dvp);
+    }
+
     return err;
 }
 
@@ -1079,6 +1087,10 @@
     err = fuse_internal_newentry(dvp, vpp, cnp, FUSE_MKNOD, &fmni,
                                  sizeof(fmni), vap->va_type);
 
+    if (err== 0) {
+        fuse_invalidate_attr(dvp);
+    }
+
     return err;
 }
 
@@ -1376,6 +1388,11 @@
 
     err = fuse_internal_remove(dvp, vp, cnp, FUSE_UNLINK);
 
+    if (err == 0) {
+        cache_purge(vp);
+        fuse_invalidate_attr(dvp);
+    }
+
     return err;
 }
 
@@ -1424,10 +1441,24 @@
      */
     err = fuse_internal_rename(fdvp, fcnp, tdvp, tcnp);
 
+    if (err == 0) {
+        fuse_invalidate_attr(fdvp);
+        if (tdvp != fdvp) {
+            fuse_invalidate_attr(tdvp);
+        }
+    }
+
     if (tvp != NULL && tvp != fvp) {
         cache_purge(tvp);
     }
 
+    if (vnode_isdir(fvp)) {
+        if ((tvp != NULL) && vnode_isdir(tvp)) {
+            cache_purge(tdvp);
+        }
+        cache_purge(fdvp);
+    }
+
 out:
     if (tdvp == tvp) {
         vrele(tdvp);
@@ -1472,6 +1503,10 @@
 
     err = fuse_internal_remove(ap->a_dvp, ap->a_vp, ap->a_cnp, FUSE_RMDIR);
 
+    if (err == 0) {
+        fuse_invalidate_attr(dvp);
+    }
+
     return err;
 }
 
@@ -1722,7 +1757,10 @@
     memcpy((char *)fdi.indata + cnp->cn_namelen + 1, target, len);
 
     err = fuse_internal_newentry_core(dvp, vpp, cnp, VLNK, &fdi);
-    fuse_invalidate_attr(dvp);
+
+    if (err == 0) {
+        fuse_invalidate_attr(dvp);
+    }
 
     return err;
 }


More information about the p4-projects mailing list