From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Tue, 14 Jun 2011 10:06:32 +0100 Subject: [Cluster-devel] [PATCH] GFS2: force a log flush when invalidating the rindex glock In-Reply-To: <20110613192740.GC15149@ether.msp.redhat.com> References: <20110613192740.GC15149@ether.msp.redhat.com> Message-ID: <1308042392.2723.1.camel@menhir> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, On Mon, 2011-06-13 at 14:27 -0500, Benjamin Marzinski wrote: > Right now, there is nothing that forces the log to get flushed when a node > drops its rindex glock so that another node can grow the filesystem. If the > log doesn't get flushed, GFS2 can corrupt the sd_log_le_rg list in the > following way. > > A node puts an rgd on the list in rg_lo_add(), and then the rindex glock is > dropped so the other node can grow the filesystem. When the node reacquires the > rindex glock, that rgd gets deleted in clear_rgrpdi() before ever being > removed from the list by gfs2_log_flush(). > > This code simply forces a log flush when the rindex glock is invalidated, > solving the problem. > > Signed-off-by: Benjamin Marzinski > --- > fs/gfs2/glops.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > Index: gfs2-2.6-nmw/fs/gfs2/glops.c > =================================================================== > --- gfs2-2.6-nmw.orig/fs/gfs2/glops.c > +++ gfs2-2.6-nmw/fs/gfs2/glops.c > @@ -221,8 +221,10 @@ static void inode_go_inval(struct gfs2_g > } > } > > - if (ip == GFS2_I(gl->gl_sbd->sd_rindex)) > + if (ip == GFS2_I(gl->gl_sbd->sd_rindex)) { > + gfs2_log_flush(gl->gl_sbd, NULL); > gl->gl_sbd->sd_rindex_uptodate = 0; > + } > if (ip && S_ISREG(ip->i_inode.i_mode)) > truncate_inode_pages(ip->i_inode.i_mapping, 0); > } > Now in the -nmw git tree. Thanks, Steve.