All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Javier Martín" <lordhabbit@gmail.com>
To: The development of GRUB 2 <grub-devel@gnu.org>
Subject: Re: grub-probe detects ext4 wronly as ext2
Date: Mon, 30 Jun 2008 14:12:17 +0200	[thread overview]
Message-ID: <1214827937.9353.43.camel@localhost> (raw)
In-Reply-To: <4868C017.8040004@isaac.cedarswampstudios.org>


[-- Attachment #1.1: Type: text/plain, Size: 1611 bytes --]

El lun, 30-06-2008 a las 07:14 -0400, Isaac Dupree escribió:
> > +#define EXT3_FEATURE_INCOMPAT_RECOVER		0x0004 /* Needs recovery */
> 
> > +#define EXT2_DRIVER_SUPPORTED_INCOMPAT ( EXT2_FEATURE_INCOMPAT_FILETYPE )
> 
> I suspect this will mean that journalled ext3 when the system crashed 
> (so the filesystem "needs recovery" from the journal) won't load.  (Of 
> course, properly speaking that would load grub's code to replay the 
> journal...)  But I think that (without other changes) that would make 
> the system unbootable every time there was a power outage?  (Of course 
> it was not guaranteed to load correctly when ignoring the journal when 
> it needed recovery, but it was likely to work, IIUC.)
> 
> -Isaac

As I said, I didn't add it because I didn't know whether recovery was
supported or not. _Theoretically_ we should focus on correctness and
refuse to read such a filesystem, but here goes a workaround for
incompatible features that we do not support but still willingly want to
ignore for the sake of "compatibility". This new version of the patch
adds another macro, EXT2_DRIVER_IGNORED_INCOMPAT where we can put
features that we don't fully support, but still want a filesystem with
them to be mounted, like the needs_recover flag.

Of course, this is risky: INCOMPAT_* features are so for a reason, but
it will allow dirty ext3 filesystems to be mounted until we have a
working journal implementation. I had thought of adding some kind of
warning, but since GRUB mounts and umounts filesystems constantly, it
just cluttered the screen and I removed it.

[-- Attachment #1.2: ext4_unrecognized.diff --]
[-- Type: text/x-patch, Size: 2948 bytes --]

Index: fs/ext2.c
===================================================================
RCS file: /sources/grub/grub2/fs/ext2.c,v
retrieving revision 1.26
diff -u -r1.26 ext2.c
--- fs/ext2.c	16 Jun 2008 19:02:07 -0000	1.26
+++ fs/ext2.c	30 Jun 2008 12:07:56 -0000
@@ -71,7 +71,37 @@
          ? EXT2_GOOD_OLD_INODE_SIZE \
          : grub_le_to_cpu16 (data->sblock.inode_size))
 
-#define EXT3_FEATURE_COMPAT_HAS_JOURNAL	0x0004
+/* Superblock filesystem feature flags (RW compatible) */
+#define EXT2_FEATURE_COMPAT_DIR_PREALLOC	0x0001
+#define EXT2_FEATURE_COMPAT_IMAGIC_INODES	0x0002
+#define EXT3_FEATURE_COMPAT_HAS_JOURNAL		0x0004
+#define EXT2_FEATURE_COMPAT_EXT_ATTR		0x0008
+#define EXT2_FEATURE_COMPAT_RESIZE_INODE	0x0010
+#define EXT2_FEATURE_COMPAT_DIR_INDEX		0x0020
+/* Superblock filesystem feature flags (RO compatible) */
+#define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER	0x0001
+#define EXT2_FEATURE_RO_COMPAT_LARGE_FILE	0x0002
+#define EXT2_FEATURE_RO_COMPAT_BTREE_DIR	0x0004
+#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM		0x0010
+#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK	0x0020
+#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE	0x0040
+/* Superblock filesystem feature flags (back-incompatible) */
+#define EXT2_FEATURE_INCOMPAT_COMPRESSION	0x0001
+#define EXT2_FEATURE_INCOMPAT_FILETYPE		0x0002
+#define EXT3_FEATURE_INCOMPAT_RECOVER		0x0004 /* Needs recovery */
+#define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV	0x0008 /* Journal device */
+#define EXT2_FEATURE_INCOMPAT_META_BG		0x0010
+#define EXT4_FEATURE_INCOMPAT_EXTENTS		0x0040 /* extents support */
+#define EXT4_FEATURE_INCOMPAT_64BIT		0x0080
+#define EXT4_FEATURE_INCOMPAT_FLEX_BG		0x0200
+
+/* The set of back-incompatible features this driver DOES support. Add (OR)
+ * flags here as the related features are implemented into the driver */
+#define EXT2_DRIVER_SUPPORTED_INCOMPAT ( EXT2_FEATURE_INCOMPAT_FILETYPE )
+/* The set of back-incompatible features this driver DOES NOT support but are
+ * ignored for some hackish reason. Flags here should be here _temporarily_!
+ * Remember that INCOMPAT_* features are so for a reason! */
+#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER )
 
 #define EXT3_JOURNAL_MAGIC_NUMBER	0xc03b3998U
 
@@ -394,6 +424,11 @@
   if (grub_le_to_cpu16 (data->sblock.magic) != EXT2_MAGIC)
     goto fail;
   
+  /* Check the FS doesn't have feature bits enabled that we don't support */
+  if (grub_le_to_cpu32 (data->sblock.feature_incompat)
+      & ~(EXT2_DRIVER_SUPPORTED_INCOMPAT | EXT2_DRIVER_IGNORED_INCOMPAT))
+    goto fail;
+  
   data->disk = disk;
 
   data->diropen.data = data;
@@ -409,7 +444,8 @@
   return data;
 
  fail:
-  grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem");
+  grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem, or incompatible"
+                               "features enabled (extents, etc.)");
   grub_free (data);
   return 0;
 }

[-- Attachment #2: Esta parte del mensaje está firmada digitalmente --]
[-- Type: application/pgp-signature, Size: 827 bytes --]

  reply	other threads:[~2008-06-30 12:12 UTC|newest]

Thread overview: 68+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-29 18:11 grub-probe detects ext4 wronly as ext2 Felix Zielcke
2008-06-29 18:46 ` Javier Martín
2008-06-29 19:17   ` Bean
2008-06-29 19:53     ` Javier Martín
2008-06-29 21:19       ` Robert Millan
2008-06-30  3:02         ` Javier Martín
2008-06-30  7:10           ` Felix Zielcke
2008-06-30 11:14           ` Isaac Dupree
2008-06-30 12:12             ` Javier Martín [this message]
2008-06-30 12:27               ` Bean
2008-06-30 12:43                 ` Javier Martín
2008-07-01 16:08                 ` Robert Millan
2008-07-01 16:25                   ` Pavel Roskin
2008-07-01 18:42                     ` Javier Martín
2008-07-01 19:01                       ` Pavel Roskin
2008-07-01 20:48                       ` Robert Millan
2008-07-01 23:05                         ` Javier Martín
2008-07-01 23:28                         ` Javier Martín
2008-07-02 14:22                           ` Robert Millan
2008-07-02 16:03                             ` Pavel Roskin
2008-07-02 19:32                             ` Javier Martín
2008-07-03 14:02                               ` Robert Millan
2008-07-03 14:21                                 ` Isaac Dupree
2008-07-03 17:07                                 ` Javier Martín
2008-07-04  0:08                                   ` Robert Millan
2008-07-04  1:20                                     ` Javier Martín
2008-08-05 17:23                                       ` Felix Zielcke
2008-08-06 10:36                                         ` Felix Zielcke
2008-08-11  0:35                                           ` Javier Martín
2008-08-11  7:56                                             ` Felix Zielcke
2008-07-04  1:32                                     ` Javier Martín
2008-07-04  6:49                                       ` Bean
2008-07-04  8:33                                         ` Felix Zielcke
2008-07-04 10:34                                         ` Javier Martín
2008-07-04 11:29                                           ` Bean
2008-07-04 12:00                                             ` Javier Martín
2008-07-04 14:09                                               ` Robert Millan
2008-07-04 14:33                                                 ` Javier Martín
2008-07-04 14:11                                               ` Bean
2008-07-04 14:34                                                 ` Javier Martín
2008-07-04 14:04                                           ` Robert Millan
2008-07-04 14:23                                             ` Robert Millan
2008-07-04 14:21                                       ` Robert Millan
2008-07-04 14:45                                         ` Javier Martín
2008-07-04 18:57                                           ` Robert Millan
2008-07-04 20:41                                             ` Javier Martín
2008-07-05 12:07                                               ` Robert Millan
2008-07-05 18:36                                                 ` Javier Martín
2008-07-16 15:09                                                   ` Javier Martín
2008-07-16 15:27                                                     ` Felix Zielcke
2008-07-16 16:38                                                       ` Javier Martín
2008-07-16 17:13                                                         ` Felix Zielcke
2008-07-16 17:21                                                           ` Felix Zielcke
2008-07-16 17:44                                                             ` Felix Zielcke
2008-07-16 19:07                                                               ` Javier Martín
2008-07-16 19:33                                                                 ` Felix Zielcke
2008-07-19 14:27                                                   ` Robert Millan
2008-08-11 14:14                                                     ` Javier Martín
2008-08-27 13:58                                                       ` Felix Zielcke
2008-08-30 11:17                                                       ` Robert Millan
2008-08-30 21:28                                                         ` Javier Martín
2008-09-24 17:05                                                           ` Javier Martín
2009-02-04  7:41                                                       ` Felix Zielcke
2009-02-04 13:08                                                         ` Javier Martín
2009-02-07 19:30                                                           ` Felix Zielcke
2009-02-07 23:54                                                             ` Javier Martín
2009-02-08  0:28                                                               ` Robert Millan
2008-07-01 16:03           ` Robert Millan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1214827937.9353.43.camel@localhost \
    --to=lordhabbit@gmail.com \
    --cc=grub-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.