From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Gruenbacher Date: Fri, 10 Jan 2020 13:23:41 +0100 Subject: [Cluster-devel] [GFS2 PATCH 1/6] gfs2: revoke cleanup: leaf_dealloc In-Reply-To: <20200103153123.402971-2-rpeterso@redhat.com> References: <20200103153123.402971-1-rpeterso@redhat.com> <20200103153123.402971-2-rpeterso@redhat.com> Message-ID: List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Bob, On Fri, Jan 3, 2020 at 4:33 PM Bob Peterson 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 > --- > 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