Whamcloud - gitweb
LU-10918 llite: Rule based auto PCC caching when create files
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_agent.c
index 250dee3..8db738d 100644 (file)
@@ -22,7 +22,7 @@
 /*
  * (C) Copyright 2012 Commissariat a l'energie atomique et aux energies
  *
- * Copyright (c) 2016, Intel Corporation.
+ * Copyright (c) 2016, 2017, Intel Corporation.
  *     alternatives
  *
  */
@@ -140,6 +140,10 @@ out_free:
        if (ha != NULL)
                OBD_FREE_PTR(ha);
 out:
+       /* wake the coordinator to potentially schedule requests */
+       if (rc == -EEXIST || rc == 0)
+               mdt_hsm_cdt_event(cdt);
+
        return rc;
 }
 
@@ -192,9 +196,9 @@ int mdt_hsm_agent_register_mask(struct mdt_thread_info *mti,
 int mdt_hsm_agent_unregister(struct mdt_thread_info *mti,
                             const struct obd_uuid *uuid)
 {
-       struct coordinator *cdt = &mti->mti_mdt->mdt_coordinator;
-       struct hsm_agent *ha;
-       int rc;
+       struct coordinator      *cdt = &mti->mti_mdt->mdt_coordinator;
+       struct hsm_agent        *ha;
+       int                      rc;
        ENTRY;
 
        /* no coordinator started, so we cannot serve requests */
@@ -217,8 +221,7 @@ int mdt_hsm_agent_unregister(struct mdt_thread_info *mti,
                         ha->ha_archive_cnt * sizeof(*ha->ha_archive_id));
        OBD_FREE_PTR(ha);
 
-       rc = hsm_cancel_agent_requests(mti->mti_mdt, uuid);
-       GOTO(out, rc);
+       GOTO(out, rc = 0);
 out:
        CDEBUG(D_HSM, "agent %s unregistration: %d\n", obd_uuid2str(uuid), rc);
 
@@ -311,7 +314,6 @@ int mdt_hsm_find_best_agent(struct coordinator *cdt, __u32 archive,
 int mdt_hsm_send_action_to_each_archive(struct mdt_thread_info *mti,
                                    struct hsm_action_item *hai)
 {
-       __u64 compound_id;
        struct hsm_agent *ha;
        __u32 archive_mask = 0;
        struct coordinator *cdt = &mti->mti_mdt->mdt_coordinator;
@@ -329,13 +331,10 @@ int mdt_hsm_send_action_to_each_archive(struct mdt_thread_info *mti,
                                continue;
                        archive_mask |= (1 << ha->ha_archive_id[i]);
 
-                       /* XXX: instead of creating one request record per
-                        * new action, it could make sense to gather
-                        * all for the same archive_id as one compound
-                        * request/id, like in mdt_hsm_add_actions() ?? */
-                       compound_id = atomic_inc_return(&cdt->cdt_compound_id);
+                       /* XXX: it could make sense to gather all
+                        * actions for the same archive_id like in
+                        * mdt_hsm_add_actions() ?? */
                        rc = mdt_agent_record_add(mti->mti_env, mti->mti_mdt,
-                                                 compound_id,
                                                  ha->ha_archive_id[i], 0,
                                                  hai);
                        if (rc) {
@@ -362,7 +361,7 @@ int mdt_hsm_send_action_to_each_archive(struct mdt_thread_info *mti,
 }
 
 /**
- * send a compound request to the agent
+ * send a HAL to the agent
  * \param mti [IN] context
  * \param hal [IN] request (can be a kuc payload)
  * \param purge [IN] purge mode (no record)
@@ -512,7 +511,7 @@ int mdt_hsm_agent_send(struct mdt_thread_info *mti,
 
                        /* incompatible request, we abort the request */
                        /* next time coordinator will wake up, it will
-                        * make the same compound with valid only
+                        * make the same HAL with valid only
                         * records */
                        fail_request = true;
                        rc = mdt_agent_record_update(mti->mti_env, mdt,
@@ -529,29 +528,15 @@ int mdt_hsm_agent_send(struct mdt_thread_info *mti,
 
                        /* if restore and record status updated, give
                         * back granted layout lock */
-                       if (hai->hai_action == HSMA_RESTORE) {
-                               struct cdt_restore_handle *crh = NULL;
-
-                               mutex_lock(&cdt->cdt_restore_lock);
-                               crh = mdt_hsm_restore_hdl_find(cdt,
-                                                              &hai->hai_fid);
-                               if (crh != NULL)
-                                       list_del(&crh->crh_list);
-                               mutex_unlock(&cdt->cdt_restore_lock);
-                               if (crh != NULL) {
-                                       mdt_object_unlock(mti, NULL,
-                                                         &crh->crh_lh, 1);
-                                       OBD_SLAB_FREE_PTR(crh,
-                                                         mdt_hsm_cdt_kmem);
-                               }
-                       }
+                       if (hai->hai_action == HSMA_RESTORE)
+                               cdt_restore_handle_del(mti, cdt, &hai->hai_fid);
                }
        }
 
-       /* we found incompatible requests, so the compound cannot be send
+       /* we found incompatible requests, so the HAL cannot be sent
         * as is. Bad records have been invalidated in llog.
         * Valid one will be reschedule next time coordinator will wake up
-        * So no need the rebuild a full valid compound request now
+        * So no need the rebuild a full valid HAL now
         */
        if (fail_request)
                GOTO(out_buf, rc = 0);
@@ -625,25 +610,6 @@ out_buf:
 }
 
 /**
- * update status of a request
- * \param mti [IN]
- * \param pgs [IN] progress of the copy tool
- * \retval 0 success
- * \retval -ve failure
- */
-int mdt_hsm_coordinator_update(struct mdt_thread_info *mti,
-                              struct hsm_progress_kernel *pgs)
-{
-       int      rc;
-
-       ENTRY;
-       /* ask to coordinator to update request state and
-        * to record on disk the result */
-       rc = mdt_hsm_update_request_state(mti, pgs, 1);
-       RETURN(rc);
-}
-
-/**
  * seq_file method called to start access to /proc file
  */
 static void *mdt_hsm_agent_proc_start(struct seq_file *s, loff_t *off)