]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/fs/FS: optimize aio::pwritev which make caller provide length. 9062/head
authorJianpeng Ma <jianpeng.ma@intel.com>
Wed, 11 May 2016 15:40:36 +0000 (23:40 +0800)
committerJianpeng Ma <jianpeng.ma@intel.com>
Wed, 11 May 2016 15:40:36 +0000 (23:40 +0800)
Signed-off-by: Jianpeng Ma <jianpeng.ma@intel.com>
src/os/bluestore/KernelDevice.cc
src/os/fs/FS.h

index e488b5ef61a04dc31e7ded4874fbcb548f07e46a..b27f9fa3080360d518ada0d776be33cf72968021 100644 (file)
@@ -381,7 +381,7 @@ int KernelDevice::aio_write(
   bl.hexdump(*_dout);
   *_dout << dendl;
 
-  _aio_log_start(ioc, off, bl.length());
+  _aio_log_start(ioc, off, len);
 
 #ifdef HAVE_LIBAIO
   if (aio && dio && !buffered) {
@@ -403,7 +403,7 @@ int KernelDevice::aio_write(
                 << " " << aio.iov[i].iov_len << dendl;
       }
       aio.bl.claim_append(bl);
-      aio.pwritev(off);
+      aio.pwritev(off, len);
     }
     dout(5) << __func__ << " " << off << "~" << len << " aio " << &aio << dendl;
   } else
@@ -421,7 +421,7 @@ int KernelDevice::aio_write(
     bl.prepare_iov(&iov);
     int r = ::pwritev(buffered ? fd_buffered : fd_direct,
                      &iov[0], iov.size(), off);
-    _aio_log_finish(ioc, off, bl.length());
+    _aio_log_finish(ioc, off, len);
 
     if (r < 0) {
       r = -errno;
index 63cd05f0b6b7f6a1a3f30dc3440571ffd8238d18..5936d627dc2286621dcc471b0ecaea96798890a9 100644 (file)
@@ -65,12 +65,10 @@ public:
       memset(&iocb, 0, sizeof(iocb));
     }
 
-    void pwritev(uint64_t _offset) {
+    void pwritev(uint64_t _offset, uint64_t len) {
       offset = _offset;
+      length = len;
       io_prep_pwritev(&iocb, fd, &iov[0], iov.size(), offset);
-      length = 0;
-      for (unsigned u=0; u<iov.size(); ++u)
-       length += iov[u].iov_len;
     }
     void pread(uint64_t _offset, uint64_t len) {
       offset = _offset;