From: xie xingguo Date: Tue, 19 Jan 2016 10:17:17 +0000 (+0800) Subject: kstore: fix nid overwritten of write/zero X-Git-Tag: v10.0.4~178^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8065b8ab34f06d8d5d8e7fbdc1d8a846d88b30df;p=ceph.git kstore: fix nid overwritten of write/zero Fixes: #14407 Signed-off-by: xie xingguo --- diff --git a/src/os/kstore/KStore.cc b/src/os/kstore/KStore.cc index c9fbf4a5204c..7d7960238db6 100644 --- a/src/os/kstore/KStore.cc +++ b/src/os/kstore/KStore.cc @@ -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) {