Re: [PATCH] 2.6.2, Partition support for SCSI CDROM...

Steven J. Hill
2004-02-24T16:51:58Z

[-- Attachment #1: Type: text/plain, Size: 45 bytes --]

Here is the second try at the patch.

-Steve

[-- Attachment #2: scsi-sr-partitions-2.6.2-2.patch --]
[-- Type: text/x-patch, Size: 1402 bytes --]

diff -urN linux-2.6.2/drivers/scsi/sr.c linux-2.6.2-patched/drivers/scsi/sr.c
--- linux-2.6.2/drivers/scsi/sr.c 2004-02-22 20:15:08.000000000 -0500
+++ linux-2.6.2-patched/drivers/scsi/sr.c 2004-02-24 11:48:16.000000000 -0500
@@ -55,6 +55,23 @@
#include "scsi_logging.h"
#include "sr.h"

+/*
+ * Device node mappings are as follows:
+ *
+ * sr0 - first CDROM, whole disk
+ * sr1 - first CDROM, first partition
+ *
+ * [...]
+ *
+ * sr16 - first CDROM, sixteenth partition
+ * sr17 - second CDROM, whole disk
+ * sr18 - second CDROM, first partition
+ *
+ * [...]
+ */
+static int partitions = 16;
+MODULE_PARM(partitions, "i");
+MODULE_PARM_DESC(partitions, "number of SCSI CDROM partitions to support");

MODULE_PARM(xa_test, "i"); /* see sr_ioctl.c */

@@ -518,7 +535,7 @@
goto fail;
memset(cd, 0, sizeof(*cd));

- disk = alloc_disk(1);
+ disk = alloc_disk(partitions + 1);
if (!disk)
goto fail_free;

@@ -533,7 +550,7 @@
spin_unlock(&sr_index_lock);

disk->major = SCSI_CDROM_MAJOR;
- disk->first_minor = minor;
+ disk->first_minor = minor * (partitions + 1);
sprintf(disk->disk_name, "sr%d", minor);
disk->fops = &sr_bdops;
disk->flags = GENHD_FL_CD;
@@ -868,6 +885,10 @@
{
int rc;

+ /* Check number of partitions specified. */
+ if (partitions < 0)
+ partitions = 0;
+
rc = register_blkdev(SCSI_CDROM_MAJOR, "sr");
if (rc)
return rc;