diff mbox

kvm tools: don't bother tracking is_dir

Message ID 1342974594-31317-5-git-send-email-levinsasha928@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sasha Levin July 22, 2012, 4:29 p.m. UTC
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(-)

Comments

Pekka Enberg July 31, 2012, 6:24 a.m. UTC | #1
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
Sasha Levin Aug. 1, 2012, 6:10 p.m. UTC | #2
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 mbox

Patch

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;
 	}