]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/filestore: disable splice since it can't pass store_test 11113/head
authorHaomai Wang <haomai@xsky.com>
Sat, 17 Sep 2016 12:57:08 +0000 (20:57 +0800)
committerHaomai Wang <haomai@xsky.com>
Wed, 21 Sep 2016 03:28:34 +0000 (11:28 +0800)
Signed-off-by: Haomai Wang <haomai@xsky.com>
src/common/config_opts.h
src/os/filestore/GenericFileStoreBackend.cc
src/os/filestore/GenericFileStoreBackend.h

index 584dad4f310f6034da5525de0e547f86eb4065b8..c6230dd934cc1c89f8549e69ef51fdf71080ecad 100644 (file)
@@ -1104,6 +1104,7 @@ OPTION(filestore_fsync_flushes_journal_data, OPT_BOOL, false)
 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)
index d4c2a52ea5ed10c00f0e07e67f6c5c9ad23b67f8..ba179b9d6d1c4d8793d7b3565250e438b37632d8 100644 (file)
@@ -58,10 +58,11 @@ GenericFileStoreBackend::GenericFileStoreBackend(FileStore *fs):
   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()
 {
@@ -165,6 +166,9 @@ 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;
@@ -174,7 +178,7 @@ int GenericFileStoreBackend::detect_features()
       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;
index e2c4ec810daf5e83d53cd1f130aa86986084c0da..74b8360419d6a1344e7322a1109067c7478a156c 100644 (file)
@@ -23,6 +23,7 @@ class GenericFileStoreBackend : public FileStoreBackend {
 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;
@@ -50,7 +51,7 @@ public:
     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);