Subject: Re: Some help with disklabel please?
To: Bill Studenmund <wrstuden@loki.stanford.edu>
From: Jason Thorpe <thorpej@nas.nasa.gov>
List: current-users
Date: 08/09/1995 15:24:49
On Wed, 9 Aug 1995 14:51:56 -0700 (PDT) 
 wrstuden@loki.stanford.edu (Bill Studenmund) wrote:

 > > Indeed, it's arguable that all NetBSD ports should support the disklabel 
 > > format of all other NetBSD ports of at least the same byte order...
 > 
 > I think that all ports should be able to deal w/ all byte-orders. Why?
 > I think everybody should be able to read DOS disks as they are so
 > prevelant.  Yes, many people think DOS is evil. Unfortunatly it is
 > becoming a standard. Also, being able to support variable-endianness
 > would complicate things. But the ISO CDROM code does this, so we'd
 > have a working model for int-swapping routines, etc.

Note I said "at least the same byte order".  :-)  Yah, cd9660 does this, 
but I've gathered from a discussion or two that it's non-trivial to do 
this with FFS, at least.  msdosfs may be a different story ... unknown.

Also, your reasoning goes that all ports should also be able to read 
SunOS disks (which was my original motivation; I had to plug one into my 
hp380) since they're so prevalent.

I don't dispute that this is a worthy goal.  It's just not as easy as one 
thinks :-)

 > > Ummm ... well, given that disklabels are _not_ UFS-specific, this is a 
 > > less-than-desirable place to put them.  My code lived in 
 > > sys/kern/subr_disklabel.c.
 > 
 > I'd tend to agree with you on this point. Maybe sys/kern/disklabels or
 > sys/miscfs/disklabels? Though exactly where is not a big deal, IMHO.

Why do you even need a directory?

 > > 	* At least in the MI SCSI code, the disklabel is read then the
 > > 	  device is opened, not when it is probed/matched/attached.
 > 
 > My ignorance shows at this point. When _which_ device is opened? One of the
 > sdXY's? But don't you need a disktab to see if a device really does
 > anything? Also, is the timing of when the disklabel gets read critical?
 > As long as it's after the ability to talk to the drive exists, and before
 > people want to use the partitions, does it make a difference?

No, you don't need a `disktab' file ... that's only used by a few 
user-land utilities whenever a disklabel isn't available (like, when 
newfs'ing floppies, for example).  disklabel(8) can also use it to 
install `default' partitioning on new disks, but given that /etc/disktab 
is not really up to date with the latest disk hardware releases, it's not 
particularly useful anyhow.

In sys/scsi/sd.c:

/*
 * open the device. Make sure the partition info is a up-to-date as can be.
 */
int
sdopen(dev, flag, fmt)
        dev_t dev;
        int flag, fmt;
{
	struct sd_softc *sd;

	[ . . . ]

                        /* Load the partition info if not already loaded. */
                        sdgetdisklabel(sd);
                        SC_DEBUG(sc_link, SDEV_DB3, ("Disklabel loaded "));
                }
        }

	[ . . . ]

}

While is says "if not already loaded", the in-core copy of the disklabel 
is updated _every time_ a partition on any given disk is opened, as far 
as I can tell.

Also note, that if you swap to sd0b, for example, sdsize() gets called by 
the swap code, to get the size of the partition.  This causes an open/close 
sequence on that partition, which causes the disklabel to be updated.

 > > 	* Not all ports keep the `whole disk' in the `c' partition.
 > 
 > I don't think this will be a problem. The disktab reading routine
 > can read whatever it needs off of "c" to build a new disktab. It then
 > closes "c", installs the new disktab, and away it goes. At that point,
 > the port does whatever it wants.

Ummm ... no, because `c' doesn't mean the same thing on, for example, the 
i386 port and the hp300 port (two of the four I work with the most).  And, 
that exactly are you reading off of `c' to build a new `disktab'?

 > I.E. most system's would have something in d, and the disk in c. On
 > a platform that does it different, the something would go into c, and
 > the whole disk into d.

Not necessarily ... the i386 port, for example, keeps the `whole disk' in 
`d', and `all of NetBSD's portion of the disk' in `c'.  So, a simple swap 
doesn't work.  Not to mention, that sort of violates the convention 
behind partition naming... 

 > Why do some ports not keep everything in c?

See above.

Another point to make here, I suppose, is that not all ports that use 
NetBSD-format disklabels keep them in the same place (for various 
reasons).  Just something else to think about :-)

Ciao.

--------------------------------------------------------------------------
Jason R. Thorpe                                       thorpej@nas.nasa.gov
NASA Ames Research Center                               Home: 408.866.1912
NAS: M/S 258-6                                          Work: 415.604.0935
Moffett Field, CA 94035                                Pager: 415.428.6939