aboutsummaryrefslogtreecommitdiffstats
path: root/fs/gfs2/lops.c
diff options
context:
space:
mode:
authorSteven Whitehouse <swhiteho@redhat.com>2006-04-07 11:17:32 -0400
committerSteven Whitehouse <swhiteho@redhat.com>2006-04-07 11:17:32 -0400
commitb09e593d799560f1a0782c20ac5900058390a26f (patch)
tree20f04bd2c8ba9c09ac80a7bb1400d341c4fd7e21 /fs/gfs2/lops.c
parent55eccc6d00cea224bf634d44e9871cfe83200ff2 (diff)
[GFS2] Fix a ref count bug and other clean ups
This fixes a ref count bug that sometimes showed up a umount time (causing it to hang) but it otherwise mostly harmless. At the same time there are some clean ups including making the log operations structures const, moving a memory allocation so that its not done in the fast path of checking to see if there is an outstanding transaction related to a particular glock. Removes the sd_log_wrap varaible which was updated, but never actually used anywhere. Updates the gfs2 ioctl() to run without the kernel lock (which it never needed anyway). Removes the "invalidate inodes" loop from GFS2's put_super routine. This is done in kill super anyway so we don't need to do it here. The loop was also bogus in that if there are any inodes "stuck" at this point its a bug and we need to know about it rather than hide it by hanging forever. Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/lops.c')
-rw-r--r--fs/gfs2/lops.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
index 689c9101c0fb..4d90eb311497 100644
--- a/fs/gfs2/lops.c
+++ b/fs/gfs2/lops.c
@@ -130,6 +130,7 @@ static void buf_lo_before_commit(struct gfs2_sbd *sdp)
130 if (total > limit) 130 if (total > limit)
131 num = limit; 131 num = limit;
132 bh = gfs2_log_get_buf(sdp); 132 bh = gfs2_log_get_buf(sdp);
133 sdp->sd_log_num_hdrs++;
133 ld = (struct gfs2_log_descriptor *)bh->b_data; 134 ld = (struct gfs2_log_descriptor *)bh->b_data;
134 ptr = (__be64 *)(bh->b_data + offset); 135 ptr = (__be64 *)(bh->b_data + offset);
135 ld->ld_header.mh_magic = cpu_to_be32(GFS2_MAGIC); 136 ld->ld_header.mh_magic = cpu_to_be32(GFS2_MAGIC);
@@ -570,6 +571,7 @@ static void databuf_lo_before_commit(struct gfs2_sbd *sdp)
570 gfs2_log_unlock(sdp); 571 gfs2_log_unlock(sdp);
571 if (!bh) { 572 if (!bh) {
572 bh = gfs2_log_get_buf(sdp); 573 bh = gfs2_log_get_buf(sdp);
574 sdp->sd_log_num_hdrs++;
573 ld = (struct gfs2_log_descriptor *) 575 ld = (struct gfs2_log_descriptor *)
574 bh->b_data; 576 bh->b_data;
575 ptr = (__be64 *)(bh->b_data + offset); 577 ptr = (__be64 *)(bh->b_data + offset);
@@ -750,13 +752,13 @@ static void databuf_lo_after_commit(struct gfs2_sbd *sdp, struct gfs2_ail *ai)
750} 752}
751 753
752 754
753struct gfs2_log_operations gfs2_glock_lops = { 755const struct gfs2_log_operations gfs2_glock_lops = {
754 .lo_add = glock_lo_add, 756 .lo_add = glock_lo_add,
755 .lo_after_commit = glock_lo_after_commit, 757 .lo_after_commit = glock_lo_after_commit,
756 .lo_name = "glock" 758 .lo_name = "glock"
757}; 759};
758 760
759struct gfs2_log_operations gfs2_buf_lops = { 761const struct gfs2_log_operations gfs2_buf_lops = {
760 .lo_add = buf_lo_add, 762 .lo_add = buf_lo_add,
761 .lo_incore_commit = buf_lo_incore_commit, 763 .lo_incore_commit = buf_lo_incore_commit,
762 .lo_before_commit = buf_lo_before_commit, 764 .lo_before_commit = buf_lo_before_commit,
@@ -767,7 +769,7 @@ struct gfs2_log_operations gfs2_buf_lops = {
767 .lo_name = "buf" 769 .lo_name = "buf"
768}; 770};
769 771
770struct gfs2_log_operations gfs2_revoke_lops = { 772const struct gfs2_log_operations gfs2_revoke_lops = {
771 .lo_add = revoke_lo_add, 773 .lo_add = revoke_lo_add,
772 .lo_before_commit = revoke_lo_before_commit, 774 .lo_before_commit = revoke_lo_before_commit,
773 .lo_before_scan = revoke_lo_before_scan, 775 .lo_before_scan = revoke_lo_before_scan,
@@ -776,13 +778,13 @@ struct gfs2_log_operations gfs2_revoke_lops = {
776 .lo_name = "revoke" 778 .lo_name = "revoke"
777}; 779};
778 780
779struct gfs2_log_operations gfs2_rg_lops = { 781const struct gfs2_log_operations gfs2_rg_lops = {
780 .lo_add = rg_lo_add, 782 .lo_add = rg_lo_add,
781 .lo_after_commit = rg_lo_after_commit, 783 .lo_after_commit = rg_lo_after_commit,
782 .lo_name = "rg" 784 .lo_name = "rg"
783}; 785};
784 786
785struct gfs2_log_operations gfs2_databuf_lops = { 787const struct gfs2_log_operations gfs2_databuf_lops = {
786 .lo_add = databuf_lo_add, 788 .lo_add = databuf_lo_add,
787 .lo_incore_commit = buf_lo_incore_commit, 789 .lo_incore_commit = buf_lo_incore_commit,
788 .lo_before_commit = databuf_lo_before_commit, 790 .lo_before_commit = databuf_lo_before_commit,
@@ -792,7 +794,7 @@ struct gfs2_log_operations gfs2_databuf_lops = {
792 .lo_name = "databuf" 794 .lo_name = "databuf"
793}; 795};
794 796
795struct gfs2_log_operations *gfs2_log_ops[] = { 797const struct gfs2_log_operations *gfs2_log_ops[] = {
796 &gfs2_glock_lops, 798 &gfs2_glock_lops,
797 &gfs2_buf_lops, 799 &gfs2_buf_lops,
798 &gfs2_revoke_lops, 800 &gfs2_revoke_lops,