Commit 5efa9d5a8b18841c9c62208a494d7f519238979a
1 parent
0bfe3ca5
Convert block infrastructure to use new module init functionality
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
16 changed files
with
141 additions
and
60 deletions
block-bochs.c
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | */ |
25 | 25 | #include "qemu-common.h" |
26 | 26 | #include "block_int.h" |
27 | +#include "module.h" | |
27 | 28 | |
28 | 29 | /**************************************************************/ |
29 | 30 | |
... | ... | @@ -241,7 +242,7 @@ static void bochs_close(BlockDriverState *bs) |
241 | 242 | close(s->fd); |
242 | 243 | } |
243 | 244 | |
244 | -BlockDriver bdrv_bochs = { | |
245 | +static BlockDriver bdrv_bochs = { | |
245 | 246 | .format_name = "bochs", |
246 | 247 | .instance_size = sizeof(BDRVBochsState), |
247 | 248 | .bdrv_probe = bochs_probe, |
... | ... | @@ -249,3 +250,10 @@ BlockDriver bdrv_bochs = { |
249 | 250 | .bdrv_read = bochs_read, |
250 | 251 | .bdrv_close = bochs_close, |
251 | 252 | }; |
253 | + | |
254 | +static void bdrv_bochs_init(void) | |
255 | +{ | |
256 | + bdrv_register(&bdrv_bochs); | |
257 | +} | |
258 | + | |
259 | +block_init(bdrv_bochs_init); | ... | ... |
block-cloop.c
... | ... | @@ -23,6 +23,7 @@ |
23 | 23 | */ |
24 | 24 | #include "qemu-common.h" |
25 | 25 | #include "block_int.h" |
26 | +#include "module.h" | |
26 | 27 | #include <zlib.h> |
27 | 28 | |
28 | 29 | typedef struct BDRVCloopState { |
... | ... | @@ -153,7 +154,7 @@ static void cloop_close(BlockDriverState *bs) |
153 | 154 | inflateEnd(&s->zstream); |
154 | 155 | } |
155 | 156 | |
156 | -BlockDriver bdrv_cloop = { | |
157 | +static BlockDriver bdrv_cloop = { | |
157 | 158 | .format_name = "cloop", |
158 | 159 | .instance_size = sizeof(BDRVCloopState), |
159 | 160 | .bdrv_probe = cloop_probe, |
... | ... | @@ -161,3 +162,10 @@ BlockDriver bdrv_cloop = { |
161 | 162 | .bdrv_read = cloop_read, |
162 | 163 | .bdrv_close = cloop_close, |
163 | 164 | }; |
165 | + | |
166 | +static void bdrv_cloop_init(void) | |
167 | +{ | |
168 | + bdrv_register(&bdrv_cloop); | |
169 | +} | |
170 | + | |
171 | +block_init(bdrv_cloop_init); | ... | ... |
block-cow.c
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | #ifndef _WIN32 |
25 | 25 | #include "qemu-common.h" |
26 | 26 | #include "block_int.h" |
27 | +#include "module.h" | |
27 | 28 | #include <sys/mman.h> |
28 | 29 | |
29 | 30 | /**************************************************************/ |
... | ... | @@ -252,7 +253,7 @@ static void cow_flush(BlockDriverState *bs) |
252 | 253 | fsync(s->fd); |
253 | 254 | } |
254 | 255 | |
255 | -BlockDriver bdrv_cow = { | |
256 | +static BlockDriver bdrv_cow = { | |
256 | 257 | .format_name = "cow", |
257 | 258 | .instance_size = sizeof(BDRVCowState), |
258 | 259 | .bdrv_probe = cow_probe, |
... | ... | @@ -264,4 +265,11 @@ BlockDriver bdrv_cow = { |
264 | 265 | .bdrv_flush = cow_flush, |
265 | 266 | .bdrv_is_allocated = cow_is_allocated, |
266 | 267 | }; |
268 | + | |
269 | +static void bdrv_cow_init(void) | |
270 | +{ | |
271 | + bdrv_register(&bdrv_cow); | |
272 | +} | |
273 | + | |
274 | +block_init(bdrv_cow_init); | |
267 | 275 | #endif | ... | ... |
block-dmg.c
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | #include "qemu-common.h" |
25 | 25 | #include "block_int.h" |
26 | 26 | #include "bswap.h" |
27 | +#include "module.h" | |
27 | 28 | #include <zlib.h> |
28 | 29 | |
29 | 30 | typedef struct BDRVDMGState { |
... | ... | @@ -92,7 +93,7 @@ static int dmg_open(BlockDriverState *bs, const char *filename, int flags) |
92 | 93 | dmg_close: |
93 | 94 | close(s->fd); |
94 | 95 | /* open raw instead */ |
95 | - bs->drv=&bdrv_raw; | |
96 | + bs->drv=bdrv_find_format("raw"); | |
96 | 97 | return bs->drv->bdrv_open(bs, filename, flags); |
97 | 98 | } |
98 | 99 | info_begin=read_off(s->fd); |
... | ... | @@ -283,7 +284,7 @@ static void dmg_close(BlockDriverState *bs) |
283 | 284 | inflateEnd(&s->zstream); |
284 | 285 | } |
285 | 286 | |
286 | -BlockDriver bdrv_dmg = { | |
287 | +static BlockDriver bdrv_dmg = { | |
287 | 288 | .format_name = "dmg", |
288 | 289 | .instance_size = sizeof(BDRVDMGState), |
289 | 290 | .bdrv_probe = dmg_probe, |
... | ... | @@ -291,3 +292,10 @@ BlockDriver bdrv_dmg = { |
291 | 292 | .bdrv_read = dmg_read, |
292 | 293 | .bdrv_close = dmg_close, |
293 | 294 | }; |
295 | + | |
296 | +static void bdrv_dmg_init(void) | |
297 | +{ | |
298 | + bdrv_register(&bdrv_dmg); | |
299 | +} | |
300 | + | |
301 | +block_init(bdrv_dmg_init); | ... | ... |
block-nbd.c
... | ... | @@ -28,6 +28,7 @@ |
28 | 28 | |
29 | 29 | #include "qemu-common.h" |
30 | 30 | #include "nbd.h" |
31 | +#include "module.h" | |
31 | 32 | |
32 | 33 | #include <sys/types.h> |
33 | 34 | #include <unistd.h> |
... | ... | @@ -176,7 +177,7 @@ static int64_t nbd_getlength(BlockDriverState *bs) |
176 | 177 | return s->size; |
177 | 178 | } |
178 | 179 | |
179 | -BlockDriver bdrv_nbd = { | |
180 | +static BlockDriver bdrv_nbd = { | |
180 | 181 | .format_name = "nbd", |
181 | 182 | .instance_size = sizeof(BDRVNBDState), |
182 | 183 | .bdrv_open = nbd_open, |
... | ... | @@ -186,3 +187,10 @@ BlockDriver bdrv_nbd = { |
186 | 187 | .bdrv_getlength = nbd_getlength, |
187 | 188 | .protocol_name = "nbd", |
188 | 189 | }; |
190 | + | |
191 | +static void bdrv_nbd_init(void) | |
192 | +{ | |
193 | + bdrv_register(&bdrv_nbd); | |
194 | +} | |
195 | + | |
196 | +block_init(bdrv_nbd_init); | ... | ... |
block-parallels.c
... | ... | @@ -25,6 +25,7 @@ |
25 | 25 | */ |
26 | 26 | #include "qemu-common.h" |
27 | 27 | #include "block_int.h" |
28 | +#include "module.h" | |
28 | 29 | |
29 | 30 | /**************************************************************/ |
30 | 31 | |
... | ... | @@ -163,7 +164,7 @@ static void parallels_close(BlockDriverState *bs) |
163 | 164 | close(s->fd); |
164 | 165 | } |
165 | 166 | |
166 | -BlockDriver bdrv_parallels = { | |
167 | +static BlockDriver bdrv_parallels = { | |
167 | 168 | .format_name = "parallels", |
168 | 169 | .instance_size = sizeof(BDRVParallelsState), |
169 | 170 | .bdrv_probe = parallels_probe, |
... | ... | @@ -171,3 +172,10 @@ BlockDriver bdrv_parallels = { |
171 | 172 | .bdrv_read = parallels_read, |
172 | 173 | .bdrv_close = parallels_close, |
173 | 174 | }; |
175 | + | |
176 | +static void bdrv_parallels_init(void) | |
177 | +{ | |
178 | + bdrv_register(&bdrv_parallels); | |
179 | +} | |
180 | + | |
181 | +block_init(bdrv_parallels_init); | ... | ... |
block-qcow.c
... | ... | @@ -23,6 +23,7 @@ |
23 | 23 | */ |
24 | 24 | #include "qemu-common.h" |
25 | 25 | #include "block_int.h" |
26 | +#include "module.h" | |
26 | 27 | #include <zlib.h> |
27 | 28 | #include "aes.h" |
28 | 29 | |
... | ... | @@ -917,7 +918,7 @@ static int qcow_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) |
917 | 918 | return 0; |
918 | 919 | } |
919 | 920 | |
920 | -BlockDriver bdrv_qcow = { | |
921 | +static BlockDriver bdrv_qcow = { | |
921 | 922 | .format_name = "qcow", |
922 | 923 | .instance_size = sizeof(BDRVQcowState), |
923 | 924 | .bdrv_probe = qcow_probe, |
... | ... | @@ -935,3 +936,10 @@ BlockDriver bdrv_qcow = { |
935 | 936 | .bdrv_write_compressed = qcow_write_compressed, |
936 | 937 | .bdrv_get_info = qcow_get_info, |
937 | 938 | }; |
939 | + | |
940 | +static void bdrv_qcow_init(void) | |
941 | +{ | |
942 | + bdrv_register(&bdrv_qcow); | |
943 | +} | |
944 | + | |
945 | +block_init(bdrv_qcow_init); | ... | ... |
block-qcow2.c
... | ... | @@ -23,6 +23,7 @@ |
23 | 23 | */ |
24 | 24 | #include "qemu-common.h" |
25 | 25 | #include "block_int.h" |
26 | +#include "module.h" | |
26 | 27 | #include <zlib.h> |
27 | 28 | #include "aes.h" |
28 | 29 | |
... | ... | @@ -2891,7 +2892,7 @@ static int qcow_get_buffer(BlockDriverState *bs, uint8_t *buf, |
2891 | 2892 | return ret; |
2892 | 2893 | } |
2893 | 2894 | |
2894 | -BlockDriver bdrv_qcow2 = { | |
2895 | +static BlockDriver bdrv_qcow2 = { | |
2895 | 2896 | .format_name = "qcow2", |
2896 | 2897 | .instance_size = sizeof(BDRVQcowState), |
2897 | 2898 | .bdrv_probe = qcow_probe, |
... | ... | @@ -2921,3 +2922,10 @@ BlockDriver bdrv_qcow2 = { |
2921 | 2922 | .bdrv_create2 = qcow_create2, |
2922 | 2923 | .bdrv_check = qcow_check, |
2923 | 2924 | }; |
2925 | + | |
2926 | +static void bdrv_qcow2_init(void) | |
2927 | +{ | |
2928 | + bdrv_register(&bdrv_qcow2); | |
2929 | +} | |
2930 | + | |
2931 | +block_init(bdrv_qcow2_init); | ... | ... |
block-raw-posix.c
... | ... | @@ -25,6 +25,7 @@ |
25 | 25 | #include "qemu-timer.h" |
26 | 26 | #include "qemu-char.h" |
27 | 27 | #include "block_int.h" |
28 | +#include "module.h" | |
28 | 29 | #ifdef CONFIG_AIO |
29 | 30 | #include "posix-aio-compat.h" |
30 | 31 | #endif |
... | ... | @@ -845,7 +846,7 @@ static void raw_flush(BlockDriverState *bs) |
845 | 846 | fsync(s->fd); |
846 | 847 | } |
847 | 848 | |
848 | -BlockDriver bdrv_raw = { | |
849 | +static BlockDriver bdrv_raw = { | |
849 | 850 | .format_name = "raw", |
850 | 851 | .instance_size = sizeof(BDRVRawState), |
851 | 852 | .bdrv_probe = NULL, /* no probe for protocols */ |
... | ... | @@ -1397,7 +1398,7 @@ static int hdev_create(const char *filename, int64_t total_size, |
1397 | 1398 | } |
1398 | 1399 | #endif |
1399 | 1400 | |
1400 | -BlockDriver bdrv_host_device = { | |
1401 | +static BlockDriver bdrv_host_device = { | |
1401 | 1402 | .format_name = "host_device", |
1402 | 1403 | .instance_size = sizeof(BDRVRawState), |
1403 | 1404 | .bdrv_open = hdev_open, |
... | ... | @@ -1427,3 +1428,11 @@ BlockDriver bdrv_host_device = { |
1427 | 1428 | .bdrv_aio_ioctl = raw_aio_ioctl, |
1428 | 1429 | #endif |
1429 | 1430 | }; |
1431 | + | |
1432 | +static void bdrv_raw_init(void) | |
1433 | +{ | |
1434 | + bdrv_register(&bdrv_raw); | |
1435 | + bdrv_register(&bdrv_host_device); | |
1436 | +} | |
1437 | + | |
1438 | +block_init(bdrv_raw_init); | ... | ... |
block-raw-win32.c
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | #include "qemu-common.h" |
25 | 25 | #include "qemu-timer.h" |
26 | 26 | #include "block_int.h" |
27 | +#include "module.h" | |
27 | 28 | #include <windows.h> |
28 | 29 | #include <winioctl.h> |
29 | 30 | |
... | ... | @@ -227,7 +228,7 @@ static int raw_create(const char *filename, int64_t total_size, |
227 | 228 | return 0; |
228 | 229 | } |
229 | 230 | |
230 | -BlockDriver bdrv_raw = { | |
231 | +static BlockDriver bdrv_raw = { | |
231 | 232 | .format_name = "raw", |
232 | 233 | .instance_size = sizeof(BDRVRawState), |
233 | 234 | .bdrv_open = raw_open, |
... | ... | @@ -371,7 +372,7 @@ static int raw_set_locked(BlockDriverState *bs, int locked) |
371 | 372 | } |
372 | 373 | #endif |
373 | 374 | |
374 | -BlockDriver bdrv_host_device = { | |
375 | +static BlockDriver bdrv_host_device = { | |
375 | 376 | .format_name = "host_device", |
376 | 377 | .instance_size = sizeof(BDRVRawState), |
377 | 378 | .bdrv_open = hdev_open, |
... | ... | @@ -382,3 +383,11 @@ BlockDriver bdrv_host_device = { |
382 | 383 | .bdrv_write = raw_write, |
383 | 384 | .bdrv_getlength = raw_getlength, |
384 | 385 | }; |
386 | + | |
387 | +static void bdrv_raw_init(void) | |
388 | +{ | |
389 | + bdrv_register(&bdrv_raw); | |
390 | + bdrv_register(&bdrv_host_device); | |
391 | +} | |
392 | + | |
393 | +block_init(bdrv_raw_init); | ... | ... |
block-vmdk.c
... | ... | @@ -25,6 +25,7 @@ |
25 | 25 | |
26 | 26 | #include "qemu-common.h" |
27 | 27 | #include "block_int.h" |
28 | +#include "module.h" | |
28 | 29 | |
29 | 30 | #define VMDK3_MAGIC (('C' << 24) | ('O' << 16) | ('W' << 8) | 'D') |
30 | 31 | #define VMDK4_MAGIC (('K' << 24) | ('D' << 16) | ('M' << 8) | 'V') |
... | ... | @@ -811,7 +812,7 @@ static void vmdk_flush(BlockDriverState *bs) |
811 | 812 | bdrv_flush(s->hd); |
812 | 813 | } |
813 | 814 | |
814 | -BlockDriver bdrv_vmdk = { | |
815 | +static BlockDriver bdrv_vmdk = { | |
815 | 816 | .format_name = "vmdk", |
816 | 817 | .instance_size = sizeof(BDRVVmdkState), |
817 | 818 | .bdrv_probe = vmdk_probe, |
... | ... | @@ -823,3 +824,10 @@ BlockDriver bdrv_vmdk = { |
823 | 824 | .bdrv_flush = vmdk_flush, |
824 | 825 | .bdrv_is_allocated = vmdk_is_allocated, |
825 | 826 | }; |
827 | + | |
828 | +static void bdrv_vmdk_init(void) | |
829 | +{ | |
830 | + bdrv_register(&bdrv_vmdk); | |
831 | +} | |
832 | + | |
833 | +block_init(bdrv_vmdk_init); | ... | ... |
block-vpc.c
... | ... | @@ -24,6 +24,7 @@ |
24 | 24 | */ |
25 | 25 | #include "qemu-common.h" |
26 | 26 | #include "block_int.h" |
27 | +#include "module.h" | |
27 | 28 | |
28 | 29 | /**************************************************************/ |
29 | 30 | |
... | ... | @@ -586,7 +587,7 @@ static void vpc_close(BlockDriverState *bs) |
586 | 587 | bdrv_delete(s->hd); |
587 | 588 | } |
588 | 589 | |
589 | -BlockDriver bdrv_vpc = { | |
590 | +static BlockDriver bdrv_vpc = { | |
590 | 591 | .format_name = "vpc", |
591 | 592 | .instance_size = sizeof(BDRVVPCState), |
592 | 593 | .bdrv_probe = vpc_probe, |
... | ... | @@ -596,3 +597,10 @@ BlockDriver bdrv_vpc = { |
596 | 597 | .bdrv_close = vpc_close, |
597 | 598 | .bdrv_create = vpc_create, |
598 | 599 | }; |
600 | + | |
601 | +static void bdrv_vpc_init(void) | |
602 | +{ | |
603 | + bdrv_register(&bdrv_vpc); | |
604 | +} | |
605 | + | |
606 | +block_init(bdrv_vpc_init); | ... | ... |
block-vvfat.c
... | ... | @@ -26,6 +26,7 @@ |
26 | 26 | #include <dirent.h> |
27 | 27 | #include "qemu-common.h" |
28 | 28 | #include "block_int.h" |
29 | +#include "module.h" | |
29 | 30 | |
30 | 31 | #ifndef S_IWGRP |
31 | 32 | #define S_IWGRP 0 |
... | ... | @@ -2776,7 +2777,7 @@ static int enable_write_target(BDRVVVFATState *s) |
2776 | 2777 | |
2777 | 2778 | s->qcow_filename = qemu_malloc(1024); |
2778 | 2779 | get_tmp_filename(s->qcow_filename, 1024); |
2779 | - if (bdrv_create(&bdrv_qcow, | |
2780 | + if (bdrv_create(bdrv_find_format("qcow"), | |
2780 | 2781 | s->qcow_filename, s->sector_count, "fat:", 0) < 0) |
2781 | 2782 | return -1; |
2782 | 2783 | s->qcow = bdrv_new(""); |
... | ... | @@ -2806,7 +2807,7 @@ static void vvfat_close(BlockDriverState *bs) |
2806 | 2807 | free(s->cluster_buffer); |
2807 | 2808 | } |
2808 | 2809 | |
2809 | -BlockDriver bdrv_vvfat = { | |
2810 | +static BlockDriver bdrv_vvfat = { | |
2810 | 2811 | .format_name = "vvfat", |
2811 | 2812 | .instance_size = sizeof(BDRVVVFATState), |
2812 | 2813 | .bdrv_open = vvfat_open, |
... | ... | @@ -2817,6 +2818,13 @@ BlockDriver bdrv_vvfat = { |
2817 | 2818 | .protocol_name = "fat", |
2818 | 2819 | }; |
2819 | 2820 | |
2821 | +static void bdrv_vvfat_init(void) | |
2822 | +{ | |
2823 | + bdrv_register(&bdrv_vvfat); | |
2824 | +} | |
2825 | + | |
2826 | +block_init(bdrv_vvfat_init); | |
2827 | + | |
2820 | 2828 | #ifdef DEBUG |
2821 | 2829 | static void checkpoint(void) { |
2822 | 2830 | assert(((mapping_t*)array_get(&(vvv->mapping), 0))->end == 2); | ... | ... |
block.c
... | ... | @@ -30,6 +30,7 @@ |
30 | 30 | #include "qemu-common.h" |
31 | 31 | #include "monitor.h" |
32 | 32 | #include "block_int.h" |
33 | +#include "module.h" | |
33 | 34 | |
34 | 35 | #ifdef HOST_BSD |
35 | 36 | #include <sys/types.h> |
... | ... | @@ -138,7 +139,7 @@ void path_combine(char *dest, int dest_size, |
138 | 139 | } |
139 | 140 | |
140 | 141 | |
141 | -static void bdrv_register(BlockDriver *bdrv) | |
142 | +void bdrv_register(BlockDriver *bdrv) | |
142 | 143 | { |
143 | 144 | if (!bdrv->bdrv_aio_readv) { |
144 | 145 | /* add AIO emulation layer */ |
... | ... | @@ -259,11 +260,11 @@ static BlockDriver *find_protocol(const char *filename) |
259 | 260 | #ifdef _WIN32 |
260 | 261 | if (is_windows_drive(filename) || |
261 | 262 | is_windows_drive_prefix(filename)) |
262 | - return &bdrv_raw; | |
263 | + return bdrv_find_format("raw"); | |
263 | 264 | #endif |
264 | 265 | p = strchr(filename, ':'); |
265 | 266 | if (!p) |
266 | - return &bdrv_raw; | |
267 | + return bdrv_find_format("raw"); | |
267 | 268 | len = p - filename; |
268 | 269 | if (len > sizeof(protocol) - 1) |
269 | 270 | len = sizeof(protocol) - 1; |
... | ... | @@ -289,23 +290,23 @@ static BlockDriver *find_image_format(const char *filename) |
289 | 290 | /* detect host devices. By convention, /dev/cdrom[N] is always |
290 | 291 | recognized as a host CDROM */ |
291 | 292 | if (strstart(filename, "/dev/cdrom", NULL)) |
292 | - return &bdrv_host_device; | |
293 | + return bdrv_find_format("host_device"); | |
293 | 294 | #ifdef _WIN32 |
294 | 295 | if (is_windows_drive(filename)) |
295 | - return &bdrv_host_device; | |
296 | + return bdrv_find_format("host_device"); | |
296 | 297 | #else |
297 | 298 | { |
298 | 299 | struct stat st; |
299 | 300 | if (stat(filename, &st) >= 0 && |
300 | 301 | (S_ISCHR(st.st_mode) || S_ISBLK(st.st_mode))) { |
301 | - return &bdrv_host_device; | |
302 | + return bdrv_find_format("host_device"); | |
302 | 303 | } |
303 | 304 | } |
304 | 305 | #endif |
305 | 306 | |
306 | 307 | drv = find_protocol(filename); |
307 | 308 | /* no need to test disk image formats for vvfat */ |
308 | - if (drv == &bdrv_vvfat) | |
309 | + if (strcmp(drv->format_name, "vvfat") == 0) | |
309 | 310 | return drv; |
310 | 311 | |
311 | 312 | ret = bdrv_file_open(&bs, filename, BDRV_O_RDONLY); |
... | ... | @@ -396,14 +397,14 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags, |
396 | 397 | else |
397 | 398 | realpath(filename, backing_filename); |
398 | 399 | |
399 | - ret = bdrv_create2(&bdrv_qcow2, tmp_filename, | |
400 | + ret = bdrv_create2(bdrv_find_format("qcow2"), tmp_filename, | |
400 | 401 | total_size, backing_filename, |
401 | 402 | (drv ? drv->format_name : NULL), 0); |
402 | 403 | if (ret < 0) { |
403 | 404 | return ret; |
404 | 405 | } |
405 | 406 | filename = tmp_filename; |
406 | - drv = &bdrv_qcow2; | |
407 | + drv = bdrv_find_format("qcow2"); | |
407 | 408 | bs->is_temporary = 1; |
408 | 409 | } |
409 | 410 | |
... | ... | @@ -1494,21 +1495,7 @@ static int bdrv_write_em(BlockDriverState *bs, int64_t sector_num, |
1494 | 1495 | |
1495 | 1496 | void bdrv_init(void) |
1496 | 1497 | { |
1497 | - bdrv_register(&bdrv_raw); | |
1498 | - bdrv_register(&bdrv_host_device); | |
1499 | -#ifndef _WIN32 | |
1500 | - bdrv_register(&bdrv_cow); | |
1501 | -#endif | |
1502 | - bdrv_register(&bdrv_qcow); | |
1503 | - bdrv_register(&bdrv_vmdk); | |
1504 | - bdrv_register(&bdrv_cloop); | |
1505 | - bdrv_register(&bdrv_dmg); | |
1506 | - bdrv_register(&bdrv_bochs); | |
1507 | - bdrv_register(&bdrv_vpc); | |
1508 | - bdrv_register(&bdrv_vvfat); | |
1509 | - bdrv_register(&bdrv_qcow2); | |
1510 | - bdrv_register(&bdrv_parallels); | |
1511 | - bdrv_register(&bdrv_nbd); | |
1498 | + module_call_init(MODULE_INIT_BLOCK); | |
1512 | 1499 | } |
1513 | 1500 | |
1514 | 1501 | void aio_pool_init(AIOPool *pool, int aiocb_size, | ... | ... |
block.h
... | ... | @@ -7,20 +7,6 @@ |
7 | 7 | /* block.c */ |
8 | 8 | typedef struct BlockDriver BlockDriver; |
9 | 9 | |
10 | -extern BlockDriver bdrv_raw; | |
11 | -extern BlockDriver bdrv_host_device; | |
12 | -extern BlockDriver bdrv_cow; | |
13 | -extern BlockDriver bdrv_qcow; | |
14 | -extern BlockDriver bdrv_vmdk; | |
15 | -extern BlockDriver bdrv_cloop; | |
16 | -extern BlockDriver bdrv_dmg; | |
17 | -extern BlockDriver bdrv_bochs; | |
18 | -extern BlockDriver bdrv_vpc; | |
19 | -extern BlockDriver bdrv_vvfat; | |
20 | -extern BlockDriver bdrv_qcow2; | |
21 | -extern BlockDriver bdrv_parallels; | |
22 | -extern BlockDriver bdrv_nbd; | |
23 | - | |
24 | 10 | typedef struct BlockDriverInfo { |
25 | 11 | /* in bytes, 0 if irrelevant */ |
26 | 12 | int cluster_size; |
... | ... | @@ -87,6 +73,8 @@ int64_t bdrv_getlength(BlockDriverState *bs); |
87 | 73 | void bdrv_get_geometry(BlockDriverState *bs, uint64_t *nb_sectors_ptr); |
88 | 74 | void bdrv_guess_geometry(BlockDriverState *bs, int *pcyls, int *pheads, int *psecs); |
89 | 75 | int bdrv_commit(BlockDriverState *bs); |
76 | +void bdrv_register(BlockDriver *bdrv); | |
77 | + | |
90 | 78 | /* async block I/O */ |
91 | 79 | typedef struct BlockDriverAIOCB BlockDriverAIOCB; |
92 | 80 | typedef void BlockDriverCompletionFunc(void *opaque, int ret); | ... | ... |
qemu-img.c
... | ... | @@ -542,11 +542,11 @@ static int img_convert(int argc, char **argv) |
542 | 542 | drv = bdrv_find_format(out_fmt); |
543 | 543 | if (!drv) |
544 | 544 | error("Unknown file format '%s'", out_fmt); |
545 | - if (flags & BLOCK_FLAG_COMPRESS && drv != &bdrv_qcow && drv != &bdrv_qcow2) | |
545 | + if (flags & BLOCK_FLAG_COMPRESS && strcmp(drv->format_name, "qcow") && strcmp(drv->format_name, "qcow2")) | |
546 | 546 | error("Compression not supported for this file format"); |
547 | - if (flags & BLOCK_FLAG_ENCRYPT && drv != &bdrv_qcow && drv != &bdrv_qcow2) | |
547 | + if (flags & BLOCK_FLAG_ENCRYPT && strcmp(drv->format_name, "qcow") && strcmp(drv->format_name, "qcow2")) | |
548 | 548 | error("Encryption not supported for this file format"); |
549 | - if (flags & BLOCK_FLAG_COMPAT6 && drv != &bdrv_vmdk) | |
549 | + if (flags & BLOCK_FLAG_COMPAT6 && strcmp(drv->format_name, "vmdk")) | |
550 | 550 | error("Alternative compatibility level not supported for this file format"); |
551 | 551 | if (flags & BLOCK_FLAG_ENCRYPT && flags & BLOCK_FLAG_COMPRESS) |
552 | 552 | error("Compression and encryption not supported at the same time"); |
... | ... | @@ -655,7 +655,7 @@ static int img_convert(int argc, char **argv) |
655 | 655 | if (n > bs_offset + bs_sectors - sector_num) |
656 | 656 | n = bs_offset + bs_sectors - sector_num; |
657 | 657 | |
658 | - if (drv != &bdrv_host_device) { | |
658 | + if (strcmp(drv->format_name, "host_device")) { | |
659 | 659 | if (!bdrv_is_allocated(bs[bs_i], sector_num - bs_offset, |
660 | 660 | n, &n1)) { |
661 | 661 | sector_num += n1; |
... | ... | @@ -682,7 +682,7 @@ static int img_convert(int argc, char **argv) |
682 | 682 | If the output is to a host device, we also write out |
683 | 683 | sectors that are entirely 0, since whatever data was |
684 | 684 | already there is garbage, not 0s. */ |
685 | - if (drv == &bdrv_host_device || out_baseimg || | |
685 | + if (strcmp(drv->format_name, "host_device") == 0 || out_baseimg || | |
686 | 686 | is_allocated_sectors(buf1, n, &n1)) { |
687 | 687 | if (bdrv_write(out_bs, sector_num, buf1, n1) < 0) |
688 | 688 | error("error while writing"); | ... | ... |