9front - general discussion about 9front
 help / color / mirror / Atom feed
From: me+unobe@fallglow.com
To: 9front@9front.org
Subject: [9front] ramfs usage
Date: Thu, 16 May 2024 15:03:10 -0700	[thread overview]
Message-ID: <317F730505EE7FCCC0697ACCEFECC36F@smtp.pobox.com> (raw)

I was looking at ramfs and noticed that the ordering of some flags
provided inconsistent behavior.  For example:

    cpu% ramfs -s -m /n/foo
    cpu% cpu% ls -l /n
    d-rwxrwxrwx M 83820 david david 0 May 16 12:29 /n/foo
    cpu% ramfs -m /n/boo -s
    cpu% ls -l /n
    d-rwxrwxrwx M 83788 david david 0 May 16 12:29 /n/foo
	cpu%

To address this, I think that -m should always add a mountpoint,
unless -i is used.

I also noticed that:

 * a few of the (non-debugging) flags were not documented in the man
 page: -b, -a, and -c to set the mount flags.

 * -i is mutually exclusive with -s, -S, and -m, -b, -a, and -c but
 that isn't clearly spelled out.  If -s, -S, and -m are used together,
 that seems like a fatal error to me, but if -b, -a, -c are used, that
 is an ignorable error that can be mentioned on stderr. For instance:

    cpu% ramfs -i -b
    mount flags ignored when using -i: 
	cpu% ramfs -s -i
    ramfs: -i cannot be used with -s, -S, or -m flag
	cpu% 

 * A sysfatal() error would never happen because mtpt is always
 defined when srvname is not, and vice versa, because mtpt is set by
 default and only unset when srvname is set.

I offer the attached patch for consideration.

From: Romano <me+git@fallglow.com>
Date: Thu, 16 May 2024 21:52:36 +0000
Subject: [PATCH] ramfs: document usage and provide clearer usage errors


Allow -m to be used to set mountpoint when used with -s and -S,
of ordering. Document flags -b, -a, and -c; document interaction
between certain flags, and raise errors when mis-use occurs.
---
diff 7089a0e8dc50d86dce93176d284e23f82e5d2bdf 0b55b43b99d97129a0ca0731243d1edc7bbbb6ae
--- a/sys/man/4/ramfs
+++ b/sys/man/4/ramfs
@@ -4,7 +4,7 @@
 .SH SYNOPSIS
 .B ramfs
 [
-.B -Dipsu
+.B -Dipsubac
 ]
 [
 .B -m
@@ -15,30 +15,50 @@
 .I srvname
 ]
 .SH DESCRIPTION
+.PP
 .I Ramfs
-starts a process that mounts itself (see
-.IR bind (2))
-on
-.I mountpoint
-(default
-.BR /tmp ).
+implements a file tree which keeps all files in memory.
+Initially the file tree is empty.
+.PP
 The
 .I ramfs
-process implements a file tree rooted at
-.IR dir ,
-keeping all files in memory.
-Initially the file tree is empty.
+process mounts the
+.IR mountpoint (or
+.B /tmp ,
+if not provided)
+with the mount flags
+.B MREPL and
+.B MCREATE .
+The mount flags can be set explicitly
+using
+.B -b ,
+.B -a , and
+.B -c ,
+corresponding respectively to the flags
+.B MBEFORE ,
+.B MAFTER , or
+.B MCREATE (see
+.IR bind(2)).
 .PP
 The
-.B -D
-option enables a trace of general debugging messages.
+.B -p
+flag causes
+.I ramfs
+to make its memory `private'
+(see
+.IR proc (3))
+so that its files are not accessible through the debugging interface.
 .PP
 The
+.B -D
+flag enables a trace of general debugging messages.
+.PP
 .B -i
 flag tells
 .I ramfs
 to use file descriptors 0 and 1 for its communication channel
-rather than create a pipe.
+rather than create a pipe or mount at
+.IR mountpoint .
 This makes it possible to use
 .I ramfs
 as a file server on a remote machine: the file descriptors 0
@@ -47,15 +67,6 @@
 to the client machine.
 .PP
 The
-.B -p
-flag causes
-.I ramfs
-to make its memory `private'
-(see
-.IR proc (3))
-so that its files are not accessible through the debugging interface.
-.PP
-The
 .B -s
 .RB ( -S )
 flag causes
@@ -62,17 +73,26 @@
 .I ramfs
 to post its channel on
 .B /srv/ramfs
-.RB ( /srv/ \fIsrvname\fR)
-rather than mounting it on
-.IR mountpoint ,
+.RB ( /srv/ \fIsrvname\fR) ,
 enabling multiple clients to access its files.
-However, it does not authenticate its clients and its
+The flag also causes
+.I ramfs
+to not use the default
+.IR mountpoint
+.B /tmp ,
+however it will use the mountpoint
+.IR mountpoint
+explicit;y set using the
+.B -m
+flag.
+.I Ramfs
+does not authenticate its clients and its
 implementation of groups is simplistic, so
 it should not be used for precious data.
 .PP
 The
 .B -u
-option permits
+flag permits
 .I ramfs
 to consume as much memory as needed;
 without it,
@@ -86,4 +106,5 @@
 .SH SOURCE
 .B /sys/src/cmd/ramfs.c
 .SH "SEE ALSO"
-.IR bind (2)
+.IR bind (2) ,
+.IR proc (3)
--- a/sys/src/cmd/ramfs.c
+++ b/sys/src/cmd/ramfs.c
@@ -455,27 +455,40 @@
 {
 	char *srvname = nil;
 	char *mtpt = "/tmp";
-	int mountflags, stdio;
+	int marg, mountflags, stdio;
 
 	fs.tree = alloctree(nil, nil, DMDIR|0777, fsdestroyfile);
 
-	mountflags = stdio = 0;
+	marg = mountflags = stdio = 0;
 	ARGBEGIN{
 	case 'D':
 		chatty9p++;
 		break;
 	case 's':
+		if(stdio)
+			sysfatal("-s cannot be used with -i flag");
 		srvname = "ramfs";
-		mtpt = nil;
+		if(marg == 0)
+			mtpt = nil;
 		break;
 	case 'S':
+		if(stdio)
+			sysfatal("-S cannot be used with -i flag");
+		if(srvname)
+			sysfatal("-s cannot be used with -S");
 		srvname = EARGF(usage());
-		mtpt = nil;
+		if(marg == 0)
+			mtpt = nil;
 		break;
 	case 'm':
+		if(stdio)
+			sysfatal("-m cannot be used with -i flag");
 		mtpt = EARGF(usage());
+		marg = 1;
 		break;
 	case 'i':
+		if(srvname || marg)
+			sysfatal("-i cannot be used with -s, -S, or -m flag");
 		stdio = 1;
 		break;
 	case 'p':
@@ -500,14 +513,14 @@
 		usage();
 
 	if(stdio){
+		if(mountflags)
+			perror("mount flags ignored when using -i");
+
 		fs.infd = 0;
 		fs.outfd = 1;
 		srv(&fs);
 		exits(0);
 	}
-
-	if(srvname == nil && mtpt == nil)
-		sysfatal("must specify -S, or -m option");
 
 	if(mountflags == 0)
 		mountflags = MREPL | MCREATE;

             reply	other threads:[~2024-05-16 22:04 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-16 22:03 me+unobe [this message]
2024-05-16 22:19 ` Romano
2024-06-18 17:59   ` Romano
2024-06-19 20:36 ` ori
2024-06-19 21:21   ` Jacob Moody
2024-06-20  4:43     ` Romano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=317F730505EE7FCCC0697ACCEFECC36F@smtp.pobox.com \
    --to=me+unobe@fallglow.com \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).