Lines Matching refs:pnode
347 struct ubifs_pnode *pnode) in ubifs_pack_pnode() argument
355 pack_bits(&addr, &pos, pnode->num, c->pcnt_bits); in ubifs_pack_pnode()
357 pack_bits(&addr, &pos, pnode->lprops[i].free >> 3, in ubifs_pack_pnode()
359 pack_bits(&addr, &pos, pnode->lprops[i].dirty >> 3, in ubifs_pack_pnode()
361 if (pnode->lprops[i].flags & LPROPS_INDEX) in ubifs_pack_pnode()
511 static void add_pnode_dirt(struct ubifs_info *c, struct ubifs_pnode *pnode) in add_pnode_dirt() argument
513 ubifs_add_lpt_dirt(c, pnode->parent->nbranch[pnode->iip].lnum, in add_pnode_dirt()
609 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()
632 if (!pnode || !nnode || !buf || !ltab || !lsave) { in ubifs_create_dflt_lpt()
659 pnode->lprops[0].free = c->leb_size - iopos; in ubifs_create_dflt_lpt()
660 pnode->lprops[0].dirty = iopos - node_sz; in ubifs_create_dflt_lpt()
661 pnode->lprops[0].flags = LPROPS_INDEX; in ubifs_create_dflt_lpt()
665 pnode->lprops[1].free = c->leb_size - iopos; in ubifs_create_dflt_lpt()
666 pnode->lprops[1].dirty = iopos - node_sz; in ubifs_create_dflt_lpt()
669 pnode->lprops[i].free = c->leb_size; in ubifs_create_dflt_lpt()
672 ubifs_pack_pnode(c, p, pnode); in ubifs_create_dflt_lpt()
675 pnode->num += 1; in ubifs_create_dflt_lpt()
678 pnode->lprops[0].free = c->leb_size; in ubifs_create_dflt_lpt()
679 pnode->lprops[0].dirty = 0; in ubifs_create_dflt_lpt()
680 pnode->lprops[0].flags = 0; in ubifs_create_dflt_lpt()
682 pnode->lprops[1].free = c->leb_size; in ubifs_create_dflt_lpt()
683 pnode->lprops[1].dirty = 0; in ubifs_create_dflt_lpt()
706 ubifs_pack_pnode(c, p, pnode); in ubifs_create_dflt_lpt()
714 pnode->num += 1; in ubifs_create_dflt_lpt()
853 kfree(pnode); in ubifs_create_dflt_lpt()
865 static void update_cats(struct ubifs_info *c, struct ubifs_pnode *pnode) in update_cats() argument
870 int cat = pnode->lprops[i].flags & LPROPS_CAT_MASK; in update_cats()
871 int lnum = pnode->lprops[i].lnum; in update_cats()
875 ubifs_add_to_cat(c, &pnode->lprops[i], cat); in update_cats()
961 struct ubifs_pnode *pnode) in unpack_pnode() argument
970 pnode->num = ubifs_unpack_bits(&addr, &pos, c->pcnt_bits); in unpack_pnode()
972 struct ubifs_lprops * const lprops = &pnode->lprops[i]; in unpack_pnode()
1136 static int validate_pnode(const struct ubifs_info *c, struct ubifs_pnode *pnode, in validate_pnode() argument
1144 if (pnode->num != num) in validate_pnode()
1148 int free = pnode->lprops[i].free; in validate_pnode()
1149 int dirty = pnode->lprops[i].dirty; in validate_pnode()
1171 struct ubifs_pnode *pnode) in set_pnode_lnum() argument
1175 lnum = (pnode->num << UBIFS_LPT_FANOUT_SHIFT) + c->main_first; in set_pnode_lnum()
1179 pnode->lprops[i].lnum = lnum++; in set_pnode_lnum()
1262 struct ubifs_pnode *pnode = NULL; in read_pnode() local
1269 pnode = kzalloc(sizeof(struct ubifs_pnode), GFP_NOFS); in read_pnode()
1270 if (!pnode) in read_pnode()
1282 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in read_pnode()
1284 struct ubifs_lprops * const lprops = &pnode->lprops[i]; in read_pnode()
1293 err = unpack_pnode(c, buf, pnode); in read_pnode()
1297 err = validate_pnode(c, pnode, parent, iip); in read_pnode()
1301 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in read_pnode()
1302 branch->pnode = pnode; in read_pnode()
1303 pnode->parent = parent; in read_pnode()
1304 pnode->iip = iip; in read_pnode()
1305 set_pnode_lnum(c, pnode); in read_pnode()
1311 ubifs_dump_pnode(c, pnode, parent, iip); in read_pnode()
1314 kfree(pnode); in read_pnode()
1424 struct ubifs_pnode *pnode; in ubifs_get_pnode() local
1428 pnode = branch->pnode; in ubifs_get_pnode()
1429 if (pnode) in ubifs_get_pnode()
1430 return pnode; in ubifs_get_pnode()
1434 update_cats(c, branch->pnode); in ubifs_get_pnode()
1435 return branch->pnode; in ubifs_get_pnode()
1450 struct ubifs_pnode *pnode; in ubifs_lpt_lookup() local
1468 pnode = ubifs_get_pnode(c, nnode, iip); in ubifs_lpt_lookup()
1469 if (IS_ERR(pnode)) in ubifs_lpt_lookup()
1470 return ERR_CAST(pnode); in ubifs_lpt_lookup()
1473 pnode->lprops[iip].free, pnode->lprops[iip].dirty, in ubifs_lpt_lookup()
1474 pnode->lprops[iip].flags); in ubifs_lpt_lookup()
1475 return &pnode->lprops[iip]; in ubifs_lpt_lookup()
1538 struct ubifs_pnode *pnode) in dirty_cow_pnode() argument
1542 if (!test_bit(COW_CNODE, &pnode->flags)) { in dirty_cow_pnode()
1544 if (!test_and_set_bit(DIRTY_CNODE, &pnode->flags)) { in dirty_cow_pnode()
1546 add_pnode_dirt(c, pnode); in dirty_cow_pnode()
1548 return pnode; in dirty_cow_pnode()
1556 memcpy(p, pnode, sizeof(struct ubifs_pnode)); in dirty_cow_pnode()
1560 replace_cats(c, pnode, p); in dirty_cow_pnode()
1562 ubifs_assert(!test_bit(OBSOLETE_CNODE, &pnode->flags)); in dirty_cow_pnode()
1563 __set_bit(OBSOLETE_CNODE, &pnode->flags); in dirty_cow_pnode()
1566 add_pnode_dirt(c, pnode); in dirty_cow_pnode()
1567 pnode->parent->nbranch[p->iip].pnode = p; in dirty_cow_pnode()
1583 struct ubifs_pnode *pnode; in ubifs_lpt_lookup_dirty() local
1607 pnode = ubifs_get_pnode(c, nnode, iip); in ubifs_lpt_lookup_dirty()
1608 if (IS_ERR(pnode)) in ubifs_lpt_lookup_dirty()
1609 return ERR_CAST(pnode); in ubifs_lpt_lookup_dirty()
1610 pnode = dirty_cow_pnode(c, pnode); in ubifs_lpt_lookup_dirty()
1611 if (IS_ERR(pnode)) in ubifs_lpt_lookup_dirty()
1612 return ERR_CAST(pnode); in ubifs_lpt_lookup_dirty()
1615 pnode->lprops[iip].free, pnode->lprops[iip].dirty, in ubifs_lpt_lookup_dirty()
1616 pnode->lprops[iip].flags); in ubifs_lpt_lookup_dirty()
1617 ubifs_assert(test_bit(DIRTY_CNODE, &pnode->flags)); in ubifs_lpt_lookup_dirty()
1618 return &pnode->lprops[iip]; in ubifs_lpt_lookup_dirty()
1778 struct ubifs_pnode pnode; member
1784 struct ubifs_pnode *pnode; member
1863 struct ubifs_pnode *pnode; in scan_get_pnode() local
1868 pnode = branch->pnode; in scan_get_pnode()
1869 if (pnode) { in scan_get_pnode()
1871 path->ptr.pnode = pnode; in scan_get_pnode()
1872 return pnode; in scan_get_pnode()
1874 pnode = &path->pnode; in scan_get_pnode()
1876 path->ptr.pnode = pnode; in scan_get_pnode()
1877 memset(pnode, 0, sizeof(struct ubifs_pnode)); in scan_get_pnode()
1887 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in scan_get_pnode()
1889 struct ubifs_lprops * const lprops = &pnode->lprops[i]; in scan_get_pnode()
1902 err = unpack_pnode(c, buf, pnode); in scan_get_pnode()
1906 err = validate_pnode(c, pnode, parent, iip); in scan_get_pnode()
1910 pnode->num = calc_pnode_num_from_parent(c, parent, iip); in scan_get_pnode()
1911 pnode->parent = parent; in scan_get_pnode()
1912 pnode->iip = iip; in scan_get_pnode()
1913 set_pnode_lnum(c, pnode); in scan_get_pnode()
1914 return pnode; in scan_get_pnode()
1932 struct ubifs_pnode *pnode; in ubifs_lpt_scan_nolock() local
1972 pnode = scan_get_pnode(c, path + h, nnode, iip); in ubifs_lpt_scan_nolock()
1973 if (IS_ERR(pnode)) { in ubifs_lpt_scan_nolock()
1974 err = PTR_ERR(pnode); in ubifs_lpt_scan_nolock()
1981 struct ubifs_lprops *lprops = &pnode->lprops[iip]; in ubifs_lpt_scan_nolock()
2014 pnode = kmemdup(&path[h].pnode, sz, GFP_NOFS); in ubifs_lpt_scan_nolock()
2015 if (!pnode) { in ubifs_lpt_scan_nolock()
2019 parent = pnode->parent; in ubifs_lpt_scan_nolock()
2020 parent->nbranch[pnode->iip].pnode = pnode; in ubifs_lpt_scan_nolock()
2021 path[h].ptr.pnode = pnode; in ubifs_lpt_scan_nolock()
2023 update_cats(c, pnode); in ubifs_lpt_scan_nolock()
2058 iip = pnode->iip; in ubifs_lpt_scan_nolock()
2079 pnode = scan_get_pnode(c, path + h, nnode, iip); in ubifs_lpt_scan_nolock()
2080 if (IS_ERR(pnode)) { in ubifs_lpt_scan_nolock()
2081 err = PTR_ERR(pnode); in ubifs_lpt_scan_nolock()
2099 static int dbg_chk_pnode(struct ubifs_info *c, struct ubifs_pnode *pnode, in dbg_chk_pnode() argument
2104 if (pnode->num != col) { in dbg_chk_pnode()
2106 pnode->num, col, pnode->parent->num, pnode->iip); in dbg_chk_pnode()
2110 struct ubifs_lprops *lp, *lprops = &pnode->lprops[i]; in dbg_chk_pnode()
2111 int lnum = (pnode->num << UBIFS_LPT_FANOUT_SHIFT) + i + in dbg_chk_pnode()
2269 struct ubifs_pnode *pnode; in dbg_check_lpt_nodes() local
2272 pnode = (struct ubifs_pnode *)cnode; in dbg_check_lpt_nodes()
2273 err = dbg_chk_pnode(c, pnode, col); in dbg_check_lpt_nodes()