xfs
[Top] [All Lists]

Re: [patch] xfsprogs: unhandled error check in libxfs_trans_read_buf

To: xfs@xxxxxxxxxxx
Subject: Re: [patch] xfsprogs: unhandled error check in libxfs_trans_read_buf
From: Ajeet Yadav <ajeet.yadav.77@xxxxxxxxx>
Date: Mon, 7 Feb 2011 10:08:47 +0900
Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:in-reply-to:references:date :message-id:subject:from:to:content-type:content-transfer-encoding; bh=zIRfbgPpuhPy52VCpj0fzuTWq0V/sG1ZrGovpqRc6sg=; b=YCcnc3gb5l+LuEh0MxGM7vfCgAXxKKLo7HMcRfzm0IKnZVMUMfEOck60Vmcd1JevY0 aDavPoX3WiR/geYXv0lFQEgTM7V/2SDRByztWQV9n2jrgpxKjFOFipq1U0HXn3lbWlJb 6O3mqT/Of2nR5xWj7AsYK3Bqko0R6/ijRwOvU=
Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=YhpJEgrXeWhEJmtmxS+azlSu8+f7k6PnXX+NX6j6CyGOKqyxcIw0iG2gqsRe57+lfK 1ZmBcml2LeTcan9vqcamzr+o6wFo3BkCchRqux1qsN93IOqofBI0Of4wo344emcEZpDC iVS7BcLyb92PUqigPBFNozKvN5mfwOGLx+SC8=
In-reply-to: <AANLkTim2nm9SXPmpRUmK8eWxXYFkPcrzc-gw2ceJ-m2-@xxxxxxxxxxxxxx>
References: <AANLkTim2nm9SXPmpRUmK8eWxXYFkPcrzc-gw2ceJ-m2-@xxxxxxxxxxxxxx>
Dear Community,
Our testing team reported one issue, we found it was related to libxfs
and resolved it.
I thought to share my experience with you, but did not receive any comment.

On Thu, Feb 3, 2011 at 3:17 PM, Ajeet Yadav <ajeet.yadav.77@xxxxxxxxx> wrote:
> xfsprogs: unhandled error check in libxfs_trans_read_buf
>
> libxfs_trans_read_buf() is used in both mkfs.xfs & xfs_repair.
> During stability testing we found some time occur pagefault in mkfs.xfs,
> code inspection shows that if libxfs_readbuf() fails then occurs a
> page fault in xfs_buf_item_init() called in libxfs_trans_read_buf().
>
> mkfs.xfs: unhandled page fault (11) at 0x00000070, code 0x017
>
> Added NULL check and errno handling.
>
> Signed-off-by: Ajeet Yadav <ajeet.yadav.77@xxxxxxxxx>
>
> diff -Nurp xfsprogs/libxfs/rdwr.c xfsprogs-dirty/libxfs/rdwr.c
> --- xfsprogs/libxfs/rdwr.c      2011-01-28 20:22:11.000000000 +0900
> +++ xfsprogs-dirty/libxfs/rdwr.c        2011-02-02 16:59:16.000000000 +0900
> @@ -207,10 +207,11 @@ libxfs_trace_readbuf(const char *func, c
>  {
>        xfs_buf_t       *bp = libxfs_readbuf(dev, blkno, len, flags);
>
> -       bp->b_func = func;
> -       bp->b_file = file;
> -       bp->b_line = line;
> -
> +       if (bp){
> +               bp->b_func = func;
> +               bp->b_file = file;
> +               bp->b_line = line;
> +       }
>        return bp;
>  }
>
> @@ -485,6 +486,7 @@ libxfs_readbuf(dev_t dev, xfs_daddr_t bl
>                error = libxfs_readbufr(dev, blkno, bp, len, flags);
>                if (error) {
>                        libxfs_putbuf(bp);
> +                       errno = error;
>                        return NULL;
>                }
>        }
> diff -Nurp xfsprogs/libxfs/trans.c xfsprogs-dirty/libxfs/trans.c
> --- xfsprogs/libxfs/trans.c     2011-01-28 20:22:11.000000000 +0900
> +++ xfsprogs-dirty/libxfs/trans.c       2011-02-02 17:00:42.000000000 +0900
> @@ -508,6 +508,10 @@ libxfs_trans_read_buf(
>        }
>
>        bp = libxfs_readbuf(dev, blkno, len, flags);
> +       if (!bp){
> +               *bpp = NULL;
> +               return errno;
> +       }
>  #ifdef XACT_DEBUG
>        fprintf(stderr, "trans_read_buf buffer %p, transaction %p\n", bp, tp);
>  #endif
>

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