Commit 2216db70 authored by Benjamin Marzinski's avatar Benjamin Marzinski Committed by Steven Whitehouse

GFS2: Write out dirty inode metadata in delayed deletes

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: default avatarBenjamin Marzinski <bmarzins@redhat.com>
Signed-off-by: default avatarSteven Whitehouse <swhiteho@redhat.com>
parent a0b4df29
...@@ -1545,6 +1545,11 @@ static void gfs2_evict_inode(struct inode *inode) ...@@ -1545,6 +1545,11 @@ static void gfs2_evict_inode(struct inode *inode)
out_truncate: out_truncate:
gfs2_log_flush(sdp, ip->i_gl); 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); write_inode_now(inode, 1);
gfs2_ail_flush(ip->i_gl, 0); gfs2_ail_flush(ip->i_gl, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment