aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2009-05-27 10:17:24 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2009-05-27 10:17:24 +0000
commit0db74cc67c5e14e54f2e61bd586139776ab56452 (patch)
tree52a610f33eed9e1a5c3b19232b4c902f7250c8c1
parent78cbfe5972209b0a32453f127dcc9f652eedeeaa (diff)
downloadlibfuse-0db74cc67c5e14e54f2e61bd586139776ab56452.tar.gz
Don't call forget_node() if the lookup was negative and write()
for the reply returned ENOENT. Reported by John Haxby
-rw-r--r--ChangeLog5
-rw-r--r--lib/fuse.c7
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index b976a70..9791a7f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-27 Miklos Szeredi <miklos@szeredi.hu>
+
+ * Don't call forget_node() if the lookup was negative and write()
+ for the reply returned ENOENT. Reported by John Haxby
+
2009-05-25 Miklos Szeredi <miklos@szeredi.hu>
* Add FUSE_CAP_EXPORT_SUPPORT to fuse_common.h
diff --git a/lib/fuse.c b/lib/fuse.c
index 3f811ae..8c27cd3 100644
--- a/lib/fuse.c
+++ b/lib/fuse.c
@@ -1908,8 +1908,11 @@ static void reply_entry(fuse_req_t req, const struct fuse_entry_param *e,
{
if (!err) {
struct fuse *f = req_fuse(req);
- if (fuse_reply_entry(req, e) == -ENOENT)
- forget_node(f, e->ino, 1);
+ if (fuse_reply_entry(req, e) == -ENOENT) {
+ /* Skip forget for negative result */
+ if (e->ino != 0)
+ forget_node(f, e->ino, 1);
+ }
} else
reply_err(req, err);
}