X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fexportfs%2Fexportfs.c;h=936dff5cebec56d140028b4af98aa29948a5030d;hp=4c04098e1579475a5f66b5314872db308c599f41;hb=2d33968c66860ad772aac918992986fe4865b3a4;hpb=37e49789ab1cd849def25ba4c4d97ccdb11d1e61 diff --git a/utils/exportfs/exportfs.c b/utils/exportfs/exportfs.c index 4c04098..936dff5 100644 --- a/utils/exportfs/exportfs.c +++ b/utils/exportfs/exportfs.c @@ -42,10 +42,14 @@ main(int argc, char **argv) int f_reexport = 0; int f_ignore = 0; int i, c; + int new_cache = 0; + int force_flush = 0; xlog_open("exportfs"); - while ((c = getopt(argc, argv, "aio:ruv")) != EOF) { + export_errno = 0; + + while ((c = getopt(argc, argv, "aio:ruvf")) != EOF) { switch(c) { case 'a': f_all = 1; @@ -66,6 +70,9 @@ main(int argc, char **argv) case 'v': f_verbose = 1; break; + case 'f': + force_flush = 1; + break; default: usage(); break; @@ -90,6 +97,8 @@ main(int argc, char **argv) return 0; } + new_cache = check_new_cache(); + if (f_export && ! f_ignore) export_read(_PATH_EXPORTS); if (f_export) { @@ -114,12 +123,17 @@ main(int argc, char **argv) unexportfs(argv[i], f_verbose); rmtab_read(); } - xtab_mount_read(); - exports_update(f_verbose); + if (!new_cache) { + xtab_mount_read(); + exports_update(f_verbose); + } xtab_export_write(); - xtab_mount_write(); + if (new_cache) + cache_flush(force_flush); + if (!new_cache) + xtab_mount_write(); - return 0; + return export_errno; } /* we synchronise intention with reality. @@ -206,6 +220,7 @@ exportfs(char *arg, char *options, int verbose) } else hp = hp2; exp = export_find(hp, path); + hname = hp->h_name; } else { exp = export_lookup(hname, path, 0); } @@ -264,19 +279,22 @@ unexportfs(char *arg, int verbose) hname))) continue; if (verbose) { +#if 0 if (exp->m_exported) { printf("unexporting %s:%s from kernel\n", exp->m_client->m_hostname, exp->m_export.e_path); } - else { + else +#endif printf("unexporting %s:%s\n", exp->m_client->m_hostname, exp->m_export.e_path); - } } +#if 0 if (exp->m_exported && !export_unexport(exp)) error(exp, errno); +#endif exp->m_xtabent = 0; exp->m_mayexport = 0; } @@ -330,8 +348,10 @@ dump(int verbose) c = dumpopt(c, "async"); if (ep->e_flags & NFSEXP_GATHERED_WRITES) c = dumpopt(c, "wdelay"); - if (ep->e_flags & NFSEXP_CROSSMNT) + if (ep->e_flags & NFSEXP_NOHIDE) c = dumpopt(c, "nohide"); + if (ep->e_flags & NFSEXP_CROSSMNT) + c = dumpopt(c, "crossmnt"); if (ep->e_flags & NFSEXP_INSECURE_PORT) c = dumpopt(c, "insecure"); if (ep->e_flags & NFSEXP_ROOTSQUASH) @@ -344,6 +364,8 @@ dump(int verbose) c = dumpopt(c, "no_subtree_check"); if (ep->e_flags & NFSEXP_NOAUTHNLM) c = dumpopt(c, "insecure_locks"); + if (ep->e_flags & NFSEXP_FSID) + c = dumpopt(c, "fsid=%d", ep->e_fsid); if (ep->e_maptype == CLE_MAP_UGIDD) c = dumpopt(c, "mapping=ugidd"); else if (ep->e_maptype == CLE_MAP_FILE)