summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-03-29 12:14:22 -0700
committerSamuel Just <sam.just@inktank.com>2013-03-29 12:14:25 -0700
commite6eace2334d04fc9292c96a843304d1748b5bbe7 (patch)
tree887985d300e5820ca05e75b86c8141e6bfa2219f
parent8cb13a195c592fd2f17889e77d717c1864f97dca (diff)
parent1507443271fda933032ef0877aff1890d4fd5b63 (diff)
downloadceph-e6eace2334d04fc9292c96a843304d1748b5bbe7.tar.gz
Merge remote-tracking branch 'upstream/bobtail-4556' into bobtail
Reviewed-by: Samuel Just <sam.just@inktank.com>
-rw-r--r--src/messages/MOSDOp.h1
-rw-r--r--src/osd/ClassHandler.cc7
-rw-r--r--src/osd/OSD.cc10
3 files changed, 16 insertions, 2 deletions
diff --git a/src/messages/MOSDOp.h b/src/messages/MOSDOp.h
index 69d420e2609..0c6ac2c388d 100644
--- a/src/messages/MOSDOp.h
+++ b/src/messages/MOSDOp.h
@@ -54,7 +54,6 @@ private:
snapid_t snap_seq;
vector<snapid_t> snaps;
bool check_rmw(int flag) {
- assert(rmw_flags);
return rmw_flags & flag;
}
diff --git a/src/osd/ClassHandler.cc b/src/osd/ClassHandler.cc
index 5ff8e73309c..6675e9e4fc4 100644
--- a/src/osd/ClassHandler.cc
+++ b/src/osd/ClassHandler.cc
@@ -142,6 +142,11 @@ ClassHandler::ClassMethod *ClassHandler::ClassData::register_method(const char *
cls_method_call_t func)
{
/* no need for locking, called under the class_init mutex */
+ if (!flags) {
+ derr << "register_method " << name << "." << mname << " flags " << flags << " " << (void*)func
+ << " FAILED -- flags must be non-zero" << dendl;
+ return NULL;
+ }
dout(10) << "register_method " << name << "." << mname << " flags " << flags << " " << (void*)func << dendl;
ClassMethod& method = methods_map[mname];
method.func = func;
@@ -178,7 +183,7 @@ int ClassHandler::ClassData::get_method_flags(const char *mname)
Mutex::Locker l(handler->mutex);
ClassMethod *method = _get_method(mname);
if (!method)
- return 0;
+ return -ENOENT;
return method->flags;
}
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 70e1859d62a..29aae8ef110 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -6318,6 +6318,13 @@ int OSD::init_op_flags(MOSDOp *op)
return r;
}
int flags = cls->get_method_flags(mname.c_str());
+ if (flags < 0) {
+ if (flags == -ENOENT)
+ r = -EOPNOTSUPP;
+ else
+ r = flags;
+ return r;
+ }
is_read = flags & CLS_METHOD_RD;
is_write = flags & CLS_METHOD_WR;
@@ -6334,5 +6341,8 @@ int OSD::init_op_flags(MOSDOp *op)
}
}
+ if (op->rmw_flags == 0)
+ return -EINVAL;
+
return 0;
}