Lines Matching refs:fsvq
85 struct virtio_fs_vq *fsvq;
89 static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,
149 /* Should be called with fsvq->lock held. */
150 static inline void inc_in_flight_req(struct virtio_fs_vq *fsvq)
152 fsvq->in_flight++;
155 /* Should be called with fsvq->lock held. */
156 static inline void dec_in_flight_req(struct virtio_fs_vq *fsvq)
158 WARN_ON(fsvq->in_flight <= 0);
159 fsvq->in_flight--;
160 if (!fsvq->in_flight)
161 complete(&fsvq->in_flight_zero);
187 static void virtio_fs_drain_queue(struct virtio_fs_vq *fsvq)
189 WARN_ON(fsvq->in_flight < 0);
192 spin_lock(&fsvq->lock);
193 if (fsvq->in_flight) {
197 reinit_completion(&fsvq->in_flight_zero);
198 spin_unlock(&fsvq->lock);
199 wait_for_completion(&fsvq->in_flight_zero);
201 spin_unlock(&fsvq->lock);
204 flush_work(&fsvq->done_work);
205 flush_delayed_work(&fsvq->dispatch_work);
210 struct virtio_fs_vq *fsvq;
214 fsvq = &fs->vqs[i];
215 virtio_fs_drain_queue(fsvq);
234 struct virtio_fs_vq *fsvq;
238 fsvq = &fs->vqs[i];
239 spin_lock(&fsvq->lock);
240 fsvq->connected = true;
241 spin_unlock(&fsvq->lock);
295 struct virtio_fs_vq *fsvq = &fs->vqs[i];
297 if (!fsvq->fud)
300 fuse_dev_free(fsvq->fud);
301 fsvq->fud = NULL;
332 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq,
334 struct virtqueue *vq = fsvq->vq;
337 spin_lock(&fsvq->lock);
346 dec_in_flight_req(fsvq);
349 spin_unlock(&fsvq->lock);
355 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq,
361 spin_lock(&fsvq->lock);
362 req = list_first_entry_or_null(&fsvq->end_reqs, struct fuse_req,
365 spin_unlock(&fsvq->lock);
370 spin_unlock(&fsvq->lock);
376 spin_lock(&fsvq->lock);
377 req = list_first_entry_or_null(&fsvq->queued_reqs,
380 spin_unlock(&fsvq->lock);
384 spin_unlock(&fsvq->lock);
386 ret = virtio_fs_enqueue_req(fsvq, req, true);
389 spin_lock(&fsvq->lock);
390 list_add_tail(&req->list, &fsvq->queued_reqs);
391 schedule_delayed_work(&fsvq->dispatch_work,
393 spin_unlock(&fsvq->lock);
397 spin_lock(&fsvq->lock);
398 dec_in_flight_req(fsvq);
399 spin_unlock(&fsvq->lock);
411 static int send_forget_request(struct virtio_fs_vq *fsvq,
421 spin_lock(&fsvq->lock);
422 if (!fsvq->connected) {
424 dec_in_flight_req(fsvq);
430 vq = fsvq->vq;
438 list_add_tail(&forget->list, &fsvq->queued_reqs);
439 schedule_delayed_work(&fsvq->dispatch_work,
442 inc_in_flight_req(fsvq);
450 dec_in_flight_req(fsvq);
456 inc_in_flight_req(fsvq);
458 spin_unlock(&fsvq->lock);
464 spin_unlock(&fsvq->lock);
471 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq,
475 spin_lock(&fsvq->lock);
476 forget = list_first_entry_or_null(&fsvq->queued_reqs,
479 spin_unlock(&fsvq->lock);
484 spin_unlock(&fsvq->lock);
485 if (send_forget_request(fsvq, forget, true))
559 struct virtio_fs_vq *fsvq)
561 struct fuse_pqueue *fpq = &fsvq->fud->pq;
595 spin_lock(&fsvq->lock);
596 dec_in_flight_req(fsvq);
597 spin_unlock(&fsvq->lock);
605 virtio_fs_request_complete(w->req, w->fsvq);
611 struct virtio_fs_vq *fsvq = container_of(work, struct virtio_fs_vq,
613 struct fuse_pqueue *fpq = &fsvq->fud->pq;
614 struct virtqueue *vq = fsvq->vq;
621 spin_lock(&fsvq->lock);
631 spin_unlock(&fsvq->lock);
643 w->fsvq = fsvq;
647 virtio_fs_request_complete(req, fsvq);
655 struct virtio_fs_vq *fsvq = vq_to_fsvq(vq);
657 dev_dbg(&vq->vdev->dev, "%s %s\n", __func__, fsvq->name);
659 schedule_work(&fsvq->done_work);
662 static void virtio_fs_init_vq(struct virtio_fs_vq *fsvq, char *name,
665 strscpy(fsvq->name, name, VQ_NAME_LEN);
666 spin_lock_init(&fsvq->lock);
667 INIT_LIST_HEAD(&fsvq->queued_reqs);
668 INIT_LIST_HEAD(&fsvq->end_reqs);
669 init_completion(&fsvq->in_flight_zero);
672 INIT_WORK(&fsvq->done_work, virtio_fs_requests_done_work);
673 INIT_DELAYED_WORK(&fsvq->dispatch_work,
676 INIT_WORK(&fsvq->done_work, virtio_fs_hiprio_done_work);
677 INIT_DELAYED_WORK(&fsvq->dispatch_work,
909 struct virtio_fs_vq *fsvq;
913 fsvq = &fs->vqs[i];
914 spin_lock(&fsvq->lock);
915 fsvq->connected = false;
916 spin_unlock(&fsvq->lock);
981 struct virtio_fs_vq *fsvq;
988 fsvq = &fs->vqs[VQ_HIPRIO];
1005 send_forget_request(fsvq, forget, false);
1121 static int virtio_fs_enqueue_req(struct virtio_fs_vq *fsvq,
1178 spin_lock(&fsvq->lock);
1180 if (!fsvq->connected) {
1181 spin_unlock(&fsvq->lock);
1186 vq = fsvq->vq;
1189 spin_unlock(&fsvq->lock);
1194 fpq = &fsvq->fud->pq;
1203 inc_in_flight_req(fsvq);
1206 spin_unlock(&fsvq->lock);
1230 struct virtio_fs_vq *fsvq;
1247 fsvq = &fs->vqs[queue_id];
1248 ret = virtio_fs_enqueue_req(fsvq, req, false);
1255 spin_lock(&fsvq->lock);
1256 list_add_tail(&req->list, &fsvq->queued_reqs);
1257 inc_in_flight_req(fsvq);
1258 schedule_delayed_work(&fsvq->dispatch_work,
1260 spin_unlock(&fsvq->lock);
1267 spin_lock(&fsvq->lock);
1268 list_add_tail(&req->list, &fsvq->end_reqs);
1269 schedule_delayed_work(&fsvq->dispatch_work, 0);
1270 spin_unlock(&fsvq->lock);
1319 struct virtio_fs_vq *fsvq = &fs->vqs[i];
1321 fsvq->fud = fuse_dev_alloc();
1322 if (!fsvq->fud)
1342 struct virtio_fs_vq *fsvq = &fs->vqs[i];
1344 fuse_dev_install(fsvq->fud, fc);
1364 struct virtio_fs_vq *fsvq = &vfs->vqs[VQ_HIPRIO];
1373 spin_lock(&fsvq->lock);
1374 fsvq->connected = false;
1375 spin_unlock(&fsvq->lock);