All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] GFS2: Don't try to end a non-existent transaction in unlink
       [not found] <381737769.4752688.1517245618092.JavaMail.zimbra@redhat.com>
@ 2018-01-29 17:07 ` Bob Peterson
  2018-01-29 17:11   ` Andreas Gruenbacher
  0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2018-01-29 17:07 UTC (permalink / raw)
  To: cluster-devel.redhat.com

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 <rpeterso@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:



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [Cluster-devel] GFS2: Don't try to end a non-existent transaction in unlink
  2018-01-29 17:07 ` [Cluster-devel] GFS2: Don't try to end a non-existent transaction in unlink Bob Peterson
@ 2018-01-29 17:11   ` Andreas Gruenbacher
  0 siblings, 0 replies; 2+ messages in thread
From: Andreas Gruenbacher @ 2018-01-29 17:11 UTC (permalink / raw)
  To: cluster-devel.redhat.com

On 29 January 2018 at 18:07, Bob Peterson <rpeterso@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 <rpeterso@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



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-01-29 17:11 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <381737769.4752688.1517245618092.JavaMail.zimbra@redhat.com>
2018-01-29 17:07 ` [Cluster-devel] GFS2: Don't try to end a non-existent transaction in unlink Bob Peterson
2018-01-29 17:11   ` Andreas Gruenbacher

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.