RE: SCSI patches for 1.3.86

Ray_Van_Tassle-CRV004@email.mot.com
15 Apr 96 09:11:57 -0500


> From: hjl@lucon.org@INTERNET on Sat, Apr 13, 1996 4:38 AM
> Subject: SCSI patches for 1.3.86
>
> X-Mailer: ELM [version 2.4 PL24]
> Content-Type: text
> Precedence: bulk
>
> Hi,
>
> Here are the revised SCSI HD capacity patch plus a patch for
> Nakamichi MBR-7 CDROM changer. They are for 1.3.86.
> H.J. Lu (hjl@gnu.ai.mit.edu)
> ---
> RCS file: /home/cvs/linux/linux/drivers/scsi/sd.c,v
> retrieving revision 1.1.1.11
> diff -c -r1.1.1.11 sd.c
> *** sd.c 1996/04/11 05:46:39 1.1.1.11
> --- sd.c 1996/04/12 14:30:11
> ***************
> *** 1161,1174 ****
> * So I have created this table. See ll_rw_blk.c
> * Jacques Gelinas (Jacques@solucorp.qc.ca)
> */
> ! int m, mb;
> int sz_quot, sz_rem;
> int hard_sector = rscsi_disks[i].sector_size;
> /* There are 16 minors allocated for each major device */
> for (m=i<<4; m<((i+1)<<4); m++){
> sd_hardsizes[m] = hard_sector;
> }
> ! mb = (hard_sector * rscsi_disks[i].capacity) / (1024*1024);
> /* sz = div(m/100, 10); this seems to not be in the libr */
> m = (mb + 50) / 100;
> sz_quot = m / 10;
> --- 1161,1187 ----
> * So I have created this table. See ll_rw_blk.c
> * Jacques Gelinas (Jacques@solucorp.qc.ca)
> */
> ! int m, mb, one_mb;
> int sz_quot, sz_rem;
> int hard_sector = rscsi_disks[i].sector_size;
> /* There are 16 minors allocated for each major device */
> for (m=i<<4; m<((i+1)<<4); m++){
> sd_hardsizes[m] = hard_sector;
> }
> ! /*
> ! * mb = (hard_sector * rscsi_disks[i].capacity) / (1024*1024);
> ! *
> ! * hard_sector * rscsi_disks[i].capacity may be overflow.
> ! * We should be very careful. 1 MB is 1 << 20.
> ! * H.J. (hjl@lucon.org).
> ! */
> ! one_mb = 20;
> ! for (mb = hard_sector; (mb & 0x1) == 0 && one_mb > 0;
> ! mb >>= 1, one_mb--);
> ! for (m = rscsi_disks[i].capacity; (m & 0x1) == 0 && one_mb > 0;
> ! m >>= 1, one_mb--);
> ! mb *= m;
> ! mb >>= one_mb;
> /* sz = div(m/100, 10); this seems to not be in the libr */
> m = (mb + 50) / 100;
> sz_quot = m / 10;
>

Actually, this "fix" is too involved. Last week, somebody recommended just
re-ordering my original code thusly:
mb = (rscsi_disks[i].capacity /1024) * hard_sector/ 1024;

I think this is the best fix. It works fine for disks over 1MB and smaller
than 2097GB. And there aren't any SCSI disks < 1MB (that I am aware of),
and as for > 2097GB--- I'll worry about that when the time comes!
Regards,
Ray