• Home
  • Raw
  • Download

Lines Matching refs:fs

63 	struct virtio_fs *fs = vq->vdev->priv;  in vq_to_fsvq()  local
65 return &fs->vqs[vq->index]; in vq_to_fsvq()
95 static void virtio_fs_put(struct virtio_fs *fs) in virtio_fs_put() argument
97 kref_put(&fs->refcount, release_virtio_fs_obj); in virtio_fs_put()
129 static void virtio_fs_drain_all_queues(struct virtio_fs *fs) in virtio_fs_drain_all_queues() argument
134 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_drain_all_queues()
135 fsvq = &fs->vqs[i]; in virtio_fs_drain_all_queues()
140 static void virtio_fs_start_all_queues(struct virtio_fs *fs) in virtio_fs_start_all_queues() argument
145 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_start_all_queues()
146 fsvq = &fs->vqs[i]; in virtio_fs_start_all_queues()
154 static int virtio_fs_add_instance(struct virtio_fs *fs) in virtio_fs_add_instance() argument
162 if (strcmp(fs->tag, fs2->tag) == 0) in virtio_fs_add_instance()
167 list_add_tail(&fs->list, &virtio_fs_instances); in virtio_fs_add_instance()
179 struct virtio_fs *fs; in virtio_fs_find_instance() local
183 list_for_each_entry(fs, &virtio_fs_instances, list) { in virtio_fs_find_instance()
184 if (strcmp(fs->tag, tag) == 0) { in virtio_fs_find_instance()
185 kref_get(&fs->refcount); in virtio_fs_find_instance()
190 fs = NULL; /* not found */ in virtio_fs_find_instance()
195 return fs; in virtio_fs_find_instance()
198 static void virtio_fs_free_devs(struct virtio_fs *fs) in virtio_fs_free_devs() argument
202 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_free_devs()
203 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_free_devs()
214 static int virtio_fs_read_tag(struct virtio_device *vdev, struct virtio_fs *fs) in virtio_fs_read_tag() argument
229 fs->tag = devm_kmalloc(&vdev->dev, len + 1, GFP_KERNEL); in virtio_fs_read_tag()
230 if (!fs->tag) in virtio_fs_read_tag()
232 memcpy(fs->tag, tag_buf, len); in virtio_fs_read_tag()
233 fs->tag[len] = '\0'; in virtio_fs_read_tag()
523 struct virtio_fs *fs) in virtio_fs_setup_vqs() argument
532 &fs->num_request_queues); in virtio_fs_setup_vqs()
533 if (fs->num_request_queues == 0) in virtio_fs_setup_vqs()
536 fs->nvqs = 1 + fs->num_request_queues; in virtio_fs_setup_vqs()
537 fs->vqs = kcalloc(fs->nvqs, sizeof(fs->vqs[VQ_HIPRIO]), GFP_KERNEL); in virtio_fs_setup_vqs()
538 if (!fs->vqs) in virtio_fs_setup_vqs()
541 vqs = kmalloc_array(fs->nvqs, sizeof(vqs[VQ_HIPRIO]), GFP_KERNEL); in virtio_fs_setup_vqs()
542 callbacks = kmalloc_array(fs->nvqs, sizeof(callbacks[VQ_HIPRIO]), in virtio_fs_setup_vqs()
544 names = kmalloc_array(fs->nvqs, sizeof(names[VQ_HIPRIO]), GFP_KERNEL); in virtio_fs_setup_vqs()
551 snprintf(fs->vqs[VQ_HIPRIO].name, sizeof(fs->vqs[VQ_HIPRIO].name), in virtio_fs_setup_vqs()
553 names[VQ_HIPRIO] = fs->vqs[VQ_HIPRIO].name; in virtio_fs_setup_vqs()
554 INIT_WORK(&fs->vqs[VQ_HIPRIO].done_work, virtio_fs_hiprio_done_work); in virtio_fs_setup_vqs()
555 INIT_LIST_HEAD(&fs->vqs[VQ_HIPRIO].queued_reqs); in virtio_fs_setup_vqs()
556 INIT_LIST_HEAD(&fs->vqs[VQ_HIPRIO].end_reqs); in virtio_fs_setup_vqs()
557 INIT_DELAYED_WORK(&fs->vqs[VQ_HIPRIO].dispatch_work, in virtio_fs_setup_vqs()
559 spin_lock_init(&fs->vqs[VQ_HIPRIO].lock); in virtio_fs_setup_vqs()
562 for (i = VQ_REQUEST; i < fs->nvqs; i++) { in virtio_fs_setup_vqs()
563 spin_lock_init(&fs->vqs[i].lock); in virtio_fs_setup_vqs()
564 INIT_WORK(&fs->vqs[i].done_work, virtio_fs_requests_done_work); in virtio_fs_setup_vqs()
565 INIT_DELAYED_WORK(&fs->vqs[i].dispatch_work, in virtio_fs_setup_vqs()
567 INIT_LIST_HEAD(&fs->vqs[i].queued_reqs); in virtio_fs_setup_vqs()
568 INIT_LIST_HEAD(&fs->vqs[i].end_reqs); in virtio_fs_setup_vqs()
569 snprintf(fs->vqs[i].name, sizeof(fs->vqs[i].name), in virtio_fs_setup_vqs()
572 names[i] = fs->vqs[i].name; in virtio_fs_setup_vqs()
575 ret = virtio_find_vqs(vdev, fs->nvqs, vqs, callbacks, names, NULL); in virtio_fs_setup_vqs()
579 for (i = 0; i < fs->nvqs; i++) in virtio_fs_setup_vqs()
580 fs->vqs[i].vq = vqs[i]; in virtio_fs_setup_vqs()
582 virtio_fs_start_all_queues(fs); in virtio_fs_setup_vqs()
588 kfree(fs->vqs); in virtio_fs_setup_vqs()
594 struct virtio_fs *fs) in virtio_fs_cleanup_vqs() argument
601 struct virtio_fs *fs; in virtio_fs_probe() local
604 fs = kzalloc(sizeof(*fs), GFP_KERNEL); in virtio_fs_probe()
605 if (!fs) in virtio_fs_probe()
607 kref_init(&fs->refcount); in virtio_fs_probe()
608 vdev->priv = fs; in virtio_fs_probe()
610 ret = virtio_fs_read_tag(vdev, fs); in virtio_fs_probe()
614 ret = virtio_fs_setup_vqs(vdev, fs); in virtio_fs_probe()
625 ret = virtio_fs_add_instance(fs); in virtio_fs_probe()
633 virtio_fs_cleanup_vqs(vdev, fs); in virtio_fs_probe()
637 kfree(fs); in virtio_fs_probe()
641 static void virtio_fs_stop_all_queues(struct virtio_fs *fs) in virtio_fs_stop_all_queues() argument
646 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_stop_all_queues()
647 fsvq = &fs->vqs[i]; in virtio_fs_stop_all_queues()
656 struct virtio_fs *fs = vdev->priv; in virtio_fs_remove() local
660 list_del_init(&fs->list); in virtio_fs_remove()
661 virtio_fs_stop_all_queues(fs); in virtio_fs_remove()
662 virtio_fs_drain_all_queues(fs); in virtio_fs_remove()
664 virtio_fs_cleanup_vqs(vdev, fs); in virtio_fs_remove()
668 virtio_fs_put(fs); in virtio_fs_remove()
715 struct virtio_fs *fs; in virtio_fs_wake_forget_and_unlock() local
725 fs = fiq->priv; in virtio_fs_wake_forget_and_unlock()
726 fsvq = &fs->vqs[VQ_HIPRIO]; in virtio_fs_wake_forget_and_unlock()
982 struct virtio_fs *fs; in virtio_fs_wake_pending_and_unlock() local
994 fs = fiq->priv; in virtio_fs_wake_pending_and_unlock()
1001 fsvq = &fs->vqs[queue_id]; in virtio_fs_wake_pending_and_unlock()
1039 struct virtio_fs *fs = fc->iq.priv; in virtio_fs_fill_super() local
1061 if (list_empty(&fs->list)) { in virtio_fs_fill_super()
1062 pr_info("virtio-fs: tag <%s> not found\n", fs->tag); in virtio_fs_fill_super()
1069 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_fill_super()
1076 ctx.fudptr = (void **)&fs->vqs[VQ_REQUEST].fud; in virtio_fs_fill_super()
1081 fc = fs->vqs[VQ_REQUEST].fud->fc; in virtio_fs_fill_super()
1083 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_fill_super()
1084 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_fill_super()
1092 virtio_fs_start_all_queues(fs); in virtio_fs_fill_super()
1098 virtio_fs_free_devs(fs); in virtio_fs_fill_super()
1157 struct virtio_fs *fs; in virtio_fs_get_tree() local
1166 fs = virtio_fs_find_instance(fsc->source); in virtio_fs_get_tree()
1167 if (!fs) { in virtio_fs_get_tree()
1175 virtio_fs_put(fs); in virtio_fs_get_tree()
1181 fs); in virtio_fs_get_tree()