Whamcloud - gitweb
LU-14423 osd: recognize holes in osd_is_mapped()
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_agent.c
index 92c0eb6..1767e11 100644 (file)
@@ -135,11 +135,14 @@ int mdt_hsm_agent_register(struct mdt_thread_info *mti,
 out_free:
 
        if (ha != NULL && ha->ha_archive_id != NULL)
-               OBD_FREE(ha->ha_archive_id,
-                        ha->ha_archive_cnt * sizeof(*ha->ha_archive_id));
+               OBD_FREE_PTR_ARRAY(ha->ha_archive_id, ha->ha_archive_cnt);
        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;
 }
 
@@ -161,13 +164,13 @@ int mdt_hsm_agent_register_mask(struct mdt_thread_info *mti,
        nr_archives = hweight32(archive_mask);
 
        if (nr_archives != 0) {
-               OBD_ALLOC(archive_id, nr_archives * sizeof(*archive_id));
+               OBD_ALLOC_PTR_ARRAY(archive_id, nr_archives);
                if (!archive_id)
                        RETURN(-ENOMEM);
 
                nr_archives = 0;
                for (i = 0; i < sizeof(archive_mask) * 8; i++) {
-                       if ((1 << i) & archive_mask) {
+                       if (BIT(i) & archive_mask) {
                                archive_id[nr_archives] = i + 1;
                                nr_archives++;
                        }
@@ -177,7 +180,7 @@ int mdt_hsm_agent_register_mask(struct mdt_thread_info *mti,
        rc = mdt_hsm_agent_register(mti, uuid, nr_archives, archive_id);
 
        if (archive_id != NULL)
-               OBD_FREE(archive_id, nr_archives * sizeof(*archive_id));
+               OBD_FREE_PTR_ARRAY(archive_id, nr_archives);
 
        RETURN(rc);
 }
@@ -213,8 +216,7 @@ int mdt_hsm_agent_unregister(struct mdt_thread_info *mti,
                GOTO(out, rc = -ENOENT);
 
        if (ha->ha_archive_cnt != 0)
-               OBD_FREE(ha->ha_archive_id,
-                        ha->ha_archive_cnt * sizeof(*ha->ha_archive_id));
+               OBD_FREE_PTR_ARRAY(ha->ha_archive_id, ha->ha_archive_cnt);
        OBD_FREE_PTR(ha);
 
        GOTO(out, rc = 0);
@@ -310,7 +312,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;
@@ -324,17 +325,14 @@ int mdt_hsm_send_action_to_each_archive(struct mdt_thread_info *mti,
        list_for_each_entry(ha, &cdt->cdt_agents, ha_list) {
                for (i = 0; (i < ha->ha_archive_cnt); i++) {
                        /* only send once for each archive_id */
-                       if ((1 << ha->ha_archive_id[i]) & archive_mask)
+                       if (BIT(ha->ha_archive_id[i]) & archive_mask)
                                continue;
-                       archive_mask |= (1 << ha->ha_archive_id[i]);
+                       archive_mask |= BIT(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) {
@@ -361,7 +359,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)
@@ -511,7 +509,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,
@@ -533,10 +531,10 @@ int mdt_hsm_agent_send(struct mdt_thread_info *mti,
                }
        }
 
-       /* 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);
@@ -560,7 +558,7 @@ int mdt_hsm_agent_send(struct mdt_thread_info *mti,
         *  the ldlm_callback_handler. Note this sends a request RPC
         * from a server (MDT) to a client (MDC), backwards of normal comms.
         */
-       exp = cfs_hash_lookup(mdt2obd_dev(mdt)->obd_uuid_hash, &uuid);
+       exp = obd_uuid_lookup(mdt2obd_dev(mdt), &uuid);
        if (exp == NULL || exp->exp_disconnected) {
                if (exp != NULL)
                        class_export_put(exp);
@@ -610,28 +608,9 @@ 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
+ * seq_file method called to start access to debugfs file
  */
-static void *mdt_hsm_agent_proc_start(struct seq_file *s, loff_t *off)
+static void *mdt_hsm_agent_debugfs_start(struct seq_file *s, loff_t *off)
 {
        struct mdt_device       *mdt = s->private;
        struct coordinator      *cdt = &mdt->mdt_coordinator;
@@ -661,7 +640,7 @@ static void *mdt_hsm_agent_proc_start(struct seq_file *s, loff_t *off)
  * seq_file method called to get next item
  * just returns NULL at eof
  */
-static void *mdt_hsm_agent_proc_next(struct seq_file *s, void *v, loff_t *p)
+static void *mdt_hsm_agent_debugfs_next(struct seq_file *s, void *v, loff_t *p)
 {
        struct mdt_device       *mdt = s->private;
        struct coordinator      *cdt = &mdt->mdt_coordinator;
@@ -682,7 +661,7 @@ static void *mdt_hsm_agent_proc_next(struct seq_file *s, void *v, loff_t *p)
 
 /**
  */
-static int mdt_hsm_agent_proc_show(struct seq_file *s, void *v)
+static int mdt_hsm_agent_debugfs_show(struct seq_file *s, void *v)
 {
        struct list_head        *pos = v;
        struct hsm_agent        *ha;
@@ -710,9 +689,9 @@ static int mdt_hsm_agent_proc_show(struct seq_file *s, void *v)
 }
 
 /**
- * seq_file method called to stop access to /proc file
+ * seq_file method called to stop access to debugfs file
  */
-static void mdt_hsm_agent_proc_stop(struct seq_file *s, void *v)
+static void mdt_hsm_agent_debugfs_stop(struct seq_file *s, void *v)
 {
        struct mdt_device       *mdt = s->private;
        struct coordinator      *cdt = &mdt->mdt_coordinator;
@@ -720,30 +699,30 @@ static void mdt_hsm_agent_proc_stop(struct seq_file *s, void *v)
        up_read(&cdt->cdt_agent_lock);
 }
 
-/* hsm agent list proc functions */
-static const struct seq_operations mdt_hsm_agent_proc_ops = {
-       .start  = mdt_hsm_agent_proc_start,
-       .next   = mdt_hsm_agent_proc_next,
-       .show   = mdt_hsm_agent_proc_show,
-       .stop   = mdt_hsm_agent_proc_stop,
+/* hsm agent list debugfs functions */
+static const struct seq_operations mdt_hsm_agent_debugfs_ops = {
+       .start  = mdt_hsm_agent_debugfs_start,
+       .next   = mdt_hsm_agent_debugfs_next,
+       .show   = mdt_hsm_agent_debugfs_show,
+       .stop   = mdt_hsm_agent_debugfs_stop,
 };
 
 /**
- * public function called at open of /proc file to get
+ * public function called at open of debugfs file to get
  * list of agents
  */
-static int lprocfs_open_hsm_agent(struct inode *inode, struct file *file)
+static int ldebugfs_open_hsm_agent(struct inode *inode, struct file *file)
 {
        struct seq_file *s;
        int              rc;
        ENTRY;
 
-       rc = seq_open(file, &mdt_hsm_agent_proc_ops);
+       rc = seq_open(file, &mdt_hsm_agent_debugfs_ops);
        if (rc)
                RETURN(rc);
 
        s = file->private_data;
-       s->private = PDE_DATA(inode);
+       s->private = inode->i_private;
 
        RETURN(rc);
 }
@@ -751,8 +730,8 @@ static int lprocfs_open_hsm_agent(struct inode *inode, struct file *file)
 /* methods to access hsm agent list */
 const struct file_operations mdt_hsm_agent_fops = {
        .owner          = THIS_MODULE,
-       .open           = lprocfs_open_hsm_agent,
+       .open           = ldebugfs_open_hsm_agent,
        .read           = seq_read,
        .llseek         = seq_lseek,
-       .release        = lprocfs_seq_release,
+       .release        = seq_release,
 };