Date: Fri, 9 Mar 2012 00:28:29 +0000 (UTC) From: Jung-uk Kim <jkim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r232710 - in projects/bigbb: sbin/bsdlabel sbin/newfs sys/geom sys/geom/part sys/sys usr.sbin/makefs/ffs Message-ID: <201203090028.q290ST6w071741@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jkim Date: Fri Mar 9 00:28:28 2012 New Revision: 232710 URL: http://svn.freebsd.org/changeset/base/232710 Log: Increase BBSIZE to 16KB and add compat shims. Modified: projects/bigbb/sbin/bsdlabel/bsdlabel.c projects/bigbb/sbin/newfs/newfs.c projects/bigbb/sys/geom/geom_bsd.c projects/bigbb/sys/geom/geom_pc98.c projects/bigbb/sys/geom/part/g_part_bsd.c projects/bigbb/sys/sys/disklabel.h projects/bigbb/sys/sys/diskpc98.h projects/bigbb/usr.sbin/makefs/ffs/mkfs.c Modified: projects/bigbb/sbin/bsdlabel/bsdlabel.c ============================================================================== --- projects/bigbb/sbin/bsdlabel/bsdlabel.c Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sbin/bsdlabel/bsdlabel.c Fri Mar 9 00:28:28 2012 (r232710) @@ -163,16 +163,12 @@ main(int argc, char *argv[]) is_file=1; break; case 'm': - if (!strcmp(optarg, "i386") || - !strcmp(optarg, "amd64") || - !strcmp(optarg, "ia64") || - !strcmp(optarg, "pc98")) { - labelsoffset = 1; - labeloffset = 0; - bbsize = 8192; - } else { + if (strcmp(optarg, "amd64") != 0 && + strcmp(optarg, "i386") != 0 && + strcmp(optarg, "pc98") != 0) errx(1, "Unsupported architecture"); - } + labelsoffset = 1; + labeloffset = 0; break; case 'n': disable_write = 1; @@ -311,7 +307,7 @@ fixlabel(struct disklabel *lp) } dp = &lp->d_partitions[0]; - dp->p_offset = BBSIZE / secsize; + dp->p_offset = lp->d_bbsize / secsize; dp->p_size = lp->d_secperunit - dp->p_offset; } @@ -447,7 +443,7 @@ writelabel(void) gctl_ro_param(grq, "verb", -1, "write bootcode"); gctl_ro_param(grq, "class", -1, "BSD"); gctl_ro_param(grq, "geom", -1, pname); - gctl_ro_param(grq, "bootcode", BBSIZE, bootarea); + gctl_ro_param(grq, "bootcode", lab.d_bbsize, bootarea); errstr = gctl_issue(grq); if (errstr != NULL) { warnx("%s", errstr); @@ -457,7 +453,7 @@ writelabel(void) gctl_free(grq); } } else { - if (write(fd, bootarea, bbsize) != bbsize) { + if (write(fd, bootarea, lab.d_bbsize) != lab.d_bbsize) { warn("write %s", specname); close (fd); return (1); @@ -508,11 +504,11 @@ readlabel(int flag) errx(1, "disks with more than 2^32-1 sectors are not supported"); (void)lseek(f, (off_t)0, SEEK_SET); - nbytes = read(f, bootarea, BBSIZE); + nbytes = read(f, bootarea, bbsize); if (nbytes == -1) err(4, "%s read", specname); - if (nbytes != BBSIZE) - errx(4, "couldn't read %d bytes from %s", BBSIZE, specname); + if (nbytes != bbsize) + errx(4, "couldn't read %d bytes from %s", bbsize, specname); close (f); error = bsd_disklabel_le_dec( bootarea + (labeloffset + labelsoffset * secsize), @@ -778,7 +774,7 @@ getasciilabel(FILE *f, struct disklabel bzero(&part_set, sizeof(part_set)); bzero(&part_size_type, sizeof(part_size_type)); bzero(&part_offset_type, sizeof(part_offset_type)); - lp->d_bbsize = BBSIZE; /* XXX */ + lp->d_bbsize = bbsize; /* XXX */ lp->d_sbsize = 0; /* XXX */ while (fgets(line, sizeof(line) - 1, f)) { lineno++; @@ -1275,7 +1271,7 @@ checklabel(struct disklabel *lp) } /* Find out the total free space, excluding the boot block area. */ - base_offset = BBSIZE / secsize; + base_offset = lp->d_bbsize / secsize; free_space = 0; for (i = 0; i < lp->d_npartitions; i++) { pp = &lp->d_partitions[i]; @@ -1325,7 +1321,7 @@ checklabel(struct disklabel *lp) * the hog partition and how much space they need. */ needed = 0; - base_offset = BBSIZE / secsize; + base_offset = lp->d_bbsize / secsize; for (i = hog_part - 1; i >= 0; i--) { pp = &lp->d_partitions[i]; if (!part_set[i] || i == RAW_PART) @@ -1365,7 +1361,7 @@ checklabel(struct disklabel *lp) } /* Now set the offsets for each partition */ - current_offset = BBSIZE / secsize; /* in sectors */ + current_offset = lp->d_bbsize / secsize; /* in sectors */ seen_default_offset = 0; for (i = 0; i < lp->d_npartitions; i++) { part = 'a' + i; @@ -1535,7 +1531,7 @@ getvirginlabel(void) /* Various (unneeded) compat stuff */ loclab.d_rpm = 3600; - loclab.d_bbsize = BBSIZE; + loclab.d_bbsize = bbsize; loclab.d_interleave = 1; strncpy(loclab.d_typename, "amnesiac", sizeof(loclab.d_typename)); Modified: projects/bigbb/sbin/newfs/newfs.c ============================================================================== --- projects/bigbb/sbin/newfs/newfs.c Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sbin/newfs/newfs.c Fri Mar 9 00:28:28 2012 (r232710) @@ -465,7 +465,7 @@ rewritelabel(char *s, struct disklabel * bsd_disklabel_le_enc(bootarea + 0 /* labeloffset */ + 1 /* labelsoffset */ * sectorsize, lp); lseek(disk.d_fd, 0, SEEK_SET); - if (write(disk.d_fd, bootarea, BBSIZE) != BBSIZE) + if (write(disk.d_fd, bootarea, lp->d_bbsize) != lp->d_bbsize) errx(1, "cannot write label"); return; } Modified: projects/bigbb/sys/geom/geom_bsd.c ============================================================================== --- projects/bigbb/sys/geom/geom_bsd.c Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sys/geom/geom_bsd.c Fri Mar 9 00:28:28 2012 (r232710) @@ -332,8 +332,10 @@ g_bsd_ioctl(struct g_provider *pp, u_lon struct g_bsd_softc *ms; struct g_slicer *gsp; u_char *label; + size_t bbsize; int error; + bbsize = BBSIZE; gp = pp->geom; gsp = gp->softc; ms = gsp->softc; @@ -343,6 +345,11 @@ g_bsd_ioctl(struct g_provider *pp, u_lon /* Return a copy of the disklabel to userland. */ bsd_disklabel_le_dec(ms->label, data, MAXPARTITIONS); return(0); +#ifndef BURN_BRIDGES + case 0x8008646e: + bbsize = 8192; + /* FALLTHROUGH */ +#endif case DIOCBSDBB: { struct g_consumer *cp; u_char *buf; @@ -355,7 +362,7 @@ g_bsd_ioctl(struct g_provider *pp, u_lon /* The disklabel to set is the ioctl argument. */ buf = g_malloc(BBSIZE, M_WAITOK); p = *(void **)data; - error = copyin(p, buf, BBSIZE); + error = copyin(p, buf, bbsize); if (!error) { /* XXX: Rude, but supposedly safe */ DROP_GIANT(); @@ -370,7 +377,7 @@ g_bsd_ioctl(struct g_provider *pp, u_lon sum += le64dec(buf + i * 8); le64enc(buf + 504, sum); } - error = g_write_data(cp, 0, buf, BBSIZE); + error = g_write_data(cp, 0, buf, bbsize); } g_topology_unlock(); PICKUP_GIANT(); Modified: projects/bigbb/sys/geom/geom_pc98.c ============================================================================== --- projects/bigbb/sys/geom/geom_pc98.c Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sys/geom/geom_pc98.c Fri Mar 9 00:28:28 2012 (r232710) @@ -57,7 +57,7 @@ FEATURE(geom_pc98, "GEOM NEC PC9800 part struct g_pc98_softc { u_int fwsectors, fwheads, sectorsize; int type[NDOSPART]; - u_char sec[8192]; + u_char sec[16384]; }; static void @@ -164,8 +164,10 @@ g_pc98_ioctl(struct g_provider *pp, u_lo struct g_pc98_softc *ms; struct g_slicer *gsp; struct g_consumer *cp; + size_t bbsize; int error, opened; + bbsize = 16384; gp = pp->geom; gsp = gp->softc; ms = gsp->softc; @@ -173,6 +175,11 @@ g_pc98_ioctl(struct g_provider *pp, u_lo opened = 0; error = 0; switch(cmd) { +#ifndef BURN_BRIDGES + case 0x80004d81: + bbsize = 8192; + /* FALLTHROUGH */ +#endif case DIOCSPC98: { if (!(fflag & FWRITE)) return (EPERM); @@ -185,9 +192,9 @@ g_pc98_ioctl(struct g_provider *pp, u_lo opened = 1; } if (!error) - error = g_pc98_modify(gp, ms, data, 8192); + error = g_pc98_modify(gp, ms, data, bbsize); if (!error) - error = g_write_data(cp, 0, data, 8192); + error = g_write_data(cp, 0, data, bbsize); if (opened) g_access(cp, 0, -1 , 0); g_topology_unlock(); @@ -293,14 +300,14 @@ g_pc98_taste(struct g_class *mp, struct sectorsize = cp->provider->sectorsize; if (sectorsize % 512 != 0) break; - buf = g_read_data(cp, 0, 8192, NULL); + buf = g_read_data(cp, 0, 16384, NULL); if (buf == NULL) break; ms->fwsectors = fwsectors; ms->fwheads = fwheads; ms->sectorsize = sectorsize; g_topology_lock(); - g_pc98_modify(gp, ms, buf, 8192); + g_pc98_modify(gp, ms, buf, 16384); g_topology_unlock(); g_free(buf); break; @@ -338,7 +345,11 @@ g_pc98_config(struct gctl_req *req, stru data = gctl_get_param(req, "data", &len); if (data == NULL) return; +#ifndef BURN_BRIDGES if (len < 8192 || (len % 512)) { +#else + if (len < 16384 || (len % 512)) { +#endif gctl_error(req, "Wrong request length"); return; } Modified: projects/bigbb/sys/geom/part/g_part_bsd.c ============================================================================== --- projects/bigbb/sys/geom/part/g_part_bsd.c Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sys/geom/part/g_part_bsd.c Fri Mar 9 00:28:28 2012 (r232710) @@ -176,7 +176,12 @@ g_part_bsd_bootcode(struct g_part_table struct g_part_bsd_table *table; const u_char *codeptr; +#ifndef BURN_BRIDGES + if (gpp->gpp_codesize != BOOT1_SIZE && gpp->gpp_codesize != BBSIZE + gpp->gpp_codesize != 8192) +#else if (gpp->gpp_codesize != BOOT1_SIZE && gpp->gpp_codesize != BBSIZE) +#endif return (ENODEV); table = (struct g_part_bsd_table *)basetable; @@ -185,6 +190,11 @@ g_part_bsd_bootcode(struct g_part_table if (gpp->gpp_codesize == BBSIZE) bcopy(codeptr + BOOT2_OFF, table->bbarea + BOOT2_OFF, BOOT2_SIZE); +#ifndef BURN_BRIDGES + elif (gpp->gpp_codesize == 8192) + bcopy(codeptr + BOOT2_OFF, table->bbarea + BOOT2_OFF, + 8192 - BOOT2_OFF); +#endif return (0); } Modified: projects/bigbb/sys/sys/disklabel.h ============================================================================== --- projects/bigbb/sys/sys/disklabel.h Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sys/sys/disklabel.h Fri Mar 9 00:28:28 2012 (r232710) @@ -63,7 +63,7 @@ #endif /* Size of bootblock area in sector-size neutral bytes */ -#define BBSIZE 8192 +#define BBSIZE 16384 #define LABEL_PART 2 /* partition containing label */ #define RAW_PART 2 /* partition containing whole disk */ @@ -286,7 +286,7 @@ static const char *fstypenames[] = { #define DIOCGDINFO _IOR('d', 101, struct disklabel)/* get */ #define DIOCSDINFO _IOW('d', 102, struct disklabel)/* set */ #define DIOCWDINFO _IOW('d', 103, struct disklabel)/* set, update disk */ -#define DIOCBSDBB _IOW('d', 110, void *) /* write bootblocks */ +#define DIOCBSDBB _IOW('d', 111, void *) /* write bootblocks */ /* * Functions for proper encoding/decoding of struct disklabel into/from Modified: projects/bigbb/sys/sys/diskpc98.h ============================================================================== --- projects/bigbb/sys/sys/diskpc98.h Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/sys/sys/diskpc98.h Fri Mar 9 00:28:28 2012 (r232710) @@ -81,6 +81,6 @@ CTASSERT(sizeof (struct pc98_partition) void pc98_partition_dec(void const *pp, struct pc98_partition *d); void pc98_partition_enc(void *pp, struct pc98_partition *d); -#define DIOCSPC98 _IOW('M', 129, u_char[8192]) +#define DIOCSPC98 _IOW('M', 130, u_char[16384]) #endif /* !_SYS_DISKPC98_H_ */ Modified: projects/bigbb/usr.sbin/makefs/ffs/mkfs.c ============================================================================== --- projects/bigbb/usr.sbin/makefs/ffs/mkfs.c Fri Mar 9 00:12:05 2012 (r232709) +++ projects/bigbb/usr.sbin/makefs/ffs/mkfs.c Fri Mar 9 00:28:28 2012 (r232710) @@ -41,6 +41,7 @@ #include <sys/cdefs.h> __FBSDID("$FreeBSD$"); +#include <sys/disklabel.h> #include <sys/param.h> #include <sys/time.h> #include <sys/resource.h> @@ -62,10 +63,6 @@ __FBSDID("$FreeBSD$"); #include "ffs/ffs_extern.h" #include "ffs/newfs_extern.h" -#ifndef BBSIZE -#define BBSIZE 8192 /* size of boot area, with label */ -#endif - static void initcg(int, time_t, const fsinfo_t *); static int ilog2(int);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201203090028.q290ST6w071741>