[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

[Libguestfs] [PATCH v2 0/4] file: Zero for block devices and older file systems



This is the third version to support efficient zero for block devices
on older kernels (e.g. RHEL 7.5), and file systems that do not support
yet FALLOC_FS_ZERO_RANGE (e.g. NFS 4.2).

Changes since v2:
- Revert file_can_trim change, since it is too late to change the value
  after negotiation. Changing the capability dinamically may be useful
  internally, but it should be done via other means.
- Do not depend on FALLOC_FL_* when including <linux/fs.h>.
- Add common/includes/isaligned.h for is_aligned helper, implemented
  in a more efficient way with bitwise math.
- If getting sector size fail, fall back to safe guess instead of
  hard failure.
- More efficient alignment check using bitwise math.
- For BLKZEROOUT, treat ENOTTY as EOPNOTSUPP. Theoretically possible
  with a mix of new headers and old or strangely configured kernel.
- Use default multi line comment style.
- Fix few typos in comments and commit message

Issues to explore later:
- Eric suggested to use the new FALLOC_FL_NO_HIDE_STALE. Requires
  benchmarking with a system supporting this flag.
- Eric suggested to use tri-state for can_* flags. I don't see a need at
  this point.
- Eric suggested to add can_zero. I'm not sure about the semantics of
  this, and it has the same issue of can_trim, reporting dynamic value.

v2 was here:
https://www.redhat.com/archives/libguestfs/2018-August/msg00025.html

Changes since v1:
- Split to smaller patches
- Skip linux only includes on other systems
- Skip code using BLKZEROOUT if the macro is not defined
- Try BLKZEROOUT only if the offset and count are aligned to device
  sector size.
- initialize h->can_* properly. Before they were uninitialized if
  FALLOC_FL_* macros were not defined.
- Use new h->can_punch_hole in file_can_trim, so now we report the
  actual capability once we detected it.
- Use h->can_punch_hole in file_trim, so we try only once if the
  operation is not supported.

v1 was here:
https://www.redhat.com/archives/libguestfs/2018-July/msg00084.html

Nir Soffer (4):
  file: Avoid unsupported fallocate() calls
  file: Support zero without ZERO_RANGE
  common: Add isaligned helper module
  file: Zero for block devices on old kernels

 common/include/isaligned.h |  50 ++++++++++
 plugins/file/Makefile.am   |   3 +-
 plugins/file/file.c        | 182 +++++++++++++++++++++++++++++--------
 3 files changed, 196 insertions(+), 39 deletions(-)
 create mode 100644 common/include/isaligned.h

-- 
2.17.1


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]