Rovers' play-off hopes came to an end at the hands of Millwall, with Mason Bennett's strike proving to be the difference at the Den.
Derby County loanee Bennett struck midway through the first half after the ball fell kindly into his path after Tom Bradshaw's effort was blocked.
Rovers huffed and puffed throughout the encounter, but didn't test giant Polish goalkeeper Bartosz Bialkowski enough on the night in south London.
The best opportunity fell to Rovers' best source for goals, but Adam Armstrong failed to beat the home stopper early into the second half.
The defeat, along with Cardiff City beating Derby County, means that Rovers are now seven points off the top six with just two games remaining of the 2019-20 campaign.
It was Rovers who began the brightest, with Armstrong taking on and beating Shaun Hutchinson, but not being able to find a way beyond Bialkowski in the home goal just five minutes into the contest.
At the other end, Jake Cooper was up from centre back and his pot shot was comfortable for Walton, but there was nothing the goalkeeper could do just a moment later as the hosts took the lead.
Jed Wallace's cross found Bradshaw in the box, and althouth the strike was blocked by Darragh Lenihan, the ball dropped kindly for Bennett who beat Walton from close range.
The visitors went searching for an equaliser, but Bradley Johnson dragged a strike wide of the target from the edge of the box.
It was a frustrating first half display from a Rovers side who had struggled to get anything going, and Tony Mowbray made two alterations at the interval with Sam Gallagher and Joe Rothwell coming on.
However, it was Gary Rowett's men who had the first opportunity of the second half through Wallace, with Walton getting in the way of the winger's attempt.
The half time discussions did appear to breathe life into Rovers though, and Stewart Downing's strike was deflected just over Bialkowski's upright less than four minutes into the half.
Armstrong had a glorious chance to level things up on the hour mark, but he hit straight at Bialkowski after Gallagher grappled and got above Alex Pearce to nod down into the striker's path.
Walton was primed and ready a few minutes later as Millwall went in search of a second goal of the night, with the stopper in the right place to deny Bradshaw from close range.
Millwall were looking resolute defensively, and Rovers were having to try pot shots from range in a bid to force a way back into the game.
One of those strikes came with seven minutes remaining, with substitute John Buckley's attempt drifting comfortably wide of Bialkowski's goal.
With one final throw of the dice, Bennett pumped the ball into the box, the ball popped up kindly for Joe Rankin-Costello, but the youngster's shot went agonisingly past Bialkowski's left-hand post in what was the final kick of the game.
Millwall: Bialkowski, Romeo (M. Wallace, 69), Hutchinson, Pearce (c), Cooper, Ferguson (Thompson, 81), J. Wallace (Molumby, 87), Leonard, Woods, Bennett (Bodvarsson, 69), Bradshaw (Mahoney, 81).
Unused substitutes: Steele, Mitchell, Williams, Smith.
Goal: Bennett, 20.
Booked: Cooper, 90.
Rovers: Walton, Bennett (c), Lenihan, Adarabioyo, Rankin-Costello, Travis (Holtby, 69), Johnson (Buckley, 80), Downing (Davenport, 80), Samuel (Rothwell, 46), Graham (Gallagher, 46), Armstrong.
Unused substitutes: Leutwiler, Nyambe, Brereton, Carter.
Booked: Rankin-Costello, 2, Travis, 35
Referee: John Brooks.