ocfs2: Fix locking for res->tracking and dlm->tracking_list
PATCH v2 1/1 ocfs2: Fix locking for res->tracking and dlm->tracking_list
In dlm_init_lockres() we access and modify res->tracking and dlm->tracking_list without holding dlm->track_lock. This can cause list corruptions and can end up in kernel panic.
Fix this by locking res->tracking and dlm->tracking_list with dlm->track_lock instead of dlm->spinlock.
--- fs/ocfs2/dlm/dlmmaster.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
fs/ocfs2/dlm/dlmmaster.c +2 -2
@@ -584,9 +584,9 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm, res->last_used =0 ; -spin_lock (&dlm->spinlock); +spin_lock (&dlm->track_lock);list_add_tail (&res->tracking, &dlm->tracking_list); -spin_unlock (&dlm->spinlock); +spin_unlock (&dlm->track_lock);memset (res->lvb,0 ,DLM_LVB_LEN );memset (res->refmap,0 ,sizeof (res->refmap));
Signature · 1 line
1.9.1
PATCH v2 1/1 ocfs2: Fix locking for res->tracking and dlm->tracking_list
Looks good to me.
Quoted 6 lines · Ashish Samant
In
dlm_init_lockres()we access and modifyres->trackinganddlm->tracking_listwithout holdingdlm->track_lock. This can cause list corruptions and can end up in kernel panic.Fix this by locking
res->trackinganddlm->tracking_listwithdlm->track_lockinstead ofdlm->spinlock.
Quoted 22 lines
Signed-off-by Ashish Samant <[email protected]>CC stable at vger.kernel.org--- fs/ocfs2/dlm/dlmmaster.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)fs/ocfs2/dlm/dlmmaster.c +2
-2@@ -584,9 +584,9 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm, res->last_used =0 ; -spin_lock (&dlm->spinlock); +spin_lock (&dlm->track_lock);list_add_tail (&res->tracking, &dlm->tracking_list); -spin_unlock (&dlm->spinlock); +spin_unlock (&dlm->track_lock);memset (res->lvb,0 ,DLM_LVB_LEN );memset (res->refmap,0 ,sizeof (res->refmap));
PATCH v2 1/1 ocfs2: Fix locking for res->tracking and dlm->tracking_list
In reply to Ashish SamantQuoted 9 lines · Ashish Samant
In
dlm_init_lockres()we access and modifyres->trackinganddlm->tracking_listwithout holdingdlm->track_lock. This can cause list corruptions and can end up in kernel panic.Fix this by locking
res->trackinganddlm->tracking_listwithdlm->track_lockinstead ofdlm->spinlock.Signed-off-by Ashish Samant <[email protected]>CC stable at vger.kernel.org
Quoted 21 lines
--- fs/ocfs2/dlm/dlmmaster.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)fs/ocfs2/dlm/dlmmaster.c +2
-2@@ -584,9 +584,9 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm, res->last_used =0 ; -spin_lock (&dlm->spinlock); +spin_lock (&dlm->track_lock);list_add_tail (&res->tracking, &dlm->tracking_list); -spin_unlock (&dlm->spinlock); +spin_unlock (&dlm->track_lock);memset (res->lvb,0 ,DLM_LVB_LEN );memset (res->refmap,0 ,sizeof (res->refmap));
PATCH v2 1/1 ocfs2: Fix locking for res->tracking and dlm->tracking_list
In reply to Ashish SamantLGTM
Quoted 8 lines · Ashish Samant
In
dlm_init_lockres()we access and modifyres->trackinganddlm->tracking_listwithout holdingdlm->track_lock. This can cause list corruptions and can end up in kernel panic.Fix this by locking
res->trackinganddlm->tracking_listwithdlm->track_lockinstead ofdlm->spinlock.Signed-off-by Ashish Samant <[email protected]>
Quoted 22 lines
CC stable at vger.kernel.org--- fs/ocfs2/dlm/dlmmaster.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)fs/ocfs2/dlm/dlmmaster.c +2
-2@@ -584,9 +584,9 @@ static void dlm_init_lockres(struct dlm_ctxt *dlm, res->last_used =0 ; -spin_lock (&dlm->spinlock); +spin_lock (&dlm->track_lock);list_add_tail (&res->tracking, &dlm->tracking_list); -spin_unlock (&dlm->spinlock); +spin_unlock (&dlm->track_lock);memset (res->lvb,0 ,DLM_LVB_LEN );memset (res->refmap,0 ,sizeof (res->refmap));