UBI: Fastmap: Introduce may_reserve_for_fm()
authorRichard Weinberger <richard@nod.at>
Wed, 29 Oct 2014 09:31:41 +0000 (10:31 +0100)
committerRichard Weinberger <richard@nod.at>
Thu, 26 Mar 2015 21:47:36 +0000 (22:47 +0100)
...and kill another #ifdef.

Signed-off-by: Richard Weinberger <richard@nod.at>
drivers/mtd/ubi/fastmap-wl.c
drivers/mtd/ubi/wl.c
drivers/mtd/ubi/wl.h

index 88a400c..c471753 100644 (file)
@@ -359,3 +359,22 @@ static void ubi_fastmap_close(struct ubi_device *ubi)
        }
        kfree(ubi->fm);
 }
+
+/**
+ * may_reserve_for_fm - tests whether a PEB shall be reserved for fastmap.
+ * See find_mean_wl_entry()
+ *
+ * @ubi: UBI device description object
+ * @e: physical eraseblock to return
+ * @root: RB tree to test against.
+ */
+static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi,
+                                          struct ubi_wl_entry *e,
+                                          struct rb_root *root) {
+       if (e && !ubi->fm_disabled && !ubi->fm &&
+           e->pnum < UBI_FM_MAX_START)
+               e = rb_entry(rb_next(root->rb_node),
+                            struct ubi_wl_entry, u.rb);
+
+       return e;
+}
index c56c7a1..94ffdeb 100644 (file)
@@ -361,15 +361,10 @@ static struct ubi_wl_entry *find_mean_wl_entry(struct ubi_device *ubi,
        if (last->ec - first->ec < WL_FREE_MAX_DIFF) {
                e = rb_entry(root->rb_node, struct ubi_wl_entry, u.rb);
 
-#ifdef CONFIG_MTD_UBI_FASTMAP
                /* If no fastmap has been written and this WL entry can be used
                 * as anchor PEB, hold it back and return the second best
                 * WL entry such that fastmap can use the anchor PEB later. */
-               if (e && !ubi->fm_disabled && !ubi->fm &&
-                   e->pnum < UBI_FM_MAX_START)
-                       e = rb_entry(rb_next(root->rb_node),
-                                    struct ubi_wl_entry, u.rb);
-#endif
+               e = may_reserve_for_fm(ubi, e, root);
        } else
                e = find_wl_entry(ubi, root, WL_FREE_MAX_DIFF/2);
 
index 4046ccf..fbc2d8e 100644 (file)
@@ -13,6 +13,9 @@ static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count)
        *count += (ubi->fm_size / ubi->leb_size) * 2;
        INIT_WORK(&ubi->fm_work, update_fastmap_work_fn);
 }
+static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi,
+                                              struct ubi_wl_entry *e,
+                                              struct rb_root *root);
 #else /* !CONFIG_MTD_UBI_FASTMAP */
 static struct ubi_wl_entry *get_peb_for_wl(struct ubi_device *ubi);
 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)
 }
 static inline void ubi_fastmap_close(struct ubi_device *ubi) { }
 static inline void ubi_fastmap_init(struct ubi_device *ubi, int *count) { }
+static struct ubi_wl_entry *may_reserve_for_fm(struct ubi_device *ubi,
+                                              struct ubi_wl_entry *e,
+                                              struct rb_root *root) {
+       return e;
+}
 #endif /* CONFIG_MTD_UBI_FASTMAP */
 #endif /* UBI_WL_H */