Message ID | 1342974594-31317-5-git-send-email-levinsasha928@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sun, 22 Jul 2012, Sasha Levin wrote: > This is something we can calculate on the fly, and doesn't justify the overhead > of tracking it all over fid transitions. > > Signed-off-by: Sasha Levin <levinsasha928@gmail.com> What kind of overhead are you talking about? > --- > tools/kvm/include/kvm/virtio-9p.h | 1 - > tools/kvm/virtio/9p.c | 16 +++++++++++----- > 2 files changed, 11 insertions(+), 6 deletions(-) > > diff --git a/tools/kvm/include/kvm/virtio-9p.h b/tools/kvm/include/kvm/virtio-9p.h > index 186fe05..cb590d1 100644 > --- a/tools/kvm/include/kvm/virtio-9p.h > +++ b/tools/kvm/include/kvm/virtio-9p.h > @@ -26,7 +26,6 @@ struct p9_msg { > struct p9_fid { > u32 fid; > u32 uid; > - u8 is_dir; > char abs_path[PATH_MAX]; > char *path; > DIR *dir; > diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c > index c663dab..2cf99a0 100644 > --- a/tools/kvm/virtio/9p.c > +++ b/tools/kvm/virtio/9p.c > @@ -228,6 +228,15 @@ static int virtio_p9_openflags(int flags) > return flags; > } > > +static bool is_dir(struct p9_fid *fid) > +{ > + struct stat st; > + > + stat(fid->abs_path, &st); > + > + return S_ISDIR(st.st_mode); > +} > + > static void virtio_p9_open(struct p9_dev *p9dev, > struct p9_pdu *pdu, u32 *outlen) > { > @@ -245,7 +254,7 @@ static void virtio_p9_open(struct p9_dev *p9dev, > > stat2qid(&st, &qid); > > - if (new_fid->is_dir) { > + if (is_dir(new_fid)) { > new_fid->dir = opendir(new_fid->abs_path); > if (!new_fid->dir) > goto err_out; > @@ -394,7 +403,6 @@ static void virtio_p9_walk(struct p9_dev *p9dev, > goto err_out; > > stat2qid(&st, &wqid); > - new_fid->is_dir = S_ISDIR(st.st_mode); > strcpy(new_fid->path, tmp); > new_fid->uid = fid->uid; > nwqid++; > @@ -406,7 +414,6 @@ static void virtio_p9_walk(struct p9_dev *p9dev, > */ > pdu->write_offset += sizeof(u16); > old_fid = get_fid(p9dev, fid_val); > - new_fid->is_dir = old_fid->is_dir; > strcpy(new_fid->path, old_fid->path); > new_fid->uid = old_fid->uid; > } > @@ -445,7 +452,6 @@ static void virtio_p9_attach(struct p9_dev *p9dev, > > fid = get_fid(p9dev, fid_val); > fid->uid = uid; > - fid->is_dir = 1; > strcpy(fid->path, "/"); > > virtio_p9_pdu_writef(pdu, "Q", &qid); > @@ -547,7 +553,7 @@ static void virtio_p9_readdir(struct p9_dev *p9dev, > virtio_p9_pdu_readf(pdu, "dqd", &fid_val, &offset, &count); > fid = get_fid(p9dev, fid_val); > > - if (!fid->is_dir) { > + if (!is_dir(fid)) { > errno = EINVAL; > goto err_out; > } > -- > 1.7.8.6 > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 07/31/2012 08:24 AM, Pekka Enberg wrote: > On Sun, 22 Jul 2012, Sasha Levin wrote: >> This is something we can calculate on the fly, and doesn't justify the overhead >> of tracking it all over fid transitions. >> >> Signed-off-by: Sasha Levin <levinsasha928@gmail.com> > > What kind of overhead are you talking about? Having to carry it between fids when they are copied/created. This flag is required in only about 2-3 spots, and I've stumbled on a bunch of issues when writing the dynamic fid allocation due to failure to copy this flag over only when required. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/tools/kvm/include/kvm/virtio-9p.h b/tools/kvm/include/kvm/virtio-9p.h index 186fe05..cb590d1 100644 --- a/tools/kvm/include/kvm/virtio-9p.h +++ b/tools/kvm/include/kvm/virtio-9p.h @@ -26,7 +26,6 @@ struct p9_msg { struct p9_fid { u32 fid; u32 uid; - u8 is_dir; char abs_path[PATH_MAX]; char *path; DIR *dir; diff --git a/tools/kvm/virtio/9p.c b/tools/kvm/virtio/9p.c index c663dab..2cf99a0 100644 --- a/tools/kvm/virtio/9p.c +++ b/tools/kvm/virtio/9p.c @@ -228,6 +228,15 @@ static int virtio_p9_openflags(int flags) return flags; } +static bool is_dir(struct p9_fid *fid) +{ + struct stat st; + + stat(fid->abs_path, &st); + + return S_ISDIR(st.st_mode); +} + static void virtio_p9_open(struct p9_dev *p9dev, struct p9_pdu *pdu, u32 *outlen) { @@ -245,7 +254,7 @@ static void virtio_p9_open(struct p9_dev *p9dev, stat2qid(&st, &qid); - if (new_fid->is_dir) { + if (is_dir(new_fid)) { new_fid->dir = opendir(new_fid->abs_path); if (!new_fid->dir) goto err_out; @@ -394,7 +403,6 @@ static void virtio_p9_walk(struct p9_dev *p9dev, goto err_out; stat2qid(&st, &wqid); - new_fid->is_dir = S_ISDIR(st.st_mode); strcpy(new_fid->path, tmp); new_fid->uid = fid->uid; nwqid++; @@ -406,7 +414,6 @@ static void virtio_p9_walk(struct p9_dev *p9dev, */ pdu->write_offset += sizeof(u16); old_fid = get_fid(p9dev, fid_val); - new_fid->is_dir = old_fid->is_dir; strcpy(new_fid->path, old_fid->path); new_fid->uid = old_fid->uid; } @@ -445,7 +452,6 @@ static void virtio_p9_attach(struct p9_dev *p9dev, fid = get_fid(p9dev, fid_val); fid->uid = uid; - fid->is_dir = 1; strcpy(fid->path, "/"); virtio_p9_pdu_writef(pdu, "Q", &qid); @@ -547,7 +553,7 @@ static void virtio_p9_readdir(struct p9_dev *p9dev, virtio_p9_pdu_readf(pdu, "dqd", &fid_val, &offset, &count); fid = get_fid(p9dev, fid_val); - if (!fid->is_dir) { + if (!is_dir(fid)) { errno = EINVAL; goto err_out; }
This is something we can calculate on the fly, and doesn't justify the overhead of tracking it all over fid transitions. Signed-off-by: Sasha Levin <levinsasha928@gmail.com> --- tools/kvm/include/kvm/virtio-9p.h | 1 - tools/kvm/virtio/9p.c | 16 +++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-)