1--- Implicit backing file --- 2 3{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "node0"}} 4{"return": {}} 5 6bs->filename: TEST_DIR/PID-top.img 7bs->backing_file: file:TEST_DIR/PID-base.img 8bs->backing->bs->filename: TEST_DIR/PID-base.img 9 10{"execute": "blockdev-del", "arguments": {"node-name": "node0"}} 11{"return": {}} 12 13--- change-backing-file --- 14 15{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "node0"}} 16{"return": {}} 17{"execute": "change-backing-file", "arguments": {"backing-file": "null-co://", "device": "node0", "image-node-name": "node0"}} 18{"return": {}} 19 20bs->filename: json:{"backing": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}} 21bs->backing_file: null-co:// 22bs->backing->bs->filename: TEST_DIR/PID-base.img 23 24{"execute": "change-backing-file", "arguments": {"backing-file": "TEST_DIR/PID-base.img", "device": "node0", "image-node-name": "node0"}} 25{"return": {}} 26 27bs->filename: TEST_DIR/PID-top.img 28bs->backing_file: TEST_DIR/PID-base.img 29bs->backing->bs->filename: TEST_DIR/PID-base.img 30 31{"execute": "change-backing-file", "arguments": {"backing-file": "file:TEST_DIR/PID-base.img", "device": "node0", "image-node-name": "node0"}} 32{"return": {}} 33 34bs->filename: json:{"backing": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}} 35bs->backing_file: file:TEST_DIR/PID-base.img 36bs->backing->bs->filename: TEST_DIR/PID-base.img 37 38{"execute": "blockdev-del", "arguments": {"node-name": "node0"}} 39{"return": {}} 40{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "node0"}} 41{"return": {}} 42 43bs->filename: TEST_DIR/PID-top.img 44bs->backing_file: file:TEST_DIR/PID-base.img 45bs->backing->bs->filename: TEST_DIR/PID-base.img 46 47{"execute": "blockdev-del", "arguments": {"node-name": "node0"}} 48{"return": {}} 49 50--- Override backing file --- 51 52{"execute": "blockdev-add", "arguments": {"driver": "null-co", "node-name": "null"}} 53{"return": {}} 54{"execute": "blockdev-add", "arguments": {"backing": "null", "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "node0"}} 55{"return": {}} 56 57bs->filename: json:{"backing": {"driver": "null-co"}, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}} 58bs->backing_file: TEST_DIR/PID-base.img 59bs->backing->bs->filename: null-co:// 60 61{"execute": "blockdev-del", "arguments": {"node-name": "node0"}} 62{"return": {}} 63{"execute": "blockdev-del", "arguments": {"node-name": "null"}} 64{"return": {}} 65{"execute": "blockdev-add", "arguments": {"backing": null, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}, "node-name": "node0"}} 66{"return": {}} 67 68bs->filename: json:{"backing": null, "driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-top.img"}} 69bs->backing_file: TEST_DIR/PID-base.img 70bs->backing: (none) 71 72{"execute": "blockdev-add", "arguments": {"driver": "IMGFMT", "file": {"driver": "file", "filename": "TEST_DIR/PID-base.img"}, "node-name": "original-backing"}} 73{"return": {}} 74{"execute": "blockdev-snapshot", "arguments": {"node": "original-backing", "overlay": "node0"}} 75{"return": {}} 76 77bs->filename: TEST_DIR/PID-top.img 78bs->backing_file: TEST_DIR/PID-base.img 79bs->backing->bs->filename: TEST_DIR/PID-base.img 80 81{"execute": "blockdev-del", "arguments": {"node-name": "node0"}} 82{"return": {}} 83{"execute": "blockdev-del", "arguments": {"node-name": "original-backing"}} 84{"return": {}} 85