]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
os/bluestore: fix races on SharedBlob::coll in ~SharedBlob. 23064/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:12:12 +0000 (20:12 -0400)
commitff8833d0a0d97ae3ce249f10df40efc4195fabc2
tree64c98b1074a9c8f1ecd60031e64b628d1d296b45
parent720306e962c9b6bd534b8dcfb917f1e0c50fdb0a
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