Smith, 31, was traded to San Diego by the Oakland A's last winter and is making $4.5 million this year. His new contract will pay him $13 million over two years.
Smith is having a career year this season for the Padres, despite playing in pitcher-friendly Petco Park. He has played in 72 of the team's 80 games and is batting .281 with a .384 on base percentage.
Smith would have been a free agent after this season, and was also subject to trade rumors.