From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Mon, 02 Jun 2014 20:49:53 +0100 Subject: [Cluster-devel] [GFS2 PATCH] [TRY #4] GFS2: Prevent recovery before the local journal is set In-Reply-To: <1071833579.15295817.1401716425692.JavaMail.zimbra@redhat.com> References: <256959012.14056298.1399039517312.JavaMail.zimbra@redhat.com> <1282622671.10155260.1400764638562.JavaMail.zimbra@redhat.com> <1071833579.15295817.1401716425692.JavaMail.zimbra@redhat.com> Message-ID: <538CD561.8050002@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Now in the -nmw tree. Thanks, Steve. On 02/06/14 14:40, Bob Peterson wrote: > Hi, > > This is my fourth attempt at a recovery patch that prevents recovery > before the journal is set by GFS2. > > Patch description: > > This patch uses a completion to prevent dlm's recovery process from > referencing and trying to recover a journal before a journal has been > opened. > > Regards, > > Bob Peterson > Red Hat File Systems > > Signed-off-by: Bob Peterson > --- > diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h > index 2434a96..67d310c 100644 > --- a/fs/gfs2/incore.h > +++ b/fs/gfs2/incore.h > @@ -728,6 +728,8 @@ struct gfs2_sbd { > struct gfs2_holder sd_sc_gh; > struct gfs2_holder sd_qc_gh; > > + struct completion sd_journal_ready; > + > /* Daemon stuff */ > > struct task_struct *sd_logd_process; > diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c > index be45c79..bc564c0 100644 > --- a/fs/gfs2/ops_fstype.c > +++ b/fs/gfs2/ops_fstype.c > @@ -94,6 +94,7 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) > INIT_LIST_HEAD(&sdp->sd_jindex_list); > spin_lock_init(&sdp->sd_jindex_spin); > mutex_init(&sdp->sd_jindex_mutex); > + init_completion(&sdp->sd_journal_ready); > > INIT_LIST_HEAD(&sdp->sd_quota_list); > mutex_init(&sdp->sd_quota_mutex); > @@ -796,6 +797,7 @@ static int init_inodes(struct gfs2_sbd *sdp, int undo) > goto fail_qinode; > > error = init_journal(sdp, undo); > + complete_all(&sdp->sd_journal_ready); > if (error) > goto fail; > > @@ -1212,6 +1214,7 @@ fail_sb: > fail_locking: > init_locking(sdp, &mount_gh, UNDO); > fail_lm: > + complete_all(&sdp->sd_journal_ready); > gfs2_gl_hash_clear(sdp); > gfs2_lm_unmount(sdp); > fail_debug: > diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c > index 7bc17ed..0e049f9 100644 > --- a/fs/gfs2/sys.c > +++ b/fs/gfs2/sys.c > @@ -407,6 +407,9 @@ int gfs2_recover_set(struct gfs2_sbd *sdp, unsigned jid) > struct gfs2_jdesc *jd; > int rv; > > + /* Wait for our primary journal to be initialized */ > + wait_for_completion(&sdp->sd_journal_ready); > + > spin_lock(&sdp->sd_jindex_spin); > rv = -EBUSY; > if (sdp->sd_jdesc->jd_jid == jid) >