Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 16 Sep 2019 14:51:49 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r352404 - head/sys/fs/fuse
Message-ID:  <201909161451.x8GEpn6O043081@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Mon Sep 16 14:51:49 2019
New Revision: 352404
URL: https://svnweb.freebsd.org/changeset/base/352404

Log:
  fusefs: fix some minor issues with fuse_vnode_setparent
  
  * When unparenting a vnode, actually clear the flag. AFAIK this is basically
    a no-op because we only unparent a vnode when reclaiming it or when
    unlinking.
  
  * There's no need to call fuse_vnode_setparent during reclaim, because we're
    about to free the vnode data anyway.
  
  Reviewed by:	emaste
  MFC after:	2 weeks
  Sponsored by:	The FreeBSD Foundation
  Differential Revision:	https://reviews.freebsd.org/D21630

Modified:
  head/sys/fs/fuse/fuse_node.h
  head/sys/fs/fuse/fuse_vnops.c

Modified: head/sys/fs/fuse/fuse_node.h
==============================================================================
--- head/sys/fs/fuse/fuse_node.h	Mon Sep 16 14:51:24 2019	(r352403)
+++ head/sys/fs/fuse/fuse_node.h	Mon Sep 16 14:51:49 2019	(r352404)
@@ -174,6 +174,8 @@ fuse_vnode_setparent(struct vnode *vp, struct vnode *d
 		MPASS(dvp->v_type == VDIR);
 		VTOFUD(vp)->parent_nid = VTOI(dvp);
 		VTOFUD(vp)->flag |= FN_PARENT_NID;
+	} else {
+		VTOFUD(vp)->flag &= ~FN_PARENT_NID;
 	}
 }
 

Modified: head/sys/fs/fuse/fuse_vnops.c
==============================================================================
--- head/sys/fs/fuse/fuse_vnops.c	Mon Sep 16 14:51:24 2019	(r352403)
+++ head/sys/fs/fuse/fuse_vnops.c	Mon Sep 16 14:51:49 2019	(r352404)
@@ -1525,11 +1525,10 @@ fuse_vnop_reclaim(struct vop_reclaim_args *ap)
 		fuse_filehandle_close(vp, fufh, td, NULL);
 	}
 
-	if ((!fuse_isdeadfs(vp)) && (fvdat->nlookup)) {
+	if (!fuse_isdeadfs(vp) && fvdat->nlookup > 0) {
 		fuse_internal_forget_send(vnode_mount(vp), td, NULL, VTOI(vp),
 		    fvdat->nlookup);
 	}
-	fuse_vnode_setparent(vp, NULL);
 	cache_purge(vp);
 	vfs_hash_remove(vp);
 	fuse_vnode_destroy(vp);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201909161451.x8GEpn6O043081>