aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/file.c
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2006-02-16 10:08:32 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2006-02-16 10:08:32 +0000
commit99ac9c0fde5815b16e5c724fe64be4dc47d5366d (patch)
tree94cbaeb1a5358e380d738d865b838fb06173c05f /kernel/file.c
parent1ee1a117c9b87c15c0fe13120a3458e50ab0fe5b (diff)
downloadlibfuse-99ac9c0fde5815b16e5c724fe64be4dc47d5366d.tar.gz
fix
Diffstat (limited to 'kernel/file.c')
-rw-r--r--kernel/file.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/kernel/file.c b/kernel/file.c
index be9cc39..77c540e 100644
--- a/kernel/file.c
+++ b/kernel/file.c
@@ -130,9 +130,14 @@ int fuse_open_common(struct inode *inode, struct file *file, int isdir)
/* Special case for failed iget in CREATE */
static void fuse_release_end(struct fuse_conn *fc, struct fuse_req *req)
{
- u64 nodeid = req->in.h.nodeid;
- fuse_reset_request(req);
- fuse_send_forget(fc, req, nodeid, 1);
+ /* If called from end_io_requests(), req has more than one
+ reference and fuse_reset_request() cannot work */
+ if (fc->connected) {
+ u64 nodeid = req->in.h.nodeid;
+ fuse_reset_request(req);
+ fuse_send_forget(fc, req, nodeid, 1);
+ } else
+ fuse_put_request(fc, req);
}
void fuse_send_release(struct fuse_conn *fc, struct fuse_file *ff,