From baptiste.daroussin@gmail.com  Mon Jun  7 18:13:09 2010
Return-Path: <baptiste.daroussin@gmail.com>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id E611A106567B
	for <FreeBSD-gnats-submit@freebsd.org>; Mon,  7 Jun 2010 18:13:09 +0000 (UTC)
	(envelope-from baptiste.daroussin@gmail.com)
Received: from mail-wy0-f182.google.com (mail-wy0-f182.google.com [74.125.82.182])
	by mx1.freebsd.org (Postfix) with ESMTP id 784078FC1B
	for <FreeBSD-gnats-submit@freebsd.org>; Mon,  7 Jun 2010 18:13:09 +0000 (UTC)
Received: by wyf28 with SMTP id 28so3677812wyf.13
        for <FreeBSD-gnats-submit@freebsd.org>; Mon, 07 Jun 2010 11:13:08 -0700 (PDT)
Received: by 10.227.68.144 with SMTP id v16mr14188616wbi.156.1275934384172;
        Mon, 07 Jun 2010 11:13:04 -0700 (PDT)
Received: from azathoth.lan ([82.245.249.89])
        by mx.google.com with ESMTPS id n31sm39600322wba.15.2010.06.07.11.13.00
        (version=TLSv1/SSLv3 cipher=RC4-MD5);
        Mon, 07 Jun 2010 11:13:01 -0700 (PDT)
Received: from root (uid 0)
	(envelope-from baptiste.daroussin@gmail.com)
	id cf167
	by azathoth.lan (DragonFly Mail Agent)
	Mon, 07 Jun 2010 20:12:55 +0200
Message-Id: <cf167@azathoth.lan>
Date: Mon, 07 Jun 2010 20:12:55 +0200
From: Bapt <baptiste.daroussin@gmail.com>
Reply-To: Bapt <baptiste.daroussin@gmail.com>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] Add the ability to create linux and fat32 partitions gpart
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         147664
>Category:       kern
>Synopsis:       [geom] [patch] Add the ability to create linux and fat32 partitions gpart
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    ae
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Mon Jun 07 18:20:04 UTC 2010
>Closed-Date:    Fri Feb 11 05:58:16 UTC 2011
>Last-Modified:  Tue Sep 27 21:10:09 UTC 2011
>Originator:     Bapt
>Release:        FreeBSD 8.1-PRERELEASE amd64
>Organization:
>Environment:
System: FreeBSD azathoth.lan 8.1-PRERELEASE FreeBSD 8.1-PRERELEASE #4 r208894M: Mon Jun 7 19:26:29 CEST 2010 root@azathoth.lan:/usr/obj/usr/src/sys/AZATHOTH amd64


	
>Description:
	This patch add the ability to create FAT32 partition (only on MBR scheme) while here I added the ability to create linux, linux-swap and linux-lvm partitions
	
	gpart add -t win95-fat32 da0 to to do it
	
	I can't test on current but it seems to be the same files as on 8-stable, so the patch should also work on current

>How-To-Repeat:
	
>Fix:

	

--- gpart-2.patch begins here ---
Index: sys/geom/part/g_part.h
===================================================================
--- sys/geom/part/g_part.h	(révision 208894)
+++ sys/geom/part/g_part.h	(copie de travail)
@@ -51,6 +51,7 @@
 	G_PART_ALIAS_FREEBSD_VINUM,	/* A Vinum partition entry. */
 	G_PART_ALIAS_FREEBSD_ZFS,	/* A ZFS file system entry. */
 	G_PART_ALIAS_MBR,		/* A MBR (extended) partition entry. */
+	G_PART_ALIAS_WIN95_FAT32, /* Win95 FAT32 entry */
 	G_PART_ALIAS_LINUX_DATA,	/* A Linux data partition entry. */
 	G_PART_ALIAS_LINUX_LVM,		/* A Linux LVM partition entry. */
 	G_PART_ALIAS_LINUX_RAID,	/* A Linux RAID partition entry. */
Index: sys/geom/part/g_part.c
===================================================================
--- sys/geom/part/g_part.c	(révision 208894)
+++ sys/geom/part/g_part.c	(copie de travail)
@@ -83,6 +83,7 @@
 	{ "freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
 	{ "freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
 	{ "freebsd-zfs", G_PART_ALIAS_FREEBSD_ZFS },
+	{ "win95-fat32", G_PART_ALIAS_WIN95_FAT32 },
 	{ "linux-data", G_PART_ALIAS_LINUX_DATA },
 	{ "linux-lvm", G_PART_ALIAS_LINUX_LVM },
 	{ "linux-raid", G_PART_ALIAS_LINUX_RAID },
Index: sys/geom/part/g_part_mbr.c
===================================================================
--- sys/geom/part/g_part_mbr.c	(révision 208894)
+++ sys/geom/part/g_part_mbr.c	(copie de travail)
@@ -124,6 +124,30 @@
 		*dp_typ = DOSPTYP_386BSD;
 		return (0);
 	}
+
+	alias = g_part_alias_name(G_PART_ALIAS_WIN95_FAT32);
+	if (!strcasecmp(type, alias)) {
+		*dp_typ = DOSPTYP_WIN95_FAT32;
+		return (0);
+	}
+
+	alias = g_part_alias_name(G_PART_ALIAS_LINUX_DATA);
+	if (!strcasecmp(type, alias)) {
+		*dp_typ = DOSPTYP_LINUX;
+		return (0);
+	}
+
+	alias = g_part_alias_name(G_PART_ALIAS_LINUX_SWAP);
+	if (!strcasecmp(type, alias)) {
+		*dp_typ = DOSPTYP_LINSWP;
+		return (0);
+	}
+
+	alias = g_part_alias_name(G_PART_ALIAS_LINUX_LVM);
+	if (!strcasecmp(type, alias)) {
+		*dp_typ = DOSPTYP_LINLVM;
+		return (0);
+	}
 	return (EINVAL);
 }
 
@@ -483,6 +507,19 @@
 	type = entry->ent.dp_typ;
 	if (type == DOSPTYP_386BSD)
 		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
+
+	if (type == DOSPTYP_WIN95_FAT32)
+		return (g_part_alias_name(G_PART_ALIAS_WIN95_FAT32));
+
+	if (type == DOSPTYP_LINUX)
+		return (g_part_alias_name(G_PART_ALIAS_LINUX_DATA));
+	
+	if (type == DOSPTYP_LINSWP)
+		return (g_part_alias_name(G_PART_ALIAS_LINUX_SWAP));
+
+	if (type == DOSPTYP_LINLVM)
+		return (g_part_alias_name(G_PART_ALIAS_LINUX_LVM));
+
 	snprintf(buf, bufsz, "!%d", type);
 	return (buf);
 }
Index: sys/sys/diskmbr.h
===================================================================
--- sys/sys/diskmbr.h	(révision 208894)
+++ sys/sys/diskmbr.h	(copie de travail)
@@ -44,6 +44,8 @@
 #define	DOSMAGIC	0xAA55
 
 #define	DOSPTYP_386BSD	0xa5	/* 386BSD partition type */
+#define DOSPTYP_WIN95_FAT32	0x0b	/* Win95 FAT32 */
+#define DOSPTYP_LINLVM 0x8e		/* Linux LVM partition */
 #define	DOSPTYP_LINSWP	0x82	/* Linux swap partition */
 #define	DOSPTYP_LINUX	0x83	/* Linux partition */
 #define	DOSPTYP_PMBR	0xee	/* GPT Protective MBR */
--- gpart-2.patch ends here ---


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-geom 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Tue Jun 15 01:35:55 UTC 2010 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147664 
Responsible-Changed-From-To: freebsd-geom->ae 
Responsible-Changed-By: ae 
Responsible-Changed-When: Thu Jan 27 12:46:19 UTC 2011 
Responsible-Changed-Why:  
Take it. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147664 

From: Scot Hetzel <swhetzel@gmail.com>
To: bug-followup@FreeBSD.org
Cc: freebsd-geom@freebsd.org
Subject: Re: kern/147664: [geom] [patch] Add the ability to create linux and
 fat32 partitions gpart
Date: Thu, 27 Jan 2011 11:37:37 -0600

 On Thu, Jan 27, 2011 at 6:46 AM,  <ae@freebsd.org> wrote:
 > Synopsis: [geom] [patch] Add the ability to create linux and fat32 partitions gpart
 >
 I had a look at the patch in PR 147664, the only change that should be
 made is that win95-fat32 should be changed to ms-fat32,  as fat32 is
 not Windows 95 specific.
 
 sed -e 's/win95-fat32/ms-fat32/g' -e 's/WIN95_FAT32/MS_FAT32/g' gpart-2.patch
 
 Then the *MS_FAT32 should be sorted with the other *MS_* types.
 
 Scot

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/147664: commit references a PR
Date: Fri, 28 Jan 2011 11:13:08 +0000 (UTC)

 Author: ae
 Date: Fri Jan 28 11:13:01 2011
 New Revision: 218014
 URL: http://svn.freebsd.org/changeset/base/218014
 
 Log:
   Add new user-friendly aliases for partition types for the MBR and
   EBR schemes: fat32, ebr, linux-data, linux-raid, linux-swap and
   linux-lvm. Add bios-boot GUID and alias for the GPT scheme. It used by
   GRUB 2 loader. Also do sorting definitions of types in diskmbr.h
   and in g_part.c.
   
   PR:		bin/120990, kern/147664
   MFC after:	2 weeks
 
 Modified:
   head/sys/geom/part/g_part.c
   head/sys/geom/part/g_part.h
   head/sys/geom/part/g_part_ebr.c
   head/sys/geom/part/g_part_gpt.c
   head/sys/geom/part/g_part_mbr.c
   head/sys/sys/diskmbr.h
   head/sys/sys/gpt.h
 
 Modified: head/sys/geom/part/g_part.c
 ==============================================================================
 --- head/sys/geom/part/g_part.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -76,7 +76,10 @@ struct g_part_alias_list {
  	{ "apple-raid-offline", G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ "apple-tv-recovery", G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ "apple-ufs", G_PART_ALIAS_APPLE_UFS },
 +	{ "bios-boot", G_PART_ALIAS_BIOS_BOOT },
 +	{ "ebr", G_PART_ALIAS_EBR },
  	{ "efi", G_PART_ALIAS_EFI },
 +	{ "fat32", G_PART_ALIAS_MS_FAT32 },
  	{ "freebsd", G_PART_ALIAS_FREEBSD },
  	{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
  	{ "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
 @@ -87,6 +90,7 @@ struct g_part_alias_list {
  	{ "linux-lvm", G_PART_ALIAS_LINUX_LVM },
  	{ "linux-raid", G_PART_ALIAS_LINUX_RAID },
  	{ "linux-swap", G_PART_ALIAS_LINUX_SWAP },
 +	{ "mbr", G_PART_ALIAS_MBR },
  	{ "ms-basic-data", G_PART_ALIAS_MS_BASIC_DATA },
  	{ "ms-ldm-data", G_PART_ALIAS_MS_LDM_DATA },
  	{ "ms-ldm-metadata", G_PART_ALIAS_MS_LDM_METADATA },
 @@ -98,7 +102,6 @@ struct g_part_alias_list {
  	{ "netbsd-lfs", G_PART_ALIAS_NETBSD_LFS },
  	{ "netbsd-raid", G_PART_ALIAS_NETBSD_RAID },
  	{ "netbsd-swap", G_PART_ALIAS_NETBSD_SWAP },
 -	{ "mbr", G_PART_ALIAS_MBR }
  };
  
  /*
 
 Modified: head/sys/geom/part/g_part.h
 ==============================================================================
 --- head/sys/geom/part/g_part.h	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part.h	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -66,6 +66,9 @@ enum g_part_alias {
  	G_PART_ALIAS_NETBSD_RAID,	/* A NetBSD RAID partition entry. */
  	G_PART_ALIAS_NETBSD_SWAP,	/* A NetBSD swap partition entry. */
  	G_PART_ALIAS_NETBSD_LFS,	/* A NetBSD LFS partition entry. */
 +	G_PART_ALIAS_EBR,		/* A EBR partition entry. */
 +	G_PART_ALIAS_MS_FAT32,		/* A Microsoft FAT32 partition entry. */
 +	G_PART_ALIAS_BIOS_BOOT,		/* A GRUB 2 boot partition entry. */
  	/* Keep the following last */
  	G_PART_ALIAS_COUNT
  };
 
 Modified: head/sys/geom/part/g_part_ebr.c
 ==============================================================================
 --- head/sys/geom/part/g_part_ebr.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part_ebr.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -113,6 +113,19 @@ static struct g_part_scheme g_part_ebr_s
  };
  G_PART_SCHEME_DECLARE(g_part_ebr);
  
 +static struct g_part_ebr_alias {
 +	u_char		typ;
 +	int		alias;
 +} ebr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static void ebr_set_chs(struct g_part_table *, uint32_t, u_char *, u_char *,
      u_char *);
  
 @@ -152,6 +165,7 @@ ebr_parse_type(const char *type, u_char 
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -160,14 +174,18 @@ ebr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(ebr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = ebr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
  
 +
  static void
  ebr_set_chs(struct g_part_table *table, uint32_t lba, u_char *cylp, u_char *hdp,
      u_char *secp)
 @@ -543,13 +561,15 @@ g_part_ebr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_ebr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_ebr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	if (type == DOSPTYP_386BSD)
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		if (ebr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(ebr_alias_match[i].alias));
 +	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: head/sys/geom/part/g_part_gpt.c
 ==============================================================================
 --- head/sys/geom/part/g_part_gpt.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part_gpt.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -146,6 +146,7 @@ static struct uuid gpt_uuid_apple_raid =
  static struct uuid gpt_uuid_apple_raid_offline = GPT_ENT_TYPE_APPLE_RAID_OFFLINE;
  static struct uuid gpt_uuid_apple_tv_recovery = GPT_ENT_TYPE_APPLE_TV_RECOVERY;
  static struct uuid gpt_uuid_apple_ufs = GPT_ENT_TYPE_APPLE_UFS;
 +static struct uuid gpt_uuid_bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
  static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
  static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
  static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
 @@ -181,6 +182,7 @@ static struct g_part_uuid_alias {
  	{ &gpt_uuid_apple_raid_offline,	G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ &gpt_uuid_apple_tv_recovery,	G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ &gpt_uuid_apple_ufs,		G_PART_ALIAS_APPLE_UFS },
 +	{ &gpt_uuid_bios_boot,		G_PART_ALIAS_BIOS_BOOT },
  	{ &gpt_uuid_efi, 		G_PART_ALIAS_EFI },
  	{ &gpt_uuid_freebsd,		G_PART_ALIAS_FREEBSD },
  	{ &gpt_uuid_freebsd_boot, 	G_PART_ALIAS_FREEBSD_BOOT },
 
 Modified: head/sys/geom/part/g_part_mbr.c
 ==============================================================================
 --- head/sys/geom/part/g_part_mbr.c	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/geom/part/g_part_mbr.c	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -108,12 +108,27 @@ static struct g_part_scheme g_part_mbr_s
  };
  G_PART_SCHEME_DECLARE(g_part_mbr);
  
 +static struct g_part_mbr_alias {
 +	u_char		typ;
 +	int		alias;
 +} mbr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_EXT,		G_PART_ALIAS_EBR },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static int
  mbr_parse_type(const char *type, u_char *dp_typ)
  {
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -122,15 +137,13 @@ mbr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 -	}
 -	alias = g_part_alias_name(G_PART_ALIAS_MS_NTFS);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_NTFS;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(mbr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = mbr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
 @@ -505,18 +518,15 @@ g_part_mbr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_mbr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_mbr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	switch (type) {
 -	case DOSPTYP_386BSD:
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	case DOSPTYP_NTFS:
 -		return (g_part_alias_name(G_PART_ALIAS_MS_NTFS));
 -	default:
 -		snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		if (mbr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(mbr_alias_match[i].alias));
  	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: head/sys/sys/diskmbr.h
 ==============================================================================
 --- head/sys/sys/diskmbr.h	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/sys/diskmbr.h	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -43,13 +43,16 @@
  #define	DOSMAGICOFFSET	510
  #define	DOSMAGIC	0xAA55
  
 +#define	DOSPTYP_EXT	0x05	/* DOS extended partition */
 +#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_FAT32	0x0b	/* FAT32 partition */
 +#define	DOSPTYP_EXTLBA	0x0f	/* DOS extended partition */
  #define	DOSPTYP_386BSD	0xa5	/* 386BSD partition type */
  #define	DOSPTYP_LINSWP	0x82	/* Linux swap partition */
  #define	DOSPTYP_LINUX	0x83	/* Linux partition */
 +#define	DOSPTYP_LINLVM	0x8e	/* Linux LVM partition */
  #define	DOSPTYP_PMBR	0xee	/* GPT Protective MBR */
 -#define	DOSPTYP_EXT	5	/* DOS extended partition */
 -#define	DOSPTYP_EXTLBA	15	/* DOS extended partition */
 -#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_LINRAID	0xfd	/* Linux raid partition */
  
  struct dos_partition {
  	unsigned char	dp_flag;	/* bootstrap flags */
 
 Modified: head/sys/sys/gpt.h
 ==============================================================================
 --- head/sys/sys/gpt.h	Fri Jan 28 08:57:58 2011	(r218013)
 +++ head/sys/sys/gpt.h	Fri Jan 28 11:13:01 2011	(r218014)
 @@ -150,4 +150,10 @@ struct gpt_ent {
  #define	GPT_ENT_TYPE_NETBSD_CGD		\
  	{0x2db519ec,0xb10f,0x11dc,0xb9,0x9b,{0x00,0x19,0xd1,0x87,0x96,0x48}}
  
 +/*
 + * Boot partition used by GRUB 2.
 + */
 +#define	GPT_ENT_TYPE_BIOS_BOOT		\
 +	{0x21686148,0x6449,0x6e6f,0x74,0x4e,{0x65,0x65,0x64,0x45,0x46,0x49}}
 +
  #endif /* _SYS_GPT_H_ */
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: open->patched 
State-Changed-By: ae 
State-Changed-When: Mon Jan 31 11:44:52 UTC 2011 
State-Changed-Why:  
Patched in head/. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147664 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/147664: commit references a PR
Date: Fri, 11 Feb 2011 05:37:13 +0000 (UTC)

 Author: ae
 Date: Fri Feb 11 05:37:05 2011
 New Revision: 218536
 URL: http://svn.freebsd.org/changeset/base/218536
 
 Log:
   MFC r218014:
     Add new user-friendly aliases for partition types for the MBR and
     EBR schemes: fat32, ebr, linux-data, linux-raid, linux-swap and
     linux-lvm. Add bios-boot GUID and alias for the GPT scheme. It used by
     GRUB 2 loader. Also do sorting definitions of types in diskmbr.h
     and in g_part.c.
   
     PR:		bin/120990, kern/147664
 
 Modified:
   stable/8/sys/geom/part/g_part.c
   stable/8/sys/geom/part/g_part.h
   stable/8/sys/geom/part/g_part_ebr.c
   stable/8/sys/geom/part/g_part_gpt.c
   stable/8/sys/geom/part/g_part_mbr.c
   stable/8/sys/sys/diskmbr.h
   stable/8/sys/sys/gpt.h
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
 
 Modified: stable/8/sys/geom/part/g_part.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -76,7 +76,10 @@ struct g_part_alias_list {
  	{ "apple-raid-offline", G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ "apple-tv-recovery", G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ "apple-ufs", G_PART_ALIAS_APPLE_UFS },
 +	{ "bios-boot", G_PART_ALIAS_BIOS_BOOT },
 +	{ "ebr", G_PART_ALIAS_EBR },
  	{ "efi", G_PART_ALIAS_EFI },
 +	{ "fat32", G_PART_ALIAS_MS_FAT32 },
  	{ "freebsd", G_PART_ALIAS_FREEBSD },
  	{ "freebsd-boot", G_PART_ALIAS_FREEBSD_BOOT },
  	{ "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
 @@ -87,6 +90,7 @@ struct g_part_alias_list {
  	{ "linux-lvm", G_PART_ALIAS_LINUX_LVM },
  	{ "linux-raid", G_PART_ALIAS_LINUX_RAID },
  	{ "linux-swap", G_PART_ALIAS_LINUX_SWAP },
 +	{ "mbr", G_PART_ALIAS_MBR },
  	{ "ms-basic-data", G_PART_ALIAS_MS_BASIC_DATA },
  	{ "ms-ldm-data", G_PART_ALIAS_MS_LDM_DATA },
  	{ "ms-ldm-metadata", G_PART_ALIAS_MS_LDM_METADATA },
 @@ -98,7 +102,6 @@ struct g_part_alias_list {
  	{ "netbsd-lfs", G_PART_ALIAS_NETBSD_LFS },
  	{ "netbsd-raid", G_PART_ALIAS_NETBSD_RAID },
  	{ "netbsd-swap", G_PART_ALIAS_NETBSD_SWAP },
 -	{ "mbr", G_PART_ALIAS_MBR }
  };
  
  /*
 
 Modified: stable/8/sys/geom/part/g_part.h
 ==============================================================================
 --- stable/8/sys/geom/part/g_part.h	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part.h	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -66,6 +66,9 @@ enum g_part_alias {
  	G_PART_ALIAS_NETBSD_RAID,	/* A NetBSD RAID partition entry. */
  	G_PART_ALIAS_NETBSD_SWAP,	/* A NetBSD swap partition entry. */
  	G_PART_ALIAS_NETBSD_LFS,	/* A NetBSD LFS partition entry. */
 +	G_PART_ALIAS_EBR,		/* A EBR partition entry. */
 +	G_PART_ALIAS_MS_FAT32,		/* A Microsoft FAT32 partition entry. */
 +	G_PART_ALIAS_BIOS_BOOT,		/* A GRUB 2 boot partition entry. */
  	/* Keep the following last */
  	G_PART_ALIAS_COUNT
  };
 
 Modified: stable/8/sys/geom/part/g_part_ebr.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part_ebr.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part_ebr.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -113,6 +113,19 @@ static struct g_part_scheme g_part_ebr_s
  };
  G_PART_SCHEME_DECLARE(g_part_ebr);
  
 +static struct g_part_ebr_alias {
 +	u_char		typ;
 +	int		alias;
 +} ebr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static void ebr_set_chs(struct g_part_table *, uint32_t, u_char *, u_char *,
      u_char *);
  
 @@ -152,6 +165,7 @@ ebr_parse_type(const char *type, u_char 
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -160,14 +174,18 @@ ebr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(ebr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = ebr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
  
 +
  static void
  ebr_set_chs(struct g_part_table *table, uint32_t lba, u_char *cylp, u_char *hdp,
      u_char *secp)
 @@ -537,13 +555,15 @@ g_part_ebr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_ebr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_ebr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	if (type == DOSPTYP_386BSD)
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(ebr_alias_match) / sizeof(ebr_alias_match[0]); i++) {
 +		if (ebr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(ebr_alias_match[i].alias));
 +	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: stable/8/sys/geom/part/g_part_gpt.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part_gpt.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part_gpt.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -146,6 +146,7 @@ static struct uuid gpt_uuid_apple_raid =
  static struct uuid gpt_uuid_apple_raid_offline = GPT_ENT_TYPE_APPLE_RAID_OFFLINE;
  static struct uuid gpt_uuid_apple_tv_recovery = GPT_ENT_TYPE_APPLE_TV_RECOVERY;
  static struct uuid gpt_uuid_apple_ufs = GPT_ENT_TYPE_APPLE_UFS;
 +static struct uuid gpt_uuid_bios_boot = GPT_ENT_TYPE_BIOS_BOOT;
  static struct uuid gpt_uuid_efi = GPT_ENT_TYPE_EFI;
  static struct uuid gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
  static struct uuid gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
 @@ -181,6 +182,7 @@ static struct g_part_uuid_alias {
  	{ &gpt_uuid_apple_raid_offline,	G_PART_ALIAS_APPLE_RAID_OFFLINE },
  	{ &gpt_uuid_apple_tv_recovery,	G_PART_ALIAS_APPLE_TV_RECOVERY },
  	{ &gpt_uuid_apple_ufs,		G_PART_ALIAS_APPLE_UFS },
 +	{ &gpt_uuid_bios_boot,		G_PART_ALIAS_BIOS_BOOT },
  	{ &gpt_uuid_efi, 		G_PART_ALIAS_EFI },
  	{ &gpt_uuid_freebsd,		G_PART_ALIAS_FREEBSD },
  	{ &gpt_uuid_freebsd_boot, 	G_PART_ALIAS_FREEBSD_BOOT },
 
 Modified: stable/8/sys/geom/part/g_part_mbr.c
 ==============================================================================
 --- stable/8/sys/geom/part/g_part_mbr.c	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/geom/part/g_part_mbr.c	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -108,12 +108,27 @@ static struct g_part_scheme g_part_mbr_s
  };
  G_PART_SCHEME_DECLARE(g_part_mbr);
  
 +static struct g_part_mbr_alias {
 +	u_char		typ;
 +	int		alias;
 +} mbr_alias_match[] = {
 +	{ DOSPTYP_386BSD,	G_PART_ALIAS_FREEBSD },
 +	{ DOSPTYP_EXT,		G_PART_ALIAS_EBR },
 +	{ DOSPTYP_NTFS,		G_PART_ALIAS_MS_NTFS },
 +	{ DOSPTYP_FAT32,	G_PART_ALIAS_MS_FAT32 },
 +	{ DOSPTYP_LINSWP,	G_PART_ALIAS_LINUX_SWAP },
 +	{ DOSPTYP_LINUX,	G_PART_ALIAS_LINUX_DATA },
 +	{ DOSPTYP_LINLVM,	G_PART_ALIAS_LINUX_LVM },
 +	{ DOSPTYP_LINRAID,	G_PART_ALIAS_LINUX_RAID },
 +};
 +
  static int
  mbr_parse_type(const char *type, u_char *dp_typ)
  {
  	const char *alias;
  	char *endp;
  	long lt;
 +	int i;
  
  	if (type[0] == '!') {
  		lt = strtol(type + 1, &endp, 0);
 @@ -122,15 +137,13 @@ mbr_parse_type(const char *type, u_char 
  		*dp_typ = (u_char)lt;
  		return (0);
  	}
 -	alias = g_part_alias_name(G_PART_ALIAS_FREEBSD);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_386BSD;
 -		return (0);
 -	}
 -	alias = g_part_alias_name(G_PART_ALIAS_MS_NTFS);
 -	if (!strcasecmp(type, alias)) {
 -		*dp_typ = DOSPTYP_NTFS;
 -		return (0);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		alias = g_part_alias_name(mbr_alias_match[i].alias);
 +		if (strcasecmp(type, alias) == 0) {
 +			*dp_typ = mbr_alias_match[i].typ;
 +			return (0);
 +		}
  	}
  	return (EINVAL);
  }
 @@ -511,18 +524,15 @@ g_part_mbr_type(struct g_part_table *bas
      char *buf, size_t bufsz)
  {
  	struct g_part_mbr_entry *entry;
 -	int type;
 +	int i;
  
  	entry = (struct g_part_mbr_entry *)baseentry;
 -	type = entry->ent.dp_typ;
 -	switch (type) {
 -	case DOSPTYP_386BSD:
 -		return (g_part_alias_name(G_PART_ALIAS_FREEBSD));
 -	case DOSPTYP_NTFS:
 -		return (g_part_alias_name(G_PART_ALIAS_MS_NTFS));
 -	default:
 -		snprintf(buf, bufsz, "!%d", type);
 +	for (i = 0;
 +	    i < sizeof(mbr_alias_match) / sizeof(mbr_alias_match[0]); i++) {
 +		if (mbr_alias_match[i].typ == entry->ent.dp_typ)
 +			return (g_part_alias_name(mbr_alias_match[i].alias));
  	}
 +	snprintf(buf, bufsz, "!%d", entry->ent.dp_typ);
  	return (buf);
  }
  
 
 Modified: stable/8/sys/sys/diskmbr.h
 ==============================================================================
 --- stable/8/sys/sys/diskmbr.h	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/sys/diskmbr.h	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -43,13 +43,16 @@
  #define	DOSMAGICOFFSET	510
  #define	DOSMAGIC	0xAA55
  
 +#define	DOSPTYP_EXT	0x05	/* DOS extended partition */
 +#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_FAT32	0x0b	/* FAT32 partition */
 +#define	DOSPTYP_EXTLBA	0x0f	/* DOS extended partition */
  #define	DOSPTYP_386BSD	0xa5	/* 386BSD partition type */
  #define	DOSPTYP_LINSWP	0x82	/* Linux swap partition */
  #define	DOSPTYP_LINUX	0x83	/* Linux partition */
 +#define	DOSPTYP_LINLVM	0x8e	/* Linux LVM partition */
  #define	DOSPTYP_PMBR	0xee	/* GPT Protective MBR */
 -#define	DOSPTYP_EXT	5	/* DOS extended partition */
 -#define	DOSPTYP_EXTLBA	15	/* DOS extended partition */
 -#define	DOSPTYP_NTFS	0x07	/* NTFS partition */
 +#define	DOSPTYP_LINRAID	0xfd	/* Linux raid partition */
  
  struct dos_partition {
  	unsigned char	dp_flag;	/* bootstrap flags */
 
 Modified: stable/8/sys/sys/gpt.h
 ==============================================================================
 --- stable/8/sys/sys/gpt.h	Fri Feb 11 05:33:35 2011	(r218535)
 +++ stable/8/sys/sys/gpt.h	Fri Feb 11 05:37:05 2011	(r218536)
 @@ -150,4 +150,10 @@ struct gpt_ent {
  #define	GPT_ENT_TYPE_NETBSD_CGD		\
  	{0x2db519ec,0xb10f,0x11dc,0xb9,0x9b,{0x00,0x19,0xd1,0x87,0x96,0x48}}
  
 +/*
 + * Boot partition used by GRUB 2.
 + */
 +#define	GPT_ENT_TYPE_BIOS_BOOT		\
 +	{0x21686148,0x6449,0x6e6f,0x74,0x4e,{0x65,0x65,0x64,0x45,0x46,0x49}}
 +
  #endif /* _SYS_GPT_H_ */
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: ae 
State-Changed-When: Fri Feb 11 05:57:49 UTC 2011 
State-Changed-Why:  
Merged to stable/8. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=147664 

From: =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no>
To: Bapt <baptiste.daroussin@gmail.com>
Cc: FreeBSD-gnats-submit@FreeBSD.org
Subject: Re: kern/147664: [patch] Add the ability to create linux and fat32 partitions gpart
Date: Tue, 27 Sep 2011 22:51:53 +0200

 Can we just call it "fat32"?
 
 DES
 --=20
 Dag-Erling Sm=C3=B8rgrav - des@des.no

From: =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= <des@des.no>
To: Bapt <baptiste.daroussin@gmail.com>
Cc: FreeBSD-gnats-submit@FreeBSD.org
Subject: Re: kern/147664: [patch] Add the ability to create linux and fat32 partitions gpart
Date: Tue, 27 Sep 2011 22:53:05 +0200

 Ah, never mind, I didn't notice this had been committed and closed
 already.
 
 DES
 --=20
 Dag-Erling Sm=C3=B8rgrav - des@des.no
>Unformatted:
