Skip to content

Commit 12a521b

Browse files
akihikodakistefanhaRH
authored andcommitted
block: Add backend_defaults property
backend_defaults property allow users to control if default block properties should be decided with backend information. If it is off, any backend information will be discarded, which is suitable if you plan to perform live migration to a different disk backend. If it is on, a block device may utilize backend information more aggressively. By default, it is auto, which uses backend information for block sizes and ignores the others, which is consistent with the older versions. Signed-off-by: Akihiko Odaki <[email protected]> Message-id: [email protected] Signed-off-by: Stefan Hajnoczi <[email protected]>
1 parent 0dfc7af commit 12a521b

File tree

3 files changed

+79
-4
lines changed

3 files changed

+79
-4
lines changed

hw/block/block.c

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,24 +65,58 @@ bool blkconf_blocksizes(BlockConf *conf, Error **errp)
6565
{
6666
BlockBackend *blk = conf->blk;
6767
BlockSizes blocksizes;
68-
int backend_ret;
68+
BlockDriverState *bs;
69+
bool use_blocksizes;
70+
bool use_bs;
71+
72+
switch (conf->backend_defaults) {
73+
case ON_OFF_AUTO_AUTO:
74+
use_blocksizes = !blk_probe_blocksizes(blk, &blocksizes);
75+
use_bs = false;
76+
break;
77+
78+
case ON_OFF_AUTO_ON:
79+
use_blocksizes = !blk_probe_blocksizes(blk, &blocksizes);
80+
bs = blk_bs(blk);
81+
use_bs = bs;
82+
break;
83+
84+
case ON_OFF_AUTO_OFF:
85+
use_blocksizes = false;
86+
use_bs = false;
87+
break;
88+
89+
default:
90+
abort();
91+
}
6992

70-
backend_ret = blk_probe_blocksizes(blk, &blocksizes);
7193
/* fill in detected values if they are not defined via qemu command line */
7294
if (!conf->physical_block_size) {
73-
if (!backend_ret) {
95+
if (use_blocksizes) {
7496
conf->physical_block_size = blocksizes.phys;
7597
} else {
7698
conf->physical_block_size = BDRV_SECTOR_SIZE;
7799
}
78100
}
79101
if (!conf->logical_block_size) {
80-
if (!backend_ret) {
102+
if (use_blocksizes) {
81103
conf->logical_block_size = blocksizes.log;
82104
} else {
83105
conf->logical_block_size = BDRV_SECTOR_SIZE;
84106
}
85107
}
108+
if (use_bs) {
109+
if (!conf->opt_io_size) {
110+
conf->opt_io_size = bs->bl.opt_transfer;
111+
}
112+
if (conf->discard_granularity == -1) {
113+
if (bs->bl.pdiscard_alignment) {
114+
conf->discard_granularity = bs->bl.pdiscard_alignment;
115+
} else if (bs->bl.request_alignment != 1) {
116+
conf->discard_granularity = bs->bl.request_alignment;
117+
}
118+
}
119+
}
86120

87121
if (conf->logical_block_size > conf->physical_block_size) {
88122
error_setg(errp,

include/hw/block/block.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
typedef struct BlockConf {
2121
BlockBackend *blk;
22+
OnOffAuto backend_defaults;
2223
uint32_t physical_block_size;
2324
uint32_t logical_block_size;
2425
uint32_t min_io_size;
@@ -48,6 +49,8 @@ static inline unsigned int get_physical_block_exp(BlockConf *conf)
4849
}
4950

5051
#define DEFINE_BLOCK_PROPERTIES_BASE(_state, _conf) \
52+
DEFINE_PROP_ON_OFF_AUTO("backend_defaults", _state, \
53+
_conf.backend_defaults, ON_OFF_AUTO_AUTO), \
5154
DEFINE_PROP_BLOCKSIZE("logical_block_size", _state, \
5255
_conf.logical_block_size), \
5356
DEFINE_PROP_BLOCKSIZE("physical_block_size", _state, \

tests/qemu-iotests/172.out

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Testing:
2121
dev: floppy, id ""
2222
unit = 0 (0x0)
2323
drive = "floppy0"
24+
backend_defaults = "auto"
2425
logical_block_size = 512 (512 B)
2526
physical_block_size = 512 (512 B)
2627
min_io_size = 0 (0 B)
@@ -48,6 +49,7 @@ Testing: -fda TEST_DIR/t.qcow2
4849
dev: floppy, id ""
4950
unit = 0 (0x0)
5051
drive = "floppy0"
52+
backend_defaults = "auto"
5153
logical_block_size = 512 (512 B)
5254
physical_block_size = 512 (512 B)
5355
min_io_size = 0 (0 B)
@@ -85,6 +87,7 @@ Testing: -fdb TEST_DIR/t.qcow2
8587
dev: floppy, id ""
8688
unit = 1 (0x1)
8789
drive = "floppy1"
90+
backend_defaults = "auto"
8891
logical_block_size = 512 (512 B)
8992
physical_block_size = 512 (512 B)
9093
min_io_size = 0 (0 B)
@@ -96,6 +99,7 @@ Testing: -fdb TEST_DIR/t.qcow2
9699
dev: floppy, id ""
97100
unit = 0 (0x0)
98101
drive = "floppy0"
102+
backend_defaults = "auto"
99103
logical_block_size = 512 (512 B)
100104
physical_block_size = 512 (512 B)
101105
min_io_size = 0 (0 B)
@@ -137,6 +141,7 @@ Testing: -fda TEST_DIR/t.qcow2 -fdb TEST_DIR/t.qcow2.2
137141
dev: floppy, id ""
138142
unit = 1 (0x1)
139143
drive = "floppy1"
144+
backend_defaults = "auto"
140145
logical_block_size = 512 (512 B)
141146
physical_block_size = 512 (512 B)
142147
min_io_size = 0 (0 B)
@@ -148,6 +153,7 @@ Testing: -fda TEST_DIR/t.qcow2 -fdb TEST_DIR/t.qcow2.2
148153
dev: floppy, id ""
149154
unit = 0 (0x0)
150155
drive = "floppy0"
156+
backend_defaults = "auto"
151157
logical_block_size = 512 (512 B)
152158
physical_block_size = 512 (512 B)
153159
min_io_size = 0 (0 B)
@@ -190,6 +196,7 @@ Testing: -fdb
190196
dev: floppy, id ""
191197
unit = 1 (0x1)
192198
drive = "floppy1"
199+
backend_defaults = "auto"
193200
logical_block_size = 512 (512 B)
194201
physical_block_size = 512 (512 B)
195202
min_io_size = 0 (0 B)
@@ -201,6 +208,7 @@ Testing: -fdb
201208
dev: floppy, id ""
202209
unit = 0 (0x0)
203210
drive = "floppy0"
211+
backend_defaults = "auto"
204212
logical_block_size = 512 (512 B)
205213
physical_block_size = 512 (512 B)
206214
min_io_size = 0 (0 B)
@@ -228,6 +236,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2
228236
dev: floppy, id ""
229237
unit = 0 (0x0)
230238
drive = "floppy0"
239+
backend_defaults = "auto"
231240
logical_block_size = 512 (512 B)
232241
physical_block_size = 512 (512 B)
233242
min_io_size = 0 (0 B)
@@ -265,6 +274,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2,index=1
265274
dev: floppy, id ""
266275
unit = 1 (0x1)
267276
drive = "floppy1"
277+
backend_defaults = "auto"
268278
logical_block_size = 512 (512 B)
269279
physical_block_size = 512 (512 B)
270280
min_io_size = 0 (0 B)
@@ -276,6 +286,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2,index=1
276286
dev: floppy, id ""
277287
unit = 0 (0x0)
278288
drive = "floppy0"
289+
backend_defaults = "auto"
279290
logical_block_size = 512 (512 B)
280291
physical_block_size = 512 (512 B)
281292
min_io_size = 0 (0 B)
@@ -317,6 +328,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2 -drive if=floppy,file=TEST_DIR/t
317328
dev: floppy, id ""
318329
unit = 1 (0x1)
319330
drive = "floppy1"
331+
backend_defaults = "auto"
320332
logical_block_size = 512 (512 B)
321333
physical_block_size = 512 (512 B)
322334
min_io_size = 0 (0 B)
@@ -328,6 +340,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2 -drive if=floppy,file=TEST_DIR/t
328340
dev: floppy, id ""
329341
unit = 0 (0x0)
330342
drive = "floppy0"
343+
backend_defaults = "auto"
331344
logical_block_size = 512 (512 B)
332345
physical_block_size = 512 (512 B)
333346
min_io_size = 0 (0 B)
@@ -373,6 +386,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -device floppy,drive=none0
373386
dev: floppy, id ""
374387
unit = 0 (0x0)
375388
drive = "none0"
389+
backend_defaults = "auto"
376390
logical_block_size = 512 (512 B)
377391
physical_block_size = 512 (512 B)
378392
min_io_size = 0 (0 B)
@@ -410,6 +424,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -device floppy,drive=none0,unit=1
410424
dev: floppy, id ""
411425
unit = 1 (0x1)
412426
drive = "none0"
427+
backend_defaults = "auto"
413428
logical_block_size = 512 (512 B)
414429
physical_block_size = 512 (512 B)
415430
min_io_size = 0 (0 B)
@@ -447,6 +462,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qco
447462
dev: floppy, id ""
448463
unit = 1 (0x1)
449464
drive = "none1"
465+
backend_defaults = "auto"
450466
logical_block_size = 512 (512 B)
451467
physical_block_size = 512 (512 B)
452468
min_io_size = 0 (0 B)
@@ -458,6 +474,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qco
458474
dev: floppy, id ""
459475
unit = 0 (0x0)
460476
drive = "none0"
477+
backend_defaults = "auto"
461478
logical_block_size = 512 (512 B)
462479
physical_block_size = 512 (512 B)
463480
min_io_size = 0 (0 B)
@@ -509,6 +526,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
509526
dev: floppy, id ""
510527
unit = 1 (0x1)
511528
drive = "none0"
529+
backend_defaults = "auto"
512530
logical_block_size = 512 (512 B)
513531
physical_block_size = 512 (512 B)
514532
min_io_size = 0 (0 B)
@@ -520,6 +538,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
520538
dev: floppy, id ""
521539
unit = 0 (0x0)
522540
drive = "floppy0"
541+
backend_defaults = "auto"
523542
logical_block_size = 512 (512 B)
524543
physical_block_size = 512 (512 B)
525544
min_io_size = 0 (0 B)
@@ -562,6 +581,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
562581
dev: floppy, id ""
563582
unit = 1 (0x1)
564583
drive = "none0"
584+
backend_defaults = "auto"
565585
logical_block_size = 512 (512 B)
566586
physical_block_size = 512 (512 B)
567587
min_io_size = 0 (0 B)
@@ -573,6 +593,7 @@ Testing: -fda TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
573593
dev: floppy, id ""
574594
unit = 0 (0x0)
575595
drive = "floppy0"
596+
backend_defaults = "auto"
576597
logical_block_size = 512 (512 B)
577598
physical_block_size = 512 (512 B)
578599
min_io_size = 0 (0 B)
@@ -615,6 +636,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
615636
dev: floppy, id ""
616637
unit = 0 (0x0)
617638
drive = "none0"
639+
backend_defaults = "auto"
618640
logical_block_size = 512 (512 B)
619641
physical_block_size = 512 (512 B)
620642
min_io_size = 0 (0 B)
@@ -626,6 +648,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
626648
dev: floppy, id ""
627649
unit = 1 (0x1)
628650
drive = "floppy1"
651+
backend_defaults = "auto"
629652
logical_block_size = 512 (512 B)
630653
physical_block_size = 512 (512 B)
631654
min_io_size = 0 (0 B)
@@ -668,6 +691,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
668691
dev: floppy, id ""
669692
unit = 0 (0x0)
670693
drive = "none0"
694+
backend_defaults = "auto"
671695
logical_block_size = 512 (512 B)
672696
physical_block_size = 512 (512 B)
673697
min_io_size = 0 (0 B)
@@ -679,6 +703,7 @@ Testing: -fdb TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.qcow2.2 -device fl
679703
dev: floppy, id ""
680704
unit = 1 (0x1)
681705
drive = "floppy1"
706+
backend_defaults = "auto"
682707
logical_block_size = 512 (512 B)
683708
physical_block_size = 512 (512 B)
684709
min_io_size = 0 (0 B)
@@ -730,6 +755,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.q
730755
dev: floppy, id ""
731756
unit = 1 (0x1)
732757
drive = "none0"
758+
backend_defaults = "auto"
733759
logical_block_size = 512 (512 B)
734760
physical_block_size = 512 (512 B)
735761
min_io_size = 0 (0 B)
@@ -741,6 +767,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.q
741767
dev: floppy, id ""
742768
unit = 0 (0x0)
743769
drive = "floppy0"
770+
backend_defaults = "auto"
744771
logical_block_size = 512 (512 B)
745772
physical_block_size = 512 (512 B)
746773
min_io_size = 0 (0 B)
@@ -783,6 +810,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.q
783810
dev: floppy, id ""
784811
unit = 1 (0x1)
785812
drive = "none0"
813+
backend_defaults = "auto"
786814
logical_block_size = 512 (512 B)
787815
physical_block_size = 512 (512 B)
788816
min_io_size = 0 (0 B)
@@ -794,6 +822,7 @@ Testing: -drive if=floppy,file=TEST_DIR/t.qcow2 -drive if=none,file=TEST_DIR/t.q
794822
dev: floppy, id ""
795823
unit = 0 (0x0)
796824
drive = "floppy0"
825+
backend_defaults = "auto"
797826
logical_block_size = 512 (512 B)
798827
physical_block_size = 512 (512 B)
799828
min_io_size = 0 (0 B)
@@ -842,6 +871,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -global floppy.drive=none0 -device
842871
dev: floppy, id ""
843872
unit = 0 (0x0)
844873
drive = "none0"
874+
backend_defaults = "auto"
845875
logical_block_size = 512 (512 B)
846876
physical_block_size = 512 (512 B)
847877
min_io_size = 0 (0 B)
@@ -909,6 +939,7 @@ Testing: -device floppy
909939
dev: floppy, id ""
910940
unit = 0 (0x0)
911941
drive = ""
942+
backend_defaults = "auto"
912943
logical_block_size = 512 (512 B)
913944
physical_block_size = 512 (512 B)
914945
min_io_size = 0 (0 B)
@@ -933,6 +964,7 @@ Testing: -device floppy,drive-type=120
933964
dev: floppy, id ""
934965
unit = 0 (0x0)
935966
drive = ""
967+
backend_defaults = "auto"
936968
logical_block_size = 512 (512 B)
937969
physical_block_size = 512 (512 B)
938970
min_io_size = 0 (0 B)
@@ -957,6 +989,7 @@ Testing: -device floppy,drive-type=144
957989
dev: floppy, id ""
958990
unit = 0 (0x0)
959991
drive = ""
992+
backend_defaults = "auto"
960993
logical_block_size = 512 (512 B)
961994
physical_block_size = 512 (512 B)
962995
min_io_size = 0 (0 B)
@@ -981,6 +1014,7 @@ Testing: -device floppy,drive-type=288
9811014
dev: floppy, id ""
9821015
unit = 0 (0x0)
9831016
drive = ""
1017+
backend_defaults = "auto"
9841018
logical_block_size = 512 (512 B)
9851019
physical_block_size = 512 (512 B)
9861020
min_io_size = 0 (0 B)
@@ -1008,6 +1042,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -device floppy,drive=none0,drive-t
10081042
dev: floppy, id ""
10091043
unit = 0 (0x0)
10101044
drive = "none0"
1045+
backend_defaults = "auto"
10111046
logical_block_size = 512 (512 B)
10121047
physical_block_size = 512 (512 B)
10131048
min_io_size = 0 (0 B)
@@ -1045,6 +1080,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -device floppy,drive=none0,drive-t
10451080
dev: floppy, id ""
10461081
unit = 0 (0x0)
10471082
drive = "none0"
1083+
backend_defaults = "auto"
10481084
logical_block_size = 512 (512 B)
10491085
physical_block_size = 512 (512 B)
10501086
min_io_size = 0 (0 B)
@@ -1085,6 +1121,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -device floppy,drive=none0,logical
10851121
dev: floppy, id ""
10861122
unit = 0 (0x0)
10871123
drive = "none0"
1124+
backend_defaults = "auto"
10881125
logical_block_size = 512 (512 B)
10891126
physical_block_size = 512 (512 B)
10901127
min_io_size = 0 (0 B)
@@ -1122,6 +1159,7 @@ Testing: -drive if=none,file=TEST_DIR/t.qcow2 -device floppy,drive=none0,physica
11221159
dev: floppy, id ""
11231160
unit = 0 (0x0)
11241161
drive = "none0"
1162+
backend_defaults = "auto"
11251163
logical_block_size = 512 (512 B)
11261164
physical_block_size = 512 (512 B)
11271165
min_io_size = 0 (0 B)

0 commit comments

Comments
 (0)