]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: Fix bufferlist::zero bug with special case
authorHaomai Wang <haomaiwang@gmail.com>
Thu, 9 Jul 2015 05:42:42 +0000 (13:42 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 28 Jul 2015 18:20:24 +0000 (20:20 +0200)
Fixes: #12252
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
(cherry picked from commit 43f583d160ccaf879eaf0f3020e77860cf8d1df0)

src/common/buffer.cc

index 35c5d3605c481d03aa6e5010212f5b4451c4592d..fc00f0b298229a6c7d94cd674c1a7ee2e32cdaa3 100644 (file)
@@ -1060,12 +1060,23 @@ static uint32_t simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZE
         it != _buffers.end();
         ++it) {
       if (p + it->length() > o) {
-       if (p >= o && p+it->length() <= o+l)
-         it->zero();                         // all
-       else if (p >= o) 
-         it->zero(0, o+l-p);                 // head
-       else
-         it->zero(o-p, it->length()-(o-p));  // tail
+        if (p >= o && p+it->length() <= o+l) {
+          // 'o'------------- l -----------|
+          //      'p'-- it->length() --|
+         it->zero();
+        } else if (p >= o) {
+          // 'o'------------- l -----------|
+          //    'p'------- it->length() -------|
+         it->zero(0, o+l-p);
+        } else if (p + it->length() <= o+l) {
+          //     'o'------------- l -----------|
+          // 'p'------- it->length() -------|
+         it->zero(o-p, it->length()-(o-p));
+        } else {
+          //       'o'----------- l -----------|
+          // 'p'---------- it->length() ----------|
+          it->zero(o-p, l);
+        }
       }
       p += it->length();
       if (o+l <= p)