diff --git a/mercurial/revlog.py b/mercurial/revlog.py
index 4ee64ff1d49f835a48dd367b624a49caceb5ad40_bWVyY3VyaWFsL3JldmxvZy5weQ==..4a3a9d9615618e64fdf0e35894f77ed1759508e0_bWVyY3VyaWFsL3JldmxvZy5weQ== 100644
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -2131,7 +2131,7 @@
 
         The file will only exist if a splitting operation is in progress, but
         it is always expected at the same location."""
-        parts = os.path.split(self.radix)
+        parts = self.radix.split(b'/')
         if len(parts) > 1:
             # adds a '-s' prefix to the ``data/` or `meta/` base
             head = parts[0] + b'-s'
@@ -2135,7 +2135,10 @@
         if len(parts) > 1:
             # adds a '-s' prefix to the ``data/` or `meta/` base
             head = parts[0] + b'-s'
-            return os.path.join(head, *parts[1:])
+            mids = parts[1:-1]
+            tail = parts[-1] + b'.i'
+            pieces = [head] + mids + [tail]
+            return b'/'.join(pieces)
         else:
             # the revlog is stored at the root of the store (changelog or
             # manifest), no risk of collision.
diff --git a/tests/test-transaction-rollback-on-revlog-split.t b/tests/test-transaction-rollback-on-revlog-split.t
index 4ee64ff1d49f835a48dd367b624a49caceb5ad40_dGVzdHMvdGVzdC10cmFuc2FjdGlvbi1yb2xsYmFjay1vbi1yZXZsb2ctc3BsaXQudA==..4a3a9d9615618e64fdf0e35894f77ed1759508e0_dGVzdHMvdGVzdC10cmFuc2FjdGlvbi1yb2xsYmFjay1vbi1yZXZsb2ctc3BsaXQudA== 100644
--- a/tests/test-transaction-rollback-on-revlog-split.t
+++ b/tests/test-transaction-rollback-on-revlog-split.t
@@ -202,7 +202,7 @@
   data/some_dir/sub_dir/foo_bar.i.s/tutu.i 1174
   data/some_dir/sub_dir/foo_bar.i.s/tutu.d 0
   $ f -s .hg/store/data*/file*
-  .hg/store/data-s/file: size=320
+  .hg/store/data-s/file.i: size=320
   .hg/store/data/file.d: size=267307
   .hg/store/data/file.i: size=132395
   $ f -s .hg/store/data*/foo*/bar*/babar__celeste*/foo*
@@ -206,7 +206,7 @@
   .hg/store/data/file.d: size=267307
   .hg/store/data/file.i: size=132395
   $ f -s .hg/store/data*/foo*/bar*/babar__celeste*/foo*
-  .hg/store/data/foo/bar/babar__celeste-s/foo: size=320
+  .hg/store/data-s/foo/bar/babar__celeste/foo.i: size=320
   .hg/store/data/foo/bar/babar__celeste/foo.d: size=267307
   .hg/store/data/foo/bar/babar__celeste/foo.i: size=132395
 
@@ -221,7 +221,7 @@
   data/file.d 0
   $ cat .hg/store/journal.backupfiles | tr -s '\000' ' ' | tr -s '\00' ' '| grep 'data.*/file'
    data/file.i data/journal.backup.file.i.bck 0
-   data-s/file 0
+   data-s/file.i 0
 
 recover is rolling the split back, the fncache is still valid
 
@@ -285,7 +285,7 @@
 The inline revlog still exist, but a split version exist next to it
 
   $ f -s .hg/store/data*/file*
-  .hg/store/data-s/file: size=320
+  .hg/store/data-s/file.i: size=320
   .hg/store/data/file.d: size=267307
   .hg/store/data/file.i: size=132395