|
@@ -171,19 +171,17 @@ static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req)
|
|
|
/*
|
|
|
* This function is called when a request is finished. Either a reply
|
|
|
* has arrived or it was interrupted (and not yet sent) or some error
|
|
|
- * occurred during communication with userspace, or the device file was
|
|
|
- * closed. It decreases the reference count for the request. In case
|
|
|
- * of a background request the reference to the stored objects are
|
|
|
- * released. The requester thread is woken up (if still waiting), and
|
|
|
- * finally the request is either freed or put on the unused_list
|
|
|
+ * occurred during communication with userspace, or the device file
|
|
|
+ * was closed. In case of a background request the reference to the
|
|
|
+ * stored objects are released. The requester thread is woken up (if
|
|
|
+ * still waiting), and finally the reference to the request is
|
|
|
+ * released
|
|
|
*
|
|
|
* Called with fuse_lock, unlocks it
|
|
|
*/
|
|
|
static void request_end(struct fuse_conn *fc, struct fuse_req *req)
|
|
|
{
|
|
|
- int putback;
|
|
|
req->finished = 1;
|
|
|
- putback = atomic_dec_and_test(&req->count);
|
|
|
spin_unlock(&fuse_lock);
|
|
|
if (req->background) {
|
|
|
down_read(&fc->sbput_sem);
|
|
@@ -197,13 +195,11 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
|
|
|
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;
|
|
|
+ return;
|
|
|
}
|
|
|
- if (putback)
|
|
|
- fuse_putback_request(fc, req);
|
|
|
+ fuse_put_request(fc, req);
|
|
|
}
|
|
|
|
|
|
/*
|