BSD 4_3_Net_2 release
[unix-history] / usr / src / sbin / tunefs / tunefs.c
index 1267908..fb98bac 100644 (file)
@@ -1,30 +1,55 @@
 /*
 /*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1983 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
  */
 
 #ifndef lint
 char copyright[] =
  */
 
 #ifndef lint
 char copyright[] =
-"@(#) Copyright (c) 1983 Regents of the University of California.\n\
+"@(#) Copyright (c) 1983 The Regents of the University of California.\n\
  All rights reserved.\n";
  All rights reserved.\n";
-#endif not lint
+#endif /* not lint */
 
 #ifndef lint
 
 #ifndef lint
-static char sccsid[] = "@(#)tunefs.c   5.2 (Berkeley) %G%";
-#endif not lint
+static char sccsid[] = "@(#)tunefs.c   5.11 (Berkeley) 6/1/90";
+#endif /* not lint */
 
 /*
  * tunefs: change layout parameters to an existing file system.
  */
 
 /*
  * tunefs: change layout parameters to an existing file system.
  */
-
 #include <sys/param.h>
 #include <sys/stat.h>
 #include <sys/param.h>
 #include <sys/stat.h>
-#include <sys/fs.h>
-#include <sys/inode.h>
-
-#include <stdio.h>
+#include <ufs/fs.h>
 #include <fstab.h>
 #include <fstab.h>
+#include <stdio.h>
+#include <paths.h>
 
 union {
        struct  fs sb;
 
 union {
        struct  fs sb;
@@ -33,6 +58,7 @@ union {
 #define        sblock sbun.sb
 
 int fi;
 #define        sblock sbun.sb
 
 int fi;
+long dev_bsize = 1;
 
 main(argc, argv)
        int argc;
 
 main(argc, argv)
        int argc;
@@ -44,7 +70,6 @@ main(argc, argv)
        int Aflag = 0;
        struct fstab *fs;
        char *chg[2], device[MAXPATHLEN];
        int Aflag = 0;
        struct fstab *fs;
        char *chg[2], device[MAXPATHLEN];
-       extern char *sprintf();
 
        argc--, argv++; 
        if (argc < 2)
 
        argc--, argv++; 
        if (argc < 2)
@@ -58,7 +83,8 @@ again:
                if (*special != '/') {
                        if (*special == 'r')
                                special++;
                if (*special != '/') {
                        if (*special == 'r')
                                special++;
-                       special = sprintf(device, "/dev/%s", special);
+                       (void)sprintf(device, "%s/%s", _PATH_DEV, special);
+                       special = device;
                        goto again;
                }
                fprintf(stderr, "tunefs: "); perror(special);
                        goto again;
                }
                fprintf(stderr, "tunefs: "); perror(special);
@@ -97,8 +123,6 @@ again:
                                        fatal("-d: missing %s", name);
                                argc--, argv++;
                                i = atoi(*argv);
                                        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);
                                fprintf(stdout,
                                        "%s changes from %dms to %dms\n",
                                        name, sblock.fs_rotdelay, i);
@@ -132,6 +156,12 @@ again:
                                        "%s changes from %d%% to %d%%\n",
                                        name, sblock.fs_minfree, i);
                                sblock.fs_minfree = i;
                                        "%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':
                                continue;
 
                        case 'o':
@@ -158,6 +188,12 @@ again:
                                        "%s changes from %s to %s\n",
                                        name, chg[sblock.fs_optim], chg[i]);
                                sblock.fs_optim = i;
                                        "%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:
                                continue;
 
                        default:
@@ -166,7 +202,7 @@ again:
        }
        if (argc != 1)
                goto usage;
        }
        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)),
        if (Aflag)
                for (i = 0; i < sblock.fs_ncg; i++)
                        bwrite(fsbtodb(&sblock, cgsblock(&sblock, i)),
@@ -195,7 +231,7 @@ getsb(fs, file)
                perror(file);
                exit(3);
        }
                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);
                fprintf(stderr, "bad super block");
                perror(file);
                exit(4);
@@ -204,6 +240,7 @@ getsb(fs, file)
                fprintf(stderr, "%s: bad magic number\n", file);
                exit(5);
        }
                fprintf(stderr, "%s: bad magic number\n", file);
                exit(5);
        }
+       dev_bsize = fs->fs_fsize / fsbtodb(fs, 1);
 }
 
 bwrite(blk, buf, size)
 }
 
 bwrite(blk, buf, size)
@@ -211,7 +248,7 @@ bwrite(blk, buf, size)
        daddr_t blk;
        register 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);
        }
                perror("FS SEEK");
                exit(6);
        }
@@ -227,7 +264,7 @@ bread(bno, buf, cnt)
 {
        register i;
 
 {
        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<sblock.fs_bsize; i++)
                return(1);
        if ((i = read(fi, buf, cnt)) != cnt) {
                for(i=0; i<sblock.fs_bsize; i++)