From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steven Whitehouse Date: Fri, 30 Oct 2015 11:27:00 +0000 Subject: [Cluster-devel] [GFS2 PATCH v3 07/14] GFS2: Truncate address space mapping when deleting an inode In-Reply-To: <1445542222-30672-8-git-send-email-rpeterso@redhat.com> References: <1445542222-30672-1-git-send-email-rpeterso@redhat.com> <1445542222-30672-8-git-send-email-rpeterso@redhat.com> Message-ID: <56335404.4040403@redhat.com> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Hi, Acked-by: Steven Whitehouse Steve. On 22/10/15 20:30, Bob Peterson wrote: > 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 > --- > fs/gfs2/super.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c > index 555fea0..06bd72b 100644 > --- a/fs/gfs2/super.c > +++ b/fs/gfs2/super.c > @@ -1511,6 +1511,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)) { > @@ -1575,8 +1576,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); > } > @@ -1589,6 +1590,7 @@ out_truncate: > 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: