diff options
author | Richard Weinberger <richard@nod.at> | 2014-10-29 05:31:41 -0400 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2015-03-26 17:47:36 -0400 |
commit | 2f84c2469e2f2e94a45d86597baec10bfbf06847 (patch) | |
tree | b0ad83d93c8cea978244fa7c579f5bf3a2e25fa6 | |
parent | acfda79f8808518b0235eb9a13c8b5f762e43a75 (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.c | 19 | ||||
-rw-r--r-- | drivers/mtd/ubi/wl.c | 7 | ||||
-rw-r--r-- | drivers/mtd/ubi/wl.h | 8 |
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 | */ | ||
371 | static 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 | } |
16 | static 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 */ |
17 | static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi); | 20 | static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi); |
18 | static inline int is_fm_block(struct ubi_device *ubi, int pnum) | 21 | static 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 | } |
22 | static inline void ubi_fastmap_close(struct ubi_device *ubi) { } | 25 | static inline void ubi_fastmap_close(struct ubi_device *ubi) { } |
23 | static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { } | 26 | static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { } |
27 | static 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 */ |