aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/glock.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/glock.c')
-rw-r--r--fs/gfs2/glock.c16
1 files changed, 3 insertions, 13 deletions
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index 8e4b55a2bd77..1345c3d44ede 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -391,10 +391,6 @@ void gfs2_holder_init(struct gfs2_glock *gl, unsigned int state, unsigned flags,
391 gh->gh_flags = flags; 391 gh->gh_flags = flags;
392 gh->gh_error = 0; 392 gh->gh_error = 0;
393 gh->gh_iflags = 0; 393 gh->gh_iflags = 0;
394
395 if (gh->gh_state == LM_ST_EXCLUSIVE)
396 gh->gh_flags |= GL_LOCAL_EXCL;
397
398 gfs2_glock_hold(gl); 394 gfs2_glock_hold(gl);
399} 395}
400 396
@@ -412,9 +408,6 @@ void gfs2_holder_reinit(unsigned int state, unsigned flags, struct gfs2_holder *
412{ 408{
413 gh->gh_state = state; 409 gh->gh_state = state;
414 gh->gh_flags = flags; 410 gh->gh_flags = flags;
415 if (gh->gh_state == LM_ST_EXCLUSIVE)
416 gh->gh_flags |= GL_LOCAL_EXCL;
417
418 gh->gh_iflags &= 1 << HIF_ALLOCED; 411 gh->gh_iflags &= 1 << HIF_ALLOCED;
419 gh->gh_ip = (unsigned long)__builtin_return_address(0); 412 gh->gh_ip = (unsigned long)__builtin_return_address(0);
420} 413}
@@ -557,11 +550,11 @@ static int rq_promote(struct gfs2_holder *gh)
557 set_bit(GLF_LOCK, &gl->gl_flags); 550 set_bit(GLF_LOCK, &gl->gl_flags);
558 } else { 551 } else {
559 struct gfs2_holder *next_gh; 552 struct gfs2_holder *next_gh;
560 if (gh->gh_flags & GL_LOCAL_EXCL) 553 if (gh->gh_state == LM_ST_EXCLUSIVE)
561 return 1; 554 return 1;
562 next_gh = list_entry(gl->gl_holders.next, struct gfs2_holder, 555 next_gh = list_entry(gl->gl_holders.next, struct gfs2_holder,
563 gh_list); 556 gh_list);
564 if (next_gh->gh_flags & GL_LOCAL_EXCL) 557 if (next_gh->gh_state == LM_ST_EXCLUSIVE)
565 return 1; 558 return 1;
566 } 559 }
567 560
@@ -1363,10 +1356,7 @@ static int glock_compare(const void *arg_a, const void *arg_b)
1363 return 1; 1356 return 1;
1364 if (a->ln_number < b->ln_number) 1357 if (a->ln_number < b->ln_number)
1365 return -1; 1358 return -1;
1366 if (gh_a->gh_state == LM_ST_SHARED && gh_b->gh_state == LM_ST_EXCLUSIVE) 1359 BUG_ON(gh_a->gh_gl->gl_ops->go_type == gh_b->gh_gl->gl_ops->go_type);
1367 return 1;
1368 if (!(gh_a->gh_flags & GL_LOCAL_EXCL) && (gh_b->gh_flags & GL_LOCAL_EXCL))
1369 return 1;
1370 return 0; 1360 return 0;
1371} 1361}
1372 1362