From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhijith Das Date: Fri, 18 Jan 2008 14:35:55 -0600 Subject: [Cluster-devel] [GFS2][PATCH] - Allow journal recovery on read-only mount In-Reply-To: <479106CD.9010408@redhat.com> References: <479106CD.9010408@redhat.com> Message-ID: <47910DAB.1060909@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit I'm NACKing this on Dave's suggestion that we restrict this behavior to standalone gfs2 filesystems (lock_nolock). I'm working on a patch for that and will post it soon. --Abhi Abhijith Das wrote: >This patch allows gfs2 to perform journal recovery even if it is mounted >read-only. Strictly speaking, a read-only mount should not be writing to >the filesystem, but we do this only to perform journal recovery. A >read-only mount will fail if we don't recover the dirty journal. Also, >when gfs2 is used as a root filesystem, it will be mounted read-only >before being mounted read-write during the boot sequence. A failed >read-only mount will panic the machine during bootup. > >Signed-off-by: Abhijith Das > > > >------------------------------------------------------------------------ > >diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c >index 27c994f..b249e29 100644 >--- a/fs/gfs2/recovery.c >+++ b/fs/gfs2/recovery.c >@@ -504,13 +504,21 @@ int gfs2_recover_journal(struct gfs2_jde > if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags)) > ro = 1; > } else { >- if (sdp->sd_vfs->s_flags & MS_RDONLY) >- ro = 1; >+ if (sdp->sd_vfs->s_flags & MS_RDONLY) { >+ /* check if device itself is read-only */ >+ ro = bdev_read_only(sdp->sd_vfs->s_bdev); >+ if (!ro) { >+ fs_info(sdp, "recovery required on " >+ "read-only filesystem.\n"); >+ fs_info(sdp, "write access will be " >+ "enabled during recovery.\n"); >+ } >+ } > } > > if (ro) { >- fs_warn(sdp, "jid=%u: Can't replay: read-only FS\n", >- jd->jd_jid); >+ fs_warn(sdp, "jid=%u: Can't replay: read-only block " >+ "device\n", jd->jd_jid); > error = -EROFS; > goto fail_gunlock_tr; > } > >