• Home
  • Raw
  • Download

Lines Matching full:fs

3  * virtio-fs: Virtio Filesystem
7 #include <linux/fs.h>
27 /* List of virtio-fs device instances and a lock for the list. Also provides
55 /* A virtio-fs device instance */
131 struct virtio_fs *fs = vq->vdev->priv; in vq_to_fsvq() local
133 return &fs->vqs[vq->index]; in vq_to_fsvq()
165 static void virtio_fs_put(struct virtio_fs *fs) in virtio_fs_put() argument
167 kref_put(&fs->refcount, release_virtio_fs_obj); in virtio_fs_put()
200 static void virtio_fs_drain_all_queues_locked(struct virtio_fs *fs) in virtio_fs_drain_all_queues_locked() argument
205 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_drain_all_queues_locked()
206 fsvq = &fs->vqs[i]; in virtio_fs_drain_all_queues_locked()
211 static void virtio_fs_drain_all_queues(struct virtio_fs *fs) in virtio_fs_drain_all_queues() argument
220 virtio_fs_drain_all_queues_locked(fs); in virtio_fs_drain_all_queues()
224 static void virtio_fs_start_all_queues(struct virtio_fs *fs) in virtio_fs_start_all_queues() argument
229 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_start_all_queues()
230 fsvq = &fs->vqs[i]; in virtio_fs_start_all_queues()
238 static int virtio_fs_add_instance(struct virtio_fs *fs) in virtio_fs_add_instance() argument
246 if (strcmp(fs->tag, fs2->tag) == 0) in virtio_fs_add_instance()
251 list_add_tail(&fs->list, &virtio_fs_instances); in virtio_fs_add_instance()
263 struct virtio_fs *fs; in virtio_fs_find_instance() local
267 list_for_each_entry(fs, &virtio_fs_instances, list) { in virtio_fs_find_instance()
268 if (strcmp(fs->tag, tag) == 0) { in virtio_fs_find_instance()
269 kref_get(&fs->refcount); in virtio_fs_find_instance()
274 fs = NULL; /* not found */ in virtio_fs_find_instance()
279 return fs; in virtio_fs_find_instance()
282 static void virtio_fs_free_devs(struct virtio_fs *fs) in virtio_fs_free_devs() argument
286 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_free_devs()
287 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_free_devs()
297 /* Read filesystem name from virtio config into fs->tag (must kfree()). */
298 static int virtio_fs_read_tag(struct virtio_device *vdev, struct virtio_fs *fs) in virtio_fs_read_tag() argument
313 fs->tag = devm_kmalloc(&vdev->dev, len + 1, GFP_KERNEL); in virtio_fs_read_tag()
314 if (!fs->tag) in virtio_fs_read_tag()
316 memcpy(fs->tag, tag_buf, len); in virtio_fs_read_tag()
317 fs->tag[len] = '\0'; in virtio_fs_read_tag()
351 pr_debug("virtio-fs: worker %s called.\n", __func__); in virtio_fs_request_dispatch_work()
392 pr_err("virtio-fs: virtio_fs_enqueue_req() failed %d\n", in virtio_fs_request_dispatch_work()
428 pr_debug("virtio-fs: Could not queue FORGET: err=%d. Will try later\n", in send_forget_request()
438 pr_debug("virtio-fs: Could not queue FORGET: err=%d. Dropping it.\n", in send_forget_request()
465 pr_debug("virtio-fs: worker %s called.\n", __func__); in virtio_fs_hiprio_dispatch_work()
676 struct virtio_fs *fs) in virtio_fs_setup_vqs() argument
685 &fs->num_request_queues); in virtio_fs_setup_vqs()
686 if (fs->num_request_queues == 0) in virtio_fs_setup_vqs()
689 fs->nvqs = VQ_REQUEST + fs->num_request_queues; in virtio_fs_setup_vqs()
690 fs->vqs = kcalloc(fs->nvqs, sizeof(fs->vqs[VQ_HIPRIO]), GFP_KERNEL); in virtio_fs_setup_vqs()
691 if (!fs->vqs) in virtio_fs_setup_vqs()
694 vqs = kmalloc_array(fs->nvqs, sizeof(vqs[VQ_HIPRIO]), GFP_KERNEL); in virtio_fs_setup_vqs()
695 callbacks = kmalloc_array(fs->nvqs, sizeof(callbacks[VQ_HIPRIO]), in virtio_fs_setup_vqs()
697 names = kmalloc_array(fs->nvqs, sizeof(names[VQ_HIPRIO]), GFP_KERNEL); in virtio_fs_setup_vqs()
705 virtio_fs_init_vq(&fs->vqs[VQ_HIPRIO], "hiprio", VQ_HIPRIO); in virtio_fs_setup_vqs()
706 names[VQ_HIPRIO] = fs->vqs[VQ_HIPRIO].name; in virtio_fs_setup_vqs()
709 for (i = VQ_REQUEST; i < fs->nvqs; i++) { in virtio_fs_setup_vqs()
713 virtio_fs_init_vq(&fs->vqs[i], vq_name, VQ_REQUEST); in virtio_fs_setup_vqs()
715 names[i] = fs->vqs[i].name; in virtio_fs_setup_vqs()
718 ret = virtio_find_vqs(vdev, fs->nvqs, vqs, callbacks, names, NULL); in virtio_fs_setup_vqs()
722 for (i = 0; i < fs->nvqs; i++) in virtio_fs_setup_vqs()
723 fs->vqs[i].vq = vqs[i]; in virtio_fs_setup_vqs()
725 virtio_fs_start_all_queues(fs); in virtio_fs_setup_vqs()
731 kfree(fs->vqs); in virtio_fs_setup_vqs()
737 struct virtio_fs *fs) in virtio_fs_cleanup_vqs() argument
749 struct virtio_fs *fs = dax_get_private(dax_dev); in virtio_fs_direct_access() local
751 size_t max_nr_pages = fs->window_len/PAGE_SIZE - pgoff; in virtio_fs_direct_access()
754 *kaddr = fs->window_kaddr + offset; in virtio_fs_direct_access()
756 *pfn = phys_to_pfn_t(fs->window_phys_addr + offset, in virtio_fs_direct_access()
804 static int virtio_fs_setup_dax(struct virtio_device *vdev, struct virtio_fs *fs) in virtio_fs_setup_dax() argument
848 fs->window_kaddr = devm_memremap_pages(&vdev->dev, pgmap); in virtio_fs_setup_dax()
849 if (IS_ERR(fs->window_kaddr)) in virtio_fs_setup_dax()
850 return PTR_ERR(fs->window_kaddr); in virtio_fs_setup_dax()
852 fs->window_phys_addr = (phys_addr_t) cache_reg.addr; in virtio_fs_setup_dax()
853 fs->window_len = (phys_addr_t) cache_reg.len; in virtio_fs_setup_dax()
856 __func__, fs->window_kaddr, cache_reg.addr, cache_reg.len); in virtio_fs_setup_dax()
858 fs->dax_dev = alloc_dax(fs, NULL, &virtio_fs_dax_ops, 0); in virtio_fs_setup_dax()
859 if (IS_ERR(fs->dax_dev)) in virtio_fs_setup_dax()
860 return PTR_ERR(fs->dax_dev); in virtio_fs_setup_dax()
863 fs->dax_dev); in virtio_fs_setup_dax()
868 struct virtio_fs *fs; in virtio_fs_probe() local
871 fs = kzalloc(sizeof(*fs), GFP_KERNEL); in virtio_fs_probe()
872 if (!fs) in virtio_fs_probe()
874 kref_init(&fs->refcount); in virtio_fs_probe()
875 vdev->priv = fs; in virtio_fs_probe()
877 ret = virtio_fs_read_tag(vdev, fs); in virtio_fs_probe()
881 ret = virtio_fs_setup_vqs(vdev, fs); in virtio_fs_probe()
887 ret = virtio_fs_setup_dax(vdev, fs); in virtio_fs_probe()
896 ret = virtio_fs_add_instance(fs); in virtio_fs_probe()
904 virtio_fs_cleanup_vqs(vdev, fs); in virtio_fs_probe()
905 kfree(fs->vqs); in virtio_fs_probe()
909 kfree(fs); in virtio_fs_probe()
913 static void virtio_fs_stop_all_queues(struct virtio_fs *fs) in virtio_fs_stop_all_queues() argument
918 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_stop_all_queues()
919 fsvq = &fs->vqs[i]; in virtio_fs_stop_all_queues()
928 struct virtio_fs *fs = vdev->priv; in virtio_fs_remove() local
932 list_del_init(&fs->list); in virtio_fs_remove()
933 virtio_fs_stop_all_queues(fs); in virtio_fs_remove()
934 virtio_fs_drain_all_queues_locked(fs); in virtio_fs_remove()
936 virtio_fs_cleanup_vqs(vdev, fs); in virtio_fs_remove()
940 virtio_fs_put(fs); in virtio_fs_remove()
948 pr_warn("virtio-fs: suspend/resume not yet supported\n"); in virtio_fs_freeze()
986 struct virtio_fs *fs; in virtio_fs_wake_forget_and_unlock() local
993 fs = fiq->priv; in virtio_fs_wake_forget_and_unlock()
994 fsvq = &fs->vqs[VQ_HIPRIO]; in virtio_fs_wake_forget_and_unlock()
1021 * Normal fs operations on a local filesystems aren't interruptible. in virtio_fs_wake_interrupt_and_unlock()
1234 struct virtio_fs *fs; in virtio_fs_wake_pending_and_unlock() local
1246 fs = fiq->priv; in virtio_fs_wake_pending_and_unlock()
1253 fsvq = &fs->vqs[queue_id]; in virtio_fs_wake_pending_and_unlock()
1270 pr_err("virtio-fs: virtio_fs_enqueue_req() failed %d\n", ret); in virtio_fs_wake_pending_and_unlock()
1304 struct virtio_fs *fs = fc->iq.priv; in virtio_fs_fill_super() local
1317 if (list_empty(&fs->list)) { in virtio_fs_fill_super()
1318 pr_info("virtio-fs: tag <%s> not found\n", fs->tag); in virtio_fs_fill_super()
1324 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_fill_super()
1325 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_fill_super()
1335 if (!fs->dax_dev) { in virtio_fs_fill_super()
1337 pr_err("virtio-fs: dax can't be enabled as filesystem" in virtio_fs_fill_super()
1341 ctx->dax_dev = fs->dax_dev; in virtio_fs_fill_super()
1347 for (i = 0; i < fs->nvqs; i++) { in virtio_fs_fill_super()
1348 struct virtio_fs_vq *fsvq = &fs->vqs[i]; in virtio_fs_fill_super()
1354 virtio_fs_start_all_queues(fs); in virtio_fs_fill_super()
1360 virtio_fs_free_devs(fs); in virtio_fs_fill_super()
1433 struct virtio_fs *fs; in virtio_fs_get_tree() local
1444 fs = virtio_fs_find_instance(fsc->source); in virtio_fs_get_tree()
1445 if (!fs) { in virtio_fs_get_tree()
1446 pr_info("virtio-fs: tag <%s> not found\n", fsc->source); in virtio_fs_get_tree()
1450 virtqueue_size = virtqueue_get_vring_size(fs->vqs[VQ_REQUEST].vq); in virtio_fs_get_tree()
1463 fuse_conn_init(fc, fm, fsc->user_ns, &virtio_fs_fiq_ops, fs); in virtio_fs_get_tree()
1497 virtio_fs_put(fs); in virtio_fs_get_tree()