grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

OCFS2 support


From: Mark Fasheh
Subject: OCFS2 support
Date: Thu, 3 Nov 2005 14:15:42 -0800
User-agent: Mutt/1.5.11

Hi,
        Attached is a diff which adds OCFS2 support for GRUB 2. I used the
Ext2 and XFS drivers as templates while developing the OCFS2 code. Also, I
used the 2005-09-28 patch by Marco Gerards (which added XFS support) as a
template for my build system changes.

Things have been tested mostly using grub-emu - this should be able to read
any OCFS2 inode, including those which have a b-tree. It's also been tested
under multiple block / cluster size combinations. Typically I 'cat' a few
large files, 'cmp' some others and follow a few symlinks to verify that
everything is working.

I've tried to test an actual kernel boot but I get an error telling me that
the kernel is too large (it's typically about 1.4 megs). Trying to boot an
identical kernel file under ext2 gives me the same message. So I don't think
that's an OCFS2 problem. Any help with that would be appreciated. Otherwise,
even from boot I can still ls, cat, cmp, etc my OCFS2 file systems just
fine.

Comments are appreciated :)
        --Mark

--
Mark Fasheh
Senior Software Developer, Oracle
address@hidden

diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/ChangeLog ./ChangeLog
--- ../tmp/grub2/ChangeLog      2005-10-27 20:14:31.000000000 -0700
+++ ./ChangeLog 2005-11-03 12:17:20.737439000 -0800
@@ -1,3 +1,32 @@
+2005-11-03  Mark Fasheh  <address@hidden>
+
+       Adds support for the OCFS2 filesystem.
+
+       * fs/ocfs2.c: New file.
+
+       * DISTLIST: Added `fs/ocfs2.c'.
+
+       * conf/i386-pc.rmk (grub_setup_SOURCES): Add `fs/ocfs2.c'.
+       (grub_probefs_SOURCES): Likewise.
+       (grub_emu_SOURCES): Likewise.
+       (pkgdata_MODULES): Add `ocfs2.mod'.
+       (ocfs2_mod_SOURCES): New variable.
+       (ocfs2_mod_CFLAGS): Likewise.
+
+       * conf/powerpc-ieee1275.rmk (grub_emu_SOURCES): Add `fs/ocfs2.c'.
+       (pkgdata_MODULES): Add `ocfs2.mod'.
+       (ocfs2_mod_SOURCES): New variable.
+       (ocfs2_mod_CFLAGS): Likewise.
+
+       * util/grub-emu.c (main): Call `grub_ocfs2_init' and
+       `grub_ocfs2_fini'.
+
+       * include/grub/fs.h (grub_ocfs2_init): New prototype.
+       (grub_ocfs2_fini): Likewise.
+
+       * util/i386/pc/grub-probefs.c Call grub_ocfs2_init and
+       grub_ocfs2_fini.
+
 2005-10-28  Yoshinori K. Okuji  <address@hidden>
 
        From Timothy Baldwin:
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/conf/i386-pc.mk ./conf/i386-pc.mk
--- ../tmp/grub2/conf/i386-pc.mk        2005-10-24 03:23:46.000000000 -0700
+++ ./conf/i386-pc.mk   2005-11-03 12:20:39.552552000 -0800
@@ -322,11 +322,11 @@ grub_setup_SOURCES = util/i386/pc/grub-s
        util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \
        kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c  \
        fs/sfs.c kern/parser.c kern/partition.c partmap/pc.c \
-       fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/file.c kern/fs.c kern/env.c 
fs/fshelp.c
-CLEANFILES += grub-setup grub_setup-util_i386_pc_grub_setup.o 
grub_setup-util_i386_pc_biosdisk.o grub_setup-util_misc.o 
grub_setup-util_i386_pc_getroot.o grub_setup-kern_device.o 
grub_setup-kern_disk.o grub_setup-kern_err.o grub_setup-kern_misc.o 
grub_setup-fs_fat.o grub_setup-fs_ext2.o grub_setup-fs_xfs.o 
grub_setup-fs_affs.o grub_setup-fs_sfs.o grub_setup-kern_parser.o 
grub_setup-kern_partition.o grub_setup-partmap_pc.o grub_setup-fs_ufs.o 
grub_setup-fs_minix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o 
grub_setup-kern_file.o grub_setup-kern_fs.o grub_setup-kern_env.o 
grub_setup-fs_fshelp.o
-MOSTLYCLEANFILES += grub_setup-util_i386_pc_grub_setup.d 
grub_setup-util_i386_pc_biosdisk.d grub_setup-util_misc.d 
grub_setup-util_i386_pc_getroot.d grub_setup-kern_device.d 
grub_setup-kern_disk.d grub_setup-kern_err.d grub_setup-kern_misc.d 
grub_setup-fs_fat.d grub_setup-fs_ext2.d grub_setup-fs_xfs.d 
grub_setup-fs_affs.d grub_setup-fs_sfs.d grub_setup-kern_parser.d 
grub_setup-kern_partition.d grub_setup-partmap_pc.d grub_setup-fs_ufs.d 
grub_setup-fs_minix.d grub_setup-fs_hfs.d grub_setup-fs_jfs.d 
grub_setup-kern_file.d grub_setup-kern_fs.d grub_setup-kern_env.d 
grub_setup-fs_fshelp.d
+       fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c fs/ocfs2.c kern/file.c kern/fs.c 
kern/env.c fs/fshelp.c
+CLEANFILES += grub-setup grub_setup-util_i386_pc_grub_setup.o 
grub_setup-util_i386_pc_biosdisk.o grub_setup-util_misc.o 
grub_setup-util_i386_pc_getroot.o grub_setup-kern_device.o 
grub_setup-kern_disk.o grub_setup-kern_err.o grub_setup-kern_misc.o 
grub_setup-fs_fat.o grub_setup-fs_ext2.o grub_setup-fs_xfs.o 
grub_setup-fs_affs.o grub_setup-fs_sfs.o grub_setup-kern_parser.o 
grub_setup-kern_partition.o grub_setup-partmap_pc.o grub_setup-fs_ufs.o 
grub_setup-fs_minix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o 
grub_setup-fs_ocfs2.o grub_setup-kern_file.o grub_setup-kern_fs.o 
grub_setup-kern_env.o grub_setup-fs_fshelp.o
+MOSTLYCLEANFILES += grub_setup-util_i386_pc_grub_setup.d 
grub_setup-util_i386_pc_biosdisk.d grub_setup-util_misc.d 
grub_setup-util_i386_pc_getroot.d grub_setup-kern_device.d 
grub_setup-kern_disk.d grub_setup-kern_err.d grub_setup-kern_misc.d 
grub_setup-fs_fat.d grub_setup-fs_ext2.d grub_setup-fs_xfs.d 
grub_setup-fs_affs.d grub_setup-fs_sfs.d grub_setup-kern_parser.d 
grub_setup-kern_partition.d grub_setup-partmap_pc.d grub_setup-fs_ufs.d 
grub_setup-fs_minix.d grub_setup-fs_hfs.d grub_setup-fs_jfs.d 
grub_setup-fs_ocfs2.d grub_setup-kern_file.d grub_setup-kern_fs.d 
grub_setup-kern_env.d grub_setup-fs_fshelp.d
 
-grub-setup: grub_setup-util_i386_pc_grub_setup.o 
grub_setup-util_i386_pc_biosdisk.o grub_setup-util_misc.o 
grub_setup-util_i386_pc_getroot.o grub_setup-kern_device.o 
grub_setup-kern_disk.o grub_setup-kern_err.o grub_setup-kern_misc.o 
grub_setup-fs_fat.o grub_setup-fs_ext2.o grub_setup-fs_xfs.o 
grub_setup-fs_affs.o grub_setup-fs_sfs.o grub_setup-kern_parser.o 
grub_setup-kern_partition.o grub_setup-partmap_pc.o grub_setup-fs_ufs.o 
grub_setup-fs_minix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o 
grub_setup-kern_file.o grub_setup-kern_fs.o grub_setup-kern_env.o 
grub_setup-fs_fshelp.o
+grub-setup: grub_setup-util_i386_pc_grub_setup.o 
grub_setup-util_i386_pc_biosdisk.o grub_setup-util_misc.o 
grub_setup-util_i386_pc_getroot.o grub_setup-kern_device.o 
grub_setup-kern_disk.o grub_setup-kern_err.o grub_setup-kern_misc.o 
grub_setup-fs_fat.o grub_setup-fs_ext2.o grub_setup-fs_xfs.o 
grub_setup-fs_affs.o grub_setup-fs_sfs.o grub_setup-kern_parser.o 
grub_setup-kern_partition.o grub_setup-partmap_pc.o grub_setup-fs_ufs.o 
grub_setup-fs_minix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o 
grub_setup-fs_ocfs2.o grub_setup-kern_file.o grub_setup-kern_fs.o 
grub_setup-kern_env.o grub_setup-fs_fshelp.o
        $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_setup_LDFLAGS)
 
 grub_setup-util_i386_pc_grub_setup.o: util/i386/pc/grub-setup.c
@@ -489,6 +489,14 @@ grub_setup-fs_jfs.d: fs/jfs.c
 
 -include grub_setup-fs_jfs.d
 
+grub_setup-fs_ocfs2.o: fs/ocfs2.c
+       $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_setup_CFLAGS) -c -o $@ $<
+
+grub_setup-fs_ocfs2.d: fs/ocfs2.c
+       set -e;           $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) 
$(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_setup_CFLAGS) -M $<      | sed 
's,ocfs2\.o[ :]*,grub_setup-fs_ocfs2.o $@ : ,g' > $@;     [ -s $@ ] || rm -f $@
+
+-include grub_setup-fs_ocfs2.d
+
 grub_setup-kern_file.o: kern/file.c
        $(BUILD_CC) -Ikern -I$(srcdir)/kern $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_setup_CFLAGS) -c -o $@ $<
 
@@ -553,11 +561,11 @@ grub_probefs_SOURCES = util/i386/pc/grub
        kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c       \
        fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c  \
        fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c   \
-       fs/xfs.c fs/affs.c fs/sfs.c
-CLEANFILES += grub-probefs grub_probefs-util_i386_pc_grub_probefs.o 
grub_probefs-util_i386_pc_biosdisk.o grub_probefs-util_misc.o 
grub_probefs-util_i386_pc_getroot.o grub_probefs-kern_device.o 
grub_probefs-kern_disk.o grub_probefs-kern_err.o grub_probefs-kern_misc.o 
grub_probefs-fs_fat.o grub_probefs-fs_ext2.o grub_probefs-kern_parser.o 
grub_probefs-kern_partition.o grub_probefs-partmap_pc.o grub_probefs-fs_ufs.o 
grub_probefs-fs_minix.o grub_probefs-fs_hfs.o grub_probefs-fs_jfs.o 
grub_probefs-kern_fs.o grub_probefs-kern_env.o grub_probefs-fs_fshelp.o 
grub_probefs-fs_xfs.o grub_probefs-fs_affs.o grub_probefs-fs_sfs.o
-MOSTLYCLEANFILES += grub_probefs-util_i386_pc_grub_probefs.d 
grub_probefs-util_i386_pc_biosdisk.d grub_probefs-util_misc.d 
grub_probefs-util_i386_pc_getroot.d grub_probefs-kern_device.d 
grub_probefs-kern_disk.d grub_probefs-kern_err.d grub_probefs-kern_misc.d 
grub_probefs-fs_fat.d grub_probefs-fs_ext2.d grub_probefs-kern_parser.d 
grub_probefs-kern_partition.d grub_probefs-partmap_pc.d grub_probefs-fs_ufs.d 
grub_probefs-fs_minix.d grub_probefs-fs_hfs.d grub_probefs-fs_jfs.d 
grub_probefs-kern_fs.d grub_probefs-kern_env.d grub_probefs-fs_fshelp.d 
grub_probefs-fs_xfs.d grub_probefs-fs_affs.d grub_probefs-fs_sfs.d
+       fs/xfs.c fs/affs.c fs/sfs.c fs/ocfs2.c
+CLEANFILES += grub-probefs grub_probefs-util_i386_pc_grub_probefs.o 
grub_probefs-util_i386_pc_biosdisk.o grub_probefs-util_misc.o 
grub_probefs-util_i386_pc_getroot.o grub_probefs-kern_device.o 
grub_probefs-kern_disk.o grub_probefs-kern_err.o grub_probefs-kern_misc.o 
grub_probefs-fs_fat.o grub_probefs-fs_ext2.o grub_probefs-kern_parser.o 
grub_probefs-kern_partition.o grub_probefs-partmap_pc.o grub_probefs-fs_ufs.o 
grub_probefs-fs_minix.o grub_probefs-fs_hfs.o grub_probefs-fs_jfs.o 
grub_probefs-kern_fs.o grub_probefs-kern_env.o grub_probefs-fs_fshelp.o 
grub_probefs-fs_xfs.o grub_probefs-fs_affs.o grub_probefs-fs_sfs.o 
grub_probefs-fs_ocfs2.o
+MOSTLYCLEANFILES += grub_probefs-util_i386_pc_grub_probefs.d 
grub_probefs-util_i386_pc_biosdisk.d grub_probefs-util_misc.d 
grub_probefs-util_i386_pc_getroot.d grub_probefs-kern_device.d 
grub_probefs-kern_disk.d grub_probefs-kern_err.d grub_probefs-kern_misc.d 
grub_probefs-fs_fat.d grub_probefs-fs_ext2.d grub_probefs-kern_parser.d 
grub_probefs-kern_partition.d grub_probefs-partmap_pc.d grub_probefs-fs_ufs.d 
grub_probefs-fs_minix.d grub_probefs-fs_hfs.d grub_probefs-fs_jfs.d 
grub_probefs-kern_fs.d grub_probefs-kern_env.d grub_probefs-fs_fshelp.d 
grub_probefs-fs_xfs.d grub_probefs-fs_affs.d grub_probefs-fs_sfs.d 
grub_probefs-fs_ocfs2.d
 
-grub-probefs: grub_probefs-util_i386_pc_grub_probefs.o 
grub_probefs-util_i386_pc_biosdisk.o grub_probefs-util_misc.o 
grub_probefs-util_i386_pc_getroot.o grub_probefs-kern_device.o 
grub_probefs-kern_disk.o grub_probefs-kern_err.o grub_probefs-kern_misc.o 
grub_probefs-fs_fat.o grub_probefs-fs_ext2.o grub_probefs-kern_parser.o 
grub_probefs-kern_partition.o grub_probefs-partmap_pc.o grub_probefs-fs_ufs.o 
grub_probefs-fs_minix.o grub_probefs-fs_hfs.o grub_probefs-fs_jfs.o 
grub_probefs-kern_fs.o grub_probefs-kern_env.o grub_probefs-fs_fshelp.o 
grub_probefs-fs_xfs.o grub_probefs-fs_affs.o grub_probefs-fs_sfs.o
+grub-probefs: grub_probefs-util_i386_pc_grub_probefs.o 
grub_probefs-util_i386_pc_biosdisk.o grub_probefs-util_misc.o 
grub_probefs-util_i386_pc_getroot.o grub_probefs-kern_device.o 
grub_probefs-kern_disk.o grub_probefs-kern_err.o grub_probefs-kern_misc.o 
grub_probefs-fs_fat.o grub_probefs-fs_ext2.o grub_probefs-kern_parser.o 
grub_probefs-kern_partition.o grub_probefs-partmap_pc.o grub_probefs-fs_ufs.o 
grub_probefs-fs_minix.o grub_probefs-fs_hfs.o grub_probefs-fs_jfs.o 
grub_probefs-kern_fs.o grub_probefs-kern_env.o grub_probefs-fs_fshelp.o 
grub_probefs-fs_xfs.o grub_probefs-fs_affs.o grub_probefs-fs_sfs.o 
grub_probefs-fs_ocfs2.o
        $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_probefs_LDFLAGS)
 
 grub_probefs-util_i386_pc_grub_probefs.o: util/i386/pc/grub-probefs.c
@@ -744,6 +752,14 @@ grub_probefs-fs_sfs.d: fs/sfs.c
 
 -include grub_probefs-fs_sfs.d
 
+grub_probefs-fs_ocfs2.o: fs/ocfs2.c
+       $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_probefs_CFLAGS) -c -o $@ $<
+
+grub_probefs-fs_ocfs2.d: fs/ocfs2.c
+       set -e;           $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) 
$(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_probefs_CFLAGS) -M $<    | sed 
's,ocfs2\.o[ :]*,grub_probefs-fs_ocfs2.o $@ : ,g' > $@;           [ -s $@ ] || 
rm -f $@
+
+-include grub_probefs-fs_ocfs2.d
+
 
 # For grub-emu.
 grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c       \
@@ -753,7 +769,7 @@ grub_emu_SOURCES = commands/boot.c comma
        commands/i386/pc/halt.c commands/i386/pc/reboot.c               \
        disk/loopback.c                                                 \
        fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c  \
-       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c                  \
+       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs/ocfs2.c       \
        io/gzio.c                                                       \
        kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c       \
        kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c     \
@@ -765,10 +781,10 @@ grub_emu_SOURCES = commands/boot.c comma
        util/console.c util/grub-emu.c util/misc.c                      \
        util/i386/pc/biosdisk.c util/i386/pc/getroot.c                  \
        util/i386/pc/misc.c
-CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_search.o 
grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o 
grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_affs.o 
grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o 
grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o 
grub_emu-fs_ufs.o grub_emu-fs_xfs.o grub_emu-io_gzio.o grub_emu-kern_device.o 
grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o 
grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o 
grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_parser.o 
grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o 
grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o 
grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o 
grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o 
grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o 
grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o 
grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o 
grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o
-MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d 
grub_emu-commands_cmp.d grub_emu-commands_configfile.d 
grub_emu-commands_default.d grub_emu-commands_help.d 
grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_search.d 
grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d 
grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_affs.d 
grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d 
grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_sfs.d 
grub_emu-fs_ufs.d grub_emu-fs_xfs.d grub_emu-io_gzio.d grub_emu-kern_device.d 
grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d 
grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d 
grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_parser.d 
grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d 
grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d 
grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d 
grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-normal_misc.d 
grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d 
grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d 
grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d 
grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d
+CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_search.o 
grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o 
grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_affs.o 
grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o 
grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o 
grub_emu-fs_ufs.o grub_emu-fs_xfs.o grub_emu-fs_ocfs2.o grub_emu-io_gzio.o 
grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o 
grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o 
grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o 
grub_emu-kern_parser.o grub_emu-kern_partition.o grub_emu-kern_rescue.o 
grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o 
grub_emu-normal_command.o grub_emu-normal_completion.o 
grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o 
grub_emu-normal_menu_entry.o grub_emu-normal_misc.o grub_emu-partmap_amiga.o 
grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o 
grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o 
grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o 
grub_emu-util_i386_pc_misc.o
+MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d 
grub_emu-commands_cmp.d grub_emu-commands_configfile.d 
grub_emu-commands_default.d grub_emu-commands_help.d 
grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_search.d 
grub_emu-commands_timeout.d grub_emu-commands_i386_pc_halt.d 
grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopback.d grub_emu-fs_affs.d 
grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d 
grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_sfs.d 
grub_emu-fs_ufs.d grub_emu-fs_xfs.d grub_emu-fs_ocfs2.d grub_emu-io_gzio.d 
grub_emu-kern_device.d grub_emu-kern_disk.d grub_emu-kern_dl.d 
grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs.d 
grub_emu-kern_loader.d grub_emu-kern_main.d grub_emu-kern_misc.d 
grub_emu-kern_parser.d grub_emu-kern_partition.d grub_emu-kern_rescue.d 
grub_emu-kern_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d 
grub_emu-normal_command.d grub_emu-normal_completion.d 
grub_emu-normal_context.d grub_emu-normal_main.d grub_emu-normal_menu.d 
grub_emu-normal_menu_entry.d grub_emu-normal_misc.d grub_emu-partmap_amiga.d 
grub_emu-partmap_apple.d grub_emu-partmap_pc.d grub_emu-partmap_sun.d 
grub_emu-util_console.d grub_emu-util_grub_emu.d grub_emu-util_misc.d 
grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i386_pc_getroot.d 
grub_emu-util_i386_pc_misc.d
 
-grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_search.o 
grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o 
grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_affs.o 
grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o 
grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o 
grub_emu-fs_ufs.o grub_emu-fs_xfs.o grub_emu-io_gzio.o grub_emu-kern_device.o 
grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o 
grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o 
grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_parser.o 
grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o 
grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o 
grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o 
grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o 
grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o 
grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o 
grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o 
grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o
+grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_search.o 
grub_emu-commands_timeout.o grub_emu-commands_i386_pc_halt.o 
grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loopback.o grub_emu-fs_affs.o 
grub_emu-fs_ext2.o grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o 
grub_emu-fs_iso9660.o grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o 
grub_emu-fs_ufs.o grub_emu-fs_xfs.o grub_emu-fs_ocfs2.o grub_emu-io_gzio.o 
grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_dl.o 
grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o 
grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o 
grub_emu-kern_parser.o grub_emu-kern_partition.o grub_emu-kern_rescue.o 
grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o 
grub_emu-normal_command.o grub_emu-normal_completion.o 
grub_emu-normal_context.o grub_emu-normal_main.o grub_emu-normal_menu.o 
grub_emu-normal_menu_entry.o grub_emu-normal_misc.o grub_emu-partmap_amiga.o 
grub_emu-partmap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o 
grub_emu-util_console.o grub_emu-util_grub_emu.o grub_emu-util_misc.o 
grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroot.o 
grub_emu-util_i386_pc_misc.o
        $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS)
 
 grub_emu-commands_boot.o: commands/boot.c
@@ -963,6 +979,14 @@ grub_emu-fs_xfs.d: fs/xfs.c
 
 -include grub_emu-fs_xfs.d
 
+grub_emu-fs_ocfs2.o: fs/ocfs2.c
+       $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
+
+grub_emu-fs_ocfs2.d: fs/ocfs2.c
+       set -e;           $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) 
$(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $<        | sed 
's,ocfs2\.o[ :]*,grub_emu-fs_ocfs2.o $@ : ,g' > $@;       [ -s $@ ] || rm -f $@
+
+-include grub_emu-fs_ocfs2.d
+
 grub_emu-io_gzio.o: io/gzio.c
        $(BUILD_CC) -Iio -I$(srcdir)/io $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
 
@@ -1275,7 +1299,7 @@ pkgdata_MODULES = _chain.mod _linux.mod 
        apple.mod pc.mod sun.mod loopback.mod reboot.mod halt.mod       \
        help.mod default.mod timeout.mod configfile.mod vbe.mod         \
        vesafb.mod vbetest.mod vbeinfo.mod search.mod gzio.mod          \
-       terminfo.mod serial.mod xfs.mod affs.mod sfs.mod
+       terminfo.mod serial.mod xfs.mod affs.mod sfs.mod ocfs2.mod
 
 # For _chain.mod.
 _chain_mod_SOURCES = loader/i386/pc/chainloader.c
@@ -1894,6 +1918,57 @@ fs-sfs.lst: fs/sfs.c genfslist.sh
 sfs_mod_CFLAGS = $(COMMON_CFLAGS)
 sfs_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
+# For ocfs2.mod.
+ocfs2_mod_SOURCES = fs/ocfs2.c
+CLEANFILES += ocfs2.mod mod-ocfs2.o mod-ocfs2.c pre-ocfs2.o 
ocfs2_mod-fs_ocfs2.o def-ocfs2.lst und-ocfs2.lst
+MOSTLYCLEANFILES += ocfs2_mod-fs_ocfs2.d
+DEFSYMFILES += def-ocfs2.lst
+UNDSYMFILES += und-ocfs2.lst
+
+ocfs2.mod: pre-ocfs2.o mod-ocfs2.o
+       -rm -f $@
+       $(LD) $(ocfs2_mod_LDFLAGS) $(LDFLAGS) -r -d -o $@ $^
+       $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R 
.comment $@
+
+pre-ocfs2.o: ocfs2_mod-fs_ocfs2.o
+       -rm -f $@
+       $(LD) $(ocfs2_mod_LDFLAGS) -r -d -o $@ $^
+
+mod-ocfs2.o: mod-ocfs2.c
+       $(CC) $(CPPFLAGS) $(CFLAGS) $(ocfs2_mod_CFLAGS) -c -o $@ $<
+
+mod-ocfs2.c: moddep.lst genmodsrc.sh
+       sh $(srcdir)/genmodsrc.sh 'ocfs2' $< > $@ || (rm -f $@; exit 1)
+
+def-ocfs2.lst: pre-ocfs2.o
+       $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 ocfs2/' > $@
+
+und-ocfs2.lst: pre-ocfs2.o
+       echo 'ocfs2' > $@
+       $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+ocfs2_mod-fs_ocfs2.o: fs/ocfs2.c
+       $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ocfs2_mod_CFLAGS) -c 
-o $@ $<
+
+ocfs2_mod-fs_ocfs2.d: fs/ocfs2.c
+       set -e;           $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) 
$(ocfs2_mod_CFLAGS) -M $<       | sed 's,ocfs2\.o[ :]*,ocfs2_mod-fs_ocfs2.o $@ 
: ,g' > $@;      [ -s $@ ] || rm -f $@
+
+-include ocfs2_mod-fs_ocfs2.d
+
+CLEANFILES += cmd-ocfs2.lst fs-ocfs2.lst
+COMMANDFILES += cmd-ocfs2.lst
+FSFILES += fs-ocfs2.lst
+
+cmd-ocfs2.lst: fs/ocfs2.c gencmdlist.sh
+       set -e;           $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) 
$(ocfs2_mod_CFLAGS) -E $<       | sh $(srcdir)/gencmdlist.sh ocfs2 > $@ || (rm 
-f $@; exit 1)
+
+fs-ocfs2.lst: fs/ocfs2.c genfslist.sh
+       set -e;           $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) 
$(ocfs2_mod_CFLAGS) -E $<       | sh $(srcdir)/genfslist.sh ocfs2 > $@ || (rm 
-f $@; exit 1)
+
+
+ocfs2_mod_CFLAGS = $(COMMON_CFLAGS)
+ocfs2_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
 # For _linux.mod.
 _linux_mod_SOURCES = loader/i386/pc/linux.c
 CLEANFILES += _linux.mod mod-_linux.o mod-_linux.c pre-_linux.o 
_linux_mod-loader_i386_pc_linux.o def-_linux.lst und-_linux.lst
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/conf/i386-pc.rmk ./conf/i386-pc.rmk
--- ../tmp/grub2/conf/i386-pc.rmk       2005-10-24 03:23:46.000000000 -0700
+++ ./conf/i386-pc.rmk  2005-11-03 12:06:17.355857000 -0800
@@ -64,7 +64,7 @@ grub_setup_SOURCES = util/i386/pc/grub-s
        util/misc.c util/i386/pc/getroot.c kern/device.c kern/disk.c \
        kern/err.c kern/misc.c fs/fat.c fs/ext2.c fs/xfs.c fs/affs.c  \
        fs/sfs.c kern/parser.c kern/partition.c partmap/pc.c \
-       fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c kern/file.c kern/fs.c kern/env.c 
fs/fshelp.c
+       fs/ufs.c fs/minix.c fs/hfs.c fs/jfs.c fs/ocfs2.c kern/file.c kern/fs.c 
kern/env.c fs/fshelp.c
 
 # For grub-mkdevicemap.
 grub_mkdevicemap_SOURCES = util/i386/pc/grub-mkdevicemap.c util/misc.c
@@ -75,7 +75,7 @@ grub_probefs_SOURCES = util/i386/pc/grub
        kern/device.c kern/disk.c kern/err.c kern/misc.c fs/fat.c       \
        fs/ext2.c kern/parser.c kern/partition.c partmap/pc.c fs/ufs.c  \
        fs/minix.c fs/hfs.c fs/jfs.c kern/fs.c kern/env.c fs/fshelp.c   \
-       fs/xfs.c fs/affs.c fs/sfs.c
+       fs/xfs.c fs/affs.c fs/sfs.c fs/ocfs2.c
 
 # For grub-emu.
 grub_emu_SOURCES = commands/boot.c commands/cat.c commands/cmp.c       \
@@ -85,7 +85,7 @@ grub_emu_SOURCES = commands/boot.c comma
        commands/i386/pc/halt.c commands/i386/pc/reboot.c               \
        disk/loopback.c                                                 \
        fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c  \
-       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c                  \
+       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs/ocfs2.c       \
        io/gzio.c                                                       \
        kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c       \
        kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c     \
@@ -117,7 +117,7 @@ pkgdata_MODULES = _chain.mod _linux.mod 
        apple.mod pc.mod sun.mod loopback.mod reboot.mod halt.mod       \
        help.mod default.mod timeout.mod configfile.mod vbe.mod         \
        vesafb.mod vbetest.mod vbeinfo.mod search.mod gzio.mod          \
-       terminfo.mod serial.mod xfs.mod affs.mod sfs.mod
+       terminfo.mod serial.mod xfs.mod affs.mod sfs.mod ocfs2.mod
 
 # For _chain.mod.
 _chain_mod_SOURCES = loader/i386/pc/chainloader.c
@@ -184,6 +184,11 @@ sfs_mod_SOURCES = fs/sfs.c
 sfs_mod_CFLAGS = $(COMMON_CFLAGS)
 sfs_mod_LDFLAGS = $(COMMON_LDFLAGS)
 
+# For ocfs2.mod.
+ocfs2_mod_SOURCES = fs/ocfs2.c
+ocfs2_mod_CFLAGS = $(COMMON_CFLAGS)
+ocfs2_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
 # For _linux.mod.
 _linux_mod_SOURCES = loader/i386/pc/linux.c
 _linux_mod_CFLAGS = $(COMMON_CFLAGS)
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/conf/powerpc-ieee1275.mk ./conf/powerpc-ieee1275.mk
--- ../tmp/grub2/conf/powerpc-ieee1275.mk       2005-11-02 21:05:05.000000000 
-0800
+++ ./conf/powerpc-ieee1275.mk  2005-11-03 12:20:39.613552000 -0800
@@ -71,7 +71,7 @@ grub_emu_SOURCES = commands/boot.c comma
        commands/ieee1275/halt.c commands/ieee1275/reboot.c             \
        disk/loopback.c                                                 \
        fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c  \
-       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c                  \
+       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs.ocfs2.c       \
        io/gzio.c                                                       \
        kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c       \
        kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c     \
@@ -83,10 +83,10 @@ grub_emu_SOURCES = commands/boot.c comma
        util/console.c util/grub-emu.c util/misc.c                      \
        util/i386/pc/biosdisk.c util/i386/pc/getroot.c                  \
        util/powerpc/ieee1275/misc.c
-CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_search.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o 
grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o 
grub_emu-disk_loopback.o grub_emu-fs_affs.o grub_emu-fs_ext2.o 
grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o 
grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o grub_emu-fs_ufs.o 
grub_emu-fs_xfs.o grub_emu-io_gzio.o grub_emu-kern_device.o 
grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o 
grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o 
grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_parser.o 
grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o 
grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o 
grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o 
grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o 
grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o 
grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o 
grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o 
grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
-MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d 
grub_emu-commands_cmp.d grub_emu-commands_configfile.d 
grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_search.d 
grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d 
grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d 
grub_emu-disk_loopback.d grub_emu-fs_affs.d grub_emu-fs_ext2.d 
grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d 
grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_sfs.d grub_emu-fs_ufs.d 
grub_emu-fs_xfs.d grub_emu-io_gzio.d grub_emu-kern_device.d 
grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d 
grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d 
grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_parser.d 
grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d 
grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d 
grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d 
grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-normal_misc.d 
grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d 
grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d 
grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d 
grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d
+CLEANFILES += grub-emu grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_search.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o 
grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o 
grub_emu-disk_loopback.o grub_emu-fs_affs.o grub_emu-fs_ext2.o 
grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o 
grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o grub_emu-fs_ufs.o 
grub_emu-fs_xfs.o grub_emu-fs_ocfs2.o grub_emu-io_gzio.o grub_emu-kern_device.o 
grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o 
grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o 
grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_parser.o 
grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o 
grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o 
grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o 
grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o 
grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o 
grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o 
grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o 
grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
+MOSTLYCLEANFILES += grub_emu-commands_boot.d grub_emu-commands_cat.d 
grub_emu-commands_cmp.d grub_emu-commands_configfile.d 
grub_emu-commands_default.d grub_emu-commands_help.d grub_emu-commands_search.d 
grub_emu-commands_terminal.d grub_emu-commands_ls.d grub_emu-commands_timeout.d 
grub_emu-commands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d 
grub_emu-disk_loopback.d grub_emu-fs_affs.d grub_emu-fs_ext2.d 
grub_emu-fs_fat.d grub_emu-fs_fshelp.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d 
grub_emu-fs_jfs.d grub_emu-fs_minix.d grub_emu-fs_sfs.d grub_emu-fs_ufs.d 
grub_emu-fs_xfs.d grub_emu-fs_ocfs2.d grub_emu-io_gzio.d grub_emu-kern_device.d 
grub_emu-kern_disk.d grub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d 
grub_emu-kern_file.d grub_emu-kern_fs.d grub_emu-kern_loader.d 
grub_emu-kern_main.d grub_emu-kern_misc.d grub_emu-kern_parser.d 
grub_emu-kern_partition.d grub_emu-kern_rescue.d grub_emu-kern_term.d 
grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_command.d 
grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-normal_main.d 
grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-normal_misc.d 
grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partmap_pc.d 
grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_emu.d 
grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d 
grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d
 
-grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_search.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o 
grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o 
grub_emu-disk_loopback.o grub_emu-fs_affs.o grub_emu-fs_ext2.o 
grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o 
grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o grub_emu-fs_ufs.o 
grub_emu-fs_xfs.o grub_emu-io_gzio.o grub_emu-kern_device.o 
grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o 
grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o 
grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_parser.o 
grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o 
grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o 
grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o 
grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o 
grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o 
grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o 
grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o 
grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
+grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o 
grub_emu-commands_cmp.o grub_emu-commands_configfile.o 
grub_emu-commands_default.o grub_emu-commands_help.o grub_emu-commands_search.o 
grub_emu-commands_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o 
grub_emu-commands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o 
grub_emu-disk_loopback.o grub_emu-fs_affs.o grub_emu-fs_ext2.o 
grub_emu-fs_fat.o grub_emu-fs_fshelp.o grub_emu-fs_hfs.o grub_emu-fs_iso9660.o 
grub_emu-fs_jfs.o grub_emu-fs_minix.o grub_emu-fs_sfs.o grub_emu-fs_ufs.o 
grub_emu-fs_xfs.o grub_emu-fs_ocfs2.o grub_emu-io_gzio.o grub_emu-kern_device.o 
grub_emu-kern_disk.o grub_emu-kern_dl.o grub_emu-kern_env.o grub_emu-kern_err.o 
grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-kern_loader.o 
grub_emu-kern_main.o grub_emu-kern_misc.o grub_emu-kern_parser.o 
grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o 
grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o 
grub_emu-normal_completion.o grub_emu-normal_context.o grub_emu-normal_main.o 
grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o 
grub_emu-partmap_amiga.o grub_emu-partmap_apple.o grub_emu-partmap_pc.o 
grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_grub_emu.o 
grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o 
grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o
        $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS)
 
 grub_emu-commands_boot.o: commands/boot.c
@@ -281,6 +281,14 @@ grub_emu-fs_xfs.d: fs/xfs.c
 
 -include grub_emu-fs_xfs.d
 
+grub_emu-fs_ocfs2.o: fs.ocfs2.c
+       $(BUILD_CC) -I. -I$(srcdir)/. $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
+
+grub_emu-fs_ocfs2.d: fs.ocfs2.c
+       set -e;           $(BUILD_CC) -I. -I$(srcdir)/. $(BUILD_CPPFLAGS) 
$(BUILD_CFLAGS) -DGRUB_UTIL=1 $(grub_emu_CFLAGS) -M $<          | sed 
's,fs\.ocfs2\.o[ :]*,grub_emu-fs_ocfs2.o $@ : ,g' > $@;           [ -s $@ ] || 
rm -f $@
+
+-include grub_emu-fs_ocfs2.d
+
 grub_emu-io_gzio.o: io/gzio.c
        $(BUILD_CC) -Iio -I$(srcdir)/io $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) 
-DGRUB_UTIL=1 $(grub_emu_CFLAGS) -c -o $@ $<
 
@@ -810,7 +818,7 @@ pkgdata_MODULES = _linux.mod linux.mod f
        boot.mod cmp.mod cat.mod terminal.mod fshelp.mod amiga.mod apple.mod \
        pc.mod suspend.mod loopback.mod help.mod reboot.mod halt.mod sun.mod \
        default.mod timeout.mod configfile.mod search.mod gzio.mod xfs.mod \
-       affs.mod sfs.mod
+       affs.mod sfs.mod ocfs2.mod
 
 # For fshelp.mod.
 fshelp_mod_SOURCES = fs/fshelp.c
@@ -1316,6 +1324,56 @@ fs-sfs.lst: fs/sfs.c genfslist.sh
 
 sfs_mod_CFLAGS = $(COMMON_CFLAGS)
 
+# For ocfs2.mod.
+ocfs2_mod_SOURCES = fs/ocfs2.c
+CLEANFILES += ocfs2.mod mod-ocfs2.o mod-ocfs2.c pre-ocfs2.o 
ocfs2_mod-fs_ocfs2.o def-ocfs2.lst und-ocfs2.lst
+MOSTLYCLEANFILES += ocfs2_mod-fs_ocfs2.d
+DEFSYMFILES += def-ocfs2.lst
+UNDSYMFILES += und-ocfs2.lst
+
+ocfs2.mod: pre-ocfs2.o mod-ocfs2.o
+       -rm -f $@
+       $(LD) $(ocfs2_mod_LDFLAGS) $(LDFLAGS) -r -d -o $@ $^
+       $(STRIP) --strip-unneeded -K grub_mod_init -K grub_mod_fini -R .note -R 
.comment $@
+
+pre-ocfs2.o: ocfs2_mod-fs_ocfs2.o
+       -rm -f $@
+       $(LD) $(ocfs2_mod_LDFLAGS) -r -d -o $@ $^
+
+mod-ocfs2.o: mod-ocfs2.c
+       $(CC) $(CPPFLAGS) $(CFLAGS) $(ocfs2_mod_CFLAGS) -c -o $@ $<
+
+mod-ocfs2.c: moddep.lst genmodsrc.sh
+       sh $(srcdir)/genmodsrc.sh 'ocfs2' $< > $@ || (rm -f $@; exit 1)
+
+def-ocfs2.lst: pre-ocfs2.o
+       $(NM) -g --defined-only -P -p $< | sed 's/^\([^ ]*\).*/\1 ocfs2/' > $@
+
+und-ocfs2.lst: pre-ocfs2.o
+       echo 'ocfs2' > $@
+       $(NM) -u -P -p $< | cut -f1 -d' ' >> $@
+
+ocfs2_mod-fs_ocfs2.o: fs/ocfs2.c
+       $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ocfs2_mod_CFLAGS) -c 
-o $@ $<
+
+ocfs2_mod-fs_ocfs2.d: fs/ocfs2.c
+       set -e;           $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) 
$(ocfs2_mod_CFLAGS) -M $<       | sed 's,ocfs2\.o[ :]*,ocfs2_mod-fs_ocfs2.o $@ 
: ,g' > $@;      [ -s $@ ] || rm -f $@
+
+-include ocfs2_mod-fs_ocfs2.d
+
+CLEANFILES += cmd-ocfs2.lst fs-ocfs2.lst
+COMMANDFILES += cmd-ocfs2.lst
+FSFILES += fs-ocfs2.lst
+
+cmd-ocfs2.lst: fs/ocfs2.c gencmdlist.sh
+       set -e;           $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) 
$(ocfs2_mod_CFLAGS) -E $<       | sh $(srcdir)/gencmdlist.sh ocfs2 > $@ || (rm 
-f $@; exit 1)
+
+fs-ocfs2.lst: fs/ocfs2.c genfslist.sh
+       set -e;           $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) 
$(ocfs2_mod_CFLAGS) -E $<       | sh $(srcdir)/genfslist.sh ocfs2 > $@ || (rm 
-f $@; exit 1)
+
+
+ocfs2_mod_CFLAGS = $(COMMON_CFLAGS)
+
 # For _linux.mod.
 _linux_mod_SOURCES = loader/powerpc/ieee1275/linux.c
 CLEANFILES += _linux.mod mod-_linux.o mod-_linux.c pre-_linux.o 
_linux_mod-loader_powerpc_ieee1275_linux.o def-_linux.lst und-_linux.lst
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/conf/powerpc-ieee1275.rmk ./conf/powerpc-ieee1275.rmk
--- ../tmp/grub2/conf/powerpc-ieee1275.rmk      2005-11-02 21:05:05.000000000 
-0800
+++ ./conf/powerpc-ieee1275.rmk 2005-11-03 12:12:12.667484000 -0800
@@ -41,7 +41,7 @@ grub_emu_SOURCES = commands/boot.c comma
        commands/ieee1275/halt.c commands/ieee1275/reboot.c             \
        disk/loopback.c                                                 \
        fs/affs.c fs/ext2.c fs/fat.c fs/fshelp.c fs/hfs.c fs/iso9660.c  \
-       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c                  \
+       fs/jfs.c fs/minix.c fs/sfs.c fs/ufs.c fs/xfs.c fs.ocfs2.c       \
        io/gzio.c                                                       \
        kern/device.c kern/disk.c kern/dl.c kern/env.c kern/err.c       \
        kern/file.c kern/fs.c kern/loader.c kern/main.c kern/misc.c     \
@@ -84,7 +84,7 @@ pkgdata_MODULES = _linux.mod linux.mod f
        boot.mod cmp.mod cat.mod terminal.mod fshelp.mod amiga.mod apple.mod \
        pc.mod suspend.mod loopback.mod help.mod reboot.mod halt.mod sun.mod \
        default.mod timeout.mod configfile.mod search.mod gzio.mod xfs.mod \
-       affs.mod sfs.mod
+       affs.mod sfs.mod ocfs2.mod
 
 # For fshelp.mod.
 fshelp_mod_SOURCES = fs/fshelp.c
@@ -130,6 +130,10 @@ affs_mod_CFLAGS = $(COMMON_CFLAGS)
 sfs_mod_SOURCES = fs/sfs.c
 sfs_mod_CFLAGS = $(COMMON_CFLAGS)
 
+# For ocfs2.mod.
+ocfs2_mod_SOURCES = fs/ocfs2.c
+ocfs2_mod_CFLAGS = $(COMMON_CFLAGS)
+
 # For _linux.mod.
 _linux_mod_SOURCES = loader/powerpc/ieee1275/linux.c
 _linux_mod_CFLAGS = $(COMMON_CFLAGS)
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/DISTLIST ./DISTLIST
--- ../tmp/grub2/DISTLIST       2005-10-15 11:10:37.000000000 -0700
+++ ./DISTLIST  2005-11-03 11:14:05.582654000 -0800
@@ -66,6 +66,7 @@ fs/minix.c
 fs/ufs.c
 fs/sfs.c
 fs/xfs.c
+fs/ocfs2.c
 hello/hello.c
 include/grub/arg.h
 include/grub/boot.h
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/fs/ocfs2.c ./fs/ocfs2.c
--- ../tmp/grub2/fs/ocfs2.c     1969-12-31 16:00:00.000000000 -0800
+++ ./fs/ocfs2.c        2005-11-02 18:11:38.573729000 -0800
@@ -0,0 +1,692 @@
+/* ocfs2.c - Oracle Clustered File System 2 */
+/*
+ *  GRUB  --  GRand Unified Bootloader
+ *
+ *  Some of this code taken from ext2.c and xfs.c in the grub2
+ *  distribution and are copyright (C) 2003, 2004, 2005 Free Software
+ *  Foundation, Inc. The rest is Copyright (C) 2005 Oracle.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <grub/err.h>
+#include <grub/file.h>
+#include <grub/mm.h>
+#include <grub/misc.h>
+#include <grub/disk.h>
+#include <grub/dl.h>
+#include <grub/types.h>
+#include <grub/fshelp.h>
+
+/*
+ * An OCFS2 volume starts this way:
+ * Sector 0: Valid ocfs1_vol_disk_hdr that cleanly fails to mount OCFS.
+ * Sector 1: Valid ocfs1_vol_label that cleanly fails to mount OCFS.
+ * Block OCFS2_SUPER_BLOCK_BLKNO: OCFS2 superblock.
+ *
+ * All other structures are found from the superblock information.
+ *
+ * OCFS2_SUPER_BLOCK_BLKNO is in blocks, not sectors.  eg, for a
+ * blocksize of 2K, it is 4096 bytes into disk.
+ */
+#define OCFS2_SUPER_BLOCK_BLKNO                2
+
+/* Filesystem magic number */
+#define OCFS2_SUPER_MAGIC              0x7461636f
+
+#define OCFS2_SUPER_BLOCK_SIGNATURE    "OCFSV2"
+#define OCFS2_INODE_SIGNATURE          "INODE01"
+#define OCFS2_EXTENT_BLOCK_SIGNATURE   "EXBLK01"
+
+#define OCFS2_VOL_UUID_LEN             16
+#define OCFS2_MAX_VOL_LABEL_LEN                64
+
+#define OCFS2_MAX_BLOCKSIZE 4096
+
+#define OCFS2_FT_UNKNOWN       0
+#define OCFS2_FT_REG_FILE      1
+#define OCFS2_FT_DIR           2
+#define OCFS2_FT_CHRDEV                3
+#define OCFS2_FT_BLKDEV                4
+#define OCFS2_FT_FIFO          5
+#define OCFS2_FT_SOCK          6
+#define OCFS2_FT_SYMLINK       7
+
+#define OCFS2_FT_MAX           8
+
+#define S_IFMT  00170000
+#define S_IFLNK  0120000
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+
+struct grub_ocfs2_extent_rec
+{
+  grub_uint32_t e_cpos;
+  grub_uint32_t e_clusters;
+  grub_uint64_t e_blkno;
+};
+
+struct grub_ocfs2_extent_list
+{
+  grub_uint16_t l_tree_depth;
+  grub_uint16_t l_count;
+  grub_uint16_t l_next_free_rec;
+  grub_uint16_t l_reserved1;
+  grub_uint64_t l_reserved2;
+  struct grub_ocfs2_extent_rec l_recs[0];      /* Extent records */
+};
+
+struct grub_ocfs2_extent_block
+{
+  grub_uint8_t h_signature[8];
+  grub_uint64_t h_reserved1;
+  grub_uint16_t h_suballoc_slot;
+  grub_uint16_t h_suballoc_bit;
+  grub_uint32_t h_fs_generation;
+  grub_uint64_t h_blkno;
+  grub_uint64_t h_reserved3;
+  grub_uint64_t h_next_leaf_blk;
+  struct grub_ocfs2_extent_list h_list;
+};
+
+struct grub_ocfs2_sblock {
+  grub_uint16_t s_major_rev_level;
+  grub_uint16_t s_minor_rev_level;
+  grub_uint16_t s_mnt_count;
+  grub_uint16_t s_max_mnt_count;
+  grub_uint16_t s_state;
+  grub_uint16_t s_errors;
+  grub_uint32_t s_checkinterval;
+  grub_uint64_t s_lastcheck;
+  grub_uint32_t s_creator_os;
+  grub_uint32_t s_feature_compat;
+  grub_uint32_t s_feature_incompat;
+  grub_uint32_t s_feature_ro_compat;
+  grub_uint64_t s_root_blkno;
+  grub_uint64_t s_system_dir_blkno;
+  grub_uint32_t s_blocksize_bits;
+  grub_uint32_t s_clustersize_bits;
+  grub_uint16_t s_max_slots;
+  grub_uint16_t s_reserved1;
+  grub_uint32_t s_reserved2;
+  grub_uint64_t s_first_cluster_group;
+  grub_uint8_t  s_label[OCFS2_MAX_VOL_LABEL_LEN];
+  grub_uint8_t  s_uuid[OCFS2_VOL_UUID_LEN];
+} ocfs2_super_block;
+
+struct grub_ocfs2_inode {
+  grub_uint8_t i_signature[8];
+  grub_uint32_t i_generation;
+  grub_uint16_t i_suballoc_slot;
+  grub_uint16_t i_suballoc_bit;
+  grub_uint32_t i_reserved0;
+  grub_uint32_t i_clusters;
+  grub_uint32_t i_uid;
+  grub_uint32_t i_gid;
+  grub_uint64_t i_size;
+  grub_uint16_t i_mode;
+  grub_uint16_t i_links_count;
+  grub_uint32_t i_flags;
+  grub_uint64_t i_atime;
+  grub_uint64_t i_ctime;
+  grub_uint64_t i_mtime;
+  grub_uint64_t i_dtime;
+  grub_uint64_t i_blkno;
+  grub_uint64_t i_last_eb_blk;
+  grub_uint32_t i_fs_generation;
+  grub_uint32_t i_atime_nsec;
+  grub_uint32_t i_ctime_nsec;
+  grub_uint32_t i_mtime_nsec;
+  grub_uint64_t i_reserved1[9];
+  union {
+    grub_uint64_t i_pad1;
+    struct {
+      grub_uint64_t i_rdev;
+    } dev1;
+    struct {
+      grub_uint32_t i_used;
+      grub_uint32_t i_total;
+    } bitmap1;
+    struct {
+      grub_uint32_t ij_flags;
+      grub_uint32_t ij_pad;
+    } journal1;
+  } id1;
+  union {
+    /* Some union members omitted here */
+    struct grub_ocfs2_sblock       i_super;
+    struct grub_ocfs2_extent_list  i_list;
+    grub_uint8_t                   i_symlink[0];
+  } id2;
+};
+
+/* This differs from ocfs2_fs.h in that the filename field is omitted
+ * because it makes grub_ocfs2_iterate_dir easier to code. */
+struct grub_ocfs2_dir_entry {
+  grub_uint64_t   inode;
+  grub_uint16_t   rec_len;
+  grub_uint8_t    name_len;
+  grub_uint8_t    file_type;
+} __attribute__ ((packed));
+
+struct grub_fshelp_node
+{
+  struct grub_ocfs2_data *data;
+
+  char inode_block[OCFS2_MAX_BLOCKSIZE];
+  struct grub_ocfs2_inode *inode;
+
+  char eb_block[OCFS2_MAX_BLOCKSIZE];
+  struct grub_ocfs2_extent_block *eb;
+
+  grub_uint64_t ino;
+  int inode_read;
+};
+
+/* Information about a "mounted" ocfs2 filesystem.  */
+struct grub_ocfs2_data
+{
+  grub_disk_t disk;
+
+  struct grub_fshelp_node diropen;
+
+  char label[OCFS2_MAX_VOL_LABEL_LEN];
+  int blkbits;
+  int clusterbits;
+};
+
+#ifndef GRUB_UTIL
+static grub_dl_t my_mod;
+#endif
+
+static unsigned long
+grub_ocfs2_blocks_to_sectors (struct grub_ocfs2_data *data,
+                             grub_uint64_t blocks)
+{
+  return blocks << (data->blkbits - GRUB_DISK_SECTOR_BITS);
+}
+
+static grub_err_t
+grub_ocfs2_load_superblock (grub_disk_t disk, struct grub_ocfs2_data *data)
+{
+  unsigned long sector;
+  struct grub_ocfs2_inode *super = data->diropen.inode;
+
+  for (data->blkbits = 9; data->blkbits < 13; data->blkbits++)
+    {
+      sector = grub_ocfs2_blocks_to_sectors (data,
+                                            OCFS2_SUPER_BLOCK_BLKNO);
+
+      if (grub_disk_read (disk, sector, 0, 1 << data->blkbits,
+                         (char *) super))
+       return grub_errno;
+
+      if (!grub_strncmp (super->i_signature, OCFS2_SUPER_BLOCK_SIGNATURE,
+                        sizeof(OCFS2_SUPER_BLOCK_SIGNATURE)))
+       return 0;
+    }
+
+  return grub_error (GRUB_ERR_BAD_FS, "not an OCFS2 filesystem");
+}
+
+static grub_err_t
+grub_ocfs2_read_inode (struct grub_ocfs2_data *data, grub_uint64_t blkno,
+                      struct grub_ocfs2_inode *inode)
+{
+  unsigned long sector = grub_ocfs2_blocks_to_sectors(data, blkno);
+
+  if (grub_disk_read(data->disk, sector, 0, 1 << data->blkbits, (char *)inode))
+    return grub_errno;
+
+  if (grub_strncmp(inode->i_signature, OCFS2_INODE_SIGNATURE,
+                  sizeof(OCFS2_INODE_SIGNATURE)))
+    return grub_error (GRUB_ERR_BAD_FS, "not a correct OCFS2 inode.");
+  return 0;
+}
+
+static struct grub_ocfs2_data *
+grub_ocfs2_mount (grub_disk_t disk)
+{
+  struct grub_ocfs2_data *data;
+  struct grub_fshelp_node *diropen;
+
+  data = grub_malloc (sizeof (struct grub_ocfs2_data));
+  if (!data)
+    return 0;
+
+  data->disk = disk;
+
+  diropen = &data->diropen;
+  diropen->data = data;
+  diropen->inode = (struct grub_ocfs2_inode *) diropen->inode_block;
+  diropen->eb = (struct grub_ocfs2_extent_block *) diropen->eb_block;
+
+  grub_ocfs2_load_superblock (disk, data);
+  if (grub_errno)
+    goto fail;
+
+  data->blkbits = 
grub_le_to_cpu32(diropen->inode->id2.i_super.s_blocksize_bits);
+  data->clusterbits = 
grub_le_to_cpu32(diropen->inode->id2.i_super.s_clustersize_bits);
+  grub_memcpy(data->label, diropen->inode->id2.i_super.s_label, 
OCFS2_MAX_VOL_LABEL_LEN);
+
+  diropen->ino = grub_le_to_cpu64(diropen->inode->id2.i_super.s_root_blkno);
+  diropen->inode_read = 1;
+
+  grub_ocfs2_read_inode (data, diropen->ino, diropen->inode);
+  if (grub_errno)
+    goto fail;
+
+  return data;
+
+ fail:
+  grub_free (data);
+  return 0;
+}
+
+static grub_err_t
+grub_ocfs2_label (grub_device_t device, char **label)
+{
+  struct grub_ocfs2_data *data;
+  grub_disk_t disk = device->disk;
+
+#ifndef GRUB_UTIL
+  grub_dl_ref (my_mod);
+#endif
+
+  data = grub_ocfs2_mount (disk);
+  if (data)
+    *label = grub_strndup (data->label, OCFS2_MAX_VOL_LABEL_LEN);
+  else
+    *label = 0;
+
+#ifndef GRUB_UTIL
+  grub_dl_unref (my_mod);
+#endif
+
+  grub_free (data);
+
+  return grub_errno;
+}
+
+static unsigned long
+grub_ocfs2_clusters_to_blocks (struct grub_ocfs2_data *data,
+                              grub_uint32_t clusters)
+{
+  return (unsigned long) clusters << (data->clusterbits - data->blkbits);
+}
+
+static int
+grub_ocfs2_find_index (struct grub_ocfs2_data *data,
+                      struct grub_ocfs2_extent_list *el, int block)
+{
+  struct grub_ocfs2_extent_rec *rec;
+  int index = 0;
+  int block_pos, block_highest;
+
+  if (!el->l_next_free_rec) {
+    grub_error (GRUB_ERR_FILE_READ_ERROR, "empty extent list");
+    return 0;
+  }
+
+  while (index < grub_le_to_cpu16(el->l_next_free_rec))
+    {
+      rec = &el->l_recs[index];
+
+      block_pos = grub_ocfs2_clusters_to_blocks (data,
+                                        grub_le_to_cpu32(rec->e_cpos));
+      block_highest = grub_ocfs2_clusters_to_blocks (data,
+                                       grub_le_to_cpu32(rec->e_cpos) +
+                                       grub_le_to_cpu32(rec->e_clusters));
+      if (block >= block_pos && block < block_highest)
+       break;
+      index++;
+    }
+
+  if (index == grub_le_to_cpu16(el->l_next_free_rec))
+    {
+      grub_error (GRUB_ERR_FILE_READ_ERROR, "index not found in extent list");
+      return 0;
+    }
+
+  return index;
+}
+
+static int
+grub_ocfs2_read_block (grub_fshelp_node_t node, int fileblock)
+{
+  int i, physical;
+  unsigned long sector;
+  struct grub_ocfs2_data *data = node->data;
+  struct grub_ocfs2_inode *inode = node->inode;
+  struct grub_ocfs2_extent_block *eb = node->eb;
+  struct grub_ocfs2_extent_list *el;
+  struct grub_ocfs2_extent_rec *rec;
+
+  el = &inode->id2.i_list;
+  while (el->l_tree_depth)
+    {
+      i = grub_ocfs2_find_index (data, el, fileblock);
+      if (grub_errno)
+       return grub_errno;
+
+      rec = &el->l_recs[i];
+      sector = grub_ocfs2_blocks_to_sectors (data,
+                                            grub_le_to_cpu64(rec->e_blkno));
+      if (grub_disk_read (data->disk, sector, 0, 1 << data->blkbits, (char 
*)eb))
+       return grub_errno;
+
+      if (grub_strncmp (eb->h_signature, OCFS2_EXTENT_BLOCK_SIGNATURE, 
+                       sizeof(OCFS2_EXTENT_BLOCK_SIGNATURE)))
+       {
+         grub_error (GRUB_ERR_FILE_READ_ERROR, "bad extent block");
+         return grub_errno;
+       }
+
+      el = &eb->h_list;
+    }
+
+  i = grub_ocfs2_find_index (data, el, fileblock);
+  if (grub_errno)
+    return grub_errno;
+
+  rec = &el->l_recs[i];
+
+  physical = grub_le_to_cpu64(rec->e_blkno) + fileblock 
+    - grub_ocfs2_clusters_to_blocks(data, grub_le_to_cpu32(rec->e_cpos));
+
+  return physical;
+}
+
+/* Read LEN bytes from the file described by DATA starting with byte
+   POS.  Return the amount of read bytes in READ.  */
+static grub_ssize_t
+grub_ocfs2_read_file (grub_fshelp_node_t node,
+                     void (*read_hook) (unsigned long sector,
+                                        unsigned offset, unsigned length),
+                     int pos, unsigned int len, char *buf)
+{
+  return grub_fshelp_read_file (node->data->disk, node, read_hook,
+                               pos, len, buf, grub_ocfs2_read_block,
+                               grub_le_to_cpu64 (node->inode->i_size),
+                               node->data->blkbits - GRUB_DISK_SECTOR_BITS);
+}
+
+static char *
+grub_ocfs2_read_symlink (grub_fshelp_node_t node)
+{
+  char *symlink;
+  struct grub_fshelp_node *diro = node;
+  grub_uint64_t i_size;
+
+  if (!diro->inode_read)
+    {
+      grub_ocfs2_read_inode (diro->data, diro->ino, diro->inode);
+      if (grub_errno)
+       return 0;
+    }
+
+  if (!S_ISLNK (grub_le_to_cpu16 (diro->inode->i_mode)))
+    {
+      grub_error (GRUB_ERR_BAD_FILE_TYPE, "inode is not a symlink");
+      return 0;
+    }
+
+  i_size = grub_le_to_cpu64 (diro->inode->i_size);
+  symlink = grub_malloc (i_size + 1);
+  if (!symlink)
+    return 0;
+
+  /* fast symlink */
+  if (!diro->inode->i_clusters)
+    {
+      grub_strncpy (symlink, diro->inode->id2.i_symlink, i_size);
+    }
+  else
+    {
+      grub_ocfs2_read_file (diro, 0, 0, i_size, symlink);
+      if (grub_errno)
+       {
+         grub_free (symlink);
+         return 0;
+       }
+    }
+
+  symlink[i_size] = '\0';
+
+  return symlink;
+}
+
+static int
+grub_ocfs2_iterate_dir (grub_fshelp_node_t dir,
+                       int NESTED_FUNC_ATTR
+                       (*hook) (const char *filename,
+                                enum grub_fshelp_filetype filetype,
+                                grub_fshelp_node_t node))
+{
+  unsigned int fpos = 0;
+  struct grub_fshelp_node *diro = (struct grub_fshelp_node *) dir;
+
+  if (!diro->inode_read)
+    {
+      grub_ocfs2_read_inode (diro->data, diro->ino, diro->inode);
+      if (grub_errno)
+        return 0;
+    }
+
+  /* Search the file.  */
+  while (fpos < grub_le_to_cpu64 (diro->inode->i_size))
+    {
+      struct grub_ocfs2_dir_entry dirent;
+ 
+      grub_ocfs2_read_file (diro, 0, fpos,
+                           sizeof (struct grub_ocfs2_dir_entry),
+                           (char *) &dirent);
+      if (grub_errno)
+       return 0;
+
+      if (dirent.name_len)
+       {
+         char filename[dirent.name_len + 1];
+         struct grub_fshelp_node *fdiro;
+         enum grub_fshelp_filetype type = GRUB_FSHELP_UNKNOWN;
+
+         grub_ocfs2_read_file (diro, 0,
+                               fpos + sizeof (struct grub_ocfs2_dir_entry),
+                               dirent.name_len, filename);
+         if (grub_errno)
+           return 0;
+
+         fdiro = grub_malloc (sizeof (struct grub_fshelp_node));
+         if (!fdiro)
+           return 0;
+
+         fdiro->data = diro->data;
+         fdiro->ino = grub_le_to_cpu64 (dirent.inode);
+         fdiro->inode = (struct grub_ocfs2_inode *) fdiro->inode_block;
+         fdiro->eb = (struct grub_ocfs2_extent_block *) fdiro->eb_block;
+         fdiro->inode_read = 0;
+
+         filename[dirent.name_len] = '\0';
+
+         if (dirent.file_type == OCFS2_FT_DIR)
+           type = GRUB_FSHELP_DIR;
+         else if (dirent.file_type == OCFS2_FT_SYMLINK)
+           type = GRUB_FSHELP_SYMLINK;
+         else if (dirent.file_type == OCFS2_FT_REG_FILE)
+           type = GRUB_FSHELP_REG;
+
+         if (hook (filename, type, fdiro))
+           return 1;
+       }
+      fpos += grub_le_to_cpu16 (dirent.rec_len);
+    }
+
+  return 0;
+}
+
+/* Open a file named NAME and initialize FILE.  */
+static grub_err_t
+grub_ocfs2_open (struct grub_file *file, const char *name)
+{
+  struct grub_ocfs2_data *data;
+  struct grub_fshelp_node *fdiro = 0;
+
+#ifndef GRUB_UTIL
+  grub_dl_ref (my_mod);
+#endif
+
+  data = grub_ocfs2_mount (file->device->disk);
+  if (!data)
+    goto fail;
+
+  grub_fshelp_find_file (name, &data->diropen, &fdiro, grub_ocfs2_iterate_dir,
+                        grub_ocfs2_read_symlink, GRUB_FSHELP_REG);
+  if (grub_errno)
+    goto fail;
+
+  if (!fdiro->inode_read)
+    {
+      grub_ocfs2_read_inode (data, fdiro->ino, fdiro->inode);
+      if (grub_errno)
+       goto fail;
+    }
+
+  grub_memcpy (data->diropen.inode, fdiro->inode, 1 << data->blkbits);
+  grub_free (fdiro);
+
+  file->size = grub_le_to_cpu64 (data->diropen.inode->i_size);
+  file->data = data;
+  file->offset = 0;
+
+  return 0;
+
+ fail:
+
+#ifndef GRUB_UTIL
+  grub_dl_unref (my_mod);
+#endif
+  return grub_errno;
+}
+
+static grub_err_t
+grub_ocfs2_close (grub_file_t file)
+{
+  grub_free (file->data);
+
+#ifndef GRUB_UTIL
+  grub_dl_unref (my_mod);
+#endif
+
+  return GRUB_ERR_NONE;
+}
+
+/* Read LEN bytes data from FILE into BUF.  */
+static grub_ssize_t
+grub_ocfs2_read (grub_file_t file, char *buf, grub_ssize_t len)
+{
+  struct grub_ocfs2_data *data = 
+    (struct grub_ocfs2_data *) file->data;
+
+  return grub_ocfs2_read_file (&data->diropen, file->read_hook,
+                              file->offset, len, buf);
+}
+
+static grub_err_t
+grub_ocfs2_dir (grub_device_t device, const char *path, 
+               int (*hook) (const char *filename, int dir))
+{
+  struct grub_ocfs2_data *data = 0;
+  struct grub_fshelp_node *fdiro = 0;
+  
+  auto int NESTED_FUNC_ATTR iterate (const char *filename,
+                                    enum grub_fshelp_filetype filetype,
+                                    grub_fshelp_node_t node);
+
+  int NESTED_FUNC_ATTR iterate (const char *filename,
+                               enum grub_fshelp_filetype filetype,
+                               grub_fshelp_node_t node)
+    {
+      grub_free (node);
+      
+      if (filetype == GRUB_FSHELP_DIR)
+       return hook (filename, 1);
+      else 
+       return hook (filename, 0);
+      
+      return 0;
+    }
+
+#ifndef GRUB_UTIL
+  grub_dl_ref (my_mod);
+#endif
+
+  data = grub_ocfs2_mount (device->disk);
+  if (!data)
+    goto fail;
+
+  grub_fshelp_find_file (path, &data->diropen, &fdiro, grub_ocfs2_iterate_dir,
+                        grub_ocfs2_read_symlink, GRUB_FSHELP_DIR);
+  if (grub_errno)
+    goto fail;
+
+  grub_ocfs2_iterate_dir (fdiro, iterate);
+
+ fail:
+  if (fdiro != &data->diropen)
+    grub_free (fdiro);
+  grub_free (data);
+
+#ifndef GRUB_UTIL
+  grub_dl_unref (my_mod);
+#endif
+
+  return grub_errno;
+}
+
+
+static struct grub_fs grub_ocfs2_fs =
+  {
+    .name = "ocfs2",
+    .dir = grub_ocfs2_dir,
+    .open = grub_ocfs2_open,
+    .read = grub_ocfs2_read,
+    .close = grub_ocfs2_close,
+    .label = grub_ocfs2_label,
+    .next = 0
+  };
+
+#ifdef GRUB_UTIL
+void
+grub_ocfs2_init (void)
+{
+  grub_fs_register (&grub_ocfs2_fs);
+}
+
+void
+grub_ocfs2_fini (void)
+{
+  grub_fs_unregister (&grub_ocfs2_fs);
+}
+#else /* ! GRUB_UTIL */
+GRUB_MOD_INIT
+{
+  grub_fs_register (&grub_ocfs2_fs);
+  my_mod = mod;
+}
+
+GRUB_MOD_FINI
+{
+  grub_fs_unregister (&grub_ocfs2_fs);
+}
+#endif /* ! GRUB_UTIL */
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/include/grub/fs.h ./include/grub/fs.h
--- ../tmp/grub2/include/grub/fs.h      2005-10-09 06:03:53.000000000 -0700
+++ ./include/grub/fs.h 2005-11-03 11:14:39.712707000 -0800
@@ -91,6 +91,8 @@ void grub_affs_init (void);
 void grub_affs_fini (void);
 void grub_sfs_init (void);
 void grub_sfs_fini (void);
+void grub_ocfs2_init (void);
+void grub_ocfs2_fini (void);
 void grub_iso9660_init (void);
 #endif /* GRUB_UTIL */
 
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/util/grub-emu.c ./util/grub-emu.c
--- ../tmp/grub2/util/grub-emu.c        2005-10-09 06:03:53.000000000 -0700
+++ ./util/grub-emu.c   2005-11-03 11:13:06.648652000 -0800
@@ -206,6 +206,7 @@ main (int argc, char *argv[])
   grub_xfs_init ();
   grub_sfs_init ();
   grub_affs_init ();
+  grub_ocfs2_init ();
   grub_ls_init ();
   grub_boot_init ();
   grub_cmp_init ();
@@ -237,6 +238,7 @@ main (int argc, char *argv[])
   grub_loop_fini ();
   grub_util_biosdisk_fini ();
   grub_normal_fini ();
+  grub_ocfs2_fini ();
   grub_affs_fini ();
   grub_sfs_fini ();
   grub_xfs_fini ();
diff -uprN --exclude='*~' --exclude=CVS --exclude=configure 
../tmp/grub2/util/i386/pc/grub-probefs.c ./util/i386/pc/grub-probefs.c
--- ../tmp/grub2/util/i386/pc/grub-probefs.c    2005-10-19 16:17:09.000000000 
-0700
+++ ./util/i386/pc/grub-probefs.c       2005-11-03 11:08:26.060717000 -0800
@@ -188,6 +188,7 @@ main (int argc, char *argv[])
   grub_minix_init ();
   grub_jfs_init ();
   grub_xfs_init ();
+  grub_ocfs2_init ();
 
   /* Do it.  */
   probe (path);
@@ -199,6 +200,7 @@ main (int argc, char *argv[])
   grub_minix_fini ();
   grub_jfs_fini ();
   grub_xfs_fini ();
+  grub_ocfs2_fini ();
   
   grub_pc_partition_map_fini ();
   grub_util_biosdisk_fini ();




reply via email to

[Prev in Thread] Current Thread [Next in Thread]