OPTION(filestore_fiemap, OPT_BOOL, false) // (try to) use fiemap
OPTION(filestore_punch_hole, OPT_BOOL, false)
OPTION(filestore_seek_data_hole, OPT_BOOL, false) // (try to) use seek_data/hole
+OPTION(filestore_splice, OPT_BOOL, false)
OPTION(filestore_fadvise, OPT_BOOL, true)
//collect device partition information for management application to use
OPTION(filestore_collect_device_partition_information, OPT_BOOL, true)
FileStoreBackend(fs),
ioctl_fiemap(false),
seek_data_hole(false),
+ use_splice(false),
m_filestore_fiemap(g_conf->filestore_fiemap),
m_filestore_seek_data_hole(g_conf->filestore_seek_data_hole),
m_filestore_fsync_flushes_journal_data(g_conf->filestore_fsync_flushes_journal_data),
- m_filestore_splice(false) {}
+ m_filestore_splice(g_conf->filestore_splice) {}
int GenericFileStoreBackend::detect_features()
{
//splice detection
#ifdef CEPH_HAVE_SPLICE
if (!m_filestore_splice) {
+ dout(0) << __func__ << ": splice() is disabled via 'filestore splice' config option" << dendl;
+ use_splice = false;
+ } else {
int pipefd[2];
loff_t off_in = 0;
int r;
lseek(fd, 0, SEEK_SET);
r = splice(fd, &off_in, pipefd[1], NULL, 10, 0);
if (!(r < 0 && errno == EINVAL)) {
- m_filestore_splice = true;
+ use_splice = true;
dout(0) << "detect_features: splice is supported" << dendl;
} else
dout(0) << "detect_features: splice is NOT supported" << dendl;
private:
bool ioctl_fiemap;
bool seek_data_hole;
+ bool use_splice;
bool m_filestore_fiemap;
bool m_filestore_seek_data_hole;
bool m_filestore_fsync_flushes_journal_data;
return _copy_range(from, to, srcoff, len, dstoff);
}
virtual int set_alloc_hint(int fd, uint64_t hint) { return -EOPNOTSUPP; }
- virtual bool has_splice() const { return m_filestore_splice; }
+ virtual bool has_splice() const { return use_splice; }
private:
int _crc_load_or_init(int fd, SloppyCRCMap *cm);
int _crc_save(int fd, SloppyCRCMap *cm);