e2fsck hanging

Brian Davidson bdavids1 at gmu.edu
Tue Mar 13 14:59:43 UTC 2007


On Mar 13, 2007, at 9:53 AM, Theodore Tso wrote:

> At a first glance your report looks vaguely like this bugreport:
>
> http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=411838
>
> I've been crazy busy the last few weeks so I haven't had a chance to
> look at it yet.  There is a suggested fix in the above bug report, but
> not a patch, and I haven't had time to validate it yet.
>
> Regards,
>
> 						- Ted

Yes, that's the same issue.  We reduced the issue to a floating point  
precision issue too:

main()
{
float range;
double range2;
unsigned int ino, lowval, highval;
int high, low;

ino=732562070;
lowval= 2;
highval = 732562081;
high=57402135;
low=0;

range = ((float) (ino - lowval)) / (highval - lowval);

printf("range=%f\n",range);
}

It outputs 1.0, rather than .99999...

We're trying the suggested fix from the bug report.  It'll take about  
6 hours or so to get to that point.  Here's specifically what we're  
doing:

--- e2fsprogs-1.39/lib/ext2fs/icount.c  2005-09-06 05:40:14.000000000  
-0400
+++ e2fsprogs-1.39-test/lib/ext2fs/icount.c     2007-03-13  
10:56:19.000000000 -0400
@@ -251,6 +251,10 @@
                                 range = ((float) (ino - lowval)) /
                                         (highval - lowval);
                         mid = low + ((int) (range * (high-low)));
+                       if (mid > high)
+                               mid = high;
+                       if (mid < low)
+                               mid = low;
                 }
#endif
                 if (ino == icount->list[mid].ino) {





More information about the Ext3-users mailing list