]> git.wh0rd.org - dump.git/commitdiff
Print out ext2 block number when dump encounters a read error.
authorStelian Pop <stelian@popies.net>
Mon, 10 Jun 2002 14:04:59 +0000 (14:04 +0000)
committerStelian Pop <stelian@popies.net>
Mon, 10 Jun 2002 14:04:59 +0000 (14:04 +0000)
CHANGES
compat/include/bsdcompat.h
dump/dump.8.in
dump/traverse.c

diff --git a/CHANGES b/CHANGES
index d1ad0fea00f98340049c08cebe144073696baeda..a4d1b44a8e22c5109278914126c513e9a6f4ce9f 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,13 @@
-$Id: CHANGES,v 1.180 2002/06/08 07:19:28 stelian Exp $
+$Id: CHANGES,v 1.181 2002/06/10 14:04:59 stelian Exp $
 
 
+Changes between versions 0.4b29 and 0.4b30 (released ????????????????)
+======================================================================
+
+1.     Made dump print out the ext2 logical block number in case of a read
+       error, which can be given as an argument to debugfs' ncheck command,
+       in order to find out the affected inode. Added note about this 
+       usage in dump's man page.
+       
 Changes between versions 0.4b28 and 0.4b29 (released June 8, 2002)
 ==================================================================
 
 Changes between versions 0.4b28 and 0.4b29 (released June 8, 2002)
 ==================================================================
 
index 881f50582b725fb65987aa08e0b7b58483740751..16de840c73d8531be3ee97aa5d1707911b21a1bd 100644 (file)
@@ -5,7 +5,7 @@
  *     Stelian Pop <stelian@popies.net>, 1999-2000
  *     Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
  *
  *     Stelian Pop <stelian@popies.net>, 1999-2000
  *     Stelian Pop <stelian@popies.net> - Alcôve <www.alcove.com>, 2000-2002
  *
- *     $Id: bsdcompat.h,v 1.16 2002/01/16 09:32:14 stelian Exp $
+ *     $Id: bsdcompat.h,v 1.17 2002/06/10 14:05:00 stelian Exp $
  */
 
 #include <config.h>
  */
 
 #include <config.h>
@@ -36,7 +36,8 @@
 #define powerof2(x)    ((((x)-1)&(x))==0)
 
 #define dbtob(b)       ((unsigned)(b) << DEV_BSHIFT)
 #define powerof2(x)    ((((x)-1)&(x))==0)
 
 #define dbtob(b)       ((unsigned)(b) << DEV_BSHIFT)
-#define fsbtodb(sb,b)  ((int)(((long long)b * EXT2_BLOCK_SIZE(sb->super)) / DEV_BSIZE))
+#define fsbtodb(sb,b)  ((int)(((long long)(b) * EXT2_BLOCK_SIZE((sb)->super)) / DEV_BSIZE))
+#define dbtofsb(sb,b)  ((int)(((long long)(b) * DEV_BSIZE) / EXT2_BLOCK_SIZE((sb)->super)))
 
 #define        sblock          fs
 #define fs_fsize       fragsize
 
 #define        sblock          fs
 #define fs_fsize       fragsize
index 455f8c0bdf5d7ddfc15eb57945b8ca5f7e542b0d..ef41382582b7473296f7f8265b177f2e630dbc62 100644 (file)
@@ -30,7 +30,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\"    $Id: dump.8.in,v 1.41 2002/06/05 13:29:15 stelian Exp $
+.\"    $Id: dump.8.in,v 1.42 2002/06/10 14:05:00 stelian Exp $
 .\"
 .Dd __DATE__
 .Dt DUMP 8
 .\"
 .Dd __DATE__
 .Dt DUMP 8
@@ -568,6 +568,21 @@ on the filesystem are ignored. If noticing
 read errors is important, the output from dump can be parsed to look for lines
 that contain the text 'read error'.
 .Pp
 read errors is important, the output from dump can be parsed to look for lines
 that contain the text 'read error'.
 .Pp
+When a read error occurs,
+.Nm
+prints out the corresponding physical disk block and sector number and the
+ext2 logical block number.
+It doesn't print out the corresponing file name or even the inode number. 
+The user has to use 
+.Xr debugfs 8 ,
+commands
+.Pa ncheck
+and
+.Pa icheck
+to translate the
+.Pa ext2blk
+number printed out by dump into an inode number, then into a file name.
+.Pp
 Each reel requires a new process, so parent processes for
 reels already written just hang around until the entire tape
 is written.
 Each reel requires a new process, so parent processes for
 reels already written just hang around until the entire tape
 is written.
index 09bcded2f35e22e261255596253205179e889a4f..cfa16b339871f01eea497ddbe626f052c2b126e4 100644 (file)
@@ -41,7 +41,7 @@
 
 #ifndef lint
 static const char rcsid[] =
 
 #ifndef lint
 static const char rcsid[] =
-       "$Id: traverse.c,v 1.46 2002/05/16 21:22:36 stelian Exp $";
+       "$Id: traverse.c,v 1.47 2002/06/10 14:05:00 stelian Exp $";
 #endif /* not lint */
 
 #include <config.h>
 #endif /* not lint */
 
 #include <config.h>
@@ -51,6 +51,7 @@ static const char rcsid[] =
 #include <string.h>
 #include <unistd.h>
 #endif
 #include <string.h>
 #include <unistd.h>
 #endif
+#include <errno.h>
 
 #include <sys/param.h>
 #include <sys/stat.h>
 
 #include <sys/param.h>
 #include <sys/stat.h>
@@ -1278,7 +1279,6 @@ void
 bread(daddr_t blkno, char *buf, int size)
 {
        int cnt, i;
 bread(daddr_t blkno, char *buf, int size)
 {
        int cnt, i;
-       extern int errno;
 
 loop:
 #ifdef __linux__
 
 loop:
 #ifdef __linux__
@@ -1306,11 +1306,12 @@ loop:
                goto loop;
        }
        if (cnt == -1)
                goto loop;
        }
        if (cnt == -1)
-               msg("read error from %s: %s: [block %d]: count=%d\n",
-                       disk, strerror(errno), blkno, size);
+               msg("read error from %s: %s: [block %d, ext2blk %d]: count=%d\n",
+                       disk, strerror(errno), blkno, 
+                       dbtofsb(sblock, blkno), size);
        else
        else
-               msg("short read error from %s: [block %d]: count=%d, got=%d\n",
-                       disk, blkno, size, cnt);
+               msg("short read error from %s: [block %d, ext2blk %d]: count=%d, got=%d\n",
+                       disk, blkno, dbtofsb(sblock, blkno), size, cnt);
        if (++breaderrors > breademax) {
                msg("More than %d block read errors from %d\n",
                        breademax, disk);
        if (++breaderrors > breademax) {
                msg("More than %d block read errors from %d\n",
                        breademax, disk);
@@ -1338,11 +1339,12 @@ loop:
                if ((cnt = read(diskfd, buf, (int)dev_bsize)) == dev_bsize)
                        continue;
                if (cnt == -1) {
                if ((cnt = read(diskfd, buf, (int)dev_bsize)) == dev_bsize)
                        continue;
                if (cnt == -1) {
-                       msg("read error from %s: %s: [sector %d]: count=%d\n",
-                               disk, strerror(errno), blkno, dev_bsize);
+                       msg("read error from %s: %s: [sector %d, ext2blk %d]: count=%d\n",
+                               disk, strerror(errno), blkno, 
+                               dbtofsb(sblock, blkno), dev_bsize);
                        continue;
                }
                        continue;
                }
-               msg("short read error from %s: [sector %d]: count=%d, got=%d\n",
-                       disk, blkno, dev_bsize, cnt);
+               msg("short read error from %s: [sector %d, ext2blk %d]: count=%d, got=%d\n",
+                       disk, blkno, dbtofsb(sblock, blkno), dev_bsize, cnt);
        }
 }
        }
 }