mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
fuse: export fuse_end_request()
virtio-fs will need to complete requests from outside fs/fuse/dev.c. Make the symbol visible. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
This commit is contained in:
parent
f22f812d5c
commit
04ec5af077
@ -255,7 +255,7 @@ static void flush_bg_queue(struct fuse_conn *fc)
|
||||
* the 'end' callback is called if given, else the reference to the
|
||||
* request is released
|
||||
*/
|
||||
static void request_end(struct fuse_conn *fc, struct fuse_req *req)
|
||||
void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req)
|
||||
{
|
||||
struct fuse_iqueue *fiq = &fc->iq;
|
||||
bool async = req->args->end;
|
||||
@ -309,6 +309,7 @@ static void request_end(struct fuse_conn *fc, struct fuse_req *req)
|
||||
put_request:
|
||||
fuse_put_request(fc, req);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fuse_request_end);
|
||||
|
||||
static int queue_interrupt(struct fuse_iqueue *fiq, struct fuse_req *req)
|
||||
{
|
||||
@ -396,12 +397,12 @@ static void __fuse_request_send(struct fuse_conn *fc, struct fuse_req *req)
|
||||
req->in.h.unique = fuse_get_unique(fiq);
|
||||
queue_request(fiq, req);
|
||||
/* acquire extra reference, since request is still needed
|
||||
after request_end() */
|
||||
after fuse_request_end() */
|
||||
__fuse_get_request(req);
|
||||
spin_unlock(&fiq->lock);
|
||||
|
||||
request_wait_answer(fc, req);
|
||||
/* Pairs with smp_wmb() in request_end() */
|
||||
/* Pairs with smp_wmb() in fuse_request_end() */
|
||||
smp_rmb();
|
||||
}
|
||||
}
|
||||
@ -1151,7 +1152,7 @@ __releases(fiq->lock)
|
||||
* the pending list and copies request data to userspace buffer. If
|
||||
* no reply is needed (FORGET) or request has been aborted or there
|
||||
* was an error during the copying then it's finished by calling
|
||||
* request_end(). Otherwise add it to the processing list, and set
|
||||
* fuse_request_end(). Otherwise add it to the processing list, and set
|
||||
* the 'sent' flag.
|
||||
*/
|
||||
static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
|
||||
@ -1232,7 +1233,7 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
|
||||
/* SETXATTR is special, since it may contain too large data */
|
||||
if (args->opcode == FUSE_SETXATTR)
|
||||
req->out.h.error = -E2BIG;
|
||||
request_end(fc, req);
|
||||
fuse_request_end(fc, req);
|
||||
goto restart;
|
||||
}
|
||||
spin_lock(&fpq->lock);
|
||||
@ -1275,7 +1276,7 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
|
||||
if (!test_bit(FR_PRIVATE, &req->flags))
|
||||
list_del_init(&req->list);
|
||||
spin_unlock(&fpq->lock);
|
||||
request_end(fc, req);
|
||||
fuse_request_end(fc, req);
|
||||
return err;
|
||||
|
||||
err_unlock:
|
||||
@ -1799,7 +1800,7 @@ static int copy_out_args(struct fuse_copy_state *cs, struct fuse_args *args,
|
||||
* the write buffer. The request is then searched on the processing
|
||||
* list by the unique ID found in the header. If found, then remove
|
||||
* it from the list and copy the rest of the buffer to the request.
|
||||
* The request is finished by calling request_end()
|
||||
* The request is finished by calling fuse_request_end().
|
||||
*/
|
||||
static ssize_t fuse_dev_do_write(struct fuse_dev *fud,
|
||||
struct fuse_copy_state *cs, size_t nbytes)
|
||||
@ -1889,7 +1890,7 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud,
|
||||
list_del_init(&req->list);
|
||||
spin_unlock(&fpq->lock);
|
||||
|
||||
request_end(fc, req);
|
||||
fuse_request_end(fc, req);
|
||||
out:
|
||||
return err ? err : nbytes;
|
||||
|
||||
@ -2029,7 +2030,7 @@ static void end_requests(struct fuse_conn *fc, struct list_head *head)
|
||||
req->out.h.error = -ECONNABORTED;
|
||||
clear_bit(FR_SENT, &req->flags);
|
||||
list_del_init(&req->list);
|
||||
request_end(fc, req);
|
||||
fuse_request_end(fc, req);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -829,6 +829,11 @@ ssize_t fuse_simple_request(struct fuse_conn *fc, struct fuse_args *args);
|
||||
int fuse_simple_background(struct fuse_conn *fc, struct fuse_args *args,
|
||||
gfp_t gfp_flags);
|
||||
|
||||
/**
|
||||
* End a finished request
|
||||
*/
|
||||
void fuse_request_end(struct fuse_conn *fc, struct fuse_req *req);
|
||||
|
||||
/* Abort all requests */
|
||||
void fuse_abort_conn(struct fuse_conn *fc);
|
||||
void fuse_wait_aborted(struct fuse_conn *fc);
|
||||
|
Loading…
Reference in New Issue
Block a user