From: Marc Leeman Signed-off-by: Andrew Morton --- 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 -/* 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: _