When renaming a file on a FUSE file system and the target exists and is
open, a deadlock will occur because the target vnode (tvp) has not been
unlocked by fusefs_rename(). When the process that has the file open
calls close(2) the vnode will still be locked with no chance of ever
being unlocked.
ok?
Index: fuse_vnops.c
===================================================================
RCS file: /cvs/src/sys/miscfs/fuse/fuse_vnops.c,v
retrieving revision 1.34
diff -u -p -u -p -r1.34 fuse_vnops.c
--- fuse_vnops.c 17 Nov 2017 15:45:17 -0000 1.34
+++ fuse_vnops.c 24 Nov 2017 23:20:14 -0000
@@ -1261,6 +1261,8 @@ abortit:
vrele(tdvp);
else
vput(tdvp);
+ if (tvp)
+ vput(tvp);
vrele(fdvp);
vrele(fvp);