Re: RFC: nfsd in a vnet jail
- Reply: Bjoern A. Zeeb: "Re: RFC: nfsd in a vnet jail"
- In reply to: Rick Macklem : "Re: RFC: nfsd in a vnet jail"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Mon, 19 Dec 2022 16:59:48 UTC
Hi, Kostik expressed some concern w.r.t. using a non-default VNET_NFSD kernel build option and I understand his concern, given that many prefer to use a GENERIC kernel and binary updates. Right now there are 29 NFS variables VNET_DEFINED() and several of them are arrays currently sized at 500. One of the reasons for the non-default VNET_NFSD kernel option was the bloat this caused to the vnet. (Chris <bsd-lists@bsdforge.com> expressed concern that adding mountd/nfsd to the vnet would result in bloat/overhead in a previous post to this thread.) Another issue with putting all these variables in the vnet is that the nfsd.ko cannot be loaded (it complains the vnet is out of space) and, as such, options NFSD must be used with VNET_NFSD so that the nfsd is linked into the kernel. As such, I am wondering what others think of this alternate plan? - Pull all the VNET_DEFINE()'d variable (except the 3 manipulated by sysctls) into a structure. - Define a single VNET_DEFINE()'d variable that is a pointer to that structure and then malloc() the structure in the function called by VNET_SYSINIT(). This would result in a malloc'd structure for each vnet jail (for kernels built with VMIMAGE), but would only add 4 variables to the vnet. If a small C file that only consists of the VNET_DEFINE()s for the 4 variables is linked into the kernel whenever the VIMAGE option is specified, then I think nfsd.ko would be loadable. Unfortunately, this does not deal with vnet'ng the kgssapi, rpcsec_gss for Kerberized mounts or vnet'ng NFS-over-TLS, but those could be handled in a similar manner, I think? So, what do others think of this alternate plan? rick ps: Every use of the vnet'd variables is currently wrapped in a macro called NFSD_VNET(), so the change is pretty easy to do by just re-writing this macro.