Lines Matching full:ai
127 * @ai: UBI attach info object
135 static int add_aeb(struct ubi_attach_info *ai, struct list_head *list, in add_aeb() argument
140 aeb = ubi_alloc_aeb(ai, pnum, ec); in add_aeb()
148 ai->ec_sum += aeb->ec; in add_aeb()
149 ai->ec_count++; in add_aeb()
151 if (ai->max_ec < aeb->ec) in add_aeb()
152 ai->max_ec = aeb->ec; in add_aeb()
154 if (ai->min_ec > aeb->ec) in add_aeb()
155 ai->min_ec = aeb->ec; in add_aeb()
164 * @ai: ubi_attach_info object
174 static struct ubi_ainf_volume *add_vol(struct ubi_attach_info *ai, int vol_id, in add_vol() argument
180 av = ubi_add_av(ai, vol_id); in add_vol()
198 * @ai: ubi_attach_info object
202 static void assign_aeb_to_av(struct ubi_attach_info *ai, in assign_aeb_to_av() argument
234 * @ai: attach info object
241 static int update_vol(struct ubi_device *ubi, struct ubi_attach_info *ai, in update_vol() argument
268 ubi_free_aeb(ai, new_aeb); in update_vol()
279 victim = ubi_alloc_aeb(ai, aeb->pnum, aeb->ec); in update_vol()
283 list_add_tail(&victim->u.list, &ai->erase); in update_vol()
297 ubi_free_aeb(ai, new_aeb); in update_vol()
303 list_add_tail(&new_aeb->u.list, &ai->erase); in update_vol()
329 * @ai: attach info object
335 static int process_pool_aeb(struct ubi_device *ubi, struct ubi_attach_info *ai, in process_pool_aeb() argument
343 ubi_free_aeb(ai, new_aeb); in process_pool_aeb()
349 av = ubi_find_av(ai, vol_id); in process_pool_aeb()
352 ubi_free_aeb(ai, new_aeb); in process_pool_aeb()
358 return update_vol(ubi, ai, av, new_vh, new_aeb); in process_pool_aeb()
366 * @ai: UBI attach info object
369 static void unmap_peb(struct ubi_attach_info *ai, int pnum) in unmap_peb() argument
375 ubi_rb_for_each_entry(node, av, &ai->volumes, rb) { in unmap_peb()
380 ubi_free_aeb(ai, aeb); in unmap_peb()
390 * @ai: attach info object
394 * @free: list of PEBs which are most likely free (and go into @ai->free)
399 static int scan_pool(struct ubi_device *ubi, struct ubi_attach_info *ai, in scan_pool() argument
464 unmap_peb(ai, pnum); in scan_pool()
470 ret = add_aeb(ai, free, pnum, ec, scrub); in scan_pool()
480 new_aeb = ubi_alloc_aeb(ai, pnum, be64_to_cpu(ech->ec)); in scan_pool()
494 err = process_pool_aeb(ubi, ai, vh, new_aeb); in scan_pool()
516 * @ai: The UBI attach info object
518 static int count_fastmap_pebs(struct ubi_attach_info *ai) in count_fastmap_pebs() argument
525 list_for_each_entry(aeb, &ai->erase, u.list) in count_fastmap_pebs()
528 list_for_each_entry(aeb, &ai->free, u.list) in count_fastmap_pebs()
531 ubi_rb_for_each_entry(rb1, av, &ai->volumes, rb) in count_fastmap_pebs()
541 * @ai: UBI attach info object
548 struct ubi_attach_info *ai, in ubi_attach_fastmap() argument
567 ai->min_ec = UBI_MAX_ERASECOUNTER; in ubi_attach_fastmap()
570 ai->max_sqnum = fmsb->sqnum; in ubi_attach_fastmap()
642 ret = add_aeb(ai, &ai->free, be32_to_cpu(fmec->pnum), in ubi_attach_fastmap()
655 ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum), in ubi_attach_fastmap()
668 ret = add_aeb(ai, &used, be32_to_cpu(fmec->pnum), in ubi_attach_fastmap()
681 ret = add_aeb(ai, &ai->erase, be32_to_cpu(fmec->pnum), in ubi_attach_fastmap()
687 ai->mean_ec = div_u64(ai->ec_sum, ai->ec_count); in ubi_attach_fastmap()
688 ai->bad_peb_count = be32_to_cpu(fmhdr->bad_peb_count); in ubi_attach_fastmap()
703 av = add_vol(ai, be32_to_cpu(fmvhdr->vol_id), in ubi_attach_fastmap()
717 ai->vols_found++; in ubi_attach_fastmap()
718 if (ai->highest_vol_id < be32_to_cpu(fmvhdr->vol_id)) in ubi_attach_fastmap()
719 ai->highest_vol_id = be32_to_cpu(fmvhdr->vol_id); in ubi_attach_fastmap()
757 assign_aeb_to_av(ai, aeb, av); in ubi_attach_fastmap()
764 ret = scan_pool(ubi, ai, fmpl->pebs, pool_size, &max_sqnum, &free); in ubi_attach_fastmap()
768 ret = scan_pool(ubi, ai, fmpl_wl->pebs, wl_pool_size, &max_sqnum, &free); in ubi_attach_fastmap()
772 if (max_sqnum > ai->max_sqnum) in ubi_attach_fastmap()
773 ai->max_sqnum = max_sqnum; in ubi_attach_fastmap()
776 list_move_tail(&tmp_aeb->u.list, &ai->free); in ubi_attach_fastmap()
779 list_move_tail(&tmp_aeb->u.list, &ai->erase); in ubi_attach_fastmap()
789 if (WARN_ON(count_fastmap_pebs(ai) != ubi->peb_count - in ubi_attach_fastmap()
790 ai->bad_peb_count - fm->used_blocks)) in ubi_attach_fastmap()
800 ubi_free_aeb(ai, tmp_aeb); in ubi_attach_fastmap()
804 ubi_free_aeb(ai, tmp_aeb); in ubi_attach_fastmap()
812 * @ai: UBI attach info to be filled
814 static int find_fm_anchor(struct ubi_attach_info *ai) in find_fm_anchor() argument
820 list_for_each_entry(aeb, &ai->fastmap, u.list) { in find_fm_anchor()
830 static struct ubi_ainf_peb *clone_aeb(struct ubi_attach_info *ai, in clone_aeb() argument
835 new = ubi_alloc_aeb(ai, old->pnum, old->ec); in clone_aeb()
851 * @ai: UBI attach info to be filled
859 int ubi_scan_fastmap(struct ubi_device *ubi, struct ubi_attach_info *ai, in ubi_scan_fastmap() argument
881 new = clone_aeb(ai, aeb); in ubi_scan_fastmap()
885 list_add(&new->u.list, &ai->fastmap); in ubi_scan_fastmap()
1052 ret = ubi_attach_fastmap(ubi, ai, fm); in ubi_scan_fastmap()