]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
os/bluestore: fix races on SharedBlob::coll in ~SharedBlob. 23065/head
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 10 Jul 2018 23:14:54 +0000 (01:14 +0200)
committerPrashant D <pdhange@redhat.com>
Mon, 16 Jul 2018 00:10:00 +0000 (20:10 -0400)
commit1f3dea4e6aa97e956e6fbd977e40f47c66d62ca2
tree6834e5deef9d96364dd5b5fdf117fd72ec69f0d1
parent6720f47157bf50c5a7b0d6c5ab3a3babecef39f6
os/bluestore: fix races on SharedBlob::coll in ~SharedBlob.

Example scenario:
  ```
  A: BlueStore::Collection::split_cache(src, dest)
  A: std::lock(src->cache->lock, dest->cache->lock)

  B: SharedBlob::~SharedBlob
  B: waits coll->cache->lock // coll == src

  A: sb->coll := dest
  A: unlocks both src and dest's cache mutexes

  C: // any locked operation on dest's cache
  C: acquires dest->cache->lock
  C: begins the op

  B: // with the src's cache mutex acquired
  B: BufferSpace::_clear(coll->cache) // coll == dest
  B: // oops, B operates on cache already locked by C
  ```

Fixes: http://tracker.ceph.com/issues/24859
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
(cherry picked from commit d1b16749c7d32eead6e326c492ef9edf0d03a2b8)
src/os/bluestore/BlueStore.cc