xfs: xfs_trans_read_buf() should return an error on failure
When inside a transaction and we fail to read a buffer, xfs_trans_read_buf returns a null buffer pointer and no error. xfs_do_da_buf() checks the error return, but not the buffer, and as a result this read failure condition causes a panic when it attempts to dereference the non-existant buffer. Make xfs_trans_read_buf() return the same error for this situation regardless of whether it is in a transaction or not. This means every caller does not need to check both the error return and the buffer before proceeding to use the buffer. Signed-off-by: Dave Chinner <dchinner@redhat.com> Reviewed-by: Alex Elder <aelder@sgi.com>
This commit is contained in:
parent
1bfd8d0419
commit
7401aafd50
|
@ -383,7 +383,8 @@ xfs_trans_read_buf(
|
||||||
bp = xfs_buf_read(target, blkno, len, flags | XBF_DONT_BLOCK);
|
bp = xfs_buf_read(target, blkno, len, flags | XBF_DONT_BLOCK);
|
||||||
if (bp == NULL) {
|
if (bp == NULL) {
|
||||||
*bpp = NULL;
|
*bpp = NULL;
|
||||||
return 0;
|
return (flags & XBF_TRYLOCK) ?
|
||||||
|
0 : XFS_ERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
if (XFS_BUF_GETERROR(bp) != 0) {
|
if (XFS_BUF_GETERROR(bp) != 0) {
|
||||||
XFS_BUF_SUPER_STALE(bp);
|
XFS_BUF_SUPER_STALE(bp);
|
||||||
|
|
Loading…
Reference in New Issue