Whamcloud - gitweb
LU-1137 ldlm: fix for the flock handling for 1.8 clients
[fs/lustre-release.git] / lustre / ldlm / ldlm_lock.c
index 723bf9c..b0cf30d 100644 (file)
@@ -73,10 +73,17 @@ char *ldlm_typename[] = {
         [LDLM_IBITS] "IBT",
 };
 
-static ldlm_policy_wire_to_local_t ldlm_policy_wire_to_local[] = {
+static ldlm_policy_wire_to_local_t ldlm_policy_wire18_to_local[] = {
         [LDLM_PLAIN - LDLM_MIN_TYPE] ldlm_plain_policy_wire_to_local,
         [LDLM_EXTENT - LDLM_MIN_TYPE] ldlm_extent_policy_wire_to_local,
-        [LDLM_FLOCK - LDLM_MIN_TYPE] ldlm_flock_policy_wire_to_local,
+        [LDLM_FLOCK - LDLM_MIN_TYPE] ldlm_flock_policy_wire18_to_local,
+        [LDLM_IBITS - LDLM_MIN_TYPE] ldlm_ibits_policy_wire_to_local,
+};
+
+static ldlm_policy_wire_to_local_t ldlm_policy_wire21_to_local[] = {
+        [LDLM_PLAIN - LDLM_MIN_TYPE] ldlm_plain_policy_wire_to_local,
+        [LDLM_EXTENT - LDLM_MIN_TYPE] ldlm_extent_policy_wire_to_local,
+        [LDLM_FLOCK - LDLM_MIN_TYPE] ldlm_flock_policy_wire21_to_local,
         [LDLM_IBITS - LDLM_MIN_TYPE] ldlm_ibits_policy_wire_to_local,
 };
 
@@ -104,13 +111,19 @@ void ldlm_convert_policy_to_wire(ldlm_type_t type,
 /**
  * Converts lock policy from on the wire lock_desc format to local format
  */
-void ldlm_convert_policy_to_local(ldlm_type_t type,
+void ldlm_convert_policy_to_local(struct obd_export *exp, ldlm_type_t type,
                                   const ldlm_wire_policy_data_t *wpolicy,
                                   ldlm_policy_data_t *lpolicy)
 {
         ldlm_policy_wire_to_local_t convert;
+        int new_client;
 
-        convert = ldlm_policy_wire_to_local[type - LDLM_MIN_TYPE];
+        /** some badnes for 2.0.0 clients, but 2.0.0 isn't supported */
+        new_client = (exp->exp_connect_flags & OBD_CONNECT_FULL20) != 0;
+        if (new_client)
+               convert = ldlm_policy_wire21_to_local[type - LDLM_MIN_TYPE];
+        else
+               convert = ldlm_policy_wire18_to_local[type - LDLM_MIN_TYPE];
 
         convert(wpolicy, lpolicy);
 }