nfsd4: clean up session allocation
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
1377b69e68
commit
a827bcb242
|
@ -758,7 +758,7 @@ static void nfsd4_put_drc_mem(int slotsize, int num)
|
|||
spin_unlock(&nfsd_drc_lock);
|
||||
}
|
||||
|
||||
static struct nfsd4_session *alloc_session(int slotsize, int numslots)
|
||||
static struct nfsd4_session *__alloc_session(int slotsize, int numslots)
|
||||
{
|
||||
struct nfsd4_session *new;
|
||||
int mem, i;
|
||||
|
@ -921,14 +921,10 @@ void nfsd4_put_session(struct nfsd4_session *ses)
|
|||
spin_unlock(&client_lock);
|
||||
}
|
||||
|
||||
static struct nfsd4_session *alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp, struct nfsd4_create_session *cses)
|
||||
static struct nfsd4_session *alloc_session(struct nfsd4_channel_attrs *fchan)
|
||||
{
|
||||
struct nfsd4_session *new;
|
||||
struct nfsd4_conn *conn;
|
||||
struct nfsd4_channel_attrs *fchan = &cses->fore_channel;
|
||||
int numslots, slotsize;
|
||||
int idx;
|
||||
|
||||
/*
|
||||
* Note decreasing slot size below client's request may
|
||||
* make it difficult for client to function correctly, whereas
|
||||
|
@ -941,13 +937,30 @@ static struct nfsd4_session *alloc_init_session(struct svc_rqst *rqstp, struct n
|
|||
if (numslots < 1)
|
||||
return NULL;
|
||||
|
||||
new = alloc_session(slotsize, numslots);
|
||||
new = __alloc_session(slotsize, numslots);
|
||||
if (!new) {
|
||||
nfsd4_put_drc_mem(slotsize, fchan->maxreqs);
|
||||
return NULL;
|
||||
}
|
||||
init_forechannel_attrs(&new->se_fchannel, fchan, numslots, slotsize);
|
||||
return new;
|
||||
}
|
||||
|
||||
static struct nfsd4_session *alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp, struct nfsd4_create_session *cses)
|
||||
{
|
||||
struct nfsd4_session *new;
|
||||
struct nfsd4_conn *conn;
|
||||
int idx;
|
||||
|
||||
new = alloc_session(&cses->fore_channel);
|
||||
if (!new)
|
||||
return NULL;
|
||||
|
||||
conn = alloc_conn_from_crses(rqstp, cses);
|
||||
if (!conn) {
|
||||
__free_session(new);
|
||||
return NULL;
|
||||
}
|
||||
new->se_client = clp;
|
||||
gen_sessionid(new);
|
||||
|
||||
|
@ -965,11 +978,6 @@ static struct nfsd4_session *alloc_init_session(struct svc_rqst *rqstp, struct n
|
|||
spin_unlock(&clp->cl_lock);
|
||||
spin_unlock(&client_lock);
|
||||
|
||||
conn = alloc_conn_from_crses(rqstp, cses);
|
||||
if (!conn) {
|
||||
__free_session(new);
|
||||
return NULL;
|
||||
}
|
||||
nfsd4_init_conn(rqstp, conn, new);
|
||||
if (cses->flags & SESSION4_BACK_CHAN) {
|
||||
struct sockaddr *sa = svc_addr(rqstp);
|
||||
|
|
Loading…
Reference in New Issue