Lines Matching full:args
46 STATIC int xfs_attr3_leaf_create(struct xfs_da_args *args,
50 struct xfs_da_args *args, int freemap_index);
51 STATIC void xfs_attr3_leaf_compact(struct xfs_da_args *args,
68 STATIC void xfs_attr3_leaf_moveents(struct xfs_da_args *args,
450 struct xfs_da_args *args, in xfs_attr_match() argument
455 if (args->namelen != namelen) in xfs_attr_match()
457 if (memcmp(args->name, name, namelen) != 0) in xfs_attr_match()
463 if (args->attr_filter != in xfs_attr_match()
471 struct xfs_da_args *args, in xfs_attr_copy_value() argument
478 if (!args->valuelen) { in xfs_attr_copy_value()
479 args->valuelen = valuelen; in xfs_attr_copy_value()
486 if (args->valuelen < valuelen) { in xfs_attr_copy_value()
487 args->valuelen = valuelen; in xfs_attr_copy_value()
491 if (!args->value) { in xfs_attr_copy_value()
492 args->value = kvmalloc(valuelen, GFP_KERNEL | __GFP_NOLOCKDEP); in xfs_attr_copy_value()
493 if (!args->value) in xfs_attr_copy_value()
496 args->valuelen = valuelen; in xfs_attr_copy_value()
499 if (args->rmtblkno) in xfs_attr_copy_value()
500 return xfs_attr_rmtval_get(args); in xfs_attr_copy_value()
510 memcpy(args->value, value, valuelen); in xfs_attr_copy_value()
652 struct xfs_da_args *args) in xfs_attr_shortform_create() argument
654 struct xfs_inode *dp = args->dp; in xfs_attr_shortform_create()
658 trace_xfs_attr_sf_create(args); in xfs_attr_shortform_create()
667 xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_ADATA); in xfs_attr_shortform_create()
672 * args: args containing attribute name and namelen
681 struct xfs_da_args *args, in xfs_attr_sf_findname() argument
692 sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data; in xfs_attr_sf_findname()
698 if (!xfs_attr_match(args, sfe->namelen, sfe->nameval, in xfs_attr_sf_findname()
721 struct xfs_da_args *args, in xfs_attr_shortform_add() argument
731 trace_xfs_attr_sf_add(args); in xfs_attr_shortform_add()
733 dp = args->dp; in xfs_attr_shortform_add()
740 if (xfs_attr_sf_findname(args, &sfe, NULL) == -EEXIST) in xfs_attr_shortform_add()
744 size = xfs_attr_sf_entsize_byname(args->namelen, args->valuelen); in xfs_attr_shortform_add()
749 sfe->namelen = args->namelen; in xfs_attr_shortform_add()
750 sfe->valuelen = args->valuelen; in xfs_attr_shortform_add()
751 sfe->flags = args->attr_filter; in xfs_attr_shortform_add()
752 memcpy(sfe->nameval, args->name, args->namelen); in xfs_attr_shortform_add()
753 memcpy(&sfe->nameval[args->namelen], args->value, args->valuelen); in xfs_attr_shortform_add()
756 xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE | XFS_ILOG_ADATA); in xfs_attr_shortform_add()
758 xfs_sbversion_add_attr2(mp, args->trans); in xfs_attr_shortform_add()
784 struct xfs_da_args *args) in xfs_attr_sf_removename() argument
794 trace_xfs_attr_sf_remove(args); in xfs_attr_sf_removename()
796 dp = args->dp; in xfs_attr_sf_removename()
800 error = xfs_attr_sf_findname(args, &sfe, &base); in xfs_attr_sf_removename()
821 !(args->op_flags & XFS_DA_OP_ADDNAME)) { in xfs_attr_sf_removename()
822 xfs_attr_fork_remove(dp, args->trans); in xfs_attr_sf_removename()
828 (args->op_flags & XFS_DA_OP_ADDNAME) || in xfs_attr_sf_removename()
831 xfs_trans_log_inode(args->trans, dp, in xfs_attr_sf_removename()
835 xfs_sbversion_add_attr2(mp, args->trans); in xfs_attr_sf_removename()
845 xfs_attr_shortform_lookup(xfs_da_args_t *args) in xfs_attr_shortform_lookup() argument
852 trace_xfs_attr_sf_lookup(args); in xfs_attr_shortform_lookup()
854 ifp = args->dp->i_afp; in xfs_attr_shortform_lookup()
860 if (xfs_attr_match(args, sfe->namelen, sfe->nameval, in xfs_attr_shortform_lookup()
870 * If args->valuelen is zero, only the length needs to be returned. Unlike a
876 struct xfs_da_args *args) in xfs_attr_shortform_getvalue() argument
882 ASSERT(args->dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL); in xfs_attr_shortform_getvalue()
883 sf = (struct xfs_attr_shortform *)args->dp->i_afp->if_u1.if_data; in xfs_attr_shortform_getvalue()
887 if (xfs_attr_match(args, sfe->namelen, sfe->nameval, in xfs_attr_shortform_getvalue()
889 return xfs_attr_copy_value(args, in xfs_attr_shortform_getvalue()
890 &sfe->nameval[args->namelen], sfe->valuelen); in xfs_attr_shortform_getvalue()
901 struct xfs_da_args *args, in xfs_attr_shortform_to_leaf() argument
914 trace_xfs_attr_sf_to_leaf(args); in xfs_attr_shortform_to_leaf()
916 dp = args->dp; in xfs_attr_shortform_to_leaf()
926 xfs_bmap_local_to_extents_empty(args->trans, dp, XFS_ATTR_FORK); in xfs_attr_shortform_to_leaf()
929 error = xfs_da_grow_inode(args, &blkno); in xfs_attr_shortform_to_leaf()
934 error = xfs_attr3_leaf_create(args, blkno, &bp); in xfs_attr_shortform_to_leaf()
940 nargs.geo = args->geo; in xfs_attr_shortform_to_leaf()
941 nargs.total = args->total; in xfs_attr_shortform_to_leaf()
943 nargs.trans = args->trans; in xfs_attr_shortform_to_leaf()
1094 struct xfs_da_args *args, in xfs_attr3_leaf_to_shortform() argument
1102 struct xfs_inode *dp = args->dp; in xfs_attr3_leaf_to_shortform()
1107 trace_xfs_attr_leaf_to_sf(args); in xfs_attr3_leaf_to_shortform()
1109 tmpbuffer = kmem_alloc(args->geo->blksize, 0); in xfs_attr3_leaf_to_shortform()
1113 memcpy(tmpbuffer, bp->b_addr, args->geo->blksize); in xfs_attr3_leaf_to_shortform()
1116 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_to_shortform()
1120 memset(bp->b_addr, 0, args->geo->blksize); in xfs_attr3_leaf_to_shortform()
1125 error = xfs_da_shrink_inode(args, 0, bp); in xfs_attr3_leaf_to_shortform()
1132 xfs_attr_fork_remove(dp, args->trans); in xfs_attr3_leaf_to_shortform()
1136 xfs_attr_shortform_create(args); in xfs_attr3_leaf_to_shortform()
1142 nargs.geo = args->geo; in xfs_attr3_leaf_to_shortform()
1144 nargs.total = args->total; in xfs_attr3_leaf_to_shortform()
1146 nargs.trans = args->trans; in xfs_attr3_leaf_to_shortform()
1176 struct xfs_da_args *args) in xfs_attr3_leaf_to_node() argument
1183 struct xfs_inode *dp = args->dp; in xfs_attr3_leaf_to_node()
1190 trace_xfs_attr_leaf_to_node(args); in xfs_attr3_leaf_to_node()
1192 error = xfs_da_grow_inode(args, &blkno); in xfs_attr3_leaf_to_node()
1195 error = xfs_attr3_leaf_read(args->trans, dp, 0, &bp1); in xfs_attr3_leaf_to_node()
1199 error = xfs_da_get_buf(args->trans, dp, blkno, &bp2, XFS_ATTR_FORK); in xfs_attr3_leaf_to_node()
1204 xfs_trans_buf_set_type(args->trans, bp2, XFS_BLFT_ATTR_LEAF_BUF); in xfs_attr3_leaf_to_node()
1206 memcpy(bp2->b_addr, bp1->b_addr, args->geo->blksize); in xfs_attr3_leaf_to_node()
1211 xfs_trans_log_buf(args->trans, bp2, 0, args->geo->blksize - 1); in xfs_attr3_leaf_to_node()
1216 error = xfs_da3_node_create(args, 0, 1, &bp1, XFS_ATTR_FORK); in xfs_attr3_leaf_to_node()
1223 xfs_attr3_leaf_hdr_from_disk(args->geo, &icleafhdr, leaf); in xfs_attr3_leaf_to_node()
1231 xfs_trans_log_buf(args->trans, bp1, 0, args->geo->blksize - 1); in xfs_attr3_leaf_to_node()
1247 struct xfs_da_args *args, in xfs_attr3_leaf_create() argument
1253 struct xfs_inode *dp = args->dp; in xfs_attr3_leaf_create()
1258 trace_xfs_attr_leaf_create(args); in xfs_attr3_leaf_create()
1260 error = xfs_da_get_buf(args->trans, args->dp, blkno, &bp, in xfs_attr3_leaf_create()
1265 xfs_trans_buf_set_type(args->trans, bp, XFS_BLFT_ATTR_LEAF_BUF); in xfs_attr3_leaf_create()
1267 memset(leaf, 0, args->geo->blksize); in xfs_attr3_leaf_create()
1270 ichdr.firstused = args->geo->blksize; in xfs_attr3_leaf_create()
1288 xfs_attr3_leaf_hdr_to_disk(args->geo, leaf, &ichdr); in xfs_attr3_leaf_create()
1289 xfs_trans_log_buf(args->trans, bp, 0, args->geo->blksize - 1); in xfs_attr3_leaf_create()
1307 trace_xfs_attr_leaf_split(state->args); in xfs_attr3_leaf_split()
1313 error = xfs_da_grow_inode(state->args, &blkno); in xfs_attr3_leaf_split()
1316 error = xfs_attr3_leaf_create(state->args, blkno, &newblk->bp); in xfs_attr3_leaf_split()
1339 trace_xfs_attr_leaf_add_old(state->args); in xfs_attr3_leaf_split()
1340 error = xfs_attr3_leaf_add(oldblk->bp, state->args); in xfs_attr3_leaf_split()
1342 trace_xfs_attr_leaf_add_new(state->args); in xfs_attr3_leaf_split()
1343 error = xfs_attr3_leaf_add(newblk->bp, state->args); in xfs_attr3_leaf_split()
1360 struct xfs_da_args *args) in xfs_attr3_leaf_add() argument
1370 trace_xfs_attr_leaf_add(args); in xfs_attr3_leaf_add()
1373 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_add()
1374 ASSERT(args->index >= 0 && args->index <= ichdr.count); in xfs_attr3_leaf_add()
1375 entsize = xfs_attr_leaf_newentsize(args, NULL); in xfs_attr3_leaf_add()
1394 tmp = xfs_attr3_leaf_add_work(bp, &ichdr, args, i); in xfs_attr3_leaf_add()
1412 xfs_attr3_leaf_compact(args, &ichdr, bp); in xfs_attr3_leaf_add()
1423 tmp = xfs_attr3_leaf_add_work(bp, &ichdr, args, 0); in xfs_attr3_leaf_add()
1426 xfs_attr3_leaf_hdr_to_disk(args->geo, leaf, &ichdr); in xfs_attr3_leaf_add()
1427 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_add()
1440 struct xfs_da_args *args, in xfs_attr3_leaf_add_work() argument
1451 trace_xfs_attr_leaf_add_work(args); in xfs_attr3_leaf_add_work()
1455 ASSERT(args->index >= 0 && args->index <= ichdr->count); in xfs_attr3_leaf_add_work()
1460 entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; in xfs_attr3_leaf_add_work()
1461 if (args->index < ichdr->count) { in xfs_attr3_leaf_add_work()
1462 tmp = ichdr->count - args->index; in xfs_attr3_leaf_add_work()
1465 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_add_work()
1473 mp = args->trans->t_mountp; in xfs_attr3_leaf_add_work()
1474 ASSERT(ichdr->freemap[mapindex].base < args->geo->blksize); in xfs_attr3_leaf_add_work()
1477 xfs_attr_leaf_newentsize(args, NULL)); in xfs_attr3_leaf_add_work()
1478 ASSERT(ichdr->freemap[mapindex].size < args->geo->blksize); in xfs_attr3_leaf_add_work()
1481 ichdr->freemap[mapindex].size -= xfs_attr_leaf_newentsize(args, &tmp); in xfs_attr3_leaf_add_work()
1485 entry->hashval = cpu_to_be32(args->hashval); in xfs_attr3_leaf_add_work()
1486 entry->flags = args->attr_filter; in xfs_attr3_leaf_add_work()
1489 if (args->op_flags & XFS_DA_OP_RENAME) { in xfs_attr3_leaf_add_work()
1491 if ((args->blkno2 == args->blkno) && in xfs_attr3_leaf_add_work()
1492 (args->index2 <= args->index)) { in xfs_attr3_leaf_add_work()
1493 args->index2++; in xfs_attr3_leaf_add_work()
1496 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_add_work()
1498 ASSERT((args->index == 0) || in xfs_attr3_leaf_add_work()
1500 ASSERT((args->index == ichdr->count - 1) || in xfs_attr3_leaf_add_work()
1511 name_loc = xfs_attr3_leaf_name_local(leaf, args->index); in xfs_attr3_leaf_add_work()
1512 name_loc->namelen = args->namelen; in xfs_attr3_leaf_add_work()
1513 name_loc->valuelen = cpu_to_be16(args->valuelen); in xfs_attr3_leaf_add_work()
1514 memcpy((char *)name_loc->nameval, args->name, args->namelen); in xfs_attr3_leaf_add_work()
1515 memcpy((char *)&name_loc->nameval[args->namelen], args->value, in xfs_attr3_leaf_add_work()
1518 name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); in xfs_attr3_leaf_add_work()
1519 name_rmt->namelen = args->namelen; in xfs_attr3_leaf_add_work()
1520 memcpy((char *)name_rmt->name, args->name, args->namelen); in xfs_attr3_leaf_add_work()
1525 args->rmtblkno = 1; in xfs_attr3_leaf_add_work()
1526 args->rmtblkcnt = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr3_leaf_add_work()
1527 args->rmtvaluelen = args->valuelen; in xfs_attr3_leaf_add_work()
1529 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_add_work()
1530 XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), in xfs_attr3_leaf_add_work()
1531 xfs_attr_leaf_entsize(leaf, args->index))); in xfs_attr3_leaf_add_work()
1552 ichdr->usedbytes += xfs_attr_leaf_entsize(leaf, args->index); in xfs_attr3_leaf_add_work()
1561 struct xfs_da_args *args, in xfs_attr3_leaf_compact() argument
1568 struct xfs_trans *trans = args->trans; in xfs_attr3_leaf_compact()
1571 trace_xfs_attr_leaf_compact(args); in xfs_attr3_leaf_compact()
1573 tmpbuffer = kmem_alloc(args->geo->blksize, 0); in xfs_attr3_leaf_compact()
1574 memcpy(tmpbuffer, bp->b_addr, args->geo->blksize); in xfs_attr3_leaf_compact()
1575 memset(bp->b_addr, 0, args->geo->blksize); in xfs_attr3_leaf_compact()
1588 ichdr_dst->firstused = args->geo->blksize; in xfs_attr3_leaf_compact()
1597 xfs_attr3_leaf_hdr_to_disk(args->geo, leaf_dst, ichdr_dst); in xfs_attr3_leaf_compact()
1603 xfs_attr3_leaf_moveents(args, leaf_src, &ichdr_src, 0, in xfs_attr3_leaf_compact()
1609 xfs_trans_log_buf(trans, bp, 0, args->geo->blksize - 1); in xfs_attr3_leaf_compact()
1661 * This code adjusts the args->index/blkno and args->index2/blkno2 fields
1672 struct xfs_da_args *args; in xfs_attr3_leaf_rebalance() local
1692 xfs_attr3_leaf_hdr_from_disk(state->args->geo, &ichdr1, leaf1); in xfs_attr3_leaf_rebalance()
1693 xfs_attr3_leaf_hdr_from_disk(state->args->geo, &ichdr2, leaf2); in xfs_attr3_leaf_rebalance()
1695 args = state->args; in xfs_attr3_leaf_rebalance()
1697 trace_xfs_attr_leaf_rebalance(args); in xfs_attr3_leaf_rebalance()
1749 xfs_attr3_leaf_compact(args, &ichdr2, blk2->bp); in xfs_attr3_leaf_rebalance()
1754 xfs_attr3_leaf_moveents(args, leaf1, &ichdr1, in xfs_attr3_leaf_rebalance()
1778 xfs_attr3_leaf_compact(args, &ichdr1, blk1->bp); in xfs_attr3_leaf_rebalance()
1783 xfs_attr3_leaf_moveents(args, leaf2, &ichdr2, 0, leaf1, &ichdr1, in xfs_attr3_leaf_rebalance()
1787 xfs_attr3_leaf_hdr_to_disk(state->args->geo, leaf1, &ichdr1); in xfs_attr3_leaf_rebalance()
1788 xfs_attr3_leaf_hdr_to_disk(state->args->geo, leaf2, &ichdr2); in xfs_attr3_leaf_rebalance()
1789 xfs_trans_log_buf(args->trans, blk1->bp, 0, args->geo->blksize - 1); in xfs_attr3_leaf_rebalance()
1790 xfs_trans_log_buf(args->trans, blk2->bp, 0, args->geo->blksize - 1); in xfs_attr3_leaf_rebalance()
1815 args->index = args->index2 = blk2->index; in xfs_attr3_leaf_rebalance()
1816 args->blkno = args->blkno2 = blk2->blkno; in xfs_attr3_leaf_rebalance()
1819 args->index = blk1->index; in xfs_attr3_leaf_rebalance()
1820 args->blkno = blk1->blkno; in xfs_attr3_leaf_rebalance()
1821 args->index2 = 0; in xfs_attr3_leaf_rebalance()
1822 args->blkno2 = blk2->blkno; in xfs_attr3_leaf_rebalance()
1830 args->index = blk2->index; in xfs_attr3_leaf_rebalance()
1831 args->blkno = blk2->blkno; in xfs_attr3_leaf_rebalance()
1838 args->index2 = blk2->index; in xfs_attr3_leaf_rebalance()
1839 args->blkno2 = blk2->blkno; in xfs_attr3_leaf_rebalance()
1844 args->index = args->index2 = blk1->index; in xfs_attr3_leaf_rebalance()
1845 args->blkno = args->blkno2 = blk1->blkno; in xfs_attr3_leaf_rebalance()
1885 xfs_attr_leaf_newentsize(state->args, NULL); in xfs_attr3_leaf_figure_balance()
1887 lastdelta = state->args->geo->blksize; in xfs_attr3_leaf_figure_balance()
1897 xfs_attr_leaf_newentsize(state->args, NULL); in xfs_attr3_leaf_figure_balance()
1933 xfs_attr_leaf_newentsize(state->args, NULL); in xfs_attr3_leaf_figure_balance()
1972 trace_xfs_attr_leaf_toosmall(state->args); in xfs_attr3_leaf_toosmall()
1981 xfs_attr3_leaf_hdr_from_disk(state->args->geo, &ichdr, leaf); in xfs_attr3_leaf_toosmall()
1985 if (bytes > (state->args->geo->blksize >> 1)) { in xfs_attr3_leaf_toosmall()
2032 error = xfs_attr3_leaf_read(state->args->trans, state->args->dp, in xfs_attr3_leaf_toosmall()
2037 xfs_attr3_leaf_hdr_from_disk(state->args->geo, &ichdr2, bp->b_addr); in xfs_attr3_leaf_toosmall()
2039 bytes = state->args->geo->blksize - in xfs_attr3_leaf_toosmall()
2040 (state->args->geo->blksize >> 2) - in xfs_attr3_leaf_toosmall()
2046 xfs_trans_brelse(state->args->trans, bp); in xfs_attr3_leaf_toosmall()
2086 struct xfs_da_args *args) in xfs_attr3_leaf_remove() argument
2099 trace_xfs_attr_leaf_remove(args); in xfs_attr3_leaf_remove()
2102 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_remove()
2104 ASSERT(ichdr.count > 0 && ichdr.count < args->geo->blksize / 8); in xfs_attr3_leaf_remove()
2105 ASSERT(args->index >= 0 && args->index < ichdr.count); in xfs_attr3_leaf_remove()
2109 entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; in xfs_attr3_leaf_remove()
2112 ASSERT(be16_to_cpu(entry->nameidx) < args->geo->blksize); in xfs_attr3_leaf_remove()
2125 entsize = xfs_attr_leaf_entsize(leaf, args->index); in xfs_attr3_leaf_remove()
2127 ASSERT(ichdr.freemap[i].base < args->geo->blksize); in xfs_attr3_leaf_remove()
2128 ASSERT(ichdr.freemap[i].size < args->geo->blksize); in xfs_attr3_leaf_remove()
2183 memset(xfs_attr3_leaf_name(leaf, args->index), 0, entsize); in xfs_attr3_leaf_remove()
2185 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_remove()
2186 XFS_DA_LOGRANGE(leaf, xfs_attr3_leaf_name(leaf, args->index), in xfs_attr3_leaf_remove()
2189 tmp = (ichdr.count - args->index) * sizeof(xfs_attr_leaf_entry_t); in xfs_attr3_leaf_remove()
2192 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_remove()
2205 tmp = args->geo->blksize; in xfs_attr3_leaf_remove()
2209 ASSERT(be16_to_cpu(entry->nameidx) < args->geo->blksize); in xfs_attr3_leaf_remove()
2219 xfs_attr3_leaf_hdr_to_disk(args->geo, leaf, &ichdr); in xfs_attr3_leaf_remove()
2220 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_remove()
2231 return tmp < args->geo->magicpct; /* leaf is < 37% full */ in xfs_attr3_leaf_remove()
2249 trace_xfs_attr_leaf_unbalance(state->args); in xfs_attr3_leaf_unbalance()
2253 xfs_attr3_leaf_hdr_from_disk(state->args->geo, &drophdr, drop_leaf); in xfs_attr3_leaf_unbalance()
2254 xfs_attr3_leaf_hdr_from_disk(state->args->geo, &savehdr, save_leaf); in xfs_attr3_leaf_unbalance()
2274 xfs_attr3_leaf_moveents(state->args, in xfs_attr3_leaf_unbalance()
2279 xfs_attr3_leaf_moveents(state->args, in xfs_attr3_leaf_unbalance()
2292 tmp_leaf = kmem_zalloc(state->args->geo->blksize, 0); in xfs_attr3_leaf_unbalance()
2305 tmphdr.firstused = state->args->geo->blksize; in xfs_attr3_leaf_unbalance()
2308 xfs_attr3_leaf_hdr_to_disk(state->args->geo, tmp_leaf, &tmphdr); in xfs_attr3_leaf_unbalance()
2312 xfs_attr3_leaf_moveents(state->args, in xfs_attr3_leaf_unbalance()
2316 xfs_attr3_leaf_moveents(state->args, in xfs_attr3_leaf_unbalance()
2321 xfs_attr3_leaf_moveents(state->args, in xfs_attr3_leaf_unbalance()
2325 xfs_attr3_leaf_moveents(state->args, in xfs_attr3_leaf_unbalance()
2330 memcpy(save_leaf, tmp_leaf, state->args->geo->blksize); in xfs_attr3_leaf_unbalance()
2335 xfs_attr3_leaf_hdr_to_disk(state->args->geo, save_leaf, &savehdr); in xfs_attr3_leaf_unbalance()
2336 xfs_trans_log_buf(state->args->trans, save_blk->bp, 0, in xfs_attr3_leaf_unbalance()
2337 state->args->geo->blksize - 1); in xfs_attr3_leaf_unbalance()
2357 * Return in args->index the index into the entry[] array of either
2361 * Don't change the args->value unless we find the attribute.
2366 struct xfs_da_args *args) in xfs_attr3_leaf_lookup_int() argument
2378 trace_xfs_attr_leaf_lookup(args); in xfs_attr3_leaf_lookup_int()
2381 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_lookup_int()
2383 if (ichdr.count >= args->geo->blksize / 8) { in xfs_attr3_leaf_lookup_int()
2391 hashval = args->hashval; in xfs_attr3_leaf_lookup_int()
2425 args->index = probe; in xfs_attr3_leaf_lookup_int()
2439 if (!xfs_attr_match(args, name_loc->namelen, in xfs_attr3_leaf_lookup_int()
2442 args->index = probe; in xfs_attr3_leaf_lookup_int()
2446 if (!xfs_attr_match(args, name_rmt->namelen, in xfs_attr3_leaf_lookup_int()
2449 args->index = probe; in xfs_attr3_leaf_lookup_int()
2450 args->rmtvaluelen = be32_to_cpu(name_rmt->valuelen); in xfs_attr3_leaf_lookup_int()
2451 args->rmtblkno = be32_to_cpu(name_rmt->valueblk); in xfs_attr3_leaf_lookup_int()
2452 args->rmtblkcnt = xfs_attr3_rmt_blocks( in xfs_attr3_leaf_lookup_int()
2453 args->dp->i_mount, in xfs_attr3_leaf_lookup_int()
2454 args->rmtvaluelen); in xfs_attr3_leaf_lookup_int()
2458 args->index = probe; in xfs_attr3_leaf_lookup_int()
2466 * If args->valuelen is zero, only the length needs to be returned. Unlike a
2473 struct xfs_da_args *args) in xfs_attr3_leaf_getvalue() argument
2482 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_getvalue()
2483 ASSERT(ichdr.count < args->geo->blksize / 8); in xfs_attr3_leaf_getvalue()
2484 ASSERT(args->index < ichdr.count); in xfs_attr3_leaf_getvalue()
2486 entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; in xfs_attr3_leaf_getvalue()
2488 name_loc = xfs_attr3_leaf_name_local(leaf, args->index); in xfs_attr3_leaf_getvalue()
2489 ASSERT(name_loc->namelen == args->namelen); in xfs_attr3_leaf_getvalue()
2490 ASSERT(memcmp(args->name, name_loc->nameval, args->namelen) == 0); in xfs_attr3_leaf_getvalue()
2491 return xfs_attr_copy_value(args, in xfs_attr3_leaf_getvalue()
2492 &name_loc->nameval[args->namelen], in xfs_attr3_leaf_getvalue()
2496 name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); in xfs_attr3_leaf_getvalue()
2497 ASSERT(name_rmt->namelen == args->namelen); in xfs_attr3_leaf_getvalue()
2498 ASSERT(memcmp(args->name, name_rmt->name, args->namelen) == 0); in xfs_attr3_leaf_getvalue()
2499 args->rmtvaluelen = be32_to_cpu(name_rmt->valuelen); in xfs_attr3_leaf_getvalue()
2500 args->rmtblkno = be32_to_cpu(name_rmt->valueblk); in xfs_attr3_leaf_getvalue()
2501 args->rmtblkcnt = xfs_attr3_rmt_blocks(args->dp->i_mount, in xfs_attr3_leaf_getvalue()
2502 args->rmtvaluelen); in xfs_attr3_leaf_getvalue()
2503 return xfs_attr_copy_value(args, NULL, args->rmtvaluelen); in xfs_attr3_leaf_getvalue()
2517 struct xfs_da_args *args, in xfs_attr3_leaf_moveents() argument
2544 ASSERT(ichdr_s->count > 0 && ichdr_s->count < args->geo->blksize / 8); in xfs_attr3_leaf_moveents()
2547 ASSERT(ichdr_d->count < args->geo->blksize / 8); in xfs_attr3_leaf_moveents()
2599 <= args->geo->blksize); in xfs_attr3_leaf_moveents()
2603 <= args->geo->blksize); in xfs_attr3_leaf_moveents()
2624 ((char *)leaf_s + args->geo->blksize)); in xfs_attr3_leaf_moveents()
2639 ((char *)leaf_s + args->geo->blksize)); in xfs_attr3_leaf_moveents()
2709 struct xfs_da_args *args, in xfs_attr_leaf_newentsize() argument
2714 size = xfs_attr_leaf_entsize_local(args->namelen, args->valuelen); in xfs_attr_leaf_newentsize()
2715 if (size < xfs_attr_leaf_entsize_local_max(args->geo->blksize)) { in xfs_attr_leaf_newentsize()
2722 return xfs_attr_leaf_entsize_remote(args->namelen); in xfs_attr_leaf_newentsize()
2735 struct xfs_da_args *args) in xfs_attr3_leaf_clearflag() argument
2749 trace_xfs_attr_leaf_clearflag(args); in xfs_attr3_leaf_clearflag()
2753 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, &bp); in xfs_attr3_leaf_clearflag()
2758 entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; in xfs_attr3_leaf_clearflag()
2762 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_clearflag()
2763 ASSERT(args->index < ichdr.count); in xfs_attr3_leaf_clearflag()
2764 ASSERT(args->index >= 0); in xfs_attr3_leaf_clearflag()
2767 name_loc = xfs_attr3_leaf_name_local(leaf, args->index); in xfs_attr3_leaf_clearflag()
2771 name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); in xfs_attr3_leaf_clearflag()
2775 ASSERT(be32_to_cpu(entry->hashval) == args->hashval); in xfs_attr3_leaf_clearflag()
2776 ASSERT(namelen == args->namelen); in xfs_attr3_leaf_clearflag()
2777 ASSERT(memcmp(name, args->name, namelen) == 0); in xfs_attr3_leaf_clearflag()
2781 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_clearflag()
2784 if (args->rmtblkno) { in xfs_attr3_leaf_clearflag()
2786 name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); in xfs_attr3_leaf_clearflag()
2787 name_rmt->valueblk = cpu_to_be32(args->rmtblkno); in xfs_attr3_leaf_clearflag()
2788 name_rmt->valuelen = cpu_to_be32(args->rmtvaluelen); in xfs_attr3_leaf_clearflag()
2789 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_clearflag()
2801 struct xfs_da_args *args) in xfs_attr3_leaf_setflag() argument
2812 trace_xfs_attr_leaf_setflag(args); in xfs_attr3_leaf_setflag()
2817 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, &bp); in xfs_attr3_leaf_setflag()
2823 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr, leaf); in xfs_attr3_leaf_setflag()
2824 ASSERT(args->index < ichdr.count); in xfs_attr3_leaf_setflag()
2825 ASSERT(args->index >= 0); in xfs_attr3_leaf_setflag()
2827 entry = &xfs_attr3_leaf_entryp(leaf)[args->index]; in xfs_attr3_leaf_setflag()
2831 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_setflag()
2834 name_rmt = xfs_attr3_leaf_name_remote(leaf, args->index); in xfs_attr3_leaf_setflag()
2837 xfs_trans_log_buf(args->trans, bp, in xfs_attr3_leaf_setflag()
2846 * given by args->blkno/index and set the INCOMPLETE flag on the leaf
2847 * entry given by args->blkno2/index2.
2853 struct xfs_da_args *args) in xfs_attr3_leaf_flipflags() argument
2871 trace_xfs_attr_leaf_flipflags(args); in xfs_attr3_leaf_flipflags()
2876 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, &bp1); in xfs_attr3_leaf_flipflags()
2883 if (args->blkno2 != args->blkno) { in xfs_attr3_leaf_flipflags()
2884 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno2, in xfs_attr3_leaf_flipflags()
2893 entry1 = &xfs_attr3_leaf_entryp(leaf1)[args->index]; in xfs_attr3_leaf_flipflags()
2896 entry2 = &xfs_attr3_leaf_entryp(leaf2)[args->index2]; in xfs_attr3_leaf_flipflags()
2899 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr1, leaf1); in xfs_attr3_leaf_flipflags()
2900 ASSERT(args->index < ichdr1.count); in xfs_attr3_leaf_flipflags()
2901 ASSERT(args->index >= 0); in xfs_attr3_leaf_flipflags()
2903 xfs_attr3_leaf_hdr_from_disk(args->geo, &ichdr2, leaf2); in xfs_attr3_leaf_flipflags()
2904 ASSERT(args->index2 < ichdr2.count); in xfs_attr3_leaf_flipflags()
2905 ASSERT(args->index2 >= 0); in xfs_attr3_leaf_flipflags()
2908 name_loc = xfs_attr3_leaf_name_local(leaf1, args->index); in xfs_attr3_leaf_flipflags()
2912 name_rmt = xfs_attr3_leaf_name_remote(leaf1, args->index); in xfs_attr3_leaf_flipflags()
2917 name_loc = xfs_attr3_leaf_name_local(leaf2, args->index2); in xfs_attr3_leaf_flipflags()
2921 name_rmt = xfs_attr3_leaf_name_remote(leaf2, args->index2); in xfs_attr3_leaf_flipflags()
2934 xfs_trans_log_buf(args->trans, bp1, in xfs_attr3_leaf_flipflags()
2936 if (args->rmtblkno) { in xfs_attr3_leaf_flipflags()
2938 name_rmt = xfs_attr3_leaf_name_remote(leaf1, args->index); in xfs_attr3_leaf_flipflags()
2939 name_rmt->valueblk = cpu_to_be32(args->rmtblkno); in xfs_attr3_leaf_flipflags()
2940 name_rmt->valuelen = cpu_to_be32(args->rmtvaluelen); in xfs_attr3_leaf_flipflags()
2941 xfs_trans_log_buf(args->trans, bp1, in xfs_attr3_leaf_flipflags()
2946 xfs_trans_log_buf(args->trans, bp2, in xfs_attr3_leaf_flipflags()
2949 name_rmt = xfs_attr3_leaf_name_remote(leaf2, args->index2); in xfs_attr3_leaf_flipflags()
2952 xfs_trans_log_buf(args->trans, bp2, in xfs_attr3_leaf_flipflags()