os/filestore: FALLOC_FL_PUNCH_HOLE must be used with FALLOC_FL_KEEP_SIZE

Signed-off-by: xinxin shu <xinxin.shu@intel.com>
This commit is contained in:
xinxin shu 2016-02-24 11:37:45 +08:00
parent 4bb184f1e3
commit 7bd95b595f

View File

@ -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