ubifs: Pass struct ubifs_info to ubifs_assert()
This allows us to have more context in ubifs_assert() and take different actions depending on the configuration. Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
@ -31,19 +31,21 @@
|
||||
|
||||
/**
|
||||
* ubifs_tnc_levelorder_next - next TNC tree element in levelorder traversal.
|
||||
* @c: UBIFS file-system description object
|
||||
* @zr: root of the subtree to traverse
|
||||
* @znode: previous znode
|
||||
*
|
||||
* This function implements levelorder TNC traversal. The LNC is ignored.
|
||||
* Returns the next element or %NULL if @znode is already the last one.
|
||||
*/
|
||||
struct ubifs_znode *ubifs_tnc_levelorder_next(struct ubifs_znode *zr,
|
||||
struct ubifs_znode *ubifs_tnc_levelorder_next(const struct ubifs_info *c,
|
||||
struct ubifs_znode *zr,
|
||||
struct ubifs_znode *znode)
|
||||
{
|
||||
int level, iip, level_search = 0;
|
||||
struct ubifs_znode *zn;
|
||||
|
||||
ubifs_assert(zr);
|
||||
ubifs_assert(c, zr);
|
||||
|
||||
if (unlikely(!znode))
|
||||
return zr;
|
||||
@ -58,7 +60,7 @@ struct ubifs_znode *ubifs_tnc_levelorder_next(struct ubifs_znode *zr,
|
||||
|
||||
iip = znode->iip;
|
||||
while (1) {
|
||||
ubifs_assert(znode->level <= zr->level);
|
||||
ubifs_assert(c, znode->level <= zr->level);
|
||||
|
||||
/*
|
||||
* First walk up until there is a znode with next branch to
|
||||
@ -85,7 +87,7 @@ struct ubifs_znode *ubifs_tnc_levelorder_next(struct ubifs_znode *zr,
|
||||
level_search = 1;
|
||||
iip = -1;
|
||||
znode = ubifs_tnc_find_child(zr, 0);
|
||||
ubifs_assert(znode);
|
||||
ubifs_assert(c, znode);
|
||||
}
|
||||
|
||||
/* Switch to the next index */
|
||||
@ -111,7 +113,7 @@ struct ubifs_znode *ubifs_tnc_levelorder_next(struct ubifs_znode *zr,
|
||||
}
|
||||
|
||||
if (zn) {
|
||||
ubifs_assert(zn->level >= 0);
|
||||
ubifs_assert(c, zn->level >= 0);
|
||||
return zn;
|
||||
}
|
||||
}
|
||||
@ -140,7 +142,7 @@ int ubifs_search_zbranch(const struct ubifs_info *c,
|
||||
int uninitialized_var(cmp);
|
||||
const struct ubifs_zbranch *zbr = &znode->zbranch[0];
|
||||
|
||||
ubifs_assert(end > beg);
|
||||
ubifs_assert(c, end > beg);
|
||||
|
||||
while (end > beg) {
|
||||
mid = (beg + end) >> 1;
|
||||
@ -158,13 +160,13 @@ int ubifs_search_zbranch(const struct ubifs_info *c,
|
||||
*n = end - 1;
|
||||
|
||||
/* The insert point is after *n */
|
||||
ubifs_assert(*n >= -1 && *n < znode->child_cnt);
|
||||
ubifs_assert(c, *n >= -1 && *n < znode->child_cnt);
|
||||
if (*n == -1)
|
||||
ubifs_assert(keys_cmp(c, key, &zbr[0].key) < 0);
|
||||
ubifs_assert(c, keys_cmp(c, key, &zbr[0].key) < 0);
|
||||
else
|
||||
ubifs_assert(keys_cmp(c, key, &zbr[*n].key) > 0);
|
||||
ubifs_assert(c, keys_cmp(c, key, &zbr[*n].key) > 0);
|
||||
if (*n + 1 < znode->child_cnt)
|
||||
ubifs_assert(keys_cmp(c, key, &zbr[*n + 1].key) < 0);
|
||||
ubifs_assert(c, keys_cmp(c, key, &zbr[*n + 1].key) < 0);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -195,16 +197,18 @@ struct ubifs_znode *ubifs_tnc_postorder_first(struct ubifs_znode *znode)
|
||||
|
||||
/**
|
||||
* ubifs_tnc_postorder_next - next TNC tree element in postorder traversal.
|
||||
* @c: UBIFS file-system description object
|
||||
* @znode: previous znode
|
||||
*
|
||||
* This function implements postorder TNC traversal. The LNC is ignored.
|
||||
* Returns the next element or %NULL if @znode is already the last one.
|
||||
*/
|
||||
struct ubifs_znode *ubifs_tnc_postorder_next(struct ubifs_znode *znode)
|
||||
struct ubifs_znode *ubifs_tnc_postorder_next(const struct ubifs_info *c,
|
||||
struct ubifs_znode *znode)
|
||||
{
|
||||
struct ubifs_znode *zn;
|
||||
|
||||
ubifs_assert(znode);
|
||||
ubifs_assert(c, znode);
|
||||
if (unlikely(!znode->parent))
|
||||
return NULL;
|
||||
|
||||
@ -220,18 +224,20 @@ struct ubifs_znode *ubifs_tnc_postorder_next(struct ubifs_znode *znode)
|
||||
|
||||
/**
|
||||
* ubifs_destroy_tnc_subtree - destroy all znodes connected to a subtree.
|
||||
* @c: UBIFS file-system description object
|
||||
* @znode: znode defining subtree to destroy
|
||||
*
|
||||
* This function destroys subtree of the TNC tree. Returns number of clean
|
||||
* znodes in the subtree.
|
||||
*/
|
||||
long ubifs_destroy_tnc_subtree(struct ubifs_znode *znode)
|
||||
long ubifs_destroy_tnc_subtree(const struct ubifs_info *c,
|
||||
struct ubifs_znode *znode)
|
||||
{
|
||||
struct ubifs_znode *zn = ubifs_tnc_postorder_first(znode);
|
||||
long clean_freed = 0;
|
||||
int n;
|
||||
|
||||
ubifs_assert(zn);
|
||||
ubifs_assert(c, zn);
|
||||
while (1) {
|
||||
for (n = 0; n < zn->child_cnt; n++) {
|
||||
if (!zn->zbranch[n].znode)
|
||||
@ -252,7 +258,7 @@ long ubifs_destroy_tnc_subtree(struct ubifs_znode *znode)
|
||||
return clean_freed;
|
||||
}
|
||||
|
||||
zn = ubifs_tnc_postorder_next(zn);
|
||||
zn = ubifs_tnc_postorder_next(c, zn);
|
||||
}
|
||||
}
|
||||
|
||||
@ -410,7 +416,7 @@ struct ubifs_znode *ubifs_load_znode(struct ubifs_info *c,
|
||||
int err;
|
||||
struct ubifs_znode *znode;
|
||||
|
||||
ubifs_assert(!zbr->znode);
|
||||
ubifs_assert(c, !zbr->znode);
|
||||
/*
|
||||
* A slab cache is not presently used for znodes because the znode size
|
||||
* depends on the fanout which is stored in the superblock.
|
||||
|
Reference in New Issue
Block a user