1 static void free_bucket_contents(struct btree *b, bool alive)
   2 {
   3         BUG_ON(b->wait || b->write);
   4         b->written = 0;
   5 
   6         if (!b->pages[0])
   7                 return;
   8 
   9         if (!alive) {
  10                 struct address_space *mapping = b->pages[0]->mapping;
  11 
  12                 spin_lock_irq(&mapping->tree_lock);
  13                 for (int i = 0; i < btree_pages(b); i++)
  14                         __remove_from_page_cache(b->pages[i]);
  15                 spin_unlock_irq(&mapping->tree_lock);
  16         } else
  17                 for (int i = 0; i < btree_pages(b); i++)
  18                         mark_page_accessed(b->pages[i]);
  19 
  20 
  21         for (int i = 0; i < btree_pages(b); i++)
  22                 put_page(b->pages[i]);
  23 
  24         memset(b->pages, 0, sizeof(void *) * btree_pages(b) * 2);
  25 }

BcacheWiki: Foo (last edited 2010-09-16 12:53:49 by Kent)