* util/raid.c: Fold into ...

* util/getroot_linux.c: ... here. Make all functions static.
This commit is contained in:
Vladimir 'phcoder' Serbinenko 2013-10-08 16:59:50 +02:00
parent c4cf25eef7
commit cef86fefda
5 changed files with 71 additions and 102 deletions

View file

@ -1,3 +1,8 @@
2013-10-08 Vladimir Serbinenko <phcoder@gmail.com>
* util/raid.c: Fold into ...
* util/getroot_linux.c: ... here. Make all functions static.
2013-10-08 Vladimir Serbinenko <phcoder@gmail.com> 2013-10-08 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/fs/zfs/zfs_lz4.c: Switch from ad-hoc endiannes and width * grub-core/fs/zfs/zfs_lz4.c: Switch from ad-hoc endiannes and width

View file

@ -13,7 +13,6 @@ library = {
common = util/getroot_unix.c; common = util/getroot_unix.c;
common = util/getroot_os.c; common = util/getroot_os.c;
common = util/getroot_devmapper.c; common = util/getroot_devmapper.c;
common = util/raid.c;
common = grub-core/kern/emu/hostdisk.c; common = grub-core/kern/emu/hostdisk.c;
common = grub-core/kern/emu/hostdisk_devmapper.c; common = grub-core/kern/emu/hostdisk_devmapper.c;
common = grub-core/kern/emu/hostdisk_os.c; common = grub-core/kern/emu/hostdisk_os.c;

View file

@ -39,9 +39,6 @@ char *grub_make_system_path_relative_to_its_root (const char *path);
const char *grub_util_check_block_device (const char *blk_dev); const char *grub_util_check_block_device (const char *blk_dev);
const char *grub_util_check_char_device (const char *blk_dev); const char *grub_util_check_char_device (const char *blk_dev);
char *grub_util_get_grub_dev (const char *os_dev); char *grub_util_get_grub_dev (const char *os_dev);
#ifdef __linux__
char **grub_util_raid_getmembers (const char *name, int bootable);
#endif
#if defined (__FreeBSD__) || defined(__FreeBSD_kernel__) #if defined (__FreeBSD__) || defined(__FreeBSD_kernel__)
void grub_util_follow_gpart_up (const char *name, grub_disk_addr_t *off_out, void grub_util_follow_gpart_up (const char *name, grub_disk_addr_t *off_out,
char **name_out); char **name_out);

View file

@ -49,6 +49,12 @@
#include <sys/wait.h> #include <sys/wait.h>
#include <linux/types.h>
#include <linux/major.h>
#include <linux/raid/md_p.h>
#include <linux/raid/md_u.h>
#include <grub/i18n.h>
/* Defines taken from btrfs/ioctl.h. */ /* Defines taken from btrfs/ioctl.h. */
@ -88,6 +94,66 @@ struct mountinfo_entry
char fstype[ESCAPED_PATH_MAX + 1], device[ESCAPED_PATH_MAX + 1]; char fstype[ESCAPED_PATH_MAX + 1], device[ESCAPED_PATH_MAX + 1];
}; };
static char **
grub_util_raid_getmembers (const char *name, int bootable)
{
int fd, ret, i, j;
char **devicelist;
mdu_version_t version;
mdu_array_info_t info;
mdu_disk_info_t disk;
fd = open (name, O_RDONLY);
if (fd == -1)
grub_util_error (_("cannot open `%s': %s"), name, strerror (errno));
ret = ioctl (fd, RAID_VERSION, &version);
if (ret != 0)
grub_util_error (_("ioctl RAID_VERSION error: %s"), strerror (errno));
if ((version.major != 0 || version.minor != 90)
&& (version.major != 1 || version.minor != 0)
&& (version.major != 1 || version.minor != 1)
&& (version.major != 1 || version.minor != 2))
grub_util_error (_("unsupported RAID version: %d.%d"),
version.major, version.minor);
if (bootable && (version.major != 0 || version.minor != 90))
grub_util_error (_("unsupported RAID version: %d.%d"),
version.major, version.minor);
ret = ioctl (fd, GET_ARRAY_INFO, &info);
if (ret != 0)
grub_util_error (_("ioctl GET_ARRAY_INFO error: %s"), strerror (errno));
devicelist = xmalloc ((info.nr_disks + 1) * sizeof (char *));
for (i = 0, j = 0; j < info.nr_disks; i++)
{
disk.number = i;
ret = ioctl (fd, GET_DISK_INFO, &disk);
if (ret != 0)
grub_util_error (_("ioctl GET_DISK_INFO error: %s"), strerror (errno));
if (disk.state & (1 << MD_DISK_REMOVED))
continue;
if (disk.state & (1 << MD_DISK_ACTIVE))
devicelist[j] = grub_find_device (NULL,
makedev (disk.major, disk.minor));
else
devicelist[j] = NULL;
j++;
}
devicelist[j] = NULL;
close (fd);
return devicelist;
}
/* Statting something on a btrfs filesystem always returns a virtual device /* Statting something on a btrfs filesystem always returns a virtual device
major/minor pair rather than the real underlying device, because btrfs major/minor pair rather than the real underlying device, because btrfs
can span multiple underlying devices (and even if it's currently only can span multiple underlying devices (and even if it's currently only

View file

@ -1,98 +0,0 @@
/* raid.c - RAID support for GRUB utils. */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
*
* GRUB 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 3 of the License, or
* (at your option) any later version.
*
* GRUB 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 GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
/* We only support RAID on Linux. */
#ifdef __linux__
#include <grub/emu/misc.h>
#include <grub/util/misc.h>
#include <grub/emu/getroot.h>
#include <string.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <sys/types.h>
#include <linux/types.h>
#include <linux/major.h>
#include <linux/raid/md_p.h>
#include <linux/raid/md_u.h>
#include <grub/i18n.h>
char **
grub_util_raid_getmembers (const char *name, int bootable)
{
int fd, ret, i, j;
char **devicelist;
mdu_version_t version;
mdu_array_info_t info;
mdu_disk_info_t disk;
fd = open (name, O_RDONLY);
if (fd == -1)
grub_util_error (_("cannot open `%s': %s"), name, strerror (errno));
ret = ioctl (fd, RAID_VERSION, &version);
if (ret != 0)
grub_util_error (_("ioctl RAID_VERSION error: %s"), strerror (errno));
if ((version.major != 0 || version.minor != 90)
&& (version.major != 1 || version.minor != 0)
&& (version.major != 1 || version.minor != 1)
&& (version.major != 1 || version.minor != 2))
grub_util_error (_("unsupported RAID version: %d.%d"),
version.major, version.minor);
if (bootable && (version.major != 0 || version.minor != 90))
grub_util_error (_("unsupported RAID version: %d.%d"),
version.major, version.minor);
ret = ioctl (fd, GET_ARRAY_INFO, &info);
if (ret != 0)
grub_util_error (_("ioctl GET_ARRAY_INFO error: %s"), strerror (errno));
devicelist = xmalloc ((info.nr_disks + 1) * sizeof (char *));
for (i = 0, j = 0; j < info.nr_disks; i++)
{
disk.number = i;
ret = ioctl (fd, GET_DISK_INFO, &disk);
if (ret != 0)
grub_util_error (_("ioctl GET_DISK_INFO error: %s"), strerror (errno));
if (disk.state & (1 << MD_DISK_REMOVED))
continue;
if (disk.state & (1 << MD_DISK_ACTIVE))
devicelist[j] = grub_find_device (NULL,
makedev (disk.major, disk.minor));
else
devicelist[j] = NULL;
j++;
}
devicelist[j] = NULL;
close (fd);
return devicelist;
}
#endif /* ! __linux__ */