On 12/12/16 4:14 PM, Dave Chinner wrote: > On Mon, Dec 12, 2016 at 04:00:26PM -0600, Eric Sandeen wrote: >> Jason reported that a corrupted filesystem failed to replay >> the log with a metadata block out of bounds warning: >> >> XFS (dm-2): _xfs_buf_find: Block out of range: block 0x80270fff8, EOFS 0x9c40000 >> >> _xfs_buf_find() and xfs_btree_get_bufs() return NULL if >> that happens, and then when xfs_alloc_fix_freelist() calls >> xfs_trans_binval() on that NULL bp, we oops with: >> >> BUG: unable to handle kernel NULL pointer dereference at 00000000000000f8 >> >> We don't handle _xfs_buf_find errors very well, every >> caller higher up the stack gets to guess at why it failed. >> But we should at least handle it somehow. I chose EIO here >> for lack of a better idea. :) >> >> Reported-by: Jason L Tibbitts III <tibbs@xxxxxxxxxxx> >> Signed-off-by: Eric Sandeen <sandeen@xxxxxxxxxx> >> --- >> >> diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c >> index effb64c..d125135 100644 >> --- a/fs/xfs/libxfs/xfs_alloc.c >> +++ b/fs/xfs/libxfs/xfs_alloc.c >> @@ -1640,6 +1640,10 @@ STATIC int xfs_alloc_ag_vextent_small(xfs_alloc_arg_t *, >> >> bp = xfs_btree_get_bufs(args->mp, args->tp, >> args->agno, fbno, 0); >> + if (!bp) { >> + error = -EIO; >> + goto error0; >> + } > > If this happens, it's because the filesystem is corrupted, not > because we had an IO error. -EFSCORRUPTED is more appropriate here, > as the comment in _xfs_buf_find() says... Ok, I thought I saw other places set EIO and ENOMEM, but it doesn't matter to me ... I'll resend w/ -EFSCORRUPTED. Thanks, -Eric > Cheers, > > Dave. > -- To unsubscribe from this list: send the line "unsubscribe linux-xfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html