Merge from Lite2 (but does not work)
This commit is contained in:
parent
75e2941193
commit
73421c42fb
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=23683
@ -30,7 +30,7 @@
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* @(#)config.h 8.2 (Berkeley) 4/22/94
|
||||
* @(#)config.h 8.3 (Berkeley) 5/24/95
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -129,6 +129,12 @@
|
||||
#define DFL_LFSSEG_MASK 0xFFFFF
|
||||
|
||||
#define LFS_MINBLOCKSIZE 1024
|
||||
#define DFL_LFSBLOCK 8192
|
||||
#define DFL_LFSBLOCK_SHIFT 13
|
||||
#define DFL_LFSBLOCK_MASK 0x1FFF
|
||||
#define DFL_LFSBLOCK 4096
|
||||
#define DFL_LFSBLOCK_SHIFT 12
|
||||
#define DFL_LFSBLOCK_MASK 0xFFF
|
||||
|
||||
#define DFL_LFSFRAG 4096
|
||||
#define DFL_LFS_FFMASK DFL_LFSBLOCK_MASK
|
||||
#define DFL_LFS_FFSHIFT DFL_LFSBLOCK_SHIFT
|
||||
#define DFL_LFS_FBMASK 0
|
||||
#define DFL_LFS_FBSHIFT 0
|
||||
|
@ -32,7 +32,7 @@
|
||||
*/
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)lfs.c 8.1 (Berkeley) 6/5/93";
|
||||
static char sccsid[] = "@(#)lfs.c 8.5 (Berkeley) 5/24/95";
|
||||
#endif /* not lint */
|
||||
|
||||
#include <sys/param.h>
|
||||
@ -91,7 +91,7 @@ static struct lfs lfs_default = {
|
||||
/* lfs_ssize */ DFL_LFSSEG/DFL_LFSBLOCK,
|
||||
/* lfs_dsize */ 0,
|
||||
/* lfs_bsize */ DFL_LFSBLOCK,
|
||||
/* lfs_fsize */ DFL_LFSBLOCK,
|
||||
/* lfs_fsize */ DFL_LFSFRAG,
|
||||
/* lfs_frag */ 1,
|
||||
/* lfs_free */ LFS_FIRST_INUM,
|
||||
/* lfs_bfree */ 0,
|
||||
@ -122,10 +122,10 @@ static struct lfs lfs_default = {
|
||||
/* lfs_segshift */ DFL_LFSSEG_SHIFT,
|
||||
/* lfs_bmask */ DFL_LFSBLOCK_MASK,
|
||||
/* lfs_bshift */ DFL_LFSBLOCK_SHIFT,
|
||||
/* lfs_ffmask */ 0,
|
||||
/* lfs_ffshift */ 0,
|
||||
/* lfs_fbmask */ 0,
|
||||
/* lfs_fbshift */ 0,
|
||||
/* lfs_ffmask */ DFL_LFS_FFMASK,
|
||||
/* lfs_ffshift */ DFL_LFS_FFSHIFT,
|
||||
/* lfs_fbmask */ DFL_LFS_FBMASK,
|
||||
/* lfs_fbshift */ DFL_LFS_FBSHIFT,
|
||||
/* lfs_fsbtodb */ 0,
|
||||
/* lfs_sushift */ 0,
|
||||
/* lfs_sboffs */ { 0 },
|
||||
@ -144,8 +144,8 @@ static struct lfs lfs_default = {
|
||||
/* lfs_flags */ 0,
|
||||
/* lfs_fsmnt */ { 0 },
|
||||
/* lfs_pad */ { 0 },
|
||||
/* lfs_pad2 */ { 0 },
|
||||
/* lfs_cksum */ 0
|
||||
/* lfs_cksum */ 0,
|
||||
/* lfs_maxsymlinklen */ MAXSYMLINKLEN
|
||||
};
|
||||
|
||||
|
||||
@ -167,12 +167,13 @@ static void make_dir __P(( void *, struct direct *, int));
|
||||
static void put __P((int, off_t, void *, size_t));
|
||||
|
||||
int
|
||||
make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
make_lfs(fd, lp, partp, minfree, block_size, frag_size, seg_size)
|
||||
int fd;
|
||||
struct disklabel *lp;
|
||||
struct partition *partp;
|
||||
int minfree;
|
||||
int bsize;
|
||||
int block_size;
|
||||
int frag_size;
|
||||
int seg_size;
|
||||
{
|
||||
struct dinode *dip; /* Pointer to a disk inode */
|
||||
@ -197,6 +198,8 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
u_long *dp; /* Used to computed checksum on data */
|
||||
u_long *datasump; /* Used to computed checksum on data */
|
||||
int block_array_size; /* How many entries in block array */
|
||||
int bsize; /* Block size */
|
||||
int fsize; /* Fragment size */
|
||||
int db_per_fb; /* Disk blocks per file block */
|
||||
int i, j;
|
||||
int off; /* Offset at which to write */
|
||||
@ -207,19 +210,29 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
|
||||
lfsp = &lfs_default;
|
||||
|
||||
if (!(bsize = block_size))
|
||||
bsize = DFL_LFSBLOCK;
|
||||
if (!(fsize = frag_size))
|
||||
fsize = DFL_LFSFRAG;
|
||||
if (!(ssize = seg_size))
|
||||
ssize = DFL_LFSSEG;
|
||||
|
||||
/* Modify parts of superblock overridden by command line arguments */
|
||||
if (bsize != DFL_LFSBLOCK) {
|
||||
if (bsize != DFL_LFSBLOCK || fsize != DFL_LFSFRAG) {
|
||||
lfsp->lfs_bshift = log2(bsize);
|
||||
if (1 << lfsp->lfs_bshift != bsize)
|
||||
fatal("%d: block size not a power of 2", bsize);
|
||||
lfsp->lfs_bsize = bsize;
|
||||
lfsp->lfs_fsize = bsize;
|
||||
lfsp->lfs_fsize = fsize;
|
||||
lfsp->lfs_bmask = bsize - 1;
|
||||
lfsp->lfs_inopb = bsize / sizeof(struct dinode);
|
||||
|
||||
lfsp->lfs_ffmask = fsize - 1;
|
||||
lfsp->lfs_ffshift = log2(fsize);
|
||||
if (1 << lfsp->lfs_ffshift != fsize)
|
||||
fatal("%d: frag size not a power of 2", fsize);
|
||||
lfsp->lfs_frag = numfrags(lfsp, bsize);
|
||||
lfsp->lfs_fbmask = lfsp->lfs_frag - 1;
|
||||
lfsp->lfs_fbshift = log2(lfsp->lfs_frag);
|
||||
/* MIS -- should I round to power of 2 */
|
||||
lfsp->lfs_ifpb = bsize / sizeof(IFILE);
|
||||
lfsp->lfs_sepb = bsize / sizeof(SEGUSE);
|
||||
@ -363,7 +376,7 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
if (!(dpagep = malloc(lfsp->lfs_bsize)))
|
||||
fatal("%s", strerror(errno));
|
||||
dip = (struct dinode *)dpagep;
|
||||
bzero(dip, lfsp->lfs_bsize);
|
||||
memset(dip, 0, lfsp->lfs_bsize);
|
||||
|
||||
/* Create a block of IFILE structures. */
|
||||
if (!(ipagep = malloc(lfsp->lfs_bsize)))
|
||||
@ -455,15 +468,15 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
*/
|
||||
|
||||
/* Write out the root and lost and found directories */
|
||||
bzero(ipagep, lfsp->lfs_bsize);
|
||||
make_dir(ipagep, lfs_root_dir,
|
||||
memset(ipagep, 0, lfsp->lfs_bsize);
|
||||
make_dir(ipagep, lfs_root_dir,
|
||||
sizeof(lfs_root_dir) / sizeof(struct direct));
|
||||
*dp++ = ((u_long *)ipagep)[0];
|
||||
put(fd, off, ipagep, lfsp->lfs_bsize);
|
||||
off += lfsp->lfs_bsize;
|
||||
|
||||
bzero(ipagep, lfsp->lfs_bsize);
|
||||
make_dir(ipagep, lfs_lf_dir,
|
||||
memset(ipagep, 0, lfsp->lfs_bsize);
|
||||
make_dir(ipagep, lfs_lf_dir,
|
||||
sizeof(lfs_lf_dir) / sizeof(struct direct));
|
||||
*dp++ = ((u_long *)ipagep)[0];
|
||||
put(fd, off, ipagep, lfsp->lfs_bsize);
|
||||
@ -481,6 +494,7 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
summary.ss_create = lfsp->lfs_tstamp;
|
||||
summary.ss_nfinfo = 3;
|
||||
summary.ss_ninos = 3;
|
||||
summary.ss_magic = SS_MAGIC;
|
||||
summary.ss_datasum = cksum(datasump, sizeof(u_long) * blocks_used);
|
||||
|
||||
/*
|
||||
@ -511,30 +525,32 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
|
||||
/* copy into segment */
|
||||
sump = ipagep;
|
||||
bcopy(&summary, sump, sizeof(SEGSUM));
|
||||
memmove(sump, &summary, sizeof(SEGSUM));
|
||||
sump += sizeof(SEGSUM);
|
||||
|
||||
/* Now, add the ifile */
|
||||
file_info.fi_nblocks = block_array_size;
|
||||
file_info.fi_version = 1;
|
||||
file_info.fi_lastlength = lfsp->lfs_bsize;
|
||||
file_info.fi_ino = LFS_IFILE_INUM;
|
||||
|
||||
bcopy(&file_info, sump, sizeof(FINFO) - sizeof(u_long));
|
||||
memmove(sump, &file_info, sizeof(FINFO) - sizeof(u_long));
|
||||
sump += sizeof(FINFO) - sizeof(u_long);
|
||||
bcopy(block_array, sump, sizeof(u_long) * file_info.fi_nblocks);
|
||||
memmove(sump, block_array, sizeof(u_long) * file_info.fi_nblocks);
|
||||
sump += sizeof(u_long) * file_info.fi_nblocks;
|
||||
|
||||
/* Now, add the root directory */
|
||||
file_info.fi_nblocks = 1;
|
||||
file_info.fi_version = 1;
|
||||
file_info.fi_lastlength = lfsp->lfs_bsize;
|
||||
file_info.fi_ino = ROOTINO;
|
||||
file_info.fi_blocks[0] = 0;
|
||||
bcopy(&file_info, sump, sizeof(FINFO));
|
||||
memmove(sump, &file_info, sizeof(FINFO));
|
||||
sump += sizeof(FINFO);
|
||||
|
||||
/* Now, add the lost and found */
|
||||
file_info.fi_ino = LOSTFOUNDINO;
|
||||
bcopy(&file_info, sump, sizeof(FINFO));
|
||||
memmove(sump, &file_info, sizeof(FINFO));
|
||||
|
||||
((daddr_t *)ipagep)[LFS_SUMMARY_SIZE / sizeof(daddr_t) - 1] =
|
||||
lfsp->lfs_idaddr;
|
||||
@ -547,6 +563,7 @@ make_lfs(fd, lp, partp, minfree, bsize, seg_size)
|
||||
sp->ss_nfinfo = 0;
|
||||
sp->ss_ninos = 0;
|
||||
sp->ss_datasum = 0;
|
||||
sp->ss_magic = SS_MAGIC;
|
||||
|
||||
/* Now write the summary block for the next partial so it's invalid */
|
||||
lfsp->lfs_tstamp = 0;
|
||||
@ -605,10 +622,6 @@ put(fd, off, p, len)
|
||||
* directory.
|
||||
*/
|
||||
|
||||
u_long d_ino; /* inode number of entry */
|
||||
u_short d_reclen; /* length of this record */
|
||||
u_short d_namlen; /* length of string in d_name */
|
||||
char d_name[MAXNAMLEN + 1]; /* name with length <= MAXNAMLEN */
|
||||
void
|
||||
lfsinit()
|
||||
{}
|
||||
@ -627,10 +640,8 @@ make_dinode(ino, dip, nblocks, saddr, lfsp)
|
||||
dip->di_blocks = nblocks << lfsp->lfs_fsbtodb;
|
||||
|
||||
dip->di_size = (nblocks << lfsp->lfs_bshift);
|
||||
dip->di_atime.tv_sec = dip->di_mtime.tv_sec =
|
||||
dip->di_ctime.tv_sec = lfsp->lfs_tstamp;
|
||||
dip->di_atime.tv_nsec = dip->di_mtime.tv_nsec =
|
||||
dip->di_ctime.tv_nsec = 0;
|
||||
dip->di_atime = dip->di_mtime = dip->di_ctime = lfsp->lfs_tstamp;
|
||||
dip->di_atimensec = dip->di_mtimensec = dip->di_ctimensec = 0;
|
||||
dip->di_inumber = ino;
|
||||
|
||||
#define SEGERR \
|
||||
@ -663,11 +674,11 @@ make_dir(bufp, protodir, entries)
|
||||
spcleft = DIRBLKSIZ;
|
||||
for (cp = bufp, i = 0; i < entries - 1; i++) {
|
||||
protodir[i].d_reclen = DIRSIZ(NEWDIRFMT, &protodir[i]);
|
||||
bcopy(&protodir[i], cp, protodir[i].d_reclen);
|
||||
memmove(cp, &protodir[i], protodir[i].d_reclen);
|
||||
cp += protodir[i].d_reclen;
|
||||
if ((spcleft -= protodir[i].d_reclen) < 0)
|
||||
fatal("%s: %s", special, "directory too big");
|
||||
}
|
||||
protodir[i].d_reclen = spcleft;
|
||||
bcopy(&protodir[i], cp, DIRSIZ(NEWDIRFMT, &protodir[i]));
|
||||
memmove(cp, &protodir[i], DIRSIZ(NEWDIRFMT, &protodir[i]));
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ static char copyright[] =
|
||||
#endif /* not lint */
|
||||
|
||||
#ifndef lint
|
||||
static char sccsid[] = "@(#)newfs.c 8.3 (Berkeley) 4/22/94";
|
||||
static char sccsid[] = "@(#)newfs.c 8.5 (Berkeley) 5/24/95";
|
||||
#endif /* not lint */
|
||||
|
||||
/*
|
||||
@ -127,7 +127,7 @@ main(argc, argv)
|
||||
int debug, lfs, fsi, fso, segsize;
|
||||
char *cp, *opstring;
|
||||
|
||||
if (progname = rindex(*argv, '/'))
|
||||
if (progname = strrchr(*argv, '/'))
|
||||
++progname;
|
||||
else
|
||||
progname = *argv;
|
||||
@ -269,7 +269,7 @@ main(argc, argv)
|
||||
* prefix, try /dev/r%s and then /dev/%s.
|
||||
*/
|
||||
special = argv[0];
|
||||
if (index(special, '/') == NULL) {
|
||||
if (strchr(special, '/') == NULL) {
|
||||
(void)sprintf(device, "%sr%s", _PATH_DEV, special);
|
||||
if (stat(device, &st) == -1)
|
||||
(void)sprintf(device, "%s%s", _PATH_DEV, special);
|
||||
@ -293,7 +293,7 @@ main(argc, argv)
|
||||
if (!debug && !mfs && !S_ISCHR(st.st_mode))
|
||||
(void)printf("%s: %s: not a character-special device\n",
|
||||
progname, special);
|
||||
cp = index(argv[0], '\0') - 1;
|
||||
cp = strchr(argv[0], '\0') - 1;
|
||||
if (!debug && (cp == 0 || (*cp < 'a' || *cp > 'h') && !isdigit(*cp)))
|
||||
fatal("%s: can't figure out file system partition", argv[0]);
|
||||
|
||||
@ -331,7 +331,7 @@ main(argc, argv)
|
||||
}
|
||||
|
||||
/* If we're making a LFS, we break out here */
|
||||
exit(make_lfs(fso, lp, pp, minfree, bsize, segsize));
|
||||
exit(make_lfs(fso, lp, pp, minfree, bsize, fsize, segsize));
|
||||
}
|
||||
|
||||
#ifdef COMPAT
|
||||
@ -418,7 +418,7 @@ rewritelabel(s, fd, lp)
|
||||
cfd = open(specname, O_WRONLY);
|
||||
if (cfd < 0)
|
||||
fatal("%s: %s", specname, strerror(errno));
|
||||
bzero(blk, sizeof(blk));
|
||||
memset(blk, 0, sizeof(blk));
|
||||
*(struct disklabel *)(blk + LABELOFFSET) = *lp;
|
||||
alt = lp->d_ncylinders * lp->d_secpercyl - lp->d_nsectors;
|
||||
for (i = 1; i < 11 && i < lp->d_nsectors; i += 2) {
|
||||
|
Loading…
Reference in New Issue
Block a user