• Jeff Layton's avatar
    nfs: make nfs4_init_nonuniform_client_string use a dynamically allocated buffer · a3192688
    Jeff Layton authored
    The way the *_client_string functions work is a little goofy. They build
    the string in an on-stack buffer and then use kstrdup to copy it. This
    is not only stack-heavy but artificially limits the size of the client
    name string. Change it so that we determine the length of the string,
    allocate it and then scnprintf into it.
    
    Since the contents of the nonuniform string depend on rcu-managed data
    structures, it's possible that they'll change between when we allocate
    the string and when we go to fill it. If that happens, free the string,
    recalculate the length and try again. If it the mismatch isn't resolved
    on the second try then just give up and return -EINVAL.
    Signed-off-by: default avatarJeff Layton <jeff.layton@primarydata.com>
    Signed-off-by: default avatarTrond Myklebust <trond.myklebust@primarydata.com>
    a3192688
nfs4proc.c 235 KB