[Libguestfs] [PATCH v4 4/4] file: Zero for block devices on old kernels
Eric Blake
eblake at redhat.com
Mon Aug 20 17:38:50 UTC 2018
On 08/19/2018 11:56 AM, Nir Soffer wrote:
> fallocate(FALLOC_FL_ZERO_RANGE) is supported for block devices with
> modern kernel, but when it is not, we fall back to manual zeroing.
>
> For block device, try also to use ioctl(BLKZEROOUT) if offset and count
> are aligned to block device sector size.
>
> @@ -119,9 +126,12 @@ file_config_complete (void)
> /* The per-connection handle. */
> struct handle {
> int fd;
> + bool is_block_device;
> + int sector_size;
> bool can_punch_hole;
> bool can_zero_range;
> bool can_fallocate;
> + bool can_zeroout;
I generally try to group members by size, to avoid holes that push
struct sizes beyond a cache line size. Thankfully, it looks like this
struct is now 16 bytes on both 32- and 64-bit architectures, whether or
not you sink 'is_block_device' so that all 5 bools are contiguous. If
we were worried about it, we could use ':1' for the bools to make the
struct occupy 12 bytes instead, but I doubt this code is in the hotspot
for it to make a difference. So I'm not changing it.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list