What is the scenario that has multiple clients with the same hostname?
There is a mount option to set a non-uniform client string:
migration / nomigration
Selects whether the client uses an identification
string that is compatible with NFSv4 Transparent State
Migration (TSM). If the mounted server supports NFSv4
migration with TSM, specify the migration option.
Some server features misbehave in the face of a
migration-compatible identification string. The
nomigration option retains the use of a traditional
client indentification string which is compatible with
legacy NFS servers. This is also the behavior if
neither option is specified. A client's open and lock
state cannot be migrated transparently when it
identifies itself via a traditional identification
string.
This mount option has no effect with NFSv4 minor
versions newer than zero, which always use TSM-
compatible client identification strings.
This option makes the client use one of the first two string generators below:
fs/nfs/nfs4proc.c nfs4_init_nonuniform_client_string 5653 scnprintf(str, len, "Linux NFSv4.0 %s/%s/%s",
fs/nfs/nfs4proc.c:5653: scnprintf(str, len, "Linux NFSv4.0 %s/%s/%s", clp->cl_rpcclient->cl_nodename, nfs4_client_id_uniquifier, rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR));
fs/nfs/nfs4proc.c nfs4_init_nonuniform_client_string 5659 scnprintf(str, len, "Linux NFSv4.0 %s/%s",
fs/nfs/nfs4proc.c:5659: scnprintf(str, len, "Linux NFSv4.0 %s/%s", clp->cl_rpcclient->cl_nodename, rpc_peeraddr2str(clp->cl_rpcclient, RPC_DISPLAY_ADDR));
fs/nfs/nfs4proc.c nfs4_init_uniquifier_client_string 5691 scnprintf(str, len, "Linux NFSv%u.%u %s/%s",
fs/nfs/nfs4proc.c:5691: scnprintf(str, len, "Linux NFSv%u.%u %s/%s", clp->rpc_ops->version, clp->cl_minorversion, nfs4_client_id_uniquifier, clp->cl_rpcclient->cl_nodename);
THIS ONE:
fs/nfs/nfs4proc.c nfs4_init_uniform_client_string 5726 scnprintf(str, len, "Linux NFSv%u.%u %s",
fs/nfs/nfs4proc.c:5726: scnprintf(str, len, "Linux NFSv%u.%u %s", clp->rpc_ops->version, clp->cl_minorversion, clp->cl_rpcclient->cl_nodename);
I don’t know if those will help at all.
I would be reluctant to force use of the client IP address as part of the client identifier on Ganesha. If that’s really necessary, maybe we can make a config option to enable that?
Frank
From: Sriram Patil [mailto:sriramp@vmware.com]
Sent: Wednesday, March 6, 2019 2:38 PM
To: devel@lists.nfs-ganesha.org
Cc: Frank Filz <ffilzlnx@mindspring.com>
Subject: Client owner collisions
Hi,
The client owner generation logic on knfs client is very simple and tries to differentiate on the basis of NFS version and hostname. Here’s a snippet,
scnprintf(str, len, "Linux NFSv%u.%u %s",
clp->rpc_ops->version, clp->cl_minorversion,
clp->cl_rpcclient->cl_nodename);
clp->cl_owner_id = str;
This causes a problem in ganesha in case there are multiple clients connecting to ganesha with same hostname using same NFS version. When comparing client owners, ganesha only takes the client owner from the NFS client into consideration. But if we consider client owner and client IP address to decide if it is the same client before expiring the state, it will treat them as different clients and avoid unnecessary expiry.
Any thoughts?
Thanks,
Sriram