From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1EXq9X-0003dY-L0 for mharc-grub-devel@gnu.org; Thu, 03 Nov 2005 20:13:59 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EXq9V-0003dR-Eg for grub-devel@gnu.org; Thu, 03 Nov 2005 20:13:57 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EXq9S-0003dE-Sc for grub-devel@gnu.org; Thu, 03 Nov 2005 20:13:57 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EXq9S-0003d9-CX for grub-devel@gnu.org; Thu, 03 Nov 2005 20:13:54 -0500 Received: from [141.146.126.228] (helo=agminet01.oracle.com) by monty-python.gnu.org with esmtp (TLS-1.0:DHE_RSA_3DES_EDE_CBC_SHA:24) (Exim 4.34) id 1EXq9R-0002VO-1m for grub-devel@gnu.org; Thu, 03 Nov 2005 20:13:54 -0500 Received: from rgmsgw02.us.oracle.com (rgmsgw02.us.oracle.com [138.1.186.52]) by agminet01.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id jA41Nk8H019588 for ; Thu, 3 Nov 2005 19:23:46 -0600 Received: from rgmsgw02.us.oracle.com (localhost.localdomain [127.0.0.1]) by rgmsgw02.us.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id jA41DosQ025372 for ; Thu, 3 Nov 2005 18:13:50 -0700 Received: from ca-server1.us.oracle.com (ca-server1.us.oracle.com [139.185.118.41]) by rgmsgw02.us.oracle.com (Switch-3.1.7/Switch-3.1.7) with ESMTP id jA41DonV025360 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO) for ; Thu, 3 Nov 2005 18:13:50 -0700 Received: from mfasheh by ca-server1.us.oracle.com with local (Exim 4.53) id 1EXq9N-00031Q-QF for grub-devel@gnu.org; Thu, 03 Nov 2005 17:13:49 -0800 Date: Thu, 3 Nov 2005 17:13:49 -0800 From: Mark Fasheh To: The development of GRUB 2 Message-ID: <20051104011349.GD28731@ca-server1.us.oracle.com> References: <20051103221542.GA28731@ca-server1.us.oracle.com> <87vez9xsin.fsf@student.han.nl> <20051103231920.GB28731@ca-server1.us.oracle.com> <87fyqdxppv.fsf@student.han.nl> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <87fyqdxppv.fsf@student.han.nl> Organization: Oracle Corporation User-Agent: Mutt/1.5.11 X-Brightmail-Tracker: AAAAAQAAAAI= X-Whitelist: TRUE Subject: Re: OCFS2 support X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Nov 2005 01:13:57 -0000 On Fri, Nov 04, 2005 at 12:43:08AM +0100, Marco Gerards wrote: > I think GNU indent defaults to the GCS. The GCS is a bit more than > just indentation, for example it also says stuff about naming > variables, the maximum line lengths, how comments are formatted, etc. Ok. Attached is an updated patch. I read through what seemed like the most appropriate parts of GCS and I took another look at the other code in fs/*.c. A list of what I changed is below. If there's still anything wrong, I'd really appreciate some more direct pointers :) * Remove extra whitespace between structure member declarations and their = =20 type * Insert some formfeed characters to indicate logical divisions within the = =20 code * Split lines before the operator, not after it=20 * Put two newlines between functions (copied from xfs.c) * Put two spaces after the end of a sentence comment blocks =20 * Reformat a couple of comments. I'm not sure about the comment above the declaration of OCFS2_SUPER_BLOCK_BLKNO so I left it alone. * Remove the member variable prefixes on structure declarations - this is = =20 more in line with the rest of the grub fs/*.c code. * Prefix some of the macro functions with "GRUB" =20 * Change variable declaration style in functions to be consistent * Break up some lines so they don't wrap at 80 columns any more=20 --Mark -- Mark Fasheh Senior Software Developer, Oracle mark.fasheh@oracle.com diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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 + + 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 =20 From Timothy Baldwin: diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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 14:03:06.344760000 -0800 @@ -322,11 +322,11 @@ grub_setup_SOURCES =3D 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 +=3D 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_get= root.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_setu= p-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 g= rub_setup-fs_minix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o grub_setup-ker= n_file.o grub_setup-kern_fs.o grub_setup-kern_env.o grub_setup-fs_fshelp.o -MOSTLYCLEANFILES +=3D 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 gru= b_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 gru= b_setup-kern_partition.d grub_setup-partmap_pc.d grub_setup-fs_ufs.d grub_s= etup-fs_minix.d grub_setup-fs_hfs.d grub_setup-fs_jfs.d grub_setup-kern_fil= e.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 ke= rn/env.c fs/fshelp.c +CLEANFILES +=3D 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_get= root.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_setu= p-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 g= rub_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 g= rub_setup-fs_fshelp.o +MOSTLYCLEANFILES +=3D 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 gru= b_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 gru= b_setup-kern_partition.d grub_setup-partmap_pc.d grub_setup-fs_ufs.d grub_s= etup-fs_minix.d grub_setup-fs_hfs.d grub_setup-fs_jfs.d grub_setup-fs_ocfs2= =2Ed grub_setup-kern_file.d grub_setup-kern_fs.d grub_setup-kern_env.d grub= _setup-fs_fshelp.d =20 -grub-setup: grub_setup-util_i386_pc_grub_setup.o grub_setup-util_i386_pc_b= iosdisk.o grub_setup-util_misc.o grub_setup-util_i386_pc_getroot.o grub_set= up-kern_device.o grub_setup-kern_disk.o grub_setup-kern_err.o grub_setup-ke= rn_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-ke= rn_partition.o grub_setup-partmap_pc.o grub_setup-fs_ufs.o grub_setup-fs_mi= nix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o grub_setup-kern_file.o grub_s= etup-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_b= iosdisk.o grub_setup-util_misc.o grub_setup-util_i386_pc_getroot.o grub_set= up-kern_device.o grub_setup-kern_disk.o grub_setup-kern_err.o grub_setup-ke= rn_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-ke= rn_partition.o grub_setup-partmap_pc.o grub_setup-fs_ufs.o grub_setup-fs_mi= nix.o grub_setup-fs_hfs.o grub_setup-fs_jfs.o grub_setup-fs_ocfs2.o grub_se= tup-kern_file.o grub_setup-kern_fs.o grub_setup-kern_env.o grub_setup-fs_fs= help.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_setup_LDFLAGS) =20 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 =20 -include grub_setup-fs_jfs.d =20 +grub_setup-fs_ocfs2.o: fs/ocfs2.c + $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_= UTIL=3D1 $(grub_setup_CFLAGS) -c -o $@ $< + +grub_setup-fs_ocfs2.d: fs/ocfs2.c + set -e; $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLA= GS) -DGRUB_UTIL=3D1 $(grub_setup_CFLAGS) -M $< | sed 's,ocfs2\.o[ :]*,gr= ub_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) -DG= RUB_UTIL=3D1 $(grub_setup_CFLAGS) -c -o $@ $< =20 @@ -553,11 +561,11 @@ grub_probefs_SOURCES =3D 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 +=3D 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_pro= befs-fs_ext2.o grub_probefs-kern_parser.o grub_probefs-kern_partition.o gru= b_probefs-partmap_pc.o grub_probefs-fs_ufs.o grub_probefs-fs_minix.o grub_p= robefs-fs_hfs.o grub_probefs-fs_jfs.o grub_probefs-kern_fs.o grub_probefs-k= ern_env.o grub_probefs-fs_fshelp.o grub_probefs-fs_xfs.o grub_probefs-fs_af= fs.o grub_probefs-fs_sfs.o -MOSTLYCLEANFILES +=3D grub_probefs-util_i386_pc_grub_probefs.d grub_probef= s-util_i386_pc_biosdisk.d grub_probefs-util_misc.d grub_probefs-util_i386_p= c_getroot.d grub_probefs-kern_device.d grub_probefs-kern_disk.d grub_probef= s-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_probe= fs-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= =2Ed 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 +=3D 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_pro= befs-fs_ext2.o grub_probefs-kern_parser.o grub_probefs-kern_partition.o gru= b_probefs-partmap_pc.o grub_probefs-fs_ufs.o grub_probefs-fs_minix.o grub_p= robefs-fs_hfs.o grub_probefs-fs_jfs.o grub_probefs-kern_fs.o grub_probefs-k= ern_env.o grub_probefs-fs_fshelp.o grub_probefs-fs_xfs.o grub_probefs-fs_af= fs.o grub_probefs-fs_sfs.o grub_probefs-fs_ocfs2.o +MOSTLYCLEANFILES +=3D grub_probefs-util_i386_pc_grub_probefs.d grub_probef= s-util_i386_pc_biosdisk.d grub_probefs-util_misc.d grub_probefs-util_i386_p= c_getroot.d grub_probefs-kern_device.d grub_probefs-kern_disk.d grub_probef= s-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_probe= fs-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= =2Ed 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 =20 -grub-probefs: grub_probefs-util_i386_pc_grub_probefs.o grub_probefs-util_i= 386_pc_biosdisk.o grub_probefs-util_misc.o grub_probefs-util_i386_pc_getroo= t.o grub_probefs-kern_device.o grub_probefs-kern_disk.o grub_probefs-kern_e= rr.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-partm= ap_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_probe= fs-fs_sfs.o +grub-probefs: grub_probefs-util_i386_pc_grub_probefs.o grub_probefs-util_i= 386_pc_biosdisk.o grub_probefs-util_misc.o grub_probefs-util_i386_pc_getroo= t.o grub_probefs-kern_device.o grub_probefs-kern_disk.o grub_probefs-kern_e= rr.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-partm= ap_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_probe= fs-fs_sfs.o grub_probefs-fs_ocfs2.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_probefs_LDFLAGS) =20 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 =20 -include grub_probefs-fs_sfs.d =20 +grub_probefs-fs_ocfs2.o: fs/ocfs2.c + $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_= UTIL=3D1 $(grub_probefs_CFLAGS) -c -o $@ $< + +grub_probefs-fs_ocfs2.d: fs/ocfs2.c + set -e; $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLA= GS) -DGRUB_UTIL=3D1 $(grub_probefs_CFLAGS) -M $< | sed 's,ocfs2\.o[ :]*,= grub_probefs-fs_ocfs2.o $@ : ,g' > $@; [ -s $@ ] || rm -f $@ + +-include grub_probefs-fs_ocfs2.d + =20 # For grub-emu. grub_emu_SOURCES =3D commands/boot.c commands/cat.c commands/cmp.c \ @@ -753,7 +769,7 @@ grub_emu_SOURCES =3D 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 =3D 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 +=3D 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_de= fault.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-comm= ands_ls.o grub_emu-commands_search.o grub_emu-commands_timeout.o grub_emu-c= ommands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loo= pback.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_em= u-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 g= rub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_f= s.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o grub_e= mu-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-pa= rtmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-util_gru= b_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 +=3D grub_emu-commands_boot.d grub_emu-commands_cat.d gru= b_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_defau= lt.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-command= s_ls.d grub_emu-commands_search.d grub_emu-commands_timeout.d grub_emu-comm= ands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopba= ck.d grub_emu-fs_affs.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fs= help.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-f= s_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-ker= n_term.d grub_emu-normal_arg.d grub_emu-normal_cmdline.d grub_emu-normal_co= mmand.d grub_emu-normal_completion.d grub_emu-normal_context.d grub_emu-nor= mal_main.d grub_emu-normal_menu.d grub_emu-normal_menu_entry.d grub_emu-nor= mal_misc.d grub_emu-partmap_amiga.d grub_emu-partmap_apple.d grub_emu-partm= ap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_grub_e= mu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-util_i3= 86_pc_getroot.d grub_emu-util_i386_pc_misc.d +CLEANFILES +=3D 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_de= fault.o grub_emu-commands_help.o grub_emu-commands_terminal.o grub_emu-comm= ands_ls.o grub_emu-commands_search.o grub_emu-commands_timeout.o grub_emu-c= ommands_i386_pc_halt.o grub_emu-commands_i386_pc_reboot.o grub_emu-disk_loo= pback.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_em= u-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_fi= le.o grub_emu-kern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_em= u-kern_misc.o grub_emu-kern_parser.o grub_emu-kern_partition.o grub_emu-ker= n_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdli= ne.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_me= nu_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= =2Eo grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_bi= osdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_i386_pc_misc.o +MOSTLYCLEANFILES +=3D grub_emu-commands_boot.d grub_emu-commands_cat.d gru= b_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_defau= lt.d grub_emu-commands_help.d grub_emu-commands_terminal.d grub_emu-command= s_ls.d grub_emu-commands_search.d grub_emu-commands_timeout.d grub_emu-comm= ands_i386_pc_halt.d grub_emu-commands_i386_pc_reboot.d grub_emu-disk_loopba= ck.d grub_emu-fs_affs.d grub_emu-fs_ext2.d grub_emu-fs_fat.d grub_emu-fs_fs= help.d grub_emu-fs_hfs.d grub_emu-fs_iso9660.d grub_emu-fs_jfs.d grub_emu-f= s_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 gru= b_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-k= ern_misc.d grub_emu-kern_parser.d grub_emu-kern_partition.d grub_emu-kern_r= escue.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_co= ntext.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_ap= ple.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_biosdis= k.d grub_emu-util_i386_pc_getroot.d grub_emu-util_i386_pc_misc.d =20 -grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-comman= ds_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_em= u-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_em= u-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 gr= ub_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_en= v.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-kern_fs.o grub_emu-ke= rn_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 gru= b_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 g= rub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_emu-normal_misc.o g= rub_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_em= u-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-util_i386_pc_getroo= t.o grub_emu-util_i386_pc_misc.o +grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-comman= ds_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_em= u-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_em= u-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 gr= ub_emu-fs_sfs.o grub_emu-fs_ufs.o grub_emu-fs_xfs.o grub_emu-fs_ocfs2.o gru= b_emu-io_gzio.o grub_emu-kern_device.o grub_emu-kern_disk.o grub_emu-kern_d= l.o grub_emu-kern_env.o grub_emu-kern_err.o grub_emu-kern_file.o grub_emu-k= ern_fs.o grub_emu-kern_loader.o grub_emu-kern_main.o grub_emu-kern_misc.o g= rub_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-n= ormal_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_e= mu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_console.o grub_emu-uti= l_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) =20 grub_emu-commands_boot.o: commands/boot.c @@ -963,6 +979,14 @@ grub_emu-fs_xfs.d: fs/xfs.c =20 -include grub_emu-fs_xfs.d =20 +grub_emu-fs_ocfs2.o: fs/ocfs2.c + $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_= UTIL=3D1 $(grub_emu_CFLAGS) -c -o $@ $< + +grub_emu-fs_ocfs2.d: fs/ocfs2.c + set -e; $(BUILD_CC) -Ifs -I$(srcdir)/fs $(BUILD_CPPFLAGS) $(BUILD_CFLA= GS) -DGRUB_UTIL=3D1 $(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=3D1 $(grub_emu_CFLAGS) -c -o $@ $< =20 @@ -1275,7 +1299,7 @@ pkgdata_MODULES =3D _chain.mod _linux.mod=20 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 =20 # For _chain.mod. _chain_mod_SOURCES =3D loader/i386/pc/chainloader.c @@ -1894,6 +1918,57 @@ fs-sfs.lst: fs/sfs.c genfslist.sh sfs_mod_CFLAGS =3D $(COMMON_CFLAGS) sfs_mod_LDFLAGS =3D $(COMMON_LDFLAGS) =20 +# For ocfs2.mod. +ocfs2_mod_SOURCES =3D fs/ocfs2.c +CLEANFILES +=3D ocfs2.mod mod-ocfs2.o mod-ocfs2.c pre-ocfs2.o ocfs2_mod-fs= _ocfs2.o def-ocfs2.lst und-ocfs2.lst +MOSTLYCLEANFILES +=3D ocfs2_mod-fs_ocfs2.d +DEFSYMFILES +=3D def-ocfs2.lst +UNDSYMFILES +=3D 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_CF= LAGS) -M $< | sed 's,ocfs2\.o[ :]*,ocfs2_mod-fs_ocfs2.o $@ : ,g' > $@; = [ -s $@ ] || rm -f $@ + +-include ocfs2_mod-fs_ocfs2.d + +CLEANFILES +=3D cmd-ocfs2.lst fs-ocfs2.lst +COMMANDFILES +=3D cmd-ocfs2.lst +FSFILES +=3D fs-ocfs2.lst + +cmd-ocfs2.lst: fs/ocfs2.c gencmdlist.sh + set -e; $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ocfs2_mod_CF= LAGS) -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_CF= LAGS) -E $< | sh $(srcdir)/genfslist.sh ocfs2 > $@ || (rm -f $@; exit 1) + + +ocfs2_mod_CFLAGS =3D $(COMMON_CFLAGS) +ocfs2_mod_LDFLAGS =3D $(COMMON_LDFLAGS) + # For _linux.mod. _linux_mod_SOURCES =3D loader/i386/pc/linux.c CLEANFILES +=3D _linux.mod mod-_linux.o mod-_linux.c pre-_linux.o _linux_m= od-loader_i386_pc_linux.o def-_linux.lst und-_linux.lst diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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 =3D 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 ke= rn/env.c fs/fshelp.c =20 # For grub-mkdevicemap. grub_mkdevicemap_SOURCES =3D util/i386/pc/grub-mkdevicemap.c util/misc.c @@ -75,7 +75,7 @@ grub_probefs_SOURCES =3D 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 =20 # For grub-emu. grub_emu_SOURCES =3D commands/boot.c commands/cat.c commands/cmp.c \ @@ -85,7 +85,7 @@ grub_emu_SOURCES =3D 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 =3D _chain.mod _linux.mod=20 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 =20 # For _chain.mod. _chain_mod_SOURCES =3D loader/i386/pc/chainloader.c @@ -184,6 +184,11 @@ sfs_mod_SOURCES =3D fs/sfs.c sfs_mod_CFLAGS =3D $(COMMON_CFLAGS) sfs_mod_LDFLAGS =3D $(COMMON_LDFLAGS) =20 +# For ocfs2.mod. +ocfs2_mod_SOURCES =3D fs/ocfs2.c +ocfs2_mod_CFLAGS =3D $(COMMON_CFLAGS) +ocfs2_mod_LDFLAGS =3D $(COMMON_LDFLAGS) + # For _linux.mod. _linux_mod_SOURCES =3D loader/i386/pc/linux.c _linux_mod_CFLAGS =3D $(COMMON_CFLAGS) diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/conf/powerpc-ieee1275.mk ./conf/powerpc-ieee1275.mk --- ../tmp/grub2/conf/powerpc-ieee1275.mk 2005-11-02 21:05:05.000000000 -08= 00 +++ ./conf/powerpc-ieee1275.mk 2005-11-03 14:03:06.406760000 -0800 @@ -71,7 +71,7 @@ grub_emu_SOURCES =3D 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 =3D 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 +=3D 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_de= fault.o grub_emu-commands_help.o grub_emu-commands_search.o grub_emu-comman= ds_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-c= ommands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_l= oopback.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_e= mu-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_em= u-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-norm= al_command.o grub_emu-normal_completion.o grub_emu-normal_context.o grub_em= u-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o grub_em= u-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_g= rub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_emu-ut= il_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o -MOSTLYCLEANFILES +=3D grub_emu-commands_boot.d grub_emu-commands_cat.d gru= b_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_defau= lt.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-comm= ands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loop= back.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 gr= ub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_file.d grub_emu-kern_fs= =2Ed 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-norma= l_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-p= artmap_pc.d grub_emu-partmap_sun.d grub_emu-util_console.d grub_emu-util_gr= ub_emu.d grub_emu-util_misc.d grub_emu-util_i386_pc_biosdisk.d grub_emu-uti= l_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d +CLEANFILES +=3D 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_de= fault.o grub_emu-commands_help.o grub_emu-commands_search.o grub_emu-comman= ds_terminal.o grub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-c= ommands_ieee1275_halt.o grub_emu-commands_ieee1275_reboot.o grub_emu-disk_l= oopback.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_e= mu-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-k= ern_rescue.o grub_emu-kern_term.o grub_emu-normal_arg.o grub_emu-normal_cmd= line.o grub_emu-normal_command.o grub_emu-normal_completion.o grub_emu-norm= al_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-partm= ap_apple.o grub_emu-partmap_pc.o grub_emu-partmap_sun.o grub_emu-util_conso= le.o grub_emu-util_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_bi= osdisk.o grub_emu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_mis= c.o +MOSTLYCLEANFILES +=3D grub_emu-commands_boot.d grub_emu-commands_cat.d gru= b_emu-commands_cmp.d grub_emu-commands_configfile.d grub_emu-commands_defau= lt.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-comm= ands_ieee1275_halt.d grub_emu-commands_ieee1275_reboot.d grub_emu-disk_loop= back.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 g= rub_emu-kern_dl.d grub_emu-kern_env.d grub_emu-kern_err.d grub_emu-kern_fil= e.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_cmdlin= e.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_men= u_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_biosd= isk.d grub_emu-util_i386_pc_getroot.d grub_emu-util_powerpc_ieee1275_misc.d =20 -grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-comman= ds_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_em= u-commands_help.o grub_emu-commands_search.o grub_emu-commands_terminal.o g= rub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee127= 5_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 gru= b_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 gr= ub_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_parse= r.o grub_emu-kern_partition.o grub_emu-kern_rescue.o grub_emu-kern_term.o g= rub_emu-normal_arg.o grub_emu-normal_cmdline.o grub_emu-normal_command.o gr= ub_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 gr= ub_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_getr= oot.o grub_emu-util_powerpc_ieee1275_misc.o +grub-emu: grub_emu-commands_boot.o grub_emu-commands_cat.o grub_emu-comman= ds_cmp.o grub_emu-commands_configfile.o grub_emu-commands_default.o grub_em= u-commands_help.o grub_emu-commands_search.o grub_emu-commands_terminal.o g= rub_emu-commands_ls.o grub_emu-commands_timeout.o grub_emu-commands_ieee127= 5_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 gru= b_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 g= rub_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 gr= ub_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 gr= ub_emu-normal_main.o grub_emu-normal_menu.o grub_emu-normal_menu_entry.o gr= ub_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-u= til_grub_emu.o grub_emu-util_misc.o grub_emu-util_i386_pc_biosdisk.o grub_e= mu-util_i386_pc_getroot.o grub_emu-util_powerpc_ieee1275_misc.o $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(grub_emu_LDFLAGS) =20 grub_emu-commands_boot.o: commands/boot.c @@ -281,6 +281,14 @@ grub_emu-fs_xfs.d: fs/xfs.c =20 -include grub_emu-fs_xfs.d =20 +grub_emu-fs_ocfs2.o: fs.ocfs2.c + $(BUILD_CC) -I. -I$(srcdir)/. $(BUILD_CPPFLAGS) $(BUILD_CFLAGS) -DGRUB_UT= IL=3D1 $(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=3D1 $(grub_emu_CFLAGS) -M $< | sed 's,fs\.ocfs2\.o[ :]*,gr= ub_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=3D1 $(grub_emu_CFLAGS) -c -o $@ $< =20 @@ -810,7 +818,7 @@ pkgdata_MODULES =3D _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 =20 # For fshelp.mod. fshelp_mod_SOURCES =3D fs/fshelp.c @@ -1316,6 +1324,56 @@ fs-sfs.lst: fs/sfs.c genfslist.sh =20 sfs_mod_CFLAGS =3D $(COMMON_CFLAGS) =20 +# For ocfs2.mod. +ocfs2_mod_SOURCES =3D fs/ocfs2.c +CLEANFILES +=3D ocfs2.mod mod-ocfs2.o mod-ocfs2.c pre-ocfs2.o ocfs2_mod-fs= _ocfs2.o def-ocfs2.lst und-ocfs2.lst +MOSTLYCLEANFILES +=3D ocfs2_mod-fs_ocfs2.d +DEFSYMFILES +=3D def-ocfs2.lst +UNDSYMFILES +=3D 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_CF= LAGS) -M $< | sed 's,ocfs2\.o[ :]*,ocfs2_mod-fs_ocfs2.o $@ : ,g' > $@; = [ -s $@ ] || rm -f $@ + +-include ocfs2_mod-fs_ocfs2.d + +CLEANFILES +=3D cmd-ocfs2.lst fs-ocfs2.lst +COMMANDFILES +=3D cmd-ocfs2.lst +FSFILES +=3D fs-ocfs2.lst + +cmd-ocfs2.lst: fs/ocfs2.c gencmdlist.sh + set -e; $(CC) -Ifs -I$(srcdir)/fs $(CPPFLAGS) $(CFLAGS) $(ocfs2_mod_CF= LAGS) -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_CF= LAGS) -E $< | sh $(srcdir)/genfslist.sh ocfs2 > $@ || (rm -f $@; exit 1) + + +ocfs2_mod_CFLAGS =3D $(COMMON_CFLAGS) + # For _linux.mod. _linux_mod_SOURCES =3D loader/powerpc/ieee1275/linux.c CLEANFILES +=3D _linux.mod mod-_linux.o mod-_linux.c pre-_linux.o _linux_m= od-loader_powerpc_ieee1275_linux.o def-_linux.lst und-_linux.lst diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/conf/powerpc-ieee1275.rmk ./conf/powerpc-ieee1275.rmk --- ../tmp/grub2/conf/powerpc-ieee1275.rmk 2005-11-02 21:05:05.000000000 -0= 800 +++ ./conf/powerpc-ieee1275.rmk 2005-11-03 12:12:12.667484000 -0800 @@ -41,7 +41,7 @@ grub_emu_SOURCES =3D 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 =3D _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 =20 # For fshelp.mod. fshelp_mod_SOURCES =3D fs/fshelp.c @@ -130,6 +130,10 @@ affs_mod_CFLAGS =3D $(COMMON_CFLAGS) sfs_mod_SOURCES =3D fs/sfs.c sfs_mod_CFLAGS =3D $(COMMON_CFLAGS) =20 +# For ocfs2.mod. +ocfs2_mod_SOURCES =3D fs/ocfs2.c +ocfs2_mod_CFLAGS =3D $(COMMON_CFLAGS) + # For _linux.mod. _linux_mod_SOURCES =3D loader/powerpc/ieee1275/linux.c _linux_mod_CFLAGS =3D $(COMMON_CFLAGS) Binary files ../tmp/grub2/core.img and ./core.img differ diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/fs/gnu.ocfs2.c ./fs/gnu.ocfs2.c --- ../tmp/grub2/fs/gnu.ocfs2.c 1969-12-31 16:00:00.000000000 -0800 +++ ./fs/gnu.ocfs2.c 2005-11-03 16:12:49.787214000 -0800 @@ -0,0 +1,661 @@ +/* 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 +#include +#include +#include +#include +#include +#include +#include + +/* + * 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) =3D=3D 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 =3D data->diropen.inode; + + for (data->blkbits =3D 9; data->blkbits < 13; data->blkbits++) { + sector =3D 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 =3D grub_ocfs2_blocks_to_sectors(data, blkno); + + if (grub_disk_read(data->disk, sector, 0, 1 << data->blkbits, (char *)in= ode)) + 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 =3D grub_malloc(sizeof(struct grub_ocfs2_data)); + if (!data) + return 0; + + data->disk =3D disk; + + diropen =3D &data->diropen; + diropen->data =3D data; + diropen->inode =3D (struct grub_ocfs2_inode *)diropen->inode_block; + diropen->eb =3D (struct grub_ocfs2_extent_block *)diropen->eb_block; + + grub_ocfs2_load_superblock(disk, data); + if (grub_errno) + goto fail; + + data->blkbits =3D + grub_le_to_cpu32(diropen->inode->id2.i_super.s_blocksize_bits); + data->clusterbits =3D + 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 =3D grub_le_to_cpu64(diropen->inode->id2.i_super.s_root_blk= no); + diropen->inode_read =3D 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 =3D device->disk; + +#ifndef GRUB_UTIL + grub_dl_ref(my_mod); +#endif + + data =3D grub_ocfs2_mount(disk); + if (data) + *label =3D grub_strndup(data->label, OCFS2_MAX_VOL_LABEL_LEN); + else + *label =3D 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 =3D 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 =3D &el->l_recs[index]; + + block_pos =3D + grub_ocfs2_clusters_to_blocks(data, grub_le_to_cpu32(rec->e_cpos)); + block_highest =3D + grub_ocfs2_clusters_to_blocks(data, + grub_le_to_cpu32(rec->e_cpos) + + grub_le_to_cpu32(rec->e_clusters)); + if (block >=3D block_pos && block < block_highest) + break; + index++; + } + + if (index =3D=3D 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 =3D node->data; + struct grub_ocfs2_inode *inode =3D node->inode; + struct grub_ocfs2_extent_block *eb =3D node->eb; + struct grub_ocfs2_extent_list *el; + struct grub_ocfs2_extent_rec *rec; + + el =3D &inode->id2.i_list; + while (el->l_tree_depth) { + i =3D grub_ocfs2_find_index(data, el, fileblock); + if (grub_errno) + return grub_errno; + + rec =3D &el->l_recs[i]; + sector =3D 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 =3D &eb->h_list; + } + + i =3D grub_ocfs2_find_index(data, el, fileblock); + if (grub_errno) + return grub_errno; + + rec =3D &el->l_recs[i]; + + physical =3D + 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 =3D 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 =3D grub_le_to_cpu64(diro->inode->i_size); + symlink =3D 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] =3D '\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 =3D 0; + struct grub_fshelp_node *diro =3D (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 =3D GRUB_FSHELP_UNKNOWN; + + grub_ocfs2_read_file(diro, 0, fpos + sizeof(struct grub_ocfs2_dir_en= try), + dirent.name_len, filename); + if (grub_errno) + return 0; + + fdiro =3D grub_malloc(sizeof(struct grub_fshelp_node)); + if (!fdiro) + return 0; + + fdiro->data =3D diro->data; + fdiro->ino =3D grub_le_to_cpu64(dirent.inode); + fdiro->inode =3D (struct grub_ocfs2_inode *)fdiro->inode_block; + fdiro->eb =3D (struct grub_ocfs2_extent_block *)fdiro->eb_block; + fdiro->inode_read =3D 0; + + filename[dirent.name_len] =3D '\0'; + + if (dirent.file_type =3D=3D OCFS2_FT_DIR) + type =3D GRUB_FSHELP_DIR; + else if (dirent.file_type =3D=3D OCFS2_FT_SYMLINK) + type =3D GRUB_FSHELP_SYMLINK; + else if (dirent.file_type =3D=3D OCFS2_FT_REG_FILE) + type =3D GRUB_FSHELP_REG; + + if (hook(filename, type, fdiro)) + return 1; + } + fpos +=3D 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 =3D 0; + +#ifndef GRUB_UTIL + grub_dl_ref(my_mod); +#endif + + data =3D grub_ocfs2_mount(file->device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file(name, &data->diropen, &fdiro, grub_ocfs2_iterate_d= ir, + 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 =3D grub_le_to_cpu64(data->diropen.inode->i_size); + file->data =3D data; + file->offset =3D 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 =3D (struct grub_ocfs2_data *)file->data; + + return grub_ocfs2_read_file(&data->diropen, file->read_hook, file->offse= t, + 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 =3D 0; + struct grub_fshelp_node *fdiro =3D 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 =3D=3D GRUB_FSHELP_DIR) + return hook(filename, 1); + else + return hook(filename, 0); + + return 0; + } + +#ifndef GRUB_UTIL + grub_dl_ref(my_mod); +#endif + + data =3D grub_ocfs2_mount(device->disk); + if (!data) + goto fail; + + grub_fshelp_find_file(path, &data->diropen, &fdiro, grub_ocfs2_iterate_d= ir, + grub_ocfs2_read_symlink, GRUB_FSHELP_DIR); + if (grub_errno) + goto fail; + + grub_ocfs2_iterate_dir(fdiro, iterate); + +fail: + if (fdiro !=3D &data->diropen) + grub_free(fdiro); + grub_free(data); + +#ifndef GRUB_UTIL + grub_dl_unref(my_mod); +#endif + + return grub_errno; +} +=0C + +static struct grub_fs grub_ocfs2_fs =3D { + .name =3D "ocfs2", + .dir =3D grub_ocfs2_dir, + .open =3D grub_ocfs2_open, + .read =3D grub_ocfs2_read, + .close =3D grub_ocfs2_close, + .label =3D grub_ocfs2_label, + .next =3D 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 =3D mod; +} + +GRUB_MOD_FINI { + grub_fs_unregister(&grub_ocfs2_fs); +} +#endif /* ! GRUB_UTIL */ diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/fs/ocfs2.c ./fs/ocfs2.c --- ../tmp/grub2/fs/ocfs2.c 1969-12-31 16:00:00.000000000 -0800 +++ ./fs/ocfs2.c 2005-11-03 16:57:04.832948000 -0800 @@ -0,0 +1,717 @@ +/* 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 +#include +#include +#include +#include +#include +#include +#include + +/* + * 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 GRUB_ISLNK(m) (((m) & S_IFMT) =3D=3D S_IFLNK) + +struct grub_ocfs2_extent_rec +{ + grub_uint32_t cpos; + grub_uint32_t clusters; + grub_uint64_t blkno; +}; + +struct grub_ocfs2_extent_list +{ + grub_uint16_t tree_depth; + grub_uint16_t count; + grub_uint16_t next_free_rec; + grub_uint16_t reserved1; + grub_uint64_t reserved2; + struct grub_ocfs2_extent_rec recs[0]; +}; + +struct grub_ocfs2_extent_block +{ + grub_uint8_t signature[8]; + grub_uint64_t reserved1; + grub_uint16_t suballoc_slot; + grub_uint16_t suballoc_bit; + grub_uint32_t fs_generation; + grub_uint64_t blkno; + grub_uint64_t reserved3; + grub_uint64_t next_leaf_blk; + struct grub_ocfs2_extent_list list; +}; + +struct grub_ocfs2_sblock { + grub_uint16_t major_rev_level; + grub_uint16_t minor_rev_level; + grub_uint16_t mnt_count; + grub_uint16_t max_mnt_count; + grub_uint16_t state; + grub_uint16_t errors; + grub_uint32_t checkinterval; + grub_uint64_t lastcheck; + grub_uint32_t creator_os; + grub_uint32_t feature_compat; + grub_uint32_t feature_incompat; + grub_uint32_t feature_ro_compat; + grub_uint64_t root_blkno; + grub_uint64_t system_dir_blkno; + grub_uint32_t blocksize_bits; + grub_uint32_t clustersize_bits; + grub_uint16_t max_slots; + grub_uint16_t reserved1; + grub_uint32_t reserved2; + grub_uint64_t first_cluster_group; + grub_uint8_t label[OCFS2_MAX_VOL_LABEL_LEN]; + grub_uint8_t uuid[OCFS2_VOL_UUID_LEN]; +} ocfs2_super_block; + +struct grub_ocfs2_inode { + grub_uint8_t signature[8]; + grub_uint32_t generation; + grub_uint16_t suballoc_slot; + grub_uint16_t suballoc_bit; + grub_uint32_t reserved0; + grub_uint32_t clusters; + grub_uint32_t uid; + grub_uint32_t gid; + grub_uint64_t size; + grub_uint16_t mode; + grub_uint16_t links_count; + grub_uint32_t flags; + grub_uint64_t atime; + grub_uint64_t ctime; + grub_uint64_t mtime; + grub_uint64_t dtime; + grub_uint64_t blkno; + grub_uint64_t last_eb_blk; + grub_uint32_t fs_generation; + grub_uint32_t atime_nsec; + grub_uint32_t ctime_nsec; + grub_uint32_t mtime_nsec; + grub_uint64_t reserved1[9]; + union { + grub_uint64_t pad1; + struct { + grub_uint64_t rdev; + } dev1; + struct { + grub_uint32_t used; + grub_uint32_t total; + } bitmap1; + struct { + grub_uint32_t flags; + grub_uint32_t pad; + } journal1; + } id1; + union { + /* Some union members omitted here */ + struct grub_ocfs2_sblock super; + struct grub_ocfs2_extent_list list; + grub_uint8_t 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 + +=0C + +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 =3D data->diropen.inode; + + for (data->blkbits =3D 9; data->blkbits < 13; data->blkbits++) + { + sector =3D 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->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 =3D grub_ocfs2_blocks_to_sectors(data, blkno); + + if (grub_disk_read(data->disk, sector, 0, 1 << data->blkbits, (char *)in= ode)) + return grub_errno; + + if (grub_strncmp(inode->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 =3D grub_malloc (sizeof (struct grub_ocfs2_data)); + if (!data) + return 0; + + data->disk =3D disk; + + diropen =3D &data->diropen; + diropen->data =3D data; + diropen->inode =3D (struct grub_ocfs2_inode *) diropen->inode_block; + diropen->eb =3D (struct grub_ocfs2_extent_block *) diropen->eb_block; + + grub_ocfs2_load_superblock (disk, data); + if (grub_errno) + goto fail; + + data->blkbits =3D + grub_le_to_cpu32(diropen->inode->id2.super.blocksize_bits); + data->clusterbits =3D + grub_le_to_cpu32(diropen->inode->id2.super.clustersize_bits); + grub_memcpy(data->label, diropen->inode->id2.super.label, + OCFS2_MAX_VOL_LABEL_LEN); + + diropen->ino =3D grub_le_to_cpu64(diropen->inode->id2.super.root_blkno); + diropen->inode_read =3D 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 =3D device->disk; + +#ifndef GRUB_UTIL + grub_dl_ref (my_mod); +#endif + + data =3D grub_ocfs2_mount (disk); + if (data) + *label =3D grub_strndup (data->label, OCFS2_MAX_VOL_LABEL_LEN); + else + *label =3D 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 =3D 0; + int block_pos; + int block_highest; + grub_uint32_t cpos; + grub_uint32_t clusters; + + if (!el->next_free_rec) { + grub_error (GRUB_ERR_FILE_READ_ERROR, "empty extent list"); + return 0; + } + + while (index < grub_le_to_cpu16(el->next_free_rec)) + { + rec =3D &el->recs[index]; + + cpos =3D grub_le_to_cpu32(rec->cpos); + clusters =3D grub_le_to_cpu32(rec->clusters); + + block_pos =3D grub_ocfs2_clusters_to_blocks (data, cpos); + block_highest =3D grub_ocfs2_clusters_to_blocks (data, cpos + cluste= rs); + + if (block >=3D block_pos && block < block_highest) + break; + index++; + } + + if (index =3D=3D grub_le_to_cpu16(el->next_free_rec)) + { + grub_error (GRUB_ERR_FILE_READ_ERROR, "index not found in extent lis= t"); + 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 =3D node->data; + struct grub_ocfs2_inode *inode =3D node->inode; + struct grub_ocfs2_extent_block *eb =3D node->eb; + struct grub_ocfs2_extent_list *el; + struct grub_ocfs2_extent_rec *rec; + + el =3D &inode->id2.list; + while (el->tree_depth) + { + i =3D grub_ocfs2_find_index (data, el, fileblock); + if (grub_errno) + return grub_errno; + + rec =3D &el->recs[i]; + sector =3D grub_ocfs2_blocks_to_sectors (data, + grub_le_to_cpu64(rec->blkno)); + if (grub_disk_read (data->disk, sector, 0, 1 << data->blkbits, + (char *)eb)) + return grub_errno; + + if (grub_strncmp (eb->signature, OCFS2_EXTENT_BLOCK_SIGNATURE,=20 + sizeof(OCFS2_EXTENT_BLOCK_SIGNATURE))) + { + grub_error (GRUB_ERR_FILE_READ_ERROR, "bad extent block"); + return grub_errno; + } + + el =3D &eb->list; + } + + i =3D grub_ocfs2_find_index (data, el, fileblock); + if (grub_errno) + return grub_errno; + + rec =3D &el->recs[i]; + + physical =3D grub_le_to_cpu64(rec->blkno) + fileblock; + physical -=3D grub_ocfs2_clusters_to_blocks(data, grub_le_to_cpu32(rec->= 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->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 =3D node; + grub_uint64_t inode_size; + + if (!diro->inode_read) + { + grub_ocfs2_read_inode (diro->data, diro->ino, diro->inode); + if (grub_errno) + return 0; + } + + if (!GRUB_ISLNK (grub_le_to_cpu16 (diro->inode->mode))) + { + grub_error (GRUB_ERR_BAD_FILE_TYPE, "inode is not a symlink"); + return 0; + } + + inode_size =3D grub_le_to_cpu64 (diro->inode->size); + symlink =3D grub_malloc (inode_size + 1); + if (!symlink) + return 0; + + /* fast symlink */ + if (!diro->inode->clusters) + { + grub_strncpy (symlink, diro->inode->id2.symlink, inode_size); + } + else + { + grub_ocfs2_read_file (diro, 0, 0, inode_size, symlink); + if (grub_errno) + { + grub_free (symlink); + return 0; + } + } + + symlink[inode_size] =3D '\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 =3D 0; + struct grub_fshelp_node *diro =3D (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->size)) + { + struct grub_ocfs2_dir_entry dirent; +=20 + 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 =3D 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 =3D grub_malloc (sizeof (struct grub_fshelp_node)); + if (!fdiro) + return 0; + + fdiro->data =3D diro->data; + fdiro->ino =3D grub_le_to_cpu64 (dirent.inode); + fdiro->inode =3D (struct grub_ocfs2_inode *) fdiro->inode_block; + fdiro->eb =3D (struct grub_ocfs2_extent_block *) fdiro->eb_block; + fdiro->inode_read =3D 0; + + filename[dirent.name_len] =3D '\0'; + + if (dirent.file_type =3D=3D OCFS2_FT_DIR) + type =3D GRUB_FSHELP_DIR; + else if (dirent.file_type =3D=3D OCFS2_FT_SYMLINK) + type =3D GRUB_FSHELP_SYMLINK; + else if (dirent.file_type =3D=3D OCFS2_FT_REG_FILE) + type =3D GRUB_FSHELP_REG; + + if (hook (filename, type, fdiro)) + return 1; + } + fpos +=3D 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 =3D 0; + +#ifndef GRUB_UTIL + grub_dl_ref (my_mod); +#endif + + data =3D 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 =3D grub_le_to_cpu64 (data->diropen.inode->size); + file->data =3D data; + file->offset =3D 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 =3D=20 + (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,=20 + int (*hook) (const char *filename, int dir)) +{ + struct grub_ocfs2_data *data =3D 0; + struct grub_fshelp_node *fdiro =3D 0; + =20 + 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); + =20 + if (filetype =3D=3D GRUB_FSHELP_DIR) + return hook (filename, 1); + else=20 + return hook (filename, 0); + =20 + return 0; + } + +#ifndef GRUB_UTIL + grub_dl_ref (my_mod); +#endif + + data =3D 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 !=3D &data->diropen) + grub_free (fdiro); + grub_free (data); + +#ifndef GRUB_UTIL + grub_dl_unref (my_mod); +#endif + + return grub_errno; +} + +=0C + +static struct grub_fs grub_ocfs2_fs =3D + { + .name =3D "ocfs2", + .dir =3D grub_ocfs2_dir, + .open =3D grub_ocfs2_open, + .read =3D grub_ocfs2_read, + .close =3D grub_ocfs2_close, + .label =3D grub_ocfs2_label, + .next =3D 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 =3D mod; +} + +GRUB_MOD_FINI +{ + grub_fs_unregister (&grub_ocfs2_fs); +} +#endif /* ! GRUB_UTIL */ diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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 */ =20 diff -uprN --exclude=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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=3D'*~' --exclude=3DCVS --exclude=3Dconfigure ../tmp/gr= ub2/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 (); =20 /* 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 (); =20 grub_pc_partition_map_fini (); grub_util_biosdisk_fini ();