Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 7 Sep 2009 13:37:25 +0400
From:      pluknet <pluknet@gmail.com>
To:        Konstantin Belousov <kib@freebsd.org>
Cc:        freebsd-stable <freebsd-stable@freebsd.org>
Subject:   Re: svn commit: r196210 - in stable/8/sys: . amd64/include/xen  cddl/contrib/opensolaris contrib/dev/acpica contrib/pf dev/ata dev/cxgb  dev/sound/usb dev/usb dev/usb/controller dev/usb/input dev/usb/mis...
Message-ID:  <a31046fc0909070237g65b26be3t1fe2d66322a42805@mail.gmail.com>
In-Reply-To: <200908141122.n7EBM9ml032712@svn.freebsd.org>
References:  <200908141122.n7EBM9ml032712@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

2009/8/14 Konstantin Belousov <kib@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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?a31046fc0909070237g65b26be3t1fe2d66322a42805>