]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
nfsd: make client/ directory names small ints
authorJ. Bruce Fields <bfields@redhat.com>
Thu, 14 Mar 2019 20:20:19 +0000 (16:20 -0400)
committerJ. Bruce Fields <bfields@redhat.com>
Wed, 3 Jul 2019 21:52:50 +0000 (17:52 -0400)
We want clientid's on the wire to be randomized for reasons explained in
ebd7c72c63ac "nfsd: randomize SETCLIENTID reply to help distinguish
servers".  But I'd rather have mostly small integers for the clients/
directory.

Signed-off-by: J. Bruce Fields <bfields@redhat.com>
fs/nfsd/netns.h
fs/nfsd/nfs4state.c
fs/nfsd/nfsctl.c

index ad1d74383d6768e58207a6b25dd2952a1929f828..bdfe5bcb3dcd0430a6a33f0738a41be75eb157dc 100644 (file)
@@ -111,6 +111,7 @@ struct nfsd_net {
         */
        unsigned int max_connections;
 
+       u32 clientid_base;
        u32 clientid_counter;
        u32 clverifier_counter;
 
index 7d8d1fcc8831458a03ee7f943a9fde6dac662b63..8f9747d8452515720e77aeb1471dd9a3e89cc645 100644 (file)
@@ -2242,7 +2242,7 @@ static struct nfs4_client *create_client(struct xdr_netobj name,
        clp->cl_cb_session = NULL;
        clp->net = net;
        clp->cl_nfsd_dentry = nfsd_client_mkdir(nn, &clp->cl_nfsdfs,
-                                               clp->cl_clientid.cl_id);
+                       clp->cl_clientid.cl_id - nn->clientid_base);
        if (!clp->cl_nfsd_dentry) {
                free_client(clp);
                return NULL;
index 5a1920a2de27715c00b34bdf6fc518400e85455d..599d600f0658baab5fdf541ad57c8bb7079879e1 100644 (file)
@@ -1213,7 +1213,7 @@ struct dentry *nfsd_client_mkdir(struct nfsd_net *nn, struct nfsdfs_client *ncl,
 {
        char name[11];
 
-       sprintf(name, "%d", id++);
+       sprintf(name, "%u", id);
 
        return nfsd_mkdir(nn->nfsd_client_dir, ncl, name);
 }
@@ -1352,7 +1352,8 @@ static __net_init int nfsd_init_net(struct net *net)
        nn->somebody_reclaimed = false;
        nn->track_reclaim_completes = false;
        nn->clverifier_counter = prandom_u32();
-       nn->clientid_counter = prandom_u32();
+       nn->clientid_base = prandom_u32();
+       nn->clientid_counter = nn->clientid_base + 1;
        nn->s2s_cp_cl_id = nn->clientid_counter++;
 
        atomic_set(&nn->ntf_refcnt, 0);