kernel: Use hashdestroy() to free hash tables allocated with hashinit().
authorSascha Wildner <saw@online.de>
Thu, 7 Jun 2012 17:19:09 +0000 (19:19 +0200)
committerSascha Wildner <saw@online.de>
Thu, 7 Jun 2012 17:19:32 +0000 (19:19 +0200)
It asserts that the table is empty before kfree()ing it.

sys/kern/kern_event.c
sys/kern/vfs_sync.c
sys/netinet/sctp_pcb.c
sys/vfs/fdesc/fdesc_vnops.c
sys/vfs/hpfs/hpfs.h
sys/vfs/hpfs/hpfs_hash.c
sys/vfs/ntfs/ntfs.h
sys/vfs/ntfs/ntfs_ihash.c
sys/vfs/nwfs/nwfs_node.c
sys/vfs/smbfs/smbfs_vfsops.c

index ba553f3..9eb32fd 100644 (file)
@@ -512,7 +512,7 @@ kqueue_terminate(struct kqueue *kq)
                        knote_detach_and_drop(kn);
        }
        if (kq->kq_knhash) {
-               kfree(kq->kq_knhash, M_KQUEUE);
+               hashdestroy(kq->kq_knhash, M_KQUEUE, kq->kq_knhashmask);
                kq->kq_knhash = NULL;
                kq->kq_knhashmask = 0;
        }
index 6f00823..cfc7b0a 100644 (file)
@@ -292,7 +292,7 @@ vn_syncer_thr_stop(void *ctxp)
 
        lwkt_reltoken(&ctx->sc_token);
        
-       kfree(ctx->syncer_workitem_pending, M_DEVBUF);
+       hashdestroy(ctx->syncer_workitem_pending, M_DEVBUF, ctx->syncer_mask);
        kfree(ctx, M_TEMP);
 }
 
index 699f52d..243fa0e 100644 (file)
@@ -1713,7 +1713,8 @@ sctp_move_pcb_and_assoc(struct sctp_inpcb *old_inp, struct sctp_inpcb *new_inp,
        stcb->sctp_socket = new_inp->sctp_socket;
        stcb->sctp_ep = new_inp;
        if (new_inp->sctp_tcbhash != NULL) {
-               kfree(new_inp->sctp_tcbhash, M_PCB);
+               hashdestroy(new_inp->sctp_tcbhash, M_PCB,
+                   new_inp->sctp_hashmark);
                new_inp->sctp_tcbhash = NULL;
        }
        if ((new_inp->sctp_flags & SCTP_PCB_FLAGS_BOUNDALL) == 0) {
@@ -2493,7 +2494,7 @@ sctp_inpcb_free(struct sctp_inpcb *inp, int immediate)
        }
        /* Now lets see about freeing the EP hash table. */
        if (inp->sctp_tcbhash != NULL) {
-               kfree(inp->sctp_tcbhash, M_PCB);
+               hashdestroy(inp->sctp_tcbhash, M_PCB, inp->sctp_hashmark);
                inp->sctp_tcbhash = 0;
        }
        SCTP_INP_WUNLOCK(inp);
index df52cf8..65eac4b 100644 (file)
@@ -97,7 +97,7 @@ int
 fdesc_uninit(struct vfsconf *vfsp)
 {
        if (fdhashtbl)
-               kfree(fdhashtbl, M_CACHE);
+               hashdestroy(fdhashtbl, M_CACHE, fdhash);
        return (0);
 }
 int
index 732c9e3..492534e 100644 (file)
@@ -24,7 +24,6 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/fs/hpfs/hpfs.h,v 1.1 1999/12/09 19:09:58 semenu Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs.h,v 1.23 2006/12/23 00:41:29 swildner Exp $
  */
 
 /*#define HPFS_DEBUG 10*/
@@ -385,7 +384,6 @@ MALLOC_DECLARE(M_HPFSNO);
 #define        FID(f)          (*((lsn_t *)(f)->fid_data))
 #define dbtodoff(dbn)  ((off_t)(dbn) << DEV_BSHIFT)
 
-#define HASHINIT(a, b, c, d)   hashinit((a), (b), (d))
 #define VOP__LOCK(a, b)                vn_lock((a), (b))
 #define VOP__UNLOCK(a, b)      vn_unlock((a))
 #define VGET(a, b, c)          vget((a), (b))
index 5c4ba6a..05b41ff 100644 (file)
@@ -32,7 +32,6 @@
  *
  *     @(#)ufs_ihash.c 8.7 (Berkeley) 5/17/95
  * $FreeBSD: src/sys/fs/hpfs/hpfs_hash.c,v 1.1 1999/12/09 19:09:58 semenu Exp $
- * $DragonFly: src/sys/vfs/hpfs/hpfs_hash.c,v 1.16 2006/09/10 01:26:40 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -67,8 +66,7 @@ hpfs_hphashinit(void)
 {
 
        lockinit (&hpfs_hphash_lock, "hpfs_hphashlock", 0, 0);
-       hpfs_hphashtbl = HASHINIT(desiredvnodes, M_HPFSHASH, M_WAITOK,
-           &hpfs_hphash);
+       hpfs_hphashtbl = hashinit(desiredvnodes, M_HPFSHASH, &hpfs_hphash);
        lwkt_token_init(&hpfs_hphash_token, "hpfsihash");
 }
 
@@ -80,7 +78,7 @@ hpfs_hphash_uninit(struct vfsconf *vfc)
 {
        lwkt_gettoken(&hpfs_hphash_token);
        if (hpfs_hphashtbl)
-               kfree(hpfs_hphashtbl, M_HPFSHASH);
+               hashdestroy(hpfs_hphashtbl, M_HPFSHASH, hpfs_hphash);
        lwkt_reltoken(&hpfs_hphash_token);
 
        return 0;
index 516d260..712d6d9 100644 (file)
@@ -26,7 +26,6 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/ntfs/ntfs.h,v 1.8.2.2 2001/10/12 22:08:49 semenu Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs.h,v 1.16 2006/12/23 00:41:30 swildner Exp $
  */
 
 /*#define NTFS_DEBUG 1*/
@@ -306,7 +305,6 @@ MALLOC_DECLARE(M_NTFSDIR);
 MALLOC_DECLARE(M_NTFSNTHASH);
 #endif
 
-#define HASHINIT(a, b, c, d)   hashinit((a), (b), (d))
 #define VOP__UNLOCK(a, b)      vn_unlock((a))
 #define VGET(a, b)             vget((a), (b))
 #define VN_LOCK(a, b)          vn_lock((a), (b))
index 6c85f18..cf2f25c 100644 (file)
@@ -34,7 +34,6 @@
  *
  *     @(#)ufs_ihash.c 8.7 (Berkeley) 5/17/95
  * $FreeBSD: src/sys/ntfs/ntfs_ihash.c,v 1.7 1999/12/03 20:37:39 semenu Exp $
- * $DragonFly: src/sys/vfs/ntfs/ntfs_ihash.c,v 1.12 2006/09/10 01:26:41 dillon Exp $
  */
 
 #include <sys/param.h>
@@ -68,8 +67,7 @@ void
 ntfs_nthashinit(void)
 {
        lockinit(&ntfs_hashlock, "ntfs_nthashlock", 0, 0);
-       ntfs_nthashtbl = HASHINIT(desiredvnodes, M_NTFSNTHASH, M_WAITOK,
-           &ntfs_nthash);
+       ntfs_nthashtbl = hashinit(desiredvnodes, M_NTFSNTHASH, &ntfs_nthash);
        lwkt_token_init(&ntfs_nthash_slock, "ntfsihash");
 }
 
@@ -81,7 +79,7 @@ ntfs_nthash_uninit(struct vfsconf *vfc)
 {
        lwkt_gettoken(&ntfs_nthash_slock);
        if (ntfs_nthashtbl)
-               kfree(ntfs_nthashtbl, M_NTFSNTHASH);
+               hashdestroy(ntfs_nthashtbl, M_NTFSNTHASH, ntfs_nthash);
        lwkt_reltoken(&ntfs_nthash_slock);
 
        return 0;
index 3f1eac4..fd67da0 100644 (file)
@@ -81,7 +81,7 @@ nwfs_hash_init(void)
 void
 nwfs_hash_free(void)
 {
-       kfree(nwhashtbl, M_NWFSHASH);
+       hashdestroy(nwhashtbl, M_NWFSHASH, nwnodehash);
 }
 
 int
index 0fb86dc..6c9f68c 100644 (file)
@@ -219,7 +219,8 @@ bad:
                if (smp->sm_cred)
                        crfree(smp->sm_cred);
                if (smp->sm_hash)
-                       kfree(smp->sm_hash, M_SMBFSHASH);
+                       hashdestroy(smp->sm_hash, M_SMBFSHASH,
+                           smp->sm_hashlen);
                lockdestroy(&smp->sm_hashlock);
 #ifdef SMBFS_USEZONE
                zfree(smbfsmount_zone, smp);
@@ -266,7 +267,7 @@ smbfs_unmount(struct mount *mp, int mntflags)
        if (smp->sm_cred)
                crfree(smp->sm_cred);
        if (smp->sm_hash)
-               kfree(smp->sm_hash, M_SMBFSHASH);
+               hashdestroy(smp->sm_hash, M_SMBFSHASH, smp->sm_hashlen);
        lockdestroy(&smp->sm_hashlock);
 #ifdef SMBFS_USEZONE
        zfree(smbfsmount_zone, smp);