return TorrentImpl{
                Piece: t.Piece,
                Close: t.Close,
+               Flush: t.Flush,
        }, nil
 }
 
        return nil
 }
 
+func fsync(filePath string) (err error) {
+       _ = os.MkdirAll(filepath.Dir(filePath), 0o777)
+       var f *os.File
+       f, err = os.OpenFile(filePath, os.O_WRONLY|os.O_CREATE, 0o666)
+       if err != nil {
+               return err
+       }
+       defer f.Close()
+       if err = f.Sync(); err != nil {
+               return err
+       }
+       return f.Close()
+}
+
+func (fts *fileTorrentImpl) Flush() error {
+       for _, f := range fts.files {
+               if err := fsync(f.path); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
 // A helper to create zero-length files which won't appear for file-orientated storage since no
 // writes will ever occur to them (no torrent data is associated with a zero-length file). The
 // caller should make sure the file name provided is safe/sanitized.