On 12/21/2011 09:00 AM, Stefan Hajnoczi wrote: > The qemu-img.c:is_not_zero() function checks if a buffer contains all > zeroes. This function will come in handy for zero-detection in the > block layer, so clean it up and move it to cutils.c. > > Note that the function now returns true if the buffer is all zeroes. > This avoids the double-negatives (i.e. !is_not_zero()) that the old > function can cause in callers. Are there plans to improve the efficiency of buffer_is_zero to take advantage of metadata about sparseness? That is, there are cases where we can use metadata to prove a region of a file is sparse, without having to read every byte within that region. Now that this series is giving QED special metadata that marks a zero cluster, it is faster to query if that metadata exists denoting a zero cluster than it is to read the entire cluster and check for non-zero. Likewise, with regular files, the kernel provides lseek(SEEK_HOLE) (or the older, lower-level, ioctl(FS_IOC_FIEMAP)); which at least GNU coreutils is using for efficient sparse detection in source files. -- Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org