652 if (i == numargs - 1 && argpages)
653 err = fuse_copy_pages(cs, arg->size, zeroing);
654 else
655 err = fuse_copy_one(cs, arg->value, arg->size);
656 }
657 return err;
658}
659
660static int request_pending(struct fuse_conn *fc)
661{
662 return !list_empty(&fc->pending) || !list_empty(&fc->interrupts);
663}
664
665
666static void request_wait(struct fuse_conn *fc)
667{
668 DECLARE_WAITQUEUE(wait, current);
669
670 add_wait_queue_exclusive(&fc->waitq, &wait);
671 while (fc->connected && !request_pending(fc)) {
672 set_current_state(TASK_INTERRUPTIBLE);
673 if (signal_pending(current))
674 break;
675
676 spin_unlock(&fc->lock);
677 schedule();
678 spin_lock(&fc->lock);
679 }
680 set_current_state(TASK_RUNNING);
681 remove_wait_queue(&fc->waitq, &wait);
682}
683
684
685
686
687
688
689
690
691
692static int fuse_read_interrupt(struct fuse_conn *fc, struct fuse_req *req,