Save away errno for a later error return before possibly overwriting it in fprintf. Signed-off-by: Christoph Hellwig <hch@xxxxxx> Index: xfsprogs-dev/libxfs/rdwr.c =================================================================== --- xfsprogs-dev.orig/libxfs/rdwr.c 2011-09-20 20:41:09.000000000 +0000 +++ xfsprogs-dev/libxfs/rdwr.c 2011-09-20 20:43:28.000000000 +0000 @@ -454,15 +454,17 @@ libxfs_readbufr(dev_t dev, xfs_daddr_t b { int fd = libxfs_device_to_fd(dev); int bytes = BBTOB(len); + int error; ASSERT(BBTOB(len) <= bp->b_bcount); if (pread64(fd, bp->b_addr, bytes, LIBXFS_BBTOOFF64(blkno)) < 0) { + error = errno; fprintf(stderr, _("%s: read failed: %s\n"), - progname, strerror(errno)); + progname, strerror(error)); if (flags & LIBXFS_EXIT_ON_FAILURE) exit(1); - return errno; + return error; } #ifdef IO_DEBUG printf("%lx: %s: read %u bytes, blkno=%llu(%llu), %p\n", @@ -498,14 +500,16 @@ libxfs_writebufr(xfs_buf_t *bp) { int sts; int fd = libxfs_device_to_fd(bp->b_dev); + int error; sts = pwrite64(fd, bp->b_addr, bp->b_bcount, LIBXFS_BBTOOFF64(bp->b_blkno)); if (sts < 0) { + error = errno; fprintf(stderr, _("%s: pwrite64 failed: %s\n"), - progname, strerror(errno)); + progname, strerror(error)); if (bp->b_flags & LIBXFS_B_EXIT) exit(1); - return errno; + return error; } else if (sts != bp->b_bcount) { fprintf(stderr, _("%s: error - wrote only %d of %d bytes\n"), _______________________________________________ xfs mailing list xfs@xxxxxxxxxxx http://oss.sgi.com/mailman/listinfo/xfs