aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
Diffstat (limited to 'fs')
-rw-r--r--fs/gfs2/glock.c16
-rw-r--r--fs/gfs2/glock.h1
-rw-r--r--fs/gfs2/glops.c2
-rw-r--r--fs/gfs2/ops_export.c3
-rw-r--r--fs/gfs2/super.c11
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