On 29 January 2018 at 18:07, Bob Peterson <rpete...@redhat.com> wrote: > Hi, > > Before this patch, if function gfs2_unlink failed to get a valid > transaction (for example, not enough journal blocks) it would go > to label out_end_trans which did gfs2_trans_end. But if the > trans_begin failed, there's no transaction to end, and trying to > do so results in: kernel BUG at fs/gfs2/trans.c:117! > > This patch changes the goto so that it does not try to end a > non-existent transaction. > > Signed-off-by: Bob Peterson <rpete...@redhat.com> > --- > fs/gfs2/inode.c | 5 ++--- > 1 file changed, 2 insertions(+), 3 deletions(-) > > diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c > index 20281992d456..59e0560180ec 100644 > --- a/fs/gfs2/inode.c > +++ b/fs/gfs2/inode.c > @@ -1152,12 +1152,11 @@ static int gfs2_unlink(struct inode *dir, struct > dentry *dentry) > > error = gfs2_trans_begin(sdp, 2*RES_DINODE + 3*RES_LEAF + RES_RG_BIT, > 0); > if (error) > - goto out_end_trans; > + goto out_gunlock; > > error = gfs2_unlink_inode(dip, dentry); > - > -out_end_trans: > gfs2_trans_end(sdp); > + > out_gunlock: > gfs2_glock_dq(ghs + 2); > out_rgrp:
Confirmed. Thanks, Andrea