diff options
-rw-r--r-- | fs/gfs2/glock.c | 16 | ||||
-rw-r--r-- | fs/gfs2/glock.h | 1 | ||||
-rw-r--r-- | fs/gfs2/glops.c | 2 | ||||
-rw-r--r-- | fs/gfs2/ops_export.c | 3 | ||||
-rw-r--r-- | fs/gfs2/super.c | 11 |
5 files changed, 9 insertions, 24 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 | ||
diff --git a/fs/gfs2/glock.h b/fs/gfs2/glock.h index ddc56dc4ec9f..1eaeacdd14a4 100644 --- a/fs/gfs2/glock.h +++ b/fs/gfs2/glock.h | |||
@@ -20,7 +20,6 @@ | |||
20 | #define LM_FLAG_ANY 0x00000008 | 20 | #define LM_FLAG_ANY 0x00000008 |
21 | #define LM_FLAG_PRIORITY 0x00000010 */ | 21 | #define LM_FLAG_PRIORITY 0x00000010 */ |
22 | 22 | ||
23 | #define GL_LOCAL_EXCL 0x00000020 | ||
24 | #define GL_ASYNC 0x00000040 | 23 | #define GL_ASYNC 0x00000040 |
25 | #define GL_EXACT 0x00000080 | 24 | #define GL_EXACT 0x00000080 |
26 | #define GL_SKIP 0x00000100 | 25 | #define GL_SKIP 0x00000100 |
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c index e4da26fe406f..dda68586f757 100644 --- a/fs/gfs2/glops.c +++ b/fs/gfs2/glops.c | |||
@@ -295,7 +295,7 @@ static int inode_go_lock(struct gfs2_holder *gh) | |||
295 | 295 | ||
296 | if ((ip->i_di.di_flags & GFS2_DIF_TRUNC_IN_PROG) && | 296 | if ((ip->i_di.di_flags & GFS2_DIF_TRUNC_IN_PROG) && |
297 | (gl->gl_state == LM_ST_EXCLUSIVE) && | 297 | (gl->gl_state == LM_ST_EXCLUSIVE) && |
298 | (gh->gh_flags & GL_LOCAL_EXCL)) | 298 | (gh->gh_state == LM_ST_EXCLUSIVE)) |
299 | error = gfs2_truncatei_resume(ip); | 299 | error = gfs2_truncatei_resume(ip); |
300 | 300 | ||
301 | return error; | 301 | return error; |
diff --git a/fs/gfs2/ops_export.c b/fs/gfs2/ops_export.c index fbf55063928f..4855e8cca622 100644 --- a/fs/gfs2/ops_export.c +++ b/fs/gfs2/ops_export.c | |||
@@ -216,8 +216,7 @@ static struct dentry *gfs2_get_dentry(struct super_block *sb, void *inum_obj) | |||
216 | } | 216 | } |
217 | 217 | ||
218 | error = gfs2_glock_nq_num(sdp, inum->no_addr, &gfs2_inode_glops, | 218 | error = gfs2_glock_nq_num(sdp, inum->no_addr, &gfs2_inode_glops, |
219 | LM_ST_SHARED, LM_FLAG_ANY | GL_LOCAL_EXCL, | 219 | LM_ST_SHARED, LM_FLAG_ANY, &i_gh); |
220 | &i_gh); | ||
221 | if (error) | 220 | if (error) |
222 | return ERR_PTR(error); | 221 | return ERR_PTR(error); |
223 | 222 | ||
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index ce5353ac8f3d..70f424fcf1cd 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
@@ -354,8 +354,7 @@ int gfs2_jindex_hold(struct gfs2_sbd *sdp, struct gfs2_holder *ji_gh) | |||
354 | mutex_lock(&sdp->sd_jindex_mutex); | 354 | mutex_lock(&sdp->sd_jindex_mutex); |
355 | 355 | ||
356 | for (;;) { | 356 | for (;;) { |
357 | error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, | 357 | error = gfs2_glock_nq_init(dip->i_gl, LM_ST_SHARED, 0, ji_gh); |
358 | GL_LOCAL_EXCL, ji_gh); | ||
359 | if (error) | 358 | if (error) |
360 | break; | 359 | break; |
361 | 360 | ||
@@ -524,8 +523,7 @@ int gfs2_make_fs_rw(struct gfs2_sbd *sdp) | |||
524 | struct gfs2_log_header_host head; | 523 | struct gfs2_log_header_host head; |
525 | int error; | 524 | int error; |
526 | 525 | ||
527 | error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, | 526 | error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, 0, &t_gh); |
528 | GL_LOCAL_EXCL, &t_gh); | ||
529 | if (error) | 527 | if (error) |
530 | return error; | 528 | return error; |
531 | 529 | ||
@@ -578,9 +576,8 @@ int gfs2_make_fs_ro(struct gfs2_sbd *sdp) | |||
578 | gfs2_quota_sync(sdp); | 576 | gfs2_quota_sync(sdp); |
579 | gfs2_statfs_sync(sdp); | 577 | gfs2_statfs_sync(sdp); |
580 | 578 | ||
581 | error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, | 579 | error = gfs2_glock_nq_init(sdp->sd_trans_gl, LM_ST_SHARED, GL_NOCACHE, |
582 | GL_LOCAL_EXCL | GL_NOCACHE, | 580 | &t_gh); |
583 | &t_gh); | ||
584 | if (error && !test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) | 581 | if (error && !test_bit(SDF_SHUTDOWN, &sdp->sd_flags)) |
585 | return error; | 582 | return error; |
586 | 583 | ||