Whamcloud - gitweb
LU-15107 mdt: Exclusive create isn't replayed
[fs/lustre-release.git] / lustre / mdt / mdt_open.c
index 5bbcd29..d59e92d 100644 (file)
@@ -780,6 +780,11 @@ static int mdt_open_by_fid(struct mdt_thread_info *info, struct ldlm_reply *rep)
                        mdt_set_disposition(info, rep, (DISP_IT_EXECD |
                                                        DISP_LOOKUP_EXECD |
                                                        DISP_LOOKUP_POS));
+                       if ((open_flags & MDS_OPEN_EXCL) &&
+                           (open_flags & MDS_OPEN_CREAT))
+                               mdt_set_disposition(info, rep,
+                                                   DISP_OPEN_CREATE);
+
                        mdt_prep_ma_buf_from_rep(info, o, ma);
                        rc = mdt_attr_get_complex(info, o, ma);
                        if (rc == 0)
@@ -2025,7 +2030,8 @@ out_unlock:
        }
 
 out_reprocess:
-       ldlm_reprocess_all(lease->l_resource, lease);
+       ldlm_reprocess_all(lease->l_resource,
+                          lease->l_policy_data.l_inodebits.bits);
        LDLM_LOCK_PUT(lease);
 
        ma->ma_valid = 0;
@@ -2235,7 +2241,8 @@ out_obj:
                /* the 2nd object has been used, and not swapped */
                mdt_object_put(info->mti_env, o2);
 
-       ldlm_reprocess_all(lease->l_resource, lease);
+       ldlm_reprocess_all(lease->l_resource,
+                          lease->l_policy_data.l_inodebits.bits);
 
 out_lease:
        LDLM_LOCK_PUT(lease);
@@ -2356,7 +2363,8 @@ out_unlock:
                OBD_FREE_PTR_ARRAY(resync_ids, resync_count);
 
 out_reprocess:
-       ldlm_reprocess_all(lease->l_resource, lease);
+       ldlm_reprocess_all(lease->l_resource,
+                          lease->l_policy_data.l_inodebits.bits);
        LDLM_LOCK_PUT(lease);
 
        ma->ma_valid = 0;