Re: [patch 0/2] grub-0.97: btrfs support

Edward Shishkin
2009-12-11T15:27:54Z

[-- Attachment #1: Type: text/plain, Size: 1763 bytes --]

Johannes Hirte wrote:
> Am Freitag 11 Dezember 2009 12:17:29 schrieb Edward Shishkin:
>
>> Johannes Hirte wrote:
>>
>>> Am Freitag 11 Dezember 2009 00:15:46 schrieb Johannes Hirte:
>>>
>>>
>>>> Am Freitag 25 September 2009 00:06:23 schrieb Edward Shishkin:
>>>>
>>>>
>>>>> Hello everyone.
>>>>>
>>>>>
>>>> ...
>>>>
>>>>
>>>>
>>>>> The following patches are for Fedora 10(**).
>>>>> The distro-independent package will be put to kernel.org a bit later.
>>>>>
>>>>>
>>>>> All comments, bugreports, etc. are welcome as usual.
>>>>>
>>>>>
>>>> Ok, I have another comment/bugreport *g*.
>>>>
>>>> I'm testing this patch with gentoo, so the grub sources are not identicaly
>>>> the same. With this patches applied, grub is unable to detect JFS or XFS
>>>> filesystems. XFS is reported as unknown, JFS is reported as btrfs.
>>>> Reiserfs and ext2/3 are detected as expected.
>>>>
>>>>
>> Yes, this patch is for Fedora. For other distros
>> some issues are possible, so please be careful..
>>
>
> I've also tested now with the fedora sources. There is the same bug. The btrfs
> patch breaks the filesystem detection. All filesystems after btrfs in fsys_table
> aren't detected. Moving btrfs to the end of fsys_table is a workaround but will
> interfere with FFS. So this should better be fixed in the btrfs-part of grub,
> so that it:
>
> a) doesn't missdetect a JFS filesystem as btrfs
> b) doesn't break the detection for remaining filesystems in the array.
>

Hello.

Yes, I confirm that xfs, etc. file systems are not detected,
but missdetection jfs as btrfs looks rather fantastic :)

Please, try the attached patch. Report if any problems.

Thanks,
Edward.

[-- Attachment #2: grub-btrfs-mount-fix.patch --]
[-- Type: text/plain, Size: 880 bytes --]

Problem:
XFS, JFS, etc. file systems of the fsys_table are not
detected by grub with grub-0.97-btrfs.patch applied.

BUG:
btrfs_mount() sets ERR_FSYS_MOUNT to the global variable
errnum if no btrfs metadata were found on a partition.
As the result all next calls of devread() (and, hence,
attempts to find metadata of other file systems) failed.

Solution:
Don't set ERR_FSYS_MOUNT, if btrfs metadata were found,
just return 0.

Signed-off-by: Edward Shishkin <edward@redhat.com>
---
stage2/fsys_btrfs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

--- grub-0.97.orig/stage2/fsys_btrfs.c
+++ grub-0.97/stage2/fsys_btrfs.c
@@ -638,7 +638,7 @@ int btrfs_mount(void)
if (ret) {
btrfs_msg("Drive %lu, partition %lu: no Btrfs metadata\n",
current_drive, part_start);
- goto error;
+ return 0;
}
ret = btrfs_uptodate_super_copy(BTRFS_FS_INFO);
if (ret)