diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -1289,10 +1289,6 @@ class revlog(object):
         def buildtext():
             if btext[0] is not None:
                 return btext[0]
-            # flush any pending writes here so we can read it in revision
-            if dfh:
-                dfh.flush()
-            ifh.flush()
             baserev = cachedelta[0]
             delta = cachedelta[1]
             # special case deltas which replace entire base; no need to decode
@@ -1303,7 +1299,11 @@ class revlog(object):
                                                        len(delta) - hlen):
                 btext[0] = delta[hlen:]
             else:
-                basetext = self.revision(self.node(baserev))
+                if self._inline:
+                    fh = ifh
+                else:
+                    fh = dfh
+                basetext = self.revision(self.node(baserev), _df=fh)
                 btext[0] = mdiff.patch(basetext, delta)
             try:
                 self.checkhash(btext[0], p1, p2, node)
@@ -1327,7 +1327,11 @@ class revlog(object):
                     header = mdiff.replacediffheader(self.rawsize(rev), len(t))
                     delta = header + t
                 else:
-                    ptext = self.revision(self.node(rev))
+                    if self._inline:
+                        fh = ifh
+                    else:
+                        fh = dfh
+                    ptext = self.revision(self.node(rev), _df=fh)
                     delta = mdiff.textdiff(ptext, t)
             data = self.compress(delta)
             l = len(data[1]) + len(data[0])