]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
objecter: make getxattrs set rval on decode error
authorSage Weil <sage@newdream.net>
Wed, 18 Jan 2012 05:32:11 +0000 (21:32 -0800)
committerSage Weil <sage@newdream.net>
Wed, 18 Jan 2012 05:32:11 +0000 (21:32 -0800)
Signed-off-by: Sage Weil <sage@newdream.net>
src/osdc/Objecter.h

index 8f4f0b38b9f97d9936ebdc87d124a99b83a45828..0814b58cecfe1cdb489ff8856c42314ab4c9e78a 100644 (file)
@@ -269,7 +269,9 @@ struct ObjectOperation {
   struct C_ObjectOperation_getxattrs : public Context {
     bufferlist bl;
     std::map<std::string,bufferlist> *pattrs;
-    C_ObjectOperation_getxattrs(std::map<std::string,bufferlist> *pa) : pattrs(pa) {}
+    int *prval;
+    C_ObjectOperation_getxattrs(std::map<std::string,bufferlist> *pa, int *pr)
+      : pattrs(pa), prval(pr) {}
     void finish(int r) {
       if (r >= 0) {
        bufferlist::iterator p = bl.begin();
@@ -278,17 +280,17 @@ struct ObjectOperation {
            ::decode(*pattrs, p);
        }
        catch (buffer::error& e) {
-         r = -EIO;
+         if (prval)
+           *prval = -EIO;
        }
       }        
     }
   };
   void getxattrs(std::map<std::string,bufferlist> *pattrs, int *prval) {
-    bufferlist bl;
-    add_xattr(CEPH_OSD_OP_GETXATTRS, 0, bl);
-    if (pattrs) {
+    add_op(CEPH_OSD_OP_GETXATTRS);
+    if (pattrs || prval) {
       unsigned p = ops.size() - 1;
-      C_ObjectOperation_getxattrs *h = new C_ObjectOperation_getxattrs(pattrs);
+      C_ObjectOperation_getxattrs *h = new C_ObjectOperation_getxattrs(pattrs, prval);
       out_handler[p] = h;
       out_bl[p] = &h->bl;
       out_rval[p] = prval;