From 4dc7e675bb17c7a126c78de75004877646d7605f Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Fri, 9 Dec 2011 16:07:55 +0100 Subject: Don't unhash name in FORGET This resulted in ENOENT being returned for unlinked but still open files if the kernel sent a FORGET request for the parent directory. Discovered with fs_racer in LTP. --- lib/fuse.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'lib/fuse.c') diff --git a/lib/fuse.c b/lib/fuse.c index 9073daf..e01f450 100644 --- a/lib/fuse.c +++ b/lib/fuse.c @@ -775,7 +775,7 @@ static void delete_node(struct fuse *f, struct node *node) (unsigned long long) node->nodeid); assert(node->treelock == 0); - assert(!node->name); + unhash_name(f, node); if (lru_enabled(f)) remove_node_lru(node); unhash_id(f, node); @@ -1258,7 +1258,6 @@ static void forget_node(struct fuse *f, fuse_ino_t nodeid, uint64_t nlookup) assert(node->nlookup >= nlookup); node->nlookup -= nlookup; if (!node->nlookup) { - unhash_name(f, node); unref_node(f, node); } else if (lru_enabled(f) && node->nlookup == 1) { set_forget_time(f, node); -- cgit v1.2.3