partitioned mdraid support (untested)

This commit is contained in:
Vladimir 'phcoder' Serbinenko 2011-01-08 16:33:49 +01:00
parent 6383772c92
commit 4b07826647
3 changed files with 13 additions and 6 deletions

View file

@ -639,7 +639,7 @@ grub_util_get_dev_abstraction (const char *os_dev __attribute__((unused)))
return GRUB_DEV_ABSTRACTION_LVM; return GRUB_DEV_ABSTRACTION_LVM;
/* Check for RAID. */ /* Check for RAID. */
if (!strncmp (os_dev, "/dev/md", 7)) if (!strncmp (os_dev, "/dev/md", 7) && ! grub_util_device_is_mapped (os_dev))
return GRUB_DEV_ABSTRACTION_RAID; return GRUB_DEV_ABSTRACTION_RAID;
#endif #endif

View file

@ -325,18 +325,23 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
#ifdef HAVE_DEVICE_MAPPER int
static int grub_util_device_is_mapped (const char *dev)
device_is_mapped (const char *dev)
{ {
#ifdef HAVE_DEVICE_MAPPER
struct stat st; struct stat st;
if (!grub_device_mapper_supported ())
return 0;
if (stat (dev, &st) < 0) if (stat (dev, &st) < 0)
return 0; return 0;
return dm_is_dm_major (major (st.st_rdev)); return dm_is_dm_major (major (st.st_rdev));
} #else
return 0;
#endif /* HAVE_DEVICE_MAPPER */ #endif /* HAVE_DEVICE_MAPPER */
}
#if defined(__linux__) || defined(__CYGWIN__) || defined(HAVE_DIOCGDINFO) #if defined(__linux__) || defined(__CYGWIN__) || defined(HAVE_DIOCGDINFO)
static grub_disk_addr_t static grub_disk_addr_t
@ -351,7 +356,7 @@ find_partition_start (const char *dev)
# endif /* !defined(HAVE_DIOCGDINFO) */ # endif /* !defined(HAVE_DIOCGDINFO) */
# ifdef HAVE_DEVICE_MAPPER # ifdef HAVE_DEVICE_MAPPER
if (grub_device_mapper_supported () && device_is_mapped (dev)) { if (grub_util_device_is_mapped (dev)) {
struct dm_task *task = NULL; struct dm_task *task = NULL;
grub_uint64_t start, length; grub_uint64_t start, length;
char *target_type, *params, *space; char *target_type, *params, *space;

View file

@ -54,6 +54,8 @@ void grub_find_zpool_from_dir (const char *dir,
char *grub_make_system_path_relative_to_its_root (const char *path) char *grub_make_system_path_relative_to_its_root (const char *path)
__attribute__ ((warn_unused_result)); __attribute__ ((warn_unused_result));
int
grub_util_device_is_mapped (const char *dev);
void * EXPORT_FUNC(xmalloc) (grub_size_t size) __attribute__ ((warn_unused_result)); void * EXPORT_FUNC(xmalloc) (grub_size_t size) __attribute__ ((warn_unused_result));
void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) __attribute__ ((warn_unused_result)); void * EXPORT_FUNC(xrealloc) (void *ptr, grub_size_t size) __attribute__ ((warn_unused_result));