My project has encountered a problem accessing a very large RAID that is 
written by an embedded system. Because the disk does not have a Solaris block 
written in the very first sector of the disk, Solaris 10 is using a default 
geometry of 255 heads and 63 sectors, but computes the number of cylinders by 
dividing the total number of sectors by (255 * 63). This number exceeds 16 
bits, resulting in the following symptom of the problem: disk I/O encounters a 
very premature end-of-media/file when attempting to perform any read/write 
operation (e.g. via dd).

After consulting the OpenSolaris source code, the source of the problem appears 
to be lines 4266-4273 of usr/src/uts/common/io/cmlb.c ... the fix being 
contemplated is to extend the logic to use a different combination of default 
heads and sectors for exceedingly large drives, such that the computed number 
of cylinders will fit into a UINT16. When a Solaris label is written to the 
drive in question, the start of sector zero reads "Ciprico-Talon2200-P347 cyl 
49780 alt 2 hd 8 sec 2880", so using 8 and 2880 as head and sector defaults is 
being contemplated.

Here are the two questions I have:

(a) Is this the only place in the Solaris code base that needs fixing, or does 
similar code that will also need fixing lurk elsewhere too ?

(b) If the fix is made and compiled under OpenSolaris (aka version 11), will 
the rebuilt kernel module be compatible for execution by the (closed) Solaris 
(version 10) O/S of our deployment platform ? i.e. will _this_ version 11 
kernel module be backwardly compatible with the version 10 module 
(/kernel/misc/sparcv9/cmlb) ?

Any help is much appreciated. Any other ideas of how to solve the dilemma are 
also welcome! Thanks.
 
 
This message posted from opensolaris.org
_______________________________________________
storage-discuss mailing list
[email protected]
http://mail.opensolaris.org/mailman/listinfo/storage-discuss

Reply via email to