All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings
       [not found] <1809292291.1872363.1503065998850.JavaMail.zimbra@redhat.com>
@ 2017-08-18 14:20 ` Bob Peterson
  2017-08-18 15:52   ` Andrew Price
  2017-08-23 15:27   ` [Cluster-devel] [GFS2 PATCH] [v2] " Bob Peterson
  0 siblings, 2 replies; 5+ messages in thread
From: Bob Peterson @ 2017-08-18 14:20 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi,

This patch cleans up various pieces of GFS2 to avoid sparse errors.
This doesn't fix them all, but it fixes several. The first error,
in function glock_hash_walk was a genuine bug where the rhashtable
could be started and not stopped.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
---
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index ffca19598525..db78720f3c89 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1550,14 +1550,13 @@ static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
 
 	do {
 		gl = ERR_PTR(rhashtable_walk_start(&iter));
-		if (gl)
-			continue;
-
-		while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
-			if ((gl->gl_name.ln_sbd == sdp) &&
-			    lockref_get_not_dead(&gl->gl_lockref))
-				examiner(gl);
-
+		if (!gl) {
+			while ((gl = rhashtable_walk_next(&iter)) &&
+			       !IS_ERR(gl))
+				if ((gl->gl_name.ln_sbd == sdp) &&
+				    lockref_get_not_dead(&gl->gl_lockref))
+					examiner(gl);
+		}
 		rhashtable_walk_stop(&iter);
 	} while (cond_resched(), gl == ERR_PTR(-EAGAIN));
 
@@ -1940,6 +1939,7 @@ static void gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
 }
 
 static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
+	__acquires(RCU)
 {
 	struct gfs2_glock_iter *gi = seq->private;
 	loff_t n = *pos;
@@ -1972,6 +1972,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
 }
 
 static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
+	__releases(RCU)
 {
 	struct gfs2_glock_iter *gi = seq->private;
 
diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
index 1d98b8a36eb3..65f33a0ac190 100644
--- a/fs/gfs2/lock_dlm.c
+++ b/fs/gfs2/lock_dlm.c
@@ -23,8 +23,6 @@
 #include "sys.h"
 #include "trace_gfs2.h"
 
-extern struct workqueue_struct *gfs2_control_wq;
-
 /**
  * gfs2_update_stats - Update time based stats
  * @mv: Pointer to mean/variance structure to update
@@ -1176,7 +1174,7 @@ static void gdlm_recovery_result(struct gfs2_sbd *sdp, unsigned int jid,
 	spin_unlock(&ls->ls_recover_spin);
 }
 
-const struct dlm_lockspace_ops gdlm_lockspace_ops = {
+static const struct dlm_lockspace_ops gdlm_lockspace_ops = {
 	.recover_prep = gdlm_recover_prep,
 	.recover_slot = gdlm_recover_slot,
 	.recover_done = gdlm_recover_done,
diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c
index 0a89e6f7a314..899329cfd733 100644
--- a/fs/gfs2/main.c
+++ b/fs/gfs2/main.c
@@ -32,8 +32,6 @@
 #include "dir.h"
 #include "glops.h"
 
-struct workqueue_struct *gfs2_control_wq;
-
 static void gfs2_init_inode_once(void *foo)
 {
 	struct gfs2_inode *ip = foo;
diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
index c81295f407f6..3926f95a6eb7 100644
--- a/fs/gfs2/util.h
+++ b/fs/gfs2/util.h
@@ -151,6 +151,7 @@ extern struct kmem_cache *gfs2_rgrpd_cachep;
 extern struct kmem_cache *gfs2_quotad_cachep;
 extern struct kmem_cache *gfs2_qadata_cachep;
 extern mempool_t *gfs2_page_pool;
+extern struct workqueue_struct *gfs2_control_wq;
 
 static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
 					   unsigned int *p)
diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
index 54179554c7d2..cf694de4991a 100644
--- a/fs/gfs2/xattr.c
+++ b/fs/gfs2/xattr.c
@@ -25,6 +25,7 @@
 #include "meta_io.h"
 #include "quota.h"
 #include "rgrp.h"
+#include "super.h"
 #include "trans.h"
 #include "util.h"
 



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

* [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings
  2017-08-18 14:20 ` [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings Bob Peterson
@ 2017-08-18 15:52   ` Andrew Price
  2017-08-22 19:54     ` Bob Peterson
  2017-08-23 15:27   ` [Cluster-devel] [GFS2 PATCH] [v2] " Bob Peterson
  1 sibling, 1 reply; 5+ messages in thread
From: Andrew Price @ 2017-08-18 15:52 UTC (permalink / raw)
  To: cluster-devel.redhat.com

On Fri, Aug 18, 2017 at 10:20:56AM -0400, Bob Peterson wrote:
> Hi,
> 
> This patch cleans up various pieces of GFS2 to avoid sparse errors.
> This doesn't fix them all, but it fixes several. The first error,
> in function glock_hash_walk was a genuine bug where the rhashtable
> could be started and not stopped.
> 
> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
> ---
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index ffca19598525..db78720f3c89 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -1550,14 +1550,13 @@ static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
>  
>  	do {
>  		gl = ERR_PTR(rhashtable_walk_start(&iter));

Couldn't the rhashtable_walk_start() call be moved before the outer loop?

"* Returns -EAGAIN if resize event occured.  Note that the iterator
 * will rewind back to the beginning and you may use it immediately
 * by calling rhashtable_walk_next."

so it looks like -EAGAIN doesn't require a stop and restart of the walk.

> -		if (gl)
> -			continue;
> -
> -		while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
> -			if ((gl->gl_name.ln_sbd == sdp) &&
> -			    lockref_get_not_dead(&gl->gl_lockref))
> -				examiner(gl);
> -
> +		if (!gl) {

This looks like it should be if (!IS_ERR(gl)) { ...

> +			while ((gl = rhashtable_walk_next(&iter)) &&
> +			       !IS_ERR(gl))
> +				if ((gl->gl_name.ln_sbd == sdp) &&
> +				    lockref_get_not_dead(&gl->gl_lockref))
> +					examiner(gl);
> +		}
>  		rhashtable_walk_stop(&iter);

See above.

Cheers,
Andy

>  	} while (cond_resched(), gl == ERR_PTR(-EAGAIN));
>  
> @@ -1940,6 +1939,7 @@ static void gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
>  }
>  
>  static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
> +	__acquires(RCU)
>  {
>  	struct gfs2_glock_iter *gi = seq->private;
>  	loff_t n = *pos;
> @@ -1972,6 +1972,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
>  }
>  
>  static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
> +	__releases(RCU)
>  {
>  	struct gfs2_glock_iter *gi = seq->private;
>  
> diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
> index 1d98b8a36eb3..65f33a0ac190 100644
> --- a/fs/gfs2/lock_dlm.c
> +++ b/fs/gfs2/lock_dlm.c
> @@ -23,8 +23,6 @@
>  #include "sys.h"
>  #include "trace_gfs2.h"
>  
> -extern struct workqueue_struct *gfs2_control_wq;
> -
>  /**
>   * gfs2_update_stats - Update time based stats
>   * @mv: Pointer to mean/variance structure to update
> @@ -1176,7 +1174,7 @@ static void gdlm_recovery_result(struct gfs2_sbd *sdp, unsigned int jid,
>  	spin_unlock(&ls->ls_recover_spin);
>  }
>  
> -const struct dlm_lockspace_ops gdlm_lockspace_ops = {
> +static const struct dlm_lockspace_ops gdlm_lockspace_ops = {
>  	.recover_prep = gdlm_recover_prep,
>  	.recover_slot = gdlm_recover_slot,
>  	.recover_done = gdlm_recover_done,
> diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c
> index 0a89e6f7a314..899329cfd733 100644
> --- a/fs/gfs2/main.c
> +++ b/fs/gfs2/main.c
> @@ -32,8 +32,6 @@
>  #include "dir.h"
>  #include "glops.h"
>  
> -struct workqueue_struct *gfs2_control_wq;
> -
>  static void gfs2_init_inode_once(void *foo)
>  {
>  	struct gfs2_inode *ip = foo;
> diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
> index c81295f407f6..3926f95a6eb7 100644
> --- a/fs/gfs2/util.h
> +++ b/fs/gfs2/util.h
> @@ -151,6 +151,7 @@ extern struct kmem_cache *gfs2_rgrpd_cachep;
>  extern struct kmem_cache *gfs2_quotad_cachep;
>  extern struct kmem_cache *gfs2_qadata_cachep;
>  extern mempool_t *gfs2_page_pool;
> +extern struct workqueue_struct *gfs2_control_wq;
>  
>  static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
>  					   unsigned int *p)
> diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
> index 54179554c7d2..cf694de4991a 100644
> --- a/fs/gfs2/xattr.c
> +++ b/fs/gfs2/xattr.c
> @@ -25,6 +25,7 @@
>  #include "meta_io.h"
>  #include "quota.h"
>  #include "rgrp.h"
> +#include "super.h"
>  #include "trans.h"
>  #include "util.h"
>  
> 



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

* [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings
  2017-08-18 15:52   ` Andrew Price
@ 2017-08-22 19:54     ` Bob Peterson
  0 siblings, 0 replies; 5+ messages in thread
From: Bob Peterson @ 2017-08-22 19:54 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi Andy,

Comments inline.

----- Original Message -----
| On Fri, Aug 18, 2017 at 10:20:56AM -0400, Bob Peterson wrote:
| > Hi,
| > 
| > This patch cleans up various pieces of GFS2 to avoid sparse errors.
| > This doesn't fix them all, but it fixes several. The first error,
| > in function glock_hash_walk was a genuine bug where the rhashtable
| > could be started and not stopped.
| > 
| > Signed-off-by: Bob Peterson <rpeterso@redhat.com>
| > ---
| > diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
| > index ffca19598525..db78720f3c89 100644
| > --- a/fs/gfs2/glock.c
| > +++ b/fs/gfs2/glock.c
| > @@ -1550,14 +1550,13 @@ static void glock_hash_walk(glock_examiner
| > examiner, const struct gfs2_sbd *sdp)
| >  
| >  	do {
| >  		gl = ERR_PTR(rhashtable_walk_start(&iter));
| 
| Couldn't the rhashtable_walk_start() call be moved before the outer loop?
| 
| "* Returns -EAGAIN if resize event occured.  Note that the iterator
|  * will rewind back to the beginning and you may use it immediately
|  * by calling rhashtable_walk_next."
| 
| so it looks like -EAGAIN doesn't require a stop and restart of the walk.

Yes, I'm pretty sure you're right. I could (and should) re-factor this
and straighten it out. However, my goal with this set of patches was
to not change the logic at all, and in today's code, it's inside the loop.

| > -		if (gl)
| > -			continue;
| > -
| > -		while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
| > -			if ((gl->gl_name.ln_sbd == sdp) &&
| > -			    lockref_get_not_dead(&gl->gl_lockref))
| > -				examiner(gl);
| > -
| > +		if (!gl) {
| 
| This looks like it should be if (!IS_ERR(gl)) { ...

Here again, the original was "if (gl)" and I didn't want to change it,
so it becomes "if (gl) {". Again, I think I need to change it, but
perhaps in another patch that targets this function, especially since
it can't return anything other than 0 or -EAGAIN.
 
| > +			while ((gl = rhashtable_walk_next(&iter)) &&
| > +			       !IS_ERR(gl))
| > +				if ((gl->gl_name.ln_sbd == sdp) &&
| > +				    lockref_get_not_dead(&gl->gl_lockref))
| > +					examiner(gl);
| > +		}
| >  		rhashtable_walk_stop(&iter);

So I propose I push this patch "as is" and write another patch to re-work
function glock_hash_walk so it cleans up the issues you pointed out and
makes more logical sense.

Regards,

Bob Peterson
Red Hat File Systems



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

* [Cluster-devel] [GFS2 PATCH] [v2] GFS2: Fix up some sparse warnings
  2017-08-18 14:20 ` [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings Bob Peterson
  2017-08-18 15:52   ` Andrew Price
@ 2017-08-23 15:27   ` Bob Peterson
  2017-08-23 16:19     ` Andrew Price
  1 sibling, 1 reply; 5+ messages in thread
From: Bob Peterson @ 2017-08-23 15:27 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi,

I've been doing some investigation with regard to Andy Price's
questions about the glock / rhashtable portion of this patch.

It turns out that the rhashtable code in function glock_hash_walk
was patterned after the code in function tipc_sk_reinit() in
net/tips/socket.c. The loop in Andy's question was added recently
by Herbert Xu  in commit 40f9f439706073b4b0a654b3b99e18296b7990b3
and comments in that patch explain why the loop was added.
This differs, however, from net/netlink/diag.c which does not have
the loop.

As far as I can tell, the difference between having and not having
the loop comes down to what happens when an rhashtable resize
event occurs: Would you rather have it (a) process some
unpredictable number of glocks twice, or (b) skip some altogether?

Since the callers of function glock_hash_walk are gfs2_glock_thaw
and gfs2_gl_hash_clear, it makes more sense to me to process them
twice than not at all.

In doing this investigation, I found a bug in the original tipc
code, and submitted a patch for it this morning. That bug was
one I has proposed fixing with version 1 of this patch.

I've therefore revised this patch to (a) use IS_ERR(gl) rather
than just (gl) as Andy suggested. (b) Added a goto instead of
using braces, so that it more closely matches the patched tipc
code, and (c) got rid of some parenthesis to appease Andreas.

Bob Peterson

Patch description:
------------------
This patch cleans up various pieces of GFS2 to avoid sparse errors.
This doesn't fix them all, but it fixes several. The first error,
in function glock_hash_walk was a genuine bug where the rhashtable
could be started and not stopped.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
---
diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
index ffca19598525..4178417249c3 100644
--- a/fs/gfs2/glock.c
+++ b/fs/gfs2/glock.c
@@ -1550,14 +1550,15 @@ static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
 
 	do {
 		gl = ERR_PTR(rhashtable_walk_start(&iter));
-		if (gl)
-			continue;
+		if (IS_ERR(gl))
+			goto walk_stop;
 
 		while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
-			if ((gl->gl_name.ln_sbd == sdp) &&
+			if (gl->gl_name.ln_sbd == sdp &&
 			    lockref_get_not_dead(&gl->gl_lockref))
 				examiner(gl);
 
+walk_stop:
 		rhashtable_walk_stop(&iter);
 	} while (cond_resched(), gl == ERR_PTR(-EAGAIN));
 
@@ -1940,6 +1941,7 @@ static void gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
 }
 
 static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
+	__acquires(RCU)
 {
 	struct gfs2_glock_iter *gi = seq->private;
 	loff_t n = *pos;
@@ -1972,6 +1974,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
 }
 
 static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
+	__releases(RCU)
 {
 	struct gfs2_glock_iter *gi = seq->private;
 
diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
index 1d98b8a36eb3..65f33a0ac190 100644
--- a/fs/gfs2/lock_dlm.c
+++ b/fs/gfs2/lock_dlm.c
@@ -23,8 +23,6 @@
 #include "sys.h"
 #include "trace_gfs2.h"
 
-extern struct workqueue_struct *gfs2_control_wq;
-
 /**
  * gfs2_update_stats - Update time based stats
  * @mv: Pointer to mean/variance structure to update
@@ -1176,7 +1174,7 @@ static void gdlm_recovery_result(struct gfs2_sbd *sdp, unsigned int jid,
 	spin_unlock(&ls->ls_recover_spin);
 }
 
-const struct dlm_lockspace_ops gdlm_lockspace_ops = {
+static const struct dlm_lockspace_ops gdlm_lockspace_ops = {
 	.recover_prep = gdlm_recover_prep,
 	.recover_slot = gdlm_recover_slot,
 	.recover_done = gdlm_recover_done,
diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c
index 0a89e6f7a314..899329cfd733 100644
--- a/fs/gfs2/main.c
+++ b/fs/gfs2/main.c
@@ -32,8 +32,6 @@
 #include "dir.h"
 #include "glops.h"
 
-struct workqueue_struct *gfs2_control_wq;
-
 static void gfs2_init_inode_once(void *foo)
 {
 	struct gfs2_inode *ip = foo;
diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
index c81295f407f6..3926f95a6eb7 100644
--- a/fs/gfs2/util.h
+++ b/fs/gfs2/util.h
@@ -151,6 +151,7 @@ extern struct kmem_cache *gfs2_rgrpd_cachep;
 extern struct kmem_cache *gfs2_quotad_cachep;
 extern struct kmem_cache *gfs2_qadata_cachep;
 extern mempool_t *gfs2_page_pool;
+extern struct workqueue_struct *gfs2_control_wq;
 
 static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
 					   unsigned int *p)
diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
index 54179554c7d2..cf694de4991a 100644
--- a/fs/gfs2/xattr.c
+++ b/fs/gfs2/xattr.c
@@ -25,6 +25,7 @@
 #include "meta_io.h"
 #include "quota.h"
 #include "rgrp.h"
+#include "super.h"
 #include "trans.h"
 #include "util.h"
 



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

* [Cluster-devel] [GFS2 PATCH] [v2] GFS2: Fix up some sparse warnings
  2017-08-23 15:27   ` [Cluster-devel] [GFS2 PATCH] [v2] " Bob Peterson
@ 2017-08-23 16:19     ` Andrew Price
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Price @ 2017-08-23 16:19 UTC (permalink / raw)
  To: cluster-devel.redhat.com

On Wed, Aug 23, 2017 at 11:27:22AM -0400, Bob Peterson wrote:
> Hi,
> 
> I've been doing some investigation with regard to Andy Price's
> questions about the glock / rhashtable portion of this patch.
> 
> It turns out that the rhashtable code in function glock_hash_walk
> was patterned after the code in function tipc_sk_reinit() in
> net/tips/socket.c. The loop in Andy's question was added recently
> by Herbert Xu  in commit 40f9f439706073b4b0a654b3b99e18296b7990b3
> and comments in that patch explain why the loop was added.
> This differs, however, from net/netlink/diag.c which does not have
> the loop.
> 
> As far as I can tell, the difference between having and not having
> the loop comes down to what happens when an rhashtable resize
> event occurs: Would you rather have it (a) process some
> unpredictable number of glocks twice, or (b) skip some altogether?
> 
> Since the callers of function glock_hash_walk are gfs2_glock_thaw
> and gfs2_gl_hash_clear, it makes more sense to me to process them
> twice than not at all.
> 
> In doing this investigation, I found a bug in the original tipc
> code, and submitted a patch for it this morning. 

Nice!

> That bug was
> one I has proposed fixing with version 1 of this patch.
> 
> I've therefore revised this patch to (a) use IS_ERR(gl) rather
> than just (gl) as Andy suggested. (b) Added a goto instead of
> using braces, so that it more closely matches the patched tipc
> code, and (c) got rid of some parenthesis to appease Andreas.

Looks good to me.

Cheers,
Andy

> Bob Peterson
> 
> Patch description:
> ------------------
> This patch cleans up various pieces of GFS2 to avoid sparse errors.
> This doesn't fix them all, but it fixes several. The first error,
> in function glock_hash_walk was a genuine bug where the rhashtable
> could be started and not stopped.
> 
> Signed-off-by: Bob Peterson <rpeterso@redhat.com>
> ---
> diff --git a/fs/gfs2/glock.c b/fs/gfs2/glock.c
> index ffca19598525..4178417249c3 100644
> --- a/fs/gfs2/glock.c
> +++ b/fs/gfs2/glock.c
> @@ -1550,14 +1550,15 @@ static void glock_hash_walk(glock_examiner examiner, const struct gfs2_sbd *sdp)
>  
>  	do {
>  		gl = ERR_PTR(rhashtable_walk_start(&iter));
> -		if (gl)
> -			continue;
> +		if (IS_ERR(gl))
> +			goto walk_stop;
>  
>  		while ((gl = rhashtable_walk_next(&iter)) && !IS_ERR(gl))
> -			if ((gl->gl_name.ln_sbd == sdp) &&
> +			if (gl->gl_name.ln_sbd == sdp &&
>  			    lockref_get_not_dead(&gl->gl_lockref))
>  				examiner(gl);
>  
> +walk_stop:
>  		rhashtable_walk_stop(&iter);
>  	} while (cond_resched(), gl == ERR_PTR(-EAGAIN));
>  
> @@ -1940,6 +1941,7 @@ static void gfs2_glock_iter_next(struct gfs2_glock_iter *gi)
>  }
>  
>  static void *gfs2_glock_seq_start(struct seq_file *seq, loff_t *pos)
> +	__acquires(RCU)
>  {
>  	struct gfs2_glock_iter *gi = seq->private;
>  	loff_t n = *pos;
> @@ -1972,6 +1974,7 @@ static void *gfs2_glock_seq_next(struct seq_file *seq, void *iter_ptr,
>  }
>  
>  static void gfs2_glock_seq_stop(struct seq_file *seq, void *iter_ptr)
> +	__releases(RCU)
>  {
>  	struct gfs2_glock_iter *gi = seq->private;
>  
> diff --git a/fs/gfs2/lock_dlm.c b/fs/gfs2/lock_dlm.c
> index 1d98b8a36eb3..65f33a0ac190 100644
> --- a/fs/gfs2/lock_dlm.c
> +++ b/fs/gfs2/lock_dlm.c
> @@ -23,8 +23,6 @@
>  #include "sys.h"
>  #include "trace_gfs2.h"
>  
> -extern struct workqueue_struct *gfs2_control_wq;
> -
>  /**
>   * gfs2_update_stats - Update time based stats
>   * @mv: Pointer to mean/variance structure to update
> @@ -1176,7 +1174,7 @@ static void gdlm_recovery_result(struct gfs2_sbd *sdp, unsigned int jid,
>  	spin_unlock(&ls->ls_recover_spin);
>  }
>  
> -const struct dlm_lockspace_ops gdlm_lockspace_ops = {
> +static const struct dlm_lockspace_ops gdlm_lockspace_ops = {
>  	.recover_prep = gdlm_recover_prep,
>  	.recover_slot = gdlm_recover_slot,
>  	.recover_done = gdlm_recover_done,
> diff --git a/fs/gfs2/main.c b/fs/gfs2/main.c
> index 0a89e6f7a314..899329cfd733 100644
> --- a/fs/gfs2/main.c
> +++ b/fs/gfs2/main.c
> @@ -32,8 +32,6 @@
>  #include "dir.h"
>  #include "glops.h"
>  
> -struct workqueue_struct *gfs2_control_wq;
> -
>  static void gfs2_init_inode_once(void *foo)
>  {
>  	struct gfs2_inode *ip = foo;
> diff --git a/fs/gfs2/util.h b/fs/gfs2/util.h
> index c81295f407f6..3926f95a6eb7 100644
> --- a/fs/gfs2/util.h
> +++ b/fs/gfs2/util.h
> @@ -151,6 +151,7 @@ extern struct kmem_cache *gfs2_rgrpd_cachep;
>  extern struct kmem_cache *gfs2_quotad_cachep;
>  extern struct kmem_cache *gfs2_qadata_cachep;
>  extern mempool_t *gfs2_page_pool;
> +extern struct workqueue_struct *gfs2_control_wq;
>  
>  static inline unsigned int gfs2_tune_get_i(struct gfs2_tune *gt,
>  					   unsigned int *p)
> diff --git a/fs/gfs2/xattr.c b/fs/gfs2/xattr.c
> index 54179554c7d2..cf694de4991a 100644
> --- a/fs/gfs2/xattr.c
> +++ b/fs/gfs2/xattr.c
> @@ -25,6 +25,7 @@
>  #include "meta_io.h"
>  #include "quota.h"
>  #include "rgrp.h"
> +#include "super.h"
>  #include "trans.h"
>  #include "util.h"
>  



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

end of thread, other threads:[~2017-08-23 16:19 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1809292291.1872363.1503065998850.JavaMail.zimbra@redhat.com>
2017-08-18 14:20 ` [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings Bob Peterson
2017-08-18 15:52   ` Andrew Price
2017-08-22 19:54     ` Bob Peterson
2017-08-23 15:27   ` [Cluster-devel] [GFS2 PATCH] [v2] " Bob Peterson
2017-08-23 16:19     ` Andrew Price

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.