Lines Matching refs:args
45 STATIC int xfs_attr_shortform_addname(xfs_da_args_t *args);
50 STATIC int xfs_attr_leaf_get(xfs_da_args_t *args);
51 STATIC int xfs_attr_leaf_removename(xfs_da_args_t *args);
52 STATIC int xfs_attr_leaf_hasname(struct xfs_da_args *args, struct xfs_buf **bp);
53 STATIC int xfs_attr_leaf_try_add(struct xfs_da_args *args);
58 STATIC int xfs_attr_node_get(xfs_da_args_t *args);
59 STATIC void xfs_attr_restore_rmt_blk(struct xfs_da_args *args);
63 STATIC int xfs_attr_node_lookup(struct xfs_da_args *args,
123 trace_xfs_attr_fillstate(state->args);
171 trace_xfs_attr_refillstate(state->args);
181 error = xfs_da3_node_read_mapped(state->args->trans,
182 state->args->dp, blk->disk_blkno,
199 error = xfs_da3_node_read_mapped(state->args->trans,
200 state->args->dp, blk->disk_blkno,
225 struct xfs_da_args *args) in xfs_attr_get_ilocked() argument
227 ASSERT(xfs_isilocked(args->dp, XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)); in xfs_attr_get_ilocked()
229 if (!xfs_inode_hasattr(args->dp)) in xfs_attr_get_ilocked()
232 if (args->dp->i_af.if_format == XFS_DINODE_FMT_LOCAL) in xfs_attr_get_ilocked()
233 return xfs_attr_shortform_getvalue(args); in xfs_attr_get_ilocked()
234 if (xfs_attr_is_leaf(args->dp)) in xfs_attr_get_ilocked()
235 return xfs_attr_leaf_get(args); in xfs_attr_get_ilocked()
236 return xfs_attr_node_get(args); in xfs_attr_get_ilocked()
257 struct xfs_da_args *args) in xfs_attr_get() argument
262 XFS_STATS_INC(args->dp->i_mount, xs_attr_get); in xfs_attr_get()
264 if (xfs_is_shutdown(args->dp->i_mount)) in xfs_attr_get()
267 args->geo = args->dp->i_mount->m_attr_geo; in xfs_attr_get()
268 args->whichfork = XFS_ATTR_FORK; in xfs_attr_get()
269 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_get()
272 args->op_flags = XFS_DA_OP_OKNOENT; in xfs_attr_get()
274 lock_mode = xfs_ilock_attr_map_shared(args->dp); in xfs_attr_get()
275 error = xfs_attr_get_ilocked(args); in xfs_attr_get()
276 xfs_iunlock(args->dp, lock_mode); in xfs_attr_get()
286 struct xfs_da_args *args, in xfs_attr_calc_size() argument
289 struct xfs_mount *mp = args->dp->i_mount; in xfs_attr_calc_size()
297 size = xfs_attr_leaf_newentsize(args, local); in xfs_attr_calc_size()
300 if (size > (args->geo->blksize / 2)) { in xfs_attr_calc_size()
309 uint dblocks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_calc_size()
320 struct xfs_da_args *args, in xfs_init_attr_trans() argument
324 struct xfs_mount *mp = args->dp->i_mount; in xfs_init_attr_trans()
326 if (args->value) { in xfs_init_attr_trans()
329 args->total; in xfs_init_attr_trans()
332 *total = args->total; in xfs_init_attr_trans()
347 struct xfs_da_args *args) in xfs_attr_try_sf_addname() argument
356 xfs_attr_shortform_create(args); in xfs_attr_try_sf_addname()
358 error = xfs_attr_shortform_addname(args); in xfs_attr_try_sf_addname()
366 if (!error && !(args->op_flags & XFS_DA_OP_NOTIME)) in xfs_attr_try_sf_addname()
367 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_try_sf_addname()
370 xfs_trans_set_sync(args->trans); in xfs_attr_try_sf_addname()
379 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_sf_addname() local
380 struct xfs_inode *dp = args->dp; in xfs_attr_sf_addname()
383 error = xfs_attr_try_sf_addname(dp, args); in xfs_attr_sf_addname()
394 error = xfs_attr_shortform_to_leaf(args); in xfs_attr_sf_addname()
400 trace_xfs_attr_sf_addname_return(attr->xattri_dela_state, args->dp); in xfs_attr_sf_addname()
420 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_complete_op() local
421 bool do_replace = args->op_flags & XFS_DA_OP_REPLACE; in xfs_attr_complete_op()
423 args->op_flags &= ~XFS_DA_OP_REPLACE; in xfs_attr_complete_op()
425 args->attr_filter &= ~XFS_ATTR_INCOMPLETE; in xfs_attr_complete_op()
435 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_leaf_addname() local
438 ASSERT(xfs_attr_is_leaf(args->dp)); in xfs_attr_leaf_addname()
444 error = xfs_attr_leaf_try_add(args); in xfs_attr_leaf_addname()
447 error = xfs_attr3_leaf_to_node(args); in xfs_attr_leaf_addname()
466 if (args->rmtblkno) in xfs_attr_leaf_addname()
472 trace_xfs_attr_leaf_addname_return(attr->xattri_dela_state, args->dp); in xfs_attr_leaf_addname()
487 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_addname() local
496 error = xfs_attr3_leaf_to_node(args); in xfs_attr_node_addname()
508 if (args->rmtblkno) in xfs_attr_node_addname()
514 trace_xfs_attr_node_addname_return(attr->xattri_dela_state, args->dp); in xfs_attr_node_addname()
522 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_rmtval_alloc() local
540 error = xfs_attr_rmtval_set_value(args); in xfs_attr_rmtval_alloc()
552 error = xfs_attr3_leaf_clearflag(args); in xfs_attr_rmtval_alloc()
554 trace_xfs_attr_rmtval_alloc(attr->xattri_dela_state, args->dp); in xfs_attr_rmtval_alloc()
564 struct xfs_da_args *args, in xfs_attr_leaf_mark_incomplete() argument
581 return xfs_attr3_leaf_setflag(args); in xfs_attr_leaf_mark_incomplete()
589 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_item_init_da_state() local
592 attr->xattri_da_state = xfs_da_state_alloc(args); in xfs_attr_item_init_da_state()
594 xfs_da_state_reset(attr->xattri_da_state, args); in xfs_attr_item_init_da_state()
606 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_removename_setup() local
611 error = xfs_attr_node_lookup(args, attr->xattri_da_state); in xfs_attr_node_removename_setup()
621 error = xfs_attr_leaf_mark_incomplete(args, state); in xfs_attr_node_removename_setup()
624 if (args->rmtblkno > 0) in xfs_attr_node_removename_setup()
625 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_node_removename_setup()
644 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_leaf_remove_attr() local
645 struct xfs_inode *dp = args->dp; in xfs_attr_leaf_remove_attr()
650 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, in xfs_attr_leaf_remove_attr()
655 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_remove_attr()
659 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_remove_attr()
672 struct xfs_da_args *args) in xfs_attr_leaf_shrink() argument
674 struct xfs_inode *dp = args->dp; in xfs_attr_leaf_shrink()
682 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, &bp); in xfs_attr_leaf_shrink()
688 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_shrink()
691 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_shrink()
709 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_set_iter() local
726 error = xfs_attr_sf_removename(args); in xfs_attr_set_iter()
728 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
731 error = xfs_attr_leaf_removename(args); in xfs_attr_set_iter()
733 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
738 (args->op_flags & XFS_DA_OP_RECOVERY)) { in xfs_attr_set_iter()
740 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
747 if (args->rmtblkno == 0) in xfs_attr_set_iter()
775 error = xfs_attr3_leaf_flipflags(args); in xfs_attr_set_iter()
794 xfs_attr_restore_rmt_blk(args); in xfs_attr_set_iter()
795 if (args->rmtblkno) { in xfs_attr_set_iter()
796 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_set_iter()
830 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
836 error = xfs_attr_leaf_shrink(args); in xfs_attr_set_iter()
838 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
845 trace_xfs_attr_set_iter_return(attr->xattri_dela_state, args->dp); in xfs_attr_set_iter()
855 struct xfs_da_args *args) in xfs_attr_lookup() argument
857 struct xfs_inode *dp = args->dp; in xfs_attr_lookup()
866 return xfs_attr_sf_findname(args, NULL, NULL); in xfs_attr_lookup()
869 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_lookup()
872 xfs_trans_brelse(args->trans, bp); in xfs_attr_lookup()
877 state = xfs_da_state_alloc(args); in xfs_attr_lookup()
878 error = xfs_attr_node_lookup(args, state); in xfs_attr_lookup()
885 struct xfs_da_args *args, in xfs_attr_intent_init() argument
894 new->xattri_da_args = args; in xfs_attr_intent_init()
903 struct xfs_da_args *args) in xfs_attr_defer_add() argument
908 error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_SET, &new); in xfs_attr_defer_add()
912 new->xattri_dela_state = xfs_attr_init_add_state(args); in xfs_attr_defer_add()
913 xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list); in xfs_attr_defer_add()
914 trace_xfs_attr_defer_add(new->xattri_dela_state, args->dp); in xfs_attr_defer_add()
922 struct xfs_da_args *args) in xfs_attr_defer_replace() argument
927 error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_REPLACE, &new); in xfs_attr_defer_replace()
931 new->xattri_dela_state = xfs_attr_init_replace_state(args); in xfs_attr_defer_replace()
932 xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list); in xfs_attr_defer_replace()
933 trace_xfs_attr_defer_replace(new->xattri_dela_state, args->dp); in xfs_attr_defer_replace()
941 struct xfs_da_args *args) in xfs_attr_defer_remove() argument
947 error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_REMOVE, &new); in xfs_attr_defer_remove()
951 new->xattri_dela_state = xfs_attr_init_remove_state(args); in xfs_attr_defer_remove()
952 xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list); in xfs_attr_defer_remove()
953 trace_xfs_attr_defer_remove(new->xattri_dela_state, args->dp); in xfs_attr_defer_remove()
964 struct xfs_da_args *args) in xfs_attr_set() argument
966 struct xfs_inode *dp = args->dp; in xfs_attr_set()
969 bool rsvd = (args->attr_filter & XFS_ATTR_ROOT); in xfs_attr_set()
981 args->geo = mp->m_attr_geo; in xfs_attr_set()
982 args->whichfork = XFS_ATTR_FORK; in xfs_attr_set()
983 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_set()
991 args->op_flags = XFS_DA_OP_OKNOENT | in xfs_attr_set()
992 (args->op_flags & XFS_DA_OP_LOGGED); in xfs_attr_set()
994 if (args->value) { in xfs_attr_set()
996 args->total = xfs_attr_calc_size(args, &local); in xfs_attr_set()
1004 xfs_attr_sf_entsize_byname(args->namelen, in xfs_attr_set()
1005 args->valuelen); in xfs_attr_set()
1013 rmt_blks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_set()
1023 xfs_init_attr_trans(args, &tres, &total); in xfs_attr_set()
1024 error = xfs_trans_alloc_inode(dp, &tres, total, 0, rsvd, &args->trans); in xfs_attr_set()
1028 if (args->value || xfs_inode_hasattr(dp)) { in xfs_attr_set()
1032 error = xfs_iext_count_upgrade(args->trans, dp, in xfs_attr_set()
1038 error = xfs_attr_lookup(args); in xfs_attr_set()
1042 if (!args->value) { in xfs_attr_set()
1043 error = xfs_attr_defer_remove(args); in xfs_attr_set()
1047 if (args->attr_flags & XATTR_CREATE) in xfs_attr_set()
1050 error = xfs_attr_defer_replace(args); in xfs_attr_set()
1054 if (!args->value) in xfs_attr_set()
1058 if (args->attr_flags & XATTR_REPLACE) in xfs_attr_set()
1061 error = xfs_attr_defer_add(args); in xfs_attr_set()
1074 xfs_trans_set_sync(args->trans); in xfs_attr_set()
1076 if (!(args->op_flags & XFS_DA_OP_NOTIME)) in xfs_attr_set()
1077 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_set()
1082 xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE); in xfs_attr_set()
1083 error = xfs_trans_commit(args->trans); in xfs_attr_set()
1089 if (args->trans) in xfs_attr_set()
1090 xfs_trans_cancel(args->trans); in xfs_attr_set()
1112 struct xfs_da_args *args) in xfs_attr_shortform_addname() argument
1117 trace_xfs_attr_sf_addname(args); in xfs_attr_shortform_addname()
1119 error = xfs_attr_shortform_lookup(args); in xfs_attr_shortform_addname()
1122 if (args->op_flags & XFS_DA_OP_REPLACE) in xfs_attr_shortform_addname()
1126 if (!(args->op_flags & XFS_DA_OP_REPLACE)) in xfs_attr_shortform_addname()
1129 error = xfs_attr_sf_removename(args); in xfs_attr_shortform_addname()
1139 args->op_flags &= ~XFS_DA_OP_REPLACE; in xfs_attr_shortform_addname()
1147 if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX || in xfs_attr_shortform_addname()
1148 args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX) in xfs_attr_shortform_addname()
1151 newsize = xfs_attr_sf_totsize(args->dp); in xfs_attr_shortform_addname()
1152 newsize += xfs_attr_sf_entsize_byname(args->namelen, args->valuelen); in xfs_attr_shortform_addname()
1154 forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize); in xfs_attr_shortform_addname()
1158 xfs_attr_shortform_add(args, forkoff); in xfs_attr_shortform_addname()
1170 struct xfs_da_args *args) in xfs_attr_save_rmt_blk() argument
1172 args->blkno2 = args->blkno; in xfs_attr_save_rmt_blk()
1173 args->index2 = args->index; in xfs_attr_save_rmt_blk()
1174 args->rmtblkno2 = args->rmtblkno; in xfs_attr_save_rmt_blk()
1175 args->rmtblkcnt2 = args->rmtblkcnt; in xfs_attr_save_rmt_blk()
1176 args->rmtvaluelen2 = args->rmtvaluelen; in xfs_attr_save_rmt_blk()
1177 args->rmtblkno = 0; in xfs_attr_save_rmt_blk()
1178 args->rmtblkcnt = 0; in xfs_attr_save_rmt_blk()
1179 args->rmtvaluelen = 0; in xfs_attr_save_rmt_blk()
1185 struct xfs_da_args *args) in xfs_attr_restore_rmt_blk() argument
1187 args->blkno = args->blkno2; in xfs_attr_restore_rmt_blk()
1188 args->index = args->index2; in xfs_attr_restore_rmt_blk()
1189 args->rmtblkno = args->rmtblkno2; in xfs_attr_restore_rmt_blk()
1190 args->rmtblkcnt = args->rmtblkcnt2; in xfs_attr_restore_rmt_blk()
1191 args->rmtvaluelen = args->rmtvaluelen2; in xfs_attr_restore_rmt_blk()
1206 struct xfs_da_args *args) in xfs_attr_leaf_try_add() argument
1211 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, &bp); in xfs_attr_leaf_try_add()
1218 error = xfs_attr3_leaf_lookup_int(bp, args); in xfs_attr_leaf_try_add()
1221 if (args->op_flags & XFS_DA_OP_REPLACE) in xfs_attr_leaf_try_add()
1225 if (!(args->op_flags & XFS_DA_OP_REPLACE)) in xfs_attr_leaf_try_add()
1228 trace_xfs_attr_leaf_replace(args); in xfs_attr_leaf_try_add()
1234 xfs_attr_save_rmt_blk(args); in xfs_attr_leaf_try_add()
1242 return xfs_attr3_leaf_add(bp, args); in xfs_attr_leaf_try_add()
1245 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_try_add()
1254 struct xfs_da_args *args, in xfs_attr_leaf_hasname() argument
1259 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, bp); in xfs_attr_leaf_hasname()
1263 error = xfs_attr3_leaf_lookup_int(*bp, args); in xfs_attr_leaf_hasname()
1265 xfs_trans_brelse(args->trans, *bp); in xfs_attr_leaf_hasname()
1278 struct xfs_da_args *args) in xfs_attr_leaf_removename() argument
1284 trace_xfs_attr_leaf_removename(args); in xfs_attr_leaf_removename()
1289 dp = args->dp; in xfs_attr_leaf_removename()
1291 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_removename()
1293 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_removename()
1294 if (args->op_flags & XFS_DA_OP_RECOVERY) in xfs_attr_leaf_removename()
1300 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_removename()
1307 return xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_removename()
1322 xfs_attr_leaf_get(xfs_da_args_t *args) in xfs_attr_leaf_get() argument
1327 trace_xfs_attr_leaf_get(args); in xfs_attr_leaf_get()
1329 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_get()
1332 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
1338 error = xfs_attr3_leaf_getvalue(bp, args); in xfs_attr_leaf_get()
1339 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
1346 struct xfs_da_args *args, in xfs_attr_node_lookup() argument
1369 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_addname_find_attr() local
1377 error = xfs_attr_node_lookup(args, attr->xattri_da_state); in xfs_attr_node_addname_find_attr()
1380 if (args->op_flags & XFS_DA_OP_REPLACE) in xfs_attr_node_addname_find_attr()
1384 if (!(args->op_flags & XFS_DA_OP_REPLACE)) in xfs_attr_node_addname_find_attr()
1388 trace_xfs_attr_node_replace(args); in xfs_attr_node_addname_find_attr()
1394 xfs_attr_save_rmt_blk(args); in xfs_attr_node_addname_find_attr()
1426 trace_xfs_attr_node_addname(state->args); in xfs_attr_node_try_addname()
1431 error = xfs_attr3_leaf_add(blk->bp, state->args); in xfs_attr_node_try_addname()
1466 struct xfs_da_args *args, in xfs_attr_node_removename() argument
1477 retval = xfs_attr3_leaf_remove(blk->bp, args); in xfs_attr_node_removename()
1487 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_remove_attr() local
1488 struct xfs_da_state *state = xfs_da_state_alloc(args); in xfs_attr_node_remove_attr()
1497 args->attr_filter |= XFS_ATTR_INCOMPLETE; in xfs_attr_node_remove_attr()
1502 error = xfs_attr_node_removename(args, state); in xfs_attr_node_remove_attr()
1532 struct xfs_da_args *args) in xfs_attr_node_get() argument
1539 trace_xfs_attr_node_get(args); in xfs_attr_node_get()
1544 state = xfs_da_state_alloc(args); in xfs_attr_node_get()
1545 error = xfs_attr_node_lookup(args, state); in xfs_attr_node_get()
1553 error = xfs_attr3_leaf_getvalue(blk->bp, args); in xfs_attr_node_get()
1560 xfs_trans_brelse(args->trans, state->path.blk[i].bp); in xfs_attr_node_get()