9front - general discussion about 9front
 help / color / mirror / Atom feed
From: ori@eigenstate.org
To: 9front@9front.org
Subject: Re: [9front] ramfs usage
Date: Wed, 19 Jun 2024 16:36:29 -0400	[thread overview]
Message-ID: <6CAF33B7FE1F7FEF16D4C5EFD83514A5@eigenstate.org> (raw)
In-Reply-To: <317F730505EE7FCCC0697ACCEFECC36F@smtp.pobox.com>

Hm. I'll talke a look at this; I wonder if it's too late
to clean up the interaction of the flags. Probably :(

Quoth me+unobe@fallglow.com:
> 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;


  parent reply	other threads:[~2024-06-19 20:39 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-16 22:03 me+unobe
2024-05-16 22:19 ` Romano
2024-06-18 17:59   ` Romano
2024-06-19 20:36 ` ori [this message]
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=6CAF33B7FE1F7FEF16D4C5EFD83514A5@eigenstate.org \
    --to=ori@eigenstate.org \
    --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).