Date: Fri, 02 Feb 2001 21:38:27 -0800 From: Dima Dorfman <dima@unixfreak.org> To: Mike Meyer <mwm@mired.org> Cc: cvs-all@freebsd.org Subject: Re: mdconfig config file (was: cvs commit: src/sys/i386/conf GENERI C) Message-ID: <20010203053832.7DE793E02@bazooka.unixfreak.org> In-Reply-To: Message from Mike Meyer <mwm@mired.org> of "Fri, 02 Feb 2001 22:49:22 CST." <14971.36306.550056.3968@guru.mired.org>
next in thread | previous in thread | raw e-mail | index | archive | help
> Dima Dorfman <dima@unixfreak.org> types:
> > > (this whole thing is predicated on someone writing a mount_md wrapper
> > > for MD that mimics the options mount_mfs accepts, for compatibility).
> >
> > I'll do it. Would it be safe to assume that it's acceptable to write
> > a C program to parse the arguments, build command lines to
> > appropriately invoke disklabel, newfs, maybe tunefs, and mount, then
> > call system(3) to execute them?
>
> If you're going to use system on them all, why not just use Perl or a
> shell script and getopts?
No reason. I prefer C because I feel limited by Perl. On more than
one occasion I find myself having to use multiple regexps for
something I could do in one line if I had pointers. That's not to say
Perl is bad; it has its uses, but, IMHO (and not many others',
probably), this isn't one of them.
> The only thing that's really painful in this process (at least now
> that the hard work has been done) newfs. This suggests that, instead
> of a new program, making newfs do duty as mount_md - similar to the
> way it does mount_mfs now - might be the way to do it.
Personally, I don't like how mount_mfs is implemented now. Perhaps
there was good reason for doing it this way, but I don't like it. It
isn't even a separate subroutine within newfs, it is just kind of
stuck in the middle. In fact, I think all of newfs(8) is ugly;
anything that has a 500-line subroutine is. Then again, many may not
agree.
> That leaves out the tunefs functionality, which begs the question -
> why doesn't newfs have (at least some of) tunefs functionality now? I,
It does. Most of what tunefs can do you can do at newfs time. I
think tunefs(8) was originally created so certain parameters could be
changed without recreating a filesystem.
> for one, would like to be able to enable soft updates on a file system
> when it's created.
There's a good idea! I would too! So, to bring us one step closer to
what we'd like to be able to do, attached is a patch which adds a -g
option to newfs which will enable softupdates (I'd use -n for
consistency with tunefs, but it's taken). I'd appreciate if someone
would test it, but tred lightly; there's no guarnatee that it doesn't
do something weird like disable the "write to permanent media" feature
or something (I'm saying this because I set the default 'flags' to 0,
and I don't know if that's what it should be).
Regards
Dima Dorfman
dima@unixfreak.org
Index: mkfs.c
===================================================================
RCS file: /st/src/FreeBSD/src/sbin/newfs/mkfs.c,v
retrieving revision 1.33
diff -u -r1.33 mkfs.c
--- mkfs.c 2001/01/15 18:30:34 1.33
+++ mkfs.c 2001/02/03 05:30:51
@@ -111,6 +111,7 @@
extern int cpgflg; /* cylinders/cylinder group flag was given */
extern int minfree; /* free space threshold */
extern int opt; /* optimization preference (space or time) */
+extern int flags; /* filesystem flags */
extern int density; /* number of bytes per inode */
extern int maxcontig; /* max contiguous blocks to allocate */
extern int rotdelay; /* rotational delay between blocks */
@@ -652,6 +653,7 @@
sblock.fs_maxbpg = maxbpg;
sblock.fs_rps = rpm / 60;
sblock.fs_optim = opt;
+ sblock.fs_flags = flags;
sblock.fs_cgrotor = 0;
sblock.fs_cstotal.cs_ndir = 0;
sblock.fs_cstotal.cs_nbfree = 0;
Index: newfs.c
===================================================================
RCS file: /st/src/FreeBSD/src/sbin/newfs/newfs.c,v
retrieving revision 1.31
diff -u -r1.31 newfs.c
--- newfs.c 2000/05/31 01:00:51 1.31
+++ newfs.c 2001/02/03 05:30:51
@@ -192,6 +192,7 @@
int cpgflg; /* cylinders/cylinder group flag was given */
int minfree = MINFREE; /* free space threshold */
int opt = DEFAULTOPT; /* optimization preference (space or time) */
+int flags = 0; /* filesystem flags */
int density; /* number of bytes per inode */
int maxcontig = 0; /* max contiguous blocks to allocate */
int rotdelay = ROTDELAY; /* rotational delay between blocks */
@@ -249,7 +250,7 @@
opstring = mfs ?
"NF:T:a:b:c:d:e:f:i:m:o:s:" :
- "NOS:T:a:b:c:d:e:f:i:k:l:m:n:o:p:r:s:t:u:vx:";
+ "NOS:T:a:b:c:d:e:f:gi:k:l:m:n:o:p:r:s:t:u:vx:";
while ((ch = getopt(argc, argv, opstring)) != -1)
switch (ch) {
case 'N':
@@ -296,6 +297,9 @@
case 'f':
if ((fsize = atoi(optarg)) <= 0)
fatal("%s: bad fragment size", optarg);
+ break;
+ case 'g':
+ flags |= FS_DOSOFTDEP;
break;
case 'i':
if ((density = atoi(optarg)) <= 0)
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe cvs-all" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20010203053832.7DE793E02>
