b=12755
Rollback 12755 since it breaks the SLES9 build.
* Recommended e2fsprogs version: 1.39.cfs8
* Note that reiserfs quotas are disabled on SLES 10 in this kernel.
* Recommended e2fsprogs version: 1.39.cfs8
* Note that reiserfs quotas are disabled on SLES 10 in this kernel.
-Severity : normal
-Frequency : when using more than 256 SCSI disks on a single server
-Bugzilla : 12755
-Description: Kernel BUG: sd_iostats_bump: unexpected disk index
-Details : a kernel BUG is hit when using more than 256 SCSI disks.
-
2007-08-10 Cluster File Systems, Inc. <info@clusterfs.com>
* version 1.6.1
* Support for kernels:
2007-08-10 Cluster File Systems, Inc. <info@clusterfs.com>
* version 1.6.1
* Support for kernels:
-Index: linux-2.6.9/drivers/scsi/Kconfig
+Index: linux-2.6.9-5.0.3.EL/drivers/scsi/Kconfig\r
+===================================================================\r
+Index: linux+rhel4+chaos/drivers/scsi/Kconfig
===================================================================
===================================================================
---- linux-2.6.9.orig/drivers/scsi/Kconfig 2007-08-02 09:26:17.000000000 +0200
-+++ linux-2.6.9/drivers/scsi/Kconfig 2007-08-02 09:26:21.000000000 +0200
+--- linux+rhel4+chaos.orig/drivers/scsi/Kconfig
++++ linux+rhel4+chaos/drivers/scsi/Kconfig
@@ -61,6 +61,14 @@ config SCSI_DUMP
help
SCSI dump support
@@ -61,6 +61,14 @@ config SCSI_DUMP
help
SCSI dump support
config CHR_DEV_ST
tristate "SCSI tape support"
depends on SCSI
config CHR_DEV_ST
tristate "SCSI tape support"
depends on SCSI
-Index: linux-2.6.9/drivers/scsi/sd.c
+Index: linux+rhel4+chaos/drivers/scsi/sd.c
===================================================================
===================================================================
---- linux-2.6.9.orig/drivers/scsi/sd.c 2007-08-02 09:26:17.000000000 +0200
-+++ linux-2.6.9/drivers/scsi/sd.c 2007-08-02 09:29:31.000000000 +0200
+--- linux+rhel4+chaos.orig/drivers/scsi/sd.c
++++ linux+rhel4+chaos/drivers/scsi/sd.c
@@ -63,6 +63,38 @@
#include "scsi_logging.h"
@@ -63,6 +63,38 @@
#include "scsi_logging.h"
/*
* More than enough for everybody ;) The huge number of majors
* is a leftover from 16bit dev_t days, we don't really need that
/*
* More than enough for everybody ;) The huge number of majors
* is a leftover from 16bit dev_t days, we don't really need that
-@@ -71,10 +103,18 @@
- #define SD_MAJORS 16
-
- /*
-- * This is limited by the naming scheme enforced in sd_probe,
-+ * SD_MAX_DISKS is limited by the naming scheme enforced in sd_probe,
- * add another character to it if you really need more disks.
-+ *
-+ * SD_STATS must not be less than SD_MAX_DISKS and, is limited by 131072/8
-+ * for sd_iostats kmalloc (see kmalloc_sizes.h)
-+#if (defined(CONFIG_SD_IOSTATS) && defined(CONFIG_PROC_FS))
-+#define SD_STATS 16384
-+#define SD_MAX_DISKS SD_STATS
-+#else
#define SD_MAX_DISKS (((26 * 26) + 26 + 1) * 26)
#define SD_MAX_DISKS (((26 * 26) + 26 + 1) * 26)
/*
* Time out in seconds for disks and Magneto-opticals (which are slower).
/*
* Time out in seconds for disks and Magneto-opticals (which are slower).
-@@ -278,6 +318,9 @@ static int sd_init_command(struct scsi_c
+ */
+@@ -278,6 +311,9 @@ static int sd_init_command(struct scsi_c
SCSI_LOG_HLQUEUE(2, printk("%s : block=%llu\n",
disk->disk_name, (unsigned long long)block));
SCSI_LOG_HLQUEUE(2, printk("%s : block=%llu\n",
disk->disk_name, (unsigned long long)block));
/*
* If we have a 1K hardware sectorsize, prevent access to single
* 512 byte sectors. In theory we could handle this - in fact
/*
* If we have a 1K hardware sectorsize, prevent access to single
* 512 byte sectors. In theory we could handle this - in fact
-@@ -474,6 +517,7 @@ static int sd_open(struct inode *inode,
+@@ -474,6 +510,7 @@ static int sd_open(struct inode *inode,
scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT);
}
scsi_set_medium_removal(sdev, SCSI_REMOVAL_PREVENT);
}
-@@ -500,8 +544,20 @@ static int sd_release(struct inode *inod
+@@ -500,8 +537,20 @@ static int sd_release(struct inode *inod
SCSI_LOG_HLQUEUE(3, printk("sd_release: disk=%s\n", disk->disk_name));
SCSI_LOG_HLQUEUE(3, printk("sd_release: disk=%s\n", disk->disk_name));
scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
}
scsi_set_medium_removal(sdev, SCSI_REMOVAL_ALLOW);
}
-@@ -1575,6 +1631,342 @@ static void sd_shutdown(struct device *d
+@@ -1575,6 +1624,342 @@ static void sd_shutdown(struct device *d
/**
* init_sd - entry point for this driver (both when built in or when
* a module).
/**
* init_sd - entry point for this driver (both when built in or when
* a module).
-@@ -1584,6 +1976,7 @@ static void sd_shutdown(struct device *d
+@@ -1584,6 +1969,7 @@ static void sd_shutdown(struct device *d
static int __init init_sd(void)
{
int majors = 0, i;
static int __init init_sd(void)
{
int majors = 0, i;
SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
SCSI_LOG_HLQUEUE(3, printk("init_sd: sd driver entry point\n"));
-@@ -1594,7 +1987,10 @@ static int __init init_sd(void)
+@@ -1594,7 +1980,10 @@ static int __init init_sd(void)
if (!majors)
return -ENODEV;
if (!majors)
return -ENODEV;
-@@ -1608,6 +2004,7 @@ static void __exit exit_sd(void)
+@@ -1608,6 +1997,7 @@ static void __exit exit_sd(void)
SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n"));
scsi_unregister_driver(&sd_template.gendrv);
for (i = 0; i < SD_MAJORS; i++)
unregister_blkdev(sd_major(i), "sd");
scsi_unregister_driver(&sd_template.gendrv);
for (i = 0; i < SD_MAJORS; i++)
unregister_blkdev(sd_major(i), "sd");
-Index: linux-2.6.9/drivers/scsi/scsi_proc.c
+Index: linux+rhel4+chaos/drivers/scsi/scsi_proc.c
===================================================================
===================================================================
---- linux-2.6.9.orig/drivers/scsi/scsi_proc.c 2007-08-02 09:26:17.000000000 +0200
-+++ linux-2.6.9/drivers/scsi/scsi_proc.c 2007-08-02 09:26:21.000000000 +0200
+--- linux+rhel4+chaos.orig/drivers/scsi/scsi_proc.c
++++ linux+rhel4+chaos/drivers/scsi/scsi_proc.c
@@ -38,7 +38,8 @@
/* 4K page size, but our output routines, use some slack for overruns */
#define PROC_BLOCK_SIZE (3*1024)
@@ -38,7 +38,8 @@
/* 4K page size, but our output routines, use some slack for overruns */
#define PROC_BLOCK_SIZE (3*1024)