Lines Matching full: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);
57 STATIC int xfs_attr_node_get(xfs_da_args_t *args);
58 STATIC void xfs_attr_restore_rmt_blk(struct xfs_da_args *args);
62 STATIC int xfs_attr_node_lookup(struct xfs_da_args *args,
122 trace_xfs_attr_fillstate(state->args);
170 trace_xfs_attr_refillstate(state->args);
180 error = xfs_da3_node_read_mapped(state->args->trans,
181 state->args->dp, blk->disk_blkno,
198 error = xfs_da3_node_read_mapped(state->args->trans,
199 state->args->dp, blk->disk_blkno,
224 struct xfs_da_args *args) in xfs_attr_get_ilocked() argument
226 ASSERT(xfs_isilocked(args->dp, XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)); in xfs_attr_get_ilocked()
228 if (!xfs_inode_hasattr(args->dp)) in xfs_attr_get_ilocked()
231 if (args->dp->i_af.if_format == XFS_DINODE_FMT_LOCAL) in xfs_attr_get_ilocked()
232 return xfs_attr_shortform_getvalue(args); in xfs_attr_get_ilocked()
233 if (xfs_attr_is_leaf(args->dp)) in xfs_attr_get_ilocked()
234 return xfs_attr_leaf_get(args); in xfs_attr_get_ilocked()
235 return xfs_attr_node_get(args); in xfs_attr_get_ilocked()
241 * If args->valuelen is zero, then the caller does not want the value, just an
243 * exists. The size is returned in args.valuelen.
245 * If args->value is NULL but args->valuelen is non-zero, allocate the buffer
247 * caller always has to free args->value if it is set, no matter if this
251 * args->valuelen, return -ERANGE with the size of the attribute that was found
252 * in args->valuelen.
256 struct xfs_da_args *args) in xfs_attr_get() argument
261 XFS_STATS_INC(args->dp->i_mount, xs_attr_get); in xfs_attr_get()
263 if (xfs_is_shutdown(args->dp->i_mount)) in xfs_attr_get()
266 args->geo = args->dp->i_mount->m_attr_geo; in xfs_attr_get()
267 args->whichfork = XFS_ATTR_FORK; in xfs_attr_get()
268 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_get()
271 args->op_flags = XFS_DA_OP_OKNOENT; in xfs_attr_get()
273 lock_mode = xfs_ilock_attr_map_shared(args->dp); in xfs_attr_get()
274 error = xfs_attr_get_ilocked(args); in xfs_attr_get()
275 xfs_iunlock(args->dp, lock_mode); in xfs_attr_get()
285 struct xfs_da_args *args, in xfs_attr_calc_size() argument
288 struct xfs_mount *mp = args->dp->i_mount; in xfs_attr_calc_size()
296 size = xfs_attr_leaf_newentsize(args, local); in xfs_attr_calc_size()
299 if (size > (args->geo->blksize / 2)) { in xfs_attr_calc_size()
308 uint dblocks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_calc_size()
319 struct xfs_da_args *args, in xfs_init_attr_trans() argument
323 struct xfs_mount *mp = args->dp->i_mount; in xfs_init_attr_trans()
325 if (args->value) { in xfs_init_attr_trans()
328 args->total; in xfs_init_attr_trans()
331 *total = args->total; in xfs_init_attr_trans()
346 struct xfs_da_args *args) in xfs_attr_try_sf_addname() argument
355 xfs_attr_shortform_create(args); in xfs_attr_try_sf_addname()
357 error = xfs_attr_shortform_addname(args); in xfs_attr_try_sf_addname()
365 if (!error && !(args->op_flags & XFS_DA_OP_NOTIME)) in xfs_attr_try_sf_addname()
366 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_try_sf_addname()
369 xfs_trans_set_sync(args->trans); in xfs_attr_try_sf_addname()
378 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_sf_addname() local
379 struct xfs_inode *dp = args->dp; in xfs_attr_sf_addname()
382 error = xfs_attr_try_sf_addname(dp, args); in xfs_attr_sf_addname()
393 error = xfs_attr_shortform_to_leaf(args); in xfs_attr_sf_addname()
399 trace_xfs_attr_sf_addname_return(attr->xattri_dela_state, args->dp); in xfs_attr_sf_addname()
406 struct xfs_da_args *args) in xfs_attr_save_rmt_blk() argument
408 args->blkno2 = args->blkno; in xfs_attr_save_rmt_blk()
409 args->index2 = args->index; in xfs_attr_save_rmt_blk()
410 args->rmtblkno2 = args->rmtblkno; in xfs_attr_save_rmt_blk()
411 args->rmtblkcnt2 = args->rmtblkcnt; in xfs_attr_save_rmt_blk()
412 args->rmtvaluelen2 = args->rmtvaluelen; in xfs_attr_save_rmt_blk()
413 args->rmtblkno = 0; in xfs_attr_save_rmt_blk()
414 args->rmtblkcnt = 0; in xfs_attr_save_rmt_blk()
415 args->rmtvaluelen = 0; in xfs_attr_save_rmt_blk()
421 struct xfs_da_args *args) in xfs_attr_restore_rmt_blk() argument
423 args->blkno = args->blkno2; in xfs_attr_restore_rmt_blk()
424 args->index = args->index2; in xfs_attr_restore_rmt_blk()
425 args->rmtblkno = args->rmtblkno2; in xfs_attr_restore_rmt_blk()
426 args->rmtblkcnt = args->rmtblkcnt2; in xfs_attr_restore_rmt_blk()
427 args->rmtvaluelen = args->rmtvaluelen2; in xfs_attr_restore_rmt_blk()
446 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_complete_op() local
447 bool do_replace = args->op_flags & XFS_DA_OP_REPLACE; in xfs_attr_complete_op()
449 args->op_flags &= ~XFS_DA_OP_REPLACE; in xfs_attr_complete_op()
450 args->attr_filter &= ~XFS_ATTR_INCOMPLETE; in xfs_attr_complete_op()
464 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_leaf_addname() local
468 ASSERT(xfs_attr_is_leaf(args->dp)); in xfs_attr_leaf_addname()
470 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, &bp); in xfs_attr_leaf_addname()
477 error = xfs_attr3_leaf_lookup_int(bp, args); in xfs_attr_leaf_addname()
480 if (args->op_flags & XFS_DA_OP_REPLACE) in xfs_attr_leaf_addname()
484 if (!(args->op_flags & XFS_DA_OP_REPLACE)) in xfs_attr_leaf_addname()
487 trace_xfs_attr_leaf_replace(args); in xfs_attr_leaf_addname()
493 xfs_attr_save_rmt_blk(args); in xfs_attr_leaf_addname()
506 if (!xfs_attr3_leaf_add(bp, args)) { in xfs_attr_leaf_addname()
507 error = xfs_attr3_leaf_to_node(args); in xfs_attr_leaf_addname()
512 } else if (args->rmtblkno) { in xfs_attr_leaf_addname()
519 trace_xfs_attr_leaf_addname_return(attr->xattri_dela_state, args->dp); in xfs_attr_leaf_addname()
523 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_addname()
538 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_addname() local
547 error = xfs_attr3_leaf_to_node(args); in xfs_attr_node_addname()
559 if (args->rmtblkno) in xfs_attr_node_addname()
565 trace_xfs_attr_node_addname_return(attr->xattri_dela_state, args->dp); in xfs_attr_node_addname()
573 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_rmtval_alloc() local
591 error = xfs_attr_rmtval_set_value(args); in xfs_attr_rmtval_alloc()
603 error = xfs_attr3_leaf_clearflag(args); in xfs_attr_rmtval_alloc()
605 trace_xfs_attr_rmtval_alloc(attr->xattri_dela_state, args->dp); in xfs_attr_rmtval_alloc()
615 struct xfs_da_args *args, in xfs_attr_leaf_mark_incomplete() argument
632 return xfs_attr3_leaf_setflag(args); in xfs_attr_leaf_mark_incomplete()
640 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_item_init_da_state() local
643 attr->xattri_da_state = xfs_da_state_alloc(args); in xfs_attr_item_init_da_state()
645 xfs_da_state_reset(attr->xattri_da_state, args); in xfs_attr_item_init_da_state()
657 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_removename_setup() local
662 error = xfs_attr_node_lookup(args, attr->xattri_da_state); in xfs_attr_node_removename_setup()
672 error = xfs_attr_leaf_mark_incomplete(args, state); in xfs_attr_node_removename_setup()
675 if (args->rmtblkno > 0) in xfs_attr_node_removename_setup()
676 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_node_removename_setup()
688 * original lookup and insert placing the old attr in args->blkno/args->index
689 * and the new attr in args->blkno2/args->index2.
695 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_leaf_remove_attr() local
696 struct xfs_inode *dp = args->dp; in xfs_attr_leaf_remove_attr()
701 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, in xfs_attr_leaf_remove_attr()
706 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_remove_attr()
710 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_remove_attr()
723 struct xfs_da_args *args) in xfs_attr_leaf_shrink() argument
725 struct xfs_inode *dp = args->dp; in xfs_attr_leaf_shrink()
733 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, &bp); in xfs_attr_leaf_shrink()
739 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_shrink()
742 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_shrink()
760 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_set_iter() local
777 error = xfs_attr_sf_removename(args); in xfs_attr_set_iter()
779 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
782 error = xfs_attr_leaf_removename(args); in xfs_attr_set_iter()
784 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
789 (args->op_flags & XFS_DA_OP_RECOVERY)) { in xfs_attr_set_iter()
791 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
798 if (args->rmtblkno == 0) in xfs_attr_set_iter()
826 error = xfs_attr3_leaf_flipflags(args); in xfs_attr_set_iter()
845 xfs_attr_restore_rmt_blk(args); in xfs_attr_set_iter()
846 if (args->rmtblkno) { in xfs_attr_set_iter()
847 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_set_iter()
881 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
887 error = xfs_attr_leaf_shrink(args); in xfs_attr_set_iter()
889 xfs_attr_init_add_state(args)); in xfs_attr_set_iter()
896 trace_xfs_attr_set_iter_return(attr->xattri_dela_state, args->dp); in xfs_attr_set_iter()
906 struct xfs_da_args *args) in xfs_attr_lookup() argument
908 struct xfs_inode *dp = args->dp; in xfs_attr_lookup()
917 return xfs_attr_sf_findname(args, NULL, NULL); in xfs_attr_lookup()
920 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_lookup()
923 xfs_trans_brelse(args->trans, bp); in xfs_attr_lookup()
928 state = xfs_da_state_alloc(args); in xfs_attr_lookup()
929 error = xfs_attr_node_lookup(args, state); in xfs_attr_lookup()
936 struct xfs_da_args *args, in xfs_attr_intent_init() argument
945 new->xattri_da_args = args; in xfs_attr_intent_init()
954 struct xfs_da_args *args) in xfs_attr_defer_add() argument
959 error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_SET, &new); in xfs_attr_defer_add()
963 new->xattri_dela_state = xfs_attr_init_add_state(args); in xfs_attr_defer_add()
964 xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list); in xfs_attr_defer_add()
965 trace_xfs_attr_defer_add(new->xattri_dela_state, args->dp); in xfs_attr_defer_add()
973 struct xfs_da_args *args) in xfs_attr_defer_replace() argument
978 error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_REPLACE, &new); in xfs_attr_defer_replace()
982 new->xattri_dela_state = xfs_attr_init_replace_state(args); in xfs_attr_defer_replace()
983 xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list); in xfs_attr_defer_replace()
984 trace_xfs_attr_defer_replace(new->xattri_dela_state, args->dp); in xfs_attr_defer_replace()
992 struct xfs_da_args *args) in xfs_attr_defer_remove() argument
998 error = xfs_attr_intent_init(args, XFS_ATTRI_OP_FLAGS_REMOVE, &new); in xfs_attr_defer_remove()
1002 new->xattri_dela_state = xfs_attr_init_remove_state(args); in xfs_attr_defer_remove()
1003 xfs_defer_add(args->trans, XFS_DEFER_OPS_TYPE_ATTR, &new->xattri_list); in xfs_attr_defer_remove()
1004 trace_xfs_attr_defer_remove(new->xattri_dela_state, args->dp); in xfs_attr_defer_remove()
1010 * Note: If args->value is NULL the attribute will be removed, just like the
1015 struct xfs_da_args *args) in xfs_attr_set() argument
1017 struct xfs_inode *dp = args->dp; in xfs_attr_set()
1020 bool rsvd = (args->attr_filter & XFS_ATTR_ROOT); in xfs_attr_set()
1032 args->geo = mp->m_attr_geo; in xfs_attr_set()
1033 args->whichfork = XFS_ATTR_FORK; in xfs_attr_set()
1034 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_set()
1042 args->op_flags = XFS_DA_OP_OKNOENT | in xfs_attr_set()
1043 (args->op_flags & XFS_DA_OP_LOGGED); in xfs_attr_set()
1045 if (args->value) { in xfs_attr_set()
1047 args->total = xfs_attr_calc_size(args, &local); in xfs_attr_set()
1055 xfs_attr_sf_entsize_byname(args->namelen, in xfs_attr_set()
1056 args->valuelen); in xfs_attr_set()
1064 rmt_blks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_set()
1074 xfs_init_attr_trans(args, &tres, &total); in xfs_attr_set()
1075 error = xfs_trans_alloc_inode(dp, &tres, total, 0, rsvd, &args->trans); in xfs_attr_set()
1079 if (args->value || xfs_inode_hasattr(dp)) { in xfs_attr_set()
1083 error = xfs_iext_count_upgrade(args->trans, dp, in xfs_attr_set()
1089 error = xfs_attr_lookup(args); in xfs_attr_set()
1093 if (!args->value) { in xfs_attr_set()
1094 error = xfs_attr_defer_remove(args); in xfs_attr_set()
1098 if (args->attr_flags & XATTR_CREATE) in xfs_attr_set()
1101 error = xfs_attr_defer_replace(args); in xfs_attr_set()
1105 if (!args->value) in xfs_attr_set()
1109 if (args->attr_flags & XATTR_REPLACE) in xfs_attr_set()
1112 error = xfs_attr_defer_add(args); in xfs_attr_set()
1125 xfs_trans_set_sync(args->trans); in xfs_attr_set()
1127 if (!(args->op_flags & XFS_DA_OP_NOTIME)) in xfs_attr_set()
1128 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_set()
1133 xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE); in xfs_attr_set()
1134 error = xfs_trans_commit(args->trans); in xfs_attr_set()
1140 if (args->trans) in xfs_attr_set()
1141 xfs_trans_cancel(args->trans); in xfs_attr_set()
1163 struct xfs_da_args *args) in xfs_attr_shortform_addname() argument
1168 trace_xfs_attr_sf_addname(args); in xfs_attr_shortform_addname()
1170 error = xfs_attr_shortform_lookup(args); in xfs_attr_shortform_addname()
1173 if (args->op_flags & XFS_DA_OP_REPLACE) in xfs_attr_shortform_addname()
1177 if (!(args->op_flags & XFS_DA_OP_REPLACE)) in xfs_attr_shortform_addname()
1180 error = xfs_attr_sf_removename(args); in xfs_attr_shortform_addname()
1190 args->op_flags &= ~XFS_DA_OP_REPLACE; in xfs_attr_shortform_addname()
1198 if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX || in xfs_attr_shortform_addname()
1199 args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX) in xfs_attr_shortform_addname()
1202 newsize = xfs_attr_sf_totsize(args->dp); in xfs_attr_shortform_addname()
1203 newsize += xfs_attr_sf_entsize_byname(args->namelen, args->valuelen); in xfs_attr_shortform_addname()
1205 forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize); in xfs_attr_shortform_addname()
1209 xfs_attr_shortform_add(args, forkoff); in xfs_attr_shortform_addname()
1223 struct xfs_da_args *args, in xfs_attr_leaf_hasname() argument
1228 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, bp); in xfs_attr_leaf_hasname()
1232 error = xfs_attr3_leaf_lookup_int(*bp, args); in xfs_attr_leaf_hasname()
1234 xfs_trans_brelse(args->trans, *bp); in xfs_attr_leaf_hasname()
1247 struct xfs_da_args *args) in xfs_attr_leaf_removename() argument
1253 trace_xfs_attr_leaf_removename(args); in xfs_attr_leaf_removename()
1258 dp = args->dp; in xfs_attr_leaf_removename()
1260 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_removename()
1262 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_removename()
1263 if (args->op_flags & XFS_DA_OP_RECOVERY) in xfs_attr_leaf_removename()
1269 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_removename()
1276 return xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_removename()
1291 xfs_attr_leaf_get(xfs_da_args_t *args) in xfs_attr_leaf_get() argument
1296 trace_xfs_attr_leaf_get(args); in xfs_attr_leaf_get()
1298 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_get()
1301 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
1307 error = xfs_attr3_leaf_getvalue(bp, args); in xfs_attr_leaf_get()
1308 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
1315 struct xfs_da_args *args, in xfs_attr_node_lookup() argument
1338 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_addname_find_attr() local
1346 error = xfs_attr_node_lookup(args, attr->xattri_da_state); in xfs_attr_node_addname_find_attr()
1349 if (args->op_flags & XFS_DA_OP_REPLACE) in xfs_attr_node_addname_find_attr()
1353 if (!(args->op_flags & XFS_DA_OP_REPLACE)) in xfs_attr_node_addname_find_attr()
1357 trace_xfs_attr_node_replace(args); in xfs_attr_node_addname_find_attr()
1363 xfs_attr_save_rmt_blk(args); in xfs_attr_node_addname_find_attr()
1398 trace_xfs_attr_node_addname(state->args); in xfs_attr_node_try_addname()
1403 if (!xfs_attr3_leaf_add(blk->bp, state->args)) { in xfs_attr_node_try_addname()
1438 struct xfs_da_args *args, in xfs_attr_node_removename() argument
1449 retval = xfs_attr3_leaf_remove(blk->bp, args); in xfs_attr_node_removename()
1459 struct xfs_da_args *args = attr->xattri_da_args; in xfs_attr_node_remove_attr() local
1460 struct xfs_da_state *state = xfs_da_state_alloc(args); in xfs_attr_node_remove_attr()
1469 args->attr_filter |= XFS_ATTR_INCOMPLETE; in xfs_attr_node_remove_attr()
1474 error = xfs_attr_node_removename(args, state); in xfs_attr_node_remove_attr()
1504 struct xfs_da_args *args) in xfs_attr_node_get() argument
1511 trace_xfs_attr_node_get(args); in xfs_attr_node_get()
1516 state = xfs_da_state_alloc(args); in xfs_attr_node_get()
1517 error = xfs_attr_node_lookup(args, state); in xfs_attr_node_get()
1525 error = xfs_attr3_leaf_getvalue(blk->bp, args); in xfs_attr_node_get()
1532 xfs_trans_brelse(args->trans, state->path.blk[i].bp); in xfs_attr_node_get()