### New Features
* Memtable flush can be avoided during checkpoint creation if total log file size is smaller than a threshold specified by the user.
+### Bug Fixes
+* Remove calling fallocate with FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE flag to circumvent a kernel bug that changes file size after this call on XFS
+
## 5.2.0 (02/08/2017)
### Public API Change
* NewLRUCache() will determine number of shard bits automatically based on capacity, if the user doesn't pass one. This also impacts the default block cache when the user doesn't explict provide one.
// but it will be nice to log these errors.
int dummy __attribute__((unused));
dummy = ftruncate(fd_, filesize_);
-#if defined(ROCKSDB_FALLOCATE_PRESENT) && !defined(TRAVIS)
- // in some file systems, ftruncate only trims trailing space if the
- // new file size is smaller than the current size. Calling fallocate
- // with FALLOC_FL_PUNCH_HOLE flag to explicitly release these unused
- // blocks. FALLOC_FL_PUNCH_HOLE is supported on at least the following
- // filesystems:
- // XFS (since Linux 2.6.38)
- // ext4 (since Linux 3.0)
- // Btrfs (since Linux 3.7)
- // tmpfs (since Linux 3.5)
- // We ignore error since failure of this operation does not affect
- // correctness.
- // TRAVIS - this code does not work on TRAVIS filesystems.
- // the FALLOC_FL_KEEP_SIZE option is expected to not change the size
- // of the file, but it does. Simple strace report will show that.
- // While we work with Travis-CI team to figure out if this is a
- // quirk of Docker/AUFS, we will comment this out.
- IOSTATS_TIMER_GUARD(allocate_nanos);
- if (allow_fallocate_) {
- fallocate(fd_, FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE, filesize_,
- block_size * last_allocated_block - filesize_);
- }
-#endif
}
if (close(fd_) < 0) {