Rajai Davis and Coco Crisp also drove in runs for the A’s, who won for the eighth time in their last 10 home games. Josh Hamilton and Nelson Cruz drove in runs for the Rangers, who have lost four of their last seven.
Cahill (12-4) won his fifth straight against the Rangers despite allowing two unearned runs in the sixth. Michael Wuertz pitched the ninth for his fifth save.
Darren Oliver (0-1) started the seventh, and gave up a single to Cliff Pennington and an RBI double to Crisp before leaving the game.
Twins 5, Indians 4 — Jim Thome hit a two-run shot for career homer No. 578 as Minnesota rallied for five runs in the fifth in Cleveland to pull within a half-game of the AL Central-leading White Sox.
Thome’s drive against his former team came against David Huff (2-11), helping the Twins take two of three in the series.
Brian Duensing (5-1) pitched a career-high 7 1/3 innings for the Twins, yielding three earned runs and nine hits.
Orioles 4, White Sox 3 — Jeremy Guthrie outpitched Mark Buehrle as host Baltimore won for the fifth time in six games under new manager Buck Showalter.
Felix Pie homered for the Orioles, who took the lead for good with a two-run sixth. Since Showalter made his debut in the dugout Tuesday, Baltimore has swept three games from the Angels and won two of three from Chicago.
Phillies 6, Mets 5 — Raul Ibanez sparked a five-run third inning with a three-run homer off knuckleballer R.A. Dickey, and host Philadelphia pounded out a dozen hits to support Roy Halladay (14-8) in defeating New York.
The Phillies have won six of their last seven and 14 of 17 games, charging from seven games back of NL East-leading Atlanta to within two.
Braves 6, Giants 3 — Derek Lowe pitched into the sixth inning before leaving with an injury and David Ross hit a two-run homer, helping host Atlanta win three of four in its series with San Francisco.
Lowe (11-9) was bothered by cramping in his right hamstring. The righthander allowed two runs and five hits in 5 1/3 innings.
Dodgers 8, Nationals 3 — Ted Lilly overcame a rough start to win his second straight outing with host Los Angeles, which capitalized on two Washington errors during a four-run first.
Lilly (5-8) allowed three runs and five hits in six innings, including back-to-back homers by Michael Morse and Justin Maxwell in the second.
Padres 10, Diamondbacks 1 — Mat Latos (12-5) pitched six scoreless innings in a combined three-hitter, Jerry Hairston Jr. created havoc from the leadoff spot, and visiting San Diego avoided a three-game sweep by last-place Arizona. Hairston had three hits, including his ninth homer, scored four runs, and drove in two.
Tigers 9, Angels 4 — Johnny Damon drove in three runs, Alex Avila and Will Rhymes had two RBIs apiece, and host Detroit snapped a four-game losing streak while avoiding a series sweep by Los Angeles.
Mariners 3, Royals 2 — Jason Vargas (8-5) allowed one run in six solid innings to win his seventh game at home, and Casey Kotchman’s two-run single in the sixth gave Seattle the lead for good in holding off Kansas City.
Reds 11, Cubs 4 — Joey Votto and Jonny Gomes scored four runs apiece to back a strong start by Travis Wood (3-1) and lead Cincinnati’s rout in Chicago.
Brewers 11, Astros 6 — Casey McGehee hit a three-run homer and Lorenzo Cain drove in the first three runs of his career, helping host Milwaukee complete a three-game sweep of Houston.
Rockies 8, Pirates 4 — Carlos Gonzalez hit his 25th homer and finished with four hits, helping Colorado salvage a split of the four-game series in Pittsburgh.
The final game of the St. Louis Cardinals’ series at Florida was postponed because of rain. No makeup date was immediately announced.