Merge changes from sun3 port; per Gordon.
This commit is contained in:
parent
ee08e9085b
commit
a2a4da4874
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: disksubr.c,v 1.9 1995/09/01 17:19:50 pk Exp $ */
|
||||
/* $NetBSD: disksubr.c,v 1.10 1995/11/29 23:43:42 pk Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1994, 1995 Gordon W. Ross
|
||||
@ -221,7 +221,7 @@ setdisklabel(olp, nlp, openmask, clp)
|
||||
}
|
||||
|
||||
if (nlp->d_magic != DISKMAGIC || nlp->d_magic2 != DISKMAGIC ||
|
||||
dkcksum(nlp) != 0)
|
||||
dkcksum(nlp) != 0)
|
||||
return (EINVAL);
|
||||
|
||||
while ((i = ffs((long)openmask)) != 0) {
|
||||
@ -233,19 +233,8 @@ setdisklabel(olp, nlp, openmask, clp)
|
||||
npp = &nlp->d_partitions[i];
|
||||
if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size)
|
||||
return (EBUSY);
|
||||
/*
|
||||
* Copy internally-set partition information
|
||||
* if new label doesn't include it. XXX
|
||||
*/
|
||||
if (npp->p_fstype == FS_UNUSED && opp->p_fstype != FS_UNUSED) {
|
||||
npp->p_fstype = opp->p_fstype;
|
||||
npp->p_fsize = opp->p_fsize;
|
||||
npp->p_frag = opp->p_frag;
|
||||
npp->p_cpg = opp->p_cpg;
|
||||
}
|
||||
}
|
||||
nlp->d_checksum = 0;
|
||||
nlp->d_checksum = dkcksum(nlp);
|
||||
|
||||
*olp = *nlp;
|
||||
return (0);
|
||||
}
|
||||
@ -391,7 +380,8 @@ disklabel_sun_to_bsd(cp, lp)
|
||||
return("SunOS disk label, bad checksum");
|
||||
|
||||
/* Format conversion. */
|
||||
lp->d_magic = 0;/* denote as pseudo */
|
||||
lp->d_magic = DISKMAGIC;
|
||||
lp->d_magic2 = DISKMAGIC;
|
||||
memcpy(lp->d_packname, sl->sl_text, sizeof(lp->d_packname));
|
||||
|
||||
lp->d_secsize = 512;
|
||||
@ -418,10 +408,24 @@ disklabel_sun_to_bsd(cp, lp)
|
||||
npp = &lp->d_partitions[i];
|
||||
npp->p_offset = spp->sdkp_cyloffset * secpercyl;
|
||||
npp->p_size = spp->sdkp_nsectors;
|
||||
if (npp->p_size)
|
||||
if (npp->p_size == 0) {
|
||||
npp->p_fstype = FS_UNUSED;
|
||||
} else {
|
||||
npp->p_fstype = sun_fstypes[i];
|
||||
if (npp->p_fstype == FS_BSDFFS) {
|
||||
/*
|
||||
* The sun label does not store the FFS fields,
|
||||
* so just set them with default values here.
|
||||
*/
|
||||
npp->p_fsize = 1024;
|
||||
npp->p_frag = 8;
|
||||
npp->p_cpg = 16;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lp->d_checksum = 0;
|
||||
lp->d_checksum = dkcksum(lp);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
@ -442,6 +446,9 @@ disklabel_bsd_to_sun(lp, cp)
|
||||
int i, secpercyl;
|
||||
u_short cksum, *sp1, *sp2;
|
||||
|
||||
if (lp->d_secsize != 512)
|
||||
return (EINVAL);
|
||||
|
||||
sl = (struct sun_disklabel *)cp;
|
||||
|
||||
/* Format conversion. */
|
||||
|
Loading…
Reference in New Issue
Block a user