// Rename from if exists, and if so, to must not exist.
 func (me *filePieceImpl) exclRenameIfExists(from, to string) (err error) {
-       _, err = os.Stat(from)
-       if errors.Is(err, fs.ErrNotExist) {
-               return nil
-       }
        // We don't want anyone reading or writing to this until the rename completes.
        f, err := os.OpenFile(to, os.O_CREATE|os.O_EXCL, 0)
+       if errors.Is(err, fs.ErrExist) {
+               _, err = os.Stat(from)
+               if errors.Is(err, fs.ErrNotExist) {
+                       return nil
+               }
+               if err != nil {
+                       return
+               }
+               return errors.New("source and destination files both exist")
+       }
        if err != nil {
-               return fmt.Errorf("error creating destination file: %w", err)
+               return
        }
        f.Close()
        err = os.Rename(from, to)
-       if err == nil {
-               me.logger().Debug("renamed file", "from", from, "to", to)
+       if err != nil {
+               os.Remove(to)
+               return
        }
+       me.logger().Debug("renamed file", "from", from, "to", to)
        return
 }