[patch] xfsprogs: unhandled error check in libxfs_trans_read_buf
Ajeet Yadav
ajeet.yadav.77 at gmail.com
Thu Feb 3 00:17:24 CST 2011
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 at gmail.com>
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
More information about the xfs
mailing list