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)