X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/blobdiff_plain/90354149bc7ad70dc09142ba83ce68e32a991c87..31f01cfacb60f0b7155c4abadbd54b1c8fcb7788:/usr/src/sbin/tunefs/tunefs.c diff --git a/usr/src/sbin/tunefs/tunefs.c b/usr/src/sbin/tunefs/tunefs.c index 5fe5b0cf1d..2d4046ef9f 100644 --- a/usr/src/sbin/tunefs/tunefs.c +++ b/usr/src/sbin/tunefs/tunefs.c @@ -1,11 +1,33 @@ +/* + * Copyright (c) 1983 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * advertising materials, and other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ + #ifndef lint -static char *sccsid = "@(#)tunefs.c 4.3 (Berkeley) %G%"; -#endif lint +char copyright[] = +"@(#) Copyright (c) 1983 The Regents of the University of California.\n\ + All rights reserved.\n"; +#endif /* not lint */ + +#ifndef lint +static char sccsid[] = "@(#)tunefs.c 5.7 (Berkeley) %G%"; +#endif /* not lint */ /* * tunefs: change layout parameters to an existing file system. */ - #include #include #include @@ -21,6 +43,7 @@ union { #define sblock sbun.sb int fi; +long dev_bsize = 1; main(argc, argv) int argc; @@ -30,9 +53,8 @@ main(argc, argv) struct stat st; int i; int Aflag = 0; - char device[MAXPATHLEN]; - extern char *sprintf(); struct fstab *fs; + char *chg[2], device[MAXPATHLEN]; argc--, argv++; if (argc < 2) @@ -46,7 +68,8 @@ again: if (*special != '/') { if (*special == 'r') special++; - special = sprintf(device, "/dev/%s", special); + (void)sprintf(device, "/dev/%s", special); + special = device; goto again; } fprintf(stderr, "tunefs: "); perror(special); @@ -85,8 +108,6 @@ again: fatal("-d: missing %s", name); argc--, argv++; i = atoi(*argv); - if (i < 0) - fatal("%s: bad %s", *argv, name); fprintf(stdout, "%s changes from %dms to %dms\n", name, sblock.fs_rotdelay, i); @@ -120,6 +141,44 @@ again: "%s changes from %d%% to %d%%\n", name, sblock.fs_minfree, i); sblock.fs_minfree = i; + if (i >= 10 && sblock.fs_optim == FS_OPTSPACE) + fprintf(stdout, "should optimize %s", + "for time with minfree >= 10%\n"); + if (i < 10 && sblock.fs_optim == FS_OPTTIME) + fprintf(stdout, "should optimize %s", + "for space with minfree < 10%\n"); + continue; + + case 'o': + name = "optimization preference"; + if (argc < 1) + fatal("-o: missing %s", name); + argc--, argv++; + chg[FS_OPTSPACE] = "space"; + chg[FS_OPTTIME] = "time"; + if (strcmp(*argv, chg[FS_OPTSPACE]) == 0) + i = FS_OPTSPACE; + else if (strcmp(*argv, chg[FS_OPTTIME]) == 0) + i = FS_OPTTIME; + else + fatal("%s: bad %s (options are `space' or `time')", + *argv, name); + if (sblock.fs_optim == i) { + fprintf(stdout, + "%s remains unchanged as %s\n", + name, chg[i]); + continue; + } + fprintf(stdout, + "%s changes from %s to %s\n", + name, chg[sblock.fs_optim], chg[i]); + sblock.fs_optim = i; + if (sblock.fs_minfree >= 10 && i == FS_OPTSPACE) + fprintf(stdout, "should optimize %s", + "for time with minfree >= 10%\n"); + if (sblock.fs_minfree < 10 && i == FS_OPTTIME) + fprintf(stdout, "should optimize %s", + "for space with minfree < 10%\n"); continue; default: @@ -128,7 +187,7 @@ again: } if (argc != 1) goto usage; - bwrite(SBLOCK, (char *)&sblock, SBSIZE); + bwrite(SBOFF / dev_bsize, (char *)&sblock, SBSIZE); if (Aflag) for (i = 0; i < sblock.fs_ncg; i++) bwrite(fsbtodb(&sblock, cgsblock(&sblock, i)), @@ -138,10 +197,11 @@ again: usage: fprintf(stderr, "Usage: tunefs tuneup-options special-device\n"); fprintf(stderr, "where tuneup-options are:\n"); - fprintf(stderr, "\t-a maximum contigouous blocks\n"); + fprintf(stderr, "\t-a maximum contiguous blocks\n"); fprintf(stderr, "\t-d rotational delay between contiguous blocks\n"); fprintf(stderr, "\t-e maximum blocks per file in a cylinder group\n"); fprintf(stderr, "\t-m minimum percentage of free space\n"); + fprintf(stderr, "\t-o optimization preference (`space' or `time')\n"); exit(2); } @@ -156,7 +216,7 @@ getsb(fs, file) perror(file); exit(3); } - if (bread(SBLOCK, (char *)fs, SBSIZE)) { + if (bread(SBOFF, (char *)fs, SBSIZE)) { fprintf(stderr, "bad super block"); perror(file); exit(4); @@ -165,6 +225,7 @@ getsb(fs, file) fprintf(stderr, "%s: bad magic number\n", file); exit(5); } + dev_bsize = fs->fs_fsize / fsbtodb(fs, 1); } bwrite(blk, buf, size) @@ -172,7 +233,7 @@ bwrite(blk, buf, size) daddr_t blk; register size; { - if (lseek(fi, blk * DEV_BSIZE, 0) < 0) { + if (lseek(fi, blk * dev_bsize, 0) < 0) { perror("FS SEEK"); exit(6); } @@ -188,7 +249,7 @@ bread(bno, buf, cnt) { register i; - if (lseek(fi, bno * DEV_BSIZE, 0) < 0) + if (lseek(fi, bno * dev_bsize, 0) < 0) return(1); if ((i = read(fi, buf, cnt)) != cnt) { for(i=0; i