diff options
| -rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-op-sm.c | 54 | 
1 files changed, 39 insertions, 15 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c index 3354e78e789..d43454510b5 100644 --- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c +++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c @@ -4735,8 +4735,13 @@ out:          return ret;  } +/* At the end of the function, the variable found will be set + * to true if the path to be removed was present in the limit-list, + * else will be false. + */  int32_t -_glusterd_quota_remove_limits (char **quota_limits, char *path) +_glusterd_quota_remove_limits (char **quota_limits, char *path, +                               gf_boolean_t *found)  {          int      ret      = 0;          int      i        = 0; @@ -4748,6 +4753,9 @@ _glusterd_quota_remove_limits (char **quota_limits, char *path)          char    *limits   = NULL;          char    *qlimits  = NULL; +        if (found != NULL) +                *found = _gf_false; +          if (*quota_limits == NULL)                  return -1; @@ -4758,14 +4766,16 @@ _glusterd_quota_remove_limits (char **quota_limits, char *path)          len = strlen (qlimits);          limits = GF_CALLOC (len + 1, sizeof (char), gf_gld_mt_char); -          if (!limits)                  return -1;          while (i < len) {                  if (!memcmp ((void *) &qlimits [i], (void *)path, pathlen)) -                        if (qlimits [i + pathlen] == ':') +                        if (qlimits [i + pathlen] == ':') {                                  flag = 1; +                                if (found != NULL) +                                        *found = _gf_true; +                        }                  while (qlimits [i + size] != ',' &&                         qlimits [i + size] != '\0') @@ -4951,7 +4961,7 @@ _glusterd_quota_get_limit_usages (glusterd_volinfo_t *volinfo,                  return NULL;          if (quota_limits == NULL) {                  ret_str = NULL; -                *op_errstr = gf_strdup ("Limits not set any directory"); +                *op_errstr = gf_strdup ("Limit not set on any directory");          } else if (path == NULL)                  ret_str = gf_strdup (quota_limits);          else @@ -4984,7 +4994,8 @@ glusterd_quota_get_limit_usages (glusterd_conf_t *priv,                  goto out;          if (count == 0) { -                ret_str = _glusterd_quota_get_limit_usages (volinfo, NULL, op_errstr); +                ret_str = _glusterd_quota_get_limit_usages (volinfo, NULL, +                                                            op_errstr);          } else {                  i = 0;                  while (count--) { @@ -5134,7 +5145,7 @@ glusterd_quota_limit_usage (glusterd_volinfo_t *volinfo, dict_t *dict, char **op          }          if (quota_limits) { -                ret = _glusterd_quota_remove_limits ("a_limits, path); +                ret = _glusterd_quota_remove_limits ("a_limits, path, NULL);                  if (ret == -1) {                          gf_log ("", GF_LOG_ERROR, "Unable to allocate memory");                          *op_errstr = gf_strdup ("failed to set limit"); @@ -5181,18 +5192,21 @@ out:  int32_t  glusterd_quota_remove_limits (glusterd_volinfo_t *volinfo, dict_t *dict, char **op_errstr)  { -        int32_t         ret     = -1; +        int32_t         ret                   = -1;          char            str [PATH_MAX + 1024] = {0,}; -        char            *quota_limits = NULL; -        char            *path   = NULL; +        char            *quota_limits         = NULL; +        char            *path                 = NULL; +        gf_boolean_t     flag                 = _gf_false;          GF_VALIDATE_OR_GOTO ("glusterd", dict, out);          GF_VALIDATE_OR_GOTO ("glusterd", volinfo, out);          GF_VALIDATE_OR_GOTO ("glusterd", op_errstr, out);          ret = glusterd_check_if_quota_trans_enabled (volinfo); -        if (ret == -1) +        if (ret == -1) { +                *op_errstr = gf_strdup ("Quota is disabled, please enable quota");                  goto out; +        }          ret = glusterd_volinfo_get (volinfo, VKEY_FEATURES_LIMIT_USAGE,                                      "a_limits); @@ -5207,13 +5221,22 @@ glusterd_quota_remove_limits (glusterd_volinfo_t *volinfo, dict_t *dict, char **                  goto out;          } -        ret = _glusterd_quota_remove_limits ("a_limits, path); +        ret = _glusterd_quota_remove_limits ("a_limits, path, &flag);          if (ret == -1) { -                snprintf (str, sizeof (str), "Removing limit on %s has been unsuccessful", path); +                if (flag == _gf_true) +                        snprintf (str, sizeof (str), "Removing limit on %s has " +                                  "been unsuccessful", path); +                else +                        snprintf (str, sizeof (str), "%s has no limit set", path);                  *op_errstr = gf_strdup (str);                  goto out;          } else { -                snprintf (str, sizeof (str), "Removed quota limit on %s", path); +                if (flag == _gf_true) +                        snprintf (str, sizeof (str), "Removed quota limit on " +                                  "%s", path); +                else +                        snprintf (str, sizeof (str), "no limit set on %s", +                                  path);                  *op_errstr = gf_strdup (str);          } @@ -5301,11 +5324,12 @@ glusterd_op_quota (dict_t *dict, char **op_errstr)                  ret = glusterd_check_if_quota_trans_enabled (volinfo);                  if (ret == -1) {                          *op_errstr = gf_strdup ("cannot list the limits, " -                                                "quota feature is disabled"); +                                                "quota is disabled");                          goto out;                  } -                glusterd_quota_get_limit_usages (priv, volinfo, volname, dict, op_errstr); +                ret = glusterd_quota_get_limit_usages (priv, volinfo, volname, +                                                       dict, op_errstr);                  goto out;          }  | 
