Whamcloud - gitweb
LU-13609 llog: list all the log files correctly on MGS/MDT
[fs/lustre-release.git] / lustre / mgs / mgs_llog.c
index b6fb67f..3025dfb 100644 (file)
@@ -4478,8 +4478,9 @@ int mgs_list_logs(const struct lu_env *env, struct mgs_device *mgs,
 {
        struct list_head         log_list;
        struct mgs_direntry     *dirent, *n;
-       char                    *out, *suffix;
-       int                      l, remains, rc;
+       char                    *out, *suffix, prefix[] = "config_log: ";
+       int                      prefix_len = strlen(prefix);
+       int                      l, remains, start = 0, rc;
 
        ENTRY;
 
@@ -4490,19 +4491,39 @@ int mgs_list_logs(const struct lu_env *env, struct mgs_device *mgs,
 
        out = data->ioc_bulk;
        remains = data->ioc_inllen1;
+       /* OBD_FAIL: fetch the config_log records from the specified one */
+       if (OBD_FAIL_CHECK(OBD_FAIL_CATLIST))
+               data->ioc_count = cfs_fail_val;
+
        list_for_each_entry_safe(dirent, n, &log_list, mde_list) {
                list_del_init(&dirent->mde_list);
                suffix = strrchr(dirent->mde_name, '-');
                if (suffix != NULL) {
-                       l = scnprintf(out, remains, "config_log: %s\n",
+                       l = prefix_len + dirent->mde_len + 1;
+                       if (remains - 1 < 0) {
+                               /* No enough space for this record */
+                               mgs_direntry_free(dirent);
+                               goto out;
+                       }
+                       start++;
+                       if (start < data->ioc_count) {
+                               mgs_direntry_free(dirent);
+                                       continue;
+                       }
+                       l = scnprintf(out, remains, "%s%s\n", prefix,
                                      dirent->mde_name);
                        out += l;
                        remains -= l;
                }
                mgs_direntry_free(dirent);
-               if (remains <= 0)
-                       break;
+               if (remains == 0)
+                       /* Full */
+                       goto out;
        }
+       /* Finished */
+       start = 0;
+out:
+       data->ioc_count = start;
        RETURN(rc);
 }
 
@@ -4920,7 +4941,7 @@ static int mgs_xattr_del(const struct lu_env *env, struct dt_object *obj)
 
        ENTRY;
 
-       dev = container_of0(obj->do_lu.lo_dev, struct dt_device, dd_lu_dev);
+       dev = container_of(obj->do_lu.lo_dev, struct dt_device, dd_lu_dev);
        th = dt_trans_create(env, dev);
        if (IS_ERR(th))
                RETURN(PTR_ERR(th));
@@ -5436,6 +5457,12 @@ int mgs_nodemap_cmd(const struct lu_env *env, struct mgs_device *mgs,
                if (rc == 0)
                        rc = nodemap_set_audit_mode(nodemap_name, bool_switch);
                break;
+       case LCFG_NODEMAP_FORBID_ENCRYPT:
+               rc = kstrtobool(param, &bool_switch);
+               if (rc == 0)
+                       rc = nodemap_set_forbid_encryption(nodemap_name,
+                                                          bool_switch);
+               break;
        case LCFG_NODEMAP_MAP_MODE:
                if (strcmp("both", param) == 0)
                        rc = nodemap_set_mapping_mode(nodemap_name,