]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
buffer: Fix bufferlist::zero bug with special case 5174/head
authorHaomai Wang <haomaiwang@gmail.com>
Thu, 9 Jul 2015 05:42:42 +0000 (13:42 +0800)
committerHaomai Wang <haomaiwang@gmail.com>
Thu, 9 Jul 2015 05:45:26 +0000 (13:45 +0800)
Fixes: #12252
Signed-off-by: Haomai Wang <haomaiwang@gmail.com>
src/common/buffer.cc

index 5124b8c50f421a2c6c96bb476bb4a9cd1cbd9763..86dc6d8d0ddc9b925bdaa47dfcdf363442b5a645 100644 (file)
@@ -1166,12 +1166,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)