Whamcloud - gitweb
LU-8010 mdt: fix orphan layout_lock cases for restore
[fs/lustre-release.git] / lustre / mdt / mdt_hsm_cdt_agent.c
index 895feb7..c97be71 100644 (file)
@@ -406,6 +406,33 @@ int mdt_hsm_agent_send(struct mdt_thread_info *mti,
                                              hai->hai_cookie, rc);
                                        GOTO(out_buf, rc);
                                }
+
+                               /* if restore and record status updated, give
+                                * back granted layout lock */
+                               if (hai->hai_action == HSMA_RESTORE) {
+                                       struct cdt_restore_handle *crh = NULL;
+                                       struct mdt_object *obj = 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);
+                                       obj = mdt_object_find(mti->mti_env,
+                                                             mti->mti_mdt,
+                                                             &hai->hai_fid);
+                                       if (!IS_ERR(obj) && crh != NULL)
+                                               mdt_object_unlock(mti, obj,
+                                                                 &crh->crh_lh,
+                                                                 1);
+                                       if (crh != NULL)
+                                               OBD_SLAB_FREE_PTR(crh,
+                                                       mdt_hsm_cdt_kmem);
+                                       if (!IS_ERR(obj))
+                                               mdt_object_put(mti->mti_env,
+                                                              obj);
+                               }
                        }
                }
        }