]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: Fix bufferlist::zero bug with special case 5365/head
authorHaomai Wang <haomaiwang@gmail.com>
Thu, 9 Jul 2015 05:42:42 +0000 (13:42 +0800)
committerLoic Dachary <ldachary@redhat.com>
Tue, 28 Jul 2015 12:39:10 +0000 (14:39 +0200)
Fixes: #12252
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
(cherry picked from commit 43f583d160ccaf879eaf0f3020e77860cf8d1df0)

src/common/buffer.cc

index 88656e836bd29fc8d51f94e6a30024e8bbf0e3d4..2a91ec34bf84d3958555a986a2f12cc6d2344c79 100644 (file)
@@ -1165,12 +1165,23 @@ static simple_spinlock_t buffer_debug_lock = SIMPLE_SPINLOCK_INITIALIZER;
         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)