]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: _do_write_zero: preserve onode size
authorSage Weil <sage@redhat.com>
Mon, 28 Mar 2016 19:36:38 +0000 (15:36 -0400)
committerSage Weil <sage@redhat.com>
Wed, 30 Mar 2016 15:23:15 +0000 (11:23 -0400)
Instead of handling this in each caller, make the helper
keep onode.size intact.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc

index 64d3a992dd57d635f4f335a51ebf69deea082633..cc300816be57bf2ddbbc3e6db0591c7f4830a004 100644 (file)
@@ -5723,7 +5723,11 @@ int BlueStore::_do_write_zero(
 {
   bufferlist zl;
   zl.append_zero(length);
-  return _do_write(txc, c, o, offset, length, zl, 0);
+  uint64_t old_size = o->onode.size;
+  int r = _do_write(txc, c, o, offset, length, zl, 0);
+  // we do not modify onode size
+  o->onode.size = old_size;
+  return r;
 }
 
 int BlueStore::_zero(TransContext *txc,
@@ -5956,7 +5960,6 @@ int BlueStore::_do_truncate(
         int r = _do_write_zero(txc, c, o, old_size, x_len);
         if (r < 0)
           return r;
-       o->onode.size = offset; // we (maybe) just wrote past eof; reset size
       } else {
        bluestore_wal_op_t *op = _get_wal_op(txc, o);
        op->op = bluestore_wal_op_t::OP_ZERO;