Am 01.05.2015 um 16:23 hat Stefan Hajnoczi geschrieben: > On Thu, Apr 30, 2015 at 01:11:40PM +0300, Alberto Garcia wrote: > > Qcow2Cache *qcow2_cache_create(BlockDriverState *bs, int num_tables) > > { > > BDRVQcowState *s = bs->opaque; > > Qcow2Cache *c; > > - int i; > > > > c = g_new0(Qcow2Cache, 1); > > c->size = num_tables; > > + c->table_size = s->cluster_size; > > This assumes c->table_size meets bs' memory alignment requirements. The > following would be safer: > > c->table_size = QEMU_ALIGN_UP(c->table_size, bdrv_opt_mem_align(bs->file));
You can't just access more than one cluster. You might be caching data and later write it back when it's stale. If you can't do I/O in chunks as small as the cluster size (which is rather unlikely), relying on bdrv_pwrite(), like Berto's patch does, is the correct solution. Kevin
pgpj5Wnce450q.pgp
Description: PGP signature