On Thu, 2005-06-30 at 11:11 -0700, Chandra Seetharaman wrote:
> On Thu, 2005-06-30 at 14:52 +0900, YAMAMOTO Takashi wrote:
> > > +static inline void
> > > +ckrm_clear_page_class(struct page *page)
> > > +{
> > > + struct ckrm_zone *czone = page_ckrmzone(page);
> > > + if (czone == NULL)
> > > +         return;
> > > + sub_use_count(czone->memcls, 0, page_zonenum(page), 1);
> > > + kref_put(&czone->memcls->nr_users, memclass_release);
> > > + set_page_ckrmzone(page, NULL);
> > >  }
> > 
> > are you sure if it's safe?
> > this function is called with zone->lock held,
> > and memclass_release calls kfree.
> 
> i don't understand why you think it is a problem to call kfree with lock
> held( i agree calling kmalloc with wait flag when a lock is being held
> is not correct).

kfree->__cache_free
        ->cache_flusharray
        ->free_block
        ->slab_destroy
        ->kmem_freepages
        ->free_pages
        ->__free_pages
        ->__free_pages_ok
        ->free_pages_bulk:

        spin_lock_irqsave(&zone->lock, flags);

Deadlock.

Whew!!!

-- Dave



-------------------------------------------------------
SF.Net email is sponsored by: Discover Easy Linux Migration Strategies
from IBM. Find simple to follow Roadmaps, straightforward articles,
informative Webcasts and more! Get everything you need to get up to
speed, fast. http://ads.osdn.com/?ad_id=7477&alloc_id=16492&op=click
_______________________________________________
ckrm-tech mailing list
https://lists.sourceforge.net/lists/listinfo/ckrm-tech

Reply via email to