Message ID | 20170111182455.15160-1-nirsof@gmail.com |
---|---|
State | New |
Headers | show |
On 01/11/2017 12:24 PM, Nir Soffer wrote: > From: Nir Soffer <nsoffer@redhat.com> > > The result of openfile was not checked, leading to failure deep in the > actual command with confusing error message, and exiting with exit code 0. > > Here is one example - trying to read a pattern from an invalid chain: > > $ qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? As written, you have to guess some context about how top.qcow2 was created. The example can be made a bit more reproducible with: $ : > file $ qemu-io -f qcow2 -c ... file > can't open device top.qcow2: Could not open backing file: Image is not in qcow2 format > no file open, try 'help open' > 0 > > With this patch, we fail earlier with exit code 1: > > $ ./qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? > can't open device top.qcow2: Could not open backing file: Image is not > in qcow2 format > 1 > > Signed-off-by: Nir Soffer <nirsof@gmail.com> > --- > qemu-io.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) Whether or not the commit message is improved, Reviewed-by: Eric Blake <eblake@redhat.com>
On Wed, 01/11 15:51, Eric Blake wrote: > On 01/11/2017 12:24 PM, Nir Soffer wrote: > > From: Nir Soffer <nsoffer@redhat.com> > > > > The result of openfile was not checked, leading to failure deep in the > > actual command with confusing error message, and exiting with exit code 0. > > > > Here is one example - trying to read a pattern from an invalid chain: > > > > $ qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? > > As written, you have to guess some context about how top.qcow2 was > created. The example can be made a bit more reproducible with: > > $ : > file > $ qemu-io -f qcow2 -c ... file Nir, thank you for the fix. Could you also add a regression test in tests/qemu-iotests? Reviewed-by: Fam Zheng <famz@redhat.com> > > > can't open device top.qcow2: Could not open backing file: Image is not in qcow2 format > > no file open, try 'help open' > > 0 > > > > With this patch, we fail earlier with exit code 1: > > > > $ ./qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? > > can't open device top.qcow2: Could not open backing file: Image is not > > in qcow2 format > > 1 > > > > Signed-off-by: Nir Soffer <nirsof@gmail.com> > > --- > > qemu-io.c | 8 ++++++-- > > 1 file changed, 6 insertions(+), 2 deletions(-) > > Whether or not the commit message is improved, > Reviewed-by: Eric Blake <eblake@redhat.com>
On Wed, Jan 11, 2017 at 11:51 PM, Eric Blake <eblake@redhat.com> wrote: > On 01/11/2017 12:24 PM, Nir Soffer wrote: >> From: Nir Soffer <nsoffer@redhat.com> >> >> The result of openfile was not checked, leading to failure deep in the >> actual command with confusing error message, and exiting with exit code 0. >> >> Here is one example - trying to read a pattern from an invalid chain: >> >> $ qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? > > As written, you have to guess some context about how top.qcow2 was > created. The example can be made a bit more reproducible with: > > $ : > file > $ qemu-io -f qcow2 -c ... file Right, I'll refine it in the next version. > >> can't open device top.qcow2: Could not open backing file: Image is not in qcow2 format >> no file open, try 'help open' >> 0 >> >> With this patch, we fail earlier with exit code 1: >> >> $ ./qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? >> can't open device top.qcow2: Could not open backing file: Image is not >> in qcow2 format >> 1 >> >> Signed-off-by: Nir Soffer <nirsof@gmail.com> >> --- >> qemu-io.c | 8 ++++++-- >> 1 file changed, 6 insertions(+), 2 deletions(-) > > Whether or not the commit message is improved, > Reviewed-by: Eric Blake <eblake@redhat.com> > > -- > Eric Blake eblake redhat com +1-919-301-3266 > Libvirt virtualization library http://libvirt.org >
On Thu, Jan 12, 2017 at 5:01 AM, Fam Zheng <famz@redhat.com> wrote: > On Wed, 01/11 15:51, Eric Blake wrote: >> On 01/11/2017 12:24 PM, Nir Soffer wrote: >> > From: Nir Soffer <nsoffer@redhat.com> >> > >> > The result of openfile was not checked, leading to failure deep in the >> > actual command with confusing error message, and exiting with exit code 0. >> > >> > Here is one example - trying to read a pattern from an invalid chain: >> > >> > $ qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? >> >> As written, you have to guess some context about how top.qcow2 was >> created. The example can be made a bit more reproducible with: >> >> $ : > file >> $ qemu-io -f qcow2 -c ... file > > Nir, thank you for the fix. Could you also add a regression test in > tests/qemu-iotests? Sure, will look into it. > > Reviewed-by: Fam Zheng <famz@redhat.com> > >> >> > can't open device top.qcow2: Could not open backing file: Image is not in qcow2 format >> > no file open, try 'help open' >> > 0 >> > >> > With this patch, we fail earlier with exit code 1: >> > >> > $ ./qemu-io -c 'read -P 1 0 1024' top.qcow2; echo $? >> > can't open device top.qcow2: Could not open backing file: Image is not >> > in qcow2 format >> > 1 >> > >> > Signed-off-by: Nir Soffer <nirsof@gmail.com> >> > --- >> > qemu-io.c | 8 ++++++-- >> > 1 file changed, 6 insertions(+), 2 deletions(-) >> >> Whether or not the commit message is improved, >> Reviewed-by: Eric Blake <eblake@redhat.com>
diff --git a/qemu-io.c b/qemu-io.c index 23a229f..427cbae 100644 --- a/qemu-io.c +++ b/qemu-io.c @@ -595,13 +595,17 @@ int main(int argc, char **argv) exit(1); } opts = qemu_opts_to_qdict(qopts, NULL); - openfile(NULL, flags, writethrough, opts); + if (openfile(NULL, flags, writethrough, opts)) { + exit(1); + } } else { if (format) { opts = qdict_new(); qdict_put(opts, "driver", qstring_from_str(format)); } - openfile(argv[optind], flags, writethrough, opts); + if (openfile(argv[optind], flags, writethrough, opts)) { + exit(1); + } } } command_loop();