[PATCH] nfsd4: slabify delegations
Allocate delegations from a slab cache. Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
5ac049ac66
commit
5b2d21c196
@@ -72,8 +72,6 @@ u32 add_perclient = 0;
|
|||||||
u32 del_perclient = 0;
|
u32 del_perclient = 0;
|
||||||
u32 vfsopen = 0;
|
u32 vfsopen = 0;
|
||||||
u32 vfsclose = 0;
|
u32 vfsclose = 0;
|
||||||
u32 alloc_delegation= 0;
|
|
||||||
u32 free_delegation= 0;
|
|
||||||
|
|
||||||
/* forward declarations */
|
/* forward declarations */
|
||||||
struct nfs4_stateid * find_stateid(stateid_t *stid, int flags);
|
struct nfs4_stateid * find_stateid(stateid_t *stid, int flags);
|
||||||
@@ -91,6 +89,7 @@ static DECLARE_MUTEX(client_sema);
|
|||||||
kmem_cache_t *stateowner_slab = NULL;
|
kmem_cache_t *stateowner_slab = NULL;
|
||||||
kmem_cache_t *file_slab = NULL;
|
kmem_cache_t *file_slab = NULL;
|
||||||
kmem_cache_t *stateid_slab = NULL;
|
kmem_cache_t *stateid_slab = NULL;
|
||||||
|
kmem_cache_t *deleg_slab = NULL;
|
||||||
|
|
||||||
void
|
void
|
||||||
nfs4_lock_state(void)
|
nfs4_lock_state(void)
|
||||||
@@ -138,8 +137,8 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
|
|||||||
struct nfs4_callback *cb = &stp->st_stateowner->so_client->cl_callback;
|
struct nfs4_callback *cb = &stp->st_stateowner->so_client->cl_callback;
|
||||||
|
|
||||||
dprintk("NFSD alloc_init_deleg\n");
|
dprintk("NFSD alloc_init_deleg\n");
|
||||||
if ((dp = kmalloc(sizeof(struct nfs4_delegation),
|
dp = kmem_cache_alloc(deleg_slab, GFP_KERNEL);
|
||||||
GFP_KERNEL)) == NULL)
|
if (dp == NULL)
|
||||||
return dp;
|
return dp;
|
||||||
INIT_LIST_HEAD(&dp->dl_del_perfile);
|
INIT_LIST_HEAD(&dp->dl_del_perfile);
|
||||||
INIT_LIST_HEAD(&dp->dl_del_perclnt);
|
INIT_LIST_HEAD(&dp->dl_del_perclnt);
|
||||||
@@ -164,7 +163,6 @@ alloc_init_deleg(struct nfs4_client *clp, struct nfs4_stateid *stp, struct svc_f
|
|||||||
atomic_set(&dp->dl_count, 1);
|
atomic_set(&dp->dl_count, 1);
|
||||||
list_add(&dp->dl_del_perfile, &fp->fi_del_perfile);
|
list_add(&dp->dl_del_perfile, &fp->fi_del_perfile);
|
||||||
list_add(&dp->dl_del_perclnt, &clp->cl_del_perclnt);
|
list_add(&dp->dl_del_perclnt, &clp->cl_del_perclnt);
|
||||||
alloc_delegation++;
|
|
||||||
return dp;
|
return dp;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,8 +171,7 @@ nfs4_put_delegation(struct nfs4_delegation *dp)
|
|||||||
{
|
{
|
||||||
if (atomic_dec_and_test(&dp->dl_count)) {
|
if (atomic_dec_and_test(&dp->dl_count)) {
|
||||||
dprintk("NFSD: freeing dp %p\n",dp);
|
dprintk("NFSD: freeing dp %p\n",dp);
|
||||||
kfree(dp);
|
kmem_cache_free(deleg_slab, dp);
|
||||||
free_delegation++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1012,6 +1009,7 @@ nfsd4_free_slabs(void)
|
|||||||
nfsd4_free_slab(&stateowner_slab);
|
nfsd4_free_slab(&stateowner_slab);
|
||||||
nfsd4_free_slab(&file_slab);
|
nfsd4_free_slab(&file_slab);
|
||||||
nfsd4_free_slab(&stateid_slab);
|
nfsd4_free_slab(&stateid_slab);
|
||||||
|
nfsd4_free_slab(&deleg_slab);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -1029,6 +1027,10 @@ nfsd4_init_slabs(void)
|
|||||||
sizeof(struct nfs4_stateid), 0, 0, NULL, NULL);
|
sizeof(struct nfs4_stateid), 0, 0, NULL, NULL);
|
||||||
if (stateid_slab == NULL)
|
if (stateid_slab == NULL)
|
||||||
goto out_nomem;
|
goto out_nomem;
|
||||||
|
deleg_slab = kmem_cache_create("nfsd4_delegations",
|
||||||
|
sizeof(struct nfs4_delegation), 0, 0, NULL, NULL);
|
||||||
|
if (deleg_slab == NULL)
|
||||||
|
goto out_nomem;
|
||||||
return 0;
|
return 0;
|
||||||
out_nomem:
|
out_nomem:
|
||||||
nfsd4_free_slabs();
|
nfsd4_free_slabs();
|
||||||
@@ -3312,9 +3314,6 @@ __nfs4_state_shutdown(void)
|
|||||||
add_perclient, del_perclient);
|
add_perclient, del_perclient);
|
||||||
dprintk("NFSD: vfsopen %d vfsclose %d\n",
|
dprintk("NFSD: vfsopen %d vfsclose %d\n",
|
||||||
vfsopen, vfsclose);
|
vfsopen, vfsclose);
|
||||||
dprintk("NFSD: alloc_delegation %d free_delegation %d\n",
|
|
||||||
alloc_delegation, free_delegation);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user