Hi, Looks good to me. ACK.
Cheers! --Abhi ----- Original Message ----- > From: "Bob Peterson" <rpete...@redhat.com> > To: "cluster-devel" <cluster-devel@redhat.com> > Sent: Friday, October 6, 2017 8:38:21 AM > Subject: [Cluster-devel] [GFS2 PATCH] GFS2: flush log and pages for jdata in > gfs2_write_inode > > Hi, > > In function gfs2_write_inode, starting with patch a9185b41a4f84, we > only flush the log and call filemap_fdatawait if we're passed in a > wbc sync_mode of WB_SYNC_ALL. We also need to do these things if > we're evicting a jdata inode, because we might have jdata pages > still attached to bufdata descriptors that need to be revoked, but > by the time it gets to evict() it's too late to start a new > transaction. This patch changes it to treat jdata inodes as if > WB_SYNC_ALL had been specified. > > Signed-off-by: Bob Peterson <rpete...@redhat.com> > --- > diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c > index 769841185ce5..ac78e72de790 100644 > --- a/fs/gfs2/super.c > +++ b/fs/gfs2/super.c > @@ -754,14 +754,15 @@ static int gfs2_write_inode(struct inode *inode, struct > writeback_control *wbc) > struct address_space *metamapping = gfs2_glock2aspace(ip->i_gl); > struct backing_dev_info *bdi = inode_to_bdi(metamapping->host); > int ret = 0; > + bool flush_all = (wbc->sync_mode == WB_SYNC_ALL || gfs2_is_jdata(ip)); > > - if (wbc->sync_mode == WB_SYNC_ALL) > + if (flush_all) > gfs2_log_flush(GFS2_SB(inode), ip->i_gl, NORMAL_FLUSH); > if (bdi->wb.dirty_exceeded) > gfs2_ail1_flush(sdp, wbc); > else > filemap_fdatawrite(metamapping); > - if (wbc->sync_mode == WB_SYNC_ALL) > + if (flush_all) > ret = filemap_fdatawait(metamapping); > if (ret) > mark_inode_dirty_sync(inode); > >