Hello - This diff adds sizes to free(), which completes ufs/ffs.
OK? Index: ufs/ffs/ffs_inode.c =================================================================== RCS file: /cvs/src/sys/ufs/ffs/ffs_inode.c,v retrieving revision 1.76 diff -u -p -r1.76 ffs_inode.c --- ufs/ffs/ffs_inode.c 27 Feb 2016 18:50:38 -0000 1.76 +++ ufs/ffs/ffs_inode.c 29 Mar 2018 02:55:36 -0000 @@ -560,7 +560,7 @@ ffs_indirtrunc(struct inode *ip, daddr_t } } if (copy != NULL) { - free(copy, M_TEMP, 0); + free(copy, M_TEMP, fs->fs_bsize); } else { bp->b_flags |= B_INVAL; brelse(bp); Index: ufs/ffs/ffs_softdep.c =================================================================== RCS file: /cvs/src/sys/ufs/ffs/ffs_softdep.c,v retrieving revision 1.138 diff -u -p -r1.138 ffs_softdep.c --- ufs/ffs/ffs_softdep.c 10 Feb 2018 05:24:23 -0000 1.138 +++ ufs/ffs/ffs_softdep.c 29 Mar 2018 02:55:37 -0000 @@ -2307,7 +2307,8 @@ check_inode_unwritten(struct inodedep *i if (inodedep->id_state & ONWORKLIST) WORKLIST_REMOVE(&inodedep->id_list); if (inodedep->id_savedino1 != NULL) { - free(inodedep->id_savedino1, M_INODEDEP, 0); + free(inodedep->id_savedino1, M_INODEDEP, + sizeof(struct ufs1_dinode)); inodedep->id_savedino1 = NULL; } if (free_inodedep(inodedep) == 0) { @@ -3845,7 +3846,8 @@ softdep_disk_write_complete(struct buf * if (indirdep->ir_state & GOINGAWAY) panic("disk_write_complete: indirdep gone"); memcpy(bp->b_data, indirdep->ir_saveddata, bp->b_bcount); - free(indirdep->ir_saveddata, M_INDIRDEP, 0); + free(indirdep->ir_saveddata, M_INDIRDEP, + sizeof(struct ufs1_dinode)); indirdep->ir_saveddata = NULL; indirdep->ir_state &= ~UNDONE; indirdep->ir_state |= ATTACHED; @@ -4034,7 +4036,8 @@ handle_written_inodeblock(struct inodede *dp1 = *inodedep->id_savedino1; else *dp2 = *inodedep->id_savedino2; - free(inodedep->id_savedino1, M_INODEDEP, 0); + free(inodedep->id_savedino1, M_INODEDEP, + sizeof(struct ufs1_dinode)); inodedep->id_savedino1 = NULL; if ((bp->b_flags & B_DELWRI) == 0) stat_inode_bitmap++; Index: ufs/ffs/ffs_vfsops.c =================================================================== RCS file: /cvs/src/sys/ufs/ffs/ffs_vfsops.c,v retrieving revision 1.173 diff -u -p -r1.173 ffs_vfsops.c --- ufs/ffs/ffs_vfsops.c 15 Mar 2018 04:22:16 -0000 1.173 +++ ufs/ffs/ffs_vfsops.c 29 Mar 2018 02:55:37 -0000 @@ -447,7 +447,7 @@ success: fs->fs_clean = ronly && (fs->fs_flags & FS_UNCLEAN) == 0 ? 1 : 0; if (ronly) - free(fs->fs_contigdirs, M_UFSMNT, 0); + free(fs->fs_contigdirs, M_UFSMNT, fs->fs_ncg); } if (!ronly) { if (mp->mnt_flag & MNT_SOFTDEP) @@ -837,7 +837,7 @@ ffs_mountfs(struct vnode *devvp, struct size = (blks - i) * fs->fs_fsize; error = bread(devvp, fsbtodb(fs, fs->fs_csaddr + i), size, &bp); if (error) { - free(fs->fs_csp, M_UFSMNT, 0); + free(fs->fs_csp, M_UFSMNT, fs->fs_cssize); goto out; } memcpy(space, bp->b_data, size); @@ -910,8 +910,8 @@ ffs_mountfs(struct vnode *devvp, struct if (ronly == 0) { if ((fs->fs_flags & FS_DOSOFTDEP) && (error = softdep_mount(devvp, mp, fs, cred)) != 0) { - free(fs->fs_csp, M_UFSMNT, 0); - free(fs->fs_contigdirs, M_UFSMNT, 0); + free(fs->fs_csp, M_UFSMNT, fs->fs_cssize); + free(fs->fs_contigdirs, M_UFSMNT, fs->fs_ncg); goto out; } fs->fs_fmod = 1; @@ -1046,7 +1046,7 @@ ffs_unmount(struct mount *mp, int mntfla fs->fs_clean = 0; return (error); } - free(fs->fs_contigdirs, M_UFSMNT, 0); + free(fs->fs_contigdirs, M_UFSMNT, fs->fs_ncg); } ump->um_devvp->v_specmountpoint = NULL; @@ -1055,7 +1055,7 @@ ffs_unmount(struct mount *mp, int mntfla (void)VOP_CLOSE(ump->um_devvp, fs->fs_ronly ? FREAD : FREAD|FWRITE, NOCRED, p); vput(ump->um_devvp); - free(fs->fs_csp, M_UFSMNT, 0); + free(fs->fs_csp, M_UFSMNT, fs->fs_cssize); free(fs, M_UFSMNT, fs->fs_sbsize); free(ump, M_UFSMNT, sizeof(*ump)); mp->mnt_data = NULL;