From: Marc Leeman <marc.leeman@gmail.com>


Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/block/Kconfig |    9 +++++++++
 25-akpm/drivers/block/rd.c    |   17 +++++++----------
 2 files changed, 16 insertions(+), 10 deletions(-)

diff -puN drivers/block/Kconfig~make-number-of-ramdisks-kconfigurable drivers/block/Kconfig
--- 25/drivers/block/Kconfig~make-number-of-ramdisks-kconfigurable	2004-11-28 01:23:17.940632696 -0800
+++ 25-akpm/drivers/block/Kconfig	2004-11-28 01:23:17.946631784 -0800
@@ -331,6 +331,15 @@ config BLK_DEV_RAM
 	  Most normal users won't need the RAM disk functionality, and can
 	  thus say N here.
 
+config BLK_DEV_RAM_COUNT
+	int "Default number of RAM disks"
+	depends on BLK_DEV_RAM
+	default "16"
+	help
+	  The default value is 16 RAM disks. Change this if you know what
+	  are doing. If you boot from a filesystem that needs to be extracted
+	  in memory, you will need at least one RAM disk (e.g. root on cramfs).
+
 config BLK_DEV_RAM_SIZE
 	int "Default RAM disk size (kbytes)"
 	depends on BLK_DEV_RAM
diff -puN drivers/block/rd.c~make-number-of-ramdisks-kconfigurable drivers/block/rd.c
--- 25/drivers/block/rd.c~make-number-of-ramdisks-kconfigurable	2004-11-28 01:23:17.942632392 -0800
+++ 25-akpm/drivers/block/rd.c	2004-11-28 01:23:17.947631632 -0800
@@ -61,15 +61,12 @@
 
 #include <asm/uaccess.h>
 
-/* The RAM disk size is now a parameter */
-#define NUM_RAMDISKS 16		/* This cannot be overridden (yet) */
-
 /* Various static variables go here.  Most are used only in the RAM disk code.
  */
 
-static struct gendisk *rd_disks[NUM_RAMDISKS];
-static struct block_device *rd_bdev[NUM_RAMDISKS];/* Protected device data */
-static struct request_queue *rd_queue[NUM_RAMDISKS];
+static struct gendisk *rd_disks[CONFIG_BLK_DEV_RAM_COUNT];
+static struct block_device *rd_bdev[CONFIG_BLK_DEV_RAM_COUNT];/* Protected device data */
+static struct request_queue *rd_queue[CONFIG_BLK_DEV_RAM_COUNT];
 
 /*
  * Parameters for the boot-loading of the RAM disk.  These are set by
@@ -403,7 +400,7 @@ static void __exit rd_cleanup(void)
 {
 	int i;
 
-	for (i = 0; i < NUM_RAMDISKS; i++) {
+	for (i = 0; i < CONFIG_BLK_DEV_RAM_COUNT; i++) {
 		struct block_device *bdev = rd_bdev[i];
 		rd_bdev[i] = NULL;
 		if (bdev) {
@@ -433,7 +430,7 @@ static int __init rd_init(void)
 		rd_blocksize = BLOCK_SIZE;
 	}
 
-	for (i = 0; i < NUM_RAMDISKS; i++) {
+	for (i = 0; i < CONFIG_BLK_DEV_RAM_COUNT; i++) {
 		rd_disks[i] = alloc_disk(1);
 		if (!rd_disks[i])
 			goto out;
@@ -446,7 +443,7 @@ static int __init rd_init(void)
 
 	devfs_mk_dir("rd");
 
-	for (i = 0; i < NUM_RAMDISKS; i++) {
+	for (i = 0; i < CONFIG_BLK_DEV_RAM_COUNT; i++) {
 		struct gendisk *disk = rd_disks[i];
 
 		rd_queue[i] = blk_alloc_queue(GFP_KERNEL);
@@ -471,7 +468,7 @@ static int __init rd_init(void)
 	/* rd_size is given in kB */
 	printk("RAMDISK driver initialized: "
 		"%d RAM disks of %dK size %d blocksize\n",
-		NUM_RAMDISKS, rd_size, rd_blocksize);
+		CONFIG_BLK_DEV_RAM_COUNT, rd_size, rd_blocksize);
 
 	return 0;
 out_queue:
_