+ if (rc && hal->hal_archive_id == 0) {
+ uint notrmcount = 0;
+ int rc2 = 0;
+
+ /* special case of remove requests with no archive_id specified,
+ * and no agent registered to serve all archives, then create a
+ * set of new requests, each to be sent to each registered
+ * archives.
+ * Todo so, find all HSMA_REMOVE entries, and then :
+ * _ set completed status as SUCCESS (or FAIL?)
+ * _ create a new LLOG record for each archive_id
+ * presently being served by any CT
+ */
+ hai = hai_first(hal);
+ for (i = 0; i < hal->hal_count; i++,
+ hai = hai_next(hai)) {
+ struct hsm_record_update update;
+
+ /* only removes are concerned */
+ if (hai->hai_action != HSMA_REMOVE) {
+ /* count if other actions than HSMA_REMOVE,
+ * to return original error/rc */
+ notrmcount++;
+ continue;
+ }
+
+ /* send remove request to all registered archive_ids */
+ rc2 = mdt_hsm_send_action_to_each_archive(mti, hai);
+ if (rc2)
+ break;
+
+ /* only update original request as SUCCEED if it has
+ * been successfully broadcasted to all available
+ * archive_ids
+ * XXX: this should only cause duplicates to be sent,
+ * unless a method to record already successfully
+ * reached archive_ids is implemented */
+
+ update.cookie = hai->hai_cookie;
+ update.status = ARS_SUCCEED;
+ rc2 = mdt_agent_record_update(mti->mti_env, mdt,
+ &update, 1);
+ if (rc2) {
+ CERROR("%s: mdt_agent_record_update() "
+ "failed, cannot update "
+ "status to %s for cookie "
+ "%#llx: rc = %d\n",
+ mdt_obd_name(mdt),
+ agent_req_status2name(ARS_SUCCEED),
+ hai->hai_cookie, rc2);
+ break;
+ }
+ }
+ /* only remove requests with archive_id=0 */
+ if (notrmcount == 0)
+ RETURN(rc2);
+
+ }
+