Bob,

On Fri, Jan 3, 2020 at 4:33 PM Bob Peterson <[email protected]> wrote:
> Several gfs2 functions failed to reserve enough revoke entries for their
> transactions in the journal. Function gfs2_trans_remove_revoke unconditionally
> decrements tr->tr_num_revoke, and if not enough revokes are reserved, the
> value goes from 0 to  4294967295 (-1, but it's an unsigned int). This is later
> re-added to the system-wide revoke numbers, thereby decrementing the value
> (sd_log_commited_revoke) "properly," but by accident. This worked properly
> most of the time because one transaction would reserve space for revokes,
> then it would be merged with the system transaction (sdp->sd_log_tr) and it
> usually did not run out, because you can hold a lot of revoke entries
> per log descriptor block. Some of the code, such as gfs2_write_revokes, would
> work around this and somehow got it right most of the time. However, some
> jdata tests with xfstests generic/269 encountered problems when it actually
> ran out.
>
> This patch is part of a series that tries to do proper accounting of revokes.
>
> This patch adds the needed revoke entries to function leaf_dealloc.

it seems this patch should be safe to add to for-next (with a fixed
patch description). Can you do so?

> Signed-off-by: Bob Peterson <[email protected]>
> ---
>  fs/gfs2/dir.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/fs/gfs2/dir.c b/fs/gfs2/dir.c
> index eb9c0578978f..dfc3a3fa894d 100644
> --- a/fs/gfs2/dir.c
> +++ b/fs/gfs2/dir.c
> @@ -2031,7 +2031,8 @@ static int leaf_dealloc(struct gfs2_inode *dip, u32 
> index, u32 len,
>
>         error = gfs2_trans_begin(sdp,
>                         rg_blocks + (DIV_ROUND_UP(size, sdp->sd_jbsize) + 1) +
> -                       RES_DINODE + RES_STATFS + RES_QUOTA, l_blocks);
> +                       RES_DINODE + RES_STATFS + RES_QUOTA, RES_DINODE +
> +                                l_blocks);
>         if (error)
>                 goto out_rg_gunlock;
>
> --
> 2.24.1

Thanks,
Andreas


Reply via email to