Whamcloud - gitweb
LU-13756 quota: up_read leak in qmt_pool_lookup
[fs/lustre-release.git] / lustre / quota / qmt_pool.c
index 5f9d98a..37bb488 100644 (file)
@@ -383,7 +383,7 @@ struct qmt_pool_info *qmt_pool_lookup(const struct lu_env *env,
                                             int idx, bool add)
 {
        struct qmt_pool_info    *pos, *pool;
-       int rc;
+       int rc = 0;
        ENTRY;
 
        down_read(&qmt->qmt_pool_lock);
@@ -409,7 +409,7 @@ struct qmt_pool_info *qmt_pool_lookup(const struct lu_env *env,
                if (idx >= 0 && !qmt_sarr_check_idx(pos, idx)) {
                        rc = qti_pools_add(env, pos);
                        if (rc)
-                               GOTO(out_err, rc);
+                               break;
                        continue;
                }
 
@@ -419,7 +419,7 @@ struct qmt_pool_info *qmt_pool_lookup(const struct lu_env *env,
                        if (add) {
                                rc = qti_pools_add(env, pos);
                                if (rc)
-                                       GOTO(out_err, rc);
+                                       break;
                        } else {
                                qpi_getref(pool);
                        }
@@ -428,6 +428,9 @@ struct qmt_pool_info *qmt_pool_lookup(const struct lu_env *env,
        }
        up_read(&qmt->qmt_pool_lock);
 
+       if (rc)
+               GOTO(out_err, rc);
+
        if (idx >= 0 && qti_pools_cnt(env))
                pool = qti_pools_env(env)[0];
 
@@ -435,7 +438,7 @@ struct qmt_pool_info *qmt_pool_lookup(const struct lu_env *env,
 out_err:
        CERROR("%s: cannot add pool %s: err = %d\n",
                qmt->qmt_svname, pos->qpi_name, rc);
-       RETURN(ERR_PTR(rc));
+       return ERR_PTR(rc);
 }
 
 /*