| From a8b1ee8bafc765ebf029d03c5479a69aebff9693 Mon Sep 17 00:00:00 2001 |
| From: Eric Sandeen <sandeen@sandeen.net> |
| Date: Mon, 13 Oct 2014 10:21:53 +1100 |
| Subject: xfs: fix agno increment in xfs_inumbers() loop |
| |
| From: Eric Sandeen <sandeen@sandeen.net> |
| |
| commit a8b1ee8bafc765ebf029d03c5479a69aebff9693 upstream. |
| |
| caused a regression in xfs_inumbers, which in turn broke |
| xfsdump, causing incomplete dumps. |
| |
| The loop in xfs_inumbers() needs to fill the user-supplied |
| buffers, and iterates via xfs_btree_increment, reading new |
| ags as needed. |
| |
| But the first time through the loop, if xfs_btree_increment() |
| succeeds, we continue, which triggers the ++agno at the bottom |
| of the loop, and we skip to soon to the next ag - without |
| the proper setup under next_ag to read the next ag. |
| |
| Fix this by removing the agno increment from the loop conditional, |
| and only increment agno if we have actually hit the code under |
| the next_ag: target. |
| |
| Signed-off-by: Eric Sandeen <sandeen@redhat.com> |
| Reviewed-by: Dave Chinner <dchinner@redhat.com> |
| Signed-off-by: Dave Chinner <david@fromorbit.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| fs/xfs/xfs_itable.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/fs/xfs/xfs_itable.c |
| +++ b/fs/xfs/xfs_itable.c |
| @@ -639,7 +639,8 @@ next_ag: |
| xfs_buf_relse(agbp); |
| agbp = NULL; |
| agino = 0; |
| - } while (++agno < mp->m_sb.sb_agcount); |
| + agno++; |
| + } while (agno < mp->m_sb.sb_agcount); |
| |
| if (!error) { |
| if (bufidx) { |