summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libdiskfs/node-drop.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/libdiskfs/node-drop.c b/libdiskfs/node-drop.c
index 663c47a9..ef3285ec 100644
--- a/libdiskfs/node-drop.c
+++ b/libdiskfs/node-drop.c
@@ -61,6 +61,16 @@ diskfs_drop_node (struct node *np)
diskfs_node_update (np, 1);
diskfs_free_node (np, savemode);
}
+ else if (np->sockaddr)
+ /* If NP is a socket naming point, we can't drop it until it actually
+ gets unlinked. Unfortunately we have no way of knowing whether the
+ server is still alive. This will result in a node with zero refs; I'm
+ not sure whether that will cause lossage.... XXX */
+ {
+ spin_unlock (&diskfs_node_refcnt_lock);
+ mutex_unlock (&np->lock);
+ return;
+ }
else
diskfs_node_update (np, diskfs_synchronous);