aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Weinberger <richard@nod.at>2014-10-29 05:31:41 -0400
committerRichard Weinberger <richard@nod.at>2015-03-26 17:47:36 -0400
commit2f84c2469e2f2e94a45d86597baec10bfbf06847 (patch)
treeb0ad83d93c8cea978244fa7c579f5bf3a2e25fa6
parentacfda79f8808518b0235eb9a13c8b5f762e43a75 (diff)
UBI: Fastmap: Introduce may_reserve_for_fm()
...and kill another #ifdef. Signed-off-by: Richard Weinberger <richard@nod.at>
-rw-r--r--drivers/mtd/ubi/fastmap-wl.c19
-rw-r--r--drivers/mtd/ubi/wl.c7
-rw-r--r--drivers/mtd/ubi/wl.h8
3 files changed, 28 insertions, 6 deletions
diff --git a/drivers/mtd/ubi/fastmap-wl.c b/drivers/mtd/ubi/fastmap-wl.c
index 88a400c52418..c4717531b24c 100644
--- a/drivers/mtd/ubi/fastmap-wl.c
+++ b/drivers/mtd/ubi/fastmap-wl.c
@@ -359,3 +359,22 @@ static void ubi_fastmap_close(struct ubi_device *ubi)
359 } 359 }
360 kfree(ubi->fm); 360 kfree(ubi->fm);
361} 361}
362
363/**
364 * may_reserve_for_fm - tests whether a PEB shall be reserved for fastmap.
365 * See find_mean_wl_entry()
366 *
367 * @ubi: UBI device description object
368 * @e: physical eraseblock to return
369 * @root: RB tree to test against.
370 */
371static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi,
372 struct ubi_wl_entry *e,
373 struct rb_root *root) {
374 if (e && !ubi->fm_disabled && !ubi->fm &&
375 e->pnum < UBI_FM_MAX_START)
376 e = rb_entry(rb_next(root->rb_node),
377 struct ubi_wl_entry, u.rb);
378
379 return e;
380}
diff --git a/drivers/mtd/ubi/wl.c b/drivers/mtd/ubi/wl.c
index c56c7a16c03b..94ffdeb370c1 100644
--- a/drivers/mtd/ubi/wl.c
+++ b/drivers/mtd/ubi/wl.c
@@ -361,15 +361,10 @@ static struct ubi_wl_entry *find_mean_wl_entry(struct ubi_device *ubi,
361 if (last->ec - first->ec < WL_FREE_MAX_DIFF) { 361 if (last->ec - first->ec < WL_FREE_MAX_DIFF) {
362 e = rb_entry(root->rb_node, struct ubi_wl_entry, u.rb); 362 e = rb_entry(root->rb_node, struct ubi_wl_entry, u.rb);
363 363
364#ifdef CONFIG_MTD_UBI_FASTMAP
365 /* If no fastmap has been written and this WL entry can be used 364 /* If no fastmap has been written and this WL entry can be used
366 * as anchor PEB, hold it back and return the second best 365 * as anchor PEB, hold it back and return the second best
367 * WL entry such that fastmap can use the anchor PEB later. */ 366 * WL entry such that fastmap can use the anchor PEB later. */
368 if (e && !ubi->fm_disabled && !ubi->fm && 367 e = may_reserve_for_fm(ubi, e, root);
369 e->pnum < UBI_FM_MAX_START)
370 e = rb_entry(rb_next(root->rb_node),
371 struct ubi_wl_entry, u.rb);
372#endif
373 } else 368 } else
374 e = find_wl_entry(ubi, root, WL_FREE_MAX_DIFF/2); 369 e = find_wl_entry(ubi, root, WL_FREE_MAX_DIFF/2);
375 370
diff --git a/drivers/mtd/ubi/wl.h b/drivers/mtd/ubi/wl.h
index 4046ccf8942b..fbc2d8e312df 100644
--- a/drivers/mtd/ubi/wl.h
+++ b/drivers/mtd/ubi/wl.h
@@ -13,6 +13,9 @@ static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count)
13 *count += (ubi->fm_size / ubi->leb_size) * 2; 13 *count += (ubi->fm_size / ubi->leb_size) * 2;
14 INIT_WORK(&ubi->fm_work, update_fastmap_work_fn); 14 INIT_WORK(&ubi->fm_work, update_fastmap_work_fn);
15} 15}
16static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi,
17 struct ubi_wl_entry *e,
18 struct rb_root *root);
16#else /* !CONFIG_MTD_UBI_FASTMAP */ 19#else /* !CONFIG_MTD_UBI_FASTMAP */
17static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi); 20static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi);
18static inline int is_fm_block(struct ubi_device *ubi, int pnum) 21static inline int is_fm_block(struct ubi_device *ubi, int pnum)
@@ -21,5 +24,10 @@ static inline int is_fm_block(struct ubi_device *ubi, int pnum)
21} 24}
22static inline void ubi_fastmap_close(struct ubi_device *ubi) { } 25static inline void ubi_fastmap_close(struct ubi_device *ubi) { }
23static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { } 26static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { }
27static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi,
28 struct ubi_wl_entry *e,
29 struct rb_root *root) {
30 return e;
31}
24#endif /* CONFIG_MTD_UBI_FASTMAP */ 32#endif /* CONFIG_MTD_UBI_FASTMAP */
25#endif /* UBI_WL_H */ 33#endif /* UBI_WL_H */