From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 21 Sep 2012 11:56:04 +0100 Subject: [Cluster-devel] [PATCH] GFS2: Write out dirty inode metadata in delayed deletes In-Reply-To: <20120920145258.GB5182@ether.msp.redhat.com> References: <20120920145258.GB5182@ether.msp.redhat.com> Message-ID: <1348224964.2746.37.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, Thanks for the patch, I'll push it into the -nmw tree shortly, Steve. On Thu, 2012-09-20 at 09:52 -0500, Benjamin Marzinski wrote: > If a dirty GFS2 inode was being deleted but was in use by another node, its > metadata was not getting written out before GFS2 checked for dirty buffers in > gfs2_ail_flush(). GFS2 was relying on inode_go_sync() to write out the > metadata when the other node tried to free the file, but it failed the error > check before it got that far. This patch writes out the metadata before calling > gfs2_ail_flush() > > Signed-off-by: Benjamin Marzinski > --- > fs/gfs2/super.c | 5 +++++ > 1 file changed, 5 insertions(+) > > Index: gfs2-3.0-nmw/fs/gfs2/super.c > =================================================================== > --- gfs2-3.0-nmw.orig/fs/gfs2/super.c > +++ gfs2-3.0-nmw/fs/gfs2/super.c > @@ -1545,6 +1545,11 @@ static void gfs2_evict_inode(struct inod > > out_truncate: > gfs2_log_flush(sdp, ip->i_gl); > + if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) { > + struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); > + filemap_fdatawrite(metamapping); > + filemap_fdatawait(metamapping); > + } > write_inode_now(inode, 1); > gfs2_ail_flush(ip->i_gl, 0); > >