> > >> Filters would be implemented as BlockDrivers, i.e. you could > > >> implement > > >> .bdrv_co_write() in a filter to intercept all writes to an image. > > > > > > I am quite unsure if that make things easier. > > > > At least it would make for a much cleaner design compared to putting > > code for every feature you can think of into bdrv_co_do_readv/writev(). > > So if you want to add a filter, you simply modify bs->drv to point to the > filter?
Seems the BlockDriver struct does not contain any 'state' (I guess that is by design), so where do you store filter related dynamic data?