nfsd: Fix memory leak of so_owner.data in nfs4_stateowner
v2, new helper nfs4_free_stateowner for freeing so_owner.data and sop Signed-off-by: Kinglong Mee <kinglongmee@gmail.com> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
This commit is contained in:
parent
47e970bee7
commit
d50ffded79
@ -990,6 +990,12 @@ release_all_access(struct nfs4_ol_stateid *stp)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void nfs4_free_stateowner(struct nfs4_stateowner *sop)
|
||||||
|
{
|
||||||
|
kfree(sop->so_owner.data);
|
||||||
|
sop->so_ops->so_free(sop);
|
||||||
|
}
|
||||||
|
|
||||||
static void nfs4_put_stateowner(struct nfs4_stateowner *sop)
|
static void nfs4_put_stateowner(struct nfs4_stateowner *sop)
|
||||||
{
|
{
|
||||||
struct nfs4_client *clp = sop->so_client;
|
struct nfs4_client *clp = sop->so_client;
|
||||||
@ -1000,8 +1006,7 @@ static void nfs4_put_stateowner(struct nfs4_stateowner *sop)
|
|||||||
return;
|
return;
|
||||||
sop->so_ops->so_unhash(sop);
|
sop->so_ops->so_unhash(sop);
|
||||||
spin_unlock(&clp->cl_lock);
|
spin_unlock(&clp->cl_lock);
|
||||||
kfree(sop->so_owner.data);
|
nfs4_free_stateowner(sop);
|
||||||
sop->so_ops->so_free(sop);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void unhash_ol_stateid(struct nfs4_ol_stateid *stp)
|
static void unhash_ol_stateid(struct nfs4_ol_stateid *stp)
|
||||||
@ -3318,7 +3323,8 @@ alloc_init_open_stateowner(unsigned int strhashval, struct nfsd4_open *open,
|
|||||||
hash_openowner(oo, clp, strhashval);
|
hash_openowner(oo, clp, strhashval);
|
||||||
ret = oo;
|
ret = oo;
|
||||||
} else
|
} else
|
||||||
nfs4_free_openowner(&oo->oo_owner);
|
nfs4_free_stateowner(&oo->oo_owner);
|
||||||
|
|
||||||
spin_unlock(&clp->cl_lock);
|
spin_unlock(&clp->cl_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -5219,7 +5225,8 @@ alloc_init_lock_stateowner(unsigned int strhashval, struct nfs4_client *clp,
|
|||||||
&clp->cl_ownerstr_hashtbl[strhashval]);
|
&clp->cl_ownerstr_hashtbl[strhashval]);
|
||||||
ret = lo;
|
ret = lo;
|
||||||
} else
|
} else
|
||||||
nfs4_free_lockowner(&lo->lo_owner);
|
nfs4_free_stateowner(&lo->lo_owner);
|
||||||
|
|
||||||
spin_unlock(&clp->cl_lock);
|
spin_unlock(&clp->cl_lock);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user