On Sat, 5 Aug 2000, Tigran Aivazian wrote:
> Hi guys,
>
> It is very late and so the report is vague but simple.
>
> a) Boot 2.4.0-test6-pre2.
>
> b) take a DDS-2 tape with 4G of stuff tar'ed onto it
>
> c) start untarring the tape into ext2 filesystem. The drive is Seagate
> DDS2 Model: Python 04687-XXX Rev: 6610.
>
> d) it will lockup. Alt-Sysrq works and shows lots of interesting stuff
> (e.g. looping EIP but I was so busy that I didn't note this info down -
> maybe tomorrow will retry the experiment)
>
> repeat the same procedure (after reboot and fsck) - it will lockup exactly
> in the same place where it did before. Do it again - it will lockup in the
> same place again.
OK, folks, could those who had lockups on -pre2 try the following patch?
Bug hits if you are adding a directly-addressed block (either data or
indirect one; it must be addressed from i_data) to inode in the first
cylinder group on a filesystem that has zero ->s_first_data_block.
--- fs/ext2/inode.c Fri Aug 4 21:14:23 2000
+++ fs/ext2/inode.c Fri Aug 4 21:16:27 2000
@@ -348,10 +348,13 @@
static inline unsigned long ext2_find_goal(struct inode *inode,
long block,
Indirect chain[4],
- Indirect *partial)
+ Indirect *partial,
+ int *err)
{
unsigned long goal = 0;
+ *err = -EAGAIN;
+
/* Writer: ->i_next_alloc* */
if (block == inode->u.ext2_i.i_next_alloc_block + 1) {
inode->u.ext2_i.i_next_alloc_block++;
@@ -368,6 +371,7 @@
goal = inode->u.ext2_i.i_next_alloc_goal;
if (!goal)
goal = ext2_find_near(inode, partial);
+ *err = 0;
}
/* Reader: end */
return goal;
@@ -577,8 +581,8 @@
if (err == -EAGAIN)
goto changed;
- goal = ext2_find_goal(inode, iblock, chain, partial);
- if (!goal)
+ goal = ext2_find_goal(inode, iblock, chain, partial, &err);
+ if (err)
goto changed;
left = (chain + depth) - partial;
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Fri Aug 04 2000 - 21:26:12 EDT