1a1532a22SEric BlakeQA output created by 223 2a1532a22SEric Blake 3a237dea3SEric Blake=== Create partially sparse image, then add dirty bitmaps === 4a1532a22SEric Blake 5a1532a22SEric BlakeFormatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=4194304 6a1532a22SEric Blakewrote 2097152/2097152 bytes at offset 1048576 7a1532a22SEric Blake2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 8a1532a22SEric BlakeTesting: 9a1532a22SEric BlakeQMP_VERSION 10a1532a22SEric Blake{"return": {}} 11a1532a22SEric Blake{"return": {}} 12a1532a22SEric Blake{"return": {}} 13a1532a22SEric Blake{"return": {}} 1492548938SDominik Csapak{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 15*f389309dSStefan Hajnoczi{"return": {}} 16a1532a22SEric Blake 17a1532a22SEric Blake 18a1532a22SEric Blake=== Write part of the file under active bitmap === 19a1532a22SEric Blake 20a237dea3SEric Blakewrote 512/512 bytes at offset 512 21a237dea3SEric Blake512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 22a1532a22SEric Blakewrote 2097152/2097152 bytes at offset 2097152 23a1532a22SEric Blake2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 24a1532a22SEric Blake 25a237dea3SEric Blake=== End dirty bitmaps, and start serving image over NBD === 26a1532a22SEric Blake 27a98b1a1fSEric Blake{"execute":"qmp_capabilities"} 28a1532a22SEric Blake{"return": {}} 290e720781SMax Reitz{"execute":"blockdev-add", 300e720781SMax Reitz "arguments":{"driver":"IMGFMT", "node-name":"n", 310e720781SMax Reitz "file":{"driver":"file", "filename":"TEST_DIR/t.IMGFMT"}}} 32a1532a22SEric Blake{"return": {}} 330e720781SMax Reitz{"execute":"block-dirty-bitmap-disable", 340e720781SMax Reitz "arguments":{"node":"n", "name":"b"}} 35506902c6SEric Blake{"return": {}} 36c08c220bSVladimir Sementsov-Ogievskiy{"execute":"blockdev-add", 37c08c220bSVladimir Sementsov-Ogievskiy "arguments":{"driver":"null-co", "node-name":"null", 38c08c220bSVladimir Sementsov-Ogievskiy "size": 4194304}} 39c08c220bSVladimir Sementsov-Ogievskiy{"return": {}} 40c08c220bSVladimir Sementsov-Ogievskiy{"execute":"block-dirty-bitmap-add", 41c08c220bSVladimir Sementsov-Ogievskiy "arguments":{"node":"null", "name":"b3"}} 42c08c220bSVladimir Sementsov-Ogievskiy{"return": {}} 43296416ffSEric Blake 44296416ffSEric Blake=== Set up NBD with normal access === 45296416ffSEric Blake 460e720781SMax Reitz{"execute":"nbd-server-add", 470e720781SMax Reitz "arguments":{"device":"n"}} 48296416ffSEric Blake{"error": {"class": "GenericError", "desc": "NBD server not running"}} 490e720781SMax Reitz{"execute":"nbd-server-start", 500e720781SMax Reitz "arguments":{"addr":{"type":"unix", 510e720781SMax Reitz "data":{"path":"SOCK_DIR/nbd"}}}} 52296416ffSEric Blake{"return": {}} 530e720781SMax Reitz{"execute":"nbd-server-start", 540e720781SMax Reitz "arguments":{"addr":{"type":"unix", 550e720781SMax Reitz "data":{"path":"SOCK_DIR/nbd1"}}}} 56296416ffSEric Blake{"error": {"class": "GenericError", "desc": "NBD server already running"}} 57296416ffSEric Blakeexports available: 0 580e720781SMax Reitz{"execute":"nbd-server-add", 590e720781SMax Reitz "arguments":{"device":"n", "bitmap":"b"}} 60296416ffSEric Blake{"return": {}} 610e720781SMax Reitz{"execute":"nbd-server-add", 620e720781SMax Reitz "arguments":{"device":"nosuch"}} 63785ec4b1SConnor Kuehl{"error": {"class": "GenericError", "desc": "Cannot find device='nosuch' nor node-name='nosuch'"}} 640e720781SMax Reitz{"execute":"nbd-server-add", 650e720781SMax Reitz "arguments":{"device":"n"}} 66d53be9ceSKevin Wolf{"error": {"class": "GenericError", "desc": "Block export id 'n' is already in use"}} 670e720781SMax Reitz{"execute":"nbd-server-add", 680e720781SMax Reitz "arguments":{"device":"n", "name":"n2", 690e720781SMax Reitz "bitmap":"b2"}} 70296416ffSEric Blake{"error": {"class": "GenericError", "desc": "Enabled bitmap 'b2' incompatible with readonly export"}} 710e720781SMax Reitz{"execute":"nbd-server-add", 720e720781SMax Reitz "arguments":{"device":"n", "name":"n2", 730e720781SMax Reitz "bitmap":"b3"}} 74296416ffSEric Blake{"error": {"class": "GenericError", "desc": "Bitmap 'b3' is not found"}} 750e720781SMax Reitz{"execute":"nbd-server-add", 760e720781SMax Reitz "arguments":{"device":"n", "name":"n2", "writable":true, 770e720781SMax Reitz "description":"some text", "bitmap":"b2"}} 78296416ffSEric Blake{"return": {}} 79c08c220bSVladimir Sementsov-Ogievskiy{"execute":"block-export-add", 80c08c220bSVladimir Sementsov-Ogievskiy "arguments":{"type": "nbd", "node-name":"n", "id":"n3", "name": "n3", 81c08c220bSVladimir Sementsov-Ogievskiy "bitmaps":[{"node":"null","name":"b3"}]}} 82c08c220bSVladimir Sementsov-Ogievskiy{"return": {}} 83c08c220bSVladimir Sementsov-Ogievskiyexports available: 3 84296416ffSEric Blake export: 'n' 85296416ffSEric Blake size: 4194304 862dcbb11bSEric Blake flags: 0x158f ( readonly flush fua df multi cache block-status-payload ) 87296416ffSEric Blake min block: 1 88296416ffSEric Blake opt block: 4096 89296416ffSEric Blake max block: 33554432 9056cf9d04SEric Blake transaction size: 64-bit 91296416ffSEric Blake available meta contexts: 2 92296416ffSEric Blake base:allocation 93296416ffSEric Blake qemu:dirty-bitmap:b 94296416ffSEric Blake export: 'n2' 95deb6ccb0SEric Blake description: some text 96296416ffSEric Blake size: 4194304 972dcbb11bSEric Blake flags: 0x1ded ( flush fua trim zeroes df multi cache fast-zero block-status-payload ) 98296416ffSEric Blake min block: 1 99296416ffSEric Blake opt block: 4096 100296416ffSEric Blake max block: 33554432 10156cf9d04SEric Blake transaction size: 64-bit 102296416ffSEric Blake available meta contexts: 2 103296416ffSEric Blake base:allocation 104296416ffSEric Blake qemu:dirty-bitmap:b2 105c08c220bSVladimir Sementsov-Ogievskiy export: 'n3' 106c08c220bSVladimir Sementsov-Ogievskiy size: 4194304 1072dcbb11bSEric Blake flags: 0x158f ( readonly flush fua df multi cache block-status-payload ) 108c08c220bSVladimir Sementsov-Ogievskiy min block: 1 109c08c220bSVladimir Sementsov-Ogievskiy opt block: 4096 110c08c220bSVladimir Sementsov-Ogievskiy max block: 33554432 11156cf9d04SEric Blake transaction size: 64-bit 112c08c220bSVladimir Sementsov-Ogievskiy available meta contexts: 2 113c08c220bSVladimir Sementsov-Ogievskiy base:allocation 114c08c220bSVladimir Sementsov-Ogievskiy qemu:dirty-bitmap:b3 115296416ffSEric Blake 116296416ffSEric Blake=== Contrast normal status to large granularity dirty-bitmap === 117296416ffSEric Blake 118296416ffSEric Blakeread 512/512 bytes at offset 512 119296416ffSEric Blake512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 120296416ffSEric Blakeread 524288/524288 bytes at offset 524288 121296416ffSEric Blake512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 122296416ffSEric Blakeread 1048576/1048576 bytes at offset 1048576 123296416ffSEric Blake1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 124296416ffSEric Blakeread 2097152/2097152 bytes at offset 2097152 125296416ffSEric Blake2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 12652b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 12752b10c9cSAndrey Drobyshev via{ "start": 4096, "length": 1044480, "depth": 0, "present": true, "zero": true, "data": false, "compressed": false, "offset": OFFSET}, 12852b10c9cSAndrey Drobyshev via{ "start": 1048576, "length": 3145728, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}] 12952b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 65536, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}, 13052b10c9cSAndrey Drobyshev via{ "start": 65536, "length": 2031616, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 13152b10c9cSAndrey Drobyshev via{ "start": 2097152, "length": 2097152, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}] 132296416ffSEric Blake 133296416ffSEric Blake=== Contrast to small granularity dirty-bitmap === 134296416ffSEric Blake 13552b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 512, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 13652b10c9cSAndrey Drobyshev via{ "start": 512, "length": 512, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}, 13752b10c9cSAndrey Drobyshev via{ "start": 1024, "length": 2096128, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 13852b10c9cSAndrey Drobyshev via{ "start": 2097152, "length": 2097152, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}] 139296416ffSEric Blake 140c08c220bSVladimir Sementsov-Ogievskiy=== Check bitmap taken from another node === 141c08c220bSVladimir Sementsov-Ogievskiy 14252b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 4194304, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}] 143c08c220bSVladimir Sementsov-Ogievskiy 144296416ffSEric Blake=== End qemu NBD server === 145296416ffSEric Blake 1460e720781SMax Reitz{"execute":"nbd-server-remove", 1470e720781SMax Reitz "arguments":{"name":"n"}} 1481a9f7a80SKevin Wolf{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n"}} 149296416ffSEric Blake{"return": {}} 1500e720781SMax Reitz{"execute":"nbd-server-remove", 1510e720781SMax Reitz "arguments":{"name":"n2"}} 1521a9f7a80SKevin Wolf{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n2"}} 153*f389309dSStefan Hajnoczi{"return": {}} 154*f389309dSStefan Hajnoczi{"execute":"nbd-server-remove", 155*f389309dSStefan Hajnoczi "arguments":{"name":"n2"}} 156296416ffSEric Blake{"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}} 157296416ffSEric Blake{"execute":"nbd-server-stop"} 158c08c220bSVladimir Sementsov-Ogievskiy{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n3"}} 159296416ffSEric Blake{"return": {}} 160296416ffSEric Blake{"execute":"nbd-server-stop"} 161296416ffSEric Blake{"error": {"class": "GenericError", "desc": "NBD server not running"}} 162296416ffSEric Blake 163296416ffSEric Blake=== Set up NBD with iothread access === 164296416ffSEric Blake 1650e720781SMax Reitz{"execute":"x-blockdev-set-iothread", 1660e720781SMax Reitz "arguments":{"node-name":"n", "iothread":"io0"}} 167296416ffSEric Blake{"return": {}} 1680e720781SMax Reitz{"execute":"nbd-server-add", 1690e720781SMax Reitz "arguments":{"device":"n"}} 1702d2fd674SEric Blake{"error": {"class": "GenericError", "desc": "NBD server not running"}} 1710e720781SMax Reitz{"execute":"nbd-server-start", 1720e720781SMax Reitz "arguments":{"addr":{"type":"unix", 1730e720781SMax Reitz "data":{"path":"SOCK_DIR/nbd"}}}} 1742d2fd674SEric Blake{"return": {}} 1750e720781SMax Reitz{"execute":"nbd-server-start", 1760e720781SMax Reitz "arguments":{"addr":{"type":"unix", 1770e720781SMax Reitz "data":{"path":"SOCK_DIR/nbd1"}}}} 1782d2fd674SEric Blake{"error": {"class": "GenericError", "desc": "NBD server already running"}} 179ddd09448SEric Blakeexports available: 0 1800e720781SMax Reitz{"execute":"nbd-server-add", 1810e720781SMax Reitz "arguments":{"device":"n", "bitmap":"b"}} 1822d2fd674SEric Blake{"return": {}} 1830e720781SMax Reitz{"execute":"nbd-server-add", 1840e720781SMax Reitz "arguments":{"device":"nosuch"}} 185785ec4b1SConnor Kuehl{"error": {"class": "GenericError", "desc": "Cannot find device='nosuch' nor node-name='nosuch'"}} 1860e720781SMax Reitz{"execute":"nbd-server-add", 1870e720781SMax Reitz "arguments":{"device":"n"}} 188d53be9ceSKevin Wolf{"error": {"class": "GenericError", "desc": "Block export id 'n' is already in use"}} 1890e720781SMax Reitz{"execute":"nbd-server-add", 1900e720781SMax Reitz "arguments":{"device":"n", "name":"n2", 1910e720781SMax Reitz "bitmap":"b2"}} 192702aa50dSEric Blake{"error": {"class": "GenericError", "desc": "Enabled bitmap 'b2' incompatible with readonly export"}} 1930e720781SMax Reitz{"execute":"nbd-server-add", 1940e720781SMax Reitz "arguments":{"device":"n", "name":"n2", 1950e720781SMax Reitz "bitmap":"b3"}} 1965fcbeb06SEric Blake{"error": {"class": "GenericError", "desc": "Bitmap 'b3' is not found"}} 1970e720781SMax Reitz{"execute":"nbd-server-add", 1980e720781SMax Reitz "arguments":{"device":"n", "name":"n2", "writable":true, 1990e720781SMax Reitz "description":"some text", "bitmap":"b2"}} 200a237dea3SEric Blake{"return": {}} 201c08c220bSVladimir Sementsov-Ogievskiy{"execute":"block-export-add", 202c08c220bSVladimir Sementsov-Ogievskiy "arguments":{"type": "nbd", "node-name":"n", "id":"n3", "name": "n3", 203c08c220bSVladimir Sementsov-Ogievskiy "bitmaps":[{"node":"null","name":"b3"}]}} 204c08c220bSVladimir Sementsov-Ogievskiy{"return": {}} 205c08c220bSVladimir Sementsov-Ogievskiyexports available: 3 206ddd09448SEric Blake export: 'n' 207ddd09448SEric Blake size: 4194304 2082dcbb11bSEric Blake flags: 0x158f ( readonly flush fua df multi cache block-status-payload ) 209b0245d64SEric Blake min block: 1 210ddd09448SEric Blake opt block: 4096 211ddd09448SEric Blake max block: 33554432 21256cf9d04SEric Blake transaction size: 64-bit 213ddd09448SEric Blake available meta contexts: 2 214ddd09448SEric Blake base:allocation 215ddd09448SEric Blake qemu:dirty-bitmap:b 216ddd09448SEric Blake export: 'n2' 217deb6ccb0SEric Blake description: some text 218ddd09448SEric Blake size: 4194304 2192dcbb11bSEric Blake flags: 0x1ded ( flush fua trim zeroes df multi cache fast-zero block-status-payload ) 220b0245d64SEric Blake min block: 1 221ddd09448SEric Blake opt block: 4096 222ddd09448SEric Blake max block: 33554432 22356cf9d04SEric Blake transaction size: 64-bit 224ddd09448SEric Blake available meta contexts: 2 225ddd09448SEric Blake base:allocation 226ddd09448SEric Blake qemu:dirty-bitmap:b2 227c08c220bSVladimir Sementsov-Ogievskiy export: 'n3' 228c08c220bSVladimir Sementsov-Ogievskiy size: 4194304 2292dcbb11bSEric Blake flags: 0x158f ( readonly flush fua df multi cache block-status-payload ) 230c08c220bSVladimir Sementsov-Ogievskiy min block: 1 231c08c220bSVladimir Sementsov-Ogievskiy opt block: 4096 232c08c220bSVladimir Sementsov-Ogievskiy max block: 33554432 23356cf9d04SEric Blake transaction size: 64-bit 234c08c220bSVladimir Sementsov-Ogievskiy available meta contexts: 2 235c08c220bSVladimir Sementsov-Ogievskiy base:allocation 236c08c220bSVladimir Sementsov-Ogievskiy qemu:dirty-bitmap:b3 237a1532a22SEric Blake 238a237dea3SEric Blake=== Contrast normal status to large granularity dirty-bitmap === 239a1532a22SEric Blake 240a237dea3SEric Blakeread 512/512 bytes at offset 512 241a237dea3SEric Blake512 bytes, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 242a237dea3SEric Blakeread 524288/524288 bytes at offset 524288 243a237dea3SEric Blake512 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 244a1532a22SEric Blakeread 1048576/1048576 bytes at offset 1048576 245a1532a22SEric Blake1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 246a1532a22SEric Blakeread 2097152/2097152 bytes at offset 2097152 247a1532a22SEric Blake2 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) 24852b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 4096, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 24952b10c9cSAndrey Drobyshev via{ "start": 4096, "length": 1044480, "depth": 0, "present": true, "zero": true, "data": false, "compressed": false, "offset": OFFSET}, 25052b10c9cSAndrey Drobyshev via{ "start": 1048576, "length": 3145728, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}] 25152b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 65536, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}, 25252b10c9cSAndrey Drobyshev via{ "start": 65536, "length": 2031616, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 25352b10c9cSAndrey Drobyshev via{ "start": 2097152, "length": 2097152, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}] 254a237dea3SEric Blake 255a237dea3SEric Blake=== Contrast to small granularity dirty-bitmap === 256a237dea3SEric Blake 25752b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 512, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 25852b10c9cSAndrey Drobyshev via{ "start": 512, "length": 512, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}, 25952b10c9cSAndrey Drobyshev via{ "start": 1024, "length": 2096128, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 26052b10c9cSAndrey Drobyshev via{ "start": 2097152, "length": 2097152, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}] 261a1532a22SEric Blake 262c08c220bSVladimir Sementsov-Ogievskiy=== Check bitmap taken from another node === 263c08c220bSVladimir Sementsov-Ogievskiy 26452b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 4194304, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}] 265c08c220bSVladimir Sementsov-Ogievskiy 266636192c4SEric Blake=== End qemu NBD server === 267a1532a22SEric Blake 2680e720781SMax Reitz{"execute":"nbd-server-remove", 2690e720781SMax Reitz "arguments":{"name":"n"}} 2701a9f7a80SKevin Wolf{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n"}} 271a1532a22SEric Blake{"return": {}} 2720e720781SMax Reitz{"execute":"nbd-server-remove", 2730e720781SMax Reitz "arguments":{"name":"n2"}} 2741a9f7a80SKevin Wolf{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n2"}} 275*f389309dSStefan Hajnoczi{"return": {}} 276*f389309dSStefan Hajnoczi{"execute":"nbd-server-remove", 277*f389309dSStefan Hajnoczi "arguments":{"name":"n2"}} 2782d2fd674SEric Blake{"error": {"class": "GenericError", "desc": "Export 'n2' is not found"}} 279a98b1a1fSEric Blake{"execute":"nbd-server-stop"} 280c08c220bSVladimir Sementsov-Ogievskiy{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "BLOCK_EXPORT_DELETED", "data": {"id": "n3"}} 2812d2fd674SEric Blake{"return": {}} 282a98b1a1fSEric Blake{"execute":"nbd-server-stop"} 2837801c3a7SEric Blake{"error": {"class": "GenericError", "desc": "NBD server not running"}} 284a98b1a1fSEric Blake{"execute":"quit"} 285054be360SEric Blake{"timestamp": {"seconds": TIMESTAMP, "microseconds": TIMESTAMP}, "event": "SHUTDOWN", "data": {"guest": false, "reason": "host-qmp-quit"}} 286*f389309dSStefan Hajnoczi{"return": {}} 287636192c4SEric Blake 288636192c4SEric Blake=== Use qemu-nbd as server === 289636192c4SEric Blake 29052b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 65536, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}, 29152b10c9cSAndrey Drobyshev via{ "start": 65536, "length": 2031616, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 29252b10c9cSAndrey Drobyshev via{ "start": 2097152, "length": 2097152, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}] 29352b10c9cSAndrey Drobyshev via[{ "start": 0, "length": 512, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 29452b10c9cSAndrey Drobyshev via{ "start": 512, "length": 512, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}, 29552b10c9cSAndrey Drobyshev via{ "start": 1024, "length": 11321, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}] 29652b10c9cSAndrey Drobyshev via[{ "start": 12345, "length": 2084807, "depth": 0, "present": true, "zero": false, "data": true, "compressed": false, "offset": OFFSET}, 29752b10c9cSAndrey Drobyshev via{ "start": 2097152, "length": 2097152, "depth": 0, "present": false, "zero": false, "data": false, "compressed": false}] 298a1532a22SEric Blake*** done 299