aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWengang Wang <wen.gang.wang@oracle.com>2010-03-24 10:40:44 -0400
committerJoel Becker <joel.becker@oracle.com>2010-03-30 15:55:55 -0400
commit428257f8870f0e72e85ce782d091fa1f366de7df (patch)
treeb705c3aa023b88595adb4d18a455e0c67c18a7f2
parenta03ab788d070c256eff1ac24cf0e3bc2ca148096 (diff)
ocfs2: Check the owner of a lockres inside the spinlock
The checking of lockres owner in dlm_update_lvb() is not inside spinlock protection. I don't see problem in current call path of dlm_update_lvb(). But just for code robustness. Signed-off-by: Wengang Wang <wen.gang.wang@oracle.com> Signed-off-by: Joel Becker <joel.becker@oracle.com>
-rw-r--r--fs/ocfs2/dlm/dlmast.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/fs/ocfs2/dlm/dlmast.c b/fs/ocfs2/dlm/dlmast.c
index dccc439fa087..b7a25ef18e2a 100644
--- a/fs/ocfs2/dlm/dlmast.c
+++ b/fs/ocfs2/dlm/dlmast.c
@@ -185,9 +185,8 @@ static void dlm_update_lvb(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,
185 BUG_ON(!lksb); 185 BUG_ON(!lksb);
186 186
187 /* only updates if this node masters the lockres */ 187 /* only updates if this node masters the lockres */
188 spin_lock(&res->spinlock);
188 if (res->owner == dlm->node_num) { 189 if (res->owner == dlm->node_num) {
189
190 spin_lock(&res->spinlock);
191 /* check the lksb flags for the direction */ 190 /* check the lksb flags for the direction */
192 if (lksb->flags & DLM_LKSB_GET_LVB) { 191 if (lksb->flags & DLM_LKSB_GET_LVB) {
193 mlog(0, "getting lvb from lockres for %s node\n", 192 mlog(0, "getting lvb from lockres for %s node\n",
@@ -202,8 +201,8 @@ static void dlm_update_lvb(struct dlm_ctxt *dlm, struct dlm_lock_resource *res,
202 * here. In the future we might want to clear it at the time 201 * here. In the future we might want to clear it at the time
203 * the put is actually done. 202 * the put is actually done.
204 */ 203 */
205 spin_unlock(&res->spinlock);
206 } 204 }
205 spin_unlock(&res->spinlock);
207 206
208 /* reset any lvb flags on the lksb */ 207 /* reset any lvb flags on the lksb */
209 lksb->flags &= ~(DLM_LKSB_PUT_LVB|DLM_LKSB_GET_LVB); 208 lksb->flags &= ~(DLM_LKSB_PUT_LVB|DLM_LKSB_GET_LVB);