summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-06-17 13:29:57 -0700
committerSamuel Just <sam.just@inktank.com>2013-06-17 13:29:57 -0700
commit5cf5f18e3d5521007d57c406fdd13ca626926f1c (patch)
tree6790529f5d7ce546f4f0403cdedfae76414550cb
parent5bf08cd5a03f3919893a55f493b2ef6d1a5a8efa (diff)
parentd46e6c3bff985be14e7c66caf3b7819bd6daf6fa (diff)
downloadceph-5cf5f18e3d5521007d57c406fdd13ca626926f1c.tar.gz
Merge branch 'next'
-rw-r--r--src/client/Client.cc2
-rw-r--r--src/mon/OSDMonitor.cc27
-rw-r--r--src/osd/OSD.cc4
-rw-r--r--src/rgw/rgw_rados.cc8
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;