Birmingham slip two places to 23rd in the table, while Barnsley's first victory under new head coach Jose Morais sees them climb to 21st in the standings.
The Wear-Tees derby yielded six goals as Sunderland and Middlesbrough played out a 3-3 draw at the Stadium of Light.
Callum McManaman scored his first goal in two-and-a-half years in the 96th minute to rescue a point against Boro in a match where each side saw a men sent off in the first half.
The fixtures at the Madejski Stadium and Hillsborough also saw six goals apiece as Jon Dadi Bodvarsson struck in the 80th minute to help Reading to a 3-3 draw with 10-man Derby County.
In South Yorkshire, Aston Villa twice came from behind to win 4-2 at Sheffield Wednesday and move a point behind second-placed Cardiff City.
Results in full: Birmingham City 0-2 Barnsley, Burton Albion 0-1 Millwall, Leeds United 1-0 Brentford, Norwich City 0-0 Bolton Wanderers, Preston 0-1 Ipswich, Queens Park Rangers 2-5 Nottingham Forest, Reading 3-3 Derby County, Sheffield Wednesday 2-4 Aston Villa, Sunderland 3-3 Middlesbrough