GFS2: Don't try to end a non-existent transaction in unlink
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>
This commit is contained in:
Родитель
4519eaad72
Коммит
2eb5909dee
|
@ -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:
|
||||
|
|
Загрузка…
Ссылка в новой задаче