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:
@@ -277,6 +277,27 @@ static int in_wl_tree(struct ubi_wl_entry *e, struct rb_root *root)
|
|||||||
return 0;
|
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.
|
* prot_queue_add - add physical eraseblock to the protection queue.
|
||||||
* @ubi: UBI device description object
|
* @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,
|
static int self_check_in_pq(const struct ubi_device *ubi,
|
||||||
struct ubi_wl_entry *e)
|
struct ubi_wl_entry *e)
|
||||||
{
|
{
|
||||||
struct ubi_wl_entry *p;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!ubi_dbg_chk_gen(ubi))
|
if (!ubi_dbg_chk_gen(ubi))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
for (i = 0; i < UBI_PROT_QUEUE_LEN; ++i)
|
if (in_pq(ubi, e))
|
||||||
list_for_each_entry(p, &ubi->pq[i], u.list)
|
return 0;
|
||||||
if (p == e)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ubi_err(ubi, "self-check failed for PEB %d, EC %d, Protect queue",
|
ubi_err(ubi, "self-check failed for PEB %d, EC %d, Protect queue",
|
||||||
e->pnum, e->ec);
|
e->pnum, e->ec);
|
||||||
|
Reference in New Issue
Block a user