From 5485b49da39b9f07a4216ff26f8ec9e04590ddf8 Mon Sep 17 00:00:00 2001 From: Nathan Cutler Date: Sat, 21 Jan 2017 14:54:52 +0100 Subject: [PATCH] os/filestore: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE Signed-off-by: xinxin shu (cherry picked from commit 7bd95b595fddb8a4e618a2c7df1ba04eccf0829d) Conflicts: src/os/FileStore.cc (in master, this file is in a different location) --- src/os/FileStore.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 61bad358ff162..e0afbd0579520 100644 --- a/src/os/FileStore.cc +++ b/src/os/FileStore.cc @@ -3076,6 +3076,7 @@ int FileStore::_zero(coll_t cid, const ghobject_t& oid, uint64_t offset, size_t #ifdef CEPH_HAVE_FALLOCATE # if !defined(DARWIN) && !defined(__FreeBSD__) +# ifdef FALLOC_FL_KEEP_SIZE // first try to punch a hole. FDRef fd; ret = lfn_open(cid, oid, false, &fd); @@ -3084,7 +3085,7 @@ int FileStore::_zero(coll_t cid, const ghobject_t& oid, uint64_t offset, size_t } // first try fallocate - ret = fallocate(**fd, FALLOC_FL_PUNCH_HOLE, offset, len); + ret = fallocate(**fd, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, offset, len); if (ret < 0) ret = -errno; lfn_close(fd); @@ -3098,6 +3099,7 @@ int FileStore::_zero(coll_t cid, const ghobject_t& oid, uint64_t offset, size_t goto out; // yay! if (ret != -EOPNOTSUPP) goto out; // some other error +# endif # endif #endif -- 2.39.5