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