Skip to content

Commit 4557117

Browse files
pipostefanhaRH
authored andcommitted
gluster: Correctly propagate errors when volume isn't accessible
The docs for glfs_init suggest that the function sets errno on every failure. In fact it doesn't. As other functions such as qemu_gluster_open() in the gluster block code report their errors based on this fact we need to make sure that errno is set on each failure. This fixes a crash of qemu-img/qemu when a gluster brick isn't accessible from given host while the server serving the volume description is. Thread 1 (Thread 0x7ffff7fba740 (LWP 203880)): #0 0x00007ffff77673f8 in glfs_lseek () from /usr/lib64/libgfapi.so.0 #1 0x0000555555574a68 in qemu_gluster_getlength () #2 0x0000555555565742 in refresh_total_sectors () #3 0x000055555556914f in bdrv_open_common () #4 0x000055555556e8e8 in bdrv_open () #5 0x000055555556f02f in bdrv_open_image () #6 0x000055555556e5f6 in bdrv_open () #7 0x00005555555c5775 in bdrv_new_open () #8 0x00005555555c5b91 in img_info () #9 0x00007ffff62c9c05 in __libc_start_main () from /lib64/libc.so.6 #10 0x00005555555648ad in _start () Signed-off-by: Stefan Hajnoczi <[email protected]>
1 parent 02ce232 commit 4557117

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

block/gluster.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,11 @@ static struct glfs *qemu_gluster_init(GlusterConf *gconf, const char *filename,
207207
"volume=%s image=%s transport=%s", gconf->server,
208208
gconf->port, gconf->volname, gconf->image,
209209
gconf->transport);
210+
211+
/* glfs_init sometimes doesn't set errno although docs suggest that */
212+
if (errno == 0)
213+
errno = EINVAL;
214+
210215
goto out;
211216
}
212217
return glfs;
@@ -482,7 +487,7 @@ static int qemu_gluster_create(const char *filename,
482487

483488
glfs = qemu_gluster_init(gconf, filename, errp);
484489
if (!glfs) {
485-
ret = -EINVAL;
490+
ret = -errno;
486491
goto out;
487492
}
488493

0 commit comments

Comments
 (0)