summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormrg <mrg@NetBSD.org>1997-10-07 13:39:56 +0000
committermrg <mrg@NetBSD.org>1997-10-07 13:39:56 +0000
commit3d8d628a25b196daa4a4c6bbb4499ea4d3ff7dbb (patch)
treed70b821e50064b827cd3b28bef52648c5e1b3d2d
parentcd359aa2a07e6591020b7b7bd7eb796efa5f6222 (diff)
WARNS?=1. RCS ids.
-rw-r--r--libexec/lfs_cleanerd/Makefile3
-rw-r--r--libexec/lfs_cleanerd/clean.h7
-rw-r--r--libexec/lfs_cleanerd/cleanerd.c153
-rw-r--r--libexec/lfs_cleanerd/library.c45
-rw-r--r--libexec/lfs_cleanerd/misc.c52
-rw-r--r--libexec/lfs_cleanerd/print.c37
6 files changed, 116 insertions, 181 deletions
diff --git a/libexec/lfs_cleanerd/Makefile b/libexec/lfs_cleanerd/Makefile
index daf92950ea3..2fbac22c96a 100644
--- a/libexec/lfs_cleanerd/Makefile
+++ b/libexec/lfs_cleanerd/Makefile
@@ -1,6 +1,7 @@
+# $NetBSD: Makefile,v 1.4 1997/10/07 13:44:02 mrg Exp $
# from: @(#)Makefile 8.1 (Berkeley) 6/5/93
-# $Id: Makefile,v 1.3 1994/12/22 10:27:18 cgd Exp $
+WARNS?= 1
PROG= lfs_cleanerd
CFLAGS+=-I${.CURDIR} -DDIAGNOSTIC
MAN= lfs_cleanerd.8
diff --git a/libexec/lfs_cleanerd/clean.h b/libexec/lfs_cleanerd/clean.h
index f735ea1d42a..635c0e18a8c 100644
--- a/libexec/lfs_cleanerd/clean.h
+++ b/libexec/lfs_cleanerd/clean.h
@@ -30,7 +30,8 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)clean.h 8.2 (Berkeley) 5/4/95
+ * from: @(#)clean.h 8.1 (Berkeley) 6/4/93
+ * $Id: clean.h,v 1.2 1997/10/07 13:39:56 mrg Exp $
*/
/*
@@ -106,8 +107,8 @@ typedef struct fs_info {
__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 **, char *, char *));
-int get __P((int, off_t, void *, size_t));
+int fs_getmntinfo __P((struct statfs **, char *, const char *));
+void get __P((int, off_t, void *, size_t));
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));
diff --git a/libexec/lfs_cleanerd/cleanerd.c b/libexec/lfs_cleanerd/cleanerd.c
index 6d06d75f86d..3f1e456a2de 100644
--- a/libexec/lfs_cleanerd/cleanerd.c
+++ b/libexec/lfs_cleanerd/cleanerd.c
@@ -1,3 +1,5 @@
+/* $NetBSD: cleanerd.c,v 1.2 1997/10/07 13:39:58 mrg Exp $ */
+
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,14 +33,15 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
#ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1992, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)cleanerd.c 8.5 (Berkeley) 6/10/95";
+__COPYRIGHT("@(#) Copyright (c) 1992, 1993\n\
+ The Regents of the University of California. All rights reserved.\n");
+#if 0
+static char sccsid[] = "from: @(#)cleanerd.c 8.2 (Berkeley) 1/13/94";
+#else
+__RCSID("$NetBSD: cleanerd.c,v 1.2 1997/10/07 13:39:58 mrg Exp $");
+#endif
#endif /* not lint */
#include <sys/param.h>
@@ -57,10 +60,7 @@ static char sccsid[] = "@(#)cleanerd.c 8.5 (Berkeley) 6/10/95";
char *special = "cleanerd";
int do_small = 0;
int do_mmap = 0;
-int stat_report = 0;
struct cleaner_stats {
- double util_tot;
- double util_sos;
int blocks_read;
int blocks_written;
int segs_cleaned;
@@ -71,7 +71,7 @@ struct cleaner_stats {
struct seglist {
int sl_id; /* segment number */
int sl_cost; /* cleaning cost */
- char sl_bytes; /* bytes in segment */
+ char sl_empty; /* is segment empty */
};
struct tossstruct {
@@ -79,8 +79,6 @@ struct tossstruct {
int seg;
};
-#define CLEAN_BYTES 0x1
-
/* function prototypes for system calls; not sure where they should go */
int lfs_segwait __P((fsid_t *, struct timeval *));
int lfs_segclean __P((fsid_t *, u_long));
@@ -91,12 +89,13 @@ int lfs_markv __P((fsid_t *, BLOCK_INFO *, int));
int bi_tossold __P((const void *, const void *, const void *));
int choose_segments __P((FS_INFO *, struct seglist *,
int (*)(FS_INFO *, SEGUSE *)));
-void clean_fs __P((FS_INFO *, int (*)(FS_INFO *, SEGUSE *), int, long));
-int clean_loop __P((FS_INFO *, int, long));
+void clean_fs __P((FS_INFO *, int (*)(FS_INFO *, SEGUSE *)));
+int clean_loop __P((FS_INFO *));
int clean_segment __P((FS_INFO *, int));
int cost_benefit __P((FS_INFO *, SEGUSE *));
int cost_compare __P((const void *, const void *));
void sig_report __P((int));
+int main __P((int, char *[]));
/*
* Cleaning Cost Functions:
@@ -157,37 +156,22 @@ main(argc, argv)
struct statfs *lstatfsp; /* file system stats */
struct timeval timeout; /* sleep timeout */
fsid_t fsid;
- long clean_opts; /* cleaning options */
- int i, nodaemon, segs_per_clean;
+ int nodaemon;
int opt, cmd_err;
char *fs_name; /* name of filesystem to clean */
extern int optind;
cmd_err = nodaemon = 0;
- clean_opts = 0;
- segs_per_clean = 1;
- while ((opt = getopt(argc, argv, "bdmn:r:s")) != EOF) {
+ while ((opt = getopt(argc, argv, "smd")) != EOF) {
switch (opt) {
- case 'b': /*
- * Use live bytes to determine
- * how many segs to clean.
- */
- clean_opts |= CLEAN_BYTES;
- break;
- case 'd': /* Debug mode. */
- nodaemon = 1;
+ case 's': /* small writes */
+ do_small = 1;
break;
- case 'm': /* Use mmap instead of read/write */
+ case 'm':
do_mmap = 1;
break;
- case 'n': /* How many segs to clean at once */
- segs_per_clean = atoi(optarg);
- break;
- case 'r': /* Report every stat_report segments */
- stat_report = atoi(optarg);
- break;
- case 's': /* small writes */
- do_small = 1;
+ case 'd':
+ nodaemon = 1;
break;
default:
++cmd_err;
@@ -203,7 +187,7 @@ main(argc, argv)
signal(SIGINT, sig_report);
signal(SIGUSR1, sig_report);
signal(SIGUSR2, sig_report);
- if (fs_getmntinfo(&lstatfsp, fs_name, "lfs") == 0) {
+ 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);
}
@@ -225,7 +209,7 @@ main(argc, argv)
* to make sure that some nasty process hasn't just
* filled the disk system up.
*/
- if (clean_loop(fsp, segs_per_clean, clean_opts))
+ if (clean_loop(fsp))
continue;
#ifdef VERBOSE
@@ -241,42 +225,30 @@ main(argc, argv)
/* return the number of segments cleaned */
int
-clean_loop(fsp, nsegs, options)
+clean_loop(fsp)
FS_INFO *fsp; /* file system information */
- int nsegs;
- long options;
{
double loadavg[MAXLOADS];
time_t now;
u_long max_free_segs;
- u_long db_per_seg;
/*
* Compute the maximum possible number of free segments, given the
* number of free blocks.
*/
- db_per_seg = fsbtodb(&fsp->fi_lfs, fsp->fi_lfs.lfs_ssize);
- max_free_segs = fsp->fi_lfs.lfs_bfree / db_per_seg;
+ max_free_segs = fsp->fi_statfsp->f_bfree / fsp->fi_lfs.lfs_ssize;
/*
* We will clean if there are not enough free blocks or total clean
* space is less than BUSY_LIM % of possible clean space.
*/
now = time((time_t *)NULL);
-#ifdef VERBOSE
- printf("db_er_seg = %d max_free_segs = %d, bfree = %d avail = %d ",
- db_per_seg, max_free_segs, fsp->fi_lfs.lfs_bfree,
- fsp->fi_lfs.lfs_avail);
- printf("clean = %d\n", fsp->fi_cip->clean);
-#endif
- if ((fsp->fi_lfs.lfs_bfree - fsp->fi_lfs.lfs_avail > db_per_seg &&
- fsp->fi_lfs.lfs_avail < db_per_seg) ||
- (fsp->fi_cip->clean < max_free_segs &&
+ if (fsp->fi_cip->clean < max_free_segs &&
(fsp->fi_cip->clean <= MIN_SEGS(&fsp->fi_lfs) ||
- fsp->fi_cip->clean < max_free_segs * BUSY_LIM))) {
- printf("Cleaner Running at %s (%d of %d segments available)\n",
+ fsp->fi_cip->clean < max_free_segs * BUSY_LIM)) {
+ printf("Cleaner Running at %s (%d of %ld segments available)\n",
ctime(&now), fsp->fi_cip->clean, max_free_segs);
- clean_fs(fsp, cost_benefit, nsegs, options);
+ clean_fs(fsp, cost_benefit);
return (1);
} else {
/*
@@ -290,7 +262,7 @@ clean_loop(fsp, nsegs, options)
}
if (loadavg[ONE_MIN] == 0.0 && loadavg[FIVE_MIN] &&
fsp->fi_cip->clean < max_free_segs * IDLE_LIM) {
- clean_fs(fsp, cost_benefit, nsegs, options);
+ clean_fs(fsp, cost_benefit);
printf("Cleaner Running at %s (system idle)\n",
ctime(&now));
return (1);
@@ -302,14 +274,11 @@ clean_loop(fsp, nsegs, options)
void
-clean_fs(fsp, cost_func, nsegs, options)
+clean_fs(fsp, cost_func)
FS_INFO *fsp; /* file system information */
int (*cost_func) __P((FS_INFO *, SEGUSE *));
- int nsegs;
- long options;
{
struct seglist *segs, *sp;
- int to_clean, cleaned_bytes;
int i;
if ((segs =
@@ -323,33 +292,15 @@ clean_fs(fsp, cost_func, nsegs, options)
i, fsp->fi_statfsp->f_mntonname);
fflush(stdout);
#endif
- if (i) {
- /* Check which cleaning algorithm to use. */
- if (options & CLEAN_BYTES) {
- cleaned_bytes = 0;
- to_clean = nsegs <<
- (fsp->fi_lfs.lfs_segshift + fsp->fi_lfs.lfs_bshift);
- for (sp = segs; i && cleaned_bytes < to_clean;
- i--, ++sp) {
- if (clean_segment(fsp, sp->sl_id) < 0)
- perror("clean_segment failed");
- else if (lfs_segclean(&fsp->fi_statfsp->f_fsid,
- sp->sl_id) < 0)
- perror("lfs_segclean failed");
- printf("Cleaned segment %d (%d bytes)\n",
- sp->sl_id, sp->sl_bytes);
- cleaned_bytes += sp->sl_bytes;
- }
- } else
- for (i = MIN(i, nsegs), sp = segs; i-- ; ++sp) {
- if (clean_segment(fsp, sp->sl_id) < 0)
- perror("clean_segment failed");
- else if (lfs_segclean(&fsp->fi_statfsp->f_fsid,
- sp->sl_id) < 0)
- perror("lfs_segclean failed");
- printf("Completed cleaning segment %d\n", sp->sl_id);
- }
- }
+ if (i)
+ for (i = MIN(i, NUM_TO_CLEAN(fsp)), sp = segs; i-- ; ++sp) {
+ if (clean_segment(fsp, sp->sl_id) < 0)
+ perror("clean_segment failed");
+ else if (lfs_segclean(&fsp->fi_statfsp->f_fsid,
+ sp->sl_id) < 0)
+ perror("lfs_segclean failed");
+ printf("Completed cleaning segment %d\n", sp->sl_id);
+ }
free(segs);
}
@@ -402,7 +353,7 @@ choose_segments(fsp, seglist, cost_func)
#endif
sp->sl_cost = (*cost_func)(fsp, sup);
sp->sl_id = i;
- sp->sl_bytes = sup->su_nbytes;
+ sp->sl_empty = sup->su_nbytes ? 0 : 1;
++sp;
}
nsegs = sp - seglist;
@@ -424,7 +375,6 @@ clean_segment(fsp, id)
struct lfs *lfsp;
struct tossstruct t;
caddr_t seg_buf;
- double util;
int num_blocks, maxblocks, clean_blocks;
lfsp = &fsp->fi_lfs;
@@ -491,14 +441,8 @@ clean_segment(fsp, id)
lp = (u_long *)_bip->bi_bp;
}
}
-
#endif
- ++cleaner_stats.segs_cleaned;
cleaner_stats.blocks_written += num_blocks;
- util = ((double)num_blocks / fsp->fi_lfs.lfs_ssize);
- cleaner_stats.util_tot += util;
- cleaner_stats.util_sos += util * util;
-
if (do_small)
maxblocks = MAXPHYS / fsp->fi_lfs.lfs_bsize - 1;
else
@@ -517,8 +461,7 @@ clean_segment(fsp, id)
free(block_array);
munmap_segment(fsp, seg_buf, do_mmap);
- if (stat_report && cleaner_stats.segs_cleaned % stat_report == 0)
- sig_report(SIGUSR1);
+ ++cleaner_stats.segs_cleaned;
return (0);
}
@@ -541,30 +484,18 @@ void
sig_report(sig)
int sig;
{
- double avg;
-
printf("lfs_cleanerd:\t%s%d\n\t\t%s%d\n\t\t%s%d\n\t\t%s%d\n\t\t%s%d\n",
"blocks_read ", cleaner_stats.blocks_read,
"blocks_written ", cleaner_stats.blocks_written,
"segs_cleaned ", cleaner_stats.segs_cleaned,
"segs_empty ", cleaner_stats.segs_empty,
"seg_error ", cleaner_stats.segs_error);
- printf("\t\t%s%5.2f\n\t\t%s%5.2f\n",
- "util_tot ", cleaner_stats.util_tot,
- "util_sos ", cleaner_stats.util_sos);
- printf("\t\tavg util: %4.2f std dev: %9.6f\n",
- avg = cleaner_stats.util_tot / cleaner_stats.segs_cleaned,
- cleaner_stats.util_sos / cleaner_stats.segs_cleaned - avg * avg);
-
-
if (sig == SIGUSR2) {
cleaner_stats.blocks_read = 0;
cleaner_stats.blocks_written = 0;
cleaner_stats.segs_cleaned = 0;
cleaner_stats.segs_empty = 0;
cleaner_stats.segs_error = 0;
- cleaner_stats.util_tot = 0.0;
- cleaner_stats.util_sos = 0.0;
}
if (sig == SIGINT)
exit(0);
diff --git a/libexec/lfs_cleanerd/library.c b/libexec/lfs_cleanerd/library.c
index 939d42c4642..ec5d68be759 100644
--- a/libexec/lfs_cleanerd/library.c
+++ b/libexec/lfs_cleanerd/library.c
@@ -1,3 +1,5 @@
+/* $NetBSD: library.c,v 1.4 1997/10/07 13:39:59 mrg Exp $ */
+
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,9 +33,13 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
#ifndef lint
-/*static char sccsid[] = "from: @(#)library.c 8.1 (Berkeley) 6/4/93";*/
-static char *rcsid = "$Id: library.c,v 1.3 1997/08/01 06:33:39 mikel Exp $";
+#if 0
+static char sccsid[] = "from: @(#)library.c 8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: library.c,v 1.4 1997/10/07 13:39:59 mrg Exp $");
+#endif
#endif /* not lint */
#include <sys/param.h>
@@ -46,6 +52,7 @@ static char *rcsid = "$Id: library.c,v 1.3 1997/08/01 06:33:39 mikel Exp $";
#include <ufs/ufs/dinode.h>
#include <ufs/lfs/lfs.h>
+#include <err.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
@@ -63,6 +70,9 @@ int bi_toss __P((const void *, const void *, const void *));
void get_ifile __P((FS_INFO *, int));
int get_superblock __P((FS_INFO *, struct lfs *));
int pseg_valid __P((FS_INFO *, SEGSUM *));
+void print_SEGSUM __P((struct lfs *, SEGSUM *));
+
+extern u_long cksum __P((void *, size_t)); /* XXX */
/*
* This function will get information on a a filesystem which matches
@@ -108,7 +118,6 @@ get_fs_info (lstatfsp, use_mmap)
int use_mmap; /* IN: mmap or read */
{
FS_INFO *fsp;
- int i;
fsp = (FS_INFO *)malloc(sizeof(FS_INFO));
if (fsp == NULL)
@@ -134,7 +143,6 @@ reread_fs_info(fsp, use_mmap)
FS_INFO *fsp; /* IN: prointer fs_infos to reread */
int use_mmap;
{
- int i;
if (statfs(fsp->fi_statfsp->f_mntonname, fsp->fi_statfsp))
err(1, "reread_fs_info: statfs failed");
@@ -238,8 +246,18 @@ redo_read:
* and segment usage table multiplied by the number of ifile
* entries per page.
*/
- fsp->fi_ifile_count = (fsp->fi_ifile_length >> fsp->fi_lfs.lfs_bshift -
- fsp->fi_lfs.lfs_cleansz - fsp->fi_lfs.lfs_segtabsz) *
+ /*
+ * XXX this used to read:
+ *
+ * fsp->fi_ifile_count = (fsp->fi_ifile_length >> fsp->fi_lfs.lfs_bshift -
+ * fsp->fi_lfs.lfs_cleansz - fsp->fi_lfs.lfs_segtabsz) *
+ * fsp->fi_lfs.lfs_ifpb;
+ *
+ * but now has ()'s around the -'s to quell a GCC warning. This
+ * may not have been the intended purpose, however!
+ */
+ fsp->fi_ifile_count = (fsp->fi_ifile_length >> (fsp->fi_lfs.lfs_bshift -
+ fsp->fi_lfs.lfs_cleansz - fsp->fi_lfs.lfs_segtabsz)) *
fsp->fi_lfs.lfs_ifpb;
free (ifile_name);
@@ -267,9 +285,13 @@ lfs_segmapv(fsp, seg, seg_buf, blocks, bcount)
struct lfs *lfsp;
caddr_t s, segend;
daddr_t pseg_addr, seg_addr;
- int i, nelem, nblocks, sumsize;
+ int nelem, nblocks, sumsize;
time_t timestamp;
+#if defined(VERBOSE) || defined(DIAGNOSTIC)
+ int i = 0; /* XXX gcc */
+#endif
+ i = 0;
lfsp = &fsp->fi_lfs;
nelem = 2 * lfsp->lfs_ssize;
if (!(bip = malloc(nelem * sizeof(BLOCK_INFO))))
@@ -425,7 +447,7 @@ add_inodes (fsp, bip, countp, sp, seg_buf, seg_addr)
caddr_t seg_buf; /* the buffer containing the segment's data */
daddr_t seg_addr; /* disk address of seg_buf */
{
- struct dinode *di;
+ struct dinode *di = NULL; /* XXX gcc */
struct lfs *lfsp;
IFILE *ifp;
BLOCK_INFO *bp;
@@ -589,7 +611,6 @@ munmap_segment (fsp, seg_buf, use_mmap)
free (seg_buf);
}
-
/*
* USEFUL DEBUGGING TOOLS:
*/
@@ -615,9 +636,9 @@ bi_compare(a, b)
ba = a;
bb = b;
- if (diff = (int)(ba->bi_inode - bb->bi_inode))
+ if ((diff = (int)(ba->bi_inode - bb->bi_inode)))
return (diff);
- if (diff = (int)(ba->bi_lbn - bb->bi_lbn)) {
+ if ((diff = (int)(ba->bi_lbn - bb->bi_lbn))) {
if (ba->bi_lbn == LFS_UNUSED_LBN)
return(-1);
else if (bb->bi_lbn == LFS_UNUSED_LBN)
@@ -629,7 +650,7 @@ bi_compare(a, b)
else
return (diff);
}
- if (diff = (int)(ba->bi_segcreate - bb->bi_segcreate))
+ if ((diff = (int)(ba->bi_segcreate - bb->bi_segcreate)))
return (diff);
diff = (int)(ba->bi_daddr - bb->bi_daddr);
return (diff);
diff --git a/libexec/lfs_cleanerd/misc.c b/libexec/lfs_cleanerd/misc.c
index ad6e11a5183..9367693f7d1 100644
--- a/libexec/lfs_cleanerd/misc.c
+++ b/libexec/lfs_cleanerd/misc.c
@@ -1,3 +1,5 @@
+/* $NetBSD: misc.c,v 1.2 1997/10/07 13:39:59 mrg Exp $ */
+
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,50 +33,30 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
#ifndef lint
-static char sccsid[] = "@(#)misc.c 8.1 (Berkeley) 6/4/93";
+#if 0
+static char sccsid[] = "from: @(#)misc.c 8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: misc.c,v 1.2 1997/10/07 13:39:59 mrg Exp $");
+#endif
#endif /* not lint */
-#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/mount.h>
+
+#include <ufs/ufs/dinode.h>
+#include <ufs/lfs/lfs.h>
-#include <unistd.h>
#include <errno.h>
-#include <stdlib.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
-extern char *special;
-
-#if __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
+#include "clean.h"
-void
-#if __STDC__
-err(const int fatal, const char *fmt, ...)
-#else
-err(fmt, va_alist)
- char *fmt;
- va_dcl
-#endif
-{
- va_list ap;
-#if __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- (void)fprintf(stderr, "%s: ", special);
- (void)vfprintf(stderr, fmt, ap);
- va_end(ap);
- if (errno)
- (void)fprintf(stderr, " %s", strerror(errno));
- (void)fprintf(stderr, "\n");
- if (fatal)
- exit(1);
-}
+extern char *special;
void
get(fd, off, p, len)
diff --git a/libexec/lfs_cleanerd/print.c b/libexec/lfs_cleanerd/print.c
index 2978a0c607e..0228d3d3638 100644
--- a/libexec/lfs_cleanerd/print.c
+++ b/libexec/lfs_cleanerd/print.c
@@ -1,3 +1,5 @@
+/* $NetBSD: print.c,v 1.2 1997/10/07 13:40:00 mrg Exp $ */
+
/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
@@ -31,8 +33,13 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
#ifndef lint
-static char sccsid[] = "@(#)print.c 8.2 (Berkeley) 5/24/95";
+#if 0
+static char sccsid[] = "from: @(#)print.c 8.1 (Berkeley) 6/4/93";
+#else
+__RCSID("$NetBSD: print.c,v 1.2 1997/10/07 13:40:00 mrg Exp $");
+#endif
#endif /* not lint */
#include <sys/param.h>
@@ -47,6 +54,8 @@ static char sccsid[] = "@(#)print.c 8.2 (Berkeley) 5/24/95";
#include <stdio.h>
#include "clean.h"
+extern u_long cksum __P((void *, size_t)); /* XXX */
+
/*
* Print out a summary block; return number of blocks in segment; 0
* for empty segment or corrupt segment.
@@ -65,32 +74,22 @@ dump_summary(lfsp, sp, flags, iaddrp)
FINFO *fp;
int ck;
- if (sp->ss_magic != SS_MAGIC)
- return(-1);
-
if (sp->ss_sumsum != (ck = cksum(&sp->ss_datasum,
LFS_SUMMARY_SIZE - sizeof(sp->ss_sumsum))))
return(-1);
- numblocks = (sp->ss_ninos + INOPB(lfsp) - 1) / INOPB(lfsp);
-
- /* Do some basic sanity checking. */
- if (sp->ss_nfinfo > LFS_SUMMARY_SIZE / sizeof(FINFO) ||
- numblocks > lfsp->lfs_ssize ||
- numblocks > LFS_SUMMARY_SIZE / sizeof(daddr_t))
- return(-1);
-
if (flags & DUMP_SUM_HEADER) {
- (void)printf(" %s0x%X\t%s%d\t%s%d\n %s0x%X\t%s0x%X\t%s0x%X\n",
+ (void)printf(" %s0x%X\t%s%d\t%s%d\n %s0x%X\t%s0x%X",
"next ", sp->ss_next,
"nfinfo ", sp->ss_nfinfo,
"ninos ", sp->ss_ninos,
"sumsum ", sp->ss_sumsum,
- "datasum ", sp->ss_datasum,
- "magic ", sp->ss_magic);
- (void)printf(" create %s", ctime((time_t *)&sp->ss_create));
+ "datasum ", sp->ss_datasum );
+ (void)printf("\tcreate %s", ctime((time_t *)&sp->ss_create));
}
+ numblocks = (sp->ss_ninos + INOPB(lfsp) - 1) / INOPB(lfsp);
+
/* Dump out inode disk addresses */
if (flags & DUMP_INODE_ADDRS)
printf(" Inode addresses:");
@@ -98,7 +97,7 @@ dump_summary(lfsp, sp, flags, iaddrp)
dp = (daddr_t *)((caddr_t)sp + LFS_SUMMARY_SIZE);
for (--dp, i = 0; i < sp->ss_ninos; --dp)
if (flags & DUMP_INODE_ADDRS) {
- (void)printf("\t0x%lx", *dp);
+ (void)printf("\t0x%lx", (u_long)*dp);
if (++i % 7 == 0)
(void)printf("\n");
} else
@@ -171,13 +170,13 @@ dump_super(lfsp)
"cleansz ", lfsp->lfs_cleansz,
"segtabsz ", lfsp->lfs_segtabsz);
- (void)printf("%s0x%X\t%s%d\t%s0x%qX\t%s%d\n",
+ (void)printf("%s0x%X\t%s%d\t%s0x%X\t%s%d\n",
"segmask ", lfsp->lfs_segmask,
"segshift ", lfsp->lfs_segshift,
"bmask ", lfsp->lfs_bmask,
"bshift ", lfsp->lfs_bshift);
- (void)printf("%s0x%qX\t\t%s%d\t%s0x%qX\t%s%d\n",
+ (void)printf("%s0x%X\t\t%s%d\t%s0x%X\t%s%d\n",
"ffmask ", lfsp->lfs_ffmask,
"ffshift ", lfsp->lfs_ffshift,
"fbmask ", lfsp->lfs_fbmask,