Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

virtiofs: provide a helper function for virtqueue initialization

This reduces code duplication and make it little easier to read code.

Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>

authored by

Vivek Goyal and committed by
Miklos Szeredi
b43b7e81 6bbdd563

+30 -20
+30 -20
fs/fuse/virtio_fs.c
··· 24 24 VQ_REQUEST 25 25 }; 26 26 27 + #define VQ_NAME_LEN 24 28 + 27 29 /* Per-virtqueue state */ 28 30 struct virtio_fs_vq { 29 31 spinlock_t lock; ··· 38 36 bool connected; 39 37 long in_flight; 40 38 struct completion in_flight_zero; /* No inflight requests */ 41 - char name[24]; 39 + char name[VQ_NAME_LEN]; 42 40 } ____cacheline_aligned_in_smp; 43 41 44 42 /* A virtio-fs device instance */ ··· 598 596 schedule_work(&fsvq->done_work); 599 597 } 600 598 599 + static void virtio_fs_init_vq(struct virtio_fs_vq *fsvq, char *name, 600 + int vq_type) 601 + { 602 + strncpy(fsvq->name, name, VQ_NAME_LEN); 603 + spin_lock_init(&fsvq->lock); 604 + INIT_LIST_HEAD(&fsvq->queued_reqs); 605 + INIT_LIST_HEAD(&fsvq->end_reqs); 606 + init_completion(&fsvq->in_flight_zero); 607 + 608 + if (vq_type == VQ_REQUEST) { 609 + INIT_WORK(&fsvq->done_work, virtio_fs_requests_done_work); 610 + INIT_DELAYED_WORK(&fsvq->dispatch_work, 611 + virtio_fs_request_dispatch_work); 612 + } else { 613 + INIT_WORK(&fsvq->done_work, virtio_fs_hiprio_done_work); 614 + INIT_DELAYED_WORK(&fsvq->dispatch_work, 615 + virtio_fs_hiprio_dispatch_work); 616 + } 617 + } 618 + 601 619 /* Initialize virtqueues */ 602 620 static int virtio_fs_setup_vqs(struct virtio_device *vdev, 603 621 struct virtio_fs *fs) ··· 633 611 if (fs->num_request_queues == 0) 634 612 return -EINVAL; 635 613 636 - fs->nvqs = 1 + fs->num_request_queues; 614 + fs->nvqs = VQ_REQUEST + fs->num_request_queues; 637 615 fs->vqs = kcalloc(fs->nvqs, sizeof(fs->vqs[VQ_HIPRIO]), GFP_KERNEL); 638 616 if (!fs->vqs) 639 617 return -ENOMEM; ··· 647 625 goto out; 648 626 } 649 627 628 + /* Initialize the hiprio/forget request virtqueue */ 650 629 callbacks[VQ_HIPRIO] = virtio_fs_vq_done; 651 - snprintf(fs->vqs[VQ_HIPRIO].name, sizeof(fs->vqs[VQ_HIPRIO].name), 652 - "hiprio"); 630 + virtio_fs_init_vq(&fs->vqs[VQ_HIPRIO], "hiprio", VQ_HIPRIO); 653 631 names[VQ_HIPRIO] = fs->vqs[VQ_HIPRIO].name; 654 - INIT_WORK(&fs->vqs[VQ_HIPRIO].done_work, virtio_fs_hiprio_done_work); 655 - INIT_LIST_HEAD(&fs->vqs[VQ_HIPRIO].queued_reqs); 656 - INIT_LIST_HEAD(&fs->vqs[VQ_HIPRIO].end_reqs); 657 - INIT_DELAYED_WORK(&fs->vqs[VQ_HIPRIO].dispatch_work, 658 - virtio_fs_hiprio_dispatch_work); 659 - init_completion(&fs->vqs[VQ_HIPRIO].in_flight_zero); 660 - spin_lock_init(&fs->vqs[VQ_HIPRIO].lock); 661 632 662 633 /* Initialize the requests virtqueues */ 663 634 for (i = VQ_REQUEST; i < fs->nvqs; i++) { 664 - spin_lock_init(&fs->vqs[i].lock); 665 - INIT_WORK(&fs->vqs[i].done_work, virtio_fs_requests_done_work); 666 - INIT_DELAYED_WORK(&fs->vqs[i].dispatch_work, 667 - virtio_fs_request_dispatch_work); 668 - INIT_LIST_HEAD(&fs->vqs[i].queued_reqs); 669 - INIT_LIST_HEAD(&fs->vqs[i].end_reqs); 670 - init_completion(&fs->vqs[i].in_flight_zero); 671 - snprintf(fs->vqs[i].name, sizeof(fs->vqs[i].name), 672 - "requests.%u", i - VQ_REQUEST); 635 + char vq_name[VQ_NAME_LEN]; 636 + 637 + snprintf(vq_name, VQ_NAME_LEN, "requests.%u", i - VQ_REQUEST); 638 + virtio_fs_init_vq(&fs->vqs[i], vq_name, VQ_REQUEST); 673 639 callbacks[i] = virtio_fs_vq_done; 674 640 names[i] = fs->vqs[i].name; 675 641 }