On Fri, 06/24 11:37, Daniel P. Berrange wrote: > On Fri, Jun 24, 2016 at 11:04:43AM +0100, Stefan Hajnoczi wrote: > > On Wed, Jun 22, 2016 at 05:35:54PM -0400, Colin Lord wrote: > > > > > > > > @@ -447,8 +466,15 @@ int get_tmp_filename(char *filename, int size) > > > static BlockDriver *find_hdev_driver(const char *filename) > > > { > > > int score_max = 0, score; > > > + size_t i; > > > BlockDriver *drv = NULL, *d; > > > > > > + for (i = 0; i < ARRAY_SIZE(block_driver_modules); ++i) { > > > + if (block_driver_modules[i].has_probe_device) { > > > + block_module_load_one(block_driver_modules[i].library_name); > > > + } > > > + } > > > > This patch series needs to solve probing so that we don't end up loading > > all block drivers. Fam's suggestion for a built-in probe.c sounds good > > to me. > > Do we really care if probing loads all drivers ? Last time we discussed > this I thought we decided that because probing almost always leads to > security vulnerabilities, no one should use it by default and so we > don't really need to worry about optimizing it.
Does this mean we can drop "has_probe" and "has_probe_device" from the generated header and load all modules for probe? If so, I'd like to again stress my preference for a "simplified" code "parser": All of current block_init() calls except quorum can be converted with this: #define BLOCK_DRIVER_EXPORT(fmt_name, prot_name, drv) \ static void bdrv_ ## fmt_name ## _ ## prot_name(void) \ { \ if (strlen(#fmt_name)) { \ drv->format_name = #fmt_name; \ } \ if (strlen(#prot_name)) { \ drv->protocol_name = #prot_name; \ } \ bdrv_register(&(drv)); \ } \ block_init(bdrv_ ## fmt_name ## prot_name) curl.c: BLOCK_DRIVER_EXPORT(http, http, bdrv_http); BLOCK_DRIVER_EXPORT(https, https, bdrv_https); BLOCK_DRIVER_EXPORT(ftp, ftp, bdrv_ftp); ... iscsi.c (on top of patch 1): BLOCK_DRIVER_EXPORT(iscsi, iscsi, bdrv_iscsi); vmdk.c: BLOCK_DRIVER_EXPORT(vmdk,, bdrv_vmdk); Then the python generator greps for BLOCK_DRIVER_EXPORT, instead of 'static BlockDriver', which is much more reliable (in the sense of whitespace subtlety, field name changing, etc). Fam