Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/libexec/lfs_cleanerd Add support for passing the raw device ...
details: https://anonhg.NetBSD.org/src/rev/80bf5b387e35
branches: trunk
changeset: 965061:80bf5b387e35
user: brad <brad%NetBSD.org@localhost>
date: Fri Aug 30 23:37:23 2019 +0000
description:
Add support for passing the raw device name separate from the
filesystem. This is useful in the case where the cleaner is compiled
into code, such as rump_lfs and the ATF tests. This helps to fix
bin/54488
diffstat:
libexec/lfs_cleanerd/lfs_cleanerd.8 | 20 +++++++++++-
libexec/lfs_cleanerd/lfs_cleanerd.c | 57 ++++++++++++++++++++++--------------
2 files changed, 53 insertions(+), 24 deletions(-)
diffs (170 lines):
diff -r 31707e504d6c -r 80bf5b387e35 libexec/lfs_cleanerd/lfs_cleanerd.8
--- a/libexec/lfs_cleanerd/lfs_cleanerd.8 Fri Aug 30 23:36:40 2019 +0000
+++ b/libexec/lfs_cleanerd/lfs_cleanerd.8 Fri Aug 30 23:37:23 2019 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: lfs_cleanerd.8,v 1.18 2009/08/06 21:18:54 wiz Exp $
+.\" $NetBSD: lfs_cleanerd.8,v 1.19 2019/08/30 23:37:23 brad Exp $
.\"
.\" Copyright (c) 1993
.\" The Regents of the University of California. All rights reserved.
@@ -39,9 +39,11 @@
.Nm
.Op Fl bcDdfmqs
.Op Fl i Ar segment-number
+.Op Fl J Ar raw-device
.Op Fl l Ar load-threshhold
.Op Fl n Ar number-of-segments
.Op Fl r Ar report-frequency
+.Op Fl S Ar semaphore-address
.Op Fl t Ar timeout
.Pa node
.Sh DESCRIPTION
@@ -94,6 +96,12 @@
This option is used by
.Xr resize_lfs 8 ,
and should not be specified on the command line.
+.It Fl J Ar raw device
+Specify the raw device that the cleaner is to work against rather than
+trying to figure it out from the mount point. This is mostly useful
+when the cleaner is compiled into
+.Xr rump_lfs 8 ,
+and the ATF test framework.
.It Fl l Ar load-threshhold
Clean more aggressively when the system load is below the given threshhold.
The default threshhold is 0.2.
@@ -112,6 +120,13 @@
Give an efficiency report after every
.Ar report-frequency
times through the main loop.
+.It Fl S Ar semaphore address
+When the cleaner code is compiled into
+.Xr rump_lfs 8 ,
+and the ATF frame work, this option allows for a synchronization
+semaphore to be specified. This option is not available in the
+stand alone
+.Xr lfs_cleanerd 8 .
.It Fl s
When cleaning the file system,
send only a few blocks through lfs_markv at a time.
@@ -132,7 +147,8 @@
.Xr lfs_bmapv 2 ,
.Xr lfs_markv 2 ,
.Xr lfs_segwait 2 ,
-.Xr mount_lfs 8
+.Xr mount_lfs 8 ,
+.Xr rump_lfs 8 .
.Sh HISTORY
The
.Nm
diff -r 31707e504d6c -r 80bf5b387e35 libexec/lfs_cleanerd/lfs_cleanerd.c
--- a/libexec/lfs_cleanerd/lfs_cleanerd.c Fri Aug 30 23:36:40 2019 +0000
+++ b/libexec/lfs_cleanerd/lfs_cleanerd.c Fri Aug 30 23:37:23 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_cleanerd.c,v 1.59 2019/08/22 20:28:08 brad Exp $ */
+/* $NetBSD: lfs_cleanerd.c,v 1.60 2019/08/30 23:37:23 brad Exp $ */
/*-
* Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -76,6 +76,7 @@
int do_quit; /* Quit after one cleaning loop */
int do_coalesce; /* Coalesce filesystem */
int do_small; /* Use small writes through markv */
+char *do_asdevice; /* Use this as the raw device */
char *copylog_filename; /* File to use for fs debugging analysis */
int inval_segment; /* Segment to invalidate */
int stat_report; /* Report statistics for this period of cycles */
@@ -165,7 +166,7 @@
{
struct lfs *disc_fs;
int i;
-
+
fs->clfs_dev = fsname;
if ((fs->clfs_devfd = kops.ko_open(fs->clfs_dev, O_RDWR)) < 0) {
syslog(LOG_ERR, "couldn't open device %s read/write",
@@ -215,26 +216,34 @@
void *sbuf;
size_t mlen;
- /*
- * Get the raw device from the block device.
- * XXX this is ugly. Is there a way to discover the raw device
- * XXX for a given mount point?
- */
- if (kops.ko_statvfs(fsname, &sf, ST_WAIT) < 0)
- return -1;
- mlen = strlen(sf.f_mntfromname) + 2;
- fs->clfs_dev = malloc(mlen);
- if (fs->clfs_dev == NULL) {
- syslog(LOG_ERR, "couldn't malloc device name string: %m");
- return -1;
- }
- if (getdiskrawname(fs->clfs_dev, mlen, sf.f_mntfromname) == NULL) {
- syslog(LOG_ERR, "couldn't convert '%s' ro raw name: %m",
- sf.f_mntfromname);
- return -1;
+ if (do_asdevice != NULL) {
+ fs->clfs_dev = strndup(do_asdevice,strlen(do_asdevice) + 2);
+ if (fs->clfs_dev == NULL) {
+ syslog(LOG_ERR, "couldn't malloc device name string: %m");
+ return -1;
+ }
+ } else {
+ /*
+ * Get the raw device from the block device.
+ * XXX this is ugly. Is there a way to discover the raw device
+ * XXX for a given mount point?
+ */
+ if (kops.ko_statvfs(fsname, &sf, ST_WAIT) < 0)
+ return -1;
+ mlen = strlen(sf.f_mntfromname) + 2;
+ fs->clfs_dev = malloc(mlen);
+ if (fs->clfs_dev == NULL) {
+ syslog(LOG_ERR, "couldn't malloc device name string: %m");
+ return -1;
+ }
+ if (getdiskrawname(fs->clfs_dev, mlen, sf.f_mntfromname) == NULL) {
+ syslog(LOG_ERR, "couldn't convert '%s' to raw name: %m",
+ sf.f_mntfromname);
+ return -1;
+ }
}
if ((fs->clfs_devfd = kops.ko_open(fs->clfs_dev, O_RDONLY, 0)) < 0) {
- syslog(LOG_ERR, "couldn't open device %s for reading",
+ syslog(LOG_ERR, "couldn't open device %s for reading: %m",
fs->clfs_dev);
return -1;
}
@@ -1440,7 +1449,7 @@
static void
usage(void)
{
- errx(1, "usage: lfs_cleanerd [-bcdfmqs] [-i segnum] [-l load] "
+ fprintf(stderr, "usage: lfs_cleanerd [-bcdfmqsJ] [-i segnum] [-l load] "
"[-n nsegs] [-r report_freq] [-t timeout] fs_name ...");
}
@@ -1479,11 +1488,12 @@
inval_segment = -1;
copylog_filename = NULL;
nodetach = 0;
+ do_asdevice = NULL;
/*
* Parse command-line arguments
*/
- while ((opt = getopt(argc, argv, "bC:cdDfi:l:mn:qr:sS:t:")) != -1) {
+ while ((opt = getopt(argc, argv, "bC:cdDfi:J:l:mn:qr:sS:t:")) != -1) {
switch (opt) {
case 'b': /* Use bytes written, not segments read */
use_bytes = 1;
@@ -1532,6 +1542,9 @@
case 't': /* timeout */
segwait_timeout = atoi(optarg);
break;
+ case 'J': /* do as a device */
+ do_asdevice = optarg;
+ break;
default:
usage();
/* NOTREACHED */
Home |
Main Index |
Thread Index |
Old Index