Match ends, Millwall 0, Rotherham United 1.
Rotherham's impressive start to the season continued as Ben Pringle's strike secured the visitors their second Championship win of the season.
Millwall dominated possession in the first half but Rotherham wasted the best chance of the period when Alex Revell missed from six yards.
Pringle spared his team-mate's blushes after the break, tapping home from close range from a Paul Taylor cross.
Ricardo Fuller could have levelled but headed Scott Malone's cross over.
With 10 minutes remaining, Lions substitute Magaye Gueye had a volley blocked as Rotherham held firm to inflict a first defeat of the season on Millwall.
The south Londoners were unbeaten in their last 12 games in all competitions, a run which stretched back to March.
Millwall slip from third to ninth after the defeat, while newly-promoted Rotherham leap to 14th.
Rotherham created plenty of chances, with Anthony Wordsworth and Taylor going close before Pringle struck for what was only his team's second goal in the league.
Midfielder Pringle almost grabbed his second of the game a minute later but Stuart Forde superbly saved the 20-yard drive.
Millwall manager Ian Holloway said: "We didn't function like we have been and I felt I should have made some more changes, in hindsight.
"I felt my attackers looked tired and were not quite as effective as they have been. Fundamentally that game should have been goalless."
Rotherham boss Steve Evans said: "Millwall started much brighter and when you have got that type of vocal support... I have never been here with a team before but they were terrific and spurred on their team.
"We switched the two wide players at half-time and when the goal comes from that, from a tactical point of view, it is great."
- 2DunneBooked at 69mins
- 4WrightSubstituted forGueyeat 51'minutes
- 7MartinSubstituted forEasterat 72'minutes
- 19FullerSubstituted forGregoryat 84'minutes
- 3SkarzBooked at 58minsSubstituted forWoodat 81'minutes
- 26TaylorBooked at 90mins
- 18PringleSubstituted forBrindleyat 90'minutes
- 9RevellSubstituted forBoweryat 87'minutes
- Paul Tierney
- Shots on Target
Second Half ends, Millwall 0, Rotherham United 1.
Scott McDonald (Millwall) wins a free kick in the defensive half.
Foul by Paul Taylor (Rotherham United).
Corner, Rotherham United. Conceded by Alan Dunne.
Paul Taylor (Rotherham United) is shown the yellow card.
Hand ball by Martyn Woolford (Millwall).
Corner, Rotherham United. Conceded by Scott Malone.
Substitution, Rotherham United. Richard Brindley replaces Ben Pringle.
Attempt blocked. Alan Dunne (Millwall) right footed shot from outside the box is blocked.
Substitution, Rotherham United. Jordan Bowery replaces Alex Revell.
Jermaine Easter (Millwall) wins a free kick on the right wing.
Foul by Richard Smallwood (Rotherham United).
Substitution, Millwall. Lee Gregory replaces Ricardo Fuller.
Corner, Rotherham United. Conceded by Martyn Woolford.
Substitution, Rotherham United. Richard Wood replaces Joe Skarz.
Attempt blocked. Magaye Gueye (Millwall) left footed shot from the centre of the box is blocked.
Delay over. They are ready to continue.
Delay in match Joe Skarz (Rotherham United) because of an injury.
Corner, Millwall. Conceded by Joe Skarz.