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) +
return 0;
bad:
- err = -EINVAL;
+ err = -EIO;
out_bad:
derr(1, "problem parsing trace %d\n", err);
return err;
}
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;
return 0;
bad:
- err = -EINVAL;
+ err = -EIO;
out_bad:
derr(1, "parse_reply err %d\n", err);
return err;
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);
}