Hjälp med att applicera trasig patch...

Här diskuteras programmering och utveckling
Emil.s
Inlägg: 6633
Blev medlem: 12 dec 2006, 23:20
OS: Ubuntu
Ort: /Dalarna/Hedemora/
Kontakt:

Hjälp med att applicera trasig patch...

Inlägg av Emil.s »

Håller på att försöka få igång Ext4 på min root disk, men för att få det att funka så lär man patcha grub, annars kan man inte kärnan läsas in...

Grub hittar ni här:
ftp://alpha.gnu.org/gnu/grub/grub-0.97.tar.gz

Patchen finns i original här:
http://www.mail-archive.com/bug-grub@gn ... 11458.html

Dock så verkar det som att långa rader har kortats ner... Har försökt att göra något åt det själv, men det funkar inte helt... Min patch finns på:
ftp://sandnabba.se/grub-Ext4-patch

Men när man försöker att patcha så får man:
Hunk #4 FAILED at 307.
1 out of 4 hunks FAILED -- saving rejects to file stage2/fsys_ext2fs.c.rej
stage2/fsys_ext2fs.c.rej:

Kod: Markera allt

root@Sandnabba.se: /usr/src/grub-0.97 #> cat stage2/fsys_ext2fs.c.rej
*************** ext2fs_block_map (int logical_block)
*** 366,471 ****
      }
    printf ("logical block %d\n", logical_block);
  #endif /* E2DEBUG */
-   /* standard ext2 inode */
-   if (!(INODE->i_flags & EXT4_EXTENTS_FL))
      {
-       /* if it is directly pointed to by the inode, return that physical addr */
-       if (logical_block < EXT2_NDIR_BLOCKS)
-         {
- #ifdef E2DEBUG
-           printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block]));
-           printf ("returning %d\n", INODE->i_block[logical_block]);
- #endif /* E2DEBUG */
-           return INODE->i_block[logical_block];
-         }
-       /* else */
-       logical_block -= EXT2_NDIR_BLOCKS;
-       /* try the indirect block */
-       if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK))
-         {
-           if (mapblock1 != 1
-          && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1))
-        {
-          errnum = ERR_FSYS_CORRUPT;
-          return -1;
-        }
-           mapblock1 = 1;
-           return ((__u32 *) DATABLOCK1)[logical_block];
-         }
-       /* else */
-       logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK);
-       /* now try the double indirect block */
-       if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)))
-         {
-           int bnum;
-           if (mapblock1 != 2
-          && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1))
-        {
-          errnum = ERR_FSYS_CORRUPT;
-          return -1;
-        }
-           mapblock1 = 2;
-           if ((bnum = (((__u32 *) DATABLOCK1)
-                   [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)]))
-          != mapblock2
-          && !ext2_rdfsb (bnum, DATABLOCK2))
-        {
-          errnum = ERR_FSYS_CORRUPT;
-          return -1;
-        }
-           mapblock2 = bnum;
-           return ((__u32 *) DATABLOCK2)
-             [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
-         }
-       /* else */
-       mapblock2 = -1;
-       logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2));
-       if (mapblock1 != 3
-           && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1))
-         {
-           errnum = ERR_FSYS_CORRUPT;
-           return -1;
-         }
-       mapblock1 = 3;
-       if (!ext2_rdfsb (((__u32 *) DATABLOCK1)
-                   [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)
-                                      * 2)],
-                   DATABLOCK2))
-         {
-           errnum = ERR_FSYS_CORRUPT;
-           return -1;
-         }
-       if (!ext2_rdfsb (((__u32 *) DATABLOCK2)
-                   [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK))
-                    & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)],
-                   DATABLOCK2))
-         {
-           errnum = ERR_FSYS_CORRUPT;
-           return -1;
-         }
        return ((__u32 *) DATABLOCK2)
-        [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
      }
-   /* inode is in extents format */
-   else
      {
-       int i;
-       struct ext4_extent_header *extent_hdr = ext4_recurse_extent_index((struct ext4_extent_header *) INODE->i_block, logical_block);
-       struct ext4_extent *extent = (struct ext4_extent *) (extent_hdr + 1);
-       if ( extent_hdr == NULL || extent_hdr->eh_magic != EXT4_EXT_MAGIC)
-       {
-         errnum = ERR_FSYS_CORRUPT;
-         return -1;
-       }
-       for (i = 0; i<extent_hdr->eh_entries; i++)
-         {
-           if (extent[i].ee_block <= logical_block && logical_block < extent[i].ee_block + extent[i].ee_len && !(extent[i].ee_len>>15))
-             return (logical_block - extent[i].ee_block + extent[i].ee_start);
-         }
-       /* We should not arrive here */
        errnum = ERR_FSYS_CORRUPT;
        return -1;
      }
  }

  /* preconditions: all preconds of ext2fs_block_map */
--- 307,389 ----
      }
    printf ("logical block %d\n", logical_block);
  #endif /* E2DEBUG */
+
+   /* if it is directly pointed to by the inode, return that physical addr */
+   if (logical_block < EXT2_NDIR_BLOCKS)
+     {
+ #ifdef E2DEBUG
+       printf ("returning %d\n", (unsigned char *) (INODE->i_block[logical_block]));
+       printf ("returning %d\n", INODE->i_block[logical_block]);
+ #endif /* E2DEBUG */
+       return INODE->i_block[logical_block];
+     }
+   /* else */
+   logical_block -= EXT2_NDIR_BLOCKS;
+   /* try the indirect block */
+   if (logical_block < EXT2_ADDR_PER_BLOCK (SUPERBLOCK))
      {
+       if (mapblock1 != 1
+          && !ext2_rdfsb (INODE->i_block[EXT2_IND_BLOCK], DATABLOCK1))
+        {
+          errnum = ERR_FSYS_CORRUPT;
+          return -1;
+        }
+       mapblock1 = 1;
+       return ((__u32 *) DATABLOCK1)[logical_block];
+     }
+   /* else */
+   logical_block -= EXT2_ADDR_PER_BLOCK (SUPERBLOCK);
+   /* now try the double indirect block */
+   if (logical_block < (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2)))
+     {
+       int bnum;
+       if (mapblock1 != 2
+          && !ext2_rdfsb (INODE->i_block[EXT2_DIND_BLOCK], DATABLOCK1))
+        {
+          errnum = ERR_FSYS_CORRUPT;
+          return -1;
+        }
+       mapblock1 = 2;
+       if ((bnum = (((__u32 *) DATABLOCK1)
+                   [logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)]))
+          != mapblock2
+          && !ext2_rdfsb (bnum, DATABLOCK2))
+        {
+          errnum = ERR_FSYS_CORRUPT;
+          return -1;
+        }
+       mapblock2 = bnum;
        return ((__u32 *) DATABLOCK2)
+        [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
+     }
+   /* else */
+   mapblock2 = -1;
+   logical_block -= (1 << (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK) * 2));
+   if (mapblock1 != 3
+       && !ext2_rdfsb (INODE->i_block[EXT2_TIND_BLOCK], DATABLOCK1))
+     {
+       errnum = ERR_FSYS_CORRUPT;
+       return -1;
      }
+   mapblock1 = 3;
+   if (!ext2_rdfsb (((__u32 *) DATABLOCK1)
+                   [logical_block >> (EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK)
+                                      * 2)],
+                   DATABLOCK2))
+     {
+       errnum = ERR_FSYS_CORRUPT;
+       return -1;
+     }
+   if (!ext2_rdfsb (((__u32 *) DATABLOCK2)
+                   [(logical_block >> EXT2_ADDR_PER_BLOCK_BITS (SUPERBLOCK))
+                    & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)],
+                   DATABLOCK2))
      {
        errnum = ERR_FSYS_CORRUPT;
        return -1;
      }
+   return ((__u32 *) DATABLOCK2)
+     [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)];
  }

  /* preconditions: all preconds of ext2fs_block_map */
Någon idé om hur man får till det?
Home sweet ~/ = http://sandnabba.se
Emil.s
Inlägg: 6633
Blev medlem: 12 dec 2006, 23:20
OS: Ubuntu
Ort: /Dalarna/Hedemora/
Kontakt:

Re: Hjälp med att applicera trasig patch...

Inlägg av Emil.s »

Glöm det... Hittade patchen på Mandrivas forum. Hittar inte adressen nu dock...
Home sweet ~/ = http://sandnabba.se
Användarvisningsbild
Xappe
Inlägg: 463
Blev medlem: 16 dec 2005, 20:24
OS: Ubuntu
Utgåva: 12.04 Precise Pangolin LTS
Ort: Uppsala

Re: Hjälp med att applicera trasig patch...

Inlägg av Xappe »

annars kan du väl ha en bootpartition med ett annat filsystem, så borde inte grub ha nåt problem...
vanum est vobis ante lucem surgere
Emil.s
Inlägg: 6633
Blev medlem: 12 dec 2006, 23:20
OS: Ubuntu
Ort: /Dalarna/Hedemora/
Kontakt:

Re: Hjälp med att applicera trasig patch...

Inlägg av Emil.s »

Xappe skrev:annars kan du väl ha en bootpartition med ett annat filsystem, så borde inte grub ha nåt problem...
Jo, trodde det jag med. Dock så funkade det ändå inte med denna... Verkara vara något med init systemet (men ubuntu kör ju uppstart?!).
Aja, Ext4 diskussionen fortsätter här:
http://ubuntu-se.org/phpBB3/viewtopic.php?f=55&t=32656
Home sweet ~/ = http://sandnabba.se
Skriv svar

Återgå till "Programmering och webbdesign"