FIRST half goals from Jordan Obita an Sam Baldock ensured that Mark Bowen would extend his unbeaten start as Reading manager to three matches.
Jed Wallace hit back in the second half with a brilliant solo effort to make uncomfortable viewing for Royals fans in the second half but they held on to win all three points.
The win sees Reading move up two places in the Championship table to 19th.
The visitors had the first half chance of the game as Michael Morrison scuffed his clearance behind for a Millwall corner, and with the driving wind and rain causing all sorts of issues for Rafael, fortunately for him the header was well off target.
Andy Yiadom showed his attacking prowess throughout the first half and did well to win Reading a free kick deep in the Millwall half on the right wing. John Swift played it short across the box to find Sam Baldock with a nicely worked set piece but the striker’s effort was deflected behind for a corner.
With 10 minutes on the clock Reading took the lead. Jordan Obita met a headed clearance from Liam Moore’s long throw and arrowed a first timed shot into the bottom corner from 20 yards out to net his first goal since scoring away at Fulham in the 2017 play-off semi-final.

The Royals were beginning to hit their stride and control much of the possession as a lung busting run from Andy Rinomhota ended in the midfielder not being able to find a teammate in the box with his cross after his determined effort.
The pressure in Millwall’s half continued as Obita fired a fierce cross into the box with George Puscas coming inches away from making a connection as the visitors were let off the hook again.
Having won a free kick wide on the left wing, Swift aimed for the far post from a tight angle as his shot bounced off the top of the crossbar.
The Royals kept searching for a second goal to show for their dominance as Yiadom continued to strive down the right wing, providing a constant attacking outlet and he almost doubled the lead when Bartosz Bialkowski poorly spilled Baldock’s shot but Yiadom’s follow up was blocked.
Bialkowski then made amends for his error with a super save to turn Matt Miazga’s header from the resulting corner past the post.
But the hosts pressure finally paid off as they found a second goal in the 37th minute, with Baldock netting for the second consecutive game. Reading won the ball in Millwall’s half and Ovie Ejaria slipped a through ball to Baldock who composed himself before curling the ball into the top corner to give the Royals a deserved 2-0 lead going into the break.

Gary Rowett changed his side at half-time with former Royal Jon Dadi Bodvarsson replacing Shane Ferguson.
After a break in play to receive treatment for an injury, Reading’s skipper Liam Moore was replaced by Tyler Blackett early in the second half.
Millwall hit back with a reply just after the hour mark to reduce the deficit to 2-1 as Jed Wallace dribbled past a few defenders before striking the ball past Rafael to finish his impressive solo run.
The usually reliable set piece taker Swift squandered a good chance with a free kick from the centre of the goal as he fired well over from 25 yards out.
After finding a goal to come back into the game, Millwall grew in confidence to put pressure on the Royals defence, including a nervy moment for goalkeeper Rafael who dropped a cross as Reading desperately cleared the ball out of their box.

Millwall burst forward with a counter attack but a heavy touch from Wallace allowed Miazga to win the ball and make a vital clearance.
Mark Bowen made his final two changes in the 75th minute with Yakou Meite and Pele replacing Puscas and Baldock.
Reading held their breath as a late acrobatic effort from Bodvarsson fell just wide of the post.
Reading had to defend defiantly to hold on to their lead which they did so to move up the table with their fourth win of the campaign. The Royals host Luton Town next week at the Madejski Stadium (3pm kick off).
Attendance: 14,845
Visitors: 1,956
Reading: Rafael, Yiadom, Morrison, Miazga, Moore, Obita, Rinomhota, Swift, Ejaria, Baldock, Puscas.
Subs: Walker, McCleary, Loader, McIntyre, Meite, Blackett, Pele
Millwall: Bialkowski, Romeo, Hutchinson (c), Cooper, M Wallace, J Wallace, Molumby, Williams, Ferguson, Thompson, Bradshaw.
Subs: McCarthy. Smith, Steele, Pearce, Mahoney, O’Brien, Bodvarsson.