As has been requested, this series adds new overlap check functions to the qcow2 code. My local branch is called "qcow2-improved-overlap-v1", but I am not so sure whether it is actually an improvement; that is left for you to decide, dear reviewers.
See patch 1 for an explanation of why this series exists and what it does. Patch 1 is basically the core of this series, the rest just employs the functions introduced there. I have yet to do benchmarks to test whether this series actually improves things, but judging from the iotests it at least does not slow things down (which it did at one time during development, particularily test 044 is good for testing this, so this actually has some significance to it). In a later patch, we may want to change the meaning of the "constant" overlap checking option to mean the same as "cached", which is everything except for inactive L2 tables. This series does make checking for overlaps with inactive L2 tables at runtime just as cheap as everything else (constant time plus caching), but using these checks means qemu has to read all the snapshot L1 tables when opening a qcow2 file. This does not take long, of course, but it does result in a bit of overhead so I did not want to enable it by default. I think just enabling all overlap checks by default after this series should be fine and useful, though. Max Reitz (12): qcow2: Add new overlap check functions qcow2: Pull up overlap check option evaluation qcow2: Create metadata list qcow2/overlaps: Protect image header qcow2/overlaps: Protect refcount table qcow2/overlaps: Protect refcount blocks qcow2/overlaps: Protect active L1 table qcow2/overlaps: Protect active L2 tables qcow2/overlaps: Protect snapshot table qcow2/overlaps: Protect inactive L1 tables qcow2/overlaps: Protect inactive L2 tables qcow2: Use new metadata overlap check function block/Makefile.objs | 3 +- block/qcow2-cluster.c | 13 ++ block/qcow2-overlap.c | 404 +++++++++++++++++++++++++++++++++++++++++++++++++ block/qcow2-refcount.c | 202 ++++++++++--------------- block/qcow2-snapshot.c | 105 ++++++++++++- block/qcow2.c | 130 ++++++++++------ block/qcow2.h | 13 ++ 7 files changed, 698 insertions(+), 172 deletions(-) create mode 100644 block/qcow2-overlap.c -- 1.9.3