]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
tools/kvm/9p: Add error handling
authorAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Sun, 19 Jun 2011 10:24:04 +0000 (15:54 +0530)
committerSasha Levin <levinsasha928@gmail.com>
Sun, 19 Jun 2011 21:28:27 +0000 (17:28 -0400)
return error via RERROR message

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
tools/kvm/virtio/9p.c

index f40ea3dcc50b9acda6bc88ac709231226e59736b..d2d738da4cde913f69903471e504f57aa66689f8 100644 (file)
@@ -325,13 +325,15 @@ static void virtio_p9_create(struct p9_dev *p9dev,
        }
 
        if (lstat(fid->abs_path, &st) < 0)
-               return;
+               goto err_out;
 
        st2qid(&st, &rcreate->qid);
 
        *outlen = VIRTIO_P9_HDR_LEN + sizeof(*rcreate);
        set_p9msg_hdr(inmsg, *outlen, P9_RCREATE, outmsg->tag);
-
+       return;
+err_out:
+       virtio_p9_error_reply(p9dev, pdu, errno, outlen);
        return;
 }
 
@@ -361,7 +363,7 @@ static void virtio_p9_walk(struct p9_dev *p9dev,
                                str->len, (char *)&str->str);
 
                        if (lstat(rel_to_abs(p9dev, tmp, full_path), &st) < 0)
-                               break;
+                               goto err_out;
 
                        st2qid(&st, &rwalk->wqids[i]);
                        new_fid->is_dir = S_ISDIR(st.st_mode);
@@ -378,7 +380,9 @@ static void virtio_p9_walk(struct p9_dev *p9dev,
        *outlen = VIRTIO_P9_HDR_LEN + sizeof(u16) +
                sizeof(struct p9_qid)*rwalk->nwqid;
        set_p9msg_hdr(inmsg, *outlen, P9_RWALK, outmsg->tag);
-
+       return;
+err_out:
+       virtio_p9_error_reply(p9dev, pdu, errno, outlen);
        return;
 }
 
@@ -398,7 +402,7 @@ static void virtio_p9_attach(struct p9_dev *p9dev,
                p9dev->fids[i].fid = P9_NOFID;
 
        if (lstat(p9dev->root_dir, &st) < 0)
-               return;
+               goto err_out;
 
        st2qid(&st, &rattach->qid);
 
@@ -409,7 +413,9 @@ static void virtio_p9_attach(struct p9_dev *p9dev,
 
        *outlen = VIRTIO_P9_HDR_LEN + sizeof(*rattach);
        set_p9msg_hdr(inmsg, *outlen, P9_RATTACH, outmsg->tag);
-
+       return;
+err_out:
+       virtio_p9_error_reply(p9dev, pdu, errno, outlen);
        return;
 }
 
@@ -511,13 +517,16 @@ static void virtio_p9_stat(struct p9_dev *p9dev,
        struct p9_fid *fid = &p9dev->fids[tstat->fid];
 
        if (lstat(fid->abs_path, &st) < 0)
-               return;
+               goto err_out;
 
        ret = virtio_p9_fill_stat(p9dev, fid->path, &st, rstat);
 
        *outlen = VIRTIO_P9_HDR_LEN + ret + sizeof(u16);
        set_p9msg_hdr(inmsg, *outlen, P9_RSTAT, outmsg->tag);
        return;
+err_out:
+       virtio_p9_error_reply(p9dev, pdu, errno, outlen);
+       return;
 }
 
 static void virtio_p9_wstat(struct p9_dev *p9dev,