Match ends, Millwall 1, Barnsley 3.
Millwall 1-3 Barnsley
Tom Bradshaw's double helped Barnsley to their first away win of the season at Millwall.
Bradshaw tucked in Harvey Barnes' cross from close range before Lee Gregory levelled with a penalty after the striker was felled by Matty Pearson.
Barnsley boss Paul Heckingbottom was sent off just after half-time, but Bradshaw tapped in his second, linking again with Barnes.
And Mamadou Thiam's penalty sealed the win after Jared Bird was brought down.
Gregory - making his 150th appearance for the Lions - had a good early chance for Millwall, but despite coming into the match with just one point and three goals on the road this season, the Tykes held their own in a first half low on quality.
Heckingbottom was sent to the stands after referee Oliver Langford was summoned to the touchline by the fourth official, but it had no negative effect on the visitors.
Steve Morison's header forced a point-blank save from Adam Davies, but the visitors had chances to further their lead as Millwall continued to chase an equaliser, with Brad Potts' header denied by a brilliant Jordan Archer save.
The victory may have bucked the form book this season, but it extended Barnsley's run of victories over the Lions to five, including the 2015-16 League One Play-off final.
The three points lifted Barnsley up three places to 18th, while Millwall drop to 13th after their first defeat in five Championship matches.
Barnsley head coach Paul Heckingbottom: "I made sure none of the players went up to the referee at half-time. I just approached him by myself.
"When I came out in the second half to go in the technical area he told me I couldn't go in there. I didn't want to make a scene, but I don't know why I wasn't allowed to be in there in the second half.
"It was a clean tackle (from Matty Pearson), we could all see it. When I watched it back it is so apparent with the Millwall players' reactions, but the linesman's flag went straight up."
Millwall manager Neil Harris: "I was disappointed with the performance of course, and disappointed with the outcome result-wise. I take responsibility because I picked the team.
"If I were to take anything away from today, it's if we're not at our best Millwall standard in every fixture in the league this season, we can get beat any time - home or away."
- 3MeredithSubstituted forOnyedinmaat 81'minutes
- 14WallaceBooked at 64mins
- 22O'BrienSubstituted forFergusonat 64'minutesBooked at 82mins
- 2McCarthyBooked at 85mins
- 24PearsonBooked at 45mins
- 8McGeehanBooked at 48minsSubstituted forBirdat 81'minutes
- 15BarnesSubstituted forHedgesat 72'minutes
- 9BradshawSubstituted forThiamat 72'minutes
- Oliver Langford
- Shots on Target
Second Half ends, Millwall 1, Barnsley 3.
Matty Pearson (Barnsley) wins a free kick in the attacking half.
Foul by Lee Gregory (Millwall).
Attempt saved. Mamadou Thiam (Barnsley) right footed shot from outside the box is saved in the top centre of the goal. Assisted by Jared Bird.
Attempt blocked. Fred Onyedinma (Millwall) left footed shot from the left side of the box is blocked. Assisted by Ryan Tunnicliffe.
Corner, Millwall. Conceded by Jason McCarthy.
Attempt missed. Adam Hammill (Barnsley) right footed shot from the centre of the box is close, but misses to the left. Assisted by Mamadou Thiam.
Delay over. They are ready to continue.
Delay in match Brad Potts (Barnsley) because of an injury.
Adam Hammill (Barnsley) wins a free kick in the attacking half.
Foul by George Saville (Millwall).
Foul by Joe Williams (Barnsley).
Fred Onyedinma (Millwall) wins a free kick on the right wing.
Jason McCarthy (Barnsley) is shown the yellow card for a bad foul.
Foul by Jason McCarthy (Barnsley).
Fred Onyedinma (Millwall) wins a free kick on the left wing.
Attempt missed. Ryan Tunnicliffe (Millwall) right footed shot from outside the box is too high. Assisted by George Saville.
Attempt blocked. George Saville (Millwall) left footed shot from the centre of the box is blocked. Assisted by Shane Ferguson.
Goal! Millwall 1, Barnsley 3. Mamadou Thiam (Barnsley) converts the penalty with a right footed shot to the bottom right corner.
Shane Ferguson (Millwall) is shown the yellow card for a bad foul.
Penalty Barnsley. Jared Bird draws a foul in the penalty area.
Penalty conceded by Shane Ferguson (Millwall) after a foul in the penalty area.
Substitution, Millwall. Fred Onyedinma replaces James Meredith.
Substitution, Barnsley. Jared Bird replaces Cameron McGeehan.
Foul by Ryan Hedges (Barnsley).
Jed Wallace (Millwall) wins a free kick in the defensive half.
Attempt saved. Brad Potts (Barnsley) header from the left side of the six yard box is saved in the bottom left corner. Assisted by Mamadou Thiam with a cross.
Foul by Adam Jackson (Barnsley).
Lee Gregory (Millwall) wins a free kick in the defensive half.
Offside, Millwall. Byron Webster tries a through ball, but Lee Gregory is caught offside.
Attempt saved. Steve Morison (Millwall) header from the centre of the box is saved in the centre of the goal. Assisted by Shane Ferguson with a cross.
Substitution, Barnsley. Ryan Hedges replaces Harvey Barnes.
Substitution, Barnsley. Mamadou Thiam replaces Tom Bradshaw.
Attempt missed. Shane Ferguson (Millwall) left footed shot from the left side of the box is too high. Assisted by Conor McLaughlin with a cross.
Attempt missed. Jed Wallace (Millwall) right footed shot from outside the box misses to the right.
Corner, Millwall. Conceded by Jason McCarthy.
Jed Wallace (Millwall) is shown the yellow card for a bad foul.
Matty Pearson (Barnsley) wins a free kick in the defensive half.
Foul by Jed Wallace (Millwall).