Lines Matching refs:znode
118 int insert_old_idx_znode(struct ubifs_info *c, struct ubifs_znode *znode) in insert_old_idx_znode() argument
120 if (znode->parent) { in insert_old_idx_znode()
123 zbr = &znode->parent->zbranch[znode->iip]; in insert_old_idx_znode()
141 struct ubifs_znode *znode) in ins_clr_old_idx_znode() argument
145 if (znode->parent) { in ins_clr_old_idx_znode()
148 zbr = &znode->parent->zbranch[znode->iip]; in ins_clr_old_idx_znode()
197 struct ubifs_znode *znode) in copy_znode() argument
201 zn = kmemdup(znode, c->max_znode_sz, GFP_NOFS); in copy_znode()
249 if (child->znode) in replace_znode()
250 child->znode->parent = new_zn; in replace_znode()
254 zbr->znode = new_zn; in replace_znode()
272 struct ubifs_znode *znode = zbr->znode; in dirty_cow_znode() local
276 if (!ubifs_zn_cow(znode)) { in dirty_cow_znode()
278 if (!test_and_set_bit(DIRTY_ZNODE, &znode->flags)) { in dirty_cow_znode()
286 return znode; in dirty_cow_znode()
289 zn = copy_znode(c, znode); in dirty_cow_znode()
313 replace_znode(c, zn, znode, zbr); in dirty_cow_znode()
618 struct ubifs_znode *znode, int n) in get_znode() argument
622 zbr = &znode->zbranch[n]; in get_znode()
623 if (zbr->znode) in get_znode()
624 znode = zbr->znode; in get_znode()
626 znode = ubifs_load_znode(c, zbr, znode, n); in get_znode()
627 return znode; in get_znode()
641 struct ubifs_znode *znode = *zn; in tnc_next() local
645 if (nn < znode->child_cnt) { in tnc_next()
652 zp = znode->parent; in tnc_next()
655 nn = znode->iip + 1; in tnc_next()
656 znode = zp; in tnc_next()
657 if (nn < znode->child_cnt) { in tnc_next()
658 znode = get_znode(c, znode, nn); in tnc_next()
659 if (IS_ERR(znode)) in tnc_next()
660 return PTR_ERR(znode); in tnc_next()
661 while (znode->level != 0) { in tnc_next()
662 znode = get_znode(c, znode, 0); in tnc_next()
663 if (IS_ERR(znode)) in tnc_next()
664 return PTR_ERR(znode); in tnc_next()
670 *zn = znode; in tnc_next()
686 struct ubifs_znode *znode = *zn; in tnc_prev() local
696 zp = znode->parent; in tnc_prev()
699 nn = znode->iip - 1; in tnc_prev()
700 znode = zp; in tnc_prev()
702 znode = get_znode(c, znode, nn); in tnc_prev()
703 if (IS_ERR(znode)) in tnc_prev()
704 return PTR_ERR(znode); in tnc_prev()
705 while (znode->level != 0) { in tnc_prev()
706 nn = znode->child_cnt - 1; in tnc_prev()
707 znode = get_znode(c, znode, nn); in tnc_prev()
708 if (IS_ERR(znode)) in tnc_prev()
709 return PTR_ERR(znode); in tnc_prev()
711 nn = znode->child_cnt - 1; in tnc_prev()
715 *zn = znode; in tnc_prev()
814 struct ubifs_znode *znode = *zn; in resolve_collision() local
818 err = tnc_next(c, &znode, &nn); in resolve_collision()
823 if (keys_cmp(c, &znode->zbranch[nn].key, key)) in resolve_collision()
825 err = matches_name(c, &znode->zbranch[nn], nm); in resolve_collision()
830 *zn = znode; in resolve_collision()
930 struct ubifs_znode *o_znode = NULL, *znode = *zn; in fallible_resolve_collision() local
933 cmp = fallible_matches_name(c, &znode->zbranch[nn], nm); in fallible_resolve_collision()
939 o_znode = znode; in fallible_resolve_collision()
998 *zn = znode; in fallible_resolve_collision()
1001 err = tnc_next(c, &znode, &nn); in fallible_resolve_collision()
1006 if (keys_cmp(c, &znode->zbranch[nn].key, key)) in fallible_resolve_collision()
1008 err = fallible_matches_name(c, &znode->zbranch[nn], nm); in fallible_resolve_collision()
1013 *zn = znode; in fallible_resolve_collision()
1018 o_znode = znode; in fallible_resolve_collision()
1074 struct ubifs_znode *znode; in resolve_collision_directly() local
1077 znode = *zn; in resolve_collision_directly()
1079 if (matches_position(&znode->zbranch[nn], lnum, offs)) in resolve_collision_directly()
1084 err = tnc_prev(c, &znode, &nn); in resolve_collision_directly()
1089 if (keys_cmp(c, &znode->zbranch[nn].key, key)) in resolve_collision_directly()
1091 if (matches_position(&znode->zbranch[nn], lnum, offs)) { in resolve_collision_directly()
1092 *zn = znode; in resolve_collision_directly()
1099 znode = *zn; in resolve_collision_directly()
1102 err = tnc_next(c, &znode, &nn); in resolve_collision_directly()
1107 if (keys_cmp(c, &znode->zbranch[nn].key, key)) in resolve_collision_directly()
1109 *zn = znode; in resolve_collision_directly()
1111 if (matches_position(&znode->zbranch[nn], lnum, offs)) in resolve_collision_directly()
1127 struct ubifs_znode *znode) in dirty_cow_bottom_up() argument
1132 ubifs_assert(c, c->zroot.znode); in dirty_cow_bottom_up()
1133 ubifs_assert(c, znode); in dirty_cow_bottom_up()
1134 if (c->zroot.znode->level > BOTTOM_UP_HEIGHT) { in dirty_cow_bottom_up()
1136 c->bottom_up_buf = kmalloc_array(c->zroot.znode->level, in dirty_cow_bottom_up()
1143 if (c->zroot.znode->level) { in dirty_cow_bottom_up()
1148 zp = znode->parent; in dirty_cow_bottom_up()
1151 n = znode->iip; in dirty_cow_bottom_up()
1152 ubifs_assert(c, p < c->zroot.znode->level); in dirty_cow_bottom_up()
1154 if (!zp->cnext && ubifs_zn_dirty(znode)) in dirty_cow_bottom_up()
1156 znode = zp; in dirty_cow_bottom_up()
1164 zp = znode->parent; in dirty_cow_bottom_up()
1169 znode = dirty_cow_znode(c, zbr); in dirty_cow_bottom_up()
1171 ubifs_assert(c, znode == c->zroot.znode); in dirty_cow_bottom_up()
1172 znode = dirty_cow_znode(c, &c->zroot); in dirty_cow_bottom_up()
1174 if (IS_ERR(znode) || !p) in dirty_cow_bottom_up()
1177 ubifs_assert(c, path[p - 1] < znode->child_cnt); in dirty_cow_bottom_up()
1178 znode = znode->zbranch[path[p - 1]].znode; in dirty_cow_bottom_up()
1181 return znode; in dirty_cow_bottom_up()
1210 struct ubifs_znode *znode; in ubifs_lookup_level0() local
1216 znode = c->zroot.znode; in ubifs_lookup_level0()
1217 if (unlikely(!znode)) { in ubifs_lookup_level0()
1218 znode = ubifs_load_znode(c, &c->zroot, NULL, 0); in ubifs_lookup_level0()
1219 if (IS_ERR(znode)) in ubifs_lookup_level0()
1220 return PTR_ERR(znode); in ubifs_lookup_level0()
1223 znode->time = time; in ubifs_lookup_level0()
1228 exact = ubifs_search_zbranch(c, znode, key, n); in ubifs_lookup_level0()
1230 if (znode->level == 0) in ubifs_lookup_level0()
1235 zbr = &znode->zbranch[*n]; in ubifs_lookup_level0()
1237 if (zbr->znode) { in ubifs_lookup_level0()
1238 znode->time = time; in ubifs_lookup_level0()
1239 znode = zbr->znode; in ubifs_lookup_level0()
1244 znode = ubifs_load_znode(c, zbr, znode, *n); in ubifs_lookup_level0()
1245 if (IS_ERR(znode)) in ubifs_lookup_level0()
1246 return PTR_ERR(znode); in ubifs_lookup_level0()
1249 *zn = znode; in ubifs_lookup_level0()
1251 dbg_tnc("found %d, lvl %d, n %d", exact, znode->level, *n); in ubifs_lookup_level0()
1298 err = tnc_prev(c, &znode, n); in ubifs_lookup_level0()
1300 dbg_tnc("found 0, lvl %d, n -1", znode->level); in ubifs_lookup_level0()
1306 if (keys_cmp(c, key, &znode->zbranch[*n].key)) { in ubifs_lookup_level0()
1307 dbg_tnc("found 0, lvl %d, n -1", znode->level); in ubifs_lookup_level0()
1312 dbg_tnc("found 1, lvl %d, n %d", znode->level, *n); in ubifs_lookup_level0()
1313 *zn = znode; in ubifs_lookup_level0()
1346 struct ubifs_znode *znode; in lookup_level0_dirty() local
1351 znode = c->zroot.znode; in lookup_level0_dirty()
1352 if (unlikely(!znode)) { in lookup_level0_dirty()
1353 znode = ubifs_load_znode(c, &c->zroot, NULL, 0); in lookup_level0_dirty()
1354 if (IS_ERR(znode)) in lookup_level0_dirty()
1355 return PTR_ERR(znode); in lookup_level0_dirty()
1358 znode = dirty_cow_znode(c, &c->zroot); in lookup_level0_dirty()
1359 if (IS_ERR(znode)) in lookup_level0_dirty()
1360 return PTR_ERR(znode); in lookup_level0_dirty()
1362 znode->time = time; in lookup_level0_dirty()
1367 exact = ubifs_search_zbranch(c, znode, key, n); in lookup_level0_dirty()
1369 if (znode->level == 0) in lookup_level0_dirty()
1374 zbr = &znode->zbranch[*n]; in lookup_level0_dirty()
1376 if (zbr->znode) { in lookup_level0_dirty()
1377 znode->time = time; in lookup_level0_dirty()
1378 znode = dirty_cow_znode(c, zbr); in lookup_level0_dirty()
1379 if (IS_ERR(znode)) in lookup_level0_dirty()
1380 return PTR_ERR(znode); in lookup_level0_dirty()
1385 znode = ubifs_load_znode(c, zbr, znode, *n); in lookup_level0_dirty()
1386 if (IS_ERR(znode)) in lookup_level0_dirty()
1387 return PTR_ERR(znode); in lookup_level0_dirty()
1388 znode = dirty_cow_znode(c, zbr); in lookup_level0_dirty()
1389 if (IS_ERR(znode)) in lookup_level0_dirty()
1390 return PTR_ERR(znode); in lookup_level0_dirty()
1393 *zn = znode; in lookup_level0_dirty()
1395 dbg_tnc("found %d, lvl %d, n %d", exact, znode->level, *n); in lookup_level0_dirty()
1403 err = tnc_prev(c, &znode, n); in lookup_level0_dirty()
1406 dbg_tnc("found 0, lvl %d, n -1", znode->level); in lookup_level0_dirty()
1411 if (keys_cmp(c, key, &znode->zbranch[*n].key)) { in lookup_level0_dirty()
1413 dbg_tnc("found 0, lvl %d, n -1", znode->level); in lookup_level0_dirty()
1417 if (znode->cnext || !ubifs_zn_dirty(znode)) { in lookup_level0_dirty()
1418 znode = dirty_cow_bottom_up(c, znode); in lookup_level0_dirty()
1419 if (IS_ERR(znode)) in lookup_level0_dirty()
1420 return PTR_ERR(znode); in lookup_level0_dirty()
1423 dbg_tnc("found 1, lvl %d, n %d", znode->level, *n); in lookup_level0_dirty()
1424 *zn = znode; in lookup_level0_dirty()
1481 struct ubifs_znode *znode; in ubifs_tnc_locate() local
1486 found = ubifs_lookup_level0(c, key, &znode, &n); in ubifs_tnc_locate()
1494 zt = &znode->zbranch[n]; in ubifs_tnc_locate()
1512 zbr = znode->zbranch[n]; in ubifs_tnc_locate()
1556 struct ubifs_znode *znode; in ubifs_tnc_get_bu_keys() local
1564 err = ubifs_lookup_level0(c, &bu->key, &znode, &n); in ubifs_tnc_get_bu_keys()
1569 len = znode->zbranch[n].len; in ubifs_tnc_get_bu_keys()
1576 bu->zbranch[bu->cnt++] = znode->zbranch[n]; in ubifs_tnc_get_bu_keys()
1578 lnum = znode->zbranch[n].lnum; in ubifs_tnc_get_bu_keys()
1579 offs = ALIGN(znode->zbranch[n].offs + len, 8); in ubifs_tnc_get_bu_keys()
1587 err = tnc_next(c, &znode, &n); in ubifs_tnc_get_bu_keys()
1590 zbr = &znode->zbranch[n]; in ubifs_tnc_get_bu_keys()
1849 struct ubifs_znode *znode; in do_lookup_nm() local
1853 found = ubifs_lookup_level0(c, key, &znode, &n); in do_lookup_nm()
1864 err = resolve_collision(c, key, &znode, &n, nm); in do_lookup_nm()
1865 dbg_tnc("rc returned %d, znode %p, n %d", err, znode, n); in do_lookup_nm()
1873 err = tnc_read_hashed_node(c, &znode->zbranch[n], node); in do_lookup_nm()
1924 struct ubifs_znode *znode = *zn; in search_dh_cookie() local
1929 err = tnc_next(c, &znode, n); in search_dh_cookie()
1935 zbr = &znode->zbranch[*n]; in search_dh_cookie()
1949 *zn = znode; in search_dh_cookie()
1953 err = tnc_next(c, &znode, n); in search_dh_cookie()
1963 struct ubifs_znode *znode; in do_lookup_dh() local
1971 err = ubifs_lookup_level0(c, &start_key, &znode, &n); in do_lookup_dh()
1975 err = search_dh_cookie(c, key, dent, cookie, &znode, &n, err); in do_lookup_dh()
2033 struct ubifs_znode *znode) in correct_parent_keys() argument
2037 ubifs_assert(c, znode->parent); in correct_parent_keys()
2038 ubifs_assert(c, znode->iip == 0); in correct_parent_keys()
2040 key = &znode->zbranch[0].key; in correct_parent_keys()
2041 key1 = &znode->parent->zbranch[0].key; in correct_parent_keys()
2045 znode = znode->parent; in correct_parent_keys()
2046 znode->alt = 1; in correct_parent_keys()
2047 if (!znode->parent || znode->iip) in correct_parent_keys()
2049 key1 = &znode->parent->zbranch[0].key; in correct_parent_keys()
2065 static void insert_zbranch(struct ubifs_info *c, struct ubifs_znode *znode, in insert_zbranch() argument
2070 ubifs_assert(c, ubifs_zn_dirty(znode)); in insert_zbranch()
2072 if (znode->level) { in insert_zbranch()
2073 for (i = znode->child_cnt; i > n; i--) { in insert_zbranch()
2074 znode->zbranch[i] = znode->zbranch[i - 1]; in insert_zbranch()
2075 if (znode->zbranch[i].znode) in insert_zbranch()
2076 znode->zbranch[i].znode->iip = i; in insert_zbranch()
2078 if (zbr->znode) in insert_zbranch()
2079 zbr->znode->iip = n; in insert_zbranch()
2081 for (i = znode->child_cnt; i > n; i--) in insert_zbranch()
2082 znode->zbranch[i] = znode->zbranch[i - 1]; in insert_zbranch()
2084 znode->zbranch[n] = *zbr; in insert_zbranch()
2085 znode->child_cnt += 1; in insert_zbranch()
2102 znode->alt = 1; in insert_zbranch()
2117 static int tnc_insert(struct ubifs_info *c, struct ubifs_znode *znode, in tnc_insert() argument
2128 zp = znode->parent; in tnc_insert()
2129 if (znode->child_cnt < c->fanout) { in tnc_insert()
2131 dbg_tnck(key, "inserted at %d level %d, key ", n, znode->level); in tnc_insert()
2133 insert_zbranch(c, znode, zbr, n); in tnc_insert()
2136 if (n == 0 && zp && znode->iip == 0) in tnc_insert()
2137 correct_parent_keys(c, znode); in tnc_insert()
2146 dbg_tnck(key, "splitting level %d, key ", znode->level); in tnc_insert()
2148 if (znode->alt) in tnc_insert()
2153 ins_clr_old_idx_znode(c, znode); in tnc_insert()
2159 zn->level = znode->level; in tnc_insert()
2162 if (znode->level == 0 && key_type(c, key) == UBIFS_DATA_KEY) { in tnc_insert()
2165 key1 = &znode->zbranch[n - 1].key; in tnc_insert()
2176 key1 = &znode->zbranch[0].key; in tnc_insert()
2179 key1 = &znode->zbranch[n].key; in tnc_insert()
2184 zi = znode; in tnc_insert()
2206 zi = znode; in tnc_insert()
2215 zbr->znode->parent = zn; in tnc_insert()
2224 znode->child_cnt = keep; in tnc_insert()
2230 zn->zbranch[i] = znode->zbranch[keep + i]; in tnc_insert()
2233 if (zn->zbranch[i].znode) { in tnc_insert()
2234 zn->zbranch[i].znode->parent = zn; in tnc_insert()
2235 zn->zbranch[i].znode->iip = i; in tnc_insert()
2246 if (n == 0 && zi == znode && znode->iip == 0) in tnc_insert()
2247 correct_parent_keys(c, znode); in tnc_insert()
2250 n = znode->iip + 1; in tnc_insert()
2254 zbr->znode = zn; in tnc_insert()
2258 znode = zp; in tnc_insert()
2264 dbg_tnc("creating new zroot at level %d", znode->level + 1); in tnc_insert()
2271 zi->level = znode->level + 1; in tnc_insert()
2276 zi->zbranch[0].key = znode->zbranch[0].key; in tnc_insert()
2277 zi->zbranch[0].znode = znode; in tnc_insert()
2282 zi->zbranch[1].znode = zn; in tnc_insert()
2287 c->zroot.znode = zi; in tnc_insert()
2291 znode->parent = zi; in tnc_insert()
2292 znode->iip = 0; in tnc_insert()
2314 struct ubifs_znode *znode; in ubifs_tnc_add() local
2318 found = lookup_level0_dirty(c, key, &znode, &n); in ubifs_tnc_add()
2322 zbr.znode = NULL; in ubifs_tnc_add()
2328 err = tnc_insert(c, znode, &zbr, n + 1); in ubifs_tnc_add()
2330 struct ubifs_zbranch *zbr = &znode->zbranch[n]; in ubifs_tnc_add()
2365 struct ubifs_znode *znode; in ubifs_tnc_replace() local
2370 found = lookup_level0_dirty(c, key, &znode, &n); in ubifs_tnc_replace()
2377 struct ubifs_zbranch *zbr = &znode->zbranch[n]; in ubifs_tnc_replace()
2390 found = resolve_collision_directly(c, key, &znode, &n, in ubifs_tnc_replace()
2393 found, znode, n, old_lnum, old_offs); in ubifs_tnc_replace()
2401 if (znode->cnext || !ubifs_zn_dirty(znode)) { in ubifs_tnc_replace()
2402 znode = dirty_cow_bottom_up(c, znode); in ubifs_tnc_replace()
2403 if (IS_ERR(znode)) { in ubifs_tnc_replace()
2404 err = PTR_ERR(znode); in ubifs_tnc_replace()
2408 zbr = &znode->zbranch[n]; in ubifs_tnc_replace()
2450 struct ubifs_znode *znode; in ubifs_tnc_add_nm() local
2454 found = lookup_level0_dirty(c, key, &znode, &n); in ubifs_tnc_add_nm()
2462 found = fallible_resolve_collision(c, key, &znode, &n, in ubifs_tnc_add_nm()
2465 found = resolve_collision(c, key, &znode, &n, nm); in ubifs_tnc_add_nm()
2466 dbg_tnc("rc returned %d, znode %p, n %d", found, znode, n); in ubifs_tnc_add_nm()
2473 if (znode->cnext || !ubifs_zn_dirty(znode)) { in ubifs_tnc_add_nm()
2474 znode = dirty_cow_bottom_up(c, znode); in ubifs_tnc_add_nm()
2475 if (IS_ERR(znode)) { in ubifs_tnc_add_nm()
2476 err = PTR_ERR(znode); in ubifs_tnc_add_nm()
2482 struct ubifs_zbranch *zbr = &znode->zbranch[n]; in ubifs_tnc_add_nm()
2497 zbr.znode = NULL; in ubifs_tnc_add_nm()
2503 err = tnc_insert(c, znode, &zbr, n + 1); in ubifs_tnc_add_nm()
2539 static int tnc_delete(struct ubifs_info *c, struct ubifs_znode *znode, int n) in tnc_delete() argument
2546 ubifs_assert(c, znode->level == 0); in tnc_delete()
2548 dbg_tnck(&znode->zbranch[n].key, "deleting key "); in tnc_delete()
2550 zbr = &znode->zbranch[n]; in tnc_delete()
2555 ubifs_dump_znode(c, znode); in tnc_delete()
2560 for (i = n; i < znode->child_cnt - 1; i++) in tnc_delete()
2561 znode->zbranch[i] = znode->zbranch[i + 1]; in tnc_delete()
2562 znode->child_cnt -= 1; in tnc_delete()
2564 if (znode->child_cnt > 0) in tnc_delete()
2573 ubifs_assert(c, !ubifs_zn_obsolete(znode)); in tnc_delete()
2574 ubifs_assert(c, ubifs_zn_dirty(znode)); in tnc_delete()
2576 zp = znode->parent; in tnc_delete()
2577 n = znode->iip; in tnc_delete()
2581 err = insert_old_idx_znode(c, znode); in tnc_delete()
2585 if (znode->cnext) { in tnc_delete()
2586 __set_bit(OBSOLETE_ZNODE, &znode->flags); in tnc_delete()
2590 kfree(znode); in tnc_delete()
2591 znode = zp; in tnc_delete()
2592 } while (znode->child_cnt == 1); /* while removing last child */ in tnc_delete()
2595 znode->child_cnt -= 1; in tnc_delete()
2596 ubifs_assert(c, znode->level != 0); in tnc_delete()
2597 for (i = n; i < znode->child_cnt; i++) { in tnc_delete()
2598 znode->zbranch[i] = znode->zbranch[i + 1]; in tnc_delete()
2599 if (znode->zbranch[i].znode) in tnc_delete()
2600 znode->zbranch[i].znode->iip = i; in tnc_delete()
2607 if (!znode->parent) { in tnc_delete()
2608 while (znode->child_cnt == 1 && znode->level != 0) { in tnc_delete()
2609 zp = znode; in tnc_delete()
2610 zbr = &znode->zbranch[0]; in tnc_delete()
2611 znode = get_znode(c, znode, 0); in tnc_delete()
2612 if (IS_ERR(znode)) in tnc_delete()
2613 return PTR_ERR(znode); in tnc_delete()
2614 znode = dirty_cow_znode(c, zbr); in tnc_delete()
2615 if (IS_ERR(znode)) in tnc_delete()
2616 return PTR_ERR(znode); in tnc_delete()
2617 znode->parent = NULL; in tnc_delete()
2618 znode->iip = 0; in tnc_delete()
2628 c->zroot.znode = znode; in tnc_delete()
2655 struct ubifs_znode *znode; in ubifs_tnc_remove() local
2659 found = lookup_level0_dirty(c, key, &znode, &n); in ubifs_tnc_remove()
2665 err = tnc_delete(c, znode, n); in ubifs_tnc_remove()
2686 struct ubifs_znode *znode; in ubifs_tnc_remove_nm() local
2690 err = lookup_level0_dirty(c, key, &znode, &n); in ubifs_tnc_remove_nm()
2696 err = fallible_resolve_collision(c, key, &znode, &n, in ubifs_tnc_remove_nm()
2699 err = resolve_collision(c, key, &znode, &n, nm); in ubifs_tnc_remove_nm()
2700 dbg_tnc("rc returned %d, znode %p, n %d", err, znode, n); in ubifs_tnc_remove_nm()
2705 if (znode->cnext || !ubifs_zn_dirty(znode)) { in ubifs_tnc_remove_nm()
2706 znode = dirty_cow_bottom_up(c, znode); in ubifs_tnc_remove_nm()
2707 if (IS_ERR(znode)) { in ubifs_tnc_remove_nm()
2708 err = PTR_ERR(znode); in ubifs_tnc_remove_nm()
2712 err = tnc_delete(c, znode, n); in ubifs_tnc_remove_nm()
2735 struct ubifs_znode *znode; in ubifs_tnc_remove_dh() local
2743 err = lookup_level0_dirty(c, key, &znode, &n); in ubifs_tnc_remove_dh()
2747 zbr = &znode->zbranch[n]; in ubifs_tnc_remove_dh()
2764 err = ubifs_lookup_level0(c, &start_key, &znode, &n); in ubifs_tnc_remove_dh()
2768 err = search_dh_cookie(c, key, dent, cookie, &znode, &n, err); in ubifs_tnc_remove_dh()
2773 if (znode->cnext || !ubifs_zn_dirty(znode)) { in ubifs_tnc_remove_dh()
2774 znode = dirty_cow_bottom_up(c, znode); in ubifs_tnc_remove_dh()
2775 if (IS_ERR(znode)) { in ubifs_tnc_remove_dh()
2776 err = PTR_ERR(znode); in ubifs_tnc_remove_dh()
2780 err = tnc_delete(c, znode, n); in ubifs_tnc_remove_dh()
2824 struct ubifs_znode *znode; in ubifs_tnc_remove_range() local
2830 err = ubifs_lookup_level0(c, from_key, &znode, &n); in ubifs_tnc_remove_range()
2837 err = tnc_next(c, &znode, &n); in ubifs_tnc_remove_range()
2844 key = &znode->zbranch[n].key; in ubifs_tnc_remove_range()
2852 if (znode->cnext || !ubifs_zn_dirty(znode)) { in ubifs_tnc_remove_range()
2853 znode = dirty_cow_bottom_up(c, znode); in ubifs_tnc_remove_range()
2854 if (IS_ERR(znode)) { in ubifs_tnc_remove_range()
2855 err = PTR_ERR(znode); in ubifs_tnc_remove_range()
2861 for (i = n + 1, k = 0; i < znode->child_cnt; i++, k++) { in ubifs_tnc_remove_range()
2862 key = &znode->zbranch[i].key; in ubifs_tnc_remove_range()
2865 lnc_free(&znode->zbranch[i]); in ubifs_tnc_remove_range()
2866 err = ubifs_add_dirt(c, znode->zbranch[i].lnum, in ubifs_tnc_remove_range()
2867 znode->zbranch[i].len); in ubifs_tnc_remove_range()
2869 ubifs_dump_znode(c, znode); in ubifs_tnc_remove_range()
2875 for (i = n + 1 + k; i < znode->child_cnt; i++) in ubifs_tnc_remove_range()
2876 znode->zbranch[i - k] = znode->zbranch[i]; in ubifs_tnc_remove_range()
2877 znode->child_cnt -= k; in ubifs_tnc_remove_range()
2881 err = tnc_delete(c, znode, n); in ubifs_tnc_remove_range()
2992 struct ubifs_znode *znode; in ubifs_tnc_next_ent() local
3001 err = ubifs_lookup_level0(c, key, &znode, &n); in ubifs_tnc_next_ent()
3009 err = fallible_resolve_collision(c, key, &znode, &n, in ubifs_tnc_next_ent()
3012 err = resolve_collision(c, key, &znode, &n, nm); in ubifs_tnc_next_ent()
3014 err, znode, n); in ubifs_tnc_next_ent()
3020 err = tnc_next(c, &znode, &n); in ubifs_tnc_next_ent()
3035 err = tnc_next(c, &znode, &n); in ubifs_tnc_next_ent()
3041 zbr = &znode->zbranch[n]; in ubifs_tnc_next_ent()
3088 struct ubifs_znode *znode = cnext; in tnc_destroy_cnext() local
3091 if (ubifs_zn_obsolete(znode)) in tnc_destroy_cnext()
3092 kfree(znode); in tnc_destroy_cnext()
3093 else if (!ubifs_zn_cow(znode)) { in tnc_destroy_cnext()
3118 if (c->zroot.znode) { in ubifs_tnc_close()
3122 freed = ubifs_destroy_tnc_subtree(c, c->zroot.znode); in ubifs_tnc_close()
3140 struct ubifs_znode *znode) in left_znode() argument
3142 int level = znode->level; in left_znode()
3145 int n = znode->iip - 1; in left_znode()
3148 znode = znode->parent; in left_znode()
3149 if (!znode) in left_znode()
3153 znode = get_znode(c, znode, n); in left_znode()
3154 if (IS_ERR(znode)) in left_znode()
3155 return znode; in left_znode()
3156 while (znode->level != level) { in left_znode()
3157 n = znode->child_cnt - 1; in left_znode()
3158 znode = get_znode(c, znode, n); in left_znode()
3159 if (IS_ERR(znode)) in left_znode()
3160 return znode; in left_znode()
3165 return znode; in left_znode()
3177 struct ubifs_znode *znode) in right_znode() argument
3179 int level = znode->level; in right_znode()
3182 int n = znode->iip + 1; in right_znode()
3185 znode = znode->parent; in right_znode()
3186 if (!znode) in right_znode()
3188 if (n < znode->child_cnt) { in right_znode()
3190 znode = get_znode(c, znode, n); in right_znode()
3191 if (IS_ERR(znode)) in right_znode()
3192 return znode; in right_znode()
3193 while (znode->level != level) { in right_znode()
3194 znode = get_znode(c, znode, 0); in right_znode()
3195 if (IS_ERR(znode)) in right_znode()
3196 return znode; in right_znode()
3201 return znode; in right_znode()
3233 struct ubifs_znode *znode, *zn; in lookup_znode() local
3246 znode = c->zroot.znode; in lookup_znode()
3247 if (!znode) { in lookup_znode()
3248 znode = ubifs_load_znode(c, &c->zroot, NULL, 0); in lookup_znode()
3249 if (IS_ERR(znode)) in lookup_znode()
3250 return znode; in lookup_znode()
3254 return znode; in lookup_znode()
3256 if (level >= znode->level) in lookup_znode()
3259 ubifs_search_zbranch(c, znode, key, &n); in lookup_znode()
3269 znode = left_znode(c, znode); in lookup_znode()
3270 if (!znode) in lookup_znode()
3272 if (IS_ERR(znode)) in lookup_znode()
3273 return znode; in lookup_znode()
3274 ubifs_search_zbranch(c, znode, key, &n); in lookup_znode()
3277 if (znode->level == level + 1) in lookup_znode()
3279 znode = get_znode(c, znode, n); in lookup_znode()
3280 if (IS_ERR(znode)) in lookup_znode()
3281 return znode; in lookup_znode()
3284 if (znode->zbranch[n].lnum == lnum && znode->zbranch[n].offs == offs) in lookup_znode()
3285 return get_znode(c, znode, n); in lookup_znode()
3293 zn = znode; in lookup_znode()
3301 znode = left_znode(c, znode); in lookup_znode()
3302 if (!znode) in lookup_znode()
3304 if (IS_ERR(znode)) in lookup_znode()
3305 return znode; in lookup_znode()
3306 n = znode->child_cnt - 1; in lookup_znode()
3309 if (znode->zbranch[n].lnum == lnum && in lookup_znode()
3310 znode->zbranch[n].offs == offs) in lookup_znode()
3311 return get_znode(c, znode, n); in lookup_znode()
3313 if (keys_cmp(c, &znode->zbranch[n].key, key) < 0) in lookup_znode()
3317 znode = zn; in lookup_znode()
3322 if (++n >= znode->child_cnt) { in lookup_znode()
3323 znode = right_znode(c, znode); in lookup_znode()
3324 if (!znode) in lookup_znode()
3326 if (IS_ERR(znode)) in lookup_znode()
3327 return znode; in lookup_znode()
3331 if (znode->zbranch[n].lnum == lnum && in lookup_znode()
3332 znode->zbranch[n].offs == offs) in lookup_znode()
3333 return get_znode(c, znode, n); in lookup_znode()
3335 if (keys_cmp(c, &znode->zbranch[n].key, key) > 0) in lookup_znode()
3361 struct ubifs_znode *znode; in is_idx_node_in_tnc() local
3363 znode = lookup_znode(c, key, level, lnum, offs); in is_idx_node_in_tnc()
3364 if (!znode) in is_idx_node_in_tnc()
3366 if (IS_ERR(znode)) in is_idx_node_in_tnc()
3367 return PTR_ERR(znode); in is_idx_node_in_tnc()
3369 return ubifs_zn_dirty(znode) ? 1 : 2; in is_idx_node_in_tnc()
3389 struct ubifs_znode *znode, *zn; in is_leaf_node_in_tnc() local
3393 found = ubifs_lookup_level0(c, key, &znode, &n); in is_leaf_node_in_tnc()
3398 zbr = &znode->zbranch[n]; in is_leaf_node_in_tnc()
3407 zn = znode; in is_leaf_node_in_tnc()
3411 err = tnc_prev(c, &znode, &n); in is_leaf_node_in_tnc()
3416 if (keys_cmp(c, key, &znode->zbranch[n].key)) in is_leaf_node_in_tnc()
3418 zbr = &znode->zbranch[n]; in is_leaf_node_in_tnc()
3423 znode = zn; in is_leaf_node_in_tnc()
3426 err = tnc_next(c, &znode, &n); in is_leaf_node_in_tnc()
3432 if (keys_cmp(c, key, &znode->zbranch[n].key)) in is_leaf_node_in_tnc()
3434 zbr = &znode->zbranch[n]; in is_leaf_node_in_tnc()
3498 struct ubifs_znode *znode; in ubifs_dirty_idx_node() local
3502 znode = lookup_znode(c, key, level, lnum, offs); in ubifs_dirty_idx_node()
3503 if (!znode) in ubifs_dirty_idx_node()
3505 if (IS_ERR(znode)) { in ubifs_dirty_idx_node()
3506 err = PTR_ERR(znode); in ubifs_dirty_idx_node()
3509 znode = dirty_cow_bottom_up(c, znode); in ubifs_dirty_idx_node()
3510 if (IS_ERR(znode)) { in ubifs_dirty_idx_node()
3511 err = PTR_ERR(znode); in ubifs_dirty_idx_node()
3536 struct ubifs_znode *znode; in dbg_check_inode_size() local
3549 err = ubifs_lookup_level0(c, &from_key, &znode, &n); in dbg_check_inode_size()
3558 err = tnc_next(c, &znode, &n); in dbg_check_inode_size()
3567 key = &znode->zbranch[n].key; in dbg_check_inode_size()