]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: In rebuild_page_aligned for the last ptr is page aligned, no need call rebuild().
authorMa Jianpeng <jianpeng.ma@intel.com>
Fri, 12 Sep 2014 03:21:58 +0000 (11:21 +0800)
committerMa Jianpeng <jianpeng.ma@intel.com>
Fri, 12 Sep 2014 14:14:49 +0000 (22:14 +0800)
This only happen for the last ptr. Because rebuild() don't change the len
of ptr, so if last ptr isn't page-size aligned but is page aligned, the
rebuild() don't change anything.

Signed-off-by: Ma Jianpeng <jianpeng.ma@intel.com>
src/common/buffer.cc

index 7617c2f530b8b37b42d33314ab33a5fb3689f9d8..b1417591bff5c27d2cd3138245060ebff1660261 100644 (file)
@@ -1133,8 +1133,10 @@ void buffer::list::rebuild_page_aligned()
             (!p->is_page_aligned() ||
              !p->is_n_page_sized() ||
              (offset & ~CEPH_PAGE_MASK)));
-    ptr nb(buffer::create_page_aligned(unaligned._len));
-    unaligned.rebuild(nb);
+    if (!(unaligned.is_contiguous() && unaligned._buffers.front().is_page_aligned())) {
+      ptr nb(buffer::create_page_aligned(unaligned._len));
+      unaligned.rebuild(nb);
+    }
     _buffers.insert(p, unaligned._buffers.front());
   }
 }