plumbunmount
diff --git a/man/man3/plumb.3 b/man/man3/plumb.3
index 970919a..fa78a2b 100644
--- a/man/man3/plumb.3
+++ b/man/man3/plumb.3
@@ -1,6 +1,6 @@
.TH PLUMB 3
.SH NAME
-eplumb, plumbfree, plumbopen, plumbopenfid, plumbsend, plumbsendtofid, plumbsendtext, plumblookup, plumbpack, plumbpackattr, plumbaddattr, plumbdelattr, plumbrecv, plumbrecvfid, plumbunpack, plumbunpackpartial, plumbunpackattr, Plumbmsg \- plumb messages
+eplumb, plumbfree, plumbopen, plumbunmount, plumbopenfid, plumbsend, plumbsendtofid, plumbsendtext, plumblookup, plumbpack, plumbpackattr, plumbaddattr, plumbdelattr, plumbrecv, plumbrecvfid, plumbunpack, plumbunpackpartial, plumbunpackattr, Plumbmsg \- plumb messages
.SH SYNOPSIS
.B #include <u.h>
.br
@@ -14,6 +14,9 @@
int plumbopen(char *port, int omode)
.PP
.B
+int plumbunmount(void)
+.PP
+.B
int plumbsend(int fd, Plumbmsg *m)
.PP
.B
@@ -117,6 +120,18 @@
receipt of messages from the named
.IR port .
.PP
+The library mounts the
+.IR plumber (4)
+service on demand (using the
+.IR 9pclient (3))
+library and reuses the mount instance for future
+calls to
+.IR plumbopen .
+.I Plumbunmount
+causes the library to discard its cached mount.
+This can be useful if the plumber service itself has been
+restarted and a client wishes to reconnect.
+.PP
.I Plumbsend
formats and writes message
.I m
diff --git a/src/libplumb/fid.c b/src/libplumb/fid.c
index cea5ce0..ec133c8 100644
--- a/src/libplumb/fid.c
+++ b/src/libplumb/fid.c
@@ -9,6 +9,19 @@
static CFid *pfid;
int
+plumbunmount(void)
+{
+ CFsys *fsys;
+
+ if(fsplumb){
+ fsys = fsplumb;
+ fsplumb = nil;
+ fsunmount(fsys);
+ }
+ return 0;
+}
+
+int
plumbopen(char *name, int omode)
{
if(fsplumb == nil)