Message ID | 20220216013713.1191082-14-allison.henderson@oracle.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | xfs: Log Attribute Replay | expand |
On Tue, Feb 15, 2022 at 06:37:11PM -0700, Allison Henderson wrote: > 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> > --- > fs/xfs/libxfs/xfs_attr.c | 32 ++++++++++++++++++++++---------- > fs/xfs/libxfs/xfs_attr.h | 2 ++ > fs/xfs/xfs_attr_item.c | 12 ++---------- > 3 files changed, 26 insertions(+), 20 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 7d6ad1d0e10b..d51aea332ca1 100644 > --- a/fs/xfs/libxfs/xfs_attr.c > +++ b/fs/xfs/libxfs/xfs_attr.c > @@ -202,6 +202,27 @@ xfs_attr_calc_size( > return nblks; > } > > +/* Initialize transaction reservation for attr operations */ > +void xfs_init_attr_trans( Nit: start the function name on a separate line. With that fixed, Reviewed-by: Darrick J. Wong <djwong@kernel.org> --D > + 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, > @@ -701,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); > } > > @@ -728,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; > diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h > index 1ef58d34eb59..f6c13d2bfbcd 100644 > --- a/fs/xfs/libxfs/xfs_attr.h > +++ b/fs/xfs/libxfs/xfs_attr.h > @@ -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); > > diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c > index 878f50babb23..5aa7a764d95e 100644 > --- a/fs/xfs/xfs_attr_item.c > +++ b/fs/xfs/xfs_attr_item.c > @@ -532,17 +532,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; > -- > 2.25.1 >
On 16 Feb 2022 at 07:07, Allison Henderson wrote: > Quick helper function to collapse duplicate code to initialize > transactions for attributes Looks good to me. Reviewed-by: Chandan Babu R <chandan.babu@oracle.com> > > Signed-off-by: Allison Henderson <allison.henderson@oracle.com> > Suggested-by: Darrick J. Wong <djwong@kernel.org> > --- > fs/xfs/libxfs/xfs_attr.c | 32 ++++++++++++++++++++++---------- > fs/xfs/libxfs/xfs_attr.h | 2 ++ > fs/xfs/xfs_attr_item.c | 12 ++---------- > 3 files changed, 26 insertions(+), 20 deletions(-) > > diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c > index 7d6ad1d0e10b..d51aea332ca1 100644 > --- a/fs/xfs/libxfs/xfs_attr.c > +++ b/fs/xfs/libxfs/xfs_attr.c > @@ -202,6 +202,27 @@ 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, > @@ -701,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); > } > > @@ -728,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; > diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h > index 1ef58d34eb59..f6c13d2bfbcd 100644 > --- a/fs/xfs/libxfs/xfs_attr.h > +++ b/fs/xfs/libxfs/xfs_attr.h > @@ -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); > > diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c > index 878f50babb23..5aa7a764d95e 100644 > --- a/fs/xfs/xfs_attr_item.c > +++ b/fs/xfs/xfs_attr_item.c > @@ -532,17 +532,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;
diff --git a/fs/xfs/libxfs/xfs_attr.c b/fs/xfs/libxfs/xfs_attr.c index 7d6ad1d0e10b..d51aea332ca1 100644 --- a/fs/xfs/libxfs/xfs_attr.c +++ b/fs/xfs/libxfs/xfs_attr.c @@ -202,6 +202,27 @@ 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, @@ -701,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); } @@ -728,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; diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h index 1ef58d34eb59..f6c13d2bfbcd 100644 --- a/fs/xfs/libxfs/xfs_attr.h +++ b/fs/xfs/libxfs/xfs_attr.h @@ -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); diff --git a/fs/xfs/xfs_attr_item.c b/fs/xfs/xfs_attr_item.c index 878f50babb23..5aa7a764d95e 100644 --- a/fs/xfs/xfs_attr_item.c +++ b/fs/xfs/xfs_attr_item.c @@ -532,17 +532,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;
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> --- fs/xfs/libxfs/xfs_attr.c | 32 ++++++++++++++++++++++---------- fs/xfs/libxfs/xfs_attr.h | 2 ++ fs/xfs/xfs_attr_item.c | 12 ++---------- 3 files changed, 26 insertions(+), 20 deletions(-)