rc = fsa_cib_conn->cmds->modify(
rc = fsa_cib_conn->cmds->update(
do_update_resource(lrm_op_t* op){/*  <status>  <nodes_status id=uname>  <lrm>  <lrm_resources>  <lrm_resource id=>  </...>*/	crm_data_t *update, *iter;	crm_data_t *fragment;	int rc = cib_ok;	CRM_DEV_ASSERT(op != NULL);	if(crm_assert_failed) {		return;	}	update = create_xml_node(NULL, XML_CIB_TAG_STATE);	set_uuid(fsa_cluster_conn, update, XML_ATTR_UUID, fsa_our_uname);	crm_xml_add(update,  XML_ATTR_UNAME, fsa_our_uname);	iter = create_xml_node(update, XML_CIB_TAG_LRM);	iter = create_xml_node(iter,   XML_LRM_TAG_RESOURCES);	iter = create_xml_node(iter,   XML_LRM_TAG_RESOURCE);	crm_xml_add(iter, XML_ATTR_ID, op->rsc_id);	if(safe_str_eq(CRMD_ACTION_STOP, op->op_type)) {		lrm_rsc_t *rsc = fsa_lrm_conn->lrm_ops->get_rsc(			fsa_lrm_conn, op->rsc_id);		crm_xml_add(iter, XML_ATTR_TYPE, rsc->type);		crm_xml_add(iter, XML_AGENT_ATTR_CLASS, rsc->class);		crm_xml_add(iter, XML_AGENT_ATTR_PROVIDER,rsc->provider);				lrm_free_rsc(rsc);	}		build_operation_update(iter, op, __FUNCTION__, 0);	fragment = create_cib_fragment(update, XML_CIB_TAG_STATUS);	/* make it an asyncronous call and be done with it	 *	 * Best case:	 *   the resource state will be discovered during	 *   the next signup or election.	 *	 * Bad case:	 *   we are shutting down and there is no DC at the time,	 *   but then why were we shutting down then anyway?	 *   (probably because of an internal error)	 *	 * Worst case:	 *   we get shot for having resources "running" when the really weren't	 *	 * the alternative however means blocking here for too long, which	 * isnt acceptable	 */	rc = fsa_cib_conn->cmds->modify(		fsa_cib_conn, XML_CIB_TAG_STATUS, fragment, NULL,		cib_quorum_override);				if(rc > 0) {		/* the return code is a call number, not an error code */		crm_debug_3("Sent resource state update message: %d", rc);			} else {		crm_err("Resource state update failed: %s",			cib_error2string(rc));			CRM_DEV_ASSERT(rc == cib_ok);	}		free_xml(fragment);	free_xml(update);}