diff options
author | Samuel Just <sam.just@inktank.com> | 2013-03-29 12:14:22 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-03-29 12:14:25 -0700 |
commit | e6eace2334d04fc9292c96a843304d1748b5bbe7 (patch) | |
tree | 887985d300e5820ca05e75b86c8141e6bfa2219f | |
parent | 8cb13a195c592fd2f17889e77d717c1864f97dca (diff) | |
parent | 1507443271fda933032ef0877aff1890d4fd5b63 (diff) | |
download | ceph-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.h | 1 | ||||
-rw-r--r-- | src/osd/ClassHandler.cc | 7 | ||||
-rw-r--r-- | src/osd/OSD.cc | 10 |
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; } |