+ }
+ if (repbody != NULL)
+ repbody->mbo_eadatasize = 0;
+
+ /* Only check unlinked and archived if RAoLU and upon last close */
+ if (!cdt->cdt_remove_archive_on_last_unlink ||
+ atomic_read(&mo->mot_open_count) != 0)
+ RETURN(0);
+
+ /* mdt_attr_get_complex will clear ma_valid, so check here first */
+ if ((ma->ma_valid & MA_INODE) && (ma->ma_attr.la_nlink != 0))
+ RETURN(0);
+
+ if ((ma->ma_valid & MA_HSM) && (!(ma->ma_hsm.mh_flags & HS_EXISTS)))
+ RETURN(0);
+
+ need |= (MA_INODE | MA_HSM) & ~ma->ma_valid;
+ if (need != 0) {
+ /* ma->ma_valid is missing either MA_INODE, MA_HSM, or both,
+ * try setting them */
+ ma->ma_need |= need;
+ rc = mdt_attr_get_complex(info, mo, ma);
+ if (rc) {
+ CERROR("%s: unable to fetch missing attributes of"
+ DFID": rc=%d\n", mdt_obd_name(info->mti_mdt),
+ PFID(mdt_object_fid(mo)), rc);
+ RETURN(0);
+ }
+
+ if (need & MA_INODE) {
+ if (ma->ma_valid & MA_INODE) {
+ if (ma->ma_attr.la_nlink != 0)
+ RETURN(0);
+ } else {
+ RETURN(0);
+ }
+ }
+
+ if (need & MA_HSM) {
+ if (ma->ma_valid & MA_HSM) {
+ if (!(ma->ma_hsm.mh_flags & HS_EXISTS))
+ RETURN(0);
+ } else {
+ RETURN(0);
+ }
+ }
+ }
+
+ /* RAoLU policy is active, last close on file has occured,
+ * file is unlinked, file is archived, so create remove request
+ * for copytool!
+ * If CDT is not running, requests will be logged for later. */
+ if (ma->ma_hsm.mh_arch_id != 0)
+ archive_id = ma->ma_hsm.mh_arch_id;
+ else
+ archive_id = cdt->cdt_default_archive_id;
+
+ hai.hai_fid = *mdt_object_fid(mo);
+
+ rc = mdt_agent_record_add(info->mti_env, info->mti_mdt, archive_id, 0,
+ &hai);
+ if (rc)
+ CERROR("%s: unable to add HSM remove request for "DFID
+ ": rc=%d\n", mdt_obd_name(info->mti_mdt),
+ PFID(mdt_object_fid(mo)), rc);