lkml.org 
[lkml]   [1999]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patches in this message
/
Subject[PATCH] More than one BSD slice per disk
From
Date
Hi,

for some reason the kernel (both 2.2 and 2.3) doesn't support more
than one BSD slice per disk. Here are two small patches for having
up to 4 slices per disk (more aren't useful as afaik you can't make
a BSD slice out of an extended partition).

//Marcus

--- linux/drivers/block/genhd.c.orig Mon Jul 19 01:03:35 1999
+++ linux/drivers/block/genhd.c Mon Jul 19 01:09:29 1999
@@ -476,8 +476,9 @@
int sector_size = sector_partition_scale(dev);
#ifdef CONFIG_BSD_DISKLABEL
/* no bsd disklabel as a default */
- kdev_t bsd_kdev = 0;
- int bsd_maxpart = BSD_MAXPARTITIONS;
+ int bsd_numslices = 0;
+ kdev_t bsd_kdev[4];
+ int bsd_maxpart[4];
#endif
#ifdef CONFIG_BLK_DEV_IDE
int tested_for_xlate = 0;
@@ -598,14 +599,14 @@
/* tag first disklabel for late recognition */
if (SYS_IND(p) == BSD_PARTITION || SYS_IND(p) == NETBSD_PARTITION) {
printk("!");
- if (!bsd_kdev)
- bsd_kdev = MKDEV(hd->major, minor);
+ bsd_kdev[bsd_numslices] = MKDEV(hd->major, minor);
+ bsd_maxpart[bsd_numslices] = BSD_MAXPARTITIONS;
+ bsd_numslices++;
} else if (SYS_IND(p) == OPENBSD_PARTITION) {
printk("!");
- if (!bsd_kdev) {
- bsd_kdev = MKDEV(hd->major, minor);
- bsd_maxpart = OPENBSD_MAXPARTITIONS;
- }
+ bsd_kdev[bsd_numslices] = MKDEV(hd->major, minor);
+ bsd_maxpart[bsd_numslices] = OPENBSD_MAXPARTITIONS;
+ bsd_numslices++;
}
#endif
#ifdef CONFIG_UNIXWARE_DISKLABEL
@@ -626,9 +627,9 @@
#endif
}
#ifdef CONFIG_BSD_DISKLABEL
- if (bsd_kdev) {
+ for (i = 0; i < bsd_numslices; i++) {
printk(" <");
- bsd_disklabel_partition(hd, bsd_kdev, bsd_maxpart);
+ bsd_disklabel_partition(hd, bsd_kdev[i], bsd_maxpart[i]);
printk(" >");
}
#endif--- linux/fs/partitions/msdos.c.orig Fri Oct 15 00:36:33 1999
+++ linux/fs/partitions/msdos.c Fri Oct 15 00:56:50 1999
@@ -329,8 +329,9 @@
int sector_size = get_hardsect_size(dev) / 512;
#ifdef CONFIG_BSD_DISKLABEL
/* no bsd disklabel as a default */
- kdev_t bsd_kdev = 0;
- int bsd_maxpart = BSD_MAXPARTITIONS;
+ int bsd_numslices = 0;
+ kdev_t bsd_kdev[4];
+ int bsd_maxpart[4];
#endif
#ifdef CONFIG_BLK_DEV_IDE
int tested_for_xlate = 0;
@@ -436,14 +437,14 @@
/* tag first disklabel for late recognition */
if (SYS_IND(p) == BSD_PARTITION || SYS_IND(p) == NETBSD_PARTITION) {
printk("!");
- if (!bsd_kdev)
- bsd_kdev = MKDEV(hd->major, minor);
+ bsd_kdev[bsd_numslices] = MKDEV(hd->major, minor);
+ bsd_maxpart[bsd_numslices] = BSD_MAXPARTITIONS;
+ bsd_numslices++;
} else if (SYS_IND(p) == OPENBSD_PARTITION) {
printk("!");
- if (!bsd_kdev) {
- bsd_kdev = MKDEV(hd->major, minor);
- bsd_maxpart = OPENBSD_MAXPARTITIONS;
- }
+ bsd_kdev[bsd_numslices] = MKDEV(hd->major, minor);
+ bsd_maxpart[bsd_numslices] = OPENBSD_MAXPARTITIONS;
+ bsd_numslices++;
}
#endif
#ifdef CONFIG_UNIXWARE_DISKLABEL
@@ -464,9 +465,9 @@
#endif
}
#ifdef CONFIG_BSD_DISKLABEL
- if (bsd_kdev) {
+ for (i = 0; i < bsd_numslices; i++) {
printk(" <");
- bsd_disklabel_partition(hd, bsd_kdev, bsd_maxpart);
+ bsd_disklabel_partition(hd, bsd_kdev[i], bsd_maxpart[i]);
printk(" >");
}
#endif--
-------------------------------+------------------------------------
Marcus Sundberg | http://www.stacken.kth.se/~mackan
Royal Institute of Technology | Phone: +46 707 295404
Stockholm, Sweden | E-Mail: mackan@stacken.kth.se
\
 
 \ /
  Last update: 2005-03-22 13:54    [W:0.032 / U:1.040 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site