cluster-devel.redhat.com archive mirror
 help / color / mirror / Atom feed
* [Cluster-devel] [GFS2 PATCH] gfs2: eliminate ssize parameter from gfs2_struct2blk
       [not found] <1308211609.948744.1576248254550.JavaMail.zimbra@redhat.com>
@ 2019-12-13 14:46 ` Bob Peterson
  2019-12-13 15:24   ` Andrew Price
  0 siblings, 1 reply; 2+ messages in thread
From: Bob Peterson @ 2019-12-13 14:46 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi,

Every caller of function gfs2_struct2blk specified sizeof(u64).
This patch eliminates the unnecessary parameter and replaces the
size calculation with a new inline function gfs2_ptrs_per_ld to
compute the maximum number of block pointers we can fit inside a
log descriptor. This new function will be used later to fix some
revoke calculations.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
---
 fs/gfs2/glops.c |  2 +-
 fs/gfs2/log.c   | 11 ++++-------
 fs/gfs2/log.h   | 14 ++++++++++++--
 fs/gfs2/lops.c  |  2 +-
 fs/gfs2/trans.c |  3 +--
 5 files changed, 19 insertions(+), 13 deletions(-)

diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index 4ede1f18de85..061d22e1ceb6 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
@@ -95,7 +95,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
 	/* A shortened, inline version of gfs2_trans_begin()
          * tr->alloced is not set since the transaction structure is
          * on the stack */
-	tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes, sizeof(u64));
+	tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes);
 	tr.tr_ip = _RET_IP_;
 	if (gfs2_log_reserve(sdp, tr.tr_reserved) < 0)
 		return;
diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
index eb3f2e7b8085..fe1c35004b10 100644
--- a/fs/gfs2/log.c
+++ b/fs/gfs2/log.c
@@ -37,7 +37,6 @@ static void gfs2_log_shutdown(struct gfs2_sbd *sdp);
  * gfs2_struct2blk - compute stuff
  * @sdp: the filesystem
  * @nstruct: the number of structures
- * @ssize: the size of the structures
  *
  * Compute the number of log descriptor blocks needed to hold a certain number
  * of structures of a certain size.
@@ -45,18 +44,17 @@ static void gfs2_log_shutdown(struct gfs2_sbd *sdp);
  * Returns: the number of blocks needed (minimum is always 1)
  */
 
-unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
-			     unsigned int ssize)
+unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct)
 {
 	unsigned int blks;
 	unsigned int first, second;
 
 	blks = 1;
-	first = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / ssize;
+	first = gfs2_ptrs_per_ld(sdp);
 
 	if (nstruct > first) {
 		second = (sdp->sd_sb.sb_bsize -
-			  sizeof(struct gfs2_meta_header)) / ssize;
+			  sizeof(struct gfs2_meta_header)) / sizeof(u64);
 		blks += DIV_ROUND_UP(nstruct - first, second);
 	}
 
@@ -473,8 +471,7 @@ static unsigned int calc_reserved(struct gfs2_sbd *sdp)
 	}
 
 	if (sdp->sd_log_commited_revoke > 0)
-		reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke,
-					  sizeof(u64));
+		reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke);
 	/* One for the overall header */
 	if (reserved)
 		reserved++;
diff --git a/fs/gfs2/log.h b/fs/gfs2/log.h
index 2ff163a8dce1..910fb97f34a1 100644
--- a/fs/gfs2/log.h
+++ b/fs/gfs2/log.h
@@ -60,9 +60,19 @@ static inline void gfs2_ordered_add_inode(struct gfs2_inode *ip)
 		spin_unlock(&sdp->sd_ordered_lock);
 	}
 }
+
+/**
+ * gfs2_ptrs_per_ld - compute max number of pointers we can fit in a log desc
+ * @sdp: the filesystem
+ */
+static inline unsigned int gfs2_ptrs_per_ld(struct gfs2_sbd *sdp)
+{
+	return (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) /
+		sizeof(u64);
+}
+
 extern void gfs2_ordered_del_inode(struct gfs2_inode *ip);
-extern unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
-			    unsigned int ssize);
+extern unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct);
 
 extern void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks);
 extern int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks);
diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
index 12696133618c..3200a6b82487 100644
--- a/fs/gfs2/lops.c
+++ b/fs/gfs2/lops.c
@@ -866,7 +866,7 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
 	if (!sdp->sd_log_num_revoke)
 		return;
 
-	length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke, sizeof(u64));
+	length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke);
 	page = gfs2_get_log_desc(sdp, GFS2_LOG_DESC_REVOKE, length, sdp->sd_log_num_revoke);
 	offset = sizeof(struct gfs2_log_descriptor);
 
diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
index 9d4227330de4..4d01fe19c125 100644
--- a/fs/gfs2/trans.c
+++ b/fs/gfs2/trans.c
@@ -49,8 +49,7 @@ int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
 	if (blocks)
 		tr->tr_reserved += 6 + blocks;
 	if (revokes)
-		tr->tr_reserved += gfs2_struct2blk(sdp, revokes,
-						   sizeof(u64));
+		tr->tr_reserved += gfs2_struct2blk(sdp, revokes);
 	INIT_LIST_HEAD(&tr->tr_databuf);
 	INIT_LIST_HEAD(&tr->tr_buf);
 



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* [Cluster-devel] [GFS2 PATCH] gfs2: eliminate ssize parameter from gfs2_struct2blk
  2019-12-13 14:46 ` [Cluster-devel] [GFS2 PATCH] gfs2: eliminate ssize parameter from gfs2_struct2blk Bob Peterson
@ 2019-12-13 15:24   ` Andrew Price
  0 siblings, 0 replies; 2+ messages in thread
From: Andrew Price @ 2019-12-13 15:24 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi Bob,

On 13/12/2019 14:46, Bob Peterson wrote:
> Hi,
> 
> Every caller of function gfs2_struct2blk specified sizeof(u64).
> This patch eliminates the unnecessary parameter and replaces the
> size calculation with a new inline function gfs2_ptrs_per_ld to
> compute the maximum number of block pointers we can fit inside a
> log descriptor. This new function will be used later to fix some
> revoke calculations.
> 
> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
> ---
>   fs/gfs2/glops.c |  2 +-
>   fs/gfs2/log.c   | 11 ++++-------
>   fs/gfs2/log.h   | 14 ++++++++++++--
>   fs/gfs2/lops.c  |  2 +-
>   fs/gfs2/trans.c |  3 +--
>   5 files changed, 19 insertions(+), 13 deletions(-)
> 
> diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
> index 4ede1f18de85..061d22e1ceb6 100644
> --- a/fs/gfs2/glops.c
> +++ b/fs/gfs2/glops.c
> @@ -95,7 +95,7 @@ static void gfs2_ail_empty_gl(struct gfs2_glock *gl)
>   	/* A shortened, inline version of gfs2_trans_begin()
>            * tr->alloced is not set since the transaction structure is
>            * on the stack */
> -	tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes, sizeof(u64));
> +	tr.tr_reserved = 1 + gfs2_struct2blk(sdp, tr.tr_revokes);
>   	tr.tr_ip = _RET_IP_;
>   	if (gfs2_log_reserve(sdp, tr.tr_reserved) < 0)
>   		return;
> diff --git a/fs/gfs2/log.c b/fs/gfs2/log.c
> index eb3f2e7b8085..fe1c35004b10 100644
> --- a/fs/gfs2/log.c
> +++ b/fs/gfs2/log.c
> @@ -37,7 +37,6 @@ static void gfs2_log_shutdown(struct gfs2_sbd *sdp);
>    * gfs2_struct2blk - compute stuff
>    * @sdp: the filesystem
>    * @nstruct: the number of structures
> - * @ssize: the size of the structures
>    *
>    * Compute the number of log descriptor blocks needed to hold a certain number
>    * of structures of a certain size.
> @@ -45,18 +44,17 @@ static void gfs2_log_shutdown(struct gfs2_sbd *sdp);
>    * Returns: the number of blocks needed (minimum is always 1)
>    */
>   
> -unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
> -			     unsigned int ssize)
> +unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct)
>   {
>   	unsigned int blks;
>   	unsigned int first, second;
>   
>   	blks = 1;
> -	first = (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) / ssize;
> +	first = gfs2_ptrs_per_ld(sdp);
>   
>   	if (nstruct > first) {
>   		second = (sdp->sd_sb.sb_bsize -
> -			  sizeof(struct gfs2_meta_header)) / ssize;
> +			  sizeof(struct gfs2_meta_header)) / sizeof(u64);

Could it be worth storing this value in the sbd (or in jdesc or 
something) so that it only needs to be calculated once?

>   		blks += DIV_ROUND_UP(nstruct - first, second);
>   	}
>   
> @@ -473,8 +471,7 @@ static unsigned int calc_reserved(struct gfs2_sbd *sdp)
>   	}
>   
>   	if (sdp->sd_log_commited_revoke > 0)
> -		reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke,
> -					  sizeof(u64));
> +		reserved += gfs2_struct2blk(sdp, sdp->sd_log_commited_revoke);
>   	/* One for the overall header */
>   	if (reserved)
>   		reserved++;
> diff --git a/fs/gfs2/log.h b/fs/gfs2/log.h
> index 2ff163a8dce1..910fb97f34a1 100644
> --- a/fs/gfs2/log.h
> +++ b/fs/gfs2/log.h
> @@ -60,9 +60,19 @@ static inline void gfs2_ordered_add_inode(struct gfs2_inode *ip)
>   		spin_unlock(&sdp->sd_ordered_lock);
>   	}
>   }
> +
> +/**
> + * gfs2_ptrs_per_ld - compute max number of pointers we can fit in a log desc
> + * @sdp: the filesystem
> + */
> +static inline unsigned int gfs2_ptrs_per_ld(struct gfs2_sbd *sdp)
> +{
> +	return (sdp->sd_sb.sb_bsize - sizeof(struct gfs2_log_descriptor)) /
> +		sizeof(u64);
> +}

This one too?

Andy

> +
>   extern void gfs2_ordered_del_inode(struct gfs2_inode *ip);
> -extern unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct,
> -			    unsigned int ssize);
> +extern unsigned int gfs2_struct2blk(struct gfs2_sbd *sdp, unsigned int nstruct);
>   
>   extern void gfs2_log_release(struct gfs2_sbd *sdp, unsigned int blks);
>   extern int gfs2_log_reserve(struct gfs2_sbd *sdp, unsigned int blks);
> diff --git a/fs/gfs2/lops.c b/fs/gfs2/lops.c
> index 12696133618c..3200a6b82487 100644
> --- a/fs/gfs2/lops.c
> +++ b/fs/gfs2/lops.c
> @@ -866,7 +866,7 @@ static void revoke_lo_before_commit(struct gfs2_sbd *sdp, struct gfs2_trans *tr)
>   	if (!sdp->sd_log_num_revoke)
>   		return;
>   
> -	length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke, sizeof(u64));
> +	length = gfs2_struct2blk(sdp, sdp->sd_log_num_revoke);
>   	page = gfs2_get_log_desc(sdp, GFS2_LOG_DESC_REVOKE, length, sdp->sd_log_num_revoke);
>   	offset = sizeof(struct gfs2_log_descriptor);
>   
> diff --git a/fs/gfs2/trans.c b/fs/gfs2/trans.c
> index 9d4227330de4..4d01fe19c125 100644
> --- a/fs/gfs2/trans.c
> +++ b/fs/gfs2/trans.c
> @@ -49,8 +49,7 @@ int gfs2_trans_begin(struct gfs2_sbd *sdp, unsigned int blocks,
>   	if (blocks)
>   		tr->tr_reserved += 6 + blocks;
>   	if (revokes)
> -		tr->tr_reserved += gfs2_struct2blk(sdp, revokes,
> -						   sizeof(u64));
> +		tr->tr_reserved += gfs2_struct2blk(sdp, revokes);
>   	INIT_LIST_HEAD(&tr->tr_databuf);
>   	INIT_LIST_HEAD(&tr->tr_buf);
>   
> 



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2019-12-13 15:24 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <1308211609.948744.1576248254550.JavaMail.zimbra@redhat.com>
2019-12-13 14:46 ` [Cluster-devel] [GFS2 PATCH] gfs2: eliminate ssize parameter from gfs2_struct2blk Bob Peterson
2019-12-13 15:24   ` Andrew Price

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).