From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Price Date: Fri, 18 Aug 2017 16:52:00 +0100 Subject: [Cluster-devel] [GFS2 PATCH] GFS2: Fix up some sparse warnings In-Reply-To: <359006668.1872591.1503066056464.JavaMail.zimbra@redhat.com> References: <1809292291.1872363.1503065998850.JavaMail.zimbra@redhat.com> <359006668.1872591.1503066056464.JavaMail.zimbra@redhat.com> Message-ID: <20170818155159.GC12296@cicero> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 > --- > 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" > >