From patchwork Thu Mar 25 16:43:37 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Aneesh Kumar K.V" X-Patchwork-Id: 48580 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id AF5A9B7CBB for ; Fri, 26 Mar 2010 05:30:41 +1100 (EST) Received: from localhost ([127.0.0.1]:50798 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NurpG-0002F2-6Z for incoming@patchwork.ozlabs.org; Thu, 25 Mar 2010 14:30:38 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NuqBF-0007Ny-GM for qemu-devel@nongnu.org; Thu, 25 Mar 2010 12:45:13 -0400 Received: from [140.186.70.92] (port=50850 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NuqB1-0007Je-OK for qemu-devel@nongnu.org; Thu, 25 Mar 2010 12:45:13 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1NuqAs-0005Fr-SE for qemu-devel@nongnu.org; Thu, 25 Mar 2010 12:44:58 -0400 Received: from e23smtp02.au.ibm.com ([202.81.31.144]:52145) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1NuqAq-0005F3-Ne for qemu-devel@nongnu.org; Thu, 25 Mar 2010 12:44:50 -0400 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [202.81.31.246]) by e23smtp02.au.ibm.com (8.14.3/8.13.1) with ESMTP id o2PGfTxh007396 for ; Fri, 26 Mar 2010 03:41:29 +1100 Received: from d23av03.au.ibm.com (d23av03.au.ibm.com [9.190.234.97]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id o2PGcja71667134 for ; Fri, 26 Mar 2010 03:38:45 +1100 Received: from d23av03.au.ibm.com (loopback [127.0.0.1]) by d23av03.au.ibm.com (8.14.3/8.13.1/NCO v10.0 AVout) with ESMTP id o2PGikPk031837 for ; Fri, 26 Mar 2010 03:44:47 +1100 Received: from localhost.localdomain ([9.77.125.24]) by d23av03.au.ibm.com (8.14.3/8.13.1/NCO v10.0 AVin) with ESMTP id o2PGhgP4030935; Fri, 26 Mar 2010 03:44:45 +1100 From: "Aneesh Kumar K.V" To: qemu-devel@nongnu.org Date: Thu, 25 Mar 2010 22:13:37 +0530 Message-Id: <1269535420-31206-30-git-send-email-aneesh.kumar@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.0.2.323.g0d092 In-Reply-To: <1269535420-31206-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> References: <1269535420-31206-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6, seldom 2.4 (older, 4) Cc: ericvh@gmail.com, aliguori@us.ibm.com, "Aneesh Kumar K.V" , Gautham R Shenoy Subject: [Qemu-devel] [PATCH -V3 29/32] virtio-9p: Decouple share_path details from virtio-9p-dev X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Gautham R Shenoy Currently the share_path is an attribute of the virtio-9p device. This patch makes fsdev object as an attribute of virtio-9p device by decoupling the latter's association with share_path. This abstraction would be useful in the future when we want to specify certain file-system specific operations/flags as a part of the command line. So, for now, the command line is going to look something like #qemu -fsdev namefs,id=foo,path="path/to/share" \ -device virtio-9p-pci,fsdev=foo,mount_tag=mount_tag \ . . Signed-off-by: Gautham R Shenoy Signed-off-by: Aneesh Kumar K.V --- hw/9p.h | 2 +- hw/virtio-9p-local.c | 5 ----- hw/virtio-9p.c | 29 +++++++++++++++++++++-------- hw/virtio-pci.c | 2 +- 4 files changed, 23 insertions(+), 15 deletions(-) diff --git a/hw/9p.h b/hw/9p.h index f0ff45b..5fdd770 100644 --- a/hw/9p.h +++ b/hw/9p.h @@ -18,9 +18,9 @@ typedef struct V9fsConf { - char *share_path; /* tag name for the device */ char *tag; + char *fsdev_id; } V9fsConf; #endif diff --git a/hw/virtio-9p-local.c b/hw/virtio-9p-local.c index aae82d2..a0cbcc0 100644 --- a/hw/virtio-9p-local.c +++ b/hw/virtio-9p-local.c @@ -284,8 +284,3 @@ FileOperations local_ops = { .remove = local_remove, .fsync = local_fsync, }; - -FileOperations *virtio_9p_init_local(const char *path) -{ - return &local_ops; -} diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c index d03693d..5ccaeac 100644 --- a/hw/virtio-9p.c +++ b/hw/virtio-9p.c @@ -15,6 +15,7 @@ #include "pc.h" #include "qemu_socket.h" #include "virtio-9p.h" +#include "fsdev/qemu-fsdev.h" #include int dotu = 1; @@ -2214,6 +2215,7 @@ VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf) V9fsState *s; int i, len; struct stat stat; + FsTypeEntry *fse; s = (V9fsState *)virtio_common_init("virtio-9p", @@ -2230,21 +2232,32 @@ VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf) s->vq = virtio_add_queue(&s->vdev, MAX_REQ, handle_9p_output); - if (!conf->share_path || !conf->tag) { + fse = get_fsdev_fsentry(conf->fsdev_id); + + if (!fse) { + /* We don't have a fsdev identified by fsdev_id */ + fprintf(stderr, "Virtio-9p device couldn't find fsdev " + "with the id %s\n", conf->fsdev_id); + exit(1); + } + + if (!fse->path || !conf->tag) { /* we haven't specified a mount_tag */ - fprintf(stderr, "Virtio-9p devices need share_path " - "and mount_tag arguments\n"); + fprintf(stderr, "fsdev with id %s needs path " + "and Virtio-9p device needs " + "mount_tag arguments\n", conf->fsdev_id); exit(1); } - if (lstat(conf->share_path, &stat)) { - fprintf(stderr, "share path %s does not exist\n", conf->share_path); + if (lstat(fse->path, &stat)) { + fprintf(stderr, "share path %s does not exist\n", fse->path); exit(1); } else if (!S_ISDIR(stat.st_mode)) { - fprintf(stderr, "share path %s is not a directory \n", conf->share_path); + fprintf(stderr, "share path %s is not a directory \n", + fse->path); exit(1); } - s->ctx.fs_root = qemu_strdup(conf->share_path); + s->ctx.fs_root = qemu_strdup(fse->path); len = strlen(conf->tag); if (len > MAX_TAG_LEN) len = MAX_TAG_LEN; @@ -2254,7 +2267,7 @@ VirtIODevice *virtio_9p_init(DeviceState *dev, V9fsConf *conf) s->tag_len = len; s->ctx.uid = -1; - s->ops = virtio_9p_init_local(conf->share_path); + s->ops = fse->ops; s->vdev.get_features = virtio_9p_get_features; s->config_size = sizeof(struct virtio_9p_config) + s->tag_len; diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c index 73e7df7..6f26b88 100644 --- a/hw/virtio-pci.c +++ b/hw/virtio-pci.c @@ -626,8 +626,8 @@ static PCIDeviceInfo virtio_info[] = { .init = virtio_9p_init_pci, .qdev.props = (Property[]) { DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), - DEFINE_PROP_STRING("share_path", VirtIOPCIProxy, fsconf.share_path), DEFINE_PROP_STRING("mount_tag", VirtIOPCIProxy, fsconf.tag), + DEFINE_PROP_STRING("fsdev", VirtIOPCIProxy, fsconf.fsdev_id), DEFINE_PROP_END_OF_LIST(), }, },{