diff mbox series

[v27,13/15] xfs: Add helper function xfs_init_attr_trans

Message ID 20220216013713.1191082-14-allison.henderson@oracle.com (mailing list archive)
State Superseded
Headers show
Series xfs: Log Attribute Replay | expand

Commit Message

Allison Henderson Feb. 16, 2022, 1:37 a.m. UTC
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(-)

Comments

Darrick J. Wong Feb. 16, 2022, 2:30 a.m. UTC | #1
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
>
Chandan Babu R Feb. 16, 2022, 2:48 p.m. UTC | #2
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 mbox series

Patch

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;