Skip to content

Commit

Permalink
GFS2: Truncate address space mapping when deleting an inode
Browse files Browse the repository at this point in the history
In function gfs2_delete_inode() we write and flush the mapping for
a glock, among other things. We truncate the mapping for the inode,
but we never truncate the mapping for the glock. This patch makes it
also truncate the metamapping. This avoid cases where the glock is
reused by another process who is trying to recreate an inode in its
place using the same block.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Acked-by: Steven Whitehouse <swhiteho@redhat.com>
  • Loading branch information
Bob Peterson committed Dec 18, 2015
1 parent 86d067a commit ee530be
Showing 1 changed file with 3 additions and 1 deletion.
4 changes: 3 additions & 1 deletion fs/gfs2/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1519,6 +1519,7 @@ static void gfs2_evict_inode(struct inode *inode)
struct gfs2_sbd *sdp = sb->s_fs_info;
struct gfs2_inode *ip = GFS2_I(inode);
struct gfs2_holder gh;
struct address_space *metamapping;
int error;

if (test_bit(GIF_FREE_VFS_INODE, &ip->i_flags)) {
Expand Down Expand Up @@ -1583,8 +1584,8 @@ static void gfs2_evict_inode(struct inode *inode)

out_truncate:
gfs2_log_flush(sdp, ip->i_gl, NORMAL_FLUSH);
metamapping = gfs2_glock2aspace(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);
}
Expand All @@ -1597,6 +1598,7 @@ static void gfs2_evict_inode(struct inode *inode)
goto out_unlock;
/* Needs to be done before glock release & also in a transaction */
truncate_inode_pages(&inode->i_data, 0);
truncate_inode_pages(metamapping, 0);
gfs2_trans_end(sdp);

out_unlock:
Expand Down

0 comments on commit ee530be

Please sign in to comment.