diff options
Diffstat (limited to 'fs/fuse/dev.c')
-rw-r--r-- | fs/fuse/dev.c | 39 |
1 files changed, 19 insertions, 20 deletions
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c index ae26f37e53a1..6b5f74cb7b54 100644 --- a/fs/fuse/dev.c +++ b/fs/fuse/dev.c | |||
@@ -202,7 +202,7 @@ void fuse_put_request(struct fuse_conn *fc, struct fuse_req *req) | |||
202 | 202 | ||
203 | /* | 203 | /* |
204 | * This function is called when a request is finished. Either a reply | 204 | * This function is called when a request is finished. Either a reply |
205 | * has arrived or it was interrupted (and not yet sent) or some error | 205 | * has arrived or it was aborted (and not yet sent) or some error |
206 | * occurred during communication with userspace, or the device file | 206 | * occurred during communication with userspace, or the device file |
207 | * was closed. The requester thread is woken up (if still waiting), | 207 | * was closed. The requester thread is woken up (if still waiting), |
208 | * the 'end' callback is called if given, else the reference to the | 208 | * the 'end' callback is called if given, else the reference to the |
@@ -250,12 +250,12 @@ static void request_wait_answer(struct fuse_conn *fc, struct fuse_req *req) | |||
250 | restore_sigs(&oldset); | 250 | restore_sigs(&oldset); |
251 | } | 251 | } |
252 | spin_lock(&fc->lock); | 252 | spin_lock(&fc->lock); |
253 | if (req->state == FUSE_REQ_FINISHED && !req->interrupted) | 253 | if (req->state == FUSE_REQ_FINISHED && !req->aborted) |
254 | return; | 254 | return; |
255 | 255 | ||
256 | if (!req->interrupted) { | 256 | if (!req->aborted) { |
257 | req->out.h.error = -EINTR; | 257 | req->out.h.error = -EINTR; |
258 | req->interrupted = 1; | 258 | req->aborted = 1; |
259 | } | 259 | } |
260 | if (req->locked) { | 260 | if (req->locked) { |
261 | /* This is uninterruptible sleep, because data is | 261 | /* This is uninterruptible sleep, because data is |
@@ -361,14 +361,14 @@ void request_send_background(struct fuse_conn *fc, struct fuse_req *req) | |||
361 | /* | 361 | /* |
362 | * Lock the request. Up to the next unlock_request() there mustn't be | 362 | * Lock the request. Up to the next unlock_request() there mustn't be |
363 | * anything that could cause a page-fault. If the request was already | 363 | * anything that could cause a page-fault. If the request was already |
364 | * interrupted bail out. | 364 | * aborted bail out. |
365 | */ | 365 | */ |
366 | static int lock_request(struct fuse_conn *fc, struct fuse_req *req) | 366 | static int lock_request(struct fuse_conn *fc, struct fuse_req *req) |
367 | { | 367 | { |
368 | int err = 0; | 368 | int err = 0; |
369 | if (req) { | 369 | if (req) { |
370 | spin_lock(&fc->lock); | 370 | spin_lock(&fc->lock); |
371 | if (req->interrupted) | 371 | if (req->aborted) |
372 | err = -ENOENT; | 372 | err = -ENOENT; |
373 | else | 373 | else |
374 | req->locked = 1; | 374 | req->locked = 1; |
@@ -378,7 +378,7 @@ static int lock_request(struct fuse_conn *fc, struct fuse_req *req) | |||
378 | } | 378 | } |
379 | 379 | ||
380 | /* | 380 | /* |
381 | * Unlock request. If it was interrupted during being locked, the | 381 | * Unlock request. If it was aborted during being locked, the |
382 | * requester thread is currently waiting for it to be unlocked, so | 382 | * requester thread is currently waiting for it to be unlocked, so |
383 | * wake it up. | 383 | * wake it up. |
384 | */ | 384 | */ |
@@ -387,7 +387,7 @@ static void unlock_request(struct fuse_conn *fc, struct fuse_req *req) | |||
387 | if (req) { | 387 | if (req) { |
388 | spin_lock(&fc->lock); | 388 | spin_lock(&fc->lock); |
389 | req->locked = 0; | 389 | req->locked = 0; |
390 | if (req->interrupted) | 390 | if (req->aborted) |
391 | wake_up(&req->waitq); | 391 | wake_up(&req->waitq); |
392 | spin_unlock(&fc->lock); | 392 | spin_unlock(&fc->lock); |
393 | } | 393 | } |
@@ -589,8 +589,8 @@ static void request_wait(struct fuse_conn *fc) | |||
589 | * Read a single request into the userspace filesystem's buffer. This | 589 | * Read a single request into the userspace filesystem's buffer. This |
590 | * function waits until a request is available, then removes it from | 590 | * function waits until a request is available, then removes it from |
591 | * the pending list and copies request data to userspace buffer. If | 591 | * the pending list and copies request data to userspace buffer. If |
592 | * no reply is needed (FORGET) or request has been interrupted or | 592 | * no reply is needed (FORGET) or request has been aborted or there |
593 | * there was an error during the copying then it's finished by calling | 593 | * was an error during the copying then it's finished by calling |
594 | * request_end(). Otherwise add it to the processing list, and set | 594 | * request_end(). Otherwise add it to the processing list, and set |
595 | * the 'sent' flag. | 595 | * the 'sent' flag. |
596 | */ | 596 | */ |
@@ -645,10 +645,10 @@ static ssize_t fuse_dev_readv(struct file *file, const struct iovec *iov, | |||
645 | fuse_copy_finish(&cs); | 645 | fuse_copy_finish(&cs); |
646 | spin_lock(&fc->lock); | 646 | spin_lock(&fc->lock); |
647 | req->locked = 0; | 647 | req->locked = 0; |
648 | if (!err && req->interrupted) | 648 | if (!err && req->aborted) |
649 | err = -ENOENT; | 649 | err = -ENOENT; |
650 | if (err) { | 650 | if (err) { |
651 | if (!req->interrupted) | 651 | if (!req->aborted) |
652 | req->out.h.error = -EIO; | 652 | req->out.h.error = -EIO; |
653 | request_end(fc, req); | 653 | request_end(fc, req); |
654 | return err; | 654 | return err; |
@@ -754,7 +754,7 @@ static ssize_t fuse_dev_writev(struct file *file, const struct iovec *iov, | |||
754 | if (!req) | 754 | if (!req) |
755 | goto err_unlock; | 755 | goto err_unlock; |
756 | 756 | ||
757 | if (req->interrupted) { | 757 | if (req->aborted) { |
758 | spin_unlock(&fc->lock); | 758 | spin_unlock(&fc->lock); |
759 | fuse_copy_finish(&cs); | 759 | fuse_copy_finish(&cs); |
760 | spin_lock(&fc->lock); | 760 | spin_lock(&fc->lock); |
@@ -773,9 +773,9 @@ static ssize_t fuse_dev_writev(struct file *file, const struct iovec *iov, | |||
773 | spin_lock(&fc->lock); | 773 | spin_lock(&fc->lock); |
774 | req->locked = 0; | 774 | req->locked = 0; |
775 | if (!err) { | 775 | if (!err) { |
776 | if (req->interrupted) | 776 | if (req->aborted) |
777 | err = -ENOENT; | 777 | err = -ENOENT; |
778 | } else if (!req->interrupted) | 778 | } else if (!req->aborted) |
779 | req->out.h.error = -EIO; | 779 | req->out.h.error = -EIO; |
780 | request_end(fc, req); | 780 | request_end(fc, req); |
781 | 781 | ||
@@ -835,7 +835,7 @@ static void end_requests(struct fuse_conn *fc, struct list_head *head) | |||
835 | /* | 835 | /* |
836 | * Abort requests under I/O | 836 | * Abort requests under I/O |
837 | * | 837 | * |
838 | * The requests are set to interrupted and finished, and the request | 838 | * The requests are set to aborted and finished, and the request |
839 | * waiter is woken up. This will make request_wait_answer() wait | 839 | * waiter is woken up. This will make request_wait_answer() wait |
840 | * until the request is unlocked and then return. | 840 | * until the request is unlocked and then return. |
841 | * | 841 | * |
@@ -850,7 +850,7 @@ static void end_io_requests(struct fuse_conn *fc) | |||
850 | list_entry(fc->io.next, struct fuse_req, list); | 850 | list_entry(fc->io.next, struct fuse_req, list); |
851 | void (*end) (struct fuse_conn *, struct fuse_req *) = req->end; | 851 | void (*end) (struct fuse_conn *, struct fuse_req *) = req->end; |
852 | 852 | ||
853 | req->interrupted = 1; | 853 | req->aborted = 1; |
854 | req->out.h.error = -ECONNABORTED; | 854 | req->out.h.error = -ECONNABORTED; |
855 | req->state = FUSE_REQ_FINISHED; | 855 | req->state = FUSE_REQ_FINISHED; |
856 | list_del_init(&req->list); | 856 | list_del_init(&req->list); |
@@ -883,9 +883,8 @@ static void end_io_requests(struct fuse_conn *fc) | |||
883 | * onto the pending list is prevented by req->connected being false. | 883 | * onto the pending list is prevented by req->connected being false. |
884 | * | 884 | * |
885 | * Progression of requests under I/O to the processing list is | 885 | * Progression of requests under I/O to the processing list is |
886 | * prevented by the req->interrupted flag being true for these | 886 | * prevented by the req->aborted flag being true for these requests. |
887 | * requests. For this reason requests on the io list must be aborted | 887 | * For this reason requests on the io list must be aborted first. |
888 | * first. | ||
889 | */ | 888 | */ |
890 | void fuse_abort_conn(struct fuse_conn *fc) | 889 | void fuse_abort_conn(struct fuse_conn *fc) |
891 | { | 890 | { |