Support dynamically created NFS-root filesystems for admin MFS.
Significant hackary involved. Similar to exports_setup, there is a boss-side script and an ops-side script to handle creation and destruction of the ZFS clones that are used for the NFS filesystem. The rest was all about when to invoke said scripts. Creation is easy, we just do a clone whenever the TBAdminMfsSelect is called to "turn on" node admin mode. Destruction is not so simple. If we destroyed the clone on the corresponding TBAdminMfsSelect "off" call, then we could yank the filesystem out from under the node if it was still running in the MFS (e.g., "node_admin -n off node"). While that would probably be okay in most uses, where at worst we would have to apod or power cycle the node, we try to do better. TBAdminMfsSelect "off" instead just renames the clone (to "<nodeid>-DEAD") so that it stays available if the node is running on it at the time, but ensures that it will not get accidentally used by any future boot. We check for, and destroy, any previous versions for a node every time we invoke the nfsmfs_setup code for that node. We also destroy live or dead clones whenever we call nfree. This ensures that all MFSes get cleaned up at experiment swapout time.
Showing with 646 additions and 35 deletions