]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
BlueStore: fix nid overwritten of write/zero
authorxie xingguo <xie.xingguo@zte.com.cn>
Tue, 19 Jan 2016 10:43:19 +0000 (18:43 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Tue, 19 Jan 2016 11:32:11 +0000 (19:32 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/BlueStore.cc

index 304a02ac936d9380526f5952f8f82794a18a8257..c1da65b47cbf81c34763a5b6181c0bb2a38ac10c 100644 (file)
@@ -5286,8 +5286,11 @@ int BlueStore::_write(TransContext *txc,
           << " " << offset << "~" << length
           << dendl;
   RWLock::WLocker l(c->lock);
-  OnodeRef o = c->get_onode(oid, true);
-  _assign_nid(txc, o);
+  OnodeRef o = c->get_onode(oid, false);
+  if (!o) {
+    o = c->get_onode(oid, true);
+    _assign_nid(txc, o);
+  }
   int r = _do_write(txc, c, o, offset, length, bl, fadvise_flags);
   txc->write_onode(o);
 
@@ -5323,9 +5326,13 @@ int BlueStore::_zero(TransContext *txc,
 
   RWLock::WLocker l(c->lock);
   EnodeRef enode;
-  OnodeRef o = c->get_onode(oid, true);
-  _dump_onode(o);
-  _assign_nid(txc, o);
+  OnodeRef o = c->get_onode(oid, false);
+  if (o) {
+    _dump_onode(o);
+  } else {
+    o = c->get_onode(oid, true); 
+    _assign_nid(txc, o);
+  } 
 
   // overlay
   _do_overlay_trim(txc, o, offset, length);