Page MenuHomeFreeBSD

D55145.diff
No OneTemporary

D55145.diff

diff --git a/sys/fs/fuse/fuse_internal.c b/sys/fs/fuse/fuse_internal.c
--- a/sys/fs/fuse/fuse_internal.c
+++ b/sys/fs/fuse/fuse_internal.c
@@ -931,8 +931,16 @@
fao->attr.mtime = old_mtime.tv_sec;
fao->attr.mtimensec = old_mtime.tv_nsec;
}
- fuse_internal_cache_attrs(vp, &fao->attr, fao->attr_valid,
- fao->attr_valid_nsec, vap, true);
+ /* Upgrade to exclusive lock if needed for cache update */
+ if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) {
+ vn_lock(vp, LK_UPGRADE | LK_RETRY);
+ fuse_internal_cache_attrs(vp, &fao->attr, fao->attr_valid,
+ fao->attr_valid_nsec, vap, true);
+ vn_lock(vp, LK_DOWNGRADE | LK_RETRY);
+ } else {
+ fuse_internal_cache_attrs(vp, &fao->attr, fao->attr_valid,
+ fao->attr_valid_nsec, vap, true);
+ }
if (vtyp != vnode_vtype(vp)) {
fuse_internal_vnode_disappear(vp);
err = ENOENT;

File Metadata

Mime Type
text/plain
Expires
Wed, May 27, 8:57 AM (8 h, 35 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33510006
Default Alt Text
D55145.diff (832 B)

Event Timeline