summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-03-27 13:08:38 -0700
committerSage Weil <sage@inktank.com>2013-03-27 13:22:06 -0700
commit4bdd37495cedb1cf30a5311548492fe3f5db6e92 (patch)
tree6e8602adbdb734c9b0e9b95a59fef26d2cb71d58
parentf28800f8b65e90a3b96429f07197236e6c9bf1a2 (diff)
downloadceph-4bdd37495cedb1cf30a5311548492fe3f5db6e92.tar.gz
osd: fix detection of non-existent class method
Signed-off-by: Sage Weil <sage@inktank.com> (cherry picked from commit 50b831e3641c21cd5b145271688189e199f432d1)
-rw-r--r--src/osd/ClassHandler.cc2
-rw-r--r--src/osd/OSD.cc7
2 files changed, 8 insertions, 1 deletions
diff --git a/src/osd/ClassHandler.cc b/src/osd/ClassHandler.cc
index 5ff8e73309c..f6a5acfbe81 100644
--- a/src/osd/ClassHandler.cc
+++ b/src/osd/ClassHandler.cc
@@ -178,7 +178,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 07fef776f80..e173f5e7517 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -6317,6 +6317,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;