* [Cluster-devel] [GFS2 PATCH] gfs2: don't hold the sd_jindex_spin during recovery [not found] <978501634.3491087.1534521208889.JavaMail.zimbra@redhat.com> @ 2018-08-17 15:53 ` Bob Peterson 2018-08-20 8:54 ` Steven Whitehouse 0 siblings, 1 reply; 2+ messages in thread From: Bob Peterson @ 2018-08-17 15:53 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, The sd_jindex_spin is used to serialize access to the sd_jindex_list. Before this patch function gfs2_recover_set would hold the spin_lock while recovery is running. Since recovery may take a very long time, other processes needing to use the list would monopolize a CPU for a very long time, spinning. This patch allows it to unlock the spin_lock before calling gfs2_recover_journal. The test_and_set_bit there should prevent multiple processes from trying to recover the same journal. This is only a problem when multiple processes attempt recovery, which is possible via (1) a uevent kicking a 1 into the sysfs file /sys/fs/gfs2/<table>/lock_module/recover, while the gfs2_control_func in lock_dlm also calls gfs2_recover_set(). Signed-off-by: Bob Peterson <rpeterso@redhat.com> --- fs/gfs2/sys.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c index 0c2a60fa66d7f..9fcb66d882b45 100644 --- a/fs/gfs2/sys.c +++ b/fs/gfs2/sys.c @@ -424,8 +424,8 @@ int gfs2_recover_set(struct gfs2_sbd *sdp, unsigned jid) list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { if (jd->jd_jid != jid && !sdp->sd_args.ar_spectator) continue; - rv = gfs2_recover_journal(jd, false); - break; + spin_unlock(&sdp->sd_jindex_spin); + return gfs2_recover_journal(jd, false); } out: spin_unlock(&sdp->sd_jindex_spin); ^ permalink raw reply related [flat|nested] 2+ messages in thread
* [Cluster-devel] [GFS2 PATCH] gfs2: don't hold the sd_jindex_spin during recovery 2018-08-17 15:53 ` [Cluster-devel] [GFS2 PATCH] gfs2: don't hold the sd_jindex_spin during recovery Bob Peterson @ 2018-08-20 8:54 ` Steven Whitehouse 0 siblings, 0 replies; 2+ messages in thread From: Steven Whitehouse @ 2018-08-20 8:54 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, On 17/08/18 16:53, Bob Peterson wrote: > Hi, > > The sd_jindex_spin is used to serialize access to the sd_jindex_list. > Before this patch function gfs2_recover_set would hold the > spin_lock while recovery is running. Since recovery may take a very > long time, other processes needing to use the list would > monopolize a CPU for a very long time, spinning. This patch allows > it to unlock the spin_lock before calling gfs2_recover_journal. > The test_and_set_bit there should prevent multiple processes from > trying to recover the same journal. > > This is only a problem when multiple processes attempt recovery, > which is possible via (1) a uevent kicking a 1 into the sysfs file > /sys/fs/gfs2/<table>/lock_module/recover, while the gfs2_control_func > in lock_dlm also calls gfs2_recover_set(). > > Signed-off-by: Bob Peterson <rpeterso@redhat.com> > --- > fs/gfs2/sys.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c > index 0c2a60fa66d7f..9fcb66d882b45 100644 > --- a/fs/gfs2/sys.c > +++ b/fs/gfs2/sys.c > @@ -424,8 +424,8 @@ int gfs2_recover_set(struct gfs2_sbd *sdp, unsigned jid) > list_for_each_entry(jd, &sdp->sd_jindex_list, jd_list) { > if (jd->jd_jid != jid && !sdp->sd_args.ar_spectator) > continue; > - rv = gfs2_recover_journal(jd, false); > - break; > + spin_unlock(&sdp->sd_jindex_spin); > + return gfs2_recover_journal(jd, false); Since the wait parameter is false here, all gfs2_recover_journal does is queue some work, and that should not block. Also it breaks the locking between the JDF_RECOVERY flag and the queuing of the work too, Steve. > } > out: > spin_unlock(&sdp->sd_jindex_spin); > ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2018-08-20 8:54 UTC | newest] Thread overview: 2+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <978501634.3491087.1534521208889.JavaMail.zimbra@redhat.com> 2018-08-17 15:53 ` [Cluster-devel] [GFS2 PATCH] gfs2: don't hold the sd_jindex_spin during recovery Bob Peterson 2018-08-20 8:54 ` Steven Whitehouse
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).