require an argument for hfs_cleanerd which specifies fs to clean.
authorChris G. Demetriou <cgd@ucbvax.Berkeley.EDU>
Sat, 5 Jun 1993 08:33:57 +0000 (00:33 -0800)
committerChris G. Demetriou <cgd@ucbvax.Berkeley.EDU>
Sat, 5 Jun 1993 08:33:57 +0000 (00:33 -0800)
SCCS-vsn: libexec/lfs_cleanerd/clean.h 5.6
SCCS-vsn: libexec/lfs_cleanerd/cleanerd.c 5.10

usr/src/libexec/lfs_cleanerd/clean.h
usr/src/libexec/lfs_cleanerd/cleanerd.c

index 2d11d65..2d69351 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)clean.h     5.5 (Berkeley) %G%
+ *     @(#)clean.h     5.6 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
@@ -80,13 +80,13 @@ typedef struct fs_info {
 __BEGIN_DECLS
 int     dump_summary __P((struct lfs *, SEGSUM *, u_long, daddr_t **));
 void    err __P((const int, const char *, ...));
 __BEGIN_DECLS
 int     dump_summary __P((struct lfs *, SEGSUM *, u_long, daddr_t **));
 void    err __P((const int, const char *, ...));
-int     fs_getmntinfo __P((struct statfs **, int));
+int     fs_getmntinfo __P((struct statfs **, char *, int));
 int     get __P((int, off_t, void *, size_t));
 int     get __P((int, off_t, void *, size_t));
-FS_INFO        *get_fs_info __P((struct statfs *, int, int));
+FS_INFO        *get_fs_info __P((struct statfs *, int));
 int     lfs_segmapv __P((FS_INFO *, int, caddr_t, BLOCK_INFO **, int *));
 int     mmap_segment __P((FS_INFO *, int, caddr_t *, int));
 void    munmap_segment __P((FS_INFO *, caddr_t, int));
 int     lfs_segmapv __P((FS_INFO *, int, caddr_t, BLOCK_INFO **, int *));
 int     mmap_segment __P((FS_INFO *, int, caddr_t *, int));
 void    munmap_segment __P((FS_INFO *, caddr_t, int));
-void    reread_fs_info __P((FS_INFO *, int, int));
+void    reread_fs_info __P((FS_INFO *, int));
 void    toss __P((void *, int *, size_t,
              int (*)(const void *, const void *, const void *), void *));
 
 void    toss __P((void *, int *, size_t,
              int (*)(const void *, const void *, const void *), void *));
 
index eeb44cd..6e69958 100644 (file)
@@ -12,7 +12,7 @@ char copyright[] =
 #endif /* not lint */
 
 #ifndef lint
 #endif /* not lint */
 
 #ifndef lint
-static char sccsid[] = "@(#)cleanerd.c 5.9 (Berkeley) %G%";
+static char sccsid[] = "@(#)cleanerd.c 5.10 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -122,13 +122,14 @@ main(argc, argv)
        int argc;
        char *argv[];
 {
        int argc;
        char *argv[];
 {
-       FS_INFO *lfp, *fsp;
+       FS_INFO *fsp;
        struct statfs *lstatfsp;        /* file system stats */
        struct timeval timeout;         /* sleep timeout */
        fsid_t fsid;
        struct statfs *lstatfsp;        /* file system stats */
        struct timeval timeout;         /* sleep timeout */
        fsid_t fsid;
-       int count;                      /* number of file systems */
-       int i, nclean;
+       int i;
        int opt, cmd_err;
        int opt, cmd_err;
+       char *fs_name;                  /* name of filesystem to clean */
+       extern int optind;
 
        cmd_err = 0;
        while ((opt = getopt(argc, argv, "sm")) != EOF) {
 
        cmd_err = 0;
        while ((opt = getopt(argc, argv, "sm")) != EOF) {
@@ -143,29 +144,35 @@ main(argc, argv)
                                ++cmd_err;
                }
        }
                                ++cmd_err;
                }
        }
-       if (cmd_err)
-               err(1, "usage: lfs_cleanerd [-su]");
+       argc -= optind;
+       argv += optind;
+       if (cmd_err || (argc != 1))
+               err(1, "usage: lfs_cleanerd [-sm] fs_name");
+
+       fs_name = argv[0];
 
        signal (SIGINT, sig_report);
        signal (SIGUSR1, sig_report);
        signal (SIGUSR2, sig_report);
 
        signal (SIGINT, sig_report);
        signal (SIGUSR1, sig_report);
        signal (SIGUSR2, sig_report);
-       count = fs_getmntinfo(&lstatfsp, MOUNT_LFS);
+       if (fs_getmntinfo(&lstatfsp, fs_name, MOUNT_LFS) == 0) {
+               /* didn't find the filesystem */
+               err(1, "lfs_cleanerd: filesystem %s isn't an LFS!", fs_name);
+       }
 
        timeout.tv_sec = 5*60; /* five minutes */
        timeout.tv_usec = 0;
        fsid.val[0] = 0;
        fsid.val[1] = 0;
 
 
        timeout.tv_sec = 5*60; /* five minutes */
        timeout.tv_usec = 0;
        fsid.val[0] = 0;
        fsid.val[1] = 0;
 
-       for (fsp = get_fs_info(lstatfsp, count, do_mmap); ;
-           reread_fs_info(fsp, count, do_mmap)) {
-               for (nclean = 0, lfp = fsp, i = 0; i < count; ++lfp, ++i)
-                       nclean += clean_loop(lfp);
+       for (fsp = get_fs_info(lstatfsp, do_mmap); ;
+           reread_fs_info(fsp, do_mmap)) {
                /*
                /*
-                * If some file systems were actually cleaned, run again
+                * clean the filesystem, and, if it needed cleaning
+                * (i.e. it returned nonzero) try it again
                 * to make sure that some nasty process hasn't just
                 * filled the disk system up.
                 */
                 * to make sure that some nasty process hasn't just
                 * filled the disk system up.
                 */
-               if (nclean)
+               if (clean_loop(fsp))
                        continue;
 
 #ifdef VERBOSE
                        continue;
 
 #ifdef VERBOSE