Commit 50c790a0 authored by Benjamin Coddington's avatar Benjamin Coddington Committed by Trond Myklebust

NFSv4: use unique client identifiers in network namespaces

In order to differentiate client state, assign a random uuid to the
uniquifing portion of the client identifier when a network namespace is
created.  Containers may still override this value if they wish to maintain
stable client identifiers by writing to /sys/fs/nfs/net/client/identifier,
either by udev rules or other means.
Signed-off-by: default avatarBenjamin Coddington <bcodding@redhat.com>
Signed-off-by: default avatarTrond Myklebust <trond.myklebust@hammerspace.com>
parent 43245eca
...@@ -151,6 +151,18 @@ static struct kobj_type nfs_netns_client_type = { ...@@ -151,6 +151,18 @@ static struct kobj_type nfs_netns_client_type = {
.namespace = nfs_netns_client_namespace, .namespace = nfs_netns_client_namespace,
}; };
static void assign_unique_clientid(struct nfs_netns_client *clp)
{
unsigned char client_uuid[16];
char *uuid_str = kmalloc(UUID_STRING_LEN + 1, GFP_KERNEL);
if (uuid_str) {
generate_random_uuid(client_uuid);
sprintf(uuid_str, "%pU", client_uuid);
rcu_assign_pointer(clp->identifier, uuid_str);
}
}
static struct nfs_netns_client *nfs_netns_client_alloc(struct kobject *parent, static struct nfs_netns_client *nfs_netns_client_alloc(struct kobject *parent,
struct net *net) struct net *net)
{ {
...@@ -158,6 +170,8 @@ static struct nfs_netns_client *nfs_netns_client_alloc(struct kobject *parent, ...@@ -158,6 +170,8 @@ static struct nfs_netns_client *nfs_netns_client_alloc(struct kobject *parent,
p = kzalloc(sizeof(*p), GFP_KERNEL); p = kzalloc(sizeof(*p), GFP_KERNEL);
if (p) { if (p) {
if (net != &init_net)
assign_unique_clientid(p);
p->net = net; p->net = net;
p->kobject.kset = nfs_client_kset; p->kobject.kset = nfs_client_kset;
if (kobject_init_and_add(&p->kobject, &nfs_netns_client_type, if (kobject_init_and_add(&p->kobject, &nfs_netns_client_type,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment