Hi!

Thanks, I'll put this in the next backport. (Sometime next week, when
I'm finished with that CT69000 HiQVideo framegrabber driver).

Vojtech

On Wed, Aug 02, 2000 at 01:27:16AM +0100, Alan Cox wrote:
> --- mm/slab.c~        Tue Aug  1 11:07:11 2000
> +++ mm/slab.c Tue Aug  1 14:45:44 2000
> @@ -987,8 +987,8 @@
>   * is available.  To help debugging, a zero exit status indicates all slabs
>   * were released.
>   */
> -int
> -kmem_cache_shrink(kmem_cache_t *cachep)
> +
> +static int __kmem_cache_shrink(kmem_cache_t *cachep, int validated)
>  {
>       kmem_cache_t    *searchp;
>       kmem_slab_t     *slabp;
> @@ -1003,26 +1003,29 @@
>               return 2;
>       }
>  
> -     /* Find the cache in the chain of caches. */
> -     down(&cache_chain_sem);         /* Semaphore is needed. */
> -     searchp = &cache_cache;
> -     for (;searchp->c_nextp != &cache_cache; searchp = searchp->c_nextp) {
> -             if (searchp->c_nextp != cachep)
> -                     continue;
> -
> -             /* Accessing clock_searchp is safe - we hold the mutex. */
> -             if (cachep == clock_searchp)
> -                     clock_searchp = cachep->c_nextp;
> -             goto found;
> -     }
> -     up(&cache_chain_sem);
> -     printk(KERN_ERR "kmem_shrink: Invalid cache addr %p\n", cachep);
> -     return 2;
> +     if(validated==0)
> +     {
> +             /* Find the cache in the chain of caches. */
> +             down(&cache_chain_sem);         /* Semaphore is needed. */
> +             searchp = &cache_cache;
> +             for (;searchp->c_nextp != &cache_cache; searchp = searchp->c_nextp) {
> +                     if (searchp->c_nextp != cachep)
> +                             continue;
> +
> +                     /* Accessing clock_searchp is safe - we hold the mutex. */
> +                     if (cachep == clock_searchp)
> +                             clock_searchp = cachep->c_nextp;
> +                     goto found;
> +             }
> +             up(&cache_chain_sem);
> +             printk(KERN_ERR "kmem_shrink: Invalid cache addr %p\n", cachep);
> +             return 2;
>  found:
> -     /* Release the semaphore before getting the cache-lock.  This could
> -      * mean multiple engines are shrinking the cache, but so what.
> -      */
> -     up(&cache_chain_sem);
> +             /* Release the semaphore before getting the cache-lock.  This could
> +              * mean multiple engines are shrinking the cache, but so what.
> +              */
> +             up(&cache_chain_sem);
> +     }
>       spin_lock_irq(&cachep->c_spinlock);
>  
>       /* If the cache is growing, stop shrinking. */
> @@ -1042,6 +1045,11 @@
>       return ret;
>  }
>  
> +int kmem_cache_shrink(kmem_cache_t *cachep)
> +{
> +     __kmem_cache_shrink(cachep,0);
> +}
> +
>  /*
>   * Remove a kmem_cache_t object from the slab cache. When returns 0 it
>   * completed succesfully. -arca
> @@ -1087,7 +1095,7 @@
>               return 1;
>       }
>  
> -     if (kmem_cache_shrink(cachep)) {
> +     if (__kmem_cache_shrink(cachep, 1)) {
>               printk(KERN_ERR "kmem_destroy: Can't free all objects %p\n",
>                      cachep);
>               down(&cache_chain_sem);
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

-- 
Vojtech Pavlik
SuSE Labs

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to