aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/glops.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/gfs2/glops.c')
-rw-r--r--fs/gfs2/glops.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index 0cc3ff48ce20..6f82aac9b0ee 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
@@ -134,6 +134,8 @@ void gfs2_ail_flush(struct gfs2_glock *gl)
134static void rgrp_go_sync(struct gfs2_glock *gl) 134static void rgrp_go_sync(struct gfs2_glock *gl)
135{ 135{
136 struct address_space *metamapping = gfs2_glock2aspace(gl); 136 struct address_space *metamapping = gfs2_glock2aspace(gl);
137 struct gfs2_rgrpd *rgd = gl->gl_object;
138 unsigned int x;
137 int error; 139 int error;
138 140
139 if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags)) 141 if (!test_and_clear_bit(GLF_DIRTY, &gl->gl_flags))
@@ -145,6 +147,15 @@ static void rgrp_go_sync(struct gfs2_glock *gl)
145 error = filemap_fdatawait(metamapping); 147 error = filemap_fdatawait(metamapping);
146 mapping_set_error(metamapping, error); 148 mapping_set_error(metamapping, error);
147 gfs2_ail_empty_gl(gl); 149 gfs2_ail_empty_gl(gl);
150
151 if (!rgd)
152 return;
153
154 for (x = 0; x < rgd->rd_length; x++) {
155 struct gfs2_bitmap *bi = rgd->rd_bits + x;
156 kfree(bi->bi_clone);
157 bi->bi_clone = NULL;
158 }
148} 159}
149 160
150/** 161/**
@@ -445,33 +456,6 @@ static int inode_go_dump(struct seq_file *seq, const struct gfs2_glock *gl)
445} 456}
446 457
447/** 458/**
448 * rgrp_go_lock - operation done after an rgrp lock is locked by
449 * a first holder on this node.
450 * @gl: the glock
451 * @flags:
452 *
453 * Returns: errno
454 */
455
456static int rgrp_go_lock(struct gfs2_holder *gh)
457{
458 return gfs2_rgrp_bh_get(gh->gh_gl->gl_object);
459}
460
461/**
462 * rgrp_go_unlock - operation done before an rgrp lock is unlocked by
463 * a last holder on this node.
464 * @gl: the glock
465 * @flags:
466 *
467 */
468
469static void rgrp_go_unlock(struct gfs2_holder *gh)
470{
471 gfs2_rgrp_bh_put(gh->gh_gl->gl_object);
472}
473
474/**
475 * trans_go_sync - promote/demote the transaction glock 459 * trans_go_sync - promote/demote the transaction glock
476 * @gl: the glock 460 * @gl: the glock
477 * @state: the requested state 461 * @state: the requested state
@@ -573,8 +557,8 @@ const struct gfs2_glock_operations gfs2_inode_glops = {
573const struct gfs2_glock_operations gfs2_rgrp_glops = { 557const struct gfs2_glock_operations gfs2_rgrp_glops = {
574 .go_xmote_th = rgrp_go_sync, 558 .go_xmote_th = rgrp_go_sync,
575 .go_inval = rgrp_go_inval, 559 .go_inval = rgrp_go_inval,
576 .go_lock = rgrp_go_lock, 560 .go_lock = gfs2_rgrp_go_lock,
577 .go_unlock = rgrp_go_unlock, 561 .go_unlock = gfs2_rgrp_go_unlock,
578 .go_dump = gfs2_rgrp_dump, 562 .go_dump = gfs2_rgrp_dump,
579 .go_type = LM_TYPE_RGRP, 563 .go_type = LM_TYPE_RGRP,
580 .go_flags = GLOF_ASPACE, 564 .go_flags = GLOF_ASPACE,