ocfs2: avoid access invalid address when read o2dlm debug messages
[firefly-linux-kernel-4.4.55.git] / fs / ocfs2 / dlm / dlmmaster.c
index fdf4b41d0609a00e591afeed69ea7cc2ab9d5254..46b8b2bbc95ae7c1ddd776d093215f3557f76cc7 100644 (file)
@@ -498,16 +498,6 @@ static void dlm_lockres_release(struct kref *kref)
        mlog(0, "destroying lockres %.*s\n", res->lockname.len,
             res->lockname.name);
 
-       spin_lock(&dlm->track_lock);
-       if (!list_empty(&res->tracking))
-               list_del_init(&res->tracking);
-       else {
-               mlog(ML_ERROR, "Resource %.*s not on the Tracking list\n",
-                    res->lockname.len, res->lockname.name);
-               dlm_print_one_lock_resource(res);
-       }
-       spin_unlock(&dlm->track_lock);
-
        atomic_dec(&dlm->res_cur_count);
 
        if (!hlist_unhashed(&res->hash_node) ||
@@ -795,8 +785,18 @@ lookup:
                dlm_lockres_grab_inflight_ref(dlm, tmpres);
 
                spin_unlock(&tmpres->spinlock);
-               if (res)
+               if (res) {
+                       spin_lock(&dlm->track_lock);
+                       if (!list_empty(&res->tracking))
+                               list_del_init(&res->tracking);
+                       else
+                               mlog(ML_ERROR, "Resource %.*s not "
+                                               "on the Tracking list\n",
+                                               res->lockname.len,
+                                               res->lockname.name);
+                       spin_unlock(&dlm->track_lock);
                        dlm_lockres_put(res);
+               }
                res = tmpres;
                goto leave;
        }