-----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJTLLeZAAoJEH6/3V0X7TFtOTMP/Ru4Y8raF/yKFIKeqCu98l51
 CHYEQYHhLviDy6l0JJTZHVjkzYyfD1gf015ggIXGgQ45yp0dY2+Rv5kNJlRn9t+c
 HUyNO2Qaxe+9wmApkIIoNMrkmAcp2FVSNN0Vuri+LmlQkGJdRFwH1qfBnmqEMI22
 /4Zfca68LTFe2RzhE6sF1kqaHJAXx6YpApSyDJ5tzYNIk6JQ5sX4aObIBzPYYSZZ
 +VYbiQgV/UutiO0j2+V4Cg+Bm0tu0d4aoQam5rIYVDdzm17phzox4Y2r4XlTNe21
 5hz1MFGLbvi+gcwOiChQbOerGWa9MWhSstcAKuUmf8la1NHgG13rYVjbWnpiGNrH
 nOblSypZarCLkypOg8Ogv5wS8Q5d4j8MrU2lqciJTmMOVMtIonGg33qpS6WSelAa
 MetDgWqMCqnSeVj0kILE7rSRSZ0hnU4YRPu6mhHaahttdleb4jxQALT8YESp9Yep
 yH5BZHrfaUbqnSek/Pe+rNk+D4fsXMzsRI4YrqpLl/EWTmbtFWS5FXxCzfwQThA9
 SuhZtOCiKMykt/fyIkW9CxQyanGM1uZdRV5driu+2YbAtHQO7zT4sBV8RicEdX3M
 3HHDuuSWzjEN3ASkXUuJYncnXDLxYSiKvXCpTZ5+n5c/MtK7isQnmdt3PJRN5pKJ
 aQp3CL1bTrOue/yhNd/o
 =3q4f
 -----END PGP SIGNATURE-----

Merge tag 'v0.78'

v0.78
This commit is contained in:
Sage Weil 2014-03-22 10:24:25 -07:00
commit 361b251e15
4 changed files with 34 additions and 12 deletions

View File

@ -8,7 +8,7 @@ AC_PREREQ(2.59)
# VERSION define is not used by the code. It gets a version string
# from 'git describe'; see src/ceph_ver.[ch]
AC_INIT([ceph], [0.77], [ceph-devel@vger.kernel.org])
AC_INIT([ceph], [0.78], [ceph-devel@vger.kernel.org])
# Create release string. Used with VERSION for RPMs.
RPM_RELEASE=0

6
debian/changelog vendored
View File

@ -1,3 +1,9 @@
ceph (0.78-1) stable; urgency=low
* New upsream release
-- Alfredo Deza <alfredo.deza@inktank.com> Fri, 21 Mar 2014 22:05:12 +0000
ceph (0.77-1) stable; urgency=low
* New upstream release

View File

@ -1421,6 +1421,10 @@ void ReplicatedPG::do_op(OpRequestRef op)
this);
ctx->op_t = pgbackend->get_transaction();
ctx->obc = obc;
if (!obc->obs.exists)
ctx->snapset_obc = get_object_context(obc->obs.oi.soid.get_snapdir(), false);
if (m->get_flags() & CEPH_OSD_FLAG_SKIPRWLOCKS) {
dout(20) << __func__ << ": skipping rw locks" << dendl;
} else if (m->get_flags() & CEPH_OSD_FLAG_FLUSH) {
@ -4981,15 +4985,8 @@ void ReplicatedPG::finish_ctx(OpContext *ctx, int log_op_type)
if (ctx->new_obs.exists) {
if (!ctx->obs->exists) {
// if we logically recreated the head, remove old _snapdir object
hobject_t snapoid(soid.oid, soid.get_key(), CEPH_SNAPDIR, soid.hash,
info.pgid.pool(), soid.get_namespace());
ctx->snapset_obc = get_object_context(snapoid, false);
if (ctx->snapset_obc && ctx->snapset_obc->obs.exists) {
bool got = ctx->snapset_obc->get_write(ctx->op);
assert(got);
ctx->release_snapset_obc = true;
hobject_t snapoid = soid.get_snapdir();
ctx->log.push_back(pg_log_entry_t(pg_log_entry_t::DELETE, snapoid,
ctx->at_version,
ctx->snapset_obc->obs.oi.version,

View File

@ -643,11 +643,30 @@ protected:
*/
bool get_rw_locks(OpContext *ctx) {
if (ctx->op->may_write() || ctx->op->may_cache()) {
if (ctx->obc->get_write(ctx->op)) {
ctx->lock_to_release = OpContext::W_LOCK;
/* If snapset_obc, !obc->obs->exists and we need to
* get a write lock on the snapdir as well as the
* head. Fortunately, we are guarranteed to get a
* write lock on the head if !obc->obs->exists
*/
if (ctx->snapset_obc) {
assert(!ctx->obc->obs.exists);
if (ctx->snapset_obc->get_write(ctx->op)) {
ctx->release_snapset_obc = true;
ctx->lock_to_release = OpContext::W_LOCK;
} else {
return false;
}
// we are creating it and have the only ref
bool got = ctx->obc->get_write(ctx->op);
assert(got);
return true;
} else {
return false;
if (ctx->obc->get_write(ctx->op)) {
ctx->lock_to_release = OpContext::W_LOCK;
return true;
} else {
return false;
}
}
} else {
assert(ctx->op->may_read());