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

index c9fbf4a5204c530f4aa0ff21e96440959b88081b..7d7960238db698c459af560f135bac9a72b7dd78 100644 (file)
@@ -2986,8 +2986,11 @@ int KStore::_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, o, offset, length, bl, fadvise_flags);
   txc->write_onode(o);
 
@@ -3008,8 +3011,11 @@ int KStore::_zero(TransContext *txc,
   int r = 0;
 
   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);
+  }
 
   uint64_t stripe_size = o->onode.stripe_size;
   if (stripe_size) {