summaryrefslogtreecommitdiffstats
path: root/libglusterfs/src
diff options
context:
space:
mode:
Diffstat (limited to 'libglusterfs/src')
-rw-r--r--libglusterfs/src/fd.c24
-rw-r--r--libglusterfs/src/fd.h2
2 files changed, 26 insertions, 0 deletions
diff --git a/libglusterfs/src/fd.c b/libglusterfs/src/fd.c
index 9e91cdb8341..5e25b59cf91 100644
--- a/libglusterfs/src/fd.c
+++ b/libglusterfs/src/fd.c
@@ -499,6 +499,30 @@ fd_bind (fd_t *fd)
return fd;
}
+
+void
+fd_unref_unbind (fd_t *fd)
+{
+ assert (fd->refcount);
+
+ LOCK (&fd->inode->lock);
+ {
+ --fd->refcount;
+ /* Better know what you're doing with this function
+ * because it does not do what fd_destroy does when
+ * refcount goes to 0.
+ * Make sure you only call this when you know there are
+ * pending refs on the fd.
+ */
+ assert (fd->refcount);
+ list_del_init (&fd->inode_list);
+ }
+ UNLOCK (&fd->inode->lock);
+
+ return;
+}
+
+
fd_t *
fd_create (inode_t *inode, pid_t pid)
{
diff --git a/libglusterfs/src/fd.h b/libglusterfs/src/fd.h
index 4ea7fc165e3..48037b72267 100644
--- a/libglusterfs/src/fd.h
+++ b/libglusterfs/src/fd.h
@@ -170,4 +170,6 @@ _fd_ref (fd_t *fd);
void
fd_ctx_dump (fd_t *fd, char *prefix);
+extern void
+fd_unref_unbind (fd_t *fd);
#endif /* _FD_H */