]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librados: take lock in rollback
authorSage Weil <sage@newdream.net>
Sat, 31 Dec 2011 01:04:47 +0000 (17:04 -0800)
committerSage Weil <sage@newdream.net>
Sat, 31 Dec 2011 01:04:47 +0000 (17:04 -0800)
We're poking through the osdmap; need to hold the lock here.

Signed-off-by: Sage Weil <sage@newdream.net>
src/librados.cc

index 51eb5b3f810e19e7b48ad6edde69facc62440095..8e29fd20b055fa9854e8f30fa935519d01d267a8 100644 (file)
@@ -1228,6 +1228,7 @@ int librados::RadosClient::rollback(rados_ioctx_t io_, const object_t& oid,
   IoCtxImpl* io = (IoCtxImpl *) io_;
   string sName(snapName);
 
+  lock.Lock();
   snapid_t snap;
   const map<int64_t, pg_pool_t>& pools = objecter->osdmap->get_pools();
   const pg_pool_t& pg_pool = pools.find(io->poolid)->second;
@@ -1240,7 +1241,11 @@ int librados::RadosClient::rollback(rados_ioctx_t io_, const object_t& oid,
       break;
     }
   }
-  if (p == pg_pool.snaps.end()) return -ENOENT;
+  if (p == pg_pool.snaps.end()) {
+    lock.Unlock();
+    return -ENOENT;
+  }
+  lock.Unlock();
 
   return selfmanaged_snap_rollback_object(io_, oid, io->snapc, snap);
 }