Whamcloud - gitweb
LU-11611 mdt: incorrect return value in mdt_reint_unlink
[fs/lustre-release.git] / lustre / mdt / mdt_reint.c
index a520d0a..9c759c1 100644 (file)
@@ -217,7 +217,7 @@ static int mdt_lookup_version_check(struct mdt_thread_info *info,
 
 }
 
-static inline int mdt_remote_permission_check(struct mdt_thread_info *info)
+static inline int mdt_remote_dir_permission_check(struct mdt_thread_info *info)
 {
        struct lu_ucred *uc  = mdt_ucred(info);
        struct mdt_device *mdt = info->mti_mdt;
@@ -232,7 +232,7 @@ static inline int mdt_remote_permission_check(struct mdt_thread_info *info)
 }
 
 /**
- * mdt_remote_permission: Check whether the remote operation is permitted,
+ * mdt_remote_dir_permission: Check whether the remote operation is permitted,
  *
  * Only sysadmin can create remote directory / striped directory,
  * migrate directory and set default stripedEA on directory, unless
@@ -244,7 +244,7 @@ static inline int mdt_remote_permission_check(struct mdt_thread_info *info)
  * retval      = 0 remote operation is allowed.
  *              < 0 remote operation is denied.
  */
-int mdt_remote_permission(struct mdt_thread_info *info)
+int mdt_remote_dir_permission(struct mdt_thread_info *info)
 {
        struct md_op_spec *spec = &info->mti_spec;
        struct lu_attr *attr = &info->mti_attr.ma_attr;
@@ -252,7 +252,7 @@ int mdt_remote_permission(struct mdt_thread_info *info)
        int rc;
 
        if (info->mti_rr.rr_opcode == REINT_MIGRATE) {
-               rc = mdt_remote_permission_check(info);
+               rc = mdt_remote_dir_permission_check(info);
                if (rc != 0)
                        return rc;
        }
@@ -271,7 +271,7 @@ int mdt_remote_permission(struct mdt_thread_info *info)
                    !mdt_is_striped_client(exp))
                        return -ENOTSUPP;
 
-               rc = mdt_remote_permission_check(info);
+               rc = mdt_remote_dir_permission_check(info);
                if (rc != 0)
                        return rc;
        }
@@ -280,7 +280,7 @@ int mdt_remote_permission(struct mdt_thread_info *info)
                struct md_attr *ma = &info->mti_attr;
 
                if ((ma->ma_valid & MA_LMV)) {
-                       rc = mdt_remote_permission_check(info);
+                       rc = mdt_remote_dir_permission_check(info);
                        if (rc != 0)
                                return rc;
                }
@@ -474,7 +474,7 @@ static int mdt_create(struct mdt_thread_info *info)
        if (unlikely(IS_ERR(child)))
                GOTO(unlock_parent, rc = PTR_ERR(child));
 
-       rc = mdt_remote_permission(info);
+       rc = mdt_remote_dir_permission(info);
        if (rc != 0)
                GOTO(put_child, rc);
 
@@ -759,7 +759,7 @@ static int mdt_reint_setattr(struct mdt_thread_info *info,
                struct lu_buf *buf  = &info->mti_buf;
                struct mdt_lock_handle  *lh;
 
-               rc = mdt_remote_permission(info);
+               rc = mdt_remote_dir_permission(info);
                if (rc < 0)
                        GOTO(out_put, rc);
 
@@ -953,7 +953,7 @@ relock:
        if (!cos_incompat) {
                rc = mdt_object_striped(info, mc);
                if (rc < 0)
-                       GOTO(unlock_parent, rc = PTR_ERR(mc));
+                       GOTO(unlock_parent, rc);
 
                cos_incompat = rc;
                if (cos_incompat) {
@@ -1992,7 +1992,7 @@ static int mdt_reint_migrate_internal(struct mdt_thread_info *info)
        if (lu_name_is_dot_or_dotdot(&rr->rr_name))
                RETURN(-EBUSY);
 
-       rc = mdt_remote_permission(info);
+       rc = mdt_remote_dir_permission(info);
        if (rc)
                RETURN(rc);
 
@@ -2044,6 +2044,20 @@ static int mdt_reint_migrate_internal(struct mdt_thread_info *info)
         */
        do_sync = rc;
 
+       /* TODO: DoM migration is not supported yet */
+       if (S_ISREG(lu_object_attr(&sobj->mot_obj))) {
+               ma->ma_lmm = info->mti_big_lmm;
+               ma->ma_lmm_size = info->mti_big_lmmsize;
+               ma->ma_valid = 0;
+               rc = mdt_stripe_get(info, sobj, ma, XATTR_NAME_LOV);
+               if (rc)
+                       GOTO(put_source, rc);
+
+               if (ma->ma_valid & MA_LOV &&
+                   mdt_lmm_dom_entry(ma->ma_lmm) != LMM_NO_DOM)
+                       GOTO(put_source, rc = -EOPNOTSUPP);
+       }
+
        /* if migration HSM is allowed */
        if (!mdt->mdt_opts.mo_migrate_hsm_allowed) {
                ma->ma_need = MA_HSM;
@@ -2648,7 +2662,7 @@ static int mdt_reint_resync(struct mdt_thread_info *info,
        struct mdt_object       *mo;
        struct ldlm_lock        *lease;
        struct mdt_body         *repbody;
-       struct md_layout_change  layout = { 0 };
+       struct md_layout_change  layout = { .mlc_mirror_id = rr->rr_mirror_id };
        bool                     lease_broken;
        int                      rc, rc2;
        ENTRY;