Lines Matching refs:fsvq

58 static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,
74 static inline void inc_in_flight_req(struct virtio_fs_vq *fsvq) in inc_in_flight_req() argument
76 fsvq->in_flight++; in inc_in_flight_req()
80 static inline void dec_in_flight_req(struct virtio_fs_vq *fsvq) in dec_in_flight_req() argument
82 WARN_ON(fsvq->in_flight <= 0); in dec_in_flight_req()
83 fsvq->in_flight--; in dec_in_flight_req()
109 static void virtio_fs_drain_queue(struct virtio_fs_vq *fsvq) in virtio_fs_drain_queue() argument
111 WARN_ON(fsvq->in_flight < 0); in virtio_fs_drain_queue()
115 spin_lock(&fsvq->lock); in virtio_fs_drain_queue()
116 if (!fsvq->in_flight) { in virtio_fs_drain_queue()
117 spin_unlock(&fsvq->lock); in virtio_fs_drain_queue()
120 spin_unlock(&fsvq->lock); in virtio_fs_drain_queue()
125 flush_work(&fsvq->done_work); in virtio_fs_drain_queue()
126 flush_delayed_work(&fsvq->dispatch_work); in virtio_fs_drain_queue()
131 struct virtio_fs_vq *fsvq; in virtio_fs_drain_all_queues() local
135 fsvq = &fs->vqs[i]; in virtio_fs_drain_all_queues()
136 virtio_fs_drain_queue(fsvq); in virtio_fs_drain_all_queues()
142 struct virtio_fs_vq *fsvq; in virtio_fs_start_all_queues() local
146 fsvq = &fs->vqs[i]; in virtio_fs_start_all_queues()
147 spin_lock(&fsvq->lock); in virtio_fs_start_all_queues()
148 fsvq->connected = true; in virtio_fs_start_all_queues()
149 spin_unlock(&fsvq->lock); in virtio_fs_start_all_queues()
203 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_free_devs() local
205 if (!fsvq->fud) in virtio_fs_free_devs()
208 fuse_dev_free(fsvq->fud); in virtio_fs_free_devs()
209 fsvq->fud = NULL; in virtio_fs_free_devs()
240 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq, in virtio_fs_hiprio_done_work() local
242 struct virtqueue *vq = fsvq->vq; in virtio_fs_hiprio_done_work()
245 spin_lock(&fsvq->lock); in virtio_fs_hiprio_done_work()
254 dec_in_flight_req(fsvq); in virtio_fs_hiprio_done_work()
257 spin_unlock(&fsvq->lock); in virtio_fs_hiprio_done_work()
263 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq, in virtio_fs_request_dispatch_work() local
265 struct fuse_conn *fc = fsvq->fud->fc; in virtio_fs_request_dispatch_work()
270 spin_lock(&fsvq->lock); in virtio_fs_request_dispatch_work()
271 req = list_first_entry_or_null(&fsvq->end_reqs, struct fuse_req, in virtio_fs_request_dispatch_work()
274 spin_unlock(&fsvq->lock); in virtio_fs_request_dispatch_work()
279 spin_unlock(&fsvq->lock); in virtio_fs_request_dispatch_work()
285 spin_lock(&fsvq->lock); in virtio_fs_request_dispatch_work()
286 req = list_first_entry_or_null(&fsvq->queued_reqs, in virtio_fs_request_dispatch_work()
289 spin_unlock(&fsvq->lock); in virtio_fs_request_dispatch_work()
293 spin_unlock(&fsvq->lock); in virtio_fs_request_dispatch_work()
295 ret = virtio_fs_enqueue_req(fsvq, req, true); in virtio_fs_request_dispatch_work()
298 spin_lock(&fsvq->lock); in virtio_fs_request_dispatch_work()
299 list_add_tail(&req->list, &fsvq->queued_reqs); in virtio_fs_request_dispatch_work()
300 schedule_delayed_work(&fsvq->dispatch_work, in virtio_fs_request_dispatch_work()
302 spin_unlock(&fsvq->lock); in virtio_fs_request_dispatch_work()
306 spin_lock(&fsvq->lock); in virtio_fs_request_dispatch_work()
307 dec_in_flight_req(fsvq); in virtio_fs_request_dispatch_work()
308 spin_unlock(&fsvq->lock); in virtio_fs_request_dispatch_work()
319 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq, in virtio_fs_hiprio_dispatch_work() local
321 struct virtqueue *vq = fsvq->vq; in virtio_fs_hiprio_dispatch_work()
329 spin_lock(&fsvq->lock); in virtio_fs_hiprio_dispatch_work()
330 forget = list_first_entry_or_null(&fsvq->queued_reqs, in virtio_fs_hiprio_dispatch_work()
333 spin_unlock(&fsvq->lock); in virtio_fs_hiprio_dispatch_work()
338 if (!fsvq->connected) { in virtio_fs_hiprio_dispatch_work()
339 dec_in_flight_req(fsvq); in virtio_fs_hiprio_dispatch_work()
340 spin_unlock(&fsvq->lock); in virtio_fs_hiprio_dispatch_work()
355 &fsvq->queued_reqs); in virtio_fs_hiprio_dispatch_work()
356 schedule_delayed_work(&fsvq->dispatch_work, in virtio_fs_hiprio_dispatch_work()
361 dec_in_flight_req(fsvq); in virtio_fs_hiprio_dispatch_work()
364 spin_unlock(&fsvq->lock); in virtio_fs_hiprio_dispatch_work()
369 spin_unlock(&fsvq->lock); in virtio_fs_hiprio_dispatch_work()
448 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq, in virtio_fs_requests_done_work() local
450 struct fuse_pqueue *fpq = &fsvq->fud->pq; in virtio_fs_requests_done_work()
451 struct fuse_conn *fc = fsvq->fud->fc; in virtio_fs_requests_done_work()
452 struct virtqueue *vq = fsvq->vq; in virtio_fs_requests_done_work()
462 spin_lock(&fsvq->lock); in virtio_fs_requests_done_work()
472 spin_unlock(&fsvq->lock); in virtio_fs_requests_done_work()
505 spin_lock(&fsvq->lock); in virtio_fs_requests_done_work()
506 dec_in_flight_req(fsvq); in virtio_fs_requests_done_work()
507 spin_unlock(&fsvq->lock); in virtio_fs_requests_done_work()
514 struct virtio_fs_vq *fsvq = vq_to_fsvq(vq); in virtio_fs_vq_done() local
516 dev_dbg(&vq->vdev->dev, "%s %s\n", __func__, fsvq->name); in virtio_fs_vq_done()
518 schedule_work(&fsvq->done_work); in virtio_fs_vq_done()
643 struct virtio_fs_vq *fsvq; in virtio_fs_stop_all_queues() local
647 fsvq = &fs->vqs[i]; in virtio_fs_stop_all_queues()
648 spin_lock(&fsvq->lock); in virtio_fs_stop_all_queues()
649 fsvq->connected = false; in virtio_fs_stop_all_queues()
650 spin_unlock(&fsvq->lock); in virtio_fs_stop_all_queues()
717 struct virtio_fs_vq *fsvq; in virtio_fs_wake_forget_and_unlock() local
726 fsvq = &fs->vqs[VQ_HIPRIO]; in virtio_fs_wake_forget_and_unlock()
745 spin_lock(&fsvq->lock); in virtio_fs_wake_forget_and_unlock()
747 if (!fsvq->connected) { in virtio_fs_wake_forget_and_unlock()
749 spin_unlock(&fsvq->lock); in virtio_fs_wake_forget_and_unlock()
753 vq = fsvq->vq; in virtio_fs_wake_forget_and_unlock()
761 list_add_tail(&forget->list, &fsvq->queued_reqs); in virtio_fs_wake_forget_and_unlock()
762 schedule_delayed_work(&fsvq->dispatch_work, in virtio_fs_wake_forget_and_unlock()
764 inc_in_flight_req(fsvq); in virtio_fs_wake_forget_and_unlock()
770 spin_unlock(&fsvq->lock); in virtio_fs_wake_forget_and_unlock()
774 inc_in_flight_req(fsvq); in virtio_fs_wake_forget_and_unlock()
777 spin_unlock(&fsvq->lock); in virtio_fs_wake_forget_and_unlock()
875 static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq, in virtio_fs_enqueue_req() argument
932 spin_lock(&fsvq->lock); in virtio_fs_enqueue_req()
934 if (!fsvq->connected) { in virtio_fs_enqueue_req()
935 spin_unlock(&fsvq->lock); in virtio_fs_enqueue_req()
940 vq = fsvq->vq; in virtio_fs_enqueue_req()
943 spin_unlock(&fsvq->lock); in virtio_fs_enqueue_req()
948 fpq = &fsvq->fud->pq; in virtio_fs_enqueue_req()
957 inc_in_flight_req(fsvq); in virtio_fs_enqueue_req()
960 spin_unlock(&fsvq->lock); in virtio_fs_enqueue_req()
984 struct virtio_fs_vq *fsvq; in virtio_fs_wake_pending_and_unlock() local
1001 fsvq = &fs->vqs[queue_id]; in virtio_fs_wake_pending_and_unlock()
1002 ret = virtio_fs_enqueue_req(fsvq, req, false); in virtio_fs_wake_pending_and_unlock()
1009 spin_lock(&fsvq->lock); in virtio_fs_wake_pending_and_unlock()
1010 list_add_tail(&req->list, &fsvq->queued_reqs); in virtio_fs_wake_pending_and_unlock()
1011 inc_in_flight_req(fsvq); in virtio_fs_wake_pending_and_unlock()
1012 schedule_delayed_work(&fsvq->dispatch_work, in virtio_fs_wake_pending_and_unlock()
1014 spin_unlock(&fsvq->lock); in virtio_fs_wake_pending_and_unlock()
1021 spin_lock(&fsvq->lock); in virtio_fs_wake_pending_and_unlock()
1022 list_add_tail(&req->list, &fsvq->end_reqs); in virtio_fs_wake_pending_and_unlock()
1023 schedule_delayed_work(&fsvq->dispatch_work, 0); in virtio_fs_wake_pending_and_unlock()
1024 spin_unlock(&fsvq->lock); in virtio_fs_wake_pending_and_unlock()
1069 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_fill_super() local
1071 fsvq->fud = fuse_dev_alloc(); in virtio_fs_fill_super()
1072 if (!fsvq->fud) in virtio_fs_fill_super()
1084 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_fill_super() local
1088 fuse_dev_install(fsvq->fud, fc); in virtio_fs_fill_super()
1108 struct virtio_fs_vq *fsvq; in virtio_kill_sb() local
1115 fsvq = &vfs->vqs[VQ_HIPRIO]; in virtio_kill_sb()
1118 spin_lock(&fsvq->lock); in virtio_kill_sb()
1119 fsvq->connected = false; in virtio_kill_sb()
1120 spin_unlock(&fsvq->lock); in virtio_kill_sb()