| From fe1e222f17f0ad62ecaa765987cfcd14eab68a7b Mon Sep 17 00:00:00 2001 |
| From: Eric Sandeen <sandeen@sandeen.net> |
| Date: Mon, 5 Dec 2016 12:31:50 +1100 |
| Subject: [PATCH] xfs: pass state not whichfork to trace_xfs_extlist |
| |
| commit 7710517fc37b1899722707883b54694ea710b3c0 upstream. |
| |
| When xfs_bmap_trace_exlist called trace_xfs_extlist, |
| it sent in the "whichfork" var instead of the bmap "state" |
| as expected (even though state was already set up for this |
| purpose). |
| |
| As a result, the xfs_bmap_class in tracing code used |
| "whichfork" not state in xfs_iext_state_to_fork(), and got |
| the wrong ifork pointer. It all goes downhill from |
| there, including an ASSERT when ifp_bytes is empty |
| by the time it reaches xfs_iext_get_ext(): |
| |
| XFS: Assertion failed: idx < ifp->if_bytes / sizeof(xfs_bmbt_rec_t) |
| |
| Signed-off-by: Eric Sandeen <sandeen@redhat.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Signed-off-by: Dave Chinner <david@fromorbit.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c |
| index fe3fd1290c65..86491aa7d854 100644 |
| --- a/fs/xfs/libxfs/xfs_bmap.c |
| +++ b/fs/xfs/libxfs/xfs_bmap.c |
| @@ -513,7 +513,7 @@ xfs_bmap_trace_exlist( |
| ifp = XFS_IFORK_PTR(ip, whichfork); |
| ASSERT(cnt == xfs_iext_count(ifp)); |
| for (idx = 0; idx < cnt; idx++) |
| - trace_xfs_extlist(ip, idx, whichfork, caller_ip); |
| + trace_xfs_extlist(ip, idx, state, caller_ip); |
| } |
| |
| /* |
| -- |
| 2.10.1 |
| |