Lines Matching full:args
46 STATIC int xfs_attr_shortform_addname(xfs_da_args_t *args);
51 STATIC int xfs_attr_leaf_get(xfs_da_args_t *args);
52 STATIC int xfs_attr_leaf_addname(xfs_da_args_t *args);
53 STATIC int xfs_attr_leaf_removename(xfs_da_args_t *args);
58 STATIC int xfs_attr_node_get(xfs_da_args_t *args);
59 STATIC int xfs_attr_node_addname(xfs_da_args_t *args);
60 STATIC int xfs_attr_node_removename(xfs_da_args_t *args);
67 struct xfs_da_args *args, in xfs_attr_args_init() argument
76 memset(args, 0, sizeof(*args)); in xfs_attr_args_init()
77 args->geo = dp->i_mount->m_attr_geo; in xfs_attr_args_init()
78 args->whichfork = XFS_ATTR_FORK; in xfs_attr_args_init()
79 args->dp = dp; in xfs_attr_args_init()
80 args->flags = flags; in xfs_attr_args_init()
81 args->name = name; in xfs_attr_args_init()
82 args->namelen = strlen((const char *)name); in xfs_attr_args_init()
83 if (args->namelen >= MAXNAMELEN) in xfs_attr_args_init()
86 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_args_init()
109 struct xfs_da_args *args) in xfs_attr_get_ilocked() argument
116 return xfs_attr_shortform_getvalue(args); in xfs_attr_get_ilocked()
118 return xfs_attr_leaf_get(args); in xfs_attr_get_ilocked()
120 return xfs_attr_node_get(args); in xfs_attr_get_ilocked()
132 struct xfs_da_args args; in xfs_attr_get() local
141 error = xfs_attr_args_init(&args, ip, name, flags); in xfs_attr_get()
145 args.value = value; in xfs_attr_get()
146 args.valuelen = *valuelenp; in xfs_attr_get()
148 args.op_flags = XFS_DA_OP_OKNOENT; in xfs_attr_get()
151 error = xfs_attr_get_ilocked(ip, &args); in xfs_attr_get()
154 *valuelenp = args.valuelen; in xfs_attr_get()
163 struct xfs_da_args *args, in xfs_attr_calc_size() argument
166 struct xfs_mount *mp = args->dp->i_mount; in xfs_attr_calc_size()
174 size = xfs_attr_leaf_newentsize(args, local); in xfs_attr_calc_size()
177 if (size > (args->geo->blksize / 2)) { in xfs_attr_calc_size()
186 uint dblocks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_calc_size()
197 struct xfs_da_args *args) in xfs_attr_try_sf_addname() argument
203 error = xfs_attr_shortform_addname(args); in xfs_attr_try_sf_addname()
211 if (!error && (args->flags & ATTR_KERNOTIME) == 0) in xfs_attr_try_sf_addname()
212 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_try_sf_addname()
215 xfs_trans_set_sync(args->trans); in xfs_attr_try_sf_addname()
217 error2 = xfs_trans_commit(args->trans); in xfs_attr_try_sf_addname()
218 args->trans = NULL; in xfs_attr_try_sf_addname()
223 * Set the attribute specified in @args.
227 struct xfs_da_args *args) in xfs_attr_set_args() argument
229 struct xfs_inode *dp = args->dp; in xfs_attr_set_args()
245 xfs_attr_shortform_create(args); in xfs_attr_set_args()
250 error = xfs_attr_try_sf_addname(dp, args); in xfs_attr_set_args()
258 error = xfs_attr_shortform_to_leaf(args, &leaf_bp); in xfs_attr_set_args()
269 xfs_trans_bhold(args->trans, leaf_bp); in xfs_attr_set_args()
270 error = xfs_defer_finish(&args->trans); in xfs_attr_set_args()
271 xfs_trans_bhold_release(args->trans, leaf_bp); in xfs_attr_set_args()
273 xfs_trans_brelse(args->trans, leaf_bp); in xfs_attr_set_args()
279 error = xfs_attr_leaf_addname(args); in xfs_attr_set_args()
281 error = xfs_attr_node_addname(args); in xfs_attr_set_args()
286 * Remove the attribute specified in @args.
290 struct xfs_da_args *args) in xfs_attr_remove_args() argument
292 struct xfs_inode *dp = args->dp; in xfs_attr_remove_args()
299 error = xfs_attr_shortform_remove(args); in xfs_attr_remove_args()
301 error = xfs_attr_leaf_removename(args); in xfs_attr_remove_args()
303 error = xfs_attr_node_removename(args); in xfs_attr_remove_args()
318 struct xfs_da_args args; in xfs_attr_set() local
328 error = xfs_attr_args_init(&args, dp, name, flags); in xfs_attr_set()
332 args.value = value; in xfs_attr_set()
333 args.valuelen = valuelen; in xfs_attr_set()
334 args.op_flags = XFS_DA_OP_ADDNAME | XFS_DA_OP_OKNOENT; in xfs_attr_set()
335 args.total = xfs_attr_calc_size(&args, &local); in xfs_attr_set()
347 XFS_ATTR_SF_ENTSIZE_BYNAME(args.namelen, valuelen); in xfs_attr_set()
355 M_RES(mp)->tr_attrsetrt.tr_logres * args.total; in xfs_attr_set()
363 error = xfs_trans_alloc(mp, &tres, args.total, 0, in xfs_attr_set()
364 rsvd ? XFS_TRANS_RESERVE : 0, &args.trans); in xfs_attr_set()
369 error = xfs_trans_reserve_quota_nblks(args.trans, dp, args.total, 0, in xfs_attr_set()
375 xfs_trans_ijoin(args.trans, dp, 0); in xfs_attr_set()
376 error = xfs_attr_set_args(&args); in xfs_attr_set()
379 if (!args.trans) { in xfs_attr_set()
389 xfs_trans_set_sync(args.trans); in xfs_attr_set()
392 xfs_trans_ichgtime(args.trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_set()
397 xfs_trans_log_inode(args.trans, dp, XFS_ILOG_CORE); in xfs_attr_set()
398 error = xfs_trans_commit(args.trans); in xfs_attr_set()
404 if (args.trans) in xfs_attr_set()
405 xfs_trans_cancel(args.trans); in xfs_attr_set()
420 struct xfs_da_args args; in xfs_attr_remove() local
428 error = xfs_attr_args_init(&args, dp, name, flags); in xfs_attr_remove()
437 args.op_flags = XFS_DA_OP_OKNOENT; in xfs_attr_remove()
450 &args.trans); in xfs_attr_remove()
459 xfs_trans_ijoin(args.trans, dp, 0); in xfs_attr_remove()
461 error = xfs_attr_remove_args(&args); in xfs_attr_remove()
470 xfs_trans_set_sync(args.trans); in xfs_attr_remove()
473 xfs_trans_ichgtime(args.trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_remove()
478 xfs_trans_log_inode(args.trans, dp, XFS_ILOG_CORE); in xfs_attr_remove()
479 error = xfs_trans_commit(args.trans); in xfs_attr_remove()
485 if (args.trans) in xfs_attr_remove()
486 xfs_trans_cancel(args.trans); in xfs_attr_remove()
500 xfs_attr_shortform_addname(xfs_da_args_t *args) in xfs_attr_shortform_addname() argument
504 trace_xfs_attr_sf_addname(args); in xfs_attr_shortform_addname()
506 retval = xfs_attr_shortform_lookup(args); in xfs_attr_shortform_addname()
507 if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) { in xfs_attr_shortform_addname()
510 if (args->flags & ATTR_CREATE) in xfs_attr_shortform_addname()
512 retval = xfs_attr_shortform_remove(args); in xfs_attr_shortform_addname()
520 args->flags &= ~ATTR_REPLACE; in xfs_attr_shortform_addname()
523 if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX || in xfs_attr_shortform_addname()
524 args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX) in xfs_attr_shortform_addname()
527 newsize = XFS_ATTR_SF_TOTSIZE(args->dp); in xfs_attr_shortform_addname()
528 newsize += XFS_ATTR_SF_ENTSIZE_BYNAME(args->namelen, args->valuelen); in xfs_attr_shortform_addname()
530 forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize); in xfs_attr_shortform_addname()
534 xfs_attr_shortform_add(args, forkoff); in xfs_attr_shortform_addname()
551 struct xfs_da_args *args) in xfs_attr_leaf_addname() argument
557 trace_xfs_attr_leaf_addname(args); in xfs_attr_leaf_addname()
562 dp = args->dp; in xfs_attr_leaf_addname()
563 args->blkno = 0; in xfs_attr_leaf_addname()
564 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); in xfs_attr_leaf_addname()
572 retval = xfs_attr3_leaf_lookup_int(bp, args); in xfs_attr_leaf_addname()
573 if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) { in xfs_attr_leaf_addname()
574 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_addname()
577 if (args->flags & ATTR_CREATE) { /* pure create op */ in xfs_attr_leaf_addname()
578 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_addname()
582 trace_xfs_attr_leaf_replace(args); in xfs_attr_leaf_addname()
585 args->op_flags |= XFS_DA_OP_RENAME; /* an atomic rename */ in xfs_attr_leaf_addname()
586 args->blkno2 = args->blkno; /* set 2nd entry info*/ in xfs_attr_leaf_addname()
587 args->index2 = args->index; in xfs_attr_leaf_addname()
588 args->rmtblkno2 = args->rmtblkno; in xfs_attr_leaf_addname()
589 args->rmtblkcnt2 = args->rmtblkcnt; in xfs_attr_leaf_addname()
590 args->rmtvaluelen2 = args->rmtvaluelen; in xfs_attr_leaf_addname()
597 args->rmtblkno = 0; in xfs_attr_leaf_addname()
598 args->rmtblkcnt = 0; in xfs_attr_leaf_addname()
599 args->rmtvaluelen = 0; in xfs_attr_leaf_addname()
606 retval = xfs_attr3_leaf_add(bp, args); in xfs_attr_leaf_addname()
613 error = xfs_attr3_leaf_to_node(args); in xfs_attr_leaf_addname()
616 error = xfs_defer_finish(&args->trans); in xfs_attr_leaf_addname()
624 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_leaf_addname()
631 error = xfs_attr_node_addname(args); in xfs_attr_leaf_addname()
639 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_leaf_addname()
649 if (args->rmtblkno > 0) { in xfs_attr_leaf_addname()
650 error = xfs_attr_rmtval_set(args); in xfs_attr_leaf_addname()
661 if (args->op_flags & XFS_DA_OP_RENAME) { in xfs_attr_leaf_addname()
666 error = xfs_attr3_leaf_flipflags(args); in xfs_attr_leaf_addname()
674 args->index = args->index2; in xfs_attr_leaf_addname()
675 args->blkno = args->blkno2; in xfs_attr_leaf_addname()
676 args->rmtblkno = args->rmtblkno2; in xfs_attr_leaf_addname()
677 args->rmtblkcnt = args->rmtblkcnt2; in xfs_attr_leaf_addname()
678 args->rmtvaluelen = args->rmtvaluelen2; in xfs_attr_leaf_addname()
679 if (args->rmtblkno) { in xfs_attr_leaf_addname()
680 error = xfs_attr_rmtval_remove(args); in xfs_attr_leaf_addname()
689 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, in xfs_attr_leaf_addname()
694 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_addname()
700 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_addname()
704 error = xfs_defer_finish(&args->trans); in xfs_attr_leaf_addname()
712 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_leaf_addname()
714 } else if (args->rmtblkno > 0) { in xfs_attr_leaf_addname()
718 error = xfs_attr3_leaf_clearflag(args); in xfs_attr_leaf_addname()
731 struct xfs_da_args *args) in xfs_attr_leaf_removename() argument
737 trace_xfs_attr_leaf_removename(args); in xfs_attr_leaf_removename()
742 dp = args->dp; in xfs_attr_leaf_removename()
743 args->blkno = 0; in xfs_attr_leaf_removename()
744 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); in xfs_attr_leaf_removename()
748 error = xfs_attr3_leaf_lookup_int(bp, args); in xfs_attr_leaf_removename()
750 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_removename()
754 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_removename()
760 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_removename()
764 error = xfs_defer_finish(&args->trans); in xfs_attr_leaf_removename()
778 xfs_attr_leaf_get(xfs_da_args_t *args) in xfs_attr_leaf_get() argument
783 trace_xfs_attr_leaf_get(args); in xfs_attr_leaf_get()
785 args->blkno = 0; in xfs_attr_leaf_get()
786 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, -1, &bp); in xfs_attr_leaf_get()
790 error = xfs_attr3_leaf_lookup_int(bp, args); in xfs_attr_leaf_get()
792 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
795 error = xfs_attr3_leaf_getvalue(bp, args); in xfs_attr_leaf_get()
796 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
797 if (!error && (args->rmtblkno > 0) && !(args->flags & ATTR_KERNOVAL)) { in xfs_attr_leaf_get()
798 error = xfs_attr_rmtval_get(args); in xfs_attr_leaf_get()
819 struct xfs_da_args *args) in xfs_attr_node_addname() argument
827 trace_xfs_attr_node_addname(args); in xfs_attr_node_addname()
832 dp = args->dp; in xfs_attr_node_addname()
836 state->args = args; in xfs_attr_node_addname()
848 if ((args->flags & ATTR_REPLACE) && (retval == -ENOATTR)) { in xfs_attr_node_addname()
851 if (args->flags & ATTR_CREATE) in xfs_attr_node_addname()
854 trace_xfs_attr_node_replace(args); in xfs_attr_node_addname()
857 args->op_flags |= XFS_DA_OP_RENAME; /* atomic rename op */ in xfs_attr_node_addname()
858 args->blkno2 = args->blkno; /* set 2nd entry info*/ in xfs_attr_node_addname()
859 args->index2 = args->index; in xfs_attr_node_addname()
860 args->rmtblkno2 = args->rmtblkno; in xfs_attr_node_addname()
861 args->rmtblkcnt2 = args->rmtblkcnt; in xfs_attr_node_addname()
862 args->rmtvaluelen2 = args->rmtvaluelen; in xfs_attr_node_addname()
869 args->rmtblkno = 0; in xfs_attr_node_addname()
870 args->rmtblkcnt = 0; in xfs_attr_node_addname()
871 args->rmtvaluelen = 0; in xfs_attr_node_addname()
874 retval = xfs_attr3_leaf_add(blk->bp, state->args); in xfs_attr_node_addname()
884 error = xfs_attr3_leaf_to_node(args); in xfs_attr_node_addname()
887 error = xfs_defer_finish(&args->trans); in xfs_attr_node_addname()
895 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_node_addname()
911 error = xfs_defer_finish(&args->trans); in xfs_attr_node_addname()
932 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_node_addname()
942 if (args->rmtblkno > 0) { in xfs_attr_node_addname()
943 error = xfs_attr_rmtval_set(args); in xfs_attr_node_addname()
954 if (args->op_flags & XFS_DA_OP_RENAME) { in xfs_attr_node_addname()
959 error = xfs_attr3_leaf_flipflags(args); in xfs_attr_node_addname()
967 args->index = args->index2; in xfs_attr_node_addname()
968 args->blkno = args->blkno2; in xfs_attr_node_addname()
969 args->rmtblkno = args->rmtblkno2; in xfs_attr_node_addname()
970 args->rmtblkcnt = args->rmtblkcnt2; in xfs_attr_node_addname()
971 args->rmtvaluelen = args->rmtvaluelen2; in xfs_attr_node_addname()
972 if (args->rmtblkno) { in xfs_attr_node_addname()
973 error = xfs_attr_rmtval_remove(args); in xfs_attr_node_addname()
983 args->flags |= XFS_ATTR_INCOMPLETE; in xfs_attr_node_addname()
985 state->args = args; in xfs_attr_node_addname()
997 error = xfs_attr3_leaf_remove(blk->bp, args); in xfs_attr_node_addname()
1007 error = xfs_defer_finish(&args->trans); in xfs_attr_node_addname()
1015 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_node_addname()
1019 } else if (args->rmtblkno > 0) { in xfs_attr_node_addname()
1023 error = xfs_attr3_leaf_clearflag(args); in xfs_attr_node_addname()
1046 struct xfs_da_args *args) in xfs_attr_node_removename() argument
1054 trace_xfs_attr_node_removename(args); in xfs_attr_node_removename()
1059 dp = args->dp; in xfs_attr_node_removename()
1061 state->args = args; in xfs_attr_node_removename()
1082 if (args->rmtblkno > 0) { in xfs_attr_node_removename()
1096 error = xfs_attr3_leaf_setflag(args); in xfs_attr_node_removename()
1099 error = xfs_attr_rmtval_remove(args); in xfs_attr_node_removename()
1117 retval = xfs_attr3_leaf_remove(blk->bp, args); in xfs_attr_node_removename()
1127 error = xfs_defer_finish(&args->trans); in xfs_attr_node_removename()
1133 error = xfs_trans_roll_inode(&args->trans, dp); in xfs_attr_node_removename()
1149 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, -1, &bp); in xfs_attr_node_removename()
1154 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_node_removename()
1158 error = xfs_defer_finish(&args->trans); in xfs_attr_node_removename()
1162 xfs_trans_brelse(args->trans, bp); in xfs_attr_node_removename()
1184 trace_xfs_attr_fillstate(state->args); in xfs_attr_fillstate()
1232 trace_xfs_attr_refillstate(state->args); in xfs_attr_refillstate()
1242 error = xfs_da3_node_read(state->args->trans, in xfs_attr_refillstate()
1243 state->args->dp, in xfs_attr_refillstate()
1261 error = xfs_da3_node_read(state->args->trans, in xfs_attr_refillstate()
1262 state->args->dp, in xfs_attr_refillstate()
1283 xfs_attr_node_get(xfs_da_args_t *args) in xfs_attr_node_get() argument
1290 trace_xfs_attr_node_get(args); in xfs_attr_node_get()
1293 state->args = args; in xfs_attr_node_get()
1294 state->mp = args->dp->i_mount; in xfs_attr_node_get()
1310 retval = xfs_attr3_leaf_getvalue(blk->bp, args); in xfs_attr_node_get()
1311 if (!retval && (args->rmtblkno > 0) in xfs_attr_node_get()
1312 && !(args->flags & ATTR_KERNOVAL)) { in xfs_attr_node_get()
1313 retval = xfs_attr_rmtval_get(args); in xfs_attr_node_get()
1321 xfs_trans_brelse(args->trans, state->path.blk[i].bp); in xfs_attr_node_get()