From: Nathan Cutler Date: Sat, 21 Jan 2017 13:54:52 +0000 (+0100) Subject: os/filestore: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE X-Git-Tag: v0.94.10~1^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=5485b49da39b9f07a4216ff26f8ec9e04590ddf8;p=ceph.git 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) --- diff --git a/src/os/FileStore.cc b/src/os/FileStore.cc index 61bad358ff16..e0afbd057952 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