]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
fuse: export fuse_end_request()
authorStefan Hajnoczi <stefanha@redhat.com>
Thu, 21 Jun 2018 08:33:40 +0000 (09:33 +0100)
committerMiklos Szeredi <mszeredi@redhat.com>
Thu, 12 Sep 2019 12:59:40 +0000 (14:59 +0200)
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>
fs/fuse/dev.c
fs/fuse/fuse_i.h

index d7cae9001ca728d6902e8ab3cc838a50e89e8325..2696f000df67edb61aea2cc594f5b25ec93a5233 100644 (file)
@@ -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);
        }
 }
 
index 378f1fe69d077e7ed37089fa202f035a202f92e9..5c50d3da1b0d166d70758a77fe8d5cdc9b0183bd 100644 (file)
@@ -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);