xfs: Add helper function xfs_init_attr_trans
Quick helper function to collapse duplicate code to initialize transactions for attributes Signed-off-by: Allison Henderson <allison.henderson@oracle.com> Suggested-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Darrick J. Wong <djwong@kernel.org> Reviewed-by: Chandan Babu R <chandan.babu@oracle.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
cd1549d6df
commit
c3546cf5d1
|
@ -201,6 +201,28 @@ xfs_attr_calc_size(
|
|||
return nblks;
|
||||
}
|
||||
|
||||
/* Initialize transaction reservation for attr operations */
|
||||
void
|
||||
xfs_init_attr_trans(
|
||||
struct xfs_da_args *args,
|
||||
struct xfs_trans_res *tres,
|
||||
unsigned int *total)
|
||||
{
|
||||
struct xfs_mount *mp = args->dp->i_mount;
|
||||
|
||||
if (args->value) {
|
||||
tres->tr_logres = M_RES(mp)->tr_attrsetm.tr_logres +
|
||||
M_RES(mp)->tr_attrsetrt.tr_logres *
|
||||
args->total;
|
||||
tres->tr_logcount = XFS_ATTRSET_LOG_COUNT;
|
||||
tres->tr_logflags = XFS_TRANS_PERM_LOG_RES;
|
||||
*total = args->total;
|
||||
} else {
|
||||
*tres = M_RES(mp)->tr_attrrm;
|
||||
*total = XFS_ATTRRM_SPACE_RES(mp);
|
||||
}
|
||||
}
|
||||
|
||||
STATIC int
|
||||
xfs_attr_try_sf_addname(
|
||||
struct xfs_inode *dp,
|
||||
|
@ -700,20 +722,10 @@ xfs_attr_set(
|
|||
return error;
|
||||
}
|
||||
|
||||
tres.tr_logres = M_RES(mp)->tr_attrsetm.tr_logres +
|
||||
M_RES(mp)->tr_attrsetrt.tr_logres *
|
||||
args->total;
|
||||
tres.tr_logcount = XFS_ATTRSET_LOG_COUNT;
|
||||
tres.tr_logflags = XFS_TRANS_PERM_LOG_RES;
|
||||
total = args->total;
|
||||
|
||||
if (!local)
|
||||
rmt_blks = xfs_attr3_rmt_blocks(mp, args->valuelen);
|
||||
} else {
|
||||
XFS_STATS_INC(mp, xs_attr_remove);
|
||||
|
||||
tres = M_RES(mp)->tr_attrrm;
|
||||
total = XFS_ATTRRM_SPACE_RES(mp);
|
||||
rmt_blks = xfs_attr3_rmt_blocks(mp, XFS_XATTR_SIZE_MAX);
|
||||
}
|
||||
|
||||
|
@ -727,6 +739,7 @@ xfs_attr_set(
|
|||
* Root fork attributes can use reserved data blocks for this
|
||||
* operation if necessary
|
||||
*/
|
||||
xfs_init_attr_trans(args, &tres, &total);
|
||||
error = xfs_trans_alloc_inode(dp, &tres, total, 0, rsvd, &args->trans);
|
||||
if (error)
|
||||
goto drop_incompat;
|
||||
|
|
|
@ -519,6 +519,8 @@ int xfs_attr_set_iter(struct xfs_attr_item *attr);
|
|||
int xfs_attr_remove_iter(struct xfs_attr_item *attr);
|
||||
bool xfs_attr_namecheck(const void *name, size_t length);
|
||||
int xfs_attr_calc_size(struct xfs_da_args *args, int *local);
|
||||
void xfs_init_attr_trans(struct xfs_da_args *args, struct xfs_trans_res *tres,
|
||||
unsigned int *total);
|
||||
int xfs_attr_set_deferred(struct xfs_da_args *args);
|
||||
int xfs_attr_remove_deferred(struct xfs_da_args *args);
|
||||
|
||||
|
|
|
@ -574,17 +574,9 @@ xfs_attri_item_recover(
|
|||
args->value = attrip->attri_value;
|
||||
args->valuelen = attrp->alfi_value_len;
|
||||
args->total = xfs_attr_calc_size(args, &local);
|
||||
|
||||
tres.tr_logres = M_RES(mp)->tr_attrsetm.tr_logres +
|
||||
M_RES(mp)->tr_attrsetrt.tr_logres *
|
||||
args->total;
|
||||
tres.tr_logcount = XFS_ATTRSET_LOG_COUNT;
|
||||
tres.tr_logflags = XFS_TRANS_PERM_LOG_RES;
|
||||
total = args->total;
|
||||
} else {
|
||||
tres = M_RES(mp)->tr_attrrm;
|
||||
total = XFS_ATTRRM_SPACE_RES(mp);
|
||||
}
|
||||
|
||||
xfs_init_attr_trans(args, &tres, &total);
|
||||
error = xfs_trans_alloc(mp, &tres, total, 0, XFS_TRANS_RESERVE, &tp);
|
||||
if (error)
|
||||
goto out;
|
||||
|
|
Loading…
Reference in New Issue