PHOENIX -- Jon Garland shook off a homer, worked around most of the trouble he created for himself, and grinded his way through seven innings.
It should have been enough to give the San Diego Padres a much-needed win.
Dan Hudson made sure it wasn't by fearlessly pounding the strike zone.
Hudson outdueled Garland in his second start with Arizona, pitching into the eighth inning of a combined three-hitter to lift the Diamondbacks to a 2-1 win over the stumbling Padres on Friday night.
"He's fearless out there," said Diamondbacks first baseman Adam LaRoche, who hit his 18th homer in the second inning. "He's not going to show a lot of emotion, but he's not backing down from anybody. To play behind that, a guy that's pounding the zone and getting balls put in play in quick innings, is nice."
Not for San Diego.
The Padres have seen their lead in the NL West gradually dwindle, thanks to a so-so run over the past two weeks and a hot streak by the San Francisco Giants.
Garland (10-8) did his part, combining with three others to hold Arizona to four hits. The offense, though, went unusually quiet in spacious Chase Field, going 0 for 5 with runners in scoring position and managing one runner past third base.
The Padres have lost six of 11 and are just one game ahead of the Giants, who beat Atlanta 3-2 in 11 innings.
"Jon bended a little bit but didn't break," Padres manager Bud Black said. "He made some pitches along the way and got stronger as the game went longer. He pitched very well."
Hudson (2-0) was just better.
Part of a trade-deadline deal that sent right-hander Edwin Jackson to the Chicago White Sox, Hudson had a stellar Diamondbacks debut, holding the Mets to a run and three hits in eight innings on Sunday.
The right-hander was just as sharp in his first new-home start, the lone mistake a hanging breaking ball that Will Venable hit out to right for a homer that tied the game at 1-all in the third. Hudson gave up two singles the rest of the way, leaving after allowing a run in 7 2/3 innings.
Aaron Heilman closed it out, working the ninth for his fifth save in nine chances and eighth straight scoreless outing covering 10 1/3 innings.
"It's certainly not hard to smile after that effort," Diamondbacks interim manager Kirk Gibson said.
Hudson got a little help in the seventh inning from LaRoche, who made a highlight-reel-worthy snag of Chase Headley's grounder by sprawling to his right and getting back to the first-base bag in plenty of time.
Garland's defense picked him up in the second inning with two stellar plays after LaRoche's solo homer.
Shortstop Miguel Tejada had the first one, diving up the middle to snare Rusty Ryal's grounder, then throwing him out from his knees. Three pitches later, second baseman Jerry Hairston Jr. scooped up Gerardo Parra's slow chopper and flipped it to first with his glove.
What hurt Garland, as it has all season, were walks.
The right-hander issued two with two outs in the third inning, setting up Justin Upton's flare RBI single that put Arizona up 2-1. Garland walked the leadoff hitter and hit Ryal in the fourth inning, getting out of that jam with a double play and a strikeout, then worked around two more walks in the fifth and sixth innings.
Garland walked six -- one intentional -- giving him 61 on the season. He allowed two runs and three hits before being lifted for a pinch-hitter to start the eighth.
"You give up runs with two outs; walk, hits anything with two outs is going to kill you," Garland said.
Especially against someone throwing as well as Hudson.
Arizona 3B Mark Reynolds missed his second straight game and will have more tests on Saturday after being struck in the head by a pitch on Tuesday. ... San Diego has lost 13 of its last 17 games at Chase Field. ... Arizona's Stephen Drew was 0 for 3 to see his 12-game hitting streak end.