From: xinxin shu Date: Wed, 24 Feb 2016 03:37:45 +0000 (+0800) Subject: os/filestore: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE X-Git-Tag: v10.1.0~192^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7bd95b595fddb8a4e618a2c7df1ba04eccf0829d;p=ceph.git os/filestore: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE Signed-off-by: xinxin shu --- diff --git a/src/os/filestore/FileStore.cc b/src/os/filestore/FileStore.cc index 548b1d926f75..656a6e484746 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