]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - fs/fuse/dev.c
[PATCH] fuse: support caching negative dentries
[karo-tx-linux.git] / fs / fuse / dev.c
index a6f90a6c754a1b573ecdaf0eb849cbfc8e802be5..e5bc3f8eebd06a092f2f88343995fc13c870fcf4 100644 (file)
@@ -178,12 +178,21 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
                if (req->misc.init_in_out.major != FUSE_KERNEL_VERSION)
                        fc->conn_error = 1;
 
+               fc->minor = req->misc.init_in_out.minor;
+
                /* After INIT reply is received other requests can go
                   out.  So do (FUSE_MAX_OUTSTANDING - 1) number of
                   up()s on outstanding_sem.  The last up() is done in
                   fuse_putback_request() */
                for (i = 1; i < FUSE_MAX_OUTSTANDING; i++)
                        up(&fc->outstanding_sem);
+       } else if (req->in.h.opcode == FUSE_RELEASE && req->inode == NULL) {
+               /* Special case for failed iget in CREATE */
+               u64 nodeid = req->in.h.nodeid;
+               __fuse_get_request(req);
+               fuse_reset_request(req);
+               fuse_send_forget(fc, req, nodeid, 1);
+               putback = 0;
        }
        if (putback)
                fuse_putback_request(fc, req);