xfs
[Top] [All Lists]

Re: [PATCH] Handle ENOMEM during log initialisation

To: xfs@xxxxxxxxxxx
Subject: Re: [PATCH] Handle ENOMEM during log initialisation
From: Christoph Hellwig <hch@xxxxxxxxxxxxx>
Date: Wed, 22 Oct 2008 06:11:46 -0400
In-reply-to: <20081022061002.GG18495@disturbed>
References: <20081022061002.GG18495@disturbed>
User-agent: Mutt/1.5.18 (2008-05-17)
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.

<Prev in Thread] Current Thread [Next in Thread>