diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 2007-06-05 00:38:25 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 2007-06-05 00:38:25 +0000 |
commit | 27424f98f99646fb8b3e4ef11652da62014a7ceb (patch) | |
tree | 47b5f078f236f633651ce1bad4b1228fac2f6d7d /sys | |
parent | 91862e2af60dd7be0a8d86f5f3fe187dbb400d7f (diff) |
use six new macros to access & store the 48-bit disklabel fields related
to size. tested on almost all machines, double checked by miod and krw
next comes the type handling surrounding these values
Diffstat (limited to 'sys')
50 files changed, 668 insertions, 876 deletions
diff --git a/sys/arch/alpha/alpha/disksubr.c b/sys/arch/alpha/alpha/disksubr.c index 1cd40476a04..479879eb215 100644 --- a/sys/arch/alpha/alpha/disksubr.c +++ b/sys/arch/alpha/alpha/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.72 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.73 2007/06/05 00:38:12 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -139,20 +139,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); minilabel = fallbacklabel = *lp; /* get a buffer and initialize it */ @@ -284,9 +284,9 @@ readdoslabel(bp, strat, lp, osdep, partoffp, cylp, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -305,17 +305,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -378,9 +378,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -442,8 +442,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || - npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -540,7 +540,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + osdep->labelsector; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -551,8 +551,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -568,15 +568,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; goto bad; } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/amd64/amd64/disksubr.c b/sys/arch/amd64/amd64/disksubr.c index b4d657de6c3..a0a19e0d6d8 100644 --- a/sys/arch/amd64/amd64/disksubr.c +++ b/sys/arch/amd64/amd64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.36 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.37 2007/06/05 00:38:13 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -85,20 +85,20 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* Look for any BIOS geometry information we should honour. */ devno = chrtoblk(dev); @@ -111,12 +111,12 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, printf("Disk GEOM %u/%u/%u -> BIOS GEOM %u/%u/%u\n", lp->d_ntracks, lp->d_nsectors, lp->d_ncylinders, pdi->bios_heads, pdi->bios_sectors, - lp->d_secperunit / (pdi->bios_heads * pdi->bios_sectors)); + DL_GETDSIZE(lp) / (pdi->bios_heads * pdi->bios_sectors)); #endif lp->d_ntracks = pdi->bios_heads; lp->d_nsectors = pdi->bios_sectors; lp->d_secpercyl = pdi->bios_sectors * pdi->bios_heads; - lp->d_ncylinders = lp->d_secperunit / lp->d_secpercyl; + lp->d_ncylinders = DL_GETDSIZE(lp) / lp->d_secpercyl; } /* get a buffer and initialize it */ @@ -169,9 +169,9 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -190,17 +190,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -262,9 +262,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -355,7 +355,8 @@ setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -470,7 +471,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -481,8 +482,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -498,9 +499,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -508,7 +509,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/arm/arm/disksubr.c b/sys/arch/arm/arm/disksubr.c index 5657eb7489f..6fc8947caab 100644 --- a/sys/arch/arm/arm/disksubr.c +++ b/sys/arch/arm/arm/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.31 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.32 2007/06/05 00:38:14 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -81,20 +81,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); @@ -146,9 +146,9 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -167,17 +167,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -238,9 +238,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -333,7 +333,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -451,7 +452,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -462,8 +463,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -479,9 +480,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -489,7 +490,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/aviion/aviion/disksubr.c b/sys/arch/aviion/aviion/disksubr.c index 0f4e36e6b9c..625a03e3ee2 100644 --- a/sys/arch/aviion/aviion/disksubr.c +++ b/sys/arch/aviion/aviion/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.22 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.23 2007/06/05 00:38:14 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -81,20 +81,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); @@ -146,9 +146,9 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -167,17 +167,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -238,9 +238,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_GETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -333,7 +333,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -450,7 +451,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART], lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -461,8 +462,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -478,9 +479,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -488,7 +489,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/hp300/dev/hd.c b/sys/arch/hp300/dev/hd.c index b6b27dac541..0113225da01 100644 --- a/sys/arch/hp300/dev/hd.c +++ b/sys/arch/hp300/dev/hd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hd.c,v 1.47 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: hd.c,v 1.48 2007/06/05 00:38:14 deraadt Exp $ */ /* $NetBSD: rd.c,v 1.33 1997/07/10 18:14:08 kleink Exp $ */ /* @@ -509,7 +509,7 @@ hdgetdisklabel(dev, rs, lp, clp, spoofonly) sizeof(lp->d_typename)); strncpy(lp->d_packname, "fictitious", sizeof lp->d_packname); - lp->d_secperunit = hdidentinfo[rs->sc_type].ri_nblocks; + DL_SETDSIZE(lp, hdidentinfo[rs->sc_type].ri_nblocks); lp->d_rpm = 3600; lp->d_interleave = 1; lp->d_flags = 0; @@ -709,7 +709,7 @@ hdstrategy(bp) * XXX bounds_check_with_label() has put in there. */ pinfo = &rs->sc_dkdev.dk_label->d_partitions[DISKPART(bp->b_dev)]; - bp->b_cylinder = bp->b_blkno + pinfo->p_offset; + bp->b_cylinder = bp->b_blkno + DL_GETPOFFSET(pinfo); } s = splbio(); @@ -1065,7 +1065,7 @@ hderror(unit) * we just use b_blkno. */ bp = rs->sc_tab.b_actf; - pbn = rs->sc_dkdev.dk_label->d_partitions[DISKPART(bp->b_dev)].p_offset; + pbn = DL_GETPOFFSET(&rs->sc_dkdev.dk_label->d_partitions[DISKPART(bp->b_dev)]); if ((sp->c_fef & FEF_CU) || (sp->c_fef & FEF_DR) || (sp->c_ief & IEF_RRMASK)) { hwbn = HDBTOS(pbn + bp->b_blkno); @@ -1243,7 +1243,7 @@ hdsize(dev) if (rs->sc_dkdev.dk_label->d_partitions[part].p_fstype != FS_SWAP) size = -1; else - size = rs->sc_dkdev.dk_label->d_partitions[part].p_size * + size = DL_GETPSIZE(&rs->sc_dkdev.dk_label->d_partitions[part]) * (rs->sc_dkdev.dk_label->d_secsize / DEV_BSIZE); if (hdclose(dev, FREAD | FWRITE, S_IFBLK, NULL) != 0) @@ -1326,8 +1326,8 @@ hddump(dev, blkno, va, size) totwrt = size / sectorsize; blkno = dbtob(blkno) / sectorsize; /* blkno in DEV_BSIZE units */ - nsects = lp->d_partitions[part].p_size; - sectoff = lp->d_partitions[part].p_offset; + nsects = DL_GETPSIZE(&lp->d_partitions[part]); + sectoff = DL_GETPOFFSET(&lp->d_partitions[part]); /* Check transfer bounds against partition size. */ if ((blkno < 0) || (blkno + totwrt) > nsects) diff --git a/sys/arch/hp300/hp300/disksubr.c b/sys/arch/hp300/hp300/disksubr.c index 2ef84441d2e..a4d6e45642c 100644 --- a/sys/arch/hp300/hp300/disksubr.c +++ b/sys/arch/hp300/hp300/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.29 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.30 2007/06/05 00:38:15 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.9 1997/04/01 03:12:13 scottr Exp $ */ /* @@ -67,20 +67,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) @@ -151,7 +151,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -185,8 +186,8 @@ writedisklabel(dev, strat, lp, osdep) int error = 0; labelpart = DISKPART(dev); - if (lp->d_partitions[labelpart].p_offset != 0) { - if (lp->d_partitions[0].p_offset != 0) + if (DL_GETPOFFSET(&lp->d_partitions[labelpart]) != 0) { + if (DL_GETPOFFSET(&lp->d_partitions[0]) != 0) return (EXDEV); /* not quite right */ labelpart = 0; } @@ -233,7 +234,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[0].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[0]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -244,15 +245,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; goto bad; } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -268,7 +269,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/hppa/hppa/disksubr.c b/sys/arch/hppa/hppa/disksubr.c index d0f40529112..09711c3afa4 100644 --- a/sys/arch/hppa/hppa/disksubr.c +++ b/sys/arch/hppa/hppa/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.52 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.53 2007/06/05 00:38:15 deraadt Exp $ */ /* * Copyright (c) 1999 Michael Shalayeff @@ -143,20 +143,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); minilabel = fallbacklabel = *lp; /* get a buffer and initialize it */ @@ -287,9 +287,9 @@ readdoslabel(bp, strat, lp, osdep, partoffp, cylp, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -308,17 +308,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -381,9 +381,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -512,8 +512,8 @@ readliflabel (bp, strat, lp, osdep, partoffp, cylp, spoofonly) lp->d_bbsize = 8192; lp->d_sbsize = 8192; for (i = 0; i < MAXPARTITIONS; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); lp->d_partitions[i].p_fstype = 0; } @@ -533,13 +533,13 @@ readliflabel (bp, strat, lp, osdep, partoffp, cylp, spoofonly) } else continue; - pp->p_size = hl->hl_parts[i].hlp_length * 2; - pp->p_offset = hl->hl_parts[i].hlp_start * 2; + DL_SETPSIZE(pp, hl->hl_parts[i].hlp_length * 2); + DL_SETPOFFSET(pp, hl->hl_parts[i].hlp_start * 2); pp->p_fstype = fstype; } - lp->d_partitions[RAW_PART].p_size = lp->d_secperunit; - lp->d_partitions[RAW_PART].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[RAW_PART], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[RAW_PART], 0); lp->d_partitions[RAW_PART].p_fstype = FS_UNUSED; lp->d_npartitions = MAXPARTITIONS; lp->d_magic = DISKMAGIC; @@ -607,8 +607,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || - npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -694,7 +694,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + osdep->labelsector; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -705,8 +705,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -722,15 +722,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; goto bad; } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/hppa64/hppa64/disksubr.c b/sys/arch/hppa64/hppa64/disksubr.c index 86fdfac40cd..d5bb99c2c7f 100644 --- a/sys/arch/hppa64/hppa64/disksubr.c +++ b/sys/arch/hppa64/hppa64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.35 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.36 2007/06/05 00:38:15 deraadt Exp $ */ /* * Copyright (c) 1999 Michael Shalayeff @@ -143,20 +143,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); minilabel = fallbacklabel = *lp; /* get a buffer and initialize it */ @@ -283,9 +283,9 @@ readdoslabel(bp, strat, lp, osdep, partoffp, cylp, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -304,17 +304,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -377,9 +377,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -508,8 +508,8 @@ readliflabel (bp, strat, lp, osdep, partoffp, cylp, spoofonly) lp->d_bbsize = 8192; lp->d_sbsize = 8192; for (i = 0; i < MAXPARTITIONS; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); lp->d_partitions[i].p_fstype = 0; } @@ -529,13 +529,13 @@ readliflabel (bp, strat, lp, osdep, partoffp, cylp, spoofonly) } else continue; - pp->p_size = hl->hl_parts[i].hlp_length * 2; - pp->p_offset = hl->hl_parts[i].hlp_start * 2; + DL_SETPSIZE(pp, hl->hl_parts[i].hlp_length * 2); + DL_SETPOFFSET(pp, hl->hl_parts[i].hlp_start * 2); pp->p_fstype = fstype; } - lp->d_partitions[RAW_PART].p_size = lp->d_secperunit; - lp->d_partitions[RAW_PART].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[RAW_PART], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[RAW_PART], 0); lp->d_partitions[RAW_PART].p_fstype = FS_UNUSED; lp->d_npartitions = MAXPARTITIONS; lp->d_magic = DISKMAGIC; @@ -603,8 +603,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || - npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -690,7 +690,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + osdep->labelsector; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -701,8 +701,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -718,15 +718,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; goto bad; } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/i386/i386/disksubr.c b/sys/arch/i386/i386/disksubr.c index d62a6eff889..e233087352a 100644 --- a/sys/arch/i386/i386/disksubr.c +++ b/sys/arch/i386/i386/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.76 2007/06/02 02:35:26 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.77 2007/06/05 00:38:15 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -85,20 +85,20 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* Look for any BIOS geometry information we should honour. */ devno = chrtoblk(dev); @@ -111,12 +111,12 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, printf("Disk GEOM %u/%u/%u -> BIOS GEOM %u/%u/%u\n", lp->d_ntracks, lp->d_nsectors, lp->d_ncylinders, pdi->bios_heads, pdi->bios_sectors, - lp->d_secperunit / (pdi->bios_heads * pdi->bios_sectors)); + DL_GETDSIZE(lp) / (pdi->bios_heads * pdi->bios_sectors)); #endif lp->d_ntracks = pdi->bios_heads; lp->d_nsectors = pdi->bios_sectors; lp->d_secpercyl = pdi->bios_sectors * pdi->bios_heads; - lp->d_ncylinders = lp->d_secperunit / lp->d_secpercyl; + lp->d_ncylinders = DL_GETDSIZE(lp) / lp->d_secpercyl; } /* get a buffer and initialize it */ @@ -169,9 +169,9 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), struct disklabel *lp, cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -190,17 +190,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -262,9 +262,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -355,7 +355,8 @@ setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -470,7 +471,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -481,8 +482,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -498,9 +499,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -508,7 +509,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/landisk/landisk/disksubr.c b/sys/arch/landisk/landisk/disksubr.c index fd9e3b63bd8..9e88527ccee 100644 --- a/sys/arch/landisk/landisk/disksubr.c +++ b/sys/arch/landisk/landisk/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.19 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.20 2007/06/05 00:38:16 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -81,20 +81,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPSIZE(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); @@ -146,9 +146,9 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -167,17 +167,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -238,9 +238,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -333,7 +333,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -451,7 +452,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -462,8 +463,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -479,9 +480,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -489,7 +490,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/luna88k/luna88k/disksubr.c b/sys/arch/luna88k/luna88k/disksubr.c index a2716c6d976..c0516604eed 100644 --- a/sys/arch/luna88k/luna88k/disksubr.c +++ b/sys/arch/luna88k/luna88k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.14 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.15 2007/06/05 00:38:16 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.12 2002/02/19 17:09:44 wiz Exp $ */ /* @@ -128,20 +128,20 @@ readdisklabel(dev, strat, lp, clp, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) @@ -249,8 +249,8 @@ setdisklabel(olp, nlp, openmask, clp) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || - npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); } @@ -322,15 +322,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, /* overwriting disk label ? */ /* XXX this assumes everything <=LABELSECTOR is label! */ /* But since LABELSECTOR is 0, that's ok for now. */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= LABELSECTOR && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= LABELSECTOR && (bp->b_flags & B_READ) == 0 && wlabel == 0) { bp->b_error = EROFS; goto bad; } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -346,7 +346,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); @@ -417,7 +417,7 @@ disklabel_om_to_bsd(cp, lp) secpercyl = sl->sl_nsectors * sl->sl_ntracks; lp->d_secpercyl = secpercyl; - lp->d_secperunit = secpercyl * sl->sl_ncylinders; + DL_SETDSIZE(lp, (daddr64_t)secpercyl * sl->sl_ncylinders); lp->d_sparespercyl = 0; /* no way to know */ lp->d_acylinders = sl->sl_acylinders; @@ -436,9 +436,9 @@ disklabel_om_to_bsd(cp, lp) for (i = 0; i < 8; i++) { spp = &sl->sl_part[i]; npp = &lp->d_partitions[i]; - npp->p_offset = spp->sdkp_cyloffset * secpercyl; - npp->p_size = spp->sdkp_nsectors; - if (npp->p_size == 0) + DL_SETPOFFSET(npp, spp->sdkp_cyloffset * secpercyl); + DL_SETPSIZE(npp, spp->sdkp_nsectors); + if (DL_GETPSIZE(npp) == 0) npp->p_fstype = FS_UNUSED; else { /* Partition has non-zero size. Set type, etc. */ @@ -464,7 +464,7 @@ disklabel_om_to_bsd(cp, lp) * UniOS rootfs sits on part c which don't begin at sect 0, * and impossible to mount. Thus, make it usable as part b. */ - if (sl->sl_rpm == 0 && lp->d_partitions[2].p_offset != 0) { + if (sl->sl_rpm == 0 && DL_GETPOFFSET(&lp->d_partitions[2]) != 0) { lp->d_partitions[1] = lp->d_partitions[2]; lp->d_partitions[1].p_fstype = FS_BSDFFS; } @@ -513,8 +513,8 @@ disklabel_bsd_to_om(lp, cp) spp = &sl->sl_part[i]; npp = &lp->d_partitions[i]; - spp->sdkp_cyloffset = npp->p_offset; /* UniOS */ - spp->sdkp_nsectors = npp->p_size; + spp->sdkp_cyloffset = DL_GETPOFFSET(npp); /* UniOS */ + spp->sdkp_nsectors = DL_GETPSIZE(npp); } sl->sl_magic = SUN_DKMAGIC; diff --git a/sys/arch/mac68k/mac68k/disksubr.c b/sys/arch/mac68k/mac68k/disksubr.c index e25f4512f81..a1b6cb6a606 100644 --- a/sys/arch/mac68k/mac68k/disksubr.c +++ b/sys/arch/mac68k/mac68k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.37 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.38 2007/06/05 00:38:16 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.22 1997/11/26 04:18:20 briggs Exp $ */ /* @@ -210,8 +210,8 @@ fixPartTable(partTable, size, base) void setPart(struct partmapentry *part, struct disklabel *lp, int fstype, int slot) { - lp->d_partitions[slot].p_size = part->pmPartBlkCnt; - lp->d_partitions[slot].p_offset = part->pmPyPartStart; + DL_SETPSIZE(&lp->d_partitions[slot], part->pmPartBlkCnt); + DL_SETPOFFSET(&lp->d_partitions[slot], part->pmPyPartStart); lp->d_partitions[slot].p_fstype = fstype; part->pmPartType[0] = '\0'; } @@ -372,20 +372,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) @@ -474,7 +474,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -512,8 +513,8 @@ writedisklabel(dev, strat, lp, osdep) u_int16_t *sbSigp; labelpart = DISKPART(dev); - if (lp->d_partitions[labelpart].p_offset != 0) { - if (lp->d_partitions[0].p_offset != 0) + if (DL_GETPOFFSET(&lp->d_partitions[labelpart]) != 0) { + if (DL_GETPOFFSET(&lp->d_partitions[0]) != 0) return (EXDEV); /* not quite right */ labelpart = 0; } @@ -563,7 +564,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -574,8 +575,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -592,9 +593,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, /* overwriting disk label ? */ /* XXX should also protect bootstrap in first 8K */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif /* LABELSECTOR != 0 */ (bp->b_flags & B_READ) == 0 && wlabel == 0) { bp->b_error = EROFS; @@ -602,7 +603,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/macppc/macppc/disksubr.c b/sys/arch/macppc/macppc/disksubr.c index c0e2beae511..92320bff4e8 100644 --- a/sys/arch/macppc/macppc/disksubr.c +++ b/sys/arch/macppc/macppc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.41 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.42 2007/06/05 00:38:17 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -85,20 +85,20 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); @@ -152,8 +152,8 @@ readdisklabel(dev_t dev, void (*strat)(struct buf *), } /* currently we ignore all but HFS partitions */ if (strcmp(part->pmPartType, PART_TYPE_MAC) == 0) { - pp->p_offset = part->pmPyPartStart; - pp->p_size = part->pmPartBlkCnt; + DL_SETPOFFSET(pp, part->pmPyPartStart); + DL_SETPSIZE(pp, part->pmPartBlkCnt); pp->p_fstype = FS_HFS; n++; } @@ -231,10 +231,9 @@ hfs_done: cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = - letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -253,17 +252,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -324,9 +323,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -420,7 +419,8 @@ setdisklabel(struct disklabel *olp, struct disklabel *nlp, u_long openmask, return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -557,7 +557,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -568,8 +568,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -585,9 +585,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -595,7 +595,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/mips64/mips64/disksubr.c b/sys/arch/mips64/mips64/disksubr.c index 6ddae6e36f0..e24069bb02b 100644 --- a/sys/arch/mips64/mips64/disksubr.c +++ b/sys/arch/mips64/mips64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.41 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.42 2007/06/05 00:38:17 deraadt Exp $ */ /* * Copyright (c) 1999 Michael Shalayeff @@ -144,20 +144,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); minilabel = fallbacklabel = *lp; /* get a buffer and initialize it */ @@ -291,9 +291,9 @@ readdoslabel(bp, strat, lp, osdep, partoffp, cylp, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -312,17 +312,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_GETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -385,9 +385,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -498,8 +498,10 @@ static struct {int m; int b;} maptab[] = { for (i = 0; i < 16; i++) { int bsd = maptab[i].m; - lp->d_partitions[bsd].p_offset = dlp->partitions[i].first; - lp->d_partitions[bsd].p_size = dlp->partitions[i].blocks; + DL_SETPOFFSET(&lp->d_partitions[bsd], + dlp->partitions[i].first); + DL_SETPSIZE(&lp->d_partitions[bsd], + dlp->partitions[i].blocks); lp->d_partitions[bsd].p_fstype = maptab[i].b; if (lp->d_partitions[bsd].p_fstype == FS_BSDFFS) { lp->d_partitions[bsd].p_fragblock = @@ -553,8 +555,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || - npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -640,7 +642,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + osdep->labelsector; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -651,8 +653,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -668,15 +670,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; goto bad; } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/mvme68k/mvme68k/disksubr.c b/sys/arch/mvme68k/mvme68k/disksubr.c index fc48b2eebcb..be1748bb260 100644 --- a/sys/arch/mvme68k/mvme68k/disksubr.c +++ b/sys/arch/mvme68k/mvme68k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.42 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.43 2007/06/05 00:38:17 deraadt Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1995 Dale Rahn. @@ -34,20 +34,11 @@ #include <sys/disklabel.h> #include <sys/disk.h> -#ifdef DEBUG -int disksubr_debug = 0; -#endif - static void bsdtocpulabel(struct disklabel *lp, struct cpu_disklabel *clp); static void cputobsdlabel(struct disklabel *lp, struct cpu_disklabel *clp); -#ifdef DEBUG -static void printlp(struct disklabel *lp, char *str); -static void printclp(struct cpu_disklabel *clp, char *str); -#endif - /* * Attempt to read a disk label from a device * using the indicated strategy routine. @@ -72,20 +63,20 @@ readdisklabel(dev, strat, lp, clp, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) @@ -136,12 +127,6 @@ readdisklabel(dev, strat, lp, clp, spoofonly) goto done; } -#ifdef DEBUG - if (disksubr_debug > 0) { - printlp(lp, "readdisklabel:bsd label"); - printclp(clp, "readdisklabel:cpu label"); - } -#endif done: if (bp) { bp->b_flags = B_INVAL | B_AGE | B_READ; @@ -164,15 +149,6 @@ setdisklabel(olp, nlp, openmask, clp) int i; struct partition *opp, *npp; -#ifdef DEBUG - if(disksubr_debug > 0) { - printlp(nlp, "setdisklabel:new disklabel"); - printlp(olp, "setdisklabel:old disklabel"); - printclp(clp, "setdisklabel:cpu disklabel"); - } -#endif - - /* sanity clause */ if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 || (nlp->d_secsize % DEV_BSIZE) != 0) @@ -195,7 +171,8 @@ setdisklabel(olp, nlp, openmask, clp) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -211,11 +188,6 @@ setdisklabel(olp, nlp, openmask, clp) nlp->d_checksum = 0; nlp->d_checksum = dkcksum(nlp); *olp = *nlp; -#ifdef DEBUG - if(disksubr_debug > 0) { - printlp(olp, "setdisklabel:old->new disklabel"); - } -#endif return (0); } @@ -232,12 +204,6 @@ writedisklabel(dev, strat, lp, clp) struct buf *bp; int error; -#ifdef DEBUG - if(disksubr_debug > 0) { - printlp(lp, "writedisklabel: bsd label"); - } -#endif - /* obtain buffer to read initial cpu_disklabel, for bootloader size :-) */ bp = geteblk((int)lp->d_secsize); @@ -264,12 +230,6 @@ writedisklabel(dev, strat, lp, clp) bsdtocpulabel(lp, clp); -#ifdef DEBUG - if (disksubr_debug > 0) { - printclp(clp, "writedisklabel: cpu label"); - } -#endif - if (lp->d_magic == DISKMAGIC && lp->d_magic2 == DISKMAGIC && dkcksum(lp) == 0) { /* obtain buffer to scrozz drive with */ @@ -300,7 +260,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[0].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[0]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -312,9 +272,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, /* overwriting disk label ? */ /* XXX should also protect bootstrap in first 8K */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && wlabel == 0) { bp->b_error = EROFS; @@ -322,8 +282,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -339,7 +299,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); @@ -370,7 +330,7 @@ bsdtocpulabel(lp, clp) clp->cfg_hds = lp->d_ntracks; clp->secpercyl = lp->d_secpercyl; - clp->secperunit = lp->d_secperunit; + clp->secperunit = DL_GETDSIZE(lp); clp->sparespertrack = lp->d_sparespertrack; clp->sparespercyl = lp->d_sparespercyl; clp->acylinders = lp->d_acylinders; @@ -506,11 +466,6 @@ cputobsdlabel(lp, clp) int i; if (clp->version == 0) { -#ifdef DEBUG - if (disksubr_debug > 0) { - printf("Reading old disklabel\n"); - } -#endif lp->d_magic = clp->magic1; lp->d_type = clp->type; lp->d_subtype = clp->subtype; @@ -522,9 +477,7 @@ cputobsdlabel(lp, clp) lp->d_ntracks = clp->cfg_hds; lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; - lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; + DL_SETDSIZE(lp, clp->secperunit); lp->d_sparespertrack = clp->sparespertrack; lp->d_sparespercyl = clp->sparespercyl; lp->d_acylinders = clp->acylinders; @@ -570,11 +523,6 @@ cputobsdlabel(lp, clp) lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); } else { -#ifdef DEBUG - if (disksubr_debug > 0) { - printf("Reading new disklabel\n"); - } -#endif lp->d_magic = clp->magic1; lp->d_type = clp->type; lp->d_subtype = clp->subtype; @@ -586,9 +534,7 @@ cputobsdlabel(lp, clp) lp->d_ntracks = clp->cfg_hds; lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; - lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; + DL_SETDSIZE(lp, clp->secperunit); lp->d_sparespertrack = clp->sparespertrack; lp->d_sparespercyl = clp->sparespercyl; lp->d_acylinders = clp->acylinders; @@ -634,70 +580,4 @@ cputobsdlabel(lp, clp) lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); } -#if DEBUG - if (disksubr_debug > 0) { - printlp(lp, "translated label read from disk\n"); - } -#endif } - -#ifdef DEBUG -static void -printlp(lp, str) - struct disklabel *lp; - char *str; -{ - int i; - - printf("%s\n", str); - printf("magic1 %x\n", lp->d_magic); - printf("magic2 %x\n", lp->d_magic2); - printf("typename %s\n", lp->d_typename); - printf("secsize %x nsect %x ntrack %x ncylinders %x\n", - lp->d_secsize, lp->d_nsectors, lp->d_ntracks, lp->d_ncylinders); - printf("Num partitions %x\n", lp->d_npartitions); - for (i = 0; i < lp->d_npartitions; i++) { - struct partition *part = &lp->d_partitions[i]; - char *fstyp = fstypenames[part->p_fstype]; - - printf("%c: size %10x offset %10x type %7s frag %5x cpg %3x\n", - 'a' + i, part->p_size, part->p_offset, fstyp, - part->p_frag, part->p_cpg); - } -} - -static void -printclp(clp, str) - struct cpu_disklabel *clp; - char *str; -{ - int max, i; - - printf("%s\n", str); - printf("magic1 %x\n", clp->magic1); - printf("magic2 %x\n", clp->magic2); - printf("typename %s\n", clp->vid_vd); - printf("secsize %x nsect %x ntrack %x ncylinders %x\n", - clp->cfg_psm, clp->cfg_spt, clp->cfg_hds, clp->cfg_trk); - printf("Num partitions %x\n", clp->partitions); - max = clp->partitions < 16 ? clp->partitions : 16; - for (i = 0; i < max; i++) { - struct partition *part; - char *fstyp; - - if (i < 4) { - part = (void *)&clp->vid_4[0]; - part = &part[i]; - } else { - part = (void *)&clp->cfg_4[0]; - part = &part[i-4]; - } - - fstyp = fstypenames[part->p_fstype]; - - printf("%c: size %10x offset %10x type %7s frag %5x cpg %3x\n", - 'a' + i, part->p_size, part->p_offset, fstyp, - part->p_frag, part->p_cpg); - } -} -#endif diff --git a/sys/arch/mvme88k/mvme88k/disksubr.c b/sys/arch/mvme88k/mvme88k/disksubr.c index 34169dfd5cc..21cebb280b7 100644 --- a/sys/arch/mvme88k/mvme88k/disksubr.c +++ b/sys/arch/mvme88k/mvme88k/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.38 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.39 2007/06/05 00:38:17 deraadt Exp $ */ /* * Copyright (c) 1998 Steve Murphree, Jr. * Copyright (c) 1995 Dale Rahn. @@ -34,18 +34,9 @@ #include <sys/disklabel.h> #include <sys/disk.h> -#ifdef DEBUG -int disksubr_debug; -#endif - void bsdtocpulabel(struct disklabel *, struct cpu_disklabel *); void cputobsdlabel(struct disklabel *, struct cpu_disklabel *); -#ifdef DEBUG -void printlp(struct disklabel *, char *); -void printclp(struct cpu_disklabel *, char *); -#endif - /* * Attempt to read a disk label from a device * using the indicated strategy routine. @@ -70,20 +61,20 @@ readdisklabel(dev, strat, lp, clp, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* don't read the on-disk label if we are in spoofed-only mode */ if (spoofonly) @@ -133,12 +124,6 @@ readdisklabel(dev, strat, lp, clp, spoofonly) goto done; } -#ifdef DEBUG - if (disksubr_debug != 0) { - printlp(lp, "readdisklabel:bsd label"); - printclp(clp, "readdisklabel:cpu label"); - } -#endif done: if (bp) { bp->b_flags = B_INVAL | B_AGE | B_READ; @@ -161,15 +146,6 @@ setdisklabel(olp, nlp, openmask, clp) int i; struct partition *opp, *npp; -#ifdef DEBUG - if (disksubr_debug != 0) { - printlp(nlp, "setdisklabel:new disklabel"); - printlp(olp, "setdisklabel:old disklabel"); - printclp(clp, "setdisklabel:cpu disklabel"); - } -#endif - - /* sanity clause */ if (nlp->d_secpercyl == 0 || nlp->d_secsize == 0 || (nlp->d_secsize % DEV_BSIZE) != 0) @@ -192,7 +168,8 @@ setdisklabel(olp, nlp, openmask, clp) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -208,11 +185,6 @@ setdisklabel(olp, nlp, openmask, clp) nlp->d_checksum = 0; nlp->d_checksum = dkcksum(nlp); *olp = *nlp; -#ifdef DEBUG - if (disksubr_debug != 0) { - printlp(olp, "setdisklabel:old->new disklabel"); - } -#endif return (0); } @@ -229,12 +201,6 @@ writedisklabel(dev, strat, lp, clp) struct buf *bp; int error; -#ifdef DEBUG - if (disksubr_debug != 0) { - printlp(lp, "writedisklabel: bsd label"); - } -#endif - /* obtain buffer to read initial cpu_disklabel, for bootloader size :-) */ bp = geteblk((int)lp->d_secsize); @@ -261,12 +227,6 @@ writedisklabel(dev, strat, lp, clp) bsdtocpulabel(lp, clp); -#ifdef DEBUG - if (disksubr_debug != 0) { - printclp(clp, "writedisklabel: cpu label"); - } -#endif - if (lp->d_magic == DISKMAGIC && lp->d_magic2 == DISKMAGIC && dkcksum(lp) == 0) { /* obtain buffer to scrozz drive with */ @@ -297,7 +257,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[0].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[0]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -309,9 +269,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, /* overwriting disk label ? */ /* XXX should also protect bootstrap in first 8K */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && wlabel == 0) { bp->b_error = EROFS; @@ -319,8 +279,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -336,7 +296,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); @@ -367,7 +327,7 @@ bsdtocpulabel(lp, clp) clp->cfg_hds = lp->d_ntracks; clp->secpercyl = lp->d_secpercyl; - clp->secperunit = lp->d_secperunit; + clp->secperunit = DL_GETDSIZE(lp); clp->sparespertrack = lp->d_sparespertrack; clp->sparespercyl = lp->d_sparespercyl; clp->acylinders = lp->d_acylinders; @@ -427,11 +387,6 @@ cputobsdlabel(lp, clp) int i; if (clp->version == 0) { -#ifdef DEBUG - if (disksubr_debug != 0) { - printf("Reading old disklabel\n"); - } -#endif lp->d_magic = clp->magic1; lp->d_type = clp->type; lp->d_subtype = clp->subtype; @@ -443,9 +398,7 @@ cputobsdlabel(lp, clp) lp->d_ntracks = clp->cfg_hds; lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; - lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; + DL_SETDSIZE(lp, clp->secperunit); lp->d_sparespertrack = clp->sparespertrack; lp->d_sparespercyl = clp->sparespercyl; lp->d_acylinders = clp->acylinders; @@ -491,11 +444,6 @@ cputobsdlabel(lp, clp) lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); } else { -#ifdef DEBUG - if (disksubr_debug != 0) { - printf("Reading new disklabel\n"); - } -#endif lp->d_magic = clp->magic1; lp->d_type = clp->type; lp->d_subtype = clp->subtype; @@ -507,9 +455,7 @@ cputobsdlabel(lp, clp) lp->d_ntracks = clp->cfg_hds; lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; - lp->d_secpercyl = clp->secpercyl; - lp->d_secperunit = clp->secperunit; + DL_SETDSIZE(lp, clp->secperunit); lp->d_sparespertrack = clp->sparespertrack; lp->d_sparespercyl = clp->sparespercyl; lp->d_acylinders = clp->acylinders; @@ -555,70 +501,4 @@ cputobsdlabel(lp, clp) lp->d_checksum = 0; lp->d_checksum = dkcksum(lp); } -#if defined(DEBUG) - if (disksubr_debug != 0) { - printlp(lp, "translated label read from disk\n"); - } -#endif -} - -#ifdef DEBUG -void -printlp(lp, str) - struct disklabel *lp; - char *str; -{ - int i; - - printf("%s\n", str); - printf("magic1 %x\n", lp->d_magic); - printf("magic2 %x\n", lp->d_magic2); - printf("typename %.*s\n", (int)sizeof(lp->d_typename), lp->d_typename); - printf("secsize %x nsect %x ntrack %x ncylinders %x\n", - lp->d_secsize, lp->d_nsectors, lp->d_ntracks, lp->d_ncylinders); - printf("Num partitions %x\n", lp->d_npartitions); - for (i = 0; i < lp->d_npartitions; i++) { - struct partition *part = &lp->d_partitions[i]; - char *fstyp = fstypenames[part->p_fstype]; - - printf("%c: size %10x offset %10x type %7s frag %5x cpg %3x\n", - 'a' + i, part->p_size, part->p_offset, fstyp, - part->p_frag, part->p_cpg); - } } - -void -printclp(clp, str) - struct cpu_disklabel *clp; - char *str; -{ - int max, i; - - printf("%s\n", str); - printf("magic1 %x\n", clp->magic1); - printf("magic2 %x\n", clp->magic2); - printf("typename %s\n", clp->vid_vd); - printf("secsize %x nsect %x ntrack %x ncylinders %x\n", - clp->cfg_psm, clp->cfg_spt, clp->cfg_hds, clp->cfg_trk); - printf("Num partitions %x\n", clp->partitions); - max = clp->partitions < 16 ? clp->partitions : 16; - for (i = 0; i < max; i++) { - struct partition *part; - char *fstyp; - - if (i < 4) { - part = (void *)&clp->vid_4[0]; - part = &part[i]; - } else { - part = (void *)&clp->cfg_4[0]; - part = &part[i-4]; - } - - fstyp = fstypenames[part->p_fstype]; - - printf("%c: size %10x offset %10x type %7s frag %5x cpg %3x\n", - 'a' + i, part->p_size, part->p_offset, fstyp, - part->p_frag, part->p_cpg); - } -} -#endif diff --git a/sys/arch/mvmeppc/mvmeppc/disksubr.c b/sys/arch/mvmeppc/mvmeppc/disksubr.c index 7965ae1d197..f7498b32ebd 100644 --- a/sys/arch/mvmeppc/mvmeppc/disksubr.c +++ b/sys/arch/mvmeppc/mvmeppc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.37 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.38 2007/06/05 00:38:17 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1996/05/03 19:42:03 christos Exp $ */ /* @@ -84,20 +84,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); /* get a buffer and initialize it */ bp = geteblk((int)lp->d_secsize); @@ -149,9 +149,9 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) cyl = DPCYL(dp2->dp_scyl, dp2->dp_ssect); /* XXX build a temporary disklabel */ - lp->d_partitions[0].p_size = letoh32(dp2->dp_size); - lp->d_partitions[0].p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPSIZE(&lp->d_partitions[0], letoh32(dp2->dp_size)); + DL_SETPOFFSET(&lp->d_partitions[0], + letoh32(dp2->dp_start) + part_blkno); if (lp->d_ntracks == 0) lp->d_ntracks = dp2->dp_ehd + 1; if (lp->d_nsectors == 0) @@ -170,17 +170,17 @@ donot: if (dp2->dp_typ == DOSPTYP_OPENBSD) continue; - if (letoh32(dp2->dp_size) > lp->d_secperunit) + if (letoh32(dp2->dp_size) > DL_GETDSIZE(lp)) continue; - if (letoh32(dp2->dp_start) > lp->d_secperunit) + if (letoh32(dp2->dp_start) > DL_GETDSIZE(lp)) continue; if (letoh32(dp2->dp_size) == 0) continue; if (letoh32(dp2->dp_start)) - pp->p_offset = - letoh32(dp2->dp_start) + part_blkno; + DL_SETPOFFSET(pp, + letoh32(dp2->dp_start) + part_blkno); - pp->p_size = letoh32(dp2->dp_size); + DL_SETPSIZE(pp, letoh32(dp2->dp_size)); switch (dp2->dp_typ) { case DOSPTYP_UNUSED: @@ -241,9 +241,9 @@ donot: goto notfat; /* Looks like a FAT filesystem. Spoof 'i'. */ - lp->d_partitions['i' - 'a'].p_size = - lp->d_partitions[RAW_PART].p_size; - lp->d_partitions['i' - 'a'].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions['i' - 'a'], + DL_GETPSIZE(&lp->d_partitions[RAW_PART])); + DL_SETPOFFSET(&lp->d_partitions['i' - 'a'], 0); lp->d_partitions['i' - 'a'].p_fstype = FS_MSDOS; } notfat: @@ -336,7 +336,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information @@ -453,7 +454,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, { #define blockpersec(count, lp) ((count) * (((lp)->d_secsize) / DEV_BSIZE)) struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = blockpersec(lp->d_partitions[RAW_PART].p_offset, lp) + + int labelsector = blockpersec(DL_GETPOFFSET(&lp->d_partitions[RAW_PART]), lp) + LABELSECTOR; int sz = howmany(bp->b_bcount, DEV_BSIZE); @@ -464,8 +465,8 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -481,9 +482,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* Overwriting disk label? */ - if (bp->b_blkno + blockpersec(p->p_offset, lp) <= labelsector && + if (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= labelsector && #if LABELSECTOR != 0 - bp->b_blkno + blockpersec(p->p_offset, lp) + sz > labelsector && + bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) + sz > labelsector && #endif (bp->b_flags & B_READ) == 0 && !wlabel) { bp->b_error = EROFS; @@ -491,7 +492,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); diff --git a/sys/arch/sparc/dev/fd.c b/sys/arch/sparc/dev/fd.c index d379f2c3c55..39205876b29 100644 --- a/sys/arch/sparc/dev/fd.c +++ b/sys/arch/sparc/dev/fd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fd.c,v 1.49 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: fd.c,v 1.50 2007/06/05 00:38:18 deraadt Exp $ */ /* $NetBSD: fd.c,v 1.51 1997/05/24 20:16:19 pk Exp $ */ /*- @@ -1964,7 +1964,7 @@ fdgetdisklabel(dev) lp->d_nsectors = fd->sc_type->sectrac; lp->d_ncylinders = fd->sc_type->tracks; lp->d_ntracks = fd->sc_type->heads; /* Go figure... */ - lp->d_secperunit = fd->sc_type->size; + DL_SETDSIZE(lp, fd->sc_type->size); lp->d_rpm = 300; /* XXX like it matters... */ strncpy(lp->d_typename, "floppy disk", sizeof(lp->d_typename)); diff --git a/sys/arch/sparc/dev/presto.c b/sys/arch/sparc/dev/presto.c index 17337f75072..8fa71113b39 100644 --- a/sys/arch/sparc/dev/presto.c +++ b/sys/arch/sparc/dev/presto.c @@ -1,4 +1,4 @@ -/* $OpenBSD: presto.c,v 1.8 2007/06/04 16:38:58 krw Exp $ */ +/* $OpenBSD: presto.c,v 1.9 2007/06/05 00:38:18 deraadt Exp $ */ /* * Copyright (c) 2003, Miodrag Vallat. * All rights reserved. @@ -198,7 +198,7 @@ prestosize(dev_t dev) if (part >= sc->sc_dk.dk_label->d_npartitions) return (0); else - return (sc->sc_dk.dk_label->d_partitions[part].p_size * + return (DL_GETPSIZE(&sc->sc_dk.dk_label->d_partitions[part]) * (sc->sc_dk.dk_label->d_secsize / DEV_BSIZE)); } @@ -378,8 +378,8 @@ presto_getdisklabel(dev_t dev, struct presto_softc *sc) lp->d_secsize = DEV_BSIZE; lp->d_ntracks = 1; lp->d_nsectors = 32; - lp->d_secperunit = (sc->sc_memsize - PSERVE_OFFSET) >> DEV_BSHIFT; - lp->d_ncylinders = lp->d_secperunit / lp->d_nsectors; + DL_SETDSIZE(lp, (sc->sc_memsize - PSERVE_OFFSET) >> DEV_BSHIFT); + lp->d_ncylinders = DL_GETDSIZE(lp) / lp->d_nsectors; lp->d_secpercyl = lp->d_nsectors; strncpy(lp->d_typename, "Prestoserve", 16); diff --git a/sys/arch/sparc/dev/xd.c b/sys/arch/sparc/dev/xd.c index accb5f40fa3..41683456a49 100644 --- a/sys/arch/sparc/dev/xd.c +++ b/sys/arch/sparc/dev/xd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xd.c,v 1.35 2007/04/29 18:59:37 krw Exp $ */ +/* $OpenBSD: xd.c,v 1.36 2007/06/05 00:38:18 deraadt Exp $ */ /* $NetBSD: xd.c,v 1.37 1997/07/29 09:58:16 fair Exp $ */ /* @@ -1009,7 +1009,7 @@ xdsize(dev) if (xdsc->sc_dk.dk_label->d_partitions[part].p_fstype != FS_SWAP) size = -1; /* only give valid size for swap partitions */ else - size = xdsc->sc_dk.dk_label->d_partitions[part].p_size * + size = DL_GETPSIZE(&xdsc->sc_dk.dk_label->d_partitions[part]) * (xdsc->sc_dk.dk_label->d_secsize / DEV_BSIZE); if (omask == 0 && xdclose(dev, 0, S_IFBLK, NULL) != 0) return (-1); @@ -1425,7 +1425,7 @@ xdc_startbuf(xdcsc, xdsc, bp) */ block = bp->b_blkno + ((partno == RAW_PART) ? 0 : - xdsc->sc_dk.dk_label->d_partitions[partno].p_offset); + DL_GETPOFFSET(&xdsc->sc_dk.dk_label->d_partitions[partno])); dbuf = kdvma_mapin(bp->b_data, bp->b_bcount, 0); if (dbuf == NULL) { /* out of DVMA space */ diff --git a/sys/arch/sparc/dev/xy.c b/sys/arch/sparc/dev/xy.c index 5ad979a6d5d..f860780ff4c 100644 --- a/sys/arch/sparc/dev/xy.c +++ b/sys/arch/sparc/dev/xy.c @@ -1,4 +1,4 @@ -/* $OpenBSD: xy.c,v 1.31 2007/04/29 18:59:37 krw Exp $ */ +/* $OpenBSD: xy.c,v 1.32 2007/06/05 00:38:18 deraadt Exp $ */ /* $NetBSD: xy.c,v 1.26 1997/07/19 21:43:56 pk Exp $ */ /* @@ -972,7 +972,7 @@ xysize(dev) if (xysc->sc_dk.dk_label->d_partitions[part].p_fstype != FS_SWAP) size = -1; /* only give valid size for swap partitions */ else - size = xysc->sc_dk.dk_label->d_partitions[part].p_size * + size = DL_GETPSIZE(&xysc->sc_dk.dk_label->d_partitions[part]) * (xysc->sc_dk.dk_label->d_secsize / DEV_BSIZE); if (omask == 0 && xyclose(dev, 0, S_IFBLK, NULL) != 0) return (-1); @@ -1283,7 +1283,7 @@ xyc_startbuf(xycsc, xysc, bp) */ block = bp->b_blkno + ((partno == RAW_PART) ? 0 : - xysc->sc_dk.dk_label->d_partitions[partno].p_offset); + DL_GETPOFFSET(&xysc->sc_dk.dk_label->d_partitions[partno])); dbuf = kdvma_mapin(bp->b_data, bp->b_bcount, 0); if (dbuf == NULL) { /* out of DVMA space */ diff --git a/sys/arch/sparc/sparc/disksubr.c b/sys/arch/sparc/sparc/disksubr.c index 510fbb6cfd3..50d42e00009 100644 --- a/sys/arch/sparc/sparc/disksubr.c +++ b/sys/arch/sparc/sparc/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.48 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.49 2007/06/05 00:38:18 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.16 1996/04/28 20:25:59 thorpej Exp $ */ /* @@ -87,20 +87,20 @@ readdisklabel(dev, strat, lp, clp, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART+1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); lp->d_bbsize = 8192; lp->d_sbsize = 64*1024; /* XXX ? */ @@ -225,7 +225,8 @@ setdisklabel(olp, nlp, openmask, clp) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); } @@ -299,15 +300,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, /* XXX should also protect bootstrap in first 8K */ /* XXX this assumes everything <=LABELSECTOR is label! */ /* But since LABELSECTOR is 0, that's ok for now. */ - if ((bp->b_blkno + blockpersec(p->p_offset, lp) <= LABELSECTOR) && + if ((bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= LABELSECTOR) && ((bp->b_flags & B_READ) == 0) && (wlabel == 0)) { bp->b_error = EROFS; goto bad; } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -323,7 +324,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); bad: @@ -420,7 +421,7 @@ disklabel_sun_to_bsd(cp, lp) secpercyl = sl->sl_nsectors * sl->sl_ntracks; lp->d_secpercyl = secpercyl; - lp->d_secperunit = secpercyl * sl->sl_ncylinders; + DL_SETDSIZE(lp, (daddr64_t)secpercyl * sl->sl_ncylinders); lp->d_version = 1; /* 48 bit addressing */ lp->d_sparespercyl = sl->sl_sparespercyl; @@ -436,9 +437,9 @@ disklabel_sun_to_bsd(cp, lp) for (i = 0; i < 8; i++) { spp = &sl->sl_part[i]; npp = &lp->d_partitions[i]; - npp->p_offset = spp->sdkp_cyloffset * secpercyl; - npp->p_size = spp->sdkp_nsectors; - if (npp->p_size == 0) { + DL_SETPOFFSET(npp, spp->sdkp_cyloffset * secpercyl); + DL_SETPSIZE(npp, spp->sdkp_nsectors); + if (DL_GETPSIZE(npp) == 0) { npp->p_fstype = FS_UNUSED; } else { npp->p_fstype = sun_fstypes[i]; @@ -457,8 +458,8 @@ disklabel_sun_to_bsd(cp, lp) /* Clear "extended" partition info, tentatively */ for (i = 0; i < SUNXPART; i++) { npp = &lp->d_partitions[i+8]; - npp->p_offset = 0; - npp->p_size = 0; + DL_SETPOFFSET(npp, 0); + DL_SETPSIZE(npp, 0); npp->p_fstype = FS_UNUSED; } @@ -472,9 +473,9 @@ disklabel_sun_to_bsd(cp, lp) for (i = 0; i < SUNXPART; i++) { spp = &sl->sl_xpart[i]; npp = &lp->d_partitions[i+8]; - npp->p_offset = spp->sdkp_cyloffset * secpercyl; - npp->p_size = spp->sdkp_nsectors; - if (npp->p_size == 0) { + DL_SETPOFFSET(npp, spp->sdkp_cyloffset * secpercyl); + DL_SETPSIZE(npp, spp->sdkp_nsectors); + if (DL_GETPSIZE(npp) == 0) { npp->p_fstype = FS_UNUSED; continue; } @@ -538,10 +539,10 @@ disklabel_bsd_to_sun(lp, cp) spp = &sl->sl_part[i]; npp = &lp->d_partitions[i]; - if (npp->p_offset % secpercyl) + if (DL_GETPOFFSET(npp) % secpercyl) return (EINVAL); - spp->sdkp_cyloffset = npp->p_offset / secpercyl; - spp->sdkp_nsectors = npp->p_size; + spp->sdkp_cyloffset = DL_GETPOFFSET(npp) / secpercyl; + spp->sdkp_nsectors = DL_GETPSIZE(npp); } sl->sl_magic = SUN_DKMAGIC; @@ -553,8 +554,8 @@ disklabel_bsd_to_sun(lp, cp) * certainly doesn't hurt anything and it's easy to do. */ for (i = 0; i < SUNXPART; i++) { - if (lp->d_partitions[i+8].p_offset || - lp->d_partitions[i+8].p_size) + if (DL_GETPOFFSET(&lp->d_partitions[i+8]) || + DL_GETPSIZE(&lp->d_partitions[i+8])) break; } /* We do need to load the extended table? */ @@ -563,11 +564,11 @@ disklabel_bsd_to_sun(lp, cp) for (i = 0; i < SUNXPART; i++) { spp = &sl->sl_xpart[i]; npp = &lp->d_partitions[i+8]; - if (npp->p_offset % secpercyl) + if (DL_GETPOFFSET(npp) % secpercyl) return (EINVAL); sl->sl_xpart[i].sdkp_cyloffset = - npp->p_offset / secpercyl; - sl->sl_xpart[i].sdkp_nsectors = npp->p_size; + DL_GETPOFFSET(npp) / secpercyl; + sl->sl_xpart[i].sdkp_nsectors = DL_GETPSIZE(npp); } for (i = 0; i < MAXPARTITIONS; i++) { npp = &lp->d_partitions[i]; diff --git a/sys/arch/sparc64/dev/fd.c b/sys/arch/sparc64/dev/fd.c index 313db79d502..a3c4990fcc6 100644 --- a/sys/arch/sparc64/dev/fd.c +++ b/sys/arch/sparc64/dev/fd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fd.c,v 1.12 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: fd.c,v 1.13 2007/06/05 00:38:19 deraadt Exp $ */ /* $NetBSD: fd.c,v 1.112 2003/08/07 16:29:35 agc Exp $ */ /*- @@ -2013,7 +2013,7 @@ fdgetdisklabel(dev) lp->d_nsectors = fd->sc_type->sectrac; lp->d_ncylinders = fd->sc_type->tracks; lp->d_ntracks = fd->sc_type->heads; /* Go figure... */ - lp->d_secperunit = lp->d_secpercyl * lp->d_ncylinders; + DL_SETDSIZE(lp, (daddr64_t)lp->d_secpercyl * lp->d_ncylinders); lp->d_rpm = 300; /* XXX like it matters... */ strncpy(lp->d_typename, "floppy disk", sizeof(lp->d_typename)); diff --git a/sys/arch/sparc64/sparc64/disksubr.c b/sys/arch/sparc64/sparc64/disksubr.c index 39fd2474119..33aeda7dcae 100644 --- a/sys/arch/sparc64/sparc64/disksubr.c +++ b/sys/arch/sparc64/sparc64/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.27 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.28 2007/06/05 00:38:19 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.13 2000/12/17 22:39:18 pk Exp $ */ /* @@ -87,20 +87,20 @@ readdisklabel(dev, strat, lp, clp, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART+1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); lp->d_bbsize = 8192; lp->d_sbsize = 64*1024; /* XXX ? */ @@ -224,7 +224,8 @@ setdisklabel(olp, nlp, openmask, clp) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); } @@ -296,15 +297,15 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, /* XXX should also protect bootstrap in first 8K */ /* XXX this assumes everything <=LABELSECTOR is label! */ /* But since LABELSECTOR is 0, that's ok for now. */ - if ((bp->b_blkno + blockpersec(p->p_offset, lp) <= LABELSECTOR) && + if ((bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp) <= LABELSECTOR) && ((bp->b_flags & B_READ) == 0) && (wlabel == 0)) { bp->b_error = EROFS; goto bad; } /* beyond partition? */ - if (bp->b_blkno + sz > blockpersec(p->p_size, lp)) { - sz = blockpersec(p->p_size, lp) - bp->b_blkno; + if (bp->b_blkno + sz > blockpersec(DL_GETPSIZE(p), lp)) { + sz = blockpersec(DL_GETPSIZE(p), lp) - bp->b_blkno; if (sz == 0) { /* If exactly at end of disk, return EOF. */ bp->b_resid = bp->b_bcount; @@ -320,7 +321,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + blockpersec(p->p_offset, lp)) / + bp->b_cylinder = (bp->b_blkno + blockpersec(DL_GETPOFFSET(p), lp)) / lp->d_secpercyl; return (1); bad: @@ -417,7 +418,7 @@ disklabel_sun_to_bsd(cp, lp) secpercyl = sl->sl_nsectors * sl->sl_ntracks; lp->d_secpercyl = secpercyl; - lp->d_secperunit = secpercyl * sl->sl_ncylinders; + DL_SETDSIZE(lp, (daddr64_t)secpercyl * sl->sl_ncylinders); lp->d_version = 1; /* 48 bit addressing */ lp->d_sparespercyl = sl->sl_sparespercyl; @@ -433,9 +434,9 @@ disklabel_sun_to_bsd(cp, lp) for (i = 0; i < 8; i++) { spp = &sl->sl_part[i]; npp = &lp->d_partitions[i]; - npp->p_offset = spp->sdkp_cyloffset * secpercyl; - npp->p_size = spp->sdkp_nsectors; - if (npp->p_size == 0) { + DL_SETPOFFSET(npp, spp->sdkp_cyloffset * secpercyl); + DL_SETPSIZE(npp, spp->sdkp_nsectors); + if (DL_GETPSIZE(npp) == 0) { npp->p_fstype = FS_UNUSED; } else { npp->p_fstype = sun_fstypes[i]; @@ -454,8 +455,8 @@ disklabel_sun_to_bsd(cp, lp) /* Clear "extended" partition info, tentatively */ for (i = 0; i < SUNXPART; i++) { npp = &lp->d_partitions[i+8]; - npp->p_offset = 0; - npp->p_size = 0; + DL_SETPOFFSET(npp, 0); + DL_SETPSIZE(npp, 0); npp->p_fstype = FS_UNUSED; } @@ -469,9 +470,9 @@ disklabel_sun_to_bsd(cp, lp) for (i = 0; i < SUNXPART; i++) { spp = &sl->sl_xpart[i]; npp = &lp->d_partitions[i+8]; - npp->p_offset = spp->sdkp_cyloffset * secpercyl; - npp->p_size = spp->sdkp_nsectors; - if (npp->p_size == 0) { + DL_SETPOFFSET(npp, spp->sdkp_cyloffset * secpercyl); + DL_SETPSIZE(npp, spp->sdkp_nsectors); + if (DL_GETPSIZE(npp) == 0) { npp->p_fstype = FS_UNUSED; continue; } @@ -535,10 +536,10 @@ disklabel_bsd_to_sun(lp, cp) spp = &sl->sl_part[i]; npp = &lp->d_partitions[i]; - if (npp->p_offset % secpercyl) + if (DL_GETPOFFSET(npp) % secpercyl) return (EINVAL); - spp->sdkp_cyloffset = npp->p_offset / secpercyl; - spp->sdkp_nsectors = npp->p_size; + spp->sdkp_cyloffset = DL_GETPOFFSET(npp) / secpercyl; + spp->sdkp_nsectors = DL_GETPSIZE(npp); } sl->sl_magic = SUN_DKMAGIC; @@ -550,8 +551,8 @@ disklabel_bsd_to_sun(lp, cp) * certainly doesn't hurt anything and it's easy to do. */ for (i = 0; i < SUNXPART; i++) { - if (lp->d_partitions[i+8].p_offset || - lp->d_partitions[i+8].p_size) + if (DL_GETPOFFSET(&lp->d_partitions[i+8]) || + DL_GETPSIZE(&lp->d_partitions[i+8])) break; } /* We do need to load the extended table? */ @@ -560,11 +561,11 @@ disklabel_bsd_to_sun(lp, cp) for (i = 0; i < SUNXPART; i++) { spp = &sl->sl_xpart[i]; npp = &lp->d_partitions[i+8]; - if (npp->p_offset % secpercyl) + if (DL_GETPOFFSET(npp) % secpercyl) return (EINVAL); sl->sl_xpart[i].sdkp_cyloffset = - npp->p_offset / secpercyl; - sl->sl_xpart[i].sdkp_nsectors = npp->p_size; + DL_GETPOFFSET(npp) / secpercyl; + sl->sl_xpart[i].sdkp_nsectors = DL_GETPSIZE(npp); } for (i = 0; i < MAXPARTITIONS; i++) { npp = &lp->d_partitions[i]; diff --git a/sys/arch/vax/mba/hp.c b/sys/arch/vax/mba/hp.c index 21e603384d6..a1216c49385 100644 --- a/sys/arch/vax/mba/hp.c +++ b/sys/arch/vax/mba/hp.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hp.c,v 1.16 2007/02/15 00:53:26 krw Exp $ */ +/* $OpenBSD: hp.c,v 1.17 2007/06/05 00:38:19 deraadt Exp $ */ /* $NetBSD: hp.c,v 1.22 2000/02/12 16:09:33 ragge Exp $ */ /* * Copyright (c) 1996 Ludd, University of Lule}, Sweden. @@ -167,7 +167,7 @@ hpattach(parent, self, aux) /*printf(": %s", msg);*/ } printf(": %.*s, size = %d sectors\n", - (int)sizeof(dl->d_typename), dl->d_typename, dl->d_secperunit); + (int)sizeof(dl->d_typename), dl->d_typename, DL_GETDSIZE(dl)); /* * check if this was what we booted from. */ @@ -194,7 +194,7 @@ hpstrategy(bp) goto done; bp->b_rawblkno = - bp->b_blkno + lp->d_partitions[DISKPART(bp->b_dev)].p_offset; + bp->b_blkno + DL_GETPOFFSET(&lp->d_partitions[DISKPART(bp->b_dev)]); bp->b_cylinder = bp->b_rawblkno / lp->d_secpercyl; s = splbio(); @@ -455,7 +455,7 @@ hpsize(dev) return -1; sc = hp_cd.cd_devs[unit]; - size = sc->sc_disk.dk_label->d_partitions[DISKPART(dev)].p_size * + size = DL_GETPSIZE(&sc->sc_disk.dk_label->d_partitions[DISKPART(dev)]) * (sc->sc_disk.dk_label->d_secsize / DEV_BSIZE); return size; diff --git a/sys/arch/vax/mscp/mscp_disk.c b/sys/arch/vax/mscp/mscp_disk.c index 8f84693992b..e7c293a3ccc 100644 --- a/sys/arch/vax/mscp/mscp_disk.c +++ b/sys/arch/vax/mscp/mscp_disk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mscp_disk.c,v 1.19 2007/03/13 21:05:24 miod Exp $ */ +/* $OpenBSD: mscp_disk.c,v 1.20 2007/06/05 00:38:19 deraadt Exp $ */ /* $NetBSD: mscp_disk.c,v 1.30 2001/11/13 07:38:28 lukem Exp $ */ /* * Copyright (c) 1996 Ludd, University of Lule}, Sweden. @@ -170,7 +170,7 @@ ra_putonline(ra) ra->ra_state = DK_OPEN; } - printf(": size %d sectors\n", dl->d_secperunit); + printf(": size %lld sectors\n", DL_GETDSIZE(dl)); return MSCP_DONE; } @@ -444,7 +444,7 @@ rasize(dev) if (ra_putonline(ra) == MSCP_FAILED) return -1; - return ra->ra_disk.dk_label->d_partitions[DISKPART(dev)].p_size * + return DL_GETPSIZE(&ra->ra_disk.dk_label->d_partitions[DISKPART(dev)]) * (ra->ra_disk.dk_label->d_secsize / DEV_BSIZE); } @@ -648,7 +648,7 @@ rxstrategy(bp) * Determine the size of the transfer, and make sure it is * within the boundaries of the partition. */ - if (bp->b_blkno >= rx->ra_disk.dk_label->d_secperunit) { + if (bp->b_blkno >= DL_GETDSIZE(rx->ra_disk.dk_label)) { bp->b_resid = bp->b_bcount; goto done; } @@ -828,10 +828,10 @@ rronline(usc, mp) rx->ra_state = DK_OPEN; dl = rx->ra_disk.dk_label; - dl->d_secperunit = (daddr_t)mp->mscp_onle.onle_unitsize; + DL_SETDSIZE(dl, (daddr_t)mp->mscp_onle.onle_unitsize); if (dl->d_secpercyl) { - dl->d_ncylinders = dl->d_secperunit/dl->d_secpercyl; + dl->d_ncylinders = DL_GETDSIZE(dl) / dl->d_secpercyl; dl->d_type = DTYPE_MSCP; dl->d_rpm = 3600; } else { @@ -870,9 +870,10 @@ rrmakelabel(dl, type) dl->d_typename[p++] = n + '0'; dl->d_typename[p] = 0; dl->d_npartitions = MAXPARTITIONS; - dl->d_partitions[0].p_size = dl->d_partitions[2].p_size = - dl->d_secperunit; - dl->d_partitions[0].p_offset = dl->d_partitions[2].p_offset = 0; + DL_SETPSIZE(&dl->d_partitions[0], DL_GETDSIZE(dl)); + DL_SETPSIZE(&dl->d_partitions[2], DL_GETDSIZE(dl)); + DL_SETPOFFSET(&dl->d_partitions[0], 0); + DL_SETPOFFSET(&dl->d_partitions[2], 0); dl->d_interleave = dl->d_headswitch = 1; dl->d_magic = dl->d_magic2 = DISKMAGIC; dl->d_checksum = dkcksum(dl); @@ -971,7 +972,7 @@ rrfillin(bp, mp) #endif lp = rx->ra_disk.dk_label; - mp->mscp_seq.seq_lbn = lp->d_partitions[part].p_offset + bp->b_blkno; + mp->mscp_seq.seq_lbn = DL_GETPOFFSET(&lp->d_partitions[part]) + bp->b_blkno; mp->mscp_unit = rx->ra_hwunit; mp->mscp_seq.seq_bytecount = bp->b_bcount; } diff --git a/sys/arch/vax/vax/disksubr.c b/sys/arch/vax/vax/disksubr.c index a4da2292245..3f62f6c26c3 100644 --- a/sys/arch/vax/vax/disksubr.c +++ b/sys/arch/vax/vax/disksubr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: disksubr.c,v 1.39 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disksubr.c,v 1.40 2007/06/05 00:38:19 deraadt Exp $ */ /* $NetBSD: disksubr.c,v 1.21 1999/06/30 18:48:06 ragge Exp $ */ /* @@ -60,9 +60,9 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, struct cpu_disklabel *osdep, int wlabel) { struct partition *p = lp->d_partitions + DISKPART(bp->b_dev); - int labelsector = lp->d_partitions[RAW_PART].p_offset; - int maxsz = p->p_size, - sz = (bp->b_bcount + DEV_BSIZE - 1) >> DEV_BSHIFT; + int labelsector = DL_GETPOFFSET(&lp->d_partitions[RAW_PART]); + int maxsz = DL_GETPSIZE(p); + int sz = (bp->b_bcount + DEV_BSIZE - 1) >> DEV_BSHIFT; /* avoid division by zero */ if (lp->d_secpercyl == 0) { @@ -71,7 +71,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* overwriting disk label ? */ - if (bp->b_blkno + p->p_offset <= LABELSECTOR + labelsector && + if (bp->b_blkno + DL_GETPOFFSET(p) <= LABELSECTOR + labelsector && (bp->b_flags & B_READ) == 0 && wlabel == 0) { bp->b_error = EROFS; goto bad; @@ -95,7 +95,7 @@ bounds_check_with_label(struct buf *bp, struct disklabel *lp, } /* calculate cylinder for disksort to order transfers with */ - bp->b_cylinder = (bp->b_blkno + p->p_offset) / lp->d_secpercyl; + bp->b_cylinder = (bp->b_blkno + DL_GETPOFFSET(p)) / lp->d_secpercyl; return (1); bad: @@ -127,20 +127,20 @@ readdisklabel(dev, strat, lp, osdep, spoofonly) /* minimal requirements for archetypal disk label */ if (lp->d_secsize < DEV_BSIZE) lp->d_secsize = DEV_BSIZE; - if (lp->d_secperunit == 0) - lp->d_secperunit = 0x1fffffff; + if (DL_GETDSIZE(lp) == 0) + DL_SETDSIZE(lp, MAXDISKSIZE); if (lp->d_secpercyl == 0) { msg = "invalid geometry"; goto done; } lp->d_npartitions = RAW_PART + 1; for (i = 0; i < RAW_PART; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - if (lp->d_partitions[i].p_size == 0) - lp->d_partitions[i].p_size = lp->d_secperunit; - lp->d_partitions[i].p_offset = 0; + if (DL_GETPSIZE(&lp->d_partitions[i]) == 0) + DL_SETPSIZE(&lp->d_partitions[i], DL_GETDSIZE(lp)); + DL_SETPOFFSET(&lp->d_partitions[i], 0); lp->d_bbsize = 8192; lp->d_sbsize = 64 * 1024; @@ -222,7 +222,8 @@ setdisklabel(olp, nlp, openmask, osdep) return (EBUSY); opp = &olp->d_partitions[i]; npp = &nlp->d_partitions[i]; - if (npp->p_offset != opp->p_offset || npp->p_size < opp->p_size) + if (DL_GETPOFFSET(npp) != DL_GETPOFFSET(opp) || + DL_GETPSIZE(npp) < DL_GETPSIZE(opp)) return (EBUSY); /* * Copy internally-set partition information diff --git a/sys/arch/vax/vsa/hdc9224.c b/sys/arch/vax/vsa/hdc9224.c index 692f059a240..0402691fdd9 100644 --- a/sys/arch/vax/vsa/hdc9224.c +++ b/sys/arch/vax/vsa/hdc9224.c @@ -1,4 +1,4 @@ -/* $OpenBSD: hdc9224.c,v 1.14 2007/02/15 00:53:26 krw Exp $ */ +/* $OpenBSD: hdc9224.c,v 1.15 2007/06/05 00:38:19 deraadt Exp $ */ /* $NetBSD: hdc9224.c,v 1.16 2001/07/26 15:05:09 wiz Exp $ */ /* * Copyright (c) 1996 Ludd, University of Lule}, Sweden. @@ -366,8 +366,8 @@ hdattach(struct device *parent, struct device *self, void *aux) msg = readdisklabel(MAKEDISKDEV(HDMAJOR, hd->sc_dev.dv_unit, RAW_PART), hdstrategy, dl, NULL, 0); printf("%s: %luMB, %lu sectors\n", - hd->sc_dev.dv_xname, dl->d_secperunit / (1048576 / DEV_BSIZE), - dl->d_secperunit); + hd->sc_dev.dv_xname, DL_GETDSIZE(dl) / (1048576 / DEV_BSIZE), + DL_GETDSIZE(dl)); if (msg) { /*printf("%s: %s\n", hd->sc_dev.dv_xname, msg);*/ } @@ -464,7 +464,7 @@ hdstrategy(struct buf *bp) * this also truncates the block number at 4G, but there shouldn't be * any MFM disk that large. */ - bn = bp->b_blkno + lp->d_partitions[DISKPART(bp->b_dev)].p_offset; + bn = bp->b_blkno + DL_GETPOFFSET(&lp->d_partitions[DISKPART(bp->b_dev)]); bp->b_cylinder = bn; s = splbio(); @@ -636,7 +636,7 @@ hdsize(dev_t dev) if (unit >= hd_cd.cd_ndevs || hd_cd.cd_devs[unit] == 0) return -1; hd = hd_cd.cd_devs[unit]; - size = hd->sc_disk.dk_label->d_partitions[DISKPART(dev)].p_size * + size = DL_GETPSIZE(&hd->sc_disk.dk_label->d_partitions[DISKPART(dev)]) * (hd->sc_disk.dk_label->d_secsize / DEV_BSIZE); return (size); @@ -866,16 +866,18 @@ hdmakelabel(struct disklabel *dl, struct hdgeom *g) dl->d_rpm = 3600; dl->d_secsize = DEV_BSIZE; - dl->d_secperunit = g->lbn_count; + DL_SETDSIZE(dl, g->lbn_count); dl->d_nsectors = g->nspt; dl->d_ntracks = g->ntracks; dl->d_secpercyl = dl->d_nsectors * dl->d_ntracks; - dl->d_ncylinders = dl->d_secperunit / dl->d_secpercyl; + dl->d_ncylinders = DL_GETDSIZE(dl) / dl->d_secpercyl; dl->d_npartitions = MAXPARTITIONS; - dl->d_partitions[0].p_size = dl->d_partitions[2].p_size = - dl->d_secperunit; - dl->d_partitions[0].p_offset = dl->d_partitions[2].p_offset = 0; + DL_SETPSIZE(&dl->d_partitions[0], DL_GETDSIZE(dl)); + DL_SETPSIZE(&dl->d_partitions[2], DL_GETDSIZE(dl)); + + DL_SETPOFFSET(&dl->d_partitions[0], 0); + DL_SETPOFFSET(&dl->d_partitions[2], 0); dl->d_interleave = dl->d_headswitch = 1; dl->d_magic = dl->d_magic2 = DISKMAGIC; dl->d_checksum = dkcksum(dl); diff --git a/sys/arch/zaurus/dev/zaurus_flash.c b/sys/arch/zaurus/dev/zaurus_flash.c index 8dc584a5f32..15b269a268e 100644 --- a/sys/arch/zaurus/dev/zaurus_flash.c +++ b/sys/arch/zaurus/dev/zaurus_flash.c @@ -1,4 +1,4 @@ -/* $OpenBSD: zaurus_flash.c,v 1.1 2006/11/25 14:31:59 uwe Exp $ */ +/* $OpenBSD: zaurus_flash.c,v 1.2 2007/06/05 00:38:20 deraadt Exp $ */ /* * Copyright (c) 2005 Uwe Stuehler <uwe@openbsd.org> @@ -351,30 +351,30 @@ zflash_default_disklabel(void *arg, dev_t dev, struct disklabel *lp, switch (sc->sc_flash.sc_flashdev->id) { case FLASH_DEVICE_SAMSUNG_K9F2808U0C: - lp->d_partitions[8].p_size = 7*1024*1024 / bsize; - lp->d_partitions[9].p_size = 5*1024*1024 / bsize; - lp->d_partitions[10].p_size = 4*1024*1024 / bsize; + DL_SETPSIZE(&lp->d_partitions[8], 7*1024*1024 / bsize); + DL_SETPSIZE(&lp->d_partitions[9], 5*1024*1024 / bsize); + DL_SETPSIZE(&lp->d_partitions[10], 4*1024*1024 / bsize); break; case FLASH_DEVICE_SAMSUNG_K9F1G08U0A: - lp->d_partitions[8].p_size = 7*1024*1024 / bsize; - lp->d_partitions[9].p_size = 32*1024*1024 / bsize; - lp->d_partitions[10].p_size = 89*1024*1024 / bsize; + DL_SETPSIZE(&lp->d_partitions[8], 7*1024*1024 / bsize); + DL_SETPSIZE(&lp->d_partitions[9], 32*1024*1024 / bsize); + DL_SETPSIZE(&lp->d_partitions[10], 89*1024*1024 / bsize); break; default: return; } /* The "smf" partition uses logical addressing. */ - lp->d_partitions[8].p_offset = 0; + DL_SETPOFFSET(&lp->d_partitions[8], 0); lp->d_partitions[8].p_fstype = FS_OTHER; /* The "root" partition uses physical addressing. */ - lp->d_partitions[9].p_offset = lp->d_partitions[8].p_size; + DL_SETPSIZE(&lp->d_partitions[9], DL_GETPSIZE(&lp->d_partitions[8])); lp->d_partitions[9].p_fstype = FS_OTHER; /* The "home" partition uses physical addressing. */ - lp->d_partitions[10].p_offset = lp->d_partitions[9].p_offset + - lp->d_partitions[9].p_size; + DL_SETPOFFSET(&lp->d_partitions[10], + DL_GETPOFFSET(&lp->d_partitions[9]) + DL_GETPSIZE(&lp->d_partitions[9])); lp->d_partitions[10].p_fstype = FS_OTHER; lp->d_npartitions = 11; @@ -621,7 +621,7 @@ zflash_safe_start(struct zflash_softc *sc, dev_t dev) /* Safe partitions must start on a flash block boundary. */ blksect = (sc->sc_flash.sc_flashdev->blkpages * sc->sc_flash.sc_flashdev->pagesize) / lp->d_secsize; - if (lp->d_partitions[part].p_offset % blksect) + if (DL_GETPOFFSET(&lp->d_partitions[part]) % blksect) return EIO; MALLOC(sp, struct zflash_safe *, sizeof(struct zflash_safe), @@ -632,7 +632,7 @@ zflash_safe_start(struct zflash_softc *sc, dev_t dev) bzero(sp, sizeof(struct zflash_safe)); sp->sp_dev = dev; - sp->sp_pblks = lp->d_partitions[part].p_size / blksect; + sp->sp_pblks = DL_GETPSIZE(&lp->d_partitions[part]) / blksect; sp->sp_lblks = sp->sp_pblks; /* Try to reserve a number of spare physical blocks. */ diff --git a/sys/compat/linux/linux_blkio.c b/sys/compat/linux/linux_blkio.c index 6d2eff284bc..74c7063379b 100644 --- a/sys/compat/linux/linux_blkio.c +++ b/sys/compat/linux/linux_blkio.c @@ -1,4 +1,4 @@ -/* $OpenBSD: linux_blkio.c,v 1.5 2002/03/14 01:26:50 millert Exp $ */ +/* $OpenBSD: linux_blkio.c,v 1.6 2007/06/05 00:38:20 deraadt Exp $ */ /* $NetBSD: linux_blkio.c,v 1.3 2001/01/18 17:48:04 tv Exp $ */ /* @@ -91,7 +91,7 @@ linux_ioctl_blkio(struct proc *p, struct linux_sys_ioctl_args *uap, size = label.d_nsectors * label.d_ntracks * label.d_ncylinders; } else - size = partp.part->p_size; + size = DL_GETPSIZE(partp.part); error = copyout(&size, SCARG(uap, data), sizeof size); break; case LINUX_BLKSECTGET: diff --git a/sys/compat/linux/linux_hdio.c b/sys/compat/linux/linux_hdio.c index 8e4704ccb40..4eb2edba747 100644 --- a/sys/compat/linux/linux_hdio.c +++ b/sys/compat/linux/linux_hdio.c @@ -1,4 +1,4 @@ -/* $OpenBSD: linux_hdio.c,v 1.5 2002/03/14 01:26:50 millert Exp $ */ +/* $OpenBSD: linux_hdio.c,v 1.6 2007/06/05 00:38:20 deraadt Exp $ */ /* $NetBSD: linux_hdio.c,v 1.1 2000/12/10 14:12:17 fvdl Exp $ */ /* @@ -130,7 +130,7 @@ linux_ioctl_hdio(struct proc *p, struct linux_sys_ioctl_args *uap, break; } labp = error != 0 ? &label : partp.disklab; - hdg.start = error1 != 0 ? partp.part->p_offset : 0; + hdg.start = error1 != 0 ? DL_GETPOFFSET(partp.part) & 0x7fffffff: 0; hdg.heads = labp->d_ntracks; hdg.cylinders = labp->d_ncylinders; hdg.sectors = labp->d_nsectors; @@ -148,7 +148,7 @@ linux_ioctl_hdio(struct proc *p, struct linux_sys_ioctl_args *uap, break; } labp = error != 0 ? &label : partp.disklab; - hdg_big.start = error1 != 0 ? partp.part->p_offset : 0; + hdg_big.start = error1 != 0 ? DL_GETPOFFSET(partp.part) & 0x7fffffff : 0; hdg_big.heads = labp->d_ntracks; hdg_big.cylinders = labp->d_ncylinders; hdg_big.sectors = labp->d_nsectors; diff --git a/sys/dev/ata/wd.c b/sys/dev/ata/wd.c index a9c23e1b1ba..d1aeeccabd2 100644 --- a/sys/dev/ata/wd.c +++ b/sys/dev/ata/wd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: wd.c,v 1.60 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: wd.c,v 1.61 2007/06/05 00:38:20 deraadt Exp $ */ /* $NetBSD: wd.c,v 1.193 1999/02/28 17:15:27 explorer Exp $ */ /* @@ -506,15 +506,10 @@ wdstart(void *arg) void __wdstart(struct wd_softc *wd, struct buf *bp) { - daddr_t p_offset; daddr_t nblks; - if (DISKPART(bp->b_dev) != RAW_PART) - p_offset = - wd->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)].p_offset; - else - p_offset = 0; - wd->sc_wdc_bio.blkno = bp->b_blkno + p_offset; + wd->sc_wdc_bio.blkno = bp->b_blkno + + DL_GETPOFFSET(&wd->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)]); wd->sc_wdc_bio.blkno /= (wd->sc_dk.dk_label->d_secsize / DEV_BSIZE); wd->sc_wdc_bio.blkdone =0; wd->sc_bp = bp; @@ -777,11 +772,11 @@ wdgetdefaultlabel(struct wd_softc *wd, struct disklabel *lp) bzero(lp, sizeof(struct disklabel)); lp->d_secsize = DEV_BSIZE; - lp->d_secperunit = wd->sc_capacity; + DL_SETDSIZE(lp, wd->sc_capacity); lp->d_ntracks = wd->sc_params.atap_heads; lp->d_nsectors = wd->sc_params.atap_sectors; lp->d_secpercyl = lp->d_ntracks * lp->d_nsectors; - lp->d_ncylinders = lp->d_secperunit / lp->d_secpercyl; + lp->d_ncylinders = DL_GETDSIZE(lp) / lp->d_secpercyl; if (wd->drvp->ata_vers == -1) { lp->d_type = DTYPE_ST506; strncpy(lp->d_typename, "ST506/MFM/RLL", sizeof lp->d_typename); @@ -978,7 +973,7 @@ wdsize(dev_t dev) goto exit; } - size = wd->sc_dk.dk_label->d_partitions[part].p_size * + size = DL_GETPSIZE(&wd->sc_dk.dk_label->d_partitions[part]) * (wd->sc_dk.dk_label->d_secsize / DEV_BSIZE); if (omask == 0 && wdclose(dev, 0, S_IFBLK, NULL) != 0) size = -1; @@ -1030,11 +1025,11 @@ wddump(dev_t dev, daddr_t blkno, caddr_t va, size_t size) blkno = blkno / (lp->d_secsize / DEV_BSIZE); /* Check transfer bounds against partition size. */ - if ((blkno < 0) || ((blkno + nblks) > lp->d_partitions[part].p_size)) + if ((blkno < 0) || ((blkno + nblks) > DL_GETPSIZE(&lp->d_partitions[part]))) return EINVAL; /* Offset block number to start of partition. */ - blkno += lp->d_partitions[part].p_offset; + blkno += DL_GETPOFFSET(&lp->d_partitions[part]); /* Recalibrate, if first dump transfer. */ if (wddumprecalibrated == 0) { diff --git a/sys/dev/ccd.c b/sys/dev/ccd.c index 7009bb00642..4f6e9b89c13 100644 --- a/sys/dev/ccd.c +++ b/sys/dev/ccd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ccd.c,v 1.73 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: ccd.c,v 1.74 2007/06/05 00:38:20 deraadt Exp $ */ /* $NetBSD: ccd.c,v 1.33 1996/05/05 04:21:14 thorpej Exp $ */ /*- @@ -355,7 +355,7 @@ ccdinit(struct ccddevice *ccd, char **cpaths, struct proc *p) maxsecsize = ((dpart.disklab->d_secsize > maxsecsize) ? dpart.disklab->d_secsize : maxsecsize); - size = dpart.part->p_size; + size = DL_GETPSIZE(dpart.part); } else { CCD_DPRINTF(CCDB_FOLLOW | CCDB_INIT, ("%s: %s: incorrect partition type\n", @@ -725,7 +725,7 @@ ccdstart(struct ccd_softc *cs, struct buf *bp) bn = bp->b_blkno; if (DISKPART(bp->b_dev) != RAW_PART) { pp = &cs->sc_dkdev.dk_label->d_partitions[DISKPART(bp->b_dev)]; - bn += pp->p_offset; + bn += DL_GETPOFFSET(pp); } /* @@ -1290,7 +1290,7 @@ ccdsize(dev_t dev) if (cs->sc_dkdev.dk_label->d_partitions[part].p_fstype != FS_SWAP) size = -1; else - size = cs->sc_dkdev.dk_label->d_partitions[part].p_size; + size = DL_GETPSIZE(&cs->sc_dkdev.dk_label->d_partitions[part]); if (ccdclose(dev, 0, S_IFBLK, curproc)) return (-1); @@ -1371,7 +1371,7 @@ ccdgetdisklabel(dev_t dev, struct ccd_softc *cs, struct disklabel *lp, bzero(lp, sizeof(*lp)); bzero(clp, sizeof(*clp)); - lp->d_secperunit = cs->sc_size; + DL_SETDSIZE(lp, cs->sc_size); lp->d_secsize = ccg->ccg_secsize; lp->d_nsectors = ccg->ccg_nsectors; lp->d_ntracks = ccg->ccg_ntracks; diff --git a/sys/dev/flash.c b/sys/dev/flash.c index 403091b9d48..c96562cb342 100644 --- a/sys/dev/flash.c +++ b/sys/dev/flash.c @@ -1,4 +1,4 @@ -/* $OpenBSD: flash.c,v 1.3 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: flash.c,v 1.4 2007/06/05 00:38:20 deraadt Exp $ */ /* * Copyright (c) 2005 Uwe Stuehler <uwe@openbsd.org> @@ -905,7 +905,7 @@ _flashstart(struct flash_softc *sc, struct buf *bp) part = flashpart(bp->b_dev); if (part != RAW_PART) - offset = sc->sc_dk.dk_label->d_partitions[part].p_offset; + offset = DL_GETPOFFSET(&sc->sc_dk.dk_label->d_partitions[part]); else offset = 0; @@ -991,7 +991,7 @@ flashgetdefaultlabel(dev_t dev, struct flash_softc *sc, lp->d_nsectors = sc->sc_flashdev->capacity / lp->d_ntracks / lp->d_ncylinders; lp->d_secpercyl = lp->d_ntracks * lp->d_nsectors; - lp->d_secperunit = lp->d_ncylinders * lp->d_secpercyl; + DL_SETDSIZE(lp, (daddr64_t)lp->d_ncylinders * lp->d_secpercyl); /* Fake hardware characteristics. */ lp->d_rpm = 3600; diff --git a/sys/dev/isa/fd.c b/sys/dev/isa/fd.c index 3d824ea5e26..2c45df9ed71 100644 --- a/sys/dev/isa/fd.c +++ b/sys/dev/isa/fd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: fd.c,v 1.63 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: fd.c,v 1.64 2007/06/05 00:38:21 deraadt Exp $ */ /* $NetBSD: fd.c,v 1.90 1996/05/12 23:12:03 mycroft Exp $ */ /*- @@ -982,7 +982,7 @@ fdioctl(dev, cmd, addr, flag, p) strncpy(lp->d_typename, "floppy disk", sizeof lp->d_typename); lp->d_type = DTYPE_FLOPPY; strncpy(lp->d_packname, "fictitious", sizeof lp->d_packname); - lp->d_secperunit = fd->sc_type->size; + DL_SETDSIZE(lp, fd->sc_type->size); lp->d_rpm = 300; lp->d_interleave = 1; diff --git a/sys/dev/isa/mcd.c b/sys/dev/isa/mcd.c index ec87e7cfc2e..07a51bc3fd9 100644 --- a/sys/dev/isa/mcd.c +++ b/sys/dev/isa/mcd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: mcd.c,v 1.44 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: mcd.c,v 1.45 2007/06/05 00:38:21 deraadt Exp $ */ /* $NetBSD: mcd.c,v 1.60 1998/01/14 12:14:41 drochner Exp $ */ /* @@ -579,7 +579,7 @@ loop: if (DISKPART(bp->b_dev) != RAW_PART) { struct partition *p; p = &sc->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)]; - sc->mbx.blkno += p->p_offset; + sc->mbx.blkno += DL_GETPOFFSET(p); } sc->mbx.nblk = bp->b_bcount / sc->blksize; sc->mbx.sz = sc->blksize; @@ -754,7 +754,7 @@ mcdgetdisklabel(dev, sc, lp, clp, spoofonly) strncpy(lp->d_typename, "Mitsumi CD-ROM", sizeof lp->d_typename); lp->d_type = DTYPE_SCSI; /* XXX */ strncpy(lp->d_packname, "fictitious", sizeof lp->d_packname); - lp->d_secperunit = sc->disksize; + DL_SETDSIZE(lp, sc->disksize); lp->d_rpm = 300; lp->d_interleave = 1; diff --git a/sys/dev/raidframe/rf_copyback.c b/sys/dev/raidframe/rf_copyback.c index 9b573cd9234..65b5f2ccf9c 100644 --- a/sys/dev/raidframe/rf_copyback.c +++ b/sys/dev/raidframe/rf_copyback.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rf_copyback.c,v 1.7 2002/12/16 07:01:03 tdeval Exp $ */ +/* $OpenBSD: rf_copyback.c,v 1.8 2007/06/05 00:38:22 deraadt Exp $ */ /* $NetBSD: rf_copyback.c,v 1.14 2000/03/07 02:59:50 oster Exp $ */ /* @@ -177,7 +177,7 @@ rf_CopybackReconstructedData(RF_Raid_t *raidPtr) } raidPtr->Disks[frow][fcol].blockSize = dpart.disklab->d_secsize; - raidPtr->Disks[frow][fcol].numBlocks = dpart.part->p_size - + raidPtr->Disks[frow][fcol].numBlocks = DL_GETPSIZE(dpart.part) - rf_protectedSectors; raidPtr->raid_cinfo[frow][fcol].ci_vp = vp; diff --git a/sys/dev/raidframe/rf_disks.c b/sys/dev/raidframe/rf_disks.c index 66afd87c22b..2a310d8c630 100644 --- a/sys/dev/raidframe/rf_disks.c +++ b/sys/dev/raidframe/rf_disks.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rf_disks.c,v 1.11 2006/10/13 00:30:08 cloder Exp $ */ +/* $OpenBSD: rf_disks.c,v 1.12 2007/06/05 00:38:22 deraadt Exp $ */ /* $NetBSD: rf_disks.c,v 1.31 2000/06/02 01:17:14 oster Exp $ */ /* @@ -685,8 +685,8 @@ rf_ConfigureDisk(RF_Raid_t *raidPtr, char *buf, RF_RaidDisk_t *diskPtr, } diskPtr->blockSize = dpart.disklab->d_secsize; - diskPtr->numBlocks = dpart.part->p_size - rf_protectedSectors; - diskPtr->partitionSize = dpart.part->p_size; + diskPtr->numBlocks = DL_GETPSIZE(dpart.part) - rf_protectedSectors; + diskPtr->partitionSize = DL_GETPSIZE(dpart.part); raidPtr->raid_cinfo[row][col].ci_vp = vp; raidPtr->raid_cinfo[row][col].ci_dev = va.va_rdev; diff --git a/sys/dev/raidframe/rf_openbsdkintf.c b/sys/dev/raidframe/rf_openbsdkintf.c index 5c3b1294ff9..7b2b4f2336d 100644 --- a/sys/dev/raidframe/rf_openbsdkintf.c +++ b/sys/dev/raidframe/rf_openbsdkintf.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rf_openbsdkintf.c,v 1.35 2007/04/28 12:32:13 krw Exp $ */ +/* $OpenBSD: rf_openbsdkintf.c,v 1.36 2007/06/05 00:38:22 deraadt Exp $ */ /* $NetBSD: rf_netbsdkintf.c,v 1.109 2001/07/27 03:30:07 oster Exp $ */ /*- @@ -600,7 +600,7 @@ raidsize(dev_t dev) if (lp->d_partitions[part].p_fstype != FS_SWAP) size = -1; else - size = lp->d_partitions[part].p_size * + size = DL_GETPSIZE(&lp->d_partitions[part]) * (lp->d_secsize / DEV_BSIZE); if (omask == 0 && raidclose(dev, 0, S_IFBLK, curproc)) @@ -1758,7 +1758,7 @@ raidstart(RF_Raid_t *raidPtr) blocknum = bp->b_blkno; if (DISKPART(bp->b_dev) != RAW_PART) { pp = &rs->sc_dkdev.dk_label->d_partitions[DISKPART(bp->b_dev)]; - blocknum += pp->p_offset; + blocknum += DL_GETPOFFSET(pp); } db1_printf(("Blocks: %d, %d\n", (int) bp->b_blkno, @@ -2096,7 +2096,7 @@ raidgetdefaultlabel(RF_Raid_t *raidPtr, struct raid_softc *rs, bzero(lp, sizeof(*lp)); /* Fabricate a label... */ - lp->d_secperunit = raidPtr->totalSectors; + DL_SETDSIZE(lp, raidPtr->totalSectors); lp->d_secsize = raidPtr->bytesPerSector; lp->d_nsectors = raidPtr->Layout.dataSectorsPerStripe; lp->d_ntracks = 4 * raidPtr->numCol; @@ -2111,8 +2111,8 @@ raidgetdefaultlabel(RF_Raid_t *raidPtr, struct raid_softc *rs, lp->d_interleave = 1; lp->d_flags = 0; - lp->d_partitions[RAW_PART].p_offset = 0; - lp->d_partitions[RAW_PART].p_size = raidPtr->totalSectors; + DL_SETPOFFSET(&lp->d_partitions[RAW_PART], 0); + DL_SETPSIZE(&lp->d_partitions[RAW_PART], raidPtr->totalSectors); lp->d_partitions[RAW_PART].p_fstype = FS_UNUSED; lp->d_npartitions = RAW_PART + 1; @@ -2165,15 +2165,15 @@ raidgetdisklabel(dev_t dev) * if that is found. */ #ifdef RAIDDEBUG - if (lp->d_secperunit != rs->sc_size) + if (DL_GETDSIZE(lp) != rs->sc_size) printf("WARNING: %s: " "total sector size in disklabel (%d) != " "the size of raid (%ld)\n", rs->sc_xname, - lp->d_secperunit, (long) rs->sc_size); + DL_GETDSIZE(lp), (long) rs->sc_size); #endif /* RAIDDEBUG */ for (i = 0; i < lp->d_npartitions; i++) { pp = &lp->d_partitions[i]; - if (pp->p_offset + pp->p_size > rs->sc_size) + if (DL_GETPOFFSET(pp) + DL_GETPSIZE(pp) > rs->sc_size) printf("WARNING: %s: end of partition `%c' " "exceeds the size of raid (%ld)\n", rs->sc_xname, 'a' + i, (long) rs->sc_size); @@ -2844,11 +2844,11 @@ rf_find_raid_components(void) /* Got the label. Does it look reasonable ? */ if (rf_reasonable_label(clabel) && (clabel->partitionSize <= - label.d_partitions[i].p_size)) { + DL_GETPSIZE(&label.d_partitions[i]))) { #ifdef RAIDDEBUG printf("Component on: %s%c: %d\n", dv->dv_xname, 'a'+i, - label.d_partitions[i].p_size); + DL_GETPSIZE(&label.d_partitions[i])); rf_print_component_label(clabel); #endif /* RAIDDEBUG */ /* diff --git a/sys/dev/raidframe/rf_reconstruct.c b/sys/dev/raidframe/rf_reconstruct.c index abe9a072f54..43896e524da 100644 --- a/sys/dev/raidframe/rf_reconstruct.c +++ b/sys/dev/raidframe/rf_reconstruct.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rf_reconstruct.c,v 1.15 2003/10/26 15:07:26 jmc Exp $ */ +/* $OpenBSD: rf_reconstruct.c,v 1.16 2007/06/05 00:38:22 deraadt Exp $ */ /* $NetBSD: rf_reconstruct.c,v 1.26 2000/06/04 02:05:13 oster Exp $ */ /* @@ -623,7 +623,7 @@ rf_ReconstructInPlace(RF_Raid_t *raidPtr, RF_RowCol_t row, RF_RowCol_t col) dpart.disklab->d_secsize; raidPtr->Disks[row][col].numBlocks = - dpart.part->p_size - rf_protectedSectors; + DL_GETPSIZE(dpart.part) - rf_protectedSectors; raidPtr->raid_cinfo[row][col].ci_vp = vp; raidPtr->raid_cinfo[row][col].ci_dev = va.va_rdev; diff --git a/sys/dev/ramdisk.c b/sys/dev/ramdisk.c index 6bd7a5da072..f5fcc1d70b5 100644 --- a/sys/dev/ramdisk.c +++ b/sys/dev/ramdisk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ramdisk.c,v 1.31 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: ramdisk.c,v 1.32 2007/06/05 00:38:20 deraadt Exp $ */ /* $NetBSD: ramdisk.c,v 1.8 1996/04/12 08:30:09 leo Exp $ */ /* @@ -240,7 +240,7 @@ rdsize(dev_t dev) if (part >= sc->sc_dkdev.dk_label->d_npartitions) return 0; else - return sc->sc_dkdev.dk_label->d_partitions[part].p_size * + return DL_GETPSIZE(&sc->sc_dkdev.dk_label->d_partitions[part]) * (sc->sc_dkdev.dk_label->d_secsize / DEV_BSIZE); } @@ -492,7 +492,7 @@ rdgetdisklabel(dev_t dev, struct rd_softc *sc) strncpy(lp->d_typename, "RAM disk", sizeof(lp->d_typename)); lp->d_type = DTYPE_SCSI; strncpy(lp->d_packname, "fictitious", sizeof(lp->d_packname)); - lp->d_secperunit = lp->d_nsectors; + DL_SETDSIZE(lp, lp->d_nsectors); lp->d_rpm = 3600; lp->d_interleave = 1; diff --git a/sys/dev/softraid.c b/sys/dev/softraid.c index 5e81ac92fca..25ae3a7c5a1 100644 --- a/sys/dev/softraid.c +++ b/sys/dev/softraid.c @@ -1,4 +1,4 @@ -/* $OpenBSD: softraid.c,v 1.77 2007/06/04 04:53:31 marco Exp $ */ +/* $OpenBSD: softraid.c,v 1.78 2007/06/05 00:38:20 deraadt Exp $ */ /* * Copyright (c) 2007 Marco Peereboom <marco@peereboom.us> * @@ -1073,7 +1073,7 @@ sr_open_chunks(struct sr_softc *sc, struct sr_chunk_head *cl, dev_t *dt, } /* get partition size */ - ch_entry->src_size = size = label.d_partitions[part].p_size - + ch_entry->src_size = size = DL_GETPSIZE(&label.d_partitions[part]) - SR_META_SIZE - SR_META_OFFSET; if (size <= 0) { printf("%s: %s partition too small\n", diff --git a/sys/dev/vnd.c b/sys/dev/vnd.c index 7225fc3db97..15777a7df78 100644 --- a/sys/dev/vnd.c +++ b/sys/dev/vnd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: vnd.c,v 1.75 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: vnd.c,v 1.76 2007/06/05 00:38:20 deraadt Exp $ */ /* $NetBSD: vnd.c,v 1.26 1996/03/30 23:06:11 christos Exp $ */ /* @@ -309,7 +309,7 @@ vndgetdisklabel(dev_t dev, struct vnd_softc *sc) strncpy(lp->d_typename, "vnd device", sizeof(lp->d_typename)); lp->d_type = DTYPE_VND; strncpy(lp->d_packname, "fictitious", sizeof(lp->d_packname)); - lp->d_secperunit = sc->sc_size; + DL_SETDSIZE(lp, sc->sc_size); lp->d_rpm = 3600; lp->d_interleave = 1; lp->d_flags = 0; @@ -437,7 +437,7 @@ vndstrategy(struct buf *bp) /* Loop until all queued requests are handled. */ for (;;) { int part = DISKPART(bp->b_dev); - int off = vnd->sc_dk.dk_label->d_partitions[part].p_offset; + int off = DL_GETPOFFSET(&vnd->sc_dk.dk_label->d_partitions[part]); aiov.iov_base = bp->b_data; auio.uio_resid = aiov.iov_len = bp->b_bcount; @@ -496,7 +496,7 @@ vndstrategy(struct buf *bp) } /* The old-style buffercache bypassing method. */ - bn += vnd->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)].p_offset; + bn += DL_GETPOFFSET(&vnd->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)]); bn = dbtob(bn); bsize = vnd->sc_vp->v_mount->mnt_stat.f_iosize; addr = bp->b_data; diff --git a/sys/isofs/cd9660/cd9660_vfsops.c b/sys/isofs/cd9660/cd9660_vfsops.c index 4a322f89877..3ae09a46f71 100644 --- a/sys/isofs/cd9660/cd9660_vfsops.c +++ b/sys/isofs/cd9660/cd9660_vfsops.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd9660_vfsops.c,v 1.44 2007/03/25 10:20:50 pedro Exp $ */ +/* $OpenBSD: cd9660_vfsops.c,v 1.45 2007/06/05 00:38:22 deraadt Exp $ */ /* $NetBSD: cd9660_vfsops.c,v 1.26 1997/06/13 15:38:58 pk Exp $ */ /*- @@ -513,14 +513,14 @@ iso_disklabelspoof(dev, strat, lp) strncpy(lp->d_typename, pri->volume_id, sizeof lp->d_typename); strncpy(lp->d_packname, pri->volume_id+16, sizeof lp->d_packname); for (i = 0; i < MAXPARTITIONS; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } - lp->d_partitions[0].p_offset = 0; - lp->d_partitions[0].p_size = lp->d_secperunit; + DL_SETPOFFSET(&lp->d_partitions[0], 0); + DL_SETPSIZE(&lp->d_partitions[0], DL_GETDSIZE(lp)); lp->d_partitions[0].p_fstype = FS_ISO9660; - lp->d_partitions[RAW_PART].p_offset = 0; - lp->d_partitions[RAW_PART].p_size = lp->d_secperunit; + DL_SETPOFFSET(&lp->d_partitions[RAW_PART], 0); + DL_SETPSIZE(&lp->d_partitions[RAW_PART], DL_GETDSIZE(lp)); lp->d_partitions[RAW_PART].p_fstype = FS_ISO9660; lp->d_npartitions = RAW_PART + 1; lp->d_bbsize = 8192; /* fake */ diff --git a/sys/isofs/udf/udf_subr.c b/sys/isofs/udf/udf_subr.c index 4943c8a0745..531c9697b1d 100644 --- a/sys/isofs/udf/udf_subr.c +++ b/sys/isofs/udf/udf_subr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: udf_subr.c,v 1.11 2006/07/11 22:02:08 pedro Exp $ */ +/* $OpenBSD: udf_subr.c,v 1.12 2007/06/05 00:38:22 deraadt Exp $ */ /* * Copyright (c) 2006, Miodrag Vallat @@ -155,16 +155,16 @@ udf_disklabelspoof(dev_t dev, void (*strat)(struct buf *), strlcpy(lp->d_typename, vid, sizeof(lp->d_typename)); for (i = 0; i < MAXPARTITIONS; i++) { - lp->d_partitions[i].p_size = 0; - lp->d_partitions[i].p_offset = 0; + DL_SETPSIZE(&lp->d_partitions[i], 0); + DL_SETPOFFSET(&lp->d_partitions[i], 0); } /* * Fake two partitions, 'a' and 'c'. */ - lp->d_partitions[0].p_size = lp->d_secperunit; + DL_SETPSIZE(&lp->d_partitions[0], DL_GETDSIZE(lp)); lp->d_partitions[0].p_fstype = FS_UDF; - lp->d_partitions[RAW_PART].p_size = lp->d_secperunit; + DL_SETPSIZE(&lp->d_partitions[RAW_PART], DL_GETDSIZE(lp)); lp->d_partitions[RAW_PART].p_fstype = FS_UDF; lp->d_npartitions = RAW_PART + 1; diff --git a/sys/kern/subr_disk.c b/sys/kern/subr_disk.c index 86b0da97669..1450de42c02 100644 --- a/sys/kern/subr_disk.c +++ b/sys/kern/subr_disk.c @@ -1,4 +1,4 @@ -/* $OpenBSD: subr_disk.c,v 1.46 2007/06/04 22:07:59 deraadt Exp $ */ +/* $OpenBSD: subr_disk.c,v 1.47 2007/06/05 00:38:23 deraadt Exp $ */ /* $NetBSD: subr_disk.c,v 1.17 1996/03/16 23:17:08 christos Exp $ */ /* @@ -206,20 +206,23 @@ disklabeltokernlabel(struct disklabel *lp) pp->p_sizeh = 0; } - /* In a V1 label no partition extends past DL_SIZE(lp) - 1. */ - if (DL_POFFSET(pp) >= DL_DSIZE(lp)) { + /* In a V1 label no partition extends past DL_GETSIZE(lp) - 1. */ + if (DL_GETPOFFSET(pp) > DL_GETDSIZE(lp)) { pp->p_fstype = FS_UNUSED; - pp->p_offset = pp->p_offseth = 0; - pp->p_size = pp->p_sizeh = 0; -#ifdef notyet /* older broken sparc/sparc64 fake cyl-based disklabels fool this */ - } else if ((DL_POFFSET(pp) + DL_PSIZE(pp)) > DL_DSIZE(lp)) { + DL_SETPSIZE(pp, 0); + DL_SETPOFFSET(pp, 0); +#ifdef notyet /* older broken sparc/sparc64 fake cyl-based disklabels fool this */ + } else if (DL_GETPOFFSET(pp) + DL_GETPSIZE(pp) > DL_GETDSIZE(lp)) { daddr64_t sz; + printf("%lld %lld %lld\n", + DL_GETPOFFSET(pp), DL_GETPSIZE(pp), + DL_GETPOFFSET(pp) + DL_GETPSIZE(pp), + DL_GETDSIZE(lp)); pp->p_fstype = FS_UNUSED; - sz = DL_DSIZE(lp) - DL_POFFSET(pp); - pp->p_size = sz & 0xffffffff; - pp->p_sizeh = (sz >> 32) & 0xffff; -#endif /* notyet */ + sz = DL_GETDSIZE(lp) - DL_GETPOFFSET(pp); + DL_SETPSIZE(pp, sz); +#endif } } } @@ -267,7 +270,7 @@ diskerr(struct buf *bp, char *dname, char *what, int pri, int blkdone, bp->b_blkno + (bp->b_bcount - 1) / DEV_BSIZE); } if (lp && (blkdone >= 0 || bp->b_bcount <= lp->d_secsize)) { - sn += lp->d_partitions[part].p_offset; + sn += DL_GETPOFFSET(&lp->d_partitions[part]); (*pr)(" (%s%d bn %d; cn %d", dname, unit, sn, sn / lp->d_secpercyl); sn %= lp->d_secpercyl; @@ -452,7 +455,7 @@ dk_mountroot(void) (void) (cdevsw[major(rrootdev)].d_close)(rawdev, FREAD, S_IFCHR, curproc); - if (dl.d_partitions[part].p_size == 0) + if (DL_GETPSIZE(&dl.d_partitions[part]) == 0) panic("root filesystem has size 0"); switch (dl.d_partitions[part].p_fstype) { #ifdef EXT2FS diff --git a/sys/scsi/cd.c b/sys/scsi/cd.c index 78efcbf8514..0eeffff87f2 100644 --- a/sys/scsi/cd.c +++ b/sys/scsi/cd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: cd.c,v 1.126 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: cd.c,v 1.127 2007/06/05 00:38:23 deraadt Exp $ */ /* $NetBSD: cd.c,v 1.100 1997/04/02 02:29:30 mycroft Exp $ */ /* @@ -603,7 +603,7 @@ cdstart(void *v) bp->b_blkno / (cd->sc_dk.dk_label->d_secsize / DEV_BSIZE); if (DISKPART(bp->b_dev) != RAW_PART) { p = &cd->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)]; - blkno += p->p_offset; + blkno += DL_GETPOFFSET(p); } nblks = howmany(bp->b_bcount, cd->sc_dk.dk_label->d_secsize); @@ -1179,7 +1179,7 @@ cdgetdisklabel(dev_t dev, struct cd_softc *cd, struct disklabel *lp, } strncpy(lp->d_packname, "fictitious", sizeof(lp->d_packname)); - lp->d_secperunit = cd->params.disksize; + DL_SETDSIZE(lp, cd->params.disksize); lp->d_rpm = 300; lp->d_interleave = 1; diff --git a/sys/scsi/sd.c b/sys/scsi/sd.c index b6127a40ba4..d7cb2e9f19e 100644 --- a/sys/scsi/sd.c +++ b/sys/scsi/sd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sd.c,v 1.129 2007/06/01 00:07:48 krw Exp $ */ +/* $OpenBSD: sd.c,v 1.130 2007/06/05 00:38:23 deraadt Exp $ */ /* $NetBSD: sd.c,v 1.111 1997/04/02 02:29:41 mycroft Exp $ */ /*- @@ -650,7 +650,7 @@ sdstart(void *v) bp->b_blkno / (sd->sc_dk.dk_label->d_secsize / DEV_BSIZE); if (DISKPART(bp->b_dev) != RAW_PART) { p = &sd->sc_dk.dk_label->d_partitions[DISKPART(bp->b_dev)]; - blkno += p->p_offset; + blkno += DL_GETPOFFSET(p); } nblks = howmany(bp->b_bcount, sd->sc_dk.dk_label->d_secsize); @@ -1030,7 +1030,7 @@ sdgetdisklabel(dev_t dev, struct sd_softc *sd, struct disklabel *lp, */ bcopy(packname, lp->d_packname, len); - lp->d_secperunit = sd->params.disksize; + DL_SETDSIZE(lp, sd->params.disksize); lp->d_rpm = sd->params.rot_rate; lp->d_interleave = 1; lp->d_flags = 0; @@ -1161,7 +1161,7 @@ sdsize(dev_t dev) else if (sd->sc_dk.dk_label->d_partitions[part].p_fstype != FS_SWAP) size = -1; else - size = sd->sc_dk.dk_label->d_partitions[part].p_size * + size = DL_GETPSIZE(&sd->sc_dk.dk_label->d_partitions[part]) * (sd->sc_dk.dk_label->d_secsize / DEV_BSIZE); if (omask == 0 && sdclose(dev, 0, S_IFBLK, NULL) != 0) size = -1; @@ -1227,8 +1227,8 @@ sddump(dev_t dev, daddr_t blkno, caddr_t va, size_t size) totwrt = size / sectorsize; blkno = dbtob(blkno) / sectorsize; /* blkno in DEV_BSIZE units */ - nsects = lp->d_partitions[part].p_size; - sectoff = lp->d_partitions[part].p_offset; + nsects = DL_GETPSIZE(&lp->d_partitions[part]); + sectoff = DL_GETPOFFSET(&lp->d_partitions[part]); /* Check transfer bounds against partition size. */ if ((blkno < 0) || ((blkno + totwrt) > nsects)) diff --git a/sys/sys/disklabel.h b/sys/sys/disklabel.h index b4359607a22..acf54d87283 100644 --- a/sys/sys/disklabel.h +++ b/sys/sys/disklabel.h @@ -1,4 +1,4 @@ -/* $OpenBSD: disklabel.h,v 1.34 2007/06/02 02:35:27 krw Exp $ */ +/* $OpenBSD: disklabel.h,v 1.35 2007/06/05 00:38:24 deraadt Exp $ */ /* $NetBSD: disklabel.h,v 1.41 1996/05/10 23:07:37 mark Exp $ */ /* @@ -71,6 +71,8 @@ #define DISKMAGIC ((u_int32_t)0x82564557) /* The disk magic number */ +#define MAXDISKSIZE 0x1fffffffffffLL /* 47 bits of reach */ + #ifndef _LOCORE struct disklabel { u_int32_t d_magic; /* the magic number */ @@ -203,10 +205,26 @@ struct __partitionv0 { /* the partition table */ #define DISKLABELV1_FFS_FSIZE(i) ((i) == 0 ? 0 : \ (DISKLABELV1_FFS_BSIZE(i) / DISKLABELV1_FFS_FRAG(i))) -#define DL_PSIZE(p) (((u_int64_t)(p)->p_sizeh << 32) + (p)->p_size) -#define DL_POFFSET(p) (((u_int64_t)(p)->p_offseth << 32) + (p)->p_offset) -#define DL_DSIZE(d) (((u_int64_t)(d)->d_secperunith << 32) + (d)->d_secperunit) - +#define DL_GETPSIZE(p) (((u_int64_t)(p)->p_sizeh << 32) + (p)->p_size) +#define DL_GETPOFFSET(p) (((u_int64_t)(p)->p_offseth << 32) + (p)->p_offset) +#define DL_GETDSIZE(d) (((u_int64_t)(d)->d_secperunith << 32) + \ + (d)->d_secperunit) + +#define DL_SETPSIZE(p, n) do { \ + daddr64_t x = (n); \ + (p)->p_sizeh = x >> 32; \ + (p)->p_size = x; \ + } while (0) +#define DL_SETPOFFSET(p, n) do { \ + daddr64_t x = (n); \ + (p)->p_offseth = x >> 32; \ + (p)->p_offset = x; \ + } while (0) +#define DL_SETDSIZE(d, n) do { \ + daddr64_t x = (n); \ + (d)->d_secperunith = x >> 32; \ + (d)->d_secperunit = x; \ + } while (0) /* d_type values: */ #define DTYPE_SMD 1 /* SMD, XSMD; VAX hp/up */ diff --git a/sys/uvm/uvm_vnode.c b/sys/uvm/uvm_vnode.c index 95b20053000..dd4762b700d 100644 --- a/sys/uvm/uvm_vnode.c +++ b/sys/uvm/uvm_vnode.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uvm_vnode.c,v 1.48 2007/05/29 21:06:34 thib Exp $ */ +/* $OpenBSD: uvm_vnode.c,v 1.49 2007/06/05 00:38:24 deraadt Exp $ */ /* $NetBSD: uvm_vnode.c,v 1.36 2000/11/24 20:34:01 chs Exp $ */ /* @@ -250,7 +250,7 @@ uvn_attach(arg, accessprot) if (result == 0) { /* XXX should remember blocksize */ used_vnode_size = (u_quad_t)pi.disklab->d_secsize * - (u_quad_t)pi.part->p_size; + (u_quad_t)DL_GETPSIZE(pi.part); } } else { result = VOP_GETATTR(vp, &vattr, curproc->p_ucred, curproc); |