lib9p: Remove postmountsrv (#505)

This commit is contained in:
Ben Huntsman 2021-08-08 11:03:02 -07:00 committed by Dan Cross
parent aa01c23be6
commit 385a6d5877
7 changed files with 3 additions and 127 deletions

View file

@ -219,7 +219,6 @@ struct Srv {
}; };
void srv(Srv*); void srv(Srv*);
void postmountsrv(Srv*, char*, char*, int);
int postfd(char*, int); int postfd(char*, int);
extern int chatty9p; extern int chatty9p;
void respond(Req*, char*); void respond(Req*, char*);

View file

@ -19153,7 +19153,6 @@ posted /usr/local/plan9/man/man4/plumber.4
posted /usr/local/plan9/man/man9/0intro.9p posted /usr/local/plan9/man/man9/0intro.9p
postfd /usr/local/plan9/man/man3/9p.3 postfd /usr/local/plan9/man/man3/9p.3
postmark /usr/local/plan9/man/man1/bundle.1 postmark /usr/local/plan9/man/man1/bundle.1
postmountsrv /usr/local/plan9/man/man3/9p.3
postnote /usr/local/plan9/man/man3/notify.3 postnote /usr/local/plan9/man/man3/notify.3
postnote /usr/local/plan9/man/man3/postnote.3 postnote /usr/local/plan9/man/man3/postnote.3
postnote /usr/local/plan9/man/man3/rfork.3 postnote /usr/local/plan9/man/man3/rfork.3

View file

@ -6,7 +6,6 @@ emalloc9p,
erealloc9p, erealloc9p,
estrdup9p, estrdup9p,
postfd, postfd,
postmountsrv,
readbuf, readbuf,
readstr, readstr,
respond, respond,
@ -61,7 +60,6 @@ typedef struct Srv {
.ft L .ft L
.ta \w'\fLvoid* 'u .ta \w'\fLvoid* 'u
int srv(Srv *s) int srv(Srv *s)
void postmountsrv(Srv *s, char *name, char *mtpt, int flag)
void threadpostmountsrv(Srv *s, char *name, char *mtpt, int flag) void threadpostmountsrv(Srv *s, char *name, char *mtpt, int flag)
int postfd(char *srvname, int fd) int postfd(char *srvname, int fd)
void respond(Req *r, char *error) void respond(Req *r, char *error)
@ -96,8 +94,6 @@ and
writing the responses to writing the responses to
.BR s->outfd . .BR s->outfd .
(Typically, (Typically,
.I postmountsrv
or
.I threadpostmountsrv .I threadpostmountsrv
initializes the initializes the
.B infd .B infd
@ -148,12 +144,10 @@ but abort the program if they run out of memory.
If alternate behavior is desired, clients can link against If alternate behavior is desired, clients can link against
alternate implementations of these functions. alternate implementations of these functions.
.PP .PP
.I Postmountsrv
and
.I threadpostmountsrv .I threadpostmountsrv
are wrappers that create a separate process in which to run is a wrapper that creates a separate process in which to run
.IR srv . .IR srv .
They do the following: It does the following:
.IP .IP
If If
.IB s -> nopipe .IB s -> nopipe
@ -296,9 +290,7 @@ the service functions.
The service loop provided by The service loop provided by
.I srv .I srv
(and indirectly by (and indirectly by
.I postmountsrv .I threadpostmountsrv )
and
.IR threadpostmountsrv )
is single-threaded. is single-threaded.
If it is expected that some requests might If it is expected that some requests might
block, arranging for alternate processes block, arranging for alternate processes

View file

@ -50,7 +50,6 @@ emalloc9p 9p.3
erealloc9p 9p.3 erealloc9p 9p.3
estrdup9p 9p.3 estrdup9p 9p.3
postfd 9p.3 postfd 9p.3
postmountsrv 9p.3
readbuf 9p.3 readbuf 9p.3
readstr 9p.3 readstr 9p.3
respond 9p.3 respond 9p.3

View file

@ -1,77 +0,0 @@
#include <u.h>
#include <libc.h>
#include <fcall.h>
#include <thread.h>
#include <9p.h>
#include "post.h"
Postcrud*
_post1(Srv *s, char *name, char *mtpt, int flag)
{
Postcrud *p;
p = emalloc9p(sizeof *p);
if(!s->nopipe){
if(pipe(p->fd) < 0)
sysfatal("pipe: %r");
s->infd = s->outfd = p->fd[1];
s->srvfd = p->fd[0];
}
if(name)
if(postfd(name, s->srvfd) < 0)
sysfatal("postfd %s: %r", name);
p->s = s;
p->mtpt = mtpt;
p->flag = flag;
return p;
}
void
_post2(void *v)
{
Srv *s;
s = v;
if(!s->leavefdsopen){
rfork(RFNOTEG);
rendezvous((ulong)s, 0);
close(s->srvfd);
}
srv(s);
}
void
_post3(Postcrud *p)
{
/*
* Normally the server is posting as the last thing it does
* before exiting, so the correct thing to do is drop into
* a different fd space and close the 9P server half of the
* pipe before trying to mount the kernel half. This way,
* if the file server dies, we don't have a ref to the 9P server
* half of the pipe. Then killing the other procs will drop
* all the refs on the 9P server half, and the mount will fail.
* Otherwise the mount hangs forever.
*
* Libthread in general and acme win in particular make
* it hard to make this fd bookkeeping work out properly,
* so leaveinfdopen is a flag that win sets to opt out of this
* safety net.
*/
if(!p->s->leavefdsopen){
rfork(RFFDG);
rendezvous((ulong)p->s, 0);
close(p->s->infd);
if(p->s->infd != p->s->outfd)
close(p->s->outfd);
}
#if 0
if(p->mtpt){
if(amount(p->s->srvfd, p->mtpt, p->flag, "") == -1)
sysfatal("mount %s: %r", p->mtpt);
}else
#endif
close(p->s->srvfd);
free(p);
}

View file

@ -1,23 +0,0 @@
#include <u.h>
#include <libc.h>
#include <fcall.h>
#include <thread.h>
#include <9p.h>
#include "post.h"
void
postmountsrv(Srv *s, char *name, char *mtpt, int flag)
{
Postcrud *p;
p = _post1(s, name, mtpt, flag);
switch(rfork(RFPROC|RFNOTEG|RFNAMEG|RFMEM)){
case -1:
sysfatal("rfork: %r");
case 0:
_post2(s);
exits(nil);
default:
_post3(p);
}
}

View file

@ -1,13 +0,0 @@
typedef struct Postcrud Postcrud;
struct Postcrud
{
int fd[2];
Srv *s;
char *name;
char *mtpt;
int flag;
};
Postcrud *_post1(Srv*, char*, char*, int);
void _post2(void*);
void _post3(Postcrud*);