> On Oct 7, 2020, at 10:05 AM, Bruce Fields <bfields@xxxxxxxxxxxx> wrote: > > On Wed, Oct 07, 2020 at 09:45:50AM -0400, Chuck Lever wrote: >> >> >>> On Oct 7, 2020, at 8:55 AM, Benjamin Coddington <bcodding@xxxxxxxxxx> wrote: >>> >>> On 7 Oct 2020, at 7:27, Benjamin Coddington wrote: >>> >>>> On 6 Oct 2020, at 20:18, J. Bruce Fields wrote: >>>> >>>>> On Tue, Oct 06, 2020 at 05:46:11PM -0400, Olga Kornievskaia wrote: >>>>>> On Tue, Oct 6, 2020 at 3:38 PM Benjamin Coddington <bcodding@xxxxxxxxxx> wrote: >>>>>>> >>>>>>> On 6 Oct 2020, at 11:13, J. Bruce Fields wrote: >>> >>>>> Looks like nfs4_init_{non}uniform_client_string() stores it in >>>>> cl_owner_id, and I was thinking that meant cl_owner_id would be used >>>>> from then on.... >>>>> >>>>> But actually, I think it may run that again on recovery, yes, so I bet >>>>> changing the nfs4_unique_id parameter midway like this could cause bugs >>>>> on recovery. >>>> >>>> Ah, that's what I thought as well. Thanks for looking closer Olga! >>> >>> Well, no -- it does indeed continue to use the original cl_owner_id. We >>> only jump through nfs4_init_uniquifier_client_string() if cl_owner_id is >>> NULL: >>> >>> 6087 static int >>> 6088 nfs4_init_uniform_client_string(struct nfs_client *clp) >>> 6089 { >>> 6090 size_t len; >>> 6091 char *str; >>> 6092 >>> 6093 if (clp->cl_owner_id != NULL) >>> 6094 return 0; >>> 6095 >>> 6096 if (nfs4_client_id_uniquifier[0] != '\0') >>> 6097 return nfs4_init_uniquifier_client_string(clp); >>> 6098 >>> >>> >>> Testing proves this out as well for both EXCHANGE_ID and SETCLIENTID. >>> >>> Is there any precedent for stabilizing module parameters as part of a >>> supported interface? Maybe this ought to be a mount option, so client can >>> set a uniquifier per-mount. >> >> The protocol is designed as one client-ID per client. FreeBSD is >> the only client I know of that uses one client-ID per mount, fwiw. >> >> You are suggesting each mount point would have its own lease. There >> would likely be deeper implementation changes needed than just >> specifying a unique client-ID for each mount point. > > Huh, I thought that should do it. > > Do you have something specific in mind? The relationship between nfs_client and nfs_server structs comes to mind. Trunking discovery has been around for several years. This is the first report I've heard of a performance regression. We do know that nconnect helps relieve head-of-line blocking on TCP. I think adding a second socket would be a very easy thing to try and wouldn't have any NFSv4 state recovery ramifications. -- Chuck Lever