Lines Matching refs:e

140 				 struct ubi_wl_entry *e, struct rb_root *root);
142 struct ubi_wl_entry *e);
152 static void wl_tree_add(struct ubi_wl_entry *e, struct rb_root *root) in wl_tree_add() argument
163 if (e->ec < e1->ec) in wl_tree_add()
165 else if (e->ec > e1->ec) in wl_tree_add()
168 ubi_assert(e->pnum != e1->pnum); in wl_tree_add()
169 if (e->pnum < e1->pnum) in wl_tree_add()
176 rb_link_node(&e->u.rb, parent, p); in wl_tree_add()
177 rb_insert_color(&e->u.rb, root); in wl_tree_add()
188 static void wl_entry_destroy(struct ubi_device *ubi, struct ubi_wl_entry *e) in wl_entry_destroy() argument
190 ubi->lookuptbl[e->pnum] = NULL; in wl_entry_destroy()
191 kmem_cache_free(ubi_wl_entry_slab, e); in wl_entry_destroy()
249 static int in_wl_tree(struct ubi_wl_entry *e, struct rb_root *root) in in_wl_tree() argument
259 if (e->pnum == e1->pnum) { in in_wl_tree()
260 ubi_assert(e == e1); in in_wl_tree()
264 if (e->ec < e1->ec) in in_wl_tree()
266 else if (e->ec > e1->ec) in in_wl_tree()
269 ubi_assert(e->pnum != e1->pnum); in in_wl_tree()
270 if (e->pnum < e1->pnum) in in_wl_tree()
290 static void prot_queue_add(struct ubi_device *ubi, struct ubi_wl_entry *e) in prot_queue_add() argument
297 list_add_tail(&e->u.list, &ubi->pq[pq_tail]); in prot_queue_add()
298 dbg_wl("added PEB %d EC %d to the protection queue", e->pnum, e->ec); in prot_queue_add()
314 struct ubi_wl_entry *e, *prev_e = NULL; in find_wl_entry() local
317 e = rb_entry(rb_first(root), struct ubi_wl_entry, u.rb); in find_wl_entry()
318 max = e->ec + diff; in find_wl_entry()
329 prev_e = e; in find_wl_entry()
330 e = e1; in find_wl_entry()
338 !ubi->fm && e->pnum < UBI_FM_MAX_START) in find_wl_entry()
341 return e; in find_wl_entry()
356 struct ubi_wl_entry *e, *first, *last; in find_mean_wl_entry() local
362 e = rb_entry(root->rb_node, struct ubi_wl_entry, u.rb); in find_mean_wl_entry()
367 e = may_reserve_for_fm(ubi, e, root); in find_mean_wl_entry()
369 e = find_wl_entry(ubi, root, WL_FREE_MAX_DIFF/2); in find_mean_wl_entry()
371 return e; in find_mean_wl_entry()
384 struct ubi_wl_entry *e; in wl_get_wle() local
386 e = find_mean_wl_entry(ubi, &ubi->free); in wl_get_wle()
387 if (!e) { in wl_get_wle()
392 self_check_in_wl_tree(ubi, e, &ubi->free); in wl_get_wle()
398 rb_erase(&e->u.rb, &ubi->free); in wl_get_wle()
400 dbg_wl("PEB %d EC %d", e->pnum, e->ec); in wl_get_wle()
402 return e; in wl_get_wle()
415 struct ubi_wl_entry *e; in prot_queue_del() local
417 e = ubi->lookuptbl[pnum]; in prot_queue_del()
418 if (!e) in prot_queue_del()
421 if (self_check_in_pq(ubi, e)) in prot_queue_del()
424 list_del(&e->u.list); in prot_queue_del()
425 dbg_wl("deleted PEB %d from the protection queue", e->pnum); in prot_queue_del()
438 static int sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, in sync_erase() argument
443 unsigned long long ec = e->ec; in sync_erase()
445 dbg_wl("erase PEB %d, old EC %llu", e->pnum, ec); in sync_erase()
447 err = self_check_ec(ubi, e->pnum, e->ec); in sync_erase()
455 err = ubi_io_sync_erase(ubi, e->pnum, torture); in sync_erase()
466 e->pnum, ec); in sync_erase()
471 dbg_wl("erased PEB %d, new EC %llu", e->pnum, ec); in sync_erase()
475 err = ubi_io_write_ec_hdr(ubi, e->pnum, ec_hdr); in sync_erase()
479 e->ec = ec; in sync_erase()
481 if (e->ec > ubi->max_ec) in sync_erase()
482 ubi->max_ec = e->ec; in sync_erase()
500 struct ubi_wl_entry *e, *tmp; in serve_prot_queue() local
510 list_for_each_entry_safe(e, tmp, &ubi->pq[ubi->pq_head], u.list) { in serve_prot_queue()
512 e->pnum, e->ec); in serve_prot_queue()
514 list_del(&e->u.list); in serve_prot_queue()
515 wl_tree_add(e, &ubi->used); in serve_prot_queue()
582 static int schedule_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, in schedule_erase() argument
587 ubi_assert(e); in schedule_erase()
590 e->pnum, e->ec, torture); in schedule_erase()
597 wl_wrk->e = e; in schedule_erase()
619 static int do_sync_erase(struct ubi_device *ubi, struct ubi_wl_entry *e, in do_sync_erase() argument
624 dbg_wl("sync erase of PEB %i", e->pnum); in do_sync_erase()
626 wl_wrk.e = e; in do_sync_erase()
1070 struct ubi_wl_entry *e = wl_wrk->e; local
1071 int pnum = e->pnum;
1077 pnum, e->ec, wl_wrk->vol_id, wl_wrk->lnum);
1079 err = sync_erase(ubi, e, wl_wrk->torture);
1082 wl_tree_add(e, &ubi->free);
1104 err1 = schedule_erase(ubi, e, vol_id, lnum, 0, false);
1106 wl_entry_destroy(ubi, e);
1113 wl_entry_destroy(ubi, e);
1188 struct ubi_wl_entry *e = wl_wrk->e; local
1190 dbg_wl("cancel erasure of PEB %d EC %d", e->pnum, e->ec);
1192 wl_entry_destroy(ubi, e);
1218 struct ubi_wl_entry *e; local
1228 e = ubi->lookuptbl[pnum];
1229 if (e == ubi->move_from) {
1242 } else if (e == ubi->move_to) {
1259 if (in_wl_tree(e, &ubi->used)) {
1260 self_check_in_wl_tree(ubi, e, &ubi->used);
1261 rb_erase(&e->u.rb, &ubi->used);
1262 } else if (in_wl_tree(e, &ubi->scrub)) {
1263 self_check_in_wl_tree(ubi, e, &ubi->scrub);
1264 rb_erase(&e->u.rb, &ubi->scrub);
1265 } else if (in_wl_tree(e, &ubi->erroneous)) {
1266 self_check_in_wl_tree(ubi, e, &ubi->erroneous);
1267 rb_erase(&e->u.rb, &ubi->erroneous);
1273 err = prot_queue_del(ubi, e->pnum);
1285 err = schedule_erase(ubi, e, vol_id, lnum, torture, false);
1288 wl_tree_add(e, &ubi->used);
1308 struct ubi_wl_entry *e; local
1314 e = ubi->lookuptbl[pnum];
1315 if (e == ubi->move_from || in_wl_tree(e, &ubi->scrub) ||
1316 in_wl_tree(e, &ubi->erroneous)) {
1321 if (e == ubi->move_to) {
1334 if (in_wl_tree(e, &ubi->used)) {
1335 self_check_in_wl_tree(ubi, e, &ubi->used);
1336 rb_erase(&e->u.rb, &ubi->used);
1340 err = prot_queue_del(ubi, e->pnum);
1349 wl_tree_add(e, &ubi->scrub);
1430 struct ubi_wl_entry *e; local
1439 e = rb_entry(rb, struct ubi_wl_entry, u.rb);
1443 if (rb->rb_left == &e->u.rb)
1449 wl_entry_destroy(ubi, e);
1537 struct ubi_wl_entry *e; local
1540 e = kmem_cache_alloc(ubi_wl_entry_slab, GFP_KERNEL);
1541 if (!e)
1544 e->pnum = aeb->pnum;
1545 e->ec = aeb->ec;
1546 ubi->lookuptbl[e->pnum] = e;
1549 err = sync_erase(ubi, e, false);
1553 wl_tree_add(e, &ubi->free);
1556 err = schedule_erase(ubi, e, aeb->vol_id, aeb->lnum, 0, false);
1564 wl_entry_destroy(ubi, e);
1583 struct ubi_wl_entry *e; local
1617 e = kmem_cache_alloc(ubi_wl_entry_slab, GFP_KERNEL);
1618 if (!e) {
1623 e->pnum = aeb->pnum;
1624 e->ec = aeb->ec;
1625 ubi_assert(e->ec >= 0);
1627 wl_tree_add(e, &ubi->free);
1630 ubi->lookuptbl[e->pnum] = e;
1639 e = kmem_cache_alloc(ubi_wl_entry_slab, GFP_KERNEL);
1640 if (!e) {
1645 e->pnum = aeb->pnum;
1646 e->ec = aeb->ec;
1647 ubi->lookuptbl[e->pnum] = e;
1651 e->pnum, e->ec);
1652 wl_tree_add(e, &ubi->used);
1655 e->pnum, e->ec);
1656 wl_tree_add(e, &ubi->scrub);
1666 e = ubi_find_fm_block(ubi, aeb->pnum);
1668 if (e) {
1669 ubi_assert(!ubi->lookuptbl[e->pnum]);
1670 ubi->lookuptbl[e->pnum] = e;
1745 struct ubi_wl_entry *e, *tmp; local
1748 list_for_each_entry_safe(e, tmp, &ubi->pq[i], u.list) {
1749 list_del(&e->u.list);
1750 wl_entry_destroy(ubi, e);
1826 struct ubi_wl_entry *e, struct rb_root *root) argument
1831 if (in_wl_tree(e, root))
1835 e->pnum, e->ec, root);
1849 struct ubi_wl_entry *e) argument
1859 if (p == e)
1863 e->pnum, e->ec);
1870 struct ubi_wl_entry *e; local
1872 e = find_wl_entry(ubi, &ubi->free, WL_FREE_MAX_DIFF);
1873 self_check_in_wl_tree(ubi, e, &ubi->free);
1876 rb_erase(&e->u.rb, &ubi->free);
1878 return e;
1919 struct ubi_wl_entry *e; local
1942 e = wl_get_wle(ubi);
1943 prot_queue_add(ubi, e);
1946 err = ubi_self_check_all_ff(ubi, e->pnum, ubi->vid_hdr_aloffset,
1949 ubi_err(ubi, "new PEB %d does not contain all 0xFF bytes", e->pnum);
1953 return e->pnum;