Whamcloud - gitweb
LU-10383 hsm: consolidate CDT restore handle handling
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_client.c
index 9d0335c..c8f4d1e 100644 (file)
@@ -385,50 +385,14 @@ static int mdt_hsm_register_hal(struct mdt_thread_info *mti,
 
                /* if restore, take an exclusive lock on layout */
                if (hai->hai_action == HSMA_RESTORE) {
-                       struct cdt_restore_handle *crh;
-
                        /* in V1 only whole file is supported. */
                        if (hai->hai_extent.offset != 0)
                                GOTO(out, rc = -EPROTO);
 
-                       OBD_SLAB_ALLOC_PTR(crh, mdt_hsm_cdt_kmem);
-                       if (crh == NULL)
-                               GOTO(out, rc = -ENOMEM);
-
-                       crh->crh_fid = hai->hai_fid;
-                       /* in V1 only whole file is supported. However the
-                        * restore may be due to truncate. */
-                       crh->crh_extent.start = 0;
-                       crh->crh_extent.end = hai->hai_extent.length;
-
-                       mdt_lock_reg_init(&crh->crh_lh, LCK_EX);
-                       obj = mdt_object_find_lock(mti, &crh->crh_fid,
-                                                  &crh->crh_lh,
-                                                  MDS_INODELOCK_LAYOUT);
-                       if (IS_ERR(obj)) {
-                               rc = PTR_ERR(obj);
-                               CERROR("%s: cannot take layout lock for "
-                                      DFID": rc = %d\n", mdt_obd_name(mdt),
-                                      PFID(&crh->crh_fid), rc);
-                               OBD_SLAB_FREE_PTR(crh, mdt_hsm_cdt_kmem);
+                       rc = cdt_restore_handle_add(mti, cdt, &hai->hai_fid,
+                                                   &hai->hai_extent);
+                       if (rc < 0)
                                GOTO(out, rc);
-                       }
-
-                       /* we choose to not keep a keep a reference
-                        * on the object during the restore time which can be
-                        * very long */
-                       mdt_object_put(mti->mti_env, obj);
-
-                       mutex_lock(&cdt->cdt_restore_lock);
-                       if (unlikely((cdt->cdt_state == CDT_STOPPED) ||
-                                    (cdt->cdt_state == CDT_STOPPING))) {
-                               mutex_unlock(&cdt->cdt_restore_lock);
-                               mdt_object_unlock(mti, NULL, &crh->crh_lh, 1);
-                               OBD_SLAB_FREE_PTR(crh, mdt_hsm_cdt_kmem);
-                               GOTO(out, rc = -EAGAIN);
-                       }
-                       list_add_tail(&crh->crh_list, &cdt->cdt_restore_hdl);
-                       mutex_unlock(&cdt->cdt_restore_lock);
                }
 record:
                /*
@@ -515,24 +479,15 @@ out:
 bool mdt_hsm_restore_is_running(struct mdt_thread_info *mti,
                                const struct lu_fid *fid)
 {
-       struct mdt_device               *mdt = mti->mti_mdt;
-       struct coordinator              *cdt = &mdt->mdt_coordinator;
-       struct cdt_restore_handle       *crh;
-       bool                             rc = false;
+       struct coordinator *cdt = &mti->mti_mdt->mdt_coordinator;
+       bool is_running;
        ENTRY;
 
-       if (!fid_is_sane(fid))
-               RETURN(rc);
-
        mutex_lock(&cdt->cdt_restore_lock);
-       list_for_each_entry(crh, &cdt->cdt_restore_hdl, crh_list) {
-               if (lu_fid_eq(&crh->crh_fid, fid)) {
-                       rc = true;
-                       break;
-               }
-       }
+       is_running = (cdt_restore_handle_find(cdt, fid) != NULL);
        mutex_unlock(&cdt->cdt_restore_lock);
-       RETURN(rc);
+
+       RETURN(is_running);
 }
 
 /**