Lines Matching refs:lprops
54 static int valuable(struct ubifs_info *c, const struct ubifs_lprops *lprops) in valuable() argument
56 int n, cat = lprops->flags & LPROPS_CAT_MASK; in valuable()
66 if (lprops->free + lprops->dirty >= c->dark_wm) in valuable()
96 const struct ubifs_lprops *lprops, int in_tree, in scan_for_dirty_cb() argument
102 if (lprops->flags & LPROPS_TAKEN) in scan_for_dirty_cb()
105 if (!in_tree && valuable(c, lprops)) in scan_for_dirty_cb()
108 if (lprops->free + lprops->dirty < data->min_space) in scan_for_dirty_cb()
111 if (data->exclude_index && lprops->flags & LPROPS_INDEX) in scan_for_dirty_cb()
114 if (lprops->free + lprops->dirty == c->leb_size) { in scan_for_dirty_cb()
118 } else if (lprops->dirty < c->dead_wm) in scan_for_dirty_cb()
121 data->lnum = lprops->lnum; in scan_for_dirty_cb()
140 const struct ubifs_lprops *lprops; in scan_for_dirty() local
148 lprops = heap->arr[i]; in scan_for_dirty()
149 if (lprops->free + lprops->dirty < min_space) in scan_for_dirty()
151 if (lprops->dirty < c->dead_wm) in scan_for_dirty()
153 return lprops; in scan_for_dirty()
162 list_for_each_entry(lprops, &c->uncat_list, list) { in scan_for_dirty()
163 if (lprops->flags & LPROPS_TAKEN) in scan_for_dirty()
165 if (lprops->free + lprops->dirty < min_space) in scan_for_dirty()
167 if (exclude_index && (lprops->flags & LPROPS_INDEX)) in scan_for_dirty()
169 if (lprops->dirty < c->dead_wm) in scan_for_dirty()
171 return lprops; in scan_for_dirty()
188 lprops = ubifs_lpt_lookup_dirty(c, data.lnum); in scan_for_dirty()
189 if (IS_ERR(lprops)) in scan_for_dirty()
190 return lprops; in scan_for_dirty()
191 ubifs_assert(lprops->lnum == data.lnum); in scan_for_dirty()
192 ubifs_assert(lprops->free + lprops->dirty >= min_space); in scan_for_dirty()
193 ubifs_assert(lprops->dirty >= c->dead_wm || in scan_for_dirty()
195 lprops->free + lprops->dirty == c->leb_size)); in scan_for_dirty()
196 ubifs_assert(!(lprops->flags & LPROPS_TAKEN)); in scan_for_dirty()
197 ubifs_assert(!exclude_index || !(lprops->flags & LPROPS_INDEX)); in scan_for_dirty()
198 return lprops; in scan_for_dirty()
363 const struct ubifs_lprops *lprops, int in_tree, in scan_for_free_cb() argument
369 if (lprops->flags & LPROPS_TAKEN) in scan_for_free_cb()
372 if (!in_tree && valuable(c, lprops)) in scan_for_free_cb()
375 if (lprops->flags & LPROPS_INDEX) in scan_for_free_cb()
378 if (lprops->free < data->min_space) in scan_for_free_cb()
381 if (!data->pick_free && lprops->free == c->leb_size) in scan_for_free_cb()
389 if (lprops->free + lprops->dirty == c->leb_size && lprops->dirty > 0) in scan_for_free_cb()
392 data->lnum = lprops->lnum; in scan_for_free_cb()
411 const struct ubifs_lprops *lprops; in do_find_free_space() local
417 lprops = ubifs_fast_find_free(c); in do_find_free_space()
418 if (lprops && lprops->free >= min_space) in do_find_free_space()
419 return lprops; in do_find_free_space()
422 lprops = ubifs_fast_find_empty(c); in do_find_free_space()
423 if (lprops) in do_find_free_space()
424 return lprops; in do_find_free_space()
427 lprops = ubifs_fast_find_free(c); in do_find_free_space()
428 if (lprops && lprops->free >= min_space) in do_find_free_space()
429 return lprops; in do_find_free_space()
434 lprops = heap->arr[i]; in do_find_free_space()
435 if (lprops->free >= min_space) in do_find_free_space()
436 return lprops; in do_find_free_space()
445 list_for_each_entry(lprops, &c->uncat_list, list) { in do_find_free_space()
446 if (lprops->flags & LPROPS_TAKEN) in do_find_free_space()
448 if (lprops->flags & LPROPS_INDEX) in do_find_free_space()
450 if (lprops->free >= min_space) in do_find_free_space()
451 return lprops; in do_find_free_space()
467 lprops = ubifs_lpt_lookup_dirty(c, data.lnum); in do_find_free_space()
468 if (IS_ERR(lprops)) in do_find_free_space()
469 return lprops; in do_find_free_space()
470 ubifs_assert(lprops->lnum == data.lnum); in do_find_free_space()
471 ubifs_assert(lprops->free >= min_space); in do_find_free_space()
472 ubifs_assert(!(lprops->flags & LPROPS_TAKEN)); in do_find_free_space()
473 ubifs_assert(!(lprops->flags & LPROPS_INDEX)); in do_find_free_space()
474 return lprops; in do_find_free_space()
496 const struct ubifs_lprops *lprops; in ubifs_find_free_space() local
540 lprops = do_find_free_space(c, min_space, pick_free, squeeze); in ubifs_find_free_space()
541 if (IS_ERR(lprops)) { in ubifs_find_free_space()
542 err = PTR_ERR(lprops); in ubifs_find_free_space()
546 lnum = lprops->lnum; in ubifs_find_free_space()
547 flags = lprops->flags | LPROPS_TAKEN; in ubifs_find_free_space()
549 lprops = ubifs_change_lp(c, lprops, LPROPS_NC, LPROPS_NC, flags, 0); in ubifs_find_free_space()
550 if (IS_ERR(lprops)) { in ubifs_find_free_space()
551 err = PTR_ERR(lprops); in ubifs_find_free_space()
561 *offs = c->leb_size - lprops->free; in ubifs_find_free_space()
603 const struct ubifs_lprops *lprops, int in_tree, in scan_for_idx_cb() argument
609 if (lprops->flags & LPROPS_TAKEN) in scan_for_idx_cb()
612 if (!in_tree && valuable(c, lprops)) in scan_for_idx_cb()
615 if (lprops->flags & LPROPS_INDEX) in scan_for_idx_cb()
618 if (lprops->free + lprops->dirty != c->leb_size) in scan_for_idx_cb()
625 data->lnum = lprops->lnum; in scan_for_idx_cb()
635 struct ubifs_lprops *lprops; in scan_for_leb_for_idx() local
647 lprops = ubifs_lpt_lookup_dirty(c, data.lnum); in scan_for_leb_for_idx()
648 if (IS_ERR(lprops)) in scan_for_leb_for_idx()
649 return lprops; in scan_for_leb_for_idx()
650 ubifs_assert(lprops->lnum == data.lnum); in scan_for_leb_for_idx()
651 ubifs_assert(lprops->free + lprops->dirty == c->leb_size); in scan_for_leb_for_idx()
652 ubifs_assert(!(lprops->flags & LPROPS_TAKEN)); in scan_for_leb_for_idx()
653 ubifs_assert(!(lprops->flags & LPROPS_INDEX)); in scan_for_leb_for_idx()
654 return lprops; in scan_for_leb_for_idx()
675 const struct ubifs_lprops *lprops; in ubifs_find_free_leb_for_idx() local
680 lprops = ubifs_fast_find_empty(c); in ubifs_find_free_leb_for_idx()
681 if (!lprops) { in ubifs_find_free_leb_for_idx()
682 lprops = ubifs_fast_find_freeable(c); in ubifs_find_free_leb_for_idx()
683 if (!lprops) { in ubifs_find_free_leb_for_idx()
694 lprops = scan_for_leb_for_idx(c); in ubifs_find_free_leb_for_idx()
695 if (IS_ERR(lprops)) { in ubifs_find_free_leb_for_idx()
696 err = PTR_ERR(lprops); in ubifs_find_free_leb_for_idx()
703 if (!lprops) { in ubifs_find_free_leb_for_idx()
708 lnum = lprops->lnum; in ubifs_find_free_leb_for_idx()
711 lnum, lprops->free, lprops->dirty, lprops->flags); in ubifs_find_free_leb_for_idx()
713 flags = lprops->flags | LPROPS_TAKEN | LPROPS_INDEX; in ubifs_find_free_leb_for_idx()
714 lprops = ubifs_change_lp(c, lprops, c->leb_size, 0, flags, 0); in ubifs_find_free_leb_for_idx()
715 if (IS_ERR(lprops)) { in ubifs_find_free_leb_for_idx()
716 err = PTR_ERR(lprops); in ubifs_find_free_leb_for_idx()
806 const struct ubifs_lprops *lprops, int in_tree, in scan_dirty_idx_cb() argument
812 if (lprops->flags & LPROPS_TAKEN) in scan_dirty_idx_cb()
815 if (!in_tree && valuable(c, lprops)) in scan_dirty_idx_cb()
818 if (!(lprops->flags & LPROPS_INDEX)) in scan_dirty_idx_cb()
821 if (lprops->free + lprops->dirty < c->min_idx_node_sz) in scan_dirty_idx_cb()
824 data->lnum = lprops->lnum; in scan_dirty_idx_cb()
840 const struct ubifs_lprops *lprops; in find_dirty_idx_leb() local
849 lprops = heap->arr[i]; in find_dirty_idx_leb()
850 ret = scan_dirty_idx_cb(c, lprops, 1, &data); in find_dirty_idx_leb()
854 list_for_each_entry(lprops, &c->frdi_idx_list, list) { in find_dirty_idx_leb()
855 ret = scan_dirty_idx_cb(c, lprops, 1, &data); in find_dirty_idx_leb()
859 list_for_each_entry(lprops, &c->uncat_list, list) { in find_dirty_idx_leb()
860 ret = scan_dirty_idx_cb(c, lprops, 1, &data); in find_dirty_idx_leb()
875 lprops = ubifs_lpt_lookup_dirty(c, data.lnum); in find_dirty_idx_leb()
876 if (IS_ERR(lprops)) in find_dirty_idx_leb()
877 return PTR_ERR(lprops); in find_dirty_idx_leb()
878 ubifs_assert(lprops->lnum == data.lnum); in find_dirty_idx_leb()
879 ubifs_assert(lprops->free + lprops->dirty >= c->min_idx_node_sz); in find_dirty_idx_leb()
880 ubifs_assert(!(lprops->flags & LPROPS_TAKEN)); in find_dirty_idx_leb()
881 ubifs_assert((lprops->flags & LPROPS_INDEX)); in find_dirty_idx_leb()
884 lprops->lnum, lprops->free, lprops->dirty, lprops->flags); in find_dirty_idx_leb()
886 lprops = ubifs_change_lp(c, lprops, LPROPS_NC, LPROPS_NC, in find_dirty_idx_leb()
887 lprops->flags | LPROPS_TAKEN, 0); in find_dirty_idx_leb()
888 if (IS_ERR(lprops)) in find_dirty_idx_leb()
889 return PTR_ERR(lprops); in find_dirty_idx_leb()
891 return lprops->lnum; in find_dirty_idx_leb()