SEATTLE -- Justin Smoak had already done his part by hitting a go-ahead double in the eighth inning.
But when Fernando Rodney struggled in the ninth, it was Smoak who made another huge play to keep Seattle from blowing the lead.
Smoak's two-run double put his team ahead, and his diving catch of Adrian Beltre's line drive in the ninth turned into a game-ending double play as the Mariners held on for a 6-5 win over the Texas Rangers on Friday night.
Smoak's double was crucial. It drove in the first runs this season for Seattle in the eighth inning and sparked a four-run rally for the Mariners.
But his grab in the ninth trumped what he did at the plate. Beltre's ball was hit so hard, there was no time for Smoak to think. All he could do was dive, stretch and hope.
"I kind of blacked out there for a second. Just jumped and stretched as far as I could stretch and it went into the glove," Smoak said.
Robinson Cano had a two-run double for the Mariners, who won consecutive games for the first time since the opening week of the season.
Cano's double was the only time the Mariners got to Texas starter Robbie Ross Jr., but they battered reliever Neal Cotts (1-2) in the eighth inning, scoring four times to end the Rangers' win streak at three games.
With no outs and the bases loaded, Smoak avoided the temptation of two inside pitches from Cotts and worked the count full. Then he lined a pitch down the left-field line and just out of the reach of Michael Choice, allowing Cano and pinch-runner Michael Saunders to score the go-ahead runs.
Seattle had been outscored 18-0 in the eighth inning heading into Friday's game. The Mariners had not won two straight since their three-game sweep of the Angels to open the season.
The Mariners' rally started thanks to Cano, who led off the eighth with a single on the first pitch. Corey Hart worked a full count before being hit on the knee by Cotts' pitch -- the fourth Seattle batter to be hit by a pitch -- and Stefan Romero loaded the bases with a bunt single.
The Mariners ended up needing all those runs because although Rodney got his fourth save, he made it uncomfortable in the ninth. He loaded the bases with one out and wasn't helped when Smoak couldn't handle the relay from Cano on a possible double play early in the inning.
Rodney then walked Choice and Elvis Andrus to force in runs and make it 6-5. Beltre hit a liner that appeared headed for the outfield. Smoak snared it and doubled Andrus off first to end the game.
"That's Fernando. Sometimes he's going to have you on the top step. In the end he gets it done," Seattle manager Lloyd McClendon said. "Probably not all his doing. We could have made it a lot easier for him if we turned the double play."
Seattle relievers Dominic Leone and Yoervis Medina (1-1) bridged the late innings after starter Roenis Elias lasted 5 2/3 innings. Leone's wild pitch that allowed Prince Fielder to score with two outs in the sixth was the difference until the late rally.
Ross threw six innings, giving up six hits and two runs. He has gone 84 batters without issuing a walk. His lone trouble came when he hit Abraham Almonte with a pitch with two outs and then gave up a single to Willie Bloomquist. Cano followed by lining a double off the wall in left-center, scoring both runners. It was his fourth double of the season and fifth extra-base hit.
"It's frustrating because you want to get the guys before you have to face him," Ross said.
Texas C J.P. Arencibia snapped an 0-for-19 skid with a double leading off the third. It was his third hit of the season and first since April 6. ... Injured Seattle LHP James Paxton threw for the first time since straining a back muscle this month. Paxton threw from 45 feet. Injured RHP Taijuan Walker (shoulder) is expected to start throwing on Monday. ... Seattle Seahawks DE Michael Bennett threw out the ceremonial first pitch.