]>
git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commit
os/bluestore: fix a bug causing unexpected Onode's unpinned state.
There could be a race for Onodes put() and get() methods:
put()(pinned, nref=3)
int n = --nref; (nref = 2)
if (n == 2) {
..
std::lock_guard l(ocs->lock);
...
pinned = pinned && nref > 2; (= false)
... get()
if (r) { ++nref; (=3)
n = --nref; (nref = 2) return;
}
...
return
As a result nref = 2, pinned = false which is wrong
Signed-off-by: Igor Fedotov <ifedotov@suse.com>