[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH -V3 22/32] virtio-9p: Update existing fid path on re
From: |
Aneesh Kumar K.V |
Subject: |
[Qemu-devel] [PATCH -V3 22/32] virtio-9p: Update existing fid path on rename |
Date: |
Thu, 25 Mar 2010 22:13:30 +0530 |
We need to make sure that we update the path component of the existing
fid's when we rename a file. The client is not expected to clunk these fids
pointing to the old name. If we don't update any operation on the old unopened
fid will point to the old name and will fail
Add BUG_ON to make sure when we clone a fid, we don't have open descriptor
attached to the fid. We also need to make sure that when we open a fid, the
specified fid should not already be opened. Capture the case by adding a BUG_ON
Signed-off-by: Aneesh Kumar K.V <address@hidden>
---
hw/virtio-9p.c | 39 +++++++++++++++++++++++++++++++++++++++
1 files changed, 39 insertions(+), 0 deletions(-)
diff --git a/hw/virtio-9p.c b/hw/virtio-9p.c
index c8ab6b6..9aa4b72 100644
--- a/hw/virtio-9p.c
+++ b/hw/virtio-9p.c
@@ -955,6 +955,9 @@ static void v9fs_walk(V9fsState *s, V9fsPDU *pdu)
/* FIXME: is this really valid? */
if (fid == newfid) {
+
+ BUG_ON(vs->fidp->fd != -1);
+ BUG_ON(vs->fidp->dir);
v9fs_string_init(&vs->path);
vs->name_idx = 0;
@@ -1120,6 +1123,9 @@ static void v9fs_open(V9fsState *s, V9fsPDU *pdu)
goto out;
}
+ BUG_ON(vs->fidp->fd != -1);
+ BUG_ON(vs->fidp->dir);
+
err = posix_lstat(s, &vs->fidp->path, &vs->stbuf);
v9fs_open_post_lstat(s, vs, err);
@@ -1877,8 +1883,19 @@ out:
qemu_free(vs);
}
+static void v9fs_fix_path(V9fsString *dst, V9fsString *src, int len)
+{
+ V9fsString str;
+ v9fs_string_init(&str);
+ v9fs_string_copy(&str, dst);
+ v9fs_string_sprintf(dst, "%s%s", src->data, str.data+len);
+ v9fs_string_free(&str);
+}
+
+
static void v9fs_wstat_post_chown(V9fsState *s, V9fsWstatState *vs, int err)
{
+ V9fsFidState *fidp;
if (err < 0) {
goto out;
}
@@ -1905,6 +1922,28 @@ static void v9fs_wstat_post_chown(V9fsState *s,
V9fsWstatState *vs, int err)
if (strcmp(new_name, vs->fidp->path.data) != 0) {
if (posix_rename(s, &vs->fidp->path, &vs->nname)) {
err = -errno;
+ } else {
+ /*
+ * Fixup fid's pointing to the old name to
+ * start pointing to the new name
+ */
+ for (fidp = s->fid_list; fidp; fidp = fidp->next) {
+
+ if (vs->fidp == fidp) {
+ /*
+ * we replace name of this fid towards the end
+ * so that our below strcmp will work
+ */
+ continue;
+ }
+ if (!strncmp(vs->fidp->path.data, fidp->path.data,
+ strlen(vs->fidp->path.data))) {
+ /* replace the name */
+ v9fs_fix_path(&fidp->path, &vs->nname,
+ strlen(vs->fidp->path.data));
+ }
+ }
+ v9fs_string_copy(&vs->fidp->path, &vs->nname);
}
}
}
--
1.7.0.2.323.g0d092
- [Qemu-devel] [PATCH -V3 10/32] virtio-9p: Implement P9_TCREATE, (continued)
- [Qemu-devel] [PATCH -V3 10/32] virtio-9p: Implement P9_TCREATE, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 11/32] virtio-9p: Implement P9_TWSTAT, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 12/32] virtio-9p: Implement P9_TREMOVE, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 14/32] virtio-9p: Add multiple mount point support, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 16/32] virtio-9p: Add support for hardlink, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 13/32] virtio-9p: Implement P9_TFLUSH, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 17/32] Implement sync support in 9p server, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 15/32] virtio-9p: Use little endian format on virtio, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 18/32] virtio-9p: Fix sg usage in the code, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 19/32] virtio-9p: Get the correct count values from the pdu, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 22/32] virtio-9p: Update existing fid path on rename,
Aneesh Kumar K.V <=
- [Qemu-devel] [PATCH -V3 21/32] virtio-9p: Remove unnecessary definition of fid, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 23/32] vritio-9p: Fix chmod bug with directory, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 20/32] virtio-9p: Remove BUG_ON and add proper error handling, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 24/32] qemu-malloc: Add qemu_asprintf, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 26/32] virtio-9p: Create a commandline option -fsdev, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 25/32] virtio-9p: Move V9fs File system specific options to a separate header file., Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 27/32] virtio-9p: Create qemu_fsdev_opts, Aneesh Kumar K.V, 2010/03/25
- [Qemu-devel] [PATCH -V3 28/32] virtio-9p: Handle the fsdev command line options., Aneesh Kumar K.V, 2010/03/25