svn commit: r232535 - stable/9/sys/geom/part
Andrey V. Elsukov
ae at FreeBSD.org
Mon Mar 5 04:51:23 UTC 2012
Author: ae
Date: Mon Mar 5 04:51:22 2012
New Revision: 232535
URL: http://svn.freebsd.org/changeset/base/232535
Log:
MFC r231754:
Add additional check to EBR probe and create methods:
don't try probe and create EBR scheme when parent partition type
is not "ebr". This fixes error messages about corrupted EBR for
some partitions where is actually another partition scheme.
NOTE: if you have EBR on the partition with different than "ebr"
(0x05) type, then you will lost access to partitions until it will be
changed.
MFC r231928:
Add alias for the partition type 0x0f. Now "ebr" name is used for both
types 0x05 and 0x0f, but 0x05 is preferred and used when partition is
created with "gpart add -t ebr ...".
This should keep EBR partitions accessible after r231754 for those,
who have EBR on the partition with type 0x0f.
Modified:
stable/9/sys/geom/part/g_part_ebr.c
stable/9/sys/geom/part/g_part_mbr.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/geom/part/g_part_ebr.c
==============================================================================
--- stable/9/sys/geom/part/g_part_ebr.c Mon Mar 5 04:46:28 2012 (r232534)
+++ stable/9/sys/geom/part/g_part_ebr.c Mon Mar 5 04:51:22 2012 (r232535)
@@ -268,7 +268,7 @@ g_part_ebr_add(struct g_part_table *base
static int
g_part_ebr_create(struct g_part_table *basetable, struct g_part_parms *gpp)
{
- char psn[8];
+ char type[64];
struct g_consumer *cp;
struct g_provider *pp;
uint32_t msize;
@@ -285,10 +285,15 @@ g_part_ebr_create(struct g_part_table *b
if (basetable->gpt_depth == 0)
return (ENXIO);
cp = LIST_FIRST(&pp->consumers);
- error = g_getattr("PART::scheme", cp, &psn);
- if (error)
+ error = g_getattr("PART::scheme", cp, &type);
+ if (error != 0)
return (error);
- if (strcmp(psn, "MBR"))
+ if (strcmp(type, "MBR") != 0)
+ return (ENXIO);
+ error = g_getattr("PART::type", cp, &type);
+ if (error != 0)
+ return (error);
+ if (strcmp(type, "ebr") != 0)
return (ENXIO);
msize = MIN(pp->mediasize / pp->sectorsize, UINT32_MAX);
@@ -405,7 +410,7 @@ g_part_ebr_precheck(struct g_part_table
static int
g_part_ebr_probe(struct g_part_table *table, struct g_consumer *cp)
{
- char psn[8];
+ char type[64];
struct g_provider *pp;
u_char *buf, *p;
int error, index, res;
@@ -422,10 +427,16 @@ g_part_ebr_probe(struct g_part_table *ta
/* Check that we have a parent and that it's a MBR. */
if (table->gpt_depth == 0)
return (ENXIO);
- error = g_getattr("PART::scheme", cp, &psn);
- if (error)
+ error = g_getattr("PART::scheme", cp, &type);
+ if (error != 0)
+ return (error);
+ if (strcmp(type, "MBR") != 0)
+ return (ENXIO);
+ /* Check that partition has type DOSPTYP_EBR. */
+ error = g_getattr("PART::type", cp, &type);
+ if (error != 0)
return (error);
- if (strcmp(psn, "MBR"))
+ if (strcmp(type, "ebr") != 0)
return (ENXIO);
/* Check that there's a EBR. */
Modified: stable/9/sys/geom/part/g_part_mbr.c
==============================================================================
--- stable/9/sys/geom/part/g_part_mbr.c Mon Mar 5 04:46:28 2012 (r232534)
+++ stable/9/sys/geom/part/g_part_mbr.c Mon Mar 5 04:51:22 2012 (r232535)
@@ -119,6 +119,7 @@ static struct g_part_mbr_alias {
{ DOSPTYP_EXT, G_PART_ALIAS_EBR },
{ DOSPTYP_NTFS, G_PART_ALIAS_MS_NTFS },
{ DOSPTYP_FAT32, G_PART_ALIAS_MS_FAT32 },
+ { DOSPTYP_EXTLBA, G_PART_ALIAS_EBR },
{ DOSPTYP_LDM, G_PART_ALIAS_MS_LDM_DATA },
{ DOSPTYP_LINSWP, G_PART_ALIAS_LINUX_SWAP },
{ DOSPTYP_LINUX, G_PART_ALIAS_LINUX_DATA },
More information about the svn-src-stable-9
mailing list