From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andreas Gruenbacher Date: Tue, 15 Sep 2020 21:09:35 +0200 Subject: [Cluster-devel] [GFS2 PATCH 4/5] gfs2: factor out evict code related to dinodes we are not deleting In-Reply-To: <20200915143822.16485-5-rpeterso@redhat.com> References: <20200915143822.16485-1-rpeterso@redhat.com> <20200915143822.16485-5-rpeterso@redhat.com> Message-ID: List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On Tue, Sep 15, 2020 at 4:38 PM Bob Peterson wrote: > Now that we've factored out the delete-dinode case to simplify gfs2_evict_inode > we take it a step further and factor out the other case: where we don't > delete the inode. > > Signed-off-by: Bob Peterson > --- > fs/gfs2/super.c | 51 ++++++++++++++++++++++++++++++++----------------- > 1 file changed, 33 insertions(+), 18 deletions(-) > > diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c > index 82c79143681a..46260f370090 100644 > --- a/fs/gfs2/super.c > +++ b/fs/gfs2/super.c > @@ -1424,6 +1424,38 @@ static int may_delete_evicted(struct inode *inode, struct gfs2_holder *gh) > return -EEXIST; > } > > +/** > + * evict_saved_inode - evict an inode whose dinode has not been deleted Maybe evict_truncate_inode or just evict_inode? > + * @inode: The inode to evict > + */ > +static void evict_saved_inode(struct inode *inode) > +{ > + struct super_block *sb = inode->i_sb; > + struct gfs2_sbd *sdp = sb->s_fs_info; > + struct gfs2_inode *ip = GFS2_I(inode); > + struct address_space *metamapping; > + int ret; > + > + gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL | > + GFS2_LFC_EVICT_INODE); > + metamapping = gfs2_glock2aspace(ip->i_gl); > + if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) { > + filemap_fdatawrite(metamapping); > + filemap_fdatawait(metamapping); > + } > + write_inode_now(inode, 1); > + gfs2_ail_flush(ip->i_gl, 0); > + > + ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks); > + if (ret) > + return; Should return the error here. > + > + /* 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); > +} > + > /** > * gfs2_evict_inode - Remove an inode from cache > * @inode: The inode to evict > @@ -1451,7 +1483,6 @@ 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 ret; > > if (test_bit(GIF_FREE_VFS_INODE, &ip->i_flags)) { > @@ -1474,23 +1505,7 @@ static void gfs2_evict_inode(struct inode *inode) > goto out_unlock; > > out_truncate: > - gfs2_log_flush(sdp, ip->i_gl, GFS2_LOG_HEAD_FLUSH_NORMAL | > - GFS2_LFC_EVICT_INODE); > - metamapping = gfs2_glock2aspace(ip->i_gl); > - if (test_bit(GLF_DIRTY, &ip->i_gl->gl_flags)) { > - filemap_fdatawrite(metamapping); > - filemap_fdatawait(metamapping); > - } > - write_inode_now(inode, 1); > - gfs2_ail_flush(ip->i_gl, 0); > - > - ret = gfs2_trans_begin(sdp, 0, sdp->sd_jdesc->jd_blocks); > - if (ret) > - 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); > + evict_saved_inode(inode); > > out_unlock: > if (gfs2_rs_active(&ip->i_res)) > -- > 2.26.2 > Thanks, Andreas