+static int mdd_changelog_max_idle_time_seq_show(struct seq_file *m, void *data)
+{
+ struct mdd_device *mdd = m->private;
+
+ LASSERT(mdd != NULL);
+ seq_printf(m, "%lld\n", mdd->mdd_changelog_max_idle_time);
+ return 0;
+}
+
+static ssize_t
+mdd_changelog_max_idle_time_seq_write(struct file *file,
+ const char __user *buffer, size_t count,
+ loff_t *off)
+{
+ struct seq_file *m = file->private_data;
+ struct mdd_device *mdd = m->private;
+ time64_t val;
+ int rc;
+
+ LASSERT(mdd != NULL);
+
+ rc = kstrtoll_from_user(buffer, count, 0, &val);
+ if (rc)
+ return rc;
+
+ /* XXX may need to limit with reasonable elapsed/idle times */
+ if (val < 1)
+ return -ERANGE;
+
+ mdd->mdd_changelog_max_idle_time = val;
+
+ return count;
+}
+LPROC_SEQ_FOPS(mdd_changelog_max_idle_time);
+
+static int mdd_changelog_max_idle_indexes_seq_show(struct seq_file *m,
+ void *data)
+{
+ struct mdd_device *mdd = m->private;
+
+ LASSERT(mdd != NULL);
+ seq_printf(m, "%lu\n", mdd->mdd_changelog_max_idle_indexes);
+ return 0;
+}
+
+static ssize_t
+mdd_changelog_max_idle_indexes_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off)
+{
+ struct seq_file *m = file->private_data;
+ struct mdd_device *mdd = m->private;
+ unsigned long val;
+ int rc;
+
+ LASSERT(mdd != NULL);
+ rc = kstrtoul_from_user(buffer, count, 0, &val);
+ if (rc)
+ return rc;
+
+ /* XXX may need to limit/check with reasonable elapsed/idle indexes */
+ /* XXX may better allow to specify a % of full ChangeLogs */
+
+ mdd->mdd_changelog_max_idle_indexes = val;
+
+ return count;
+}
+LPROC_SEQ_FOPS(mdd_changelog_max_idle_indexes);
+
+static int mdd_changelog_min_gc_interval_seq_show(struct seq_file *m,
+ void *data)
+{
+ struct mdd_device *mdd = m->private;
+
+ LASSERT(mdd != NULL);
+ seq_printf(m, "%lld\n", mdd->mdd_changelog_min_gc_interval);
+ return 0;
+}
+
+static ssize_t
+mdd_changelog_min_gc_interval_seq_write(struct file *file,
+ const char __user *buffer,
+ size_t count, loff_t *off)
+{
+ struct seq_file *m = file->private_data;
+ struct mdd_device *mdd = m->private;
+ time64_t val;
+ int rc;
+
+ LASSERT(mdd != NULL);
+ rc = kstrtoll_from_user(buffer, count, 0, &val);
+ if (rc)
+ return rc;
+
+ /* XXX may need to limit with reasonable elapsed/interval times */
+ if (val < 1)
+ return -ERANGE;
+
+ mdd->mdd_changelog_min_gc_interval = val;
+
+ return count;