Lines Matching refs:pnode
341 struct ubifs_pnode *pnode) in ubifs_pack_pnode() argument
349 pack_bits(c, &addr, &pos, pnode->num, c->pcnt_bits); in ubifs_pack_pnode()
351 pack_bits(c, &addr, &pos, pnode->lprops[i].free >> 3, in ubifs_pack_pnode()
353 pack_bits(c, &addr, &pos, pnode->lprops[i].dirty >> 3, in ubifs_pack_pnode()
355 if (pnode->lprops[i].flags & LPROPS_INDEX) in ubifs_pack_pnode()
505 static void add_pnode_dirt(struct ubifs_info *c, struct ubifs_pnode *pnode) in add_pnode_dirt() argument
507 ubifs_add_lpt_dirt(c, pnode->parent->nbranch[pnode->iip].lnum, in add_pnode_dirt()
604 struct ubifs_pnode *pnode = NULL; in ubifs_create_dflt_lpt() local
628 pnode = kzalloc(sizeof(struct ubifs_pnode), GFP_KERNEL); in ubifs_create_dflt_lpt()
633 if (!pnode || !nnode || !buf || !ltab || !lsave) { in ubifs_create_dflt_lpt()
660 pnode->lprops[0].free = c->leb_size - iopos; in ubifs_create_dflt_lpt()
661 pnode->lprops[0].dirty = iopos - node_sz; in ubifs_create_dflt_lpt()
662 pnode->lprops[0].flags = LPROPS_INDEX; in ubifs_create_dflt_lpt()
666 pnode->lprops[1].free = c->leb_size - iopos; in ubifs_create_dflt_lpt()
667 pnode->lprops[1].dirty = iopos - node_sz; in ubifs_create_dflt_lpt()
670 pnode->lprops[i].free = c->leb_size; in ubifs_create_dflt_lpt()
673 ubifs_pack_pnode(c, p, pnode); in ubifs_create_dflt_lpt()
680 pnode->num += 1; in ubifs_create_dflt_lpt()
683 pnode->lprops[0].free = c->leb_size; in ubifs_create_dflt_lpt()
684 pnode->lprops[0].dirty = 0; in ubifs_create_dflt_lpt()
685 pnode->lprops[0].flags = 0; in ubifs_create_dflt_lpt()
687 pnode->lprops[1].free = c->leb_size; in ubifs_create_dflt_lpt()
688 pnode->lprops[1].dirty = 0; in ubifs_create_dflt_lpt()
711 ubifs_pack_pnode(c, p, pnode); in ubifs_create_dflt_lpt()
723 pnode->num += 1; in ubifs_create_dflt_lpt()
867 kfree(pnode); in ubifs_create_dflt_lpt()
879 static void update_cats(struct ubifs_info *c, struct ubifs_pnode *pnode) in update_cats() argument
884 int cat = pnode->lprops[i].flags & LPROPS_CAT_MASK; in update_cats()
885 int lnum = pnode->lprops[i].lnum; in update_cats()
889 ubifs_add_to_cat(c, &pnode->lprops[i], cat); in update_cats()
975 struct ubifs_pnode *pnode) in unpack_pnode() argument
984 pnode->num = ubifs_unpack_bits(c, &addr, &pos, c->pcnt_bits); in unpack_pnode()
986 struct ubifs_lprops * const lprops = &pnode->lprops[i]; in unpack_pnode()
1148 static int validate_pnode(const struct ubifs_info *c, struct ubifs_pnode *pnode, in validate_pnode() argument
1156 if (pnode->num != num) in validate_pnode()
1160 int free = pnode->lprops[i].free; in validate_pnode()
1161 int dirty = pnode->lprops[i].dirty; in validate_pnode()
1183 struct ubifs_pnode *pnode) in set_pnode_lnum() argument
1187 lnum = (pnode->num << UBIFS_LPT_FANOUT_SHIFT) + c->main_first; in set_pnode_lnum()
1191 pnode->lprops[i].lnum = lnum++; in set_pnode_lnum()
1274 struct ubifs_pnode *pnode = NULL; in read_pnode() local
1281 pnode = kzalloc(sizeof(struct ubifs_pnode), GFP_NOFS); in read_pnode()
1282 if (!pnode) in read_pnode()
1294 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in read_pnode()
1296 struct ubifs_lprops * const lprops = &pnode->lprops[i]; in read_pnode()
1305 err = unpack_pnode(c, buf, pnode); in read_pnode()
1309 err = validate_pnode(c, pnode, parent, iip); in read_pnode()
1313 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in read_pnode()
1314 branch->pnode = pnode; in read_pnode()
1315 pnode->parent = parent; in read_pnode()
1316 pnode->iip = iip; in read_pnode()
1317 set_pnode_lnum(c, pnode); in read_pnode()
1323 ubifs_dump_pnode(c, pnode, parent, iip); in read_pnode()
1326 kfree(pnode); in read_pnode()
1434 struct ubifs_pnode *pnode; in ubifs_get_pnode() local
1438 pnode = branch->pnode; in ubifs_get_pnode()
1439 if (pnode) in ubifs_get_pnode()
1440 return pnode; in ubifs_get_pnode()
1444 update_cats(c, branch->pnode); in ubifs_get_pnode()
1445 return branch->pnode; in ubifs_get_pnode()
1491 struct ubifs_pnode *pnode; in ubifs_lpt_lookup() local
1494 pnode = ubifs_pnode_lookup(c, i >> UBIFS_LPT_FANOUT_SHIFT); in ubifs_lpt_lookup()
1495 if (IS_ERR(pnode)) in ubifs_lpt_lookup()
1496 return ERR_CAST(pnode); in ubifs_lpt_lookup()
1499 pnode->lprops[iip].free, pnode->lprops[iip].dirty, in ubifs_lpt_lookup()
1500 pnode->lprops[iip].flags); in ubifs_lpt_lookup()
1501 return &pnode->lprops[iip]; in ubifs_lpt_lookup()
1563 struct ubifs_pnode *pnode) in dirty_cow_pnode() argument
1567 if (!test_bit(COW_CNODE, &pnode->flags)) { in dirty_cow_pnode()
1569 if (!test_and_set_bit(DIRTY_CNODE, &pnode->flags)) { in dirty_cow_pnode()
1571 add_pnode_dirt(c, pnode); in dirty_cow_pnode()
1573 return pnode; in dirty_cow_pnode()
1577 p = kmemdup(pnode, sizeof(struct ubifs_pnode), GFP_NOFS); in dirty_cow_pnode()
1584 replace_cats(c, pnode, p); in dirty_cow_pnode()
1586 ubifs_assert(c, !test_bit(OBSOLETE_CNODE, &pnode->flags)); in dirty_cow_pnode()
1587 __set_bit(OBSOLETE_CNODE, &pnode->flags); in dirty_cow_pnode()
1590 add_pnode_dirt(c, pnode); in dirty_cow_pnode()
1591 pnode->parent->nbranch[p->iip].pnode = p; in dirty_cow_pnode()
1607 struct ubifs_pnode *pnode; in ubifs_lpt_lookup_dirty() local
1631 pnode = ubifs_get_pnode(c, nnode, iip); in ubifs_lpt_lookup_dirty()
1632 if (IS_ERR(pnode)) in ubifs_lpt_lookup_dirty()
1633 return ERR_CAST(pnode); in ubifs_lpt_lookup_dirty()
1634 pnode = dirty_cow_pnode(c, pnode); in ubifs_lpt_lookup_dirty()
1635 if (IS_ERR(pnode)) in ubifs_lpt_lookup_dirty()
1636 return ERR_CAST(pnode); in ubifs_lpt_lookup_dirty()
1639 pnode->lprops[iip].free, pnode->lprops[iip].dirty, in ubifs_lpt_lookup_dirty()
1640 pnode->lprops[iip].flags); in ubifs_lpt_lookup_dirty()
1641 ubifs_assert(c, test_bit(DIRTY_CNODE, &pnode->flags)); in ubifs_lpt_lookup_dirty()
1642 return &pnode->lprops[iip]; in ubifs_lpt_lookup_dirty()
1709 struct ubifs_pnode *pnode; in ubifs_lpt_calc_hash() local
1714 pnode = ubifs_get_pnode(c, nn, i); in ubifs_lpt_calc_hash()
1715 if (IS_ERR(pnode)) { in ubifs_lpt_calc_hash()
1716 err = PTR_ERR(pnode); in ubifs_lpt_calc_hash()
1720 ubifs_pack_pnode(c, buf, pnode); in ubifs_lpt_calc_hash()
1929 struct ubifs_pnode pnode; member
1935 struct ubifs_pnode *pnode; member
2014 struct ubifs_pnode *pnode; in scan_get_pnode() local
2019 pnode = branch->pnode; in scan_get_pnode()
2020 if (pnode) { in scan_get_pnode()
2022 path->ptr.pnode = pnode; in scan_get_pnode()
2023 return pnode; in scan_get_pnode()
2025 pnode = &path->pnode; in scan_get_pnode()
2027 path->ptr.pnode = pnode; in scan_get_pnode()
2028 memset(pnode, 0, sizeof(struct ubifs_pnode)); in scan_get_pnode()
2038 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in scan_get_pnode()
2040 struct ubifs_lprops * const lprops = &pnode->lprops[i]; in scan_get_pnode()
2053 err = unpack_pnode(c, buf, pnode); in scan_get_pnode()
2057 err = validate_pnode(c, pnode, parent, iip); in scan_get_pnode()
2061 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in scan_get_pnode()
2062 pnode->parent = parent; in scan_get_pnode()
2063 pnode->iip = iip; in scan_get_pnode()
2064 set_pnode_lnum(c, pnode); in scan_get_pnode()
2065 return pnode; in scan_get_pnode()
2083 struct ubifs_pnode *pnode; in ubifs_lpt_scan_nolock() local
2123 pnode = scan_get_pnode(c, path + h, nnode, iip); in ubifs_lpt_scan_nolock()
2124 if (IS_ERR(pnode)) { in ubifs_lpt_scan_nolock()
2125 err = PTR_ERR(pnode); in ubifs_lpt_scan_nolock()
2132 struct ubifs_lprops *lprops = &pnode->lprops[iip]; in ubifs_lpt_scan_nolock()
2165 pnode = kmemdup(&path[h].pnode, sz, GFP_NOFS); in ubifs_lpt_scan_nolock()
2166 if (!pnode) { in ubifs_lpt_scan_nolock()
2170 parent = pnode->parent; in ubifs_lpt_scan_nolock()
2171 parent->nbranch[pnode->iip].pnode = pnode; in ubifs_lpt_scan_nolock()
2172 path[h].ptr.pnode = pnode; in ubifs_lpt_scan_nolock()
2174 update_cats(c, pnode); in ubifs_lpt_scan_nolock()
2209 iip = pnode->iip; in ubifs_lpt_scan_nolock()
2230 pnode = scan_get_pnode(c, path + h, nnode, iip); in ubifs_lpt_scan_nolock()
2231 if (IS_ERR(pnode)) { in ubifs_lpt_scan_nolock()
2232 err = PTR_ERR(pnode); in ubifs_lpt_scan_nolock()
2250 static int dbg_chk_pnode(struct ubifs_info *c, struct ubifs_pnode *pnode, in dbg_chk_pnode() argument
2255 if (pnode->num != col) { in dbg_chk_pnode()
2257 pnode->num, col, pnode->parent->num, pnode->iip); in dbg_chk_pnode()
2261 struct ubifs_lprops *lp, *lprops = &pnode->lprops[i]; in dbg_chk_pnode()
2262 int lnum = (pnode->num << UBIFS_LPT_FANOUT_SHIFT) + i + in dbg_chk_pnode()
2420 struct ubifs_pnode *pnode; in dbg_check_lpt_nodes() local
2423 pnode = (struct ubifs_pnode *)cnode; in dbg_check_lpt_nodes()
2424 err = dbg_chk_pnode(c, pnode, col); in dbg_check_lpt_nodes()