Whamcloud - gitweb
LU-7988 hsm: run HSM coordinator once per second at most
[fs/lustre-release.git] / lustre / mdt / mdt_reint.c
index 72a2497..a252b5f 100644 (file)
@@ -431,7 +431,7 @@ static int mdt_lock_slaves(struct mdt_thread_info *mti, struct mdt_object *obj,
  * 2 - child. Version of child by FID. Must be ENOENT. It is mostly sanity
  * check.
  */
-static int mdt_md_create(struct mdt_thread_info *info)
+static int mdt_create(struct mdt_thread_info *info)
 {
        struct mdt_device       *mdt = info->mti_mdt;
        struct mdt_object       *parent;
@@ -596,7 +596,7 @@ static int mdt_attr_set(struct mdt_thread_info *info, struct mdt_object *mo,
 {
        struct mdt_lock_handle  *lh;
        int do_vbr = ma->ma_attr.la_valid &
-                       (LA_MODE|LA_UID|LA_GID|LA_PROJID|LA_FLAGS);
+                       (LA_MODE | LA_UID | LA_GID | LA_PROJID | LA_FLAGS);
        __u64 lockpart = MDS_INODELOCK_UPDATE;
        struct ldlm_enqueue_info *einfo = &info->mti_einfo;
        struct lu_fid *s0_fid = &info->mti_tmp_fid1;
@@ -692,20 +692,12 @@ int mdt_add_dirty_flag(struct mdt_thread_info *info, struct mdt_object *mo,
        /* If an up2date copy exists in the backend, add dirty flag */
        if ((ma->ma_valid & MA_HSM) && (ma->ma_hsm.mh_flags & HS_EXISTS)
            && !(ma->ma_hsm.mh_flags & (HS_DIRTY|HS_RELEASED))) {
-               struct mdt_lock_handle  *lh = &info->mti_lh[MDT_LH_CHILD];
-
                ma->ma_hsm.mh_flags |= HS_DIRTY;
 
-               mdt_lock_reg_init(lh, LCK_PW);
-               rc = mdt_object_lock(info, mo, lh, MDS_INODELOCK_XATTR);
-               if (rc != 0)
-                       RETURN(rc);
-
                rc = mdt_hsm_attr_set(info, mo, &ma->ma_hsm);
                if (rc)
                        CERROR("file attribute change error for "DFID": %d\n",
                                PFID(mdt_object_fid(mo)), rc);
-               mdt_object_unlock(info, mo, lh, rc);
        }
 
        RETURN(rc);
@@ -854,7 +846,7 @@ static int mdt_reint_create(struct mdt_thread_info *info,
                RETURN(err_serious(-EOPNOTSUPP));
        }
 
-       rc = mdt_md_create(info);
+       rc = mdt_create(info);
        RETURN(rc);
 }
 
@@ -1015,7 +1007,7 @@ relock:
                rc = mdt_remote_object_lock(info, mp, mdt_object_fid(mc),
                                            &child_lh->mlh_rreg_lh,
                                            child_lh->mlh_rreg_mode,
-                                           MDS_INODELOCK_LOOKUP, false, false);
+                                           MDS_INODELOCK_LOOKUP, false);
                if (rc != ELDLM_OK)
                        GOTO(put_child, rc);
 
@@ -1269,7 +1261,7 @@ static int mdt_rename_lock(struct mdt_thread_info *info,
                rc = mdt_remote_object_lock(info, obj,
                                            &LUSTRE_BFL_FID, lh,
                                            LCK_EX,
-                                           MDS_INODELOCK_UPDATE, false, false);
+                                           MDS_INODELOCK_UPDATE, false);
                mdt_object_put(info->mti_env, obj);
        } else {
                struct ldlm_namespace *ns = info->mti_mdt->mdt_namespace;
@@ -1399,6 +1391,7 @@ again:
                struct mdt_lock_list *mll;
                struct lu_name name;
                struct lu_fid  fid;
+               __u64 ibits;
 
                linkea_entry_unpack(ldata.ld_lee, &ldata.ld_reclen,
                                    &name, &fid);
@@ -1443,9 +1436,10 @@ again:
                 * cannot be gotten because of conflicting locks, then drop all
                 * current locks, send an AST to the client, and start again. */
                mdt_lock_pdo_init(&mll->mll_lh, LCK_PW, &name);
-               rc = mdt_reint_object_lock_try(info, mdt_pobj, &mll->mll_lh,
-                                               MDS_INODELOCK_UPDATE, true);
-               if (rc == 0) {
+               ibits = 0;
+               rc = mdt_object_lock_try(info, mdt_pobj, &mll->mll_lh, &ibits,
+                                        MDS_INODELOCK_UPDATE, true);
+               if (!(ibits & MDS_INODELOCK_UPDATE)) {
                        mdt_unlock_list(info, lock_list, rc);
 
                        CDEBUG(D_INFO, "%s: busy lock on "DFID" %s retry %d\n",
@@ -1648,7 +1642,7 @@ out_lease:
                rc = mdt_remote_object_lock(info, msrcdir, mdt_object_fid(mold),
                                            &lh_childp->mlh_rreg_lh,
                                            lh_childp->mlh_rreg_mode,
-                                           MDS_INODELOCK_LOOKUP, false, false);
+                                           MDS_INODELOCK_LOOKUP, false);
                if (rc != ELDLM_OK)
                        GOTO(out_unlock_list, rc);
 
@@ -1716,7 +1710,7 @@ out_lease:
                                            mdt_object_fid(mnew),
                                            &lh_tgtp->mlh_rreg_lh,
                                            lh_tgtp->mlh_rreg_mode,
-                                           MDS_INODELOCK_UPDATE, false, false);
+                                           MDS_INODELOCK_UPDATE, false);
                if (rc != 0) {
                        lh_tgtp = NULL;
                        GOTO(out_put_new, rc);
@@ -2028,7 +2022,7 @@ relock:
                                                    &lh_oldp->mlh_rreg_lh,
                                                    lh_oldp->mlh_rreg_mode,
                                                    MDS_INODELOCK_LOOKUP,
-                                                   false, false);
+                                                   false);
                        if (rc != ELDLM_OK)
                                GOTO(out_put_new, rc);
 
@@ -2077,7 +2071,7 @@ relock:
                                                    &lh_oldp->mlh_rreg_lh,
                                                    lh_oldp->mlh_rreg_mode,
                                                    MDS_INODELOCK_LOOKUP,
-                                                   false, false);
+                                                   false);
                        if (rc != ELDLM_OK)
                                GOTO(out_put_old, rc);