2009/8/14 Konstantin Belousov <k...@freebsd.org>:
> Author: kib
> Date: Fri Aug 14 11:22:09 2009
> New Revision: 196210
> URL: http://svn.freebsd.org/changeset/base/196210
>
> Log:
>  MFC r196206:
>  Take the number of allocated freeblks into consideration for
>  softdep_slowdown(), to prevent kernel memory exhaustioni on
>  mass-truncation.
>
>  Approved by:  re (rwatson)
>
[...]

Hi.

Is it scheduled to be merged to stable/7 (and even to stable/6, which
also has this issue)?

Thanks.

> Modified: stable/8/sys/ufs/ffs/ffs_softdep.c
> ==============================================================================
> --- stable/8/sys/ufs/ffs/ffs_softdep.c  Fri Aug 14 11:17:34 2009        
> (r196209)
> +++ stable/8/sys/ufs/ffs/ffs_softdep.c  Fri Aug 14 11:22:09 2009        
> (r196210)
> @@ -663,6 +663,8 @@ static int req_clear_inodedeps;     /* synce
>  static int req_clear_remove;   /* syncer process flush some freeblks */
>  #define FLUSH_REMOVE           2
>  #define FLUSH_REMOVE_WAIT      3
> +static long num_freeblkdep;    /* number of freeblks workitems allocated */
> +
>  /*
>  * runtime statistics
>  */
> @@ -2223,6 +2225,9 @@ softdep_setup_freeblocks(ip, length, fla
>        freeblks->fb_uid = ip->i_uid;
>        freeblks->fb_previousinum = ip->i_number;
>        freeblks->fb_devvp = ip->i_devvp;
> +       ACQUIRE_LOCK(&lk);
> +       num_freeblkdep++;
> +       FREE_LOCK(&lk);
>        extblocks = 0;
>        if (fs->fs_magic == FS_UFS2_MAGIC)
>                extblocks = btodb(fragroundup(fs, ip->i_din2->di_extsize));
> @@ -2815,6 +2820,7 @@ handle_workitem_freeblocks(freeblks, fla
>
>        ACQUIRE_LOCK(&lk);
>        WORKITEM_FREE(freeblks, D_FREEBLKS);
> +       num_freeblkdep--;
>        FREE_LOCK(&lk);
>  }
>
> @@ -5768,7 +5774,8 @@ softdep_slowdown(vp)
>        max_softdeps_hard = max_softdeps * 11 / 10;
>        if (num_dirrem < max_softdeps_hard / 2 &&
>            num_inodedep < max_softdeps_hard &&
> -           VFSTOUFS(vp->v_mount)->um_numindirdeps < maxindirdeps) {
> +           VFSTOUFS(vp->v_mount)->um_numindirdeps < maxindirdeps &&
> +           num_freeblkdep < max_softdeps_hard) {
>                FREE_LOCK(&lk);
>                return (0);
>        }


-- 
wbr,
pluknet
_______________________________________________
freebsd-stable@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "freebsd-stable-unsubscr...@freebsd.org"

Reply via email to