diff options
author | Samuel Just <sam.just@inktank.com> | 2013-06-17 13:29:57 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-06-17 13:29:57 -0700 |
commit | 5cf5f18e3d5521007d57c406fdd13ca626926f1c (patch) | |
tree | 6790529f5d7ce546f4f0403cdedfae76414550cb | |
parent | 5bf08cd5a03f3919893a55f493b2ef6d1a5a8efa (diff) | |
parent | d46e6c3bff985be14e7c66caf3b7819bd6daf6fa (diff) | |
download | ceph-5cf5f18e3d5521007d57c406fdd13ca626926f1c.tar.gz |
Merge branch 'next'
-rw-r--r-- | src/client/Client.cc | 2 | ||||
-rw-r--r-- | src/mon/OSDMonitor.cc | 27 | ||||
-rw-r--r-- | src/osd/OSD.cc | 4 | ||||
-rw-r--r-- | src/rgw/rgw_rados.cc | 8 |
4 files changed, 24 insertions, 17 deletions
diff --git a/src/client/Client.cc b/src/client/Client.cc index dec364567b6..dd27261be23 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -2413,7 +2413,7 @@ void Client::check_caps(Inode *in, bool is_delayed) } /* completed revocation? */ - if (revoking && (revoking && used) == 0) { + if (revoking && (revoking & used) == 0) { ldout(cct, 10) << "completed revocation of " << ccap_string(cap->implemented & ~cap->issued) << dendl; goto ack; } diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 7625a500448..cf0e45d9a65 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -766,32 +766,33 @@ public: bool OSDMonitor::preprocess_mark_me_down(MOSDMarkMeDown *m) { int requesting_down = m->get_target().name.num(); + int from = m->get_orig_source().num(); // check permissions if (check_source(m, m->fsid)) - goto didit; + goto reply; // first, verify the reporting host is valid - if (m->get_orig_source().is_osd()) { - int from = m->get_orig_source().num(); - if (!osdmap.exists(from) || - osdmap.get_addr(from) != m->get_orig_source_inst().addr || - osdmap.is_down(from)) { - dout(5) << "preprocess_mark_me_down from dead osd." - << from << ", ignoring" << dendl; - send_incremental(m, m->get_epoch()+1); - goto didit; - } + if (!m->get_orig_source().is_osd()) + goto reply; + + if (!osdmap.exists(from) || + osdmap.is_down(from) || + osdmap.get_addr(from) != m->get_target().addr) { + dout(5) << "preprocess_mark_me_down from dead osd." + << from << ", ignoring" << dendl; + send_incremental(m, m->get_epoch()+1); + goto reply; } // no down might be set if (!can_mark_down(requesting_down)) - goto didit; + goto reply; dout(10) << "MOSDMarkMeDown for: " << m->get_target() << dendl; return false; - didit: + reply: Context *c(new C_AckMarkedDown(this, m)); c->complete(0); return true; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index a18c4459719..9f4ccd3b637 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1768,10 +1768,12 @@ OSD::res_result OSD::_try_resurrect_pg( // find nearest ancestor DeletingStateRef df; pg_t cur(pgid); - while (cur.ps()) { + while (true) { df = service.deleting_pgs.lookup(pgid); if (df) break; + if (!cur.ps()) + break; cur = cur.get_parent(); } if (!df) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index b22217994ba..7a2f2d04d3b 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -735,14 +735,18 @@ int RGWRados::list_objects(rgw_bucket& bucket, int max, string& prefix, string& } result.clear(); - rgw_obj marker_obj; + rgw_obj marker_obj, prefix_obj; marker_obj.set_ns(ns); marker_obj.set_obj(marker); string cur_marker = marker_obj.object; + prefix_obj.set_ns(ns); + prefix_obj.set_obj(prefix); + string cur_prefix = prefix_obj.object; + do { std::map<string, RGWObjEnt> ent_map; - int r = cls_bucket_list(bucket, cur_marker, prefix, max - count, ent_map, + int r = cls_bucket_list(bucket, cur_marker, cur_prefix, max - count, ent_map, &truncated, &cur_marker); if (r < 0) return r; |