block/sheepdog: Propagate errors through find_vdi_name()

Cc: MORITA Kazutaka <morita.kazutaka@lab.ntt.co.jp>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Markus Armbruster 2014-05-16 11:00:23 +02:00 committed by Stefan Hajnoczi
parent 7d2d3e74e5
commit dc83cd427b
1 changed files with 11 additions and 9 deletions

View File

@ -1060,19 +1060,16 @@ static int parse_vdiname(BDRVSheepdogState *s, const char *filename,
static int find_vdi_name(BDRVSheepdogState *s, const char *filename, static int find_vdi_name(BDRVSheepdogState *s, const char *filename,
uint32_t snapid, const char *tag, uint32_t *vid, uint32_t snapid, const char *tag, uint32_t *vid,
bool lock) bool lock, Error **errp)
{ {
Error *local_err = NULL;
int ret, fd; int ret, fd;
SheepdogVdiReq hdr; SheepdogVdiReq hdr;
SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr; SheepdogVdiRsp *rsp = (SheepdogVdiRsp *)&hdr;
unsigned int wlen, rlen = 0; unsigned int wlen, rlen = 0;
char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN]; char buf[SD_MAX_VDI_LEN + SD_MAX_VDI_TAG_LEN];
fd = connect_to_sdog(s, &local_err); fd = connect_to_sdog(s, errp);
if (fd < 0) { if (fd < 0) {
qerror_report_err(local_err);
error_free(local_err);
return fd; return fd;
} }
@ -1097,12 +1094,13 @@ static int find_vdi_name(BDRVSheepdogState *s, const char *filename,
ret = do_req(fd, (SheepdogReq *)&hdr, buf, &wlen, &rlen); ret = do_req(fd, (SheepdogReq *)&hdr, buf, &wlen, &rlen);
if (ret) { if (ret) {
error_setg_errno(errp, -ret, "cannot get vdi info");
goto out; goto out;
} }
if (rsp->result != SD_RES_SUCCESS) { if (rsp->result != SD_RES_SUCCESS) {
error_report("cannot get vdi info, %s, %s %" PRIu32 " %s", error_setg(errp, "cannot get vdi info, %s, %s %" PRIu32 " %s",
sd_strerror(rsp->result), filename, snapid, tag); sd_strerror(rsp->result), filename, snapid, tag);
if (rsp->result == SD_RES_NO_VDI) { if (rsp->result == SD_RES_NO_VDI) {
ret = -ENOENT; ret = -ENOENT;
} else { } else {
@ -1279,8 +1277,10 @@ static int reload_inode(BDRVSheepdogState *s, uint32_t snapid, const char *tag)
inode = g_malloc(sizeof(s->inode)); inode = g_malloc(sizeof(s->inode));
ret = find_vdi_name(s, s->name, snapid, tag, &vid, false); ret = find_vdi_name(s, s->name, snapid, tag, &vid, false, &local_err);
if (ret) { if (ret) {
qerror_report_err(local_err);
error_free(local_err);
goto out; goto out;
} }
@ -1423,8 +1423,10 @@ static int sd_open(BlockDriverState *bs, QDict *options, int flags,
goto out; goto out;
} }
ret = find_vdi_name(s, vdi, snapid, tag, &vid, true); ret = find_vdi_name(s, vdi, snapid, tag, &vid, true, &local_err);
if (ret) { if (ret) {
qerror_report_err(local_err);
error_free(local_err);
goto out; goto out;
} }