From: Jianpeng Ma Date: Wed, 11 May 2016 15:40:36 +0000 (+0800) Subject: os/fs/FS: optimize aio::pwritev which make caller provide length. X-Git-Tag: v11.1.0~155^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=98ed4d409f4d0503d11740a4b1935ef7a72ddf51;p=ceph.git os/fs/FS: optimize aio::pwritev which make caller provide length. Signed-off-by: Jianpeng Ma --- diff --git a/src/os/bluestore/KernelDevice.cc b/src/os/bluestore/KernelDevice.cc index e488b5ef61a0..b27f9fa30803 100644 --- a/src/os/bluestore/KernelDevice.cc +++ b/src/os/bluestore/KernelDevice.cc @@ -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; diff --git a/src/os/fs/FS.h b/src/os/fs/FS.h index 63cd05f0b6b7..5936d627dc22 100644 --- a/src/os/fs/FS.h +++ b/src/os/fs/FS.h @@ -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