> Hi,
>   The following patch cleans up a bit usage of parameters related to
> number of minors per disk in the SCSI subsystem. This is a preliminary
> patch and it seems to not contain any problematic changes. The full version
> of the patch (that allows to succesfully change SCSI_MINOR_SHIFT and use
> more/less partitions per disk) is available at
> 
> ftp://rudy.mif.pg.gda.pl/pub/People/ankry/patches/scsi-minor/
> 
> Both are against 2.4.4-ac9, but the "shorter" one can be applied to
> 2.4.5-pre series as well.

Oops. The previous putch was buggy (broken #include).
The enclosed in corrected...

> Any comments are welcome.

     Andrzej
******************************************************************
diff -ur linux-2.4.4-ac9/drivers/scsi/sd.c linux-scsi/drivers/scsi/sd.c
--- linux-2.4.4-ac9/drivers/scsi/sd.c   Thu May  3 19:29:16 2001
+++ linux-scsi/drivers/scsi/sd.c        Tue May 15 23:39:12 2001
@@ -67,11 +67,12 @@
 
 #define SD_MAJOR(i) (!(i) ? SCSI_DISK0_MAJOR : SCSI_DISK1_MAJOR-1+(i))
 
-#define SCSI_DISKS_PER_MAJOR   16
+#define SCSI_MINOR_SHIFT       4
+#define SCSI_DISKS_PER_MAJOR   (1 << (8 - SCSI_MINOR_SHIFT))
 #define SD_MAJOR_NUMBER(i)     SD_MAJOR((i) >> 8)
 #define SD_MINOR_NUMBER(i)     ((i) & 255)
 #define MKDEV_SD_PARTITION(i)  MKDEV(SD_MAJOR_NUMBER(i), (i) & 255)
-#define MKDEV_SD(index)                MKDEV_SD_PARTITION((index) << 4)
+#define MKDEV_SD(index)                MKDEV_SD_PARTITION((index) << SCSI_MINOR_SHIFT)
 #define N_USED_SCSI_DISKS  (sd_template.dev_max + SCSI_DISKS_PER_MAJOR - 1)
 #define N_USED_SD_MAJORS   (N_USED_SCSI_DISKS / SCSI_DISKS_PER_MAJOR)
 
@@ -298,7 +299,7 @@
        SCSI_LOG_HLQUEUE(1, printk("Doing sd request, dev = %d, block = %d\n", devm, 
block));
 
        dpnt = &rscsi_disks[dev];
-       if (devm >= (sd_template.dev_max << 4) ||
+       if (devm >= (sd_template.dev_max << SCSI_MINOR_SHIFT) ||
            !dpnt ||
            !dpnt->device->online ||
            block + SCpnt->request.nr_sectors > sd[devm].nr_sects) {
@@ -563,8 +564,8 @@
 {
        SCSI_DISK0_MAJOR,       /* Major number */
        "sd",                   /* Major name */
-       4,                      /* Bits to shift to get real from partition */
-       1 << 4,                 /* Number of partitions per real */
+       SCSI_MINOR_SHIFT,       /* Bits to shift to get real from partition */
+       1 << SCSI_MINOR_SHIFT,  /* Number of partitions per real */
        NULL,                   /* hd struct */
        NULL,                   /* block sizes */
        0,                      /* number */
@@ -951,7 +952,7 @@
                         * The disk reading code does not allow for reading
                         * of partial sectors.
                         */
-                       for (m = i << 4; m < ((i + 1) << 4); m++) {
+                       for (m = i << SCSI_MINOR_SHIFT; m < ((i + 1) << 
+SCSI_MINOR_SHIFT); m++) {
                                sd_blocksizes[m] = sector_size;
                        }
                } {
@@ -964,8 +965,11 @@
                        int hard_sector = sector_size;
                        int sz = rscsi_disks[i].capacity * (hard_sector/256);
 
-                       /* There are 16 minors allocated for each major device */
-                       for (m = i << 4; m < ((i + 1) << 4); m++) {
+                       /* 
+                        * There are 1<<SCSI_MINOR_SHIFT minors allocated 
+                        * for each major device
+                        */
+                       for (m = i << SCSI_MINOR_SHIFT; m < ((i + 1) << 
+SCSI_MINOR_SHIFT); m++) {
                                sd_hardsizes[m] = hard_sector;
                        }
 
@@ -1083,34 +1087,34 @@
        memset(rscsi_disks, 0, sd_template.dev_max * sizeof(Scsi_Disk));
 
        /* for every (necessary) major: */
-       sd_sizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
+       sd_sizes = kmalloc((sd_template.dev_max << SCSI_MINOR_SHIFT) * sizeof(int), 
+GFP_ATOMIC);
        if (!sd_sizes)
                goto cleanup_disks;
-       memset(sd_sizes, 0, (sd_template.dev_max << 4) * sizeof(int));
+       memset(sd_sizes, 0, (sd_template.dev_max << SCSI_MINOR_SHIFT) * sizeof(int));
 
-       sd_blocksizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
+       sd_blocksizes = kmalloc((sd_template.dev_max << SCSI_MINOR_SHIFT) * 
+sizeof(int), GFP_ATOMIC);
        if (!sd_blocksizes)
                goto cleanup_sizes;
        
-       sd_hardsizes = kmalloc((sd_template.dev_max << 4) * sizeof(int), GFP_ATOMIC);
+       sd_hardsizes = kmalloc((sd_template.dev_max << SCSI_MINOR_SHIFT) * 
+sizeof(int), GFP_ATOMIC);
        if (!sd_hardsizes)
                goto cleanup_blocksizes;
 
-       for (i = 0; i < sd_template.dev_max << 4; i++) {
+       for (i = 0; i < sd_template.dev_max << SCSI_MINOR_SHIFT; i++) {
                sd_blocksizes[i] = 1024;
                sd_hardsizes[i] = 512;
        }
 
        for (i = 0; i < N_USED_SD_MAJORS; i++) {
-               blksize_size[SD_MAJOR(i)] = sd_blocksizes + i * (SCSI_DISKS_PER_MAJOR 
<< 4);
-               hardsect_size[SD_MAJOR(i)] = sd_hardsizes + i * (SCSI_DISKS_PER_MAJOR 
<< 4);
+               blksize_size[SD_MAJOR(i)] = sd_blocksizes + i * (SCSI_DISKS_PER_MAJOR 
+<< SCSI_MINOR_SHIFT);
+               hardsect_size[SD_MAJOR(i)] = sd_hardsizes + i * (SCSI_DISKS_PER_MAJOR 
+<< SCSI_MINOR_SHIFT);
        }
-       sd = kmalloc((sd_template.dev_max << 4) *
+       sd = kmalloc((sd_template.dev_max << SCSI_MINOR_SHIFT) *
                                          sizeof(struct hd_struct),
                                          GFP_ATOMIC);
        if (!sd)
                goto cleanup_sd;
-       memset(sd, 0, (sd_template.dev_max << 4) * sizeof(struct hd_struct));
+       memset(sd, 0, (sd_template.dev_max << SCSI_MINOR_SHIFT) * sizeof(struct 
+hd_struct));
 
        if (N_USED_SD_MAJORS > 1)
                sd_gendisks = kmalloc(N_USED_SD_MAJORS * sizeof(struct gendisk), 
GFP_ATOMIC);
@@ -1132,10 +1136,10 @@
                         SCSI_DISKS_PER_MAJOR * sizeof *sd_gendisks[i].flags);
                sd_gendisks[i].major = SD_MAJOR(i);
                sd_gendisks[i].major_name = "sd";
-               sd_gendisks[i].minor_shift = 4;
-               sd_gendisks[i].max_p = 1 << 4;
-               sd_gendisks[i].part = sd + (i * SCSI_DISKS_PER_MAJOR << 4);
-               sd_gendisks[i].sizes = sd_sizes + (i * SCSI_DISKS_PER_MAJOR << 4);
+               sd_gendisks[i].minor_shift = SCSI_MINOR_SHIFT;
+               sd_gendisks[i].max_p = 1 << SCSI_MINOR_SHIFT;
+               sd_gendisks[i].part = sd + (i * SCSI_DISKS_PER_MAJOR << 
+SCSI_MINOR_SHIFT);
+               sd_gendisks[i].sizes = sd_sizes + (i * SCSI_DISKS_PER_MAJOR << 
+SCSI_MINOR_SHIFT);
                sd_gendisks[i].nr_real = 0;
                sd_gendisks[i].next = sd_gendisks + i + 1;
                sd_gendisks[i].real_devices =
@@ -1191,9 +1195,9 @@
                if (!rscsi_disks[i].capacity && rscsi_disks[i].device) {
                        sd_init_onedisk(i);
                        if (!rscsi_disks[i].has_part_table) {
-                               sd_sizes[i << 4] = rscsi_disks[i].capacity;
+                               sd_sizes[i << SCSI_MINOR_SHIFT] = 
+rscsi_disks[i].capacity;
                                register_disk(&SD_GENDISK(i), MKDEV_SD(i),
-                                               1<<4, &sd_fops,
+                                               1 << SCSI_MINOR_SHIFT, &sd_fops,
                                                rscsi_disks[i].capacity);
                                rscsi_disks[i].has_part_table = 1;
                        }
@@ -1312,7 +1316,7 @@
 #endif
 
        grok_partitions(&SD_GENDISK(target), target % SCSI_DISKS_PER_MAJOR,
-                       1<<4, CAPACITY);
+                       1 << SCSI_MINOR_SHIFT, CAPACITY);
 
        DEVICE_BUSY = 0;
        return 0;

-- 
=======================================================================
  Andrzej M. Krzysztofowicz               [EMAIL PROTECTED]
  phone (48)(58) 347 14 61
Faculty of Applied Phys. & Math.,   Technical University of Gdansk
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to