]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix mds reply error codes
authorSage Weil <sage@newdream.net>
Wed, 1 Apr 2009 17:55:02 +0000 (10:55 -0700)
committerSage Weil <sage@newdream.net>
Wed, 1 Apr 2009 19:39:52 +0000 (12:39 -0700)
src/kernel/mds_client.c

index 2164e03e5f903ef1082f5bfb3a1413f04bc4dd52..a76418cd3d3aa6197f7281e8e4f22165dbd3a2c9 100644 (file)
@@ -39,7 +39,7 @@ void ceph_send_msg_mds(struct ceph_mds_client *mdsc, struct ceph_msg *msg,
 static int parse_reply_info_in(void **p, void *end,
                               struct ceph_mds_reply_info_in *info)
 {
-       int err = -EINVAL;
+       int err = -EIO;
 
        info->in = *p;
        *p += sizeof(struct ceph_mds_reply_inode) +
@@ -101,7 +101,7 @@ static int parse_reply_info_trace(void **p, void *end,
        return 0;
 
 bad:
-       err = -EINVAL;
+       err = -EIO;
 out_bad:
        derr(1, "problem parsing trace %d\n", err);
        return err;
@@ -166,10 +166,12 @@ static int parse_reply_info_dir(void **p, void *end,
        }
 
 done:
+       if (*p != end)
+               goto bad;
        return 0;
 
 bad:
-       err = -EINVAL;
+       err = -EIO;
 out_bad:
        derr(1, "problem parsing dir contents %d\n", err);
        return err;
@@ -216,7 +218,7 @@ static int parse_reply_info(struct ceph_msg *msg,
        return 0;
 
 bad:
-       err = -EINVAL;
+       err = -EIO;
 out_bad:
        derr(1, "parse_reply err %d\n", err);
        return err;
@@ -1372,6 +1374,8 @@ int ceph_mdsc_do_request(struct ceph_mds_client *mdsc,
                if (!list_empty(&req->r_unsafe_item))
                    list_del_init(&req->r_unsafe_item);
                complete(&req->r_safe_completion);
+       } else if (req->r_err) {
+               err = req->r_err;
        } else {
                err = le32_to_cpu(req->r_reply_info.head->result);
        }