mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 00:03:54 -06:00

All the pieces are in place for a client to finally request extended headers. Note that we must not request extended headers when qemu-nbd is used to connect to the kernel module (as nbd.ko does not expect them, but expects us to do the negotiation in userspace before handing the socket over to the kernel), but there is no harm in all other clients requesting them. Extended headers are not essential to the information collected during 'qemu-nbd --list', but probing for it gives us one more piece of information in that output. Update the iotests affected by the new line of output. Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Message-ID: <20230925192229.3186470-23-eblake@redhat.com>
137 lines
6.2 KiB
Text
137 lines
6.2 KiB
Text
wrote 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
=== Launch VM ===
|
|
{"execute": "nbd-server-start", "arguments": {"addr": {"data": {"path": "SOCK_DIR/PID-socket"}, "type": "unix"}}}
|
|
{"return": {}}
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": []}
|
|
|
|
=== Create a read-only NBD export ===
|
|
{"execute": "block-export-add", "arguments": {"id": "export0", "node-name": "fmt", "type": "nbd"}}
|
|
{"return": {}}
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": [{"id": "export0", "node-name": "fmt", "shutting-down": false, "type": "nbd"}]}
|
|
exports available: 1
|
|
export: 'fmt'
|
|
size: 67108864
|
|
flags: 0x58f ( readonly flush fua df multi cache )
|
|
min block: XXX
|
|
opt block: XXX
|
|
max block: XXX
|
|
transaction size: 64-bit
|
|
available meta contexts: 1
|
|
base:allocation
|
|
|
|
|
|
=== Try a few invalid things ===
|
|
{"execute": "block-export-add", "arguments": {"id": "#invalid", "node-name": "fmt", "type": "nbd"}}
|
|
{"error": {"class": "GenericError", "desc": "Invalid block export id"}}
|
|
{"execute": "block-export-add", "arguments": {"id": "export0", "node-name": "fmt", "type": "nbd"}}
|
|
{"error": {"class": "GenericError", "desc": "Block export id 'export0' is already in use"}}
|
|
{"execute": "block-export-add", "arguments": {"id": "export1", "node-name": "ro", "type": "nbd", "writable": true}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot export read-only node as writable"}}
|
|
{"execute": "block-export-del", "arguments": {"id": "export1"}}
|
|
{"error": {"class": "GenericError", "desc": "Export 'export1' is not found"}}
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": [{"id": "export0", "node-name": "fmt", "shutting-down": false, "type": "nbd"}]}
|
|
|
|
=== Move export to an iothread ===
|
|
{"execute": "device_add", "arguments": {"drive": "fmt", "driver": "scsi-hd", "id": "sda"}}
|
|
{"return": {}}
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": [{"id": "export0", "node-name": "fmt", "shutting-down": false, "type": "nbd"}]}
|
|
exports available: 1
|
|
export: 'fmt'
|
|
size: 67108864
|
|
flags: 0x58f ( readonly flush fua df multi cache )
|
|
min block: XXX
|
|
opt block: XXX
|
|
max block: XXX
|
|
transaction size: 64-bit
|
|
available meta contexts: 1
|
|
base:allocation
|
|
|
|
|
|
=== Add export with conflicting iothread ===
|
|
{"execute": "device_add", "arguments": {"drive": "null", "driver": "scsi-hd", "id": "sdb"}}
|
|
{"return": {}}
|
|
{"execute": "block-export-add", "arguments": {"fixed-iothread": true, "id": "export1", "iothread": "iothread1", "node-name": "null", "type": "nbd", "writable": true}}
|
|
{"error": {"class": "GenericError", "desc": "Cannot change iothread of active block backend"}}
|
|
{"execute": "block-export-add", "arguments": {"fixed-iothread": false, "id": "export1", "iothread": "iothread1", "node-name": "null", "type": "nbd", "writable": true}}
|
|
{"error": {"class": "GenericError", "desc": "Permission conflict on node 'null': permissions 'write' are both required by an unnamed block device (uses node 'null' as 'root' child) and unshared by block device 'sdb' (uses node 'null' as 'root' child)."}}
|
|
|
|
=== Add a writable export ===
|
|
{"execute": "block-export-add", "arguments": {"description": "This is the writable second export", "id": "export1", "name": "export1", "node-name": "fmt", "type": "nbd", "writable": true, "writethrough": true}}
|
|
{"error": {"class": "GenericError", "desc": "Permission conflict on node 'fmt': permissions 'write' are both required by an unnamed block device (uses node 'fmt' as 'root' child) and unshared by block device 'sda' (uses node 'fmt' as 'root' child)."}}
|
|
{"execute": "device_del", "arguments": {"id": "sda"}}
|
|
{"return": {}}
|
|
{"data": {"device": "sda", "path": "/machine/peripheral/sda"}, "event": "DEVICE_DELETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}
|
|
{"execute": "device_add", "arguments": {"drive": "fmt", "driver": "scsi-hd", "id": "sda", "share-rw": true}}
|
|
{"return": {}}
|
|
{"execute": "block-export-add", "arguments": {"description": "This is the writable second export", "id": "export1", "name": "export1", "node-name": "fmt", "type": "nbd", "writable": true, "writethrough": true}}
|
|
{"return": {}}
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": [{"id": "export1", "node-name": "fmt", "shutting-down": false, "type": "nbd"}, {"id": "export0", "node-name": "fmt", "shutting-down": false, "type": "nbd"}]}
|
|
exports available: 2
|
|
export: 'fmt'
|
|
size: 67108864
|
|
flags: 0x58f ( readonly flush fua df multi cache )
|
|
min block: XXX
|
|
opt block: XXX
|
|
max block: XXX
|
|
transaction size: 64-bit
|
|
available meta contexts: 1
|
|
base:allocation
|
|
export: 'export1'
|
|
description: This is the writable second export
|
|
size: 67108864
|
|
flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
|
|
min block: XXX
|
|
opt block: XXX
|
|
max block: XXX
|
|
transaction size: 64-bit
|
|
available meta contexts: 1
|
|
base:allocation
|
|
|
|
|
|
=== Connect qemu-io to export1, try removing exports ===
|
|
read 4096/4096 bytes at offset 0
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
wrote 4096/4096 bytes at offset 4096
|
|
4 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec)
|
|
|
|
{"execute": "block-export-del", "arguments": {"id": "export1"}}
|
|
{"error": {"class": "GenericError", "desc": "export 'export1' still in use"}}
|
|
{"execute": "block-export-del", "arguments": {"id": "export0"}}
|
|
{"return": {}}
|
|
[{"data": {"id": "export0"}, "event": "BLOCK_EXPORT_DELETED", "timestamp": {"microseconds": "USECS", "seconds": "SECS"}}]
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": [{"id": "export1", "node-name": "fmt", "shutting-down": false, "type": "nbd"}]}
|
|
exports available: 1
|
|
export: 'export1'
|
|
description: This is the writable second export
|
|
size: 67108864
|
|
flags: 0xded ( flush fua trim zeroes df multi cache fast-zero )
|
|
min block: XXX
|
|
opt block: XXX
|
|
max block: XXX
|
|
transaction size: 64-bit
|
|
available meta contexts: 1
|
|
base:allocation
|
|
|
|
|
|
=== Connect qemu-io again, try force removing ===
|
|
{"execute": "block-export-del", "arguments": {"id": "export1"}}
|
|
{"error": {"class": "GenericError", "desc": "export 'export1' still in use"}}
|
|
{"execute": "block-export-del", "arguments": {"id": "export1", "mode": "hard"}}
|
|
{"return": {}}
|
|
read failed: Input/output error
|
|
|
|
{"execute": "query-block-exports", "arguments": {}}
|
|
{"return": []}
|
|
exports available: 0
|
|
|
|
|
|
=== Shut down QEMU ===
|