Merge remote-tracking branch 'gh/next'

This commit is contained in:
Sage Weil 2014-08-04 13:56:24 -07:00
commit 0b445e0f6f
5 changed files with 22 additions and 2 deletions

View File

@ -204,7 +204,9 @@ void SimpleMessenger::reaper_entry()
ldout(cct,10) << "reaper_entry start" << dendl;
lock.Lock();
while (!reaper_stop) {
reaper();
reaper(); // may drop and retake the lock
if (reaper_stop)
break;
reaper_cond.Wait(lock);
}
lock.Unlock();
@ -236,7 +238,14 @@ void SimpleMessenger::reaper()
p->unregister_pipe();
assert(pipes.count(p));
pipes.erase(p);
// drop msgr lock while joining thread; the delay through could be
// trying to fast dispatch, preventing it from joining without
// blocking and deadlocking.
lock.Unlock();
p->join();
lock.Lock();
if (p->sd >= 0)
::close(p->sd);
ldout(cct,10) << "reaper reaped pipe " << p << " " << p->get_peer_addr() << dendl;

View File

@ -1404,7 +1404,7 @@ int MemStore::_collection_move_rename(coll_t oldcid, const ghobject_t& oldoid,
r = 0;
out:
c->lock.put_write();
if (c != oc)
if (&(*c) != &(*oc))
oc->lock.put_write();
return r;
}

View File

@ -74,6 +74,10 @@ struct OpRequest : public TrackedOp {
void _dump(utime_t now, Formatter *f) const;
bool has_feature(uint64_t f) const {
return request->get_connection()->has_feature(f);
}
private:
Message *request; /// the logical request we are tracking
osd_reqid_t reqid;

View File

@ -1116,6 +1116,12 @@ void ReplicatedPG::do_request(
waiting_for_active.push_back(op);
return;
}
// verify client features
if ((pool.info.has_tiers() || pool.info.is_tier()) &&
!op->has_feature(CEPH_FEATURE_OSD_CACHEPOOL)) {
osd->reply_op_error(op, -EOPNOTSUPP);
return;
}
do_op(op); // do it now
break;

View File

@ -206,6 +206,7 @@ int main(int argc, const char **argv)
}
}
g_ceph_context->_log->flush();
if (action == "help") {
usage();
exit(0);