Whamcloud - gitweb
LU-3343 mdt: HSM coordinator main thread
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_client.c
index af2ddf4..b47acea 100644 (file)
@@ -326,7 +326,7 @@ int mdt_hsm_add_actions(struct mdt_thread_info *mti,
                        goto record;
 
                /* get HSM attributes */
-               obj = mdt_hsm_get_md_hsm(mti, &hai->hai_fid, &mh, NULL);
+               obj = mdt_hsm_get_md_hsm(mti, &hai->hai_fid, &mh);
                if (IS_ERR(obj)) {
                        /* in case of archive remove, Lustre file
                         * is not mandatory */
@@ -334,6 +334,7 @@ int mdt_hsm_add_actions(struct mdt_thread_info *mti,
                                goto record;
                        GOTO(out, rc = PTR_ERR(obj));
                }
+               mdt_object_put(mti->mti_env, obj);
 
                /* Check if an action is needed, compare request
                 * and HSM flags status */
@@ -364,7 +365,7 @@ int mdt_hsm_add_actions(struct mdt_thread_info *mti,
                        struct cdt_restore_handle       *crh;
                        struct mdt_object               *child;
 
-                       OBD_ALLOC_PTR(crh);
+                       OBD_SLAB_ALLOC_PTR(crh, mdt_hsm_cdt_kmem);
                        if (crh == NULL)
                                GOTO(out, rc = -ENOMEM);
 
@@ -386,7 +387,7 @@ int mdt_hsm_add_actions(struct mdt_thread_info *mti,
                                CERROR("%s: cannot take layout lock for "
                                       DFID": rc = %d\n", mdt_obd_name(mdt),
                                       PFID(&crh->crh_fid), rc);
-                               OBD_FREE_PTR(crh);
+                               OBD_SLAB_FREE_PTR(crh, mdt_hsm_cdt_kmem);
                                GOTO(out, rc);
                        }
                        /* we choose to not keep a keep a reference
@@ -394,10 +395,10 @@ int mdt_hsm_add_actions(struct mdt_thread_info *mti,
                         * very long */
                        mdt_object_put(mti->mti_env, child);
 
-                       down(&cdt->cdt_restore_lock);
+                       mutex_lock(&cdt->cdt_restore_lock);
                        cfs_list_add_tail(&crh->crh_list,
                                          &cdt->cdt_restore_hdl);
-                       up(&cdt->cdt_restore_lock);
+                       mutex_unlock(&cdt->cdt_restore_lock);
                }
 record:
                /* record request */
@@ -411,7 +412,8 @@ record:
                rc = -ENODATA;
        else
                rc = 0;
-       EXIT;
+
+       GOTO(out, rc);
 out:
        /* if work has been added, wake up coordinator */
        if ((rc == 0) || (rc == -ENODATA))
@@ -444,7 +446,7 @@ int mdt_hsm_get_running(struct mdt_thread_info *mti,
                        RETURN(-EINVAL);
 
                car = mdt_cdt_find_request(cdt, 0, &hai->hai_fid);
-               if (IS_ERR(car)) {
+               if (car == NULL) {
                        hai->hai_cookie = 0;
                        hai->hai_action = HSMA_NONE;
                } else {
@@ -477,7 +479,7 @@ bool mdt_hsm_restore_is_running(struct mdt_thread_info *mti,
        if (!fid_is_sane(fid))
                RETURN(rc);
 
-       down(&cdt->cdt_restore_lock);
+       mutex_lock(&cdt->cdt_restore_lock);
        cfs_list_for_each_safe(pos, tmp, &cdt->cdt_restore_hdl) {
                crh = cfs_list_entry(pos, struct cdt_restore_handle, crh_list);
                if (lu_fid_eq(&crh->crh_fid, fid)) {
@@ -485,7 +487,7 @@ bool mdt_hsm_restore_is_running(struct mdt_thread_info *mti,
                        break;
                }
        }
-       up(&cdt->cdt_restore_lock);
+       mutex_unlock(&cdt->cdt_restore_lock);
        RETURN(rc);
 }
 
@@ -533,7 +535,7 @@ int mdt_hsm_get_actions(struct mdt_thread_info *mti,
                struct cdt_agent_req *car;
 
                car = mdt_cdt_find_request(cdt, hai->hai_cookie, NULL);
-               if (IS_ERR(car)) {
+               if (car == NULL) {
                        hai->hai_cookie = 0;
                } else {
                        __u64 data_moved;