diff options
Diffstat (limited to 'fs/gfs2/trans.c')
-rw-r--r-- | fs/gfs2/trans.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c index f677b8a83f0c..053752d4b27f 100644 --- a/fs/gfs2/trans.c +++ b/fs/gfs2/trans.c | |||
@@ -12,9 +12,8 @@ | |||
12 | #include <linux/spinlock.h> | 12 | #include <linux/spinlock.h> |
13 | #include <linux/completion.h> | 13 | #include <linux/completion.h> |
14 | #include <linux/buffer_head.h> | 14 | #include <linux/buffer_head.h> |
15 | #include <linux/gfs2_ondisk.h> | ||
16 | #include <linux/kallsyms.h> | 15 | #include <linux/kallsyms.h> |
17 | #include <linux/lm_interface.h> | 16 | #include <linux/gfs2_ondisk.h> |
18 | 17 | ||
19 | #include "gfs2.h" | 18 | #include "gfs2.h" |
20 | #include "incore.h" | 19 | #include "incore.h" |
@@ -88,9 +87,11 @@ void gfs2_trans_end(struct gfs2_sbd *sdp) | |||
88 | 87 | ||
89 | if (!tr->tr_touched) { | 88 | if (!tr->tr_touched) { |
90 | gfs2_log_release(sdp, tr->tr_reserved); | 89 | gfs2_log_release(sdp, tr->tr_reserved); |
91 | gfs2_glock_dq(&tr->tr_t_gh); | 90 | if (tr->tr_t_gh.gh_gl) { |
92 | gfs2_holder_uninit(&tr->tr_t_gh); | 91 | gfs2_glock_dq(&tr->tr_t_gh); |
93 | kfree(tr); | 92 | gfs2_holder_uninit(&tr->tr_t_gh); |
93 | kfree(tr); | ||
94 | } | ||
94 | return; | 95 | return; |
95 | } | 96 | } |
96 | 97 | ||
@@ -106,9 +107,11 @@ void gfs2_trans_end(struct gfs2_sbd *sdp) | |||
106 | } | 107 | } |
107 | 108 | ||
108 | gfs2_log_commit(sdp, tr); | 109 | gfs2_log_commit(sdp, tr); |
109 | gfs2_glock_dq(&tr->tr_t_gh); | 110 | if (tr->tr_t_gh.gh_gl) { |
110 | gfs2_holder_uninit(&tr->tr_t_gh); | 111 | gfs2_glock_dq(&tr->tr_t_gh); |
111 | kfree(tr); | 112 | gfs2_holder_uninit(&tr->tr_t_gh); |
113 | kfree(tr); | ||
114 | } | ||
112 | 115 | ||
113 | if (sdp->sd_vfs->s_flags & MS_SYNCHRONOUS) | 116 | if (sdp->sd_vfs->s_flags & MS_SYNCHRONOUS) |
114 | gfs2_log_flush(sdp, NULL); | 117 | gfs2_log_flush(sdp, NULL); |