• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/logfs/

Lines Matching refs:cand

182 static struct gc_candidate *add_list(struct gc_candidate *cand,
190 cand->list = list;
196 comp = cand->erase_count < cur->erase_count;
198 comp = cand->valid < cur->valid;
205 rb_link_node(&cand->rb_node, parent, p);
206 rb_insert_color(&cand->rb_node, &list->rb_tree);
212 cand = rb_entry(rb_last(&list->rb_tree), struct gc_candidate, rb_node);
213 rb_erase(&cand->rb_node, &list->rb_tree);
214 cand->list = NULL;
215 return cand;
218 static void remove_from_list(struct gc_candidate *cand)
220 struct candidate_list *list = cand->list;
222 rb_erase(&cand->rb_node, &list->rb_tree);
226 static void free_candidate(struct super_block *sb, struct gc_candidate *cand)
230 btree_remove32(&super->s_cand_tree, cand->segno);
231 kfree(cand);
236 struct gc_candidate *cand;
241 cand = rb_entry(rb_first(&list->rb_tree), struct gc_candidate, rb_node);
242 remove_from_list(cand);
243 segno = cand->segno;
245 *ec = cand->erase_count;
246 free_candidate(sb, cand);
268 static void __add_candidate(struct super_block *sb, struct gc_candidate *cand)
273 if (cand->valid == 0) {
276 cand->segno, cand->erase_count,
277 dev_ofs(sb, cand->segno, 0));
278 cand = add_list(cand, &super->s_reserve_list);
279 if (cand) {
281 cand->segno, cand->erase_count,
282 dev_ofs(sb, cand->segno, 0));
283 cand = add_list(cand, &super->s_free_list);
287 if (cand->valid < full)
288 cand = add_list(cand, &super->s_low_list[cand->dist]);
291 if (cand)
292 cand = add_list(cand, &super->s_ec_list);
294 if (cand)
295 free_candidate(sb, cand);
302 struct gc_candidate *cand;
304 cand = kmalloc(sizeof(*cand), GFP_NOFS);
305 if (!cand)
308 cand->segno = segno;
309 cand->valid = valid;
310 cand->erase_count = ec;
311 cand->dist = dist;
313 btree_insert32(&super->s_cand_tree, segno, cand, GFP_NOFS);
314 __add_candidate(sb, cand);
321 struct gc_candidate *cand;
323 cand = btree_lookup32(&super->s_cand_tree, segno);
324 if (cand) {
325 remove_from_list(cand);
326 free_candidate(sb, cand);
368 struct gc_candidate *cand = NULL, *this;
376 if (!cand)
377 cand = this;
378 if (this->valid + LOGFS_MAX_OBJECTSIZE <= cand->valid)
379 cand = this;
381 return cand;
384 static int __logfs_gc_once(struct super_block *sb, struct gc_candidate *cand)
391 if (!cand) {
396 segno = cand->segno;
397 dist = cand->dist;
399 free_candidate(sb, cand);
413 struct gc_candidate *cand;
415 cand = get_candidate(sb);
416 if (cand)
417 remove_from_list(cand);
418 return __logfs_gc_once(sb, cand);
581 struct gc_candidate *cand;
597 cand = rb_entry(rb_first(&super->s_free_list.rb_tree),
599 max_reserve_ec = cand->erase_count;
702 struct gc_candidate *cand;
705 cand = rb_entry(list->rb_tree.rb_node, struct gc_candidate,
707 remove_from_list(cand);
708 free_candidate(sb, cand);