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;

Reply via email to