From 7bd95b595fddb8a4e618a2c7df1ba04eccf0829d Mon Sep 17 00:00:00 2001 From: xinxin shu Date: Wed, 24 Feb 2016 11:37:45 +0800 Subject: [PATCH] os/filestore: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE Signed-off-by: xinxin shu --- src/os/filestore/FileStore.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index 548b1d926f7..656a6e48474 100644 --- a/src/os/filestore/FileStore.cc +++ b/src/os/filestore/FileStore.cc @@ -3232,6 +3232,7 @@ int FileStore::_zero(const coll_t& cid, const ghobject_t& oid, uint64_t offset, #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); @@ -3240,7 +3241,7 @@ int FileStore::_zero(const coll_t& cid, const ghobject_t& oid, uint64_t offset, } // 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); @@ -3254,6 +3255,7 @@ int FileStore::_zero(const coll_t& cid, const ghobject_t& oid, uint64_t offset, goto out; // yay! if (ret != -EOPNOTSUPP) goto out; // some other error +# endif # endif #endif