Hello, I write a ceph client using rados lib to execute a funcution upon the object. CLIENT SIDE CODE =============== int main() { ... strcpy(in, "from client"); err = rados_exec(io, objname, "devctl", "devctl_op", in, strlen(in), out, 128); if (err < 0) { fprintf(stderr, "rados_exec() failed: %s\n", strerror(-err)); rados_ioctx_destroy(io); rados_shutdown(cluster); exit(1); } out[err] = '\0'; printf("err = %d, exec result out = %s, in = %s\n", err, out, in); ... } CLASS CODE IN OSD SIDE ====================== static int devctl_op(cls_method_context_t hctx, bufferlist *in, bufferlist *out) { ... i = cls_cxx_stat(hctx, &size, NULL); if (i < 0) return i; bufferlist read_bl, write_bl; i = cls_cxx_read(hctx, 0, size, &read_bl); if (i < 0) { CLS_ERR("cls_cxx_read failed"); return i; } // we generate our reply out->append("Hello, "); if (in->length() == 0) out->append("world"); else out->append(*in); out->append("!"); #if 1 const char *tstr = "from devctl func"; write_bl.append(tstr); i = cls_cxx_write(hctx, size, write_bl.length(), &write_bl); if (i < 0) { CLS_ERR("cls_cxx_write failed: %s", strerror(-i)); return i; } #endif // this return value will be returned back to the librados caller return 0; } I found that if I update the content of the object when calling cls_cxx_write(), then the 'out' will be null in the client side, otherwise the out will be "Hello, from client!". Does anybody here can give some hints? -- Den _______________________________________________ ceph-users mailing list ceph-users@xxxxxxxxxxxxxx http://lists.ceph.com/listinfo.cgi/ceph-users-ceph.com