ubi: Introduce in_pq()
This function works like in_wl_tree() but checks whether an ubi_wl_entry is currently in the protection queue. We need this function to query the current state of an ubi_wl_entry. Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
parent
a3b22b9f11
commit
b32b78f892
|
@ -277,6 +277,27 @@ static int in_wl_tree(struct ubi_wl_entry *e, struct rb_root *root)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* in_pq - check if a wear-leveling entry is present in the protection queue.
|
||||
* @ubi: UBI device description object
|
||||
* @e: the wear-leveling entry to check
|
||||
*
|
||||
* This function returns non-zero if @e is in the protection queue and zero
|
||||
* if it is not.
|
||||
*/
|
||||
static inline int in_pq(const struct ubi_device *ubi, struct ubi_wl_entry *e)
|
||||
{
|
||||
struct ubi_wl_entry *p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < UBI_PROT_QUEUE_LEN; ++i)
|
||||
list_for_each_entry(p, &ubi->pq[i], u.list)
|
||||
if (p == e)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* prot_queue_add - add physical eraseblock to the protection queue.
|
||||
* @ubi: UBI device description object
|
||||
|
@ -1848,16 +1869,11 @@ static int self_check_in_wl_tree(const struct ubi_device *ubi,
|
|||
static int self_check_in_pq(const struct ubi_device *ubi,
|
||||
struct ubi_wl_entry *e)
|
||||
{
|
||||
struct ubi_wl_entry *p;
|
||||
int i;
|
||||
|
||||
if (!ubi_dbg_chk_gen(ubi))
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < UBI_PROT_QUEUE_LEN; ++i)
|
||||
list_for_each_entry(p, &ubi->pq[i], u.list)
|
||||
if (p == e)
|
||||
return 0;
|
||||
if (in_pq(ubi, e))
|
||||
return 0;
|
||||
|
||||
ubi_err(ubi, "self-check failed for PEB %d, EC %d, Protect queue",
|
||||
e->pnum, e->ec);
|
||||
|
|
Loading…
Reference in New Issue