On 31.05.23 21:09, Stefan Hajnoczi wrote:
Another issue is that 145 uses $TEST_IMG as follows:
SYSEMU_DRIVE_ARG=if=none,file="$TEST_IMG",driver=$IMGFMT
That doesn't work when json: contains a comma, since commas need to be
doubled up to escape them. This fails:
$ qemu-system-x86_64 -drive
'if=none,file=json:{"driver":"io_uring","filename":"test.img"}'
qemu-system-x86_64: -drive
if=none,file=json:{"driver":"io_uring","filename":"test.img"}:
warning: short-form boolean option '"filename":"test.img"}' deprecated
Please use "filename":"test.img"}=on instead
This works:
qemu-system-x86_64 -drive
'if=none,file=json:{"driver":"io_uring",,"filename":"test.img"}'
Maybe it's simply not possible to use TEST_IMG=json: in qemu-iotests?
Probably not as-is. None of the tests has been written with that in
mind, and many have been written at a time where TEST_IMG was basically
always a plain filename. We’ve had a lot of churn in the past e.g. to
separate TEST_IMG_FILE out from TEST_IMG, and I suspect if you want
json:{} to work, that would be even more churn.
Admittedly I don’t remember how it’s to be done, but looking at the code
(common.rc starting from line 274), it seems clear what other protocols
do: If $IMGOPTSSYNTAX is true, use a dotted-key-value syntax; and
otherwise, make use of the protocol prefix. Now, "io_uring:test.img"
doesn’t work, because while bdrv_io_uring has .protocol_name set, it
doesn’t implement .bdrv_parse_filename(). file-posix for example does
(see raw_parse_filename()), and all it does is to strip the protocol prefix.
So I think you should be able to get the non-IMGOPTSSYNTAX case to work
by adding a trivial .bdrv_parse_filename() implementation to each blkio
driver, which just strips the protocol prefix, and then use
"io_uring:$TEST_IMG_FILE".
Hanna
The alternative is to always set IMGOPTSSYNTAX=true and then find the
test cases that fail because they contain non-IMGOPTSSYNTAX commands.
Stefan