From patchwork Sat Mar 5 17:52:09 2011 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: 85543 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 B3437B7088 for ; Sun, 6 Mar 2011 05:00:45 +1100 (EST) Received: from localhost ([127.0.0.1]:36103 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PvvlR-0004Oi-EH for incoming@patchwork.ozlabs.org; Sat, 05 Mar 2011 12:59:37 -0500 Received: from [140.186.70.92] (port=38488 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1PvveV-0000v3-6X for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:52:28 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1PvveT-0003pI-Pq for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:52:26 -0500 Received: from e23smtp05.au.ibm.com ([202.81.31.147]:47217) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1PvveT-0003oV-9i for qemu-devel@nongnu.org; Sat, 05 Mar 2011 12:52:25 -0500 Received: from d23relay04.au.ibm.com (d23relay04.au.ibm.com [202.81.31.246]) by e23smtp05.au.ibm.com (8.14.4/8.13.1) with ESMTP id p25HknB1019422 for ; Sun, 6 Mar 2011 04:46:49 +1100 Received: from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138]) by d23relay04.au.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p25HqNRO1831020 for ; Sun, 6 Mar 2011 04:52:23 +1100 Received: from d23av02.au.ibm.com (loopback [127.0.0.1]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p25HqNrS019458 for ; Sun, 6 Mar 2011 04:52:23 +1100 Received: from skywalker.ibm.com ([9.124.94.223]) by d23av02.au.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p25HqGsI019428; Sun, 6 Mar 2011 04:52:22 +1100 From: "Aneesh Kumar K.V" To: qemu-devel@nongnu.org Date: Sat, 5 Mar 2011 23:22:09 +0530 Message-Id: <1299347533-17047-4-git-send-email-aneesh.kumar@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1299347533-17047-1-git-send-email-aneesh.kumar@linux.vnet.ibm.com> References: <1299347533-17047-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) X-Received-From: 202.81.31.147 Cc: aliguori@us.ibm.com, "Aneesh Kumar K.V" Subject: [Qemu-devel] [PATCH -V3 4/8] hw/9pfs: Implement syncfs 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 SYNOPSIS size[4] Tsyncfs tag[2] fid[4] size[4] Rsyncfs tag[2] DESCRIPTION The Tsyncfs transaction transfers ("flushes") all modified data of file system identified by fid to the disk device. The operation is equivalent to calling sync() on the file system. Signed-off-by: Aneesh Kumar K.V --- hw/9pfs/virtio-9p-local.c | 9 +++++++++ hw/9pfs/virtio-9p.c | 31 +++++++++++++++++++++++++++++++ hw/9pfs/virtio-9p.h | 2 ++ hw/file-op-9p.h | 1 + 4 files changed, 43 insertions(+), 0 deletions(-) diff --git a/hw/9pfs/virtio-9p-local.c b/hw/9pfs/virtio-9p-local.c index 0a015de..43ff37c 100644 --- a/hw/9pfs/virtio-9p-local.c +++ b/hw/9pfs/virtio-9p-local.c @@ -528,6 +528,14 @@ static int local_lremovexattr(FsContext *ctx, return v9fs_remove_xattr(ctx, path, name); } +static int local_syncfs(FsContext *ctx, int fd) +{ + /* + * We should be doing per file system sync here. + */ + sync(); + return 0; +} FileOperations local_ops = { .lstat = local_lstat, @@ -560,4 +568,5 @@ FileOperations local_ops = { .llistxattr = local_llistxattr, .lsetxattr = local_lsetxattr, .lremovexattr = local_lremovexattr, + .syncfs = local_syncfs, }; diff --git a/hw/9pfs/virtio-9p.c b/hw/9pfs/virtio-9p.c index c4b0198..ce09e55 100644 --- a/hw/9pfs/virtio-9p.c +++ b/hw/9pfs/virtio-9p.c @@ -299,6 +299,10 @@ static int v9fs_do_lremovexattr(V9fsState *s, V9fsString *path, xattr_name->data); } +static int v9fs_do_syncfs(V9fsState *s, int fd) +{ + return s->ops->syncfs(&s->ctx, fd); +} static void v9fs_string_init(V9fsString *str) { @@ -1978,6 +1982,32 @@ static void v9fs_fsync(V9fsState *s, V9fsPDU *pdu) v9fs_post_do_fsync(s, pdu, err); } +static void v9fs_post_do_syncfs(V9fsState *s, V9fsPDU *pdu, int err) +{ + if (err == -1) { + err = -errno; + } + complete_pdu(s, pdu, err); +} + +static void v9fs_syncfs(V9fsState *s, V9fsPDU *pdu) +{ + int err; + int32_t fid; + size_t offset = 7; + V9fsFidState *fidp; + + pdu_unmarshal(pdu, offset, "d", &fid); + fidp = lookup_fid(s, fid); + if (fidp == NULL) { + err = -ENOENT; + v9fs_post_do_syncfs(s, pdu, err); + return; + } + err = v9fs_do_syncfs(s, fidp->fsmap.fs.fd); + v9fs_post_do_syncfs(s, pdu, err); +} + static void v9fs_clunk(V9fsState *s, V9fsPDU *pdu) { int32_t fid; @@ -3676,6 +3706,7 @@ static pdu_handler_t *pdu_handlers[] = { [P9_TWALK] = v9fs_walk, [P9_TCLUNK] = v9fs_clunk, [P9_TFSYNC] = v9fs_fsync, + [P9_TSYNCFS] = v9fs_syncfs, [P9_TOPEN] = v9fs_open, [P9_TREAD] = v9fs_read, #if 0 diff --git a/hw/9pfs/virtio-9p.h b/hw/9pfs/virtio-9p.h index 68d5906..b0f8210 100644 --- a/hw/9pfs/virtio-9p.h +++ b/hw/9pfs/virtio-9p.h @@ -13,6 +13,8 @@ #define VIRTIO_9P_MOUNT_TAG 0 enum { + P9_TSYNCFS = 0, + P9_RSYNCFS, P9_TLERROR = 6, P9_RLERROR, P9_TSTATFS = 8, diff --git a/hw/file-op-9p.h b/hw/file-op-9p.h index 126e60e..e306305 100644 --- a/hw/file-op-9p.h +++ b/hw/file-op-9p.h @@ -94,6 +94,7 @@ typedef struct FileOperations int (*lsetxattr)(FsContext *, const char *, const char *, void *, size_t, int); int (*lremovexattr)(FsContext *, const char *, const char *); + int (*syncfs)(FsContext *, int); void *opaque; } FileOperations;