Lines Matching full:args
41 STATIC int xfs_attr_shortform_addname(xfs_da_args_t *args);
46 STATIC int xfs_attr_leaf_get(xfs_da_args_t *args);
47 STATIC int xfs_attr_leaf_removename(xfs_da_args_t *args);
48 STATIC int xfs_attr_leaf_hasname(struct xfs_da_args *args, struct xfs_buf **bp);
49 STATIC int xfs_attr_leaf_try_add(struct xfs_da_args *args, struct xfs_buf *bp);
54 STATIC int xfs_attr_node_get(xfs_da_args_t *args);
55 STATIC void xfs_attr_restore_rmt_blk(struct xfs_da_args *args);
60 STATIC int xfs_attr_node_hasname(xfs_da_args_t *args,
66 STATIC int xfs_attr_node_removename(struct xfs_da_args *args,
110 struct xfs_da_args *args) in xfs_attr_get_ilocked() argument
112 ASSERT(xfs_isilocked(args->dp, XFS_ILOCK_SHARED | XFS_ILOCK_EXCL)); in xfs_attr_get_ilocked()
114 if (!xfs_inode_hasattr(args->dp)) in xfs_attr_get_ilocked()
117 if (args->dp->i_afp->if_format == XFS_DINODE_FMT_LOCAL) in xfs_attr_get_ilocked()
118 return xfs_attr_shortform_getvalue(args); in xfs_attr_get_ilocked()
119 if (xfs_attr_is_leaf(args->dp)) in xfs_attr_get_ilocked()
120 return xfs_attr_leaf_get(args); in xfs_attr_get_ilocked()
121 return xfs_attr_node_get(args); in xfs_attr_get_ilocked()
127 * If args->valuelen is zero, then the caller does not want the value, just an
129 * exists. The size is returned in args.valuelen.
131 * If args->value is NULL but args->valuelen is non-zero, allocate the buffer
133 * caller always has to free args->value if it is set, no matter if this
137 * args->valuelen, return -ERANGE with the size of the attribute that was found
138 * in args->valuelen.
142 struct xfs_da_args *args) in xfs_attr_get() argument
147 XFS_STATS_INC(args->dp->i_mount, xs_attr_get); in xfs_attr_get()
149 if (xfs_is_shutdown(args->dp->i_mount)) in xfs_attr_get()
152 args->geo = args->dp->i_mount->m_attr_geo; in xfs_attr_get()
153 args->whichfork = XFS_ATTR_FORK; in xfs_attr_get()
154 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_get()
157 args->op_flags = XFS_DA_OP_OKNOENT; in xfs_attr_get()
159 lock_mode = xfs_ilock_attr_map_shared(args->dp); in xfs_attr_get()
160 error = xfs_attr_get_ilocked(args); in xfs_attr_get()
161 xfs_iunlock(args->dp, lock_mode); in xfs_attr_get()
171 struct xfs_da_args *args, in xfs_attr_calc_size() argument
174 struct xfs_mount *mp = args->dp->i_mount; in xfs_attr_calc_size()
182 size = xfs_attr_leaf_newentsize(args, local); in xfs_attr_calc_size()
185 if (size > (args->geo->blksize / 2)) { in xfs_attr_calc_size()
194 uint dblocks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_calc_size()
205 struct xfs_da_args *args) in xfs_attr_try_sf_addname() argument
214 xfs_attr_shortform_create(args); in xfs_attr_try_sf_addname()
216 error = xfs_attr_shortform_addname(args); in xfs_attr_try_sf_addname()
224 if (!error && !(args->op_flags & XFS_DA_OP_NOTIME)) in xfs_attr_try_sf_addname()
225 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_try_sf_addname()
228 xfs_trans_set_sync(args->trans); in xfs_attr_try_sf_addname()
254 struct xfs_da_args *args = dac->da_args; in xfs_attr_trans_roll() local
264 error = xfs_defer_finish(&args->trans); in xfs_attr_trans_roll()
266 error = xfs_trans_roll_inode(&args->trans, args->dp); in xfs_attr_trans_roll()
272 * Set the attribute specified in @args.
276 struct xfs_da_args *args) in xfs_attr_set_args() argument
281 .da_args = args, in xfs_attr_set_args()
292 xfs_trans_brelse(args->trans, leaf_bp); in xfs_attr_set_args()
305 struct xfs_da_args *args = dac->da_args; in xfs_attr_sf_addname() local
306 struct xfs_inode *dp = args->dp; in xfs_attr_sf_addname()
312 error = xfs_attr_try_sf_addname(dp, args); in xfs_attr_sf_addname()
322 error = xfs_attr_shortform_to_leaf(args, leaf_bp); in xfs_attr_sf_addname()
331 xfs_trans_bhold(args->trans, *leaf_bp); in xfs_attr_sf_addname()
338 trace_xfs_attr_sf_addname_return(XFS_DAS_UNINIT, args->dp); in xfs_attr_sf_addname()
344 * Set the attribute specified in @args.
355 struct xfs_da_args *args = dac->da_args; in xfs_attr_set_iter() local
356 struct xfs_inode *dp = args->dp; in xfs_attr_set_iter()
373 xfs_trans_bhold_release(args->trans, *leaf_bp); in xfs_attr_set_iter()
378 error = xfs_attr_leaf_try_add(args, *leaf_bp); in xfs_attr_set_iter()
380 error = xfs_attr3_leaf_to_node(args); in xfs_attr_set_iter()
399 dac->dela_state, args->dp); in xfs_attr_set_iter()
417 trace_xfs_attr_set_iter_return(dac->dela_state, args->dp); in xfs_attr_set_iter()
430 if (args->rmtblkno > 0) { in xfs_attr_set_iter()
446 args->dp); in xfs_attr_set_iter()
450 error = xfs_attr_rmtval_set_value(args); in xfs_attr_set_iter()
458 if (!(args->op_flags & XFS_DA_OP_RENAME)) { in xfs_attr_set_iter()
459 if (args->rmtblkno > 0) in xfs_attr_set_iter()
460 error = xfs_attr3_leaf_clearflag(args); in xfs_attr_set_iter()
473 error = xfs_attr3_leaf_flipflags(args); in xfs_attr_set_iter()
481 trace_xfs_attr_set_iter_return(dac->dela_state, args->dp); in xfs_attr_set_iter()
488 xfs_attr_restore_rmt_blk(args); in xfs_attr_set_iter()
489 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_set_iter()
497 if (args->rmtblkno) { in xfs_attr_set_iter()
501 dac->dela_state, args->dp); in xfs_attr_set_iter()
506 trace_xfs_attr_set_iter_return(dac->dela_state, args->dp); in xfs_attr_set_iter()
517 error = xfs_attr3_leaf_read(args->trans, args->dp, args->blkno, in xfs_attr_set_iter()
522 xfs_attr3_leaf_remove(bp, args); in xfs_attr_set_iter()
526 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_set_iter()
536 if (args->rmtblkno > 0) { in xfs_attr_set_iter()
551 if (args->rmtblkno > 0) { in xfs_attr_set_iter()
557 dac->dela_state, args->dp); in xfs_attr_set_iter()
561 error = xfs_attr_rmtval_set_value(args); in xfs_attr_set_iter()
570 if (!(args->op_flags & XFS_DA_OP_RENAME)) { in xfs_attr_set_iter()
571 if (args->rmtblkno > 0) in xfs_attr_set_iter()
572 error = xfs_attr3_leaf_clearflag(args); in xfs_attr_set_iter()
585 error = xfs_attr3_leaf_flipflags(args); in xfs_attr_set_iter()
593 trace_xfs_attr_set_iter_return(dac->dela_state, args->dp); in xfs_attr_set_iter()
601 xfs_attr_restore_rmt_blk(args); in xfs_attr_set_iter()
603 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_set_iter()
611 if (args->rmtblkno) { in xfs_attr_set_iter()
615 dac->dela_state, args->dp); in xfs_attr_set_iter()
621 trace_xfs_attr_set_iter_return(dac->dela_state, args->dp); in xfs_attr_set_iter()
647 struct xfs_da_args *args) in xfs_attr_lookup() argument
649 struct xfs_inode *dp = args->dp; in xfs_attr_lookup()
657 return xfs_attr_sf_findname(args, NULL, NULL); in xfs_attr_lookup()
660 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_lookup()
663 xfs_trans_brelse(args->trans, bp); in xfs_attr_lookup()
668 return xfs_attr_node_hasname(args, NULL); in xfs_attr_lookup()
672 * Remove the attribute specified in @args.
676 struct xfs_da_args *args) in xfs_attr_remove_args() argument
680 .da_args = args, in xfs_attr_remove_args()
698 * Note: If args->value is NULL the attribute will be removed, just like the
703 struct xfs_da_args *args) in xfs_attr_set() argument
705 struct xfs_inode *dp = args->dp; in xfs_attr_set()
708 bool rsvd = (args->attr_filter & XFS_ATTR_ROOT); in xfs_attr_set()
720 args->geo = mp->m_attr_geo; in xfs_attr_set()
721 args->whichfork = XFS_ATTR_FORK; in xfs_attr_set()
722 args->hashval = xfs_da_hashname(args->name, args->namelen); in xfs_attr_set()
729 args->op_flags = XFS_DA_OP_OKNOENT; in xfs_attr_set()
731 if (args->value) { in xfs_attr_set()
734 args->op_flags |= XFS_DA_OP_ADDNAME; in xfs_attr_set()
735 args->total = xfs_attr_calc_size(args, &local); in xfs_attr_set()
743 xfs_attr_sf_entsize_byname(args->namelen, in xfs_attr_set()
744 args->valuelen); in xfs_attr_set()
753 args->total; in xfs_attr_set()
756 total = args->total; in xfs_attr_set()
759 rmt_blks = xfs_attr3_rmt_blocks(mp, args->valuelen); in xfs_attr_set()
772 error = xfs_trans_alloc_inode(dp, &tres, total, 0, rsvd, &args->trans); in xfs_attr_set()
776 if (args->value || xfs_inode_hasattr(dp)) { in xfs_attr_set()
783 error = xfs_attr_lookup(args); in xfs_attr_set()
784 if (args->value) { in xfs_attr_set()
785 if (error == -EEXIST && (args->attr_flags & XATTR_CREATE)) in xfs_attr_set()
787 if (error == -ENOATTR && (args->attr_flags & XATTR_REPLACE)) in xfs_attr_set()
792 error = xfs_attr_set_args(args); in xfs_attr_set()
796 if (!args->trans) in xfs_attr_set()
802 error = xfs_attr_remove_args(args); in xfs_attr_set()
812 xfs_trans_set_sync(args->trans); in xfs_attr_set()
814 if (!(args->op_flags & XFS_DA_OP_NOTIME)) in xfs_attr_set()
815 xfs_trans_ichgtime(args->trans, dp, XFS_ICHGTIME_CHG); in xfs_attr_set()
820 xfs_trans_log_inode(args->trans, dp, XFS_ILOG_CORE); in xfs_attr_set()
821 error = xfs_trans_commit(args->trans); in xfs_attr_set()
827 if (args->trans) in xfs_attr_set()
828 xfs_trans_cancel(args->trans); in xfs_attr_set()
849 xfs_attr_shortform_addname(xfs_da_args_t *args) in xfs_attr_shortform_addname() argument
853 trace_xfs_attr_sf_addname(args); in xfs_attr_shortform_addname()
855 retval = xfs_attr_shortform_lookup(args); in xfs_attr_shortform_addname()
856 if (retval == -ENOATTR && (args->attr_flags & XATTR_REPLACE)) in xfs_attr_shortform_addname()
859 if (args->attr_flags & XATTR_CREATE) in xfs_attr_shortform_addname()
861 retval = xfs_attr_sf_removename(args); in xfs_attr_shortform_addname()
869 args->attr_flags &= ~XATTR_REPLACE; in xfs_attr_shortform_addname()
872 if (args->namelen >= XFS_ATTR_SF_ENTSIZE_MAX || in xfs_attr_shortform_addname()
873 args->valuelen >= XFS_ATTR_SF_ENTSIZE_MAX) in xfs_attr_shortform_addname()
876 newsize = xfs_attr_sf_totsize(args->dp); in xfs_attr_shortform_addname()
877 newsize += xfs_attr_sf_entsize_byname(args->namelen, args->valuelen); in xfs_attr_shortform_addname()
879 forkoff = xfs_attr_shortform_bytesfit(args->dp, newsize); in xfs_attr_shortform_addname()
883 xfs_attr_shortform_add(args, forkoff); in xfs_attr_shortform_addname()
895 struct xfs_da_args *args) in xfs_attr_save_rmt_blk() argument
897 args->blkno2 = args->blkno; in xfs_attr_save_rmt_blk()
898 args->index2 = args->index; in xfs_attr_save_rmt_blk()
899 args->rmtblkno2 = args->rmtblkno; in xfs_attr_save_rmt_blk()
900 args->rmtblkcnt2 = args->rmtblkcnt; in xfs_attr_save_rmt_blk()
901 args->rmtvaluelen2 = args->rmtvaluelen; in xfs_attr_save_rmt_blk()
907 struct xfs_da_args *args) in xfs_attr_restore_rmt_blk() argument
909 args->blkno = args->blkno2; in xfs_attr_restore_rmt_blk()
910 args->index = args->index2; in xfs_attr_restore_rmt_blk()
911 args->rmtblkno = args->rmtblkno2; in xfs_attr_restore_rmt_blk()
912 args->rmtblkcnt = args->rmtblkcnt2; in xfs_attr_restore_rmt_blk()
913 args->rmtvaluelen = args->rmtvaluelen2; in xfs_attr_restore_rmt_blk()
928 struct xfs_da_args *args, in xfs_attr_leaf_try_add() argument
937 retval = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_try_add()
940 if (retval == -ENOATTR && (args->attr_flags & XATTR_REPLACE)) in xfs_attr_leaf_try_add()
943 if (args->attr_flags & XATTR_CREATE) in xfs_attr_leaf_try_add()
946 trace_xfs_attr_leaf_replace(args); in xfs_attr_leaf_try_add()
949 args->op_flags |= XFS_DA_OP_RENAME; /* an atomic rename */ in xfs_attr_leaf_try_add()
950 xfs_attr_save_rmt_blk(args); in xfs_attr_leaf_try_add()
957 args->rmtblkno = 0; in xfs_attr_leaf_try_add()
958 args->rmtblkcnt = 0; in xfs_attr_leaf_try_add()
959 args->rmtvaluelen = 0; in xfs_attr_leaf_try_add()
965 return xfs_attr3_leaf_add(bp, args); in xfs_attr_leaf_try_add()
968 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_try_add()
977 struct xfs_da_args *args, in xfs_attr_leaf_hasname() argument
982 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, bp); in xfs_attr_leaf_hasname()
986 error = xfs_attr3_leaf_lookup_int(*bp, args); in xfs_attr_leaf_hasname()
988 xfs_trans_brelse(args->trans, *bp); in xfs_attr_leaf_hasname()
1001 struct xfs_da_args *args) in xfs_attr_leaf_removename() argument
1007 trace_xfs_attr_leaf_removename(args); in xfs_attr_leaf_removename()
1012 dp = args->dp; in xfs_attr_leaf_removename()
1014 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_removename()
1017 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_removename()
1022 xfs_attr3_leaf_remove(bp, args); in xfs_attr_leaf_removename()
1029 return xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_leaf_removename()
1044 xfs_attr_leaf_get(xfs_da_args_t *args) in xfs_attr_leaf_get() argument
1049 trace_xfs_attr_leaf_get(args); in xfs_attr_leaf_get()
1051 error = xfs_attr_leaf_hasname(args, &bp); in xfs_attr_leaf_get()
1054 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
1060 error = xfs_attr3_leaf_getvalue(bp, args); in xfs_attr_leaf_get()
1061 xfs_trans_brelse(args->trans, bp); in xfs_attr_leaf_get()
1072 struct xfs_da_args *args, in xfs_attr_node_hasname() argument
1078 state = xfs_da_state_alloc(args); in xfs_attr_node_hasname()
1106 struct xfs_da_args *args = dac->da_args; in xfs_attr_node_addname_find_attr() local
1113 retval = xfs_attr_node_hasname(args, &dac->da_state); in xfs_attr_node_addname_find_attr()
1117 if (retval == -ENOATTR && (args->attr_flags & XATTR_REPLACE)) in xfs_attr_node_addname_find_attr()
1120 if (args->attr_flags & XATTR_CREATE) in xfs_attr_node_addname_find_attr()
1123 trace_xfs_attr_node_replace(args); in xfs_attr_node_addname_find_attr()
1126 args->op_flags |= XFS_DA_OP_RENAME; /* atomic rename op */ in xfs_attr_node_addname_find_attr()
1127 xfs_attr_save_rmt_blk(args); in xfs_attr_node_addname_find_attr()
1134 args->rmtblkno = 0; in xfs_attr_node_addname_find_attr()
1135 args->rmtblkcnt = 0; in xfs_attr_node_addname_find_attr()
1136 args->rmtvaluelen = 0; in xfs_attr_node_addname_find_attr()
1165 struct xfs_da_args *args = dac->da_args; in xfs_attr_node_addname() local
1170 trace_xfs_attr_node_addname(args); in xfs_attr_node_addname()
1175 error = xfs_attr3_leaf_add(blk->bp, state->args); in xfs_attr_node_addname()
1185 error = xfs_attr3_leaf_to_node(args); in xfs_attr_node_addname()
1198 dac->dela_state, args->dp); in xfs_attr_node_addname()
1230 struct xfs_da_args *args = dac->da_args; in xfs_attr_node_addname_clear_incomplete() local
1239 args->attr_filter |= XFS_ATTR_INCOMPLETE; in xfs_attr_node_addname_clear_incomplete()
1240 state = xfs_da_state_alloc(args); in xfs_attr_node_addname_clear_incomplete()
1246 error = xfs_attr_node_removename(args, state); in xfs_attr_node_addname_clear_incomplete()
1271 struct xfs_da_args *args, in xfs_attr_node_shrink() argument
1274 struct xfs_inode *dp = args->dp; in xfs_attr_node_shrink()
1285 error = xfs_attr3_leaf_read(args->trans, args->dp, 0, &bp); in xfs_attr_node_shrink()
1291 error = xfs_attr3_leaf_to_shortform(bp, args, forkoff); in xfs_attr_node_shrink()
1294 xfs_trans_brelse(args->trans, bp); in xfs_attr_node_shrink()
1305 struct xfs_da_args *args, in xfs_attr_leaf_mark_incomplete() argument
1322 return xfs_attr3_leaf_setflag(args); in xfs_attr_leaf_mark_incomplete()
1334 struct xfs_da_args *args = dac->da_args; in xfs_attr_node_removename_setup() local
1338 error = xfs_attr_node_hasname(args, state); in xfs_attr_node_removename_setup()
1347 if (args->rmtblkno > 0) { in xfs_attr_node_removename_setup()
1348 error = xfs_attr_leaf_mark_incomplete(args, *state); in xfs_attr_node_removename_setup()
1352 error = xfs_attr_rmtval_invalidate(args); in xfs_attr_node_removename_setup()
1363 struct xfs_da_args *args, in xfs_attr_node_removename() argument
1374 retval = xfs_attr3_leaf_remove(blk->bp, args); in xfs_attr_node_removename()
1381 * Remove the attribute specified in @args.
1396 struct xfs_da_args *args = dac->da_args; in xfs_attr_remove_iter() local
1399 struct xfs_inode *dp = args->dp; in xfs_attr_remove_iter()
1401 trace_xfs_attr_node_removename(args); in xfs_attr_remove_iter()
1413 return xfs_attr_sf_removename(args); in xfs_attr_remove_iter()
1416 return xfs_attr_leaf_removename(args); in xfs_attr_remove_iter()
1439 if (args->rmtblkno > 0) { in xfs_attr_remove_iter()
1447 dac->dela_state, args->dp); in xfs_attr_remove_iter()
1458 ASSERT(args->rmtblkno == 0); in xfs_attr_remove_iter()
1464 trace_xfs_attr_remove_iter_return(dac->dela_state, args->dp); in xfs_attr_remove_iter()
1480 retval = xfs_attr_node_removename(args, state); in xfs_attr_remove_iter()
1494 dac->dela_state, args->dp); in xfs_attr_remove_iter()
1506 error = xfs_attr_node_shrink(args, state); in xfs_attr_remove_iter()
1533 trace_xfs_attr_fillstate(state->args); in xfs_attr_fillstate()
1581 trace_xfs_attr_refillstate(state->args); in xfs_attr_refillstate()
1591 error = xfs_da3_node_read_mapped(state->args->trans, in xfs_attr_refillstate()
1592 state->args->dp, blk->disk_blkno, in xfs_attr_refillstate()
1609 error = xfs_da3_node_read_mapped(state->args->trans, in xfs_attr_refillstate()
1610 state->args->dp, blk->disk_blkno, in xfs_attr_refillstate()
1633 struct xfs_da_args *args) in xfs_attr_node_get() argument
1640 trace_xfs_attr_node_get(args); in xfs_attr_node_get()
1645 error = xfs_attr_node_hasname(args, &state); in xfs_attr_node_get()
1653 error = xfs_attr3_leaf_getvalue(blk->bp, args); in xfs_attr_node_get()
1660 xfs_trans_brelse(args->trans, state->path.blk[i].bp); in xfs_attr_node_get()