On Wed, Oct 22, 2008 at 05:10:02PM +1100, Dave Chinner wrote:
> XFS: handle memory allocation failures during log initialisation
>
> When there is no memory left in the system, xfs_buf_get_noaddr()
> can fail. If this happens at mount time during xlog_alloc_log()
> we fail to catch the error and oops.
>
> Catch the error from xfs_buf_get_noaddr(), and allow other memory
> allocations to fail and catch those errors too. Report the error
> to the console and fail the mount with ENOMEM.
>
> Tested by manually injecting errors into xfs_buf_get_noaddr() and
> xlog_alloc_log().
>
> Signed-off-by: Dave Chinner <david@xxxxxxxxxxxxx>
> ---
> fs/xfs/xfs_log.c | 38 ++++++++++++++++++++++++++++++++++++--
> 1 files changed, 36 insertions(+), 2 deletions(-)
>
> diff --git a/fs/xfs/xfs_log.c b/fs/xfs/xfs_log.c
> index 5184017..1dfa5fe 100644
> --- a/fs/xfs/xfs_log.c
> +++ b/fs/xfs/xfs_log.c
> - log = (xlog_t *)kmem_zalloc(sizeof(xlog_t), KM_SLEEP);
> + log = (xlog_t *)kmem_zalloc(sizeof(xlog_t), KM_MAYFAIL);
You might want to remove the cast when you touch that line anyway.
> for (i=0; i < log->l_iclog_bufs; i++) {
> *iclogp = (xlog_in_core_t *)
> - kmem_zalloc(sizeof(xlog_in_core_t), KM_SLEEP);
> + kmem_zalloc(sizeof(xlog_in_core_t), KM_MAYFAIL);
Same here.
Modulo those nitpicks this looks good.
|