From: Remy CARD (card@masi.ibp.fr)
Date: 07/21/92


From: card@masi.ibp.fr (Remy CARD)
Subject: Patch for ext fs
Date: Tue, 21 Jul 1992 16:24:15 GMT


        Hi,

        Enclosed is a patch for the ext file system needed to correct
two bugs :
        1/ reported by Paul Douglas Page in comp.os.linux : ext fs
           caused a kernel panic when running out of inodes,
        2/ reported by Eric Youngdale in the mailing list : rename
           sometimes caused files to disappear under certains
           circumstances.

        The patch is very little, so I send it in ascii form. It
should be applied to linux 0.96c-2 in the directory where the
ext fs code resides (normally /usr/src/linux/fs/ext).

        Remy.

=========================Cut Here ===========================
*** ../../../../linux-0.96c-2/linux/fs/ext/freelists.c Mon Jul 20 13:26:51 1992
--- freelists.c Tue Jul 21 18:47:40 1992
***************
*** 267,273 ****
  printk("ext_free_inode: inode empty, skipping to %d\n", efi->next);
  #endif
                j = (unsigned long) inode->i_sb->s_imap[0];
! if (efi->next < 1 || efi->next > inode->i_sb->s_ninodes) {
                        printk ("efi->next = %d\n", efi->next);
                        panic ("ext_new_inode: bad inode number in free list\n");
                }
--- 267,273 ----
  printk("ext_free_inode: inode empty, skipping to %d\n", efi->next);
  #endif
                j = (unsigned long) inode->i_sb->s_imap[0];
! if (efi->next > inode->i_sb->s_ninodes) {
                        printk ("efi->next = %d\n", efi->next);
                        panic ("ext_new_inode: bad inode number in free list\n");
                }
*** ../../../../linux-0.96c-2/linux/fs/ext/namei.c Mon Jul 20 13:27:56 1992
--- namei.c Tue Jul 21 18:47:40 1992
***************
*** 845,852 ****
  /* ok, that's it */
        old_de->inode = 0;
        old_de->name_len = 0;
- ext_merge_entries (old_de, pde, nde);
        new_de->inode = old_inode->i_ino;
        if (new_inode) {
                new_inode->i_nlink--;
                new_inode->i_dirt = 1;
--- 845,852 ----
  /* ok, that's it */
        old_de->inode = 0;
        old_de->name_len = 0;
        new_de->inode = old_inode->i_ino;
+ ext_merge_entries (old_de, pde, nde);
        if (new_inode) {
                new_inode->i_nlink--;
                new_inode->i_dirt = 1;
=========================Cut Here ===========================