xfs: only trace buffer items if they exist
authorDave Chinner <dchinner@redhat.com>
Mon, 9 Feb 2015 22:23:40 +0000 (09:23 +1100)
committerDave Chinner <david@fromorbit.com>
Mon, 9 Feb 2015 22:23:40 +0000 (09:23 +1100)
The commit 2d3d0c5 ("xfs: lobotomise xfs_trans_read_buf_map()") left
a landmine in the tracing code: trace_xfs_trans_buf_read() is now
call on all buffers that are read through this interface rather than
just buffers in transactions. For buffers outside transaction
context, bp->b_fspriv is null, and so the buf log item tracing
functions cannot be called. This causes a NULL pointer dereference
in the trace_xfs_trans_buf_read() function when tracing is turned
on.

cc: <stable@vger.kernel.org>
Signed-off-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Brian Foster <bfoster@redhat.com>
Signed-off-by: Dave Chinner <david@fromorbit.com>
fs/xfs/xfs_trans_buf.c

index 0a4d4ab6d9a9f61af49f133a15b0b97dbe41cd46..75798412859a7ba2f47b01945c54b7ee82ff4e7e 100644 (file)
@@ -327,9 +327,10 @@ xfs_trans_read_buf_map(
                return -EIO;
        }
 
-       if (tp)
+       if (tp) {
                _xfs_trans_bjoin(tp, bp, 1);
-       trace_xfs_trans_read_buf(bp->b_fspriv);
+               trace_xfs_trans_read_buf(bp->b_fspriv);
+       }
        *bpp = bp;
        return 0;