return false;
llist_add((struct llist_node *) bnode, &krcp->bkvcache);
--- ----- krcp->nr_bkv_objs++;
+++ +++++ WRITE_ONCE(krcp->nr_bkv_objs, krcp->nr_bkv_objs + 1);
return true;
+++ +++++}
+++ +++++
+++ +++++static int
+++ +++++drain_page_cache(struct kfree_rcu_cpu *krcp)
+++ +++++{
+++ +++++ unsigned long flags;
+++ +++++ struct llist_node *page_list, *pos, *n;
+++ +++++ int freed = 0;
+ +
+++ +++++ raw_spin_lock_irqsave(&krcp->lock, flags);
+++ +++++ page_list = llist_del_all(&krcp->bkvcache);
+++ +++++ WRITE_ONCE(krcp->nr_bkv_objs, 0);
+++ +++++ raw_spin_unlock_irqrestore(&krcp->lock, flags);
++ +++++
+++ +++++ llist_for_each_safe(pos, n, page_list) {
+++ +++++ free_page((unsigned long)pos);
+++ +++++ freed++;
+++ +++++ }
+++ ++ ++
+++ +++++ return freed;
}
/*