Further build breakage fixes.

1. Allow the minimum number of linear solver iterations to be zero.
2. Fix conjugate gradients solver's iteration loop to be sane again.

Change-Id: I8594815fec940c2b30e28eb58ec5d8baacf13dae
diff --git a/internal/ceres/conjugate_gradients_solver.cc b/internal/ceres/conjugate_gradients_solver.cc
index d93bcb4..3d8eb0a 100644
--- a/internal/ceres/conjugate_gradients_solver.cc
+++ b/internal/ceres/conjugate_gradients_solver.cc
@@ -114,8 +114,7 @@
   double Q0 = -1.0 * xref.dot(bref + r);
 
   for (summary.num_iterations = 1;
-       (summary.num_iterations > options_.min_num_iterations &&
-        summary.num_iterations < options_.max_num_iterations);
+       summary.num_iterations < options_.max_num_iterations;
        ++summary.num_iterations) {
     // Apply preconditioner
     if (per_solve_options.preconditioner != NULL) {
@@ -208,7 +207,8 @@
     //   124(1-2), 45-59, 2000.
     //
     const double zeta = summary.num_iterations * (Q1 - Q0) / Q1;
-    if (zeta < per_solve_options.q_tolerance) {
+    if (zeta < per_solve_options.q_tolerance &&
+        summary.num_iterations >= options_.min_num_iterations) {
       summary.termination_type = LINEAR_SOLVER_SUCCESS;
       summary.message =
           StringPrintf("Convergence: zeta = %e < %e",
@@ -220,7 +220,8 @@
 
     // Residual based termination.
     norm_r = r. norm();
-    if (norm_r <= tol_r) {
+    if (norm_r <= tol_r &&
+        summary.num_iterations >= options_.min_num_iterations) {
       summary.termination_type = LINEAR_SOLVER_SUCCESS;
       summary.message =
           StringPrintf("Convergence. |r| = %e <= %e.", norm_r, tol_r);
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index 00b8709..5e1a5d2 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -108,7 +108,7 @@
   OPTION_LE_OPTION(min_lm_diagonal, max_lm_diagonal);
   OPTION_GE(max_num_consecutive_invalid_steps, 0);
   OPTION_GT(eta, 0.0);
-  OPTION_GE(min_linear_solver_iterations, 1);
+  OPTION_GE(min_linear_solver_iterations, 0);
   OPTION_GE(max_linear_solver_iterations, 1);
   OPTION_LE_OPTION(min_linear_solver_iterations, max_linear_solver_iterations);