From: optimistyzy Date: Mon, 23 Jan 2017 02:53:32 +0000 (+0800) Subject: NVMEDevice.cc: cleanup the logic in data_buf_next_sge X-Git-Tag: v12.0.0~116^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F13056%2Fhead;p=ceph.git NVMEDevice.cc: cleanup the logic in data_buf_next_sge Signed-off-by: optimistyzy --- diff --git a/src/os/bluestore/NVMEDevice.cc b/src/os/bluestore/NVMEDevice.cc index 3e0f9443480e..3f21b27055c4 100644 --- a/src/os/bluestore/NVMEDevice.cc +++ b/src/os/bluestore/NVMEDevice.cc @@ -302,6 +302,8 @@ static void data_buf_reset_sgl(void *cb_arg, uint32_t sgl_offset) static int data_buf_next_sge(void *cb_arg, void **address, uint32_t *length) { + uint32_t size; + void *addr; Task *t = static_cast(cb_arg); if (t->io_request.cur_seg_idx >= t->io_request.nseg) { *length = 0; @@ -309,27 +311,25 @@ static int data_buf_next_sge(void *cb_arg, void **address, uint32_t *length) return 0; } - void *addr = t->io_request.extra_segs ? t->io_request.extra_segs[t->io_request.cur_seg_idx] : t->io_request.inline_segs[t->io_request.cur_seg_idx]; + addr = t->io_request.extra_segs ? t->io_request.extra_segs[t->io_request.cur_seg_idx] : t->io_request.inline_segs[t->io_request.cur_seg_idx]; - if (t->io_request.cur_seg_left) { - *length = t->io_request.cur_seg_left; - *address = (void *)((uint64_t)addr + data_buffer_size - t->io_request.cur_seg_left); - if (t->io_request.cur_seg_idx == t->io_request.nseg - 1) { + size = data_buffer_size; + if (t->io_request.cur_seg_idx == t->io_request.nseg - 1) { uint64_t tail = t->len % data_buffer_size; if (tail) { - *address = (void *)((uint64_t)addr + tail - t->io_request.cur_seg_left); + size = (uint32_t) tail; } - } + } + + if (t->io_request.cur_seg_left) { + *address = (void *)((uint64_t)addr + size - t->io_request.cur_seg_left); + *length = t->io_request.cur_seg_left; t->io_request.cur_seg_left = 0; } else { *address = addr; - *length = data_buffer_size; - if (t->io_request.cur_seg_idx == t->io_request.nseg - 1) { - uint64_t tail = t->len % data_buffer_size; - if (tail) - *length = tail; - } + *length = size; } + t->io_request.cur_seg_idx++; return 0; }